Update InstEmitSimdArithmetic.cs

This commit is contained in:
LDj3SNuD 2018-12-20 18:33:41 +01:00 committed by GitHub
commit 96055281d2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -1250,20 +1250,44 @@ namespace ChocolArm64.Instructions
} }
public static void Frecpe_S(ILEmitterCtx context) public static void Frecpe_S(ILEmitterCtx context)
{
OpCodeSimd64 op = (OpCodeSimd64)context.CurrOp;
int sizeF = op.Size & 1;
if (Optimizations.FastFP && Optimizations.UseSse
&& sizeF == 0)
{
EmitScalarSseOrSse2OpF(context, nameof(Sse.ReciprocalScalar));
}
else
{ {
EmitScalarUnaryOpF(context, () => EmitScalarUnaryOpF(context, () =>
{ {
EmitSoftFloatCall(context, nameof(SoftFloat32.FPRecipEstimate)); EmitSoftFloatCall(context, nameof(SoftFloat32.FPRecipEstimate));
}); });
} }
}
public static void Frecpe_V(ILEmitterCtx context) public static void Frecpe_V(ILEmitterCtx context)
{
OpCodeSimd64 op = (OpCodeSimd64)context.CurrOp;
int sizeF = op.Size & 1;
if (Optimizations.FastFP && Optimizations.UseSse
&& sizeF == 0)
{
EmitVectorSseOrSse2OpF(context, nameof(Sse.Reciprocal));
}
else
{ {
EmitVectorUnaryOpF(context, () => EmitVectorUnaryOpF(context, () =>
{ {
EmitSoftFloatCall(context, nameof(SoftFloat32.FPRecipEstimate)); EmitSoftFloatCall(context, nameof(SoftFloat32.FPRecipEstimate));
}); });
} }
}
public static void Frecps_S(ILEmitterCtx context) // Fused. public static void Frecps_S(ILEmitterCtx context) // Fused.
{ {
@ -1547,20 +1571,44 @@ namespace ChocolArm64.Instructions
} }
public static void Frsqrte_S(ILEmitterCtx context) public static void Frsqrte_S(ILEmitterCtx context)
{
OpCodeSimd64 op = (OpCodeSimd64)context.CurrOp;
int sizeF = op.Size & 1;
if (Optimizations.FastFP && Optimizations.UseSse
&& sizeF == 0)
{
EmitScalarSseOrSse2OpF(context, nameof(Sse.ReciprocalSqrtScalar));
}
else
{ {
EmitScalarUnaryOpF(context, () => EmitScalarUnaryOpF(context, () =>
{ {
EmitSoftFloatCall(context, nameof(SoftFloat32.FPRSqrtEstimate)); EmitSoftFloatCall(context, nameof(SoftFloat32.FPRSqrtEstimate));
}); });
} }
}
public static void Frsqrte_V(ILEmitterCtx context) public static void Frsqrte_V(ILEmitterCtx context)
{
OpCodeSimd64 op = (OpCodeSimd64)context.CurrOp;
int sizeF = op.Size & 1;
if (Optimizations.FastFP && Optimizations.UseSse
&& sizeF == 0)
{
EmitVectorSseOrSse2OpF(context, nameof(Sse.ReciprocalSqrt));
}
else
{ {
EmitVectorUnaryOpF(context, () => EmitVectorUnaryOpF(context, () =>
{ {
EmitSoftFloatCall(context, nameof(SoftFloat32.FPRSqrtEstimate)); EmitSoftFloatCall(context, nameof(SoftFloat32.FPRSqrtEstimate));
}); });
} }
}
public static void Frsqrts_S(ILEmitterCtx context) // Fused. public static void Frsqrts_S(ILEmitterCtx context) // Fused.
{ {