فهرست منبع

Add the FADDP (scalar) instruction

gdkchan 7 سال پیش
والد
کامیت
b747b23607
2فایلهای تغییر یافته به همراه15 افزوده شده و 0 حذف شده
  1. 1 0
      ChocolArm64/AOpCodeTable.cs
  2. 14 0
      ChocolArm64/Instruction/AInstEmitSimdArithmetic.cs

+ 1 - 0
ChocolArm64/AOpCodeTable.cs

@@ -209,6 +209,7 @@ namespace ChocolArm64
             SetA64("0>0011101<100000111110xxxxxxxxxx", AInstEmit.Fabs_V,        typeof(AOpCodeSimd));
             SetA64("0>0011101<100000111110xxxxxxxxxx", AInstEmit.Fabs_V,        typeof(AOpCodeSimd));
             SetA64("000111100x1xxxxx001010xxxxxxxxxx", AInstEmit.Fadd_S,        typeof(AOpCodeSimdReg));
             SetA64("000111100x1xxxxx001010xxxxxxxxxx", AInstEmit.Fadd_S,        typeof(AOpCodeSimdReg));
             SetA64("0>0011100<1xxxxx110101xxxxxxxxxx", AInstEmit.Fadd_V,        typeof(AOpCodeSimdReg));
             SetA64("0>0011100<1xxxxx110101xxxxxxxxxx", AInstEmit.Fadd_V,        typeof(AOpCodeSimdReg));
+            SetA64("011111100x110000110110xxxxxxxxxx", AInstEmit.Faddp_S,       typeof(AOpCodeSimd));
             SetA64("0>1011100<1xxxxx110101xxxxxxxxxx", AInstEmit.Faddp_V,       typeof(AOpCodeSimdReg));
             SetA64("0>1011100<1xxxxx110101xxxxxxxxxx", AInstEmit.Faddp_V,       typeof(AOpCodeSimdReg));
             SetA64("000111100x1xxxxxxxxx01xxxxx0xxxx", AInstEmit.Fccmp_S,       typeof(AOpCodeSimdFcond));
             SetA64("000111100x1xxxxxxxxx01xxxxx0xxxx", AInstEmit.Fccmp_S,       typeof(AOpCodeSimdFcond));
             SetA64("000111100x1xxxxxxxxx01xxxxx1xxxx", AInstEmit.Fccmpe_S,      typeof(AOpCodeSimdFcond));
             SetA64("000111100x1xxxxxxxxx01xxxxx1xxxx", AInstEmit.Fccmpe_S,      typeof(AOpCodeSimdFcond));

+ 14 - 0
ChocolArm64/Instruction/AInstEmitSimdArithmetic.cs

@@ -341,6 +341,20 @@ namespace ChocolArm64.Instruction
             }
             }
         }
         }
 
 
+        public static void Faddp_S(AILEmitterCtx Context)
+        {
+            AOpCodeSimd Op = (AOpCodeSimd)Context.CurrOp;
+
+            int SizeF = Op.Size & 1;
+
+            EmitVectorExtractF(Context, Op.Rn, 0, SizeF);
+            EmitVectorExtractF(Context, Op.Rn, 1, SizeF);
+
+            Context.Emit(OpCodes.Add);
+
+            EmitScalarSetF(Context, Op.Rd, SizeF);
+        }
+
         public static void Faddp_V(AILEmitterCtx Context)
         public static void Faddp_V(AILEmitterCtx Context)
         {
         {
             AOpCodeSimdReg Op = (AOpCodeSimdReg)Context.CurrOp;
             AOpCodeSimdReg Op = (AOpCodeSimdReg)Context.CurrOp;