Update AInstEmitSimdArithmetic.cs
This commit is contained in:
parent
e2354d695c
commit
b9b89bad2f
1 changed files with 58 additions and 19 deletions
|
@ -174,7 +174,8 @@ namespace ChocolArm64.Instruction
|
||||||
|
|
||||||
public static void Fadd_S(AILEmitterCtx Context)
|
public static void Fadd_S(AILEmitterCtx Context)
|
||||||
{
|
{
|
||||||
if (AOptimizations.UseSse && AOptimizations.UseSse2)
|
if (AOptimizations.FastFP && AOptimizations.UseSse
|
||||||
|
&& AOptimizations.UseSse2)
|
||||||
{
|
{
|
||||||
EmitScalarSseOrSse2OpF(Context, nameof(Sse.AddScalar));
|
EmitScalarSseOrSse2OpF(Context, nameof(Sse.AddScalar));
|
||||||
}
|
}
|
||||||
|
@ -189,7 +190,8 @@ namespace ChocolArm64.Instruction
|
||||||
|
|
||||||
public static void Fadd_V(AILEmitterCtx Context)
|
public static void Fadd_V(AILEmitterCtx Context)
|
||||||
{
|
{
|
||||||
if (AOptimizations.UseSse && AOptimizations.UseSse2)
|
if (AOptimizations.FastFP && AOptimizations.UseSse
|
||||||
|
&& AOptimizations.UseSse2)
|
||||||
{
|
{
|
||||||
EmitVectorSseOrSse2OpF(Context, nameof(Sse.Add));
|
EmitVectorSseOrSse2OpF(Context, nameof(Sse.Add));
|
||||||
}
|
}
|
||||||
|
@ -223,7 +225,8 @@ namespace ChocolArm64.Instruction
|
||||||
|
|
||||||
public static void Fdiv_S(AILEmitterCtx Context)
|
public static void Fdiv_S(AILEmitterCtx Context)
|
||||||
{
|
{
|
||||||
if (AOptimizations.UseSse && AOptimizations.UseSse2)
|
if (AOptimizations.FastFP && AOptimizations.UseSse
|
||||||
|
&& AOptimizations.UseSse2)
|
||||||
{
|
{
|
||||||
EmitScalarSseOrSse2OpF(Context, nameof(Sse.DivideScalar));
|
EmitScalarSseOrSse2OpF(Context, nameof(Sse.DivideScalar));
|
||||||
}
|
}
|
||||||
|
@ -238,7 +241,8 @@ namespace ChocolArm64.Instruction
|
||||||
|
|
||||||
public static void Fdiv_V(AILEmitterCtx Context)
|
public static void Fdiv_V(AILEmitterCtx Context)
|
||||||
{
|
{
|
||||||
if (AOptimizations.UseSse && AOptimizations.UseSse2)
|
if (AOptimizations.FastFP && AOptimizations.UseSse
|
||||||
|
&& AOptimizations.UseSse2)
|
||||||
{
|
{
|
||||||
EmitVectorSseOrSse2OpF(Context, nameof(Sse.Divide));
|
EmitVectorSseOrSse2OpF(Context, nameof(Sse.Divide));
|
||||||
}
|
}
|
||||||
|
@ -253,7 +257,7 @@ namespace ChocolArm64.Instruction
|
||||||
|
|
||||||
public static void Fmadd_S(AILEmitterCtx Context)
|
public static void Fmadd_S(AILEmitterCtx Context)
|
||||||
{
|
{
|
||||||
if (AOptimizations.UseSse2)
|
if (AOptimizations.FastFP && AOptimizations.UseSse2)
|
||||||
{
|
{
|
||||||
AOpCodeSimdReg Op = (AOpCodeSimdReg)Context.CurrOp;
|
AOpCodeSimdReg Op = (AOpCodeSimdReg)Context.CurrOp;
|
||||||
|
|
||||||
|
@ -299,7 +303,8 @@ namespace ChocolArm64.Instruction
|
||||||
|
|
||||||
public static void Fmax_S(AILEmitterCtx Context)
|
public static void Fmax_S(AILEmitterCtx Context)
|
||||||
{
|
{
|
||||||
if (AOptimizations.UseSse && AOptimizations.UseSse2)
|
if (AOptimizations.FastFP && AOptimizations.UseSse
|
||||||
|
&& AOptimizations.UseSse2)
|
||||||
{
|
{
|
||||||
EmitScalarSseOrSse2OpF(Context, nameof(Sse.MaxScalar));
|
EmitScalarSseOrSse2OpF(Context, nameof(Sse.MaxScalar));
|
||||||
}
|
}
|
||||||
|
@ -314,7 +319,8 @@ namespace ChocolArm64.Instruction
|
||||||
|
|
||||||
public static void Fmax_V(AILEmitterCtx Context)
|
public static void Fmax_V(AILEmitterCtx Context)
|
||||||
{
|
{
|
||||||
if (AOptimizations.UseSse && AOptimizations.UseSse2)
|
if (AOptimizations.FastFP && AOptimizations.UseSse
|
||||||
|
&& AOptimizations.UseSse2)
|
||||||
{
|
{
|
||||||
EmitVectorSseOrSse2OpF(Context, nameof(Sse.Max));
|
EmitVectorSseOrSse2OpF(Context, nameof(Sse.Max));
|
||||||
}
|
}
|
||||||
|
@ -353,7 +359,8 @@ namespace ChocolArm64.Instruction
|
||||||
|
|
||||||
public static void Fmin_S(AILEmitterCtx Context)
|
public static void Fmin_S(AILEmitterCtx Context)
|
||||||
{
|
{
|
||||||
if (AOptimizations.UseSse && AOptimizations.UseSse2)
|
if (AOptimizations.FastFP && AOptimizations.UseSse
|
||||||
|
&& AOptimizations.UseSse2)
|
||||||
{
|
{
|
||||||
EmitScalarSseOrSse2OpF(Context, nameof(Sse.MinScalar));
|
EmitScalarSseOrSse2OpF(Context, nameof(Sse.MinScalar));
|
||||||
}
|
}
|
||||||
|
@ -368,7 +375,8 @@ namespace ChocolArm64.Instruction
|
||||||
|
|
||||||
public static void Fmin_V(AILEmitterCtx Context)
|
public static void Fmin_V(AILEmitterCtx Context)
|
||||||
{
|
{
|
||||||
if (AOptimizations.UseSse && AOptimizations.UseSse2)
|
if (AOptimizations.FastFP && AOptimizations.UseSse
|
||||||
|
&& AOptimizations.UseSse2)
|
||||||
{
|
{
|
||||||
EmitVectorSseOrSse2OpF(Context, nameof(Sse.Min));
|
EmitVectorSseOrSse2OpF(Context, nameof(Sse.Min));
|
||||||
}
|
}
|
||||||
|
@ -452,7 +460,7 @@ namespace ChocolArm64.Instruction
|
||||||
|
|
||||||
public static void Fmsub_S(AILEmitterCtx Context)
|
public static void Fmsub_S(AILEmitterCtx Context)
|
||||||
{
|
{
|
||||||
if (AOptimizations.UseSse2)
|
if (AOptimizations.FastFP && AOptimizations.UseSse2)
|
||||||
{
|
{
|
||||||
AOpCodeSimdReg Op = (AOpCodeSimdReg)Context.CurrOp;
|
AOpCodeSimdReg Op = (AOpCodeSimdReg)Context.CurrOp;
|
||||||
|
|
||||||
|
@ -498,7 +506,8 @@ namespace ChocolArm64.Instruction
|
||||||
|
|
||||||
public static void Fmul_S(AILEmitterCtx Context)
|
public static void Fmul_S(AILEmitterCtx Context)
|
||||||
{
|
{
|
||||||
if (AOptimizations.UseSse && AOptimizations.UseSse2)
|
if (AOptimizations.FastFP && AOptimizations.UseSse
|
||||||
|
&& AOptimizations.UseSse2)
|
||||||
{
|
{
|
||||||
EmitScalarSseOrSse2OpF(Context, nameof(Sse.MultiplyScalar));
|
EmitScalarSseOrSse2OpF(Context, nameof(Sse.MultiplyScalar));
|
||||||
}
|
}
|
||||||
|
@ -518,7 +527,8 @@ namespace ChocolArm64.Instruction
|
||||||
|
|
||||||
public static void Fmul_V(AILEmitterCtx Context)
|
public static void Fmul_V(AILEmitterCtx Context)
|
||||||
{
|
{
|
||||||
if (AOptimizations.UseSse && AOptimizations.UseSse2)
|
if (AOptimizations.FastFP && AOptimizations.UseSse
|
||||||
|
&& AOptimizations.UseSse2)
|
||||||
{
|
{
|
||||||
EmitVectorSseOrSse2OpF(Context, nameof(Sse.Multiply));
|
EmitVectorSseOrSse2OpF(Context, nameof(Sse.Multiply));
|
||||||
}
|
}
|
||||||
|
@ -612,7 +622,7 @@ namespace ChocolArm64.Instruction
|
||||||
|
|
||||||
public static void Frecps_S(AILEmitterCtx Context)
|
public static void Frecps_S(AILEmitterCtx Context)
|
||||||
{
|
{
|
||||||
if (AOptimizations.UseSse2)
|
if (AOptimizations.FastFP && AOptimizations.UseSse2)
|
||||||
{
|
{
|
||||||
AOpCodeSimdReg Op = (AOpCodeSimdReg)Context.CurrOp;
|
AOpCodeSimdReg Op = (AOpCodeSimdReg)Context.CurrOp;
|
||||||
|
|
||||||
|
@ -668,7 +678,7 @@ namespace ChocolArm64.Instruction
|
||||||
|
|
||||||
public static void Frecps_V(AILEmitterCtx Context)
|
public static void Frecps_V(AILEmitterCtx Context)
|
||||||
{
|
{
|
||||||
if (AOptimizations.UseSse2)
|
if (AOptimizations.FastFP && AOptimizations.UseSse2)
|
||||||
{
|
{
|
||||||
AOpCodeSimdReg Op = (AOpCodeSimdReg)Context.CurrOp;
|
AOpCodeSimdReg Op = (AOpCodeSimdReg)Context.CurrOp;
|
||||||
|
|
||||||
|
@ -913,7 +923,7 @@ namespace ChocolArm64.Instruction
|
||||||
|
|
||||||
public static void Frsqrts_S(AILEmitterCtx Context)
|
public static void Frsqrts_S(AILEmitterCtx Context)
|
||||||
{
|
{
|
||||||
if (AOptimizations.UseSse2)
|
if (AOptimizations.FastFP && AOptimizations.UseSse2)
|
||||||
{
|
{
|
||||||
AOpCodeSimdReg Op = (AOpCodeSimdReg)Context.CurrOp;
|
AOpCodeSimdReg Op = (AOpCodeSimdReg)Context.CurrOp;
|
||||||
|
|
||||||
|
@ -977,7 +987,7 @@ namespace ChocolArm64.Instruction
|
||||||
|
|
||||||
public static void Frsqrts_V(AILEmitterCtx Context)
|
public static void Frsqrts_V(AILEmitterCtx Context)
|
||||||
{
|
{
|
||||||
if (AOptimizations.UseSse2)
|
if (AOptimizations.FastFP && AOptimizations.UseSse2)
|
||||||
{
|
{
|
||||||
AOpCodeSimdReg Op = (AOpCodeSimdReg)Context.CurrOp;
|
AOpCodeSimdReg Op = (AOpCodeSimdReg)Context.CurrOp;
|
||||||
|
|
||||||
|
@ -1042,12 +1052,40 @@ namespace ChocolArm64.Instruction
|
||||||
|
|
||||||
public static void Fsqrt_S(AILEmitterCtx Context)
|
public static void Fsqrt_S(AILEmitterCtx Context)
|
||||||
{
|
{
|
||||||
EmitScalarUnaryOpF(Context, () => EmitUnaryMathCall(Context, nameof(Math.Sqrt)));
|
if (AOptimizations.FastFP && AOptimizations.UseSse
|
||||||
|
&& AOptimizations.UseSse2)
|
||||||
|
{
|
||||||
|
EmitScalarSseOrSse2OpF(Context, nameof(Sse.SqrtScalar));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
EmitScalarUnaryOpF(Context, () =>
|
||||||
|
{
|
||||||
|
EmitSoftFloatCall(Context, nameof(ASoftFloat_32.FPSqrt));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void Fsqrt_V(AILEmitterCtx Context)
|
||||||
|
{
|
||||||
|
if (AOptimizations.FastFP && AOptimizations.UseSse
|
||||||
|
&& AOptimizations.UseSse2)
|
||||||
|
{
|
||||||
|
EmitVectorSseOrSse2OpF(Context, nameof(Sse.Sqrt));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
EmitVectorUnaryOpF(Context, () =>
|
||||||
|
{
|
||||||
|
EmitSoftFloatCall(Context, nameof(ASoftFloat_32.FPSqrt));
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void Fsub_S(AILEmitterCtx Context)
|
public static void Fsub_S(AILEmitterCtx Context)
|
||||||
{
|
{
|
||||||
if (AOptimizations.UseSse && AOptimizations.UseSse2)
|
if (AOptimizations.FastFP && AOptimizations.UseSse
|
||||||
|
&& AOptimizations.UseSse2)
|
||||||
{
|
{
|
||||||
EmitScalarSseOrSse2OpF(Context, nameof(Sse.SubtractScalar));
|
EmitScalarSseOrSse2OpF(Context, nameof(Sse.SubtractScalar));
|
||||||
}
|
}
|
||||||
|
@ -1062,7 +1100,8 @@ namespace ChocolArm64.Instruction
|
||||||
|
|
||||||
public static void Fsub_V(AILEmitterCtx Context)
|
public static void Fsub_V(AILEmitterCtx Context)
|
||||||
{
|
{
|
||||||
if (AOptimizations.UseSse && AOptimizations.UseSse2)
|
if (AOptimizations.FastFP && AOptimizations.UseSse
|
||||||
|
&& AOptimizations.UseSse2)
|
||||||
{
|
{
|
||||||
EmitVectorSseOrSse2OpF(Context, nameof(Sse.Subtract));
|
EmitVectorSseOrSse2OpF(Context, nameof(Sse.Subtract));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue