From 9d241ce0a9cf1a9ce42c70535fcb948b856fa03e Mon Sep 17 00:00:00 2001 From: Chernykh Sergey Date: Fri, 5 Aug 2022 11:36:35 +0300 Subject: [PATCH] Revert "Fix shifts in irtoc" This reverts commit 01635630ad5a990d25f461e7bc3659a588e9739d. --- irtoc_scripts/interpreter_handlers.irt | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/irtoc_scripts/interpreter_handlers.irt b/irtoc_scripts/interpreter_handlers.irt index 31f6d2898..2e7e6e318 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 #################################################################################### -- Gitee