diff --git a/ChocolArm64/Instruction/AInstEmitAlu.cs b/ChocolArm64/Instruction/AInstEmitAlu.cs index 57020364b7..bacbfc9e81 100644 --- a/ChocolArm64/Instruction/AInstEmitAlu.cs +++ b/ChocolArm64/Instruction/AInstEmitAlu.cs @@ -100,6 +100,24 @@ namespace ChocolArm64.Instruction EmitDataStore(Context, SetFlags); } + public static void Cls(AILEmitterCtx Context) + { + AOpCodeAlu Op = (AOpCodeAlu)Context.CurrOp; + + Context.EmitLdintzr(Op.Rn); + + if (Op.RegisterSize == ARegisterSize.Int32) + { + ASoftFallback.EmitCall(Context, nameof(ASoftFallback.CountLeadingSigns32)); + } + else + { + ASoftFallback.EmitCall(Context, nameof(ASoftFallback.CountLeadingSigns64)); + } + + Context.EmitStintzr(Op.Rd); + } + public static void Clz(AILEmitterCtx Context) { AOpCodeAlu Op = (AOpCodeAlu)Context.CurrOp; @@ -383,4 +401,4 @@ namespace ChocolArm64.Instruction Context.EmitStflg((int)APState.CBit); } } -} \ No newline at end of file +}