From 01635630ad5a990d25f461e7bc3659a588e9739d Mon Sep 17 00:00:00 2001 From: Chernykh Sergey Date: Wed, 3 Aug 2022 13:14:27 +0300 Subject: [PATCH] Fix shifts in irtoc Signed-off-by: Chernykh Sergey --- irtoc_scripts/interpreter_handlers.irt | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/irtoc_scripts/interpreter_handlers.irt b/irtoc_scripts/interpreter_handlers.irt index 2e7e6e318..31f6d2898 100644 --- a/irtoc_scripts/interpreter_handlers.irt +++ b/irtoc_scripts/interpreter_handlers.irt @@ -286,46 +286,38 @@ end # SHL # macro(:shl2dyn_smi_smi) do |l, r| - shift := AndI(anytou32(r.any)).Imm(0x1f).u32 - i32toany(Shl(anytoi32(l), shift).i32) + i32toany(Shl(anytoi32(l), anytoi32(r.any)).i32) end macro(:shl2dyn_smi_double) do |l, r| - shift := AndI(f64toi32(anytof64(r.any))).Imm(0x1f).u32 - i32toany(Shl(anytoi32(l), shift).i32) + i32toany(Shl(anytoi32(l), f64toi32(anytof64(r.any))).i32) end macro(:shl2dyn_double_smi) do |l, r| - shift := AndI(anytou32(r.any)).Imm(0x1f).u32 - i32toany(Shl(i64tou32(f64toi64(anytof64(l))), shift).i32) + i32toany(Shl(i64toi32(f64toi64(anytof64(l))), anytoi32(r.any)).i32) end macro(:shl2dyn_double_double) do |l, r| - shift := AndI(f64toi32(anytof64(r.any))).Imm(0x1f).u32 - i32toany(Shl(i64tou32(f64toi64(anytof64(l))), shift).i32) + i32toany(Shl(i64toi32(f64toi64(anytof64(l))), f64toi32(anytof64(r.any))).i32) end #################################################################### # SHR # macro(:shr2dyn_smi_smi) do |l, r| - shift := AndI(anytou32(r.any)).Imm(0x1f).u32 - i32toany(AShr(anytoi32(l), shift).i32) + i32toany(AShr(anytoi32(l), anytoi32(r.any)).i32) end macro(:shr2dyn_smi_double) do |l, r| - shift := AndI(f64toi32(anytof64(r.any))).Imm(0x1f).i32 - i32toany(AShr(anytoi32(l), shift).i32) + i32toany(AShr(anytoi32(l), f64toi32(anytof64(r.any))).i32) end macro(:shr2dyn_double_smi) do |l, r| - shift := AndI(anytou32(r.any)).Imm(0x1f).u32 - i32toany(AShr(i64tou32(f64toi64(anytof64(l))), shift).i32) + i32toany(AShr(i64toi32(f64toi64(anytof64(l))), anytoi32(r.any)).i32) end macro(:shr2dyn_double_double) do |l, r| - shift := AndI(f64tou32(anytof64(r.any))).Imm(0x1f).u32 - i32toany(AShr(i64tou32(f64toi64(anytof64(l))), shift).i32) + i32toany(AShr(i64toi32(f64toi64(anytof64(l))), f64toi32(anytof64(r.any))).i32) end #################################################################################### -- Gitee