mirror of
https://git.naxdy.org/Mirror/Ryujinx.git
synced 2025-01-09 20:29:11 +00:00
Use the EmitVectorPairwiseFloat for Faddp_V & Fminp_V & Fmaxp_V
This commit is contained in:
parent
337602797d
commit
41a6ea5bdf
1 changed files with 3 additions and 106 deletions
|
@ -334,34 +334,7 @@ namespace ChocolArm64.Instruction
|
||||||
|
|
||||||
public static void Faddp_V(AILEmitterCtx Context)
|
public static void Faddp_V(AILEmitterCtx Context)
|
||||||
{
|
{
|
||||||
AOpCodeSimdReg Op = (AOpCodeSimdReg)Context.CurrOp;
|
EmitVectorPairwiseFloat(Context, OpCodes.Add);
|
||||||
|
|
||||||
int SizeF = Op.Size & 1;
|
|
||||||
|
|
||||||
int Bytes = Context.CurrOp.GetBitsCount() >> 3;
|
|
||||||
|
|
||||||
int Elems = Bytes >> SizeF + 2;
|
|
||||||
int Half = Elems >> 1;
|
|
||||||
|
|
||||||
for (int Index = 0; Index < Elems; Index++)
|
|
||||||
{
|
|
||||||
int Elem = (Index & (Half - 1)) << 1;
|
|
||||||
|
|
||||||
EmitVectorExtractF(Context, Index < Half ? Op.Rn : Op.Rm, Elem + 0, SizeF);
|
|
||||||
EmitVectorExtractF(Context, Index < Half ? Op.Rn : Op.Rm, Elem + 1, SizeF);
|
|
||||||
|
|
||||||
Context.Emit(OpCodes.Add);
|
|
||||||
|
|
||||||
EmitVectorInsertTmpF(Context, Index, SizeF);
|
|
||||||
}
|
|
||||||
|
|
||||||
Context.EmitLdvectmp();
|
|
||||||
Context.EmitStvec(Op.Rd);
|
|
||||||
|
|
||||||
if (Op.RegisterSize == ARegisterSize.SIMD64)
|
|
||||||
{
|
|
||||||
EmitVectorZeroUpper(Context, Op.Rd);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void Fdiv_S(AILEmitterCtx Context)
|
public static void Fdiv_S(AILEmitterCtx Context)
|
||||||
|
@ -441,45 +414,7 @@ namespace ChocolArm64.Instruction
|
||||||
|
|
||||||
public static void Fmaxp_V(AILEmitterCtx Context)
|
public static void Fmaxp_V(AILEmitterCtx Context)
|
||||||
{
|
{
|
||||||
AOpCodeSimdReg Op = (AOpCodeSimdReg)Context.CurrOp;
|
EmitVectorPairwiseFloat(Context, nameof(AVectorHelper.MaxF), nameof(AVectorHelper.Max));
|
||||||
|
|
||||||
int SizeF = Op.Size & 1;
|
|
||||||
|
|
||||||
int Bytes = Context.CurrOp.GetBitsCount() >> 3;
|
|
||||||
|
|
||||||
int Elems = Bytes >> SizeF + 2;
|
|
||||||
int Half = Elems >> 1;
|
|
||||||
|
|
||||||
for (int Index = 0; Index < Elems; Index++)
|
|
||||||
{
|
|
||||||
int Elem = (Index & (Half - 1)) << 1;
|
|
||||||
|
|
||||||
EmitVectorExtractF(Context, Index < Half ? Op.Rn : Op.Rm, Elem + 0, SizeF);
|
|
||||||
EmitVectorExtractF(Context, Index < Half ? Op.Rn : Op.Rm, Elem + 1, SizeF);
|
|
||||||
|
|
||||||
if (SizeF == 0)
|
|
||||||
{
|
|
||||||
AVectorHelper.EmitCall(Context, nameof(AVectorHelper.MaxF));
|
|
||||||
}
|
|
||||||
else if (SizeF == 1)
|
|
||||||
{
|
|
||||||
AVectorHelper.EmitCall(Context, nameof(AVectorHelper.Max));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
throw new InvalidOperationException();
|
|
||||||
}
|
|
||||||
|
|
||||||
EmitVectorInsertTmpF(Context, Index, SizeF);
|
|
||||||
}
|
|
||||||
|
|
||||||
Context.EmitLdvectmp();
|
|
||||||
Context.EmitStvec(Op.Rd);
|
|
||||||
|
|
||||||
if (Op.RegisterSize == ARegisterSize.SIMD64)
|
|
||||||
{
|
|
||||||
EmitVectorZeroUpper(Context, Op.Rd);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void Fmin_S(AILEmitterCtx Context)
|
public static void Fmin_S(AILEmitterCtx Context)
|
||||||
|
@ -528,45 +463,7 @@ namespace ChocolArm64.Instruction
|
||||||
|
|
||||||
public static void Fminp_V(AILEmitterCtx Context)
|
public static void Fminp_V(AILEmitterCtx Context)
|
||||||
{
|
{
|
||||||
AOpCodeSimdReg Op = (AOpCodeSimdReg)Context.CurrOp;
|
EmitVectorPairwiseFloat(Context, nameof(AVectorHelper.MinF), nameof(AVectorHelper.Min));
|
||||||
|
|
||||||
int SizeF = Op.Size & 1;
|
|
||||||
|
|
||||||
int Bytes = Context.CurrOp.GetBitsCount() >> 3;
|
|
||||||
|
|
||||||
int Elems = Bytes >> SizeF + 2;
|
|
||||||
int Half = Elems >> 1;
|
|
||||||
|
|
||||||
for (int Index = 0; Index < Elems; Index++)
|
|
||||||
{
|
|
||||||
int Elem = (Index & (Half - 1)) << 1;
|
|
||||||
|
|
||||||
EmitVectorExtractF(Context, Index < Half ? Op.Rn : Op.Rm, Elem + 0, SizeF);
|
|
||||||
EmitVectorExtractF(Context, Index < Half ? Op.Rn : Op.Rm, Elem + 1, SizeF);
|
|
||||||
|
|
||||||
if (SizeF == 0)
|
|
||||||
{
|
|
||||||
AVectorHelper.EmitCall(Context, nameof(AVectorHelper.MinF));
|
|
||||||
}
|
|
||||||
else if (SizeF == 1)
|
|
||||||
{
|
|
||||||
AVectorHelper.EmitCall(Context, nameof(AVectorHelper.Min));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
throw new InvalidOperationException();
|
|
||||||
}
|
|
||||||
|
|
||||||
EmitVectorInsertTmpF(Context, Index, SizeF);
|
|
||||||
}
|
|
||||||
|
|
||||||
Context.EmitLdvectmp();
|
|
||||||
Context.EmitStvec(Op.Rd);
|
|
||||||
|
|
||||||
if (Op.RegisterSize == ARegisterSize.SIMD64)
|
|
||||||
{
|
|
||||||
EmitVectorZeroUpper(Context, Op.Rd);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue