aboutsummaryrefslogtreecommitdiff
path: root/ChocolArm64/Instructions/InstEmitSimdHelper.cs
diff options
context:
space:
mode:
Diffstat (limited to 'ChocolArm64/Instructions/InstEmitSimdHelper.cs')
-rw-r--r--ChocolArm64/Instructions/InstEmitSimdHelper.cs22
1 files changed, 18 insertions, 4 deletions
diff --git a/ChocolArm64/Instructions/InstEmitSimdHelper.cs b/ChocolArm64/Instructions/InstEmitSimdHelper.cs
index 573b8040..c8c8df74 100644
--- a/ChocolArm64/Instructions/InstEmitSimdHelper.cs
+++ b/ChocolArm64/Instructions/InstEmitSimdHelper.cs
@@ -823,15 +823,29 @@ namespace ChocolArm64.Instructions
public static void EmitVectorAcrossVectorOpSx(ILEmitterCtx context, Action emit)
{
- EmitVectorAcrossVectorOp(context, emit, true);
+ EmitVectorAcrossVectorOp(context, emit, signed: true, isLong: false);
}
public static void EmitVectorAcrossVectorOpZx(ILEmitterCtx context, Action emit)
{
- EmitVectorAcrossVectorOp(context, emit, false);
+ EmitVectorAcrossVectorOp(context, emit, signed: false, isLong: false);
}
- public static void EmitVectorAcrossVectorOp(ILEmitterCtx context, Action emit, bool signed)
+ public static void EmitVectorLongAcrossVectorOpSx(ILEmitterCtx context, Action emit)
+ {
+ EmitVectorAcrossVectorOp(context, emit, signed: true, isLong: true);
+ }
+
+ public static void EmitVectorLongAcrossVectorOpZx(ILEmitterCtx context, Action emit)
+ {
+ EmitVectorAcrossVectorOp(context, emit, signed: false, isLong: true);
+ }
+
+ public static void EmitVectorAcrossVectorOp(
+ ILEmitterCtx context,
+ Action emit,
+ bool signed,
+ bool isLong)
{
OpCodeSimd64 op = (OpCodeSimd64)context.CurrOp;
@@ -847,7 +861,7 @@ namespace ChocolArm64.Instructions
emit();
}
- EmitScalarSet(context, op.Rd, op.Size);
+ EmitScalarSet(context, op.Rd, isLong ? op.Size + 1 : op.Size);
}
public static void EmitVectorPairwiseOpF(ILEmitterCtx context, Action emit)