Add FMLS (vector) instruction

This commit is contained in:
gdkchan 2018-04-06 01:41:54 -03:00
parent b73b522835
commit 35ff142104
3 changed files with 20 additions and 20 deletions

View file

@ -213,6 +213,8 @@ namespace ChocolArm64
Set("000111100x1xxxxx011110xxxxxxxxxx", AInstEmit.Fminnm_S, typeof(AOpCodeSimdReg)); Set("000111100x1xxxxx011110xxxxxxxxxx", AInstEmit.Fminnm_S, typeof(AOpCodeSimdReg));
Set("0>0011100<1xxxxx110011xxxxxxxxxx", AInstEmit.Fmla_V, typeof(AOpCodeSimdReg)); Set("0>0011100<1xxxxx110011xxxxxxxxxx", AInstEmit.Fmla_V, typeof(AOpCodeSimdReg));
Set("0x0011111<<xxxxx0001x0xxxxxxxxxx", AInstEmit.Fmla_Ve, typeof(AOpCodeSimdRegElemF)); 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("000111100x100000010000xxxxxxxxxx", AInstEmit.Fmov_S, typeof(AOpCodeSimd));
Set("00011110xx1xxxxxxxx100xxxxxxxxxx", AInstEmit.Fmov_Si, typeof(AOpCodeSimdFmov)); Set("00011110xx1xxxxxxxx100xxxxxxxxxx", AInstEmit.Fmov_Si, typeof(AOpCodeSimdFmov));
Set("0xx0111100000xxx111101xxxxxxxxxx", AInstEmit.Fmov_V, typeof(AOpCodeSimdImm)); Set("0xx0111100000xxx111101xxxxxxxxxx", AInstEmit.Fmov_V, typeof(AOpCodeSimdImm));

View file

@ -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) public static void Fmsub_S(AILEmitterCtx Context)
{ {
EmitScalarTernaryRaOpF(Context, () => EmitScalarTernaryRaOpF(Context, () =>

View file

@ -140,26 +140,6 @@ namespace ChocolArm64.Instruction
EmitVectorFcmp(Context, OpCodes.Bgt_S); 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) public static void Fcmle_S(AILEmitterCtx Context)
{ {
EmitScalarFcmp(Context, OpCodes.Ble_S); EmitScalarFcmp(Context, OpCodes.Ble_S);