diff --git a/irtoc_scripts/interpreter_handlers.irt b/irtoc_scripts/interpreter_handlers.irt index 31f6d2898939435de291a9092a5fabe14ca89d85..2e7e6e3180ff8f8346bd65b59d5aa8ab454163a4 100644 --- a/irtoc_scripts/interpreter_handlers.irt +++ b/irtoc_scripts/interpreter_handlers.irt @@ -286,38 +286,46 @@ end # SHL # macro(:shl2dyn_smi_smi) do |l, r| - i32toany(Shl(anytoi32(l), anytoi32(r.any)).i32) + shift := AndI(anytou32(r.any)).Imm(0x1f).u32 + i32toany(Shl(anytoi32(l), shift).i32) end macro(:shl2dyn_smi_double) do |l, r| - i32toany(Shl(anytoi32(l), f64toi32(anytof64(r.any))).i32) + shift := AndI(f64toi32(anytof64(r.any))).Imm(0x1f).u32 + i32toany(Shl(anytoi32(l), shift).i32) end macro(:shl2dyn_double_smi) do |l, r| - i32toany(Shl(i64toi32(f64toi64(anytof64(l))), anytoi32(r.any)).i32) + shift := AndI(anytou32(r.any)).Imm(0x1f).u32 + i32toany(Shl(i64tou32(f64toi64(anytof64(l))), shift).i32) end macro(:shl2dyn_double_double) do |l, r| - i32toany(Shl(i64toi32(f64toi64(anytof64(l))), f64toi32(anytof64(r.any))).i32) + shift := AndI(f64toi32(anytof64(r.any))).Imm(0x1f).u32 + i32toany(Shl(i64tou32(f64toi64(anytof64(l))), shift).i32) end #################################################################### # SHR # macro(:shr2dyn_smi_smi) do |l, r| - i32toany(AShr(anytoi32(l), anytoi32(r.any)).i32) + shift := AndI(anytou32(r.any)).Imm(0x1f).u32 + i32toany(AShr(anytoi32(l), shift).i32) end macro(:shr2dyn_smi_double) do |l, r| - i32toany(AShr(anytoi32(l), f64toi32(anytof64(r.any))).i32) + shift := AndI(f64toi32(anytof64(r.any))).Imm(0x1f).i32 + i32toany(AShr(anytoi32(l), shift).i32) end macro(:shr2dyn_double_smi) do |l, r| - i32toany(AShr(i64toi32(f64toi64(anytof64(l))), anytoi32(r.any)).i32) + shift := AndI(anytou32(r.any)).Imm(0x1f).u32 + i32toany(AShr(i64tou32(f64toi64(anytof64(l))), shift).i32) end macro(:shr2dyn_double_double) do |l, r| - i32toany(AShr(i64toi32(f64toi64(anytof64(l))), f64toi32(anytof64(r.any))).i32) + shift := AndI(f64tou32(anytof64(r.any))).Imm(0x1f).u32 + i32toany(AShr(i64tou32(f64toi64(anytof64(l))), shift).i32) end ####################################################################################