diff --git a/ChocolArm64/Instruction/AVectorHelper.cs b/ChocolArm64/Instruction/AVectorHelper.cs index 1a213592..dbfaab75 100644 --- a/ChocolArm64/Instruction/AVectorHelper.cs +++ b/ChocolArm64/Instruction/AVectorHelper.cs @@ -422,6 +422,15 @@ namespace ChocolArm64.Instruction { return Sse41.Extract(Vector, Index); } + else if (Sse2.IsSupported) + { + Vector128 ShortVector = Sse.StaticCast(Vector); + + int Low = Sse2.Extract(ShortVector, (byte)(Index * 2 + 0)); + int High = Sse2.Extract(ShortVector, (byte)(Index * 2 + 1)); + + return BitConverter.Int32BitsToSingle(Low | (High << 16)); + } throw new PlatformNotSupportedException(); } @@ -509,6 +518,20 @@ namespace ChocolArm64.Instruction { return Sse41.Insert(Vector, Value, (byte)(Index << 4)); } + else if (Sse2.IsSupported) + { + int IntValue = BitConverter.SingleToInt32Bits(Value); + + ushort Low = (ushort)(IntValue >> 0); + ushort High = (ushort)(IntValue >> 16); + + Vector128 ShortVector = Sse.StaticCast(Vector); + + ShortVector = Sse2.Insert(ShortVector, Low, (byte)(Index * 2 + 0)); + ShortVector = Sse2.Insert(ShortVector, High, (byte)(Index * 2 + 1)); + + return Sse.StaticCast(ShortVector); + } throw new PlatformNotSupportedException(); }