mirror of
https://git.ryujinx.app/ryubing/ryujinx.git
synced 2025-07-26 15:49:57 -06:00
Implement SSHL instruction, fix exception on FMAX/FMIN, and use a better exception message for undefined/unimplemented instructions
This commit is contained in:
@ -375,6 +375,8 @@ namespace ChocolArm64.Instruction
|
||||
public static void Smax_V(AILEmitterCtx Context) => EmitVectorSmax(Context);
|
||||
public static void Smin_V(AILEmitterCtx Context) => EmitVectorSmin(Context);
|
||||
|
||||
public static void Sshl_V(AILEmitterCtx Context) => EmitVectorSshl(Context);
|
||||
|
||||
public static void Sshll_V(AILEmitterCtx Context)
|
||||
{
|
||||
AOpCodeSimdShImm Op = (AOpCodeSimdShImm)Context.CurrOp;
|
||||
@ -737,7 +739,10 @@ namespace ChocolArm64.Instruction
|
||||
EmitVectorBinarySx(Context, () => Context.EmitCall(MthdInfo));
|
||||
}
|
||||
|
||||
private static void EmitVectorUshl(AILEmitterCtx Context)
|
||||
private static void EmitVectorSshl(AILEmitterCtx Context) => EmitVectorShl(Context, true);
|
||||
private static void EmitVectorUshl(AILEmitterCtx Context) => EmitVectorShl(Context, false);
|
||||
|
||||
private static void EmitVectorShl(AILEmitterCtx Context, bool Signed)
|
||||
{
|
||||
//This instruction shifts the value on vector A by the number of bits
|
||||
//specified on the signed, lower 8 bits of vector B. If the shift value
|
||||
@ -772,7 +777,9 @@ namespace ChocolArm64.Instruction
|
||||
Context.Emit(OpCodes.Bge_S, LblShl);
|
||||
Context.Emit(OpCodes.Neg);
|
||||
|
||||
EmitShift(OpCodes.Shr_Un);
|
||||
EmitShift(Signed
|
||||
? OpCodes.Shr
|
||||
: OpCodes.Shr_Un);
|
||||
|
||||
Context.MarkLabel(LblShl);
|
||||
|
||||
|
Reference in New Issue
Block a user