Update AInstEmitSimdArithmetic.cs
This commit is contained in:
parent
0ad7c8636a
commit
75f1aaf6b6
1 changed files with 76 additions and 16 deletions
|
@ -1042,6 +1042,28 @@ namespace ChocolArm64.Instruction
|
||||||
EmitVectorWidenRmBinaryOpSx(Context, () => Context.Emit(OpCodes.Add));
|
EmitVectorWidenRmBinaryOpSx(Context, () => Context.Emit(OpCodes.Add));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void Shadd_V(AILEmitterCtx Context)
|
||||||
|
{
|
||||||
|
EmitVectorBinaryOpSx(Context, () =>
|
||||||
|
{
|
||||||
|
Context.Emit(OpCodes.Add);
|
||||||
|
|
||||||
|
Context.Emit(OpCodes.Ldc_I4_1);
|
||||||
|
Context.Emit(OpCodes.Shr);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void Shsub_V(AILEmitterCtx Context)
|
||||||
|
{
|
||||||
|
EmitVectorBinaryOpSx(Context, () =>
|
||||||
|
{
|
||||||
|
Context.Emit(OpCodes.Sub);
|
||||||
|
|
||||||
|
Context.Emit(OpCodes.Ldc_I4_1);
|
||||||
|
Context.Emit(OpCodes.Shr);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
public static void Smax_V(AILEmitterCtx Context)
|
public static void Smax_V(AILEmitterCtx Context)
|
||||||
{
|
{
|
||||||
Type[] Types = new Type[] { typeof(long), typeof(long) };
|
Type[] Types = new Type[] { typeof(long), typeof(long) };
|
||||||
|
@ -1181,6 +1203,20 @@ namespace ChocolArm64.Instruction
|
||||||
EmitVectorSaturatingNarrowOpSxZx(Context, () => { });
|
EmitVectorSaturatingNarrowOpSxZx(Context, () => { });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void Srhadd_V(AILEmitterCtx Context)
|
||||||
|
{
|
||||||
|
EmitVectorBinaryOpSx(Context, () =>
|
||||||
|
{
|
||||||
|
Context.Emit(OpCodes.Add);
|
||||||
|
|
||||||
|
Context.Emit(OpCodes.Ldc_I4_1);
|
||||||
|
Context.Emit(OpCodes.Add);
|
||||||
|
|
||||||
|
Context.Emit(OpCodes.Ldc_I4_1);
|
||||||
|
Context.Emit(OpCodes.Shr);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
public static void Ssubw_V(AILEmitterCtx Context)
|
public static void Ssubw_V(AILEmitterCtx Context)
|
||||||
{
|
{
|
||||||
EmitVectorWidenRmBinaryOpSx(Context, () => Context.Emit(OpCodes.Sub));
|
EmitVectorWidenRmBinaryOpSx(Context, () => Context.Emit(OpCodes.Sub));
|
||||||
|
@ -1303,28 +1339,20 @@ namespace ChocolArm64.Instruction
|
||||||
{
|
{
|
||||||
Context.Emit(OpCodes.Add);
|
Context.Emit(OpCodes.Add);
|
||||||
|
|
||||||
Context.EmitLdc_I4(1);
|
Context.Emit(OpCodes.Ldc_I4_1);
|
||||||
|
|
||||||
Context.Emit(OpCodes.Shr_Un);
|
Context.Emit(OpCodes.Shr_Un);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void Umin_V(AILEmitterCtx Context)
|
public static void Uhsub_V(AILEmitterCtx Context)
|
||||||
{
|
{
|
||||||
Type[] Types = new Type[] { typeof(ulong), typeof(ulong) };
|
EmitVectorBinaryOpZx(Context, () =>
|
||||||
|
{
|
||||||
|
Context.Emit(OpCodes.Sub);
|
||||||
|
|
||||||
MethodInfo MthdInfo = typeof(Math).GetMethod(nameof(Math.Min), Types);
|
Context.Emit(OpCodes.Ldc_I4_1);
|
||||||
|
Context.Emit(OpCodes.Shr_Un);
|
||||||
EmitVectorBinaryOpZx(Context, () => Context.EmitCall(MthdInfo));
|
});
|
||||||
}
|
|
||||||
|
|
||||||
public static void Uminp_V(AILEmitterCtx Context)
|
|
||||||
{
|
|
||||||
Type[] Types = new Type[] { typeof(ulong), typeof(ulong) };
|
|
||||||
|
|
||||||
MethodInfo MthdInfo = typeof(Math).GetMethod(nameof(Math.Min), Types);
|
|
||||||
|
|
||||||
EmitVectorPairwiseOpZx(Context, () => Context.EmitCall(MthdInfo));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void Umax_V(AILEmitterCtx Context)
|
public static void Umax_V(AILEmitterCtx Context)
|
||||||
|
@ -1345,6 +1373,24 @@ namespace ChocolArm64.Instruction
|
||||||
EmitVectorPairwiseOpZx(Context, () => Context.EmitCall(MthdInfo));
|
EmitVectorPairwiseOpZx(Context, () => Context.EmitCall(MthdInfo));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void Umin_V(AILEmitterCtx Context)
|
||||||
|
{
|
||||||
|
Type[] Types = new Type[] { typeof(ulong), typeof(ulong) };
|
||||||
|
|
||||||
|
MethodInfo MthdInfo = typeof(Math).GetMethod(nameof(Math.Min), Types);
|
||||||
|
|
||||||
|
EmitVectorBinaryOpZx(Context, () => Context.EmitCall(MthdInfo));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void Uminp_V(AILEmitterCtx Context)
|
||||||
|
{
|
||||||
|
Type[] Types = new Type[] { typeof(ulong), typeof(ulong) };
|
||||||
|
|
||||||
|
MethodInfo MthdInfo = typeof(Math).GetMethod(nameof(Math.Min), Types);
|
||||||
|
|
||||||
|
EmitVectorPairwiseOpZx(Context, () => Context.EmitCall(MthdInfo));
|
||||||
|
}
|
||||||
|
|
||||||
public static void Umull_V(AILEmitterCtx Context)
|
public static void Umull_V(AILEmitterCtx Context)
|
||||||
{
|
{
|
||||||
EmitVectorWidenRnRmBinaryOpZx(Context, () => Context.Emit(OpCodes.Mul));
|
EmitVectorWidenRnRmBinaryOpZx(Context, () => Context.Emit(OpCodes.Mul));
|
||||||
|
@ -1380,6 +1426,20 @@ namespace ChocolArm64.Instruction
|
||||||
EmitVectorSaturatingNarrowOpZxZx(Context, () => { });
|
EmitVectorSaturatingNarrowOpZxZx(Context, () => { });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void Urhadd_V(AILEmitterCtx Context)
|
||||||
|
{
|
||||||
|
EmitVectorBinaryOpZx(Context, () =>
|
||||||
|
{
|
||||||
|
Context.Emit(OpCodes.Add);
|
||||||
|
|
||||||
|
Context.Emit(OpCodes.Ldc_I4_1);
|
||||||
|
Context.Emit(OpCodes.Add);
|
||||||
|
|
||||||
|
Context.Emit(OpCodes.Ldc_I4_1);
|
||||||
|
Context.Emit(OpCodes.Shr_Un);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
public static void Usqadd_S(AILEmitterCtx Context)
|
public static void Usqadd_S(AILEmitterCtx Context)
|
||||||
{
|
{
|
||||||
EmitScalarSaturatingBinaryOpZx(Context, SaturatingFlags.Accumulate);
|
EmitScalarSaturatingBinaryOpZx(Context, SaturatingFlags.Accumulate);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue