From 36d9130592c7d45d50d9748f816b282c05e45967 Mon Sep 17 00:00:00 2001 From: gdkchan <gab.dark.100@gmail.com> Date: Fri, 6 Apr 2018 01:41:54 -0300 Subject: [PATCH] Add FMLS (vector) instruction --- ChocolArm64/AOpCodeTable.cs | 2 ++ .../Instruction/AInstEmitSimdArithmetic.cs | 18 +++++++++++++++++ ChocolArm64/Instruction/AInstEmitSimdCmp.cs | 20 ------------------- 3 files changed, 20 insertions(+), 20 deletions(-) diff --git a/ChocolArm64/AOpCodeTable.cs b/ChocolArm64/AOpCodeTable.cs index 483594e2f..b323a112b 100644 --- a/ChocolArm64/AOpCodeTable.cs +++ b/ChocolArm64/AOpCodeTable.cs @@ -213,6 +213,8 @@ namespace ChocolArm64 Set("000111100x1xxxxx011110xxxxxxxxxx", AInstEmit.Fminnm_S, typeof(AOpCodeSimdReg)); Set("0>0011100<1xxxxx110011xxxxxxxxxx", AInstEmit.Fmla_V, typeof(AOpCodeSimdReg)); Set("0x0011111<<xxxxx0001x0xxxxxxxxxx", AInstEmit.Fmla_Ve, typeof(AOpCodeSimdRegElemF)); + Set("0>0011101<1xxxxx110011xxxxxxxxxx", AInstEmit.Fmls_V, typeof(AOpCodeSimdReg)); + Set("0x0011111<<xxxxx0101x0xxxxxxxxxx", AInstEmit.Fmls_Ve, typeof(AOpCodeSimdRegElemF)); Set("000111100x100000010000xxxxxxxxxx", AInstEmit.Fmov_S, typeof(AOpCodeSimd)); Set("00011110xx1xxxxxxxx100xxxxxxxxxx", AInstEmit.Fmov_Si, typeof(AOpCodeSimdFmov)); Set("0xx0111100000xxx111101xxxxxxxxxx", AInstEmit.Fmov_V, typeof(AOpCodeSimdImm)); diff --git a/ChocolArm64/Instruction/AInstEmitSimdArithmetic.cs b/ChocolArm64/Instruction/AInstEmitSimdArithmetic.cs index 9fb33878e..772b7955c 100644 --- a/ChocolArm64/Instruction/AInstEmitSimdArithmetic.cs +++ b/ChocolArm64/Instruction/AInstEmitSimdArithmetic.cs @@ -224,6 +224,24 @@ namespace ChocolArm64.Instruction }); } + public static void Fmls_V(AILEmitterCtx Context) + { + EmitVectorTernaryOpF(Context, () => + { + Context.Emit(OpCodes.Mul); + Context.Emit(OpCodes.Sub); + }); + } + + public static void Fmls_Ve(AILEmitterCtx Context) + { + EmitVectorTernaryOpByElemF(Context, () => + { + Context.Emit(OpCodes.Mul); + Context.Emit(OpCodes.Sub); + }); + } + public static void Fmsub_S(AILEmitterCtx Context) { EmitScalarTernaryRaOpF(Context, () => diff --git a/ChocolArm64/Instruction/AInstEmitSimdCmp.cs b/ChocolArm64/Instruction/AInstEmitSimdCmp.cs index 43e8e9493..a71b6d42f 100644 --- a/ChocolArm64/Instruction/AInstEmitSimdCmp.cs +++ b/ChocolArm64/Instruction/AInstEmitSimdCmp.cs @@ -140,26 +140,6 @@ namespace ChocolArm64.Instruction EmitVectorFcmp(Context, OpCodes.Bgt_S); } - public static void Fcmhi_S(AILEmitterCtx Context) - { - EmitScalarFcmp(Context, OpCodes.Bgt_Un_S); - } - - public static void Fcmhi_V(AILEmitterCtx Context) - { - EmitVectorFcmp(Context, OpCodes.Bgt_Un_S); - } - - public static void Fcmhs_S(AILEmitterCtx Context) - { - EmitScalarFcmp(Context, OpCodes.Bge_Un_S); - } - - public static void Fcmhs_V(AILEmitterCtx Context) - { - EmitVectorFcmp(Context, OpCodes.Bge_Un_S); - } - public static void Fcmle_S(AILEmitterCtx Context) { EmitScalarFcmp(Context, OpCodes.Ble_S);