summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/wasm.h12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/wasm.h b/src/wasm.h
index dcad171a0..f9d0cb129 100644
--- a/src/wasm.h
+++ b/src/wasm.h
@@ -530,22 +530,22 @@ public:
}
Literal shl(const Literal& other) const {
switch (type) {
- case WasmType::i32: return Literal(i32 << other.i32);
- case WasmType::i64: return Literal(i64 << other.i64);
+ case WasmType::i32: return Literal(uint32_t(i32) << (other.i32 & 0x1f));
+ case WasmType::i64: return Literal(uint64_t(i64) << (other.i64 & 0x3f));
default: WASM_UNREACHABLE();
}
}
Literal shrS(const Literal& other) const {
switch (type) {
- case WasmType::i32: return Literal(i32 >> other.i32);
- case WasmType::i64: return Literal(i64 >> other.i64);
+ case WasmType::i32: return Literal(i32 >> (other.i32 & 0x1f));
+ case WasmType::i64: return Literal(i64 >> (other.i64 & 0x3f));
default: WASM_UNREACHABLE();
}
}
Literal shrU(const Literal& other) const {
switch (type) {
- case WasmType::i32: return Literal(uint32_t(i32) >> uint32_t(other.i32));
- case WasmType::i64: return Literal(uint64_t(i64) >> uint64_t(other.i64));
+ case WasmType::i32: return Literal(uint32_t(i32) >> uint32_t(other.i32 & 0x1f));
+ case WasmType::i64: return Literal(uint64_t(i64) >> uint64_t(other.i64 & 0x3f));
default: WASM_UNREACHABLE();
}
}