diff --git a/ChocolArm64/Translation/AILEmitterCtx.cs b/ChocolArm64/Translation/AILEmitterCtx.cs index 466594694..03b06610b 100644 --- a/ChocolArm64/Translation/AILEmitterCtx.cs +++ b/ChocolArm64/Translation/AILEmitterCtx.cs @@ -72,7 +72,7 @@ namespace ChocolArm64.Translation Emitter = new AILEmitter(Graph, Root, SubName); - ILBlock = Emitter.GetILBlock(0); + ILBlock = Emitter.GetILBlock(0); OpcIndex = -1; @@ -260,18 +260,24 @@ namespace ChocolArm64.Translation case AIntType.Int64: Emit(OpCodes.Conv_I8); break; } - if (IntType == AIntType.UInt64 || - IntType == AIntType.Int64) + bool Sz64 = CurrOp.RegisterSize != ARegisterSize.Int32; + + if (Sz64 == (IntType == AIntType.UInt64 || + IntType == AIntType.Int64)) { return; } - if (CurrOp.RegisterSize != ARegisterSize.Int32) + if (Sz64) { Emit(IntType >= AIntType.Int8 ? OpCodes.Conv_I8 : OpCodes.Conv_U8); } + else + { + Emit(OpCodes.Conv_U4); + } } public void EmitLsl(int Amount) => EmitILShift(Amount, OpCodes.Shl); @@ -298,7 +304,7 @@ namespace ChocolArm64.Translation EmitLdc_I4(Amount); Emit(OpCodes.Shr_Un); - + Ldloc(Tmp2Index, AIoType.Int); EmitLdc_I4(CurrOp.GetBitsCount() - Amount);