From 39c0e2c2ffa40e3cecfb58b8c54528a7766c4f6f Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 18 Apr 2018 22:45:40 +0200 Subject: [PATCH] fix simd opcode size --- ChocolArm64/Instruction/AInstEmitSimdArithmetic.cs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/ChocolArm64/Instruction/AInstEmitSimdArithmetic.cs b/ChocolArm64/Instruction/AInstEmitSimdArithmetic.cs index 39450c2477..6b65c15616 100644 --- a/ChocolArm64/Instruction/AInstEmitSimdArithmetic.cs +++ b/ChocolArm64/Instruction/AInstEmitSimdArithmetic.cs @@ -254,6 +254,7 @@ namespace ChocolArm64.Instruction public static void Fmin_S(AILEmitterCtx Context) { AOpCodeSimd Op = (AOpCodeSimd)Context.CurrOp; + EmitScalarBinaryOpF(Context, () => { if (Op.Size == 0) @@ -275,13 +276,15 @@ namespace ChocolArm64.Instruction { AOpCodeSimd Op = (AOpCodeSimd)Context.CurrOp; + int SizeF = Op.Size & 1; + EmitVectorBinaryOpF(Context, () => { - if (Op.Size == 2) + if (SizeF == 0) { ASoftFallback.EmitCall(Context, nameof(ASoftFallback.MinF)); } - else if (Op.Size == 3) + else if (SizeF == 1) { ASoftFallback.EmitCall(Context, nameof(ASoftFallback.Min)); } @@ -577,17 +580,19 @@ namespace ChocolArm64.Instruction { AOpCodeSimd Op = (AOpCodeSimd)Context.CurrOp; + int SizeF = Op.Size & 1; + EmitVectorUnaryOpF(Context, () => { Context.EmitLdarg(ATranslatedSub.StateArgIdx); Context.EmitCallPropGet(typeof(AThreadState), nameof(AThreadState.Fpcr)); - if (Op.Size == 2) + if (SizeF == 0) { ASoftFallback.EmitCall(Context, nameof(ASoftFallback.RoundF)); } - else if (Op.Size == 3) + else if (SizeF == 1) { ASoftFallback.EmitCall(Context, nameof(ASoftFallback.Round)); }