summaryrefslogtreecommitdiff
path: root/src/wasm/wasm-binary.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/wasm/wasm-binary.cpp')
-rw-r--r--src/wasm/wasm-binary.cpp34
1 files changed, 6 insertions, 28 deletions
diff --git a/src/wasm/wasm-binary.cpp b/src/wasm/wasm-binary.cpp
index 18ae724f0..813810016 100644
--- a/src/wasm/wasm-binary.cpp
+++ b/src/wasm/wasm-binary.cpp
@@ -3160,86 +3160,72 @@ void WasmBinaryBuilder::readMemoryAccess(Address& alignment, Address& offset) {
bool WasmBinaryBuilder::maybeVisitLoad(Expression*& out,
uint8_t code,
bool isAtomic) {
- Load* curr;
+ auto* curr = allocator.alloc<Load>();
+ // The signed field does not matter in some cases (where the size of the load
+ // is equal to the size of the type, in which case we do not extend), but give
+ // it a default value nonetheless, to make hashing and other code simpler, so
+ // that they do not need to consider whether the sign matters or not.
+ curr->signed_ = false;
if (!isAtomic) {
switch (code) {
case BinaryConsts::I32LoadMem8S:
- curr = allocator.alloc<Load>();
curr->bytes = 1;
curr->type = Type::i32;
curr->signed_ = true;
break;
case BinaryConsts::I32LoadMem8U:
- curr = allocator.alloc<Load>();
curr->bytes = 1;
curr->type = Type::i32;
- curr->signed_ = false;
break;
case BinaryConsts::I32LoadMem16S:
- curr = allocator.alloc<Load>();
curr->bytes = 2;
curr->type = Type::i32;
curr->signed_ = true;
break;
case BinaryConsts::I32LoadMem16U:
- curr = allocator.alloc<Load>();
curr->bytes = 2;
curr->type = Type::i32;
- curr->signed_ = false;
break;
case BinaryConsts::I32LoadMem:
- curr = allocator.alloc<Load>();
curr->bytes = 4;
curr->type = Type::i32;
break;
case BinaryConsts::I64LoadMem8S:
- curr = allocator.alloc<Load>();
curr->bytes = 1;
curr->type = Type::i64;
curr->signed_ = true;
break;
case BinaryConsts::I64LoadMem8U:
- curr = allocator.alloc<Load>();
curr->bytes = 1;
curr->type = Type::i64;
- curr->signed_ = false;
break;
case BinaryConsts::I64LoadMem16S:
- curr = allocator.alloc<Load>();
curr->bytes = 2;
curr->type = Type::i64;
curr->signed_ = true;
break;
case BinaryConsts::I64LoadMem16U:
- curr = allocator.alloc<Load>();
curr->bytes = 2;
curr->type = Type::i64;
- curr->signed_ = false;
break;
case BinaryConsts::I64LoadMem32S:
- curr = allocator.alloc<Load>();
curr->bytes = 4;
curr->type = Type::i64;
curr->signed_ = true;
break;
case BinaryConsts::I64LoadMem32U:
- curr = allocator.alloc<Load>();
curr->bytes = 4;
curr->type = Type::i64;
- curr->signed_ = false;
break;
case BinaryConsts::I64LoadMem:
- curr = allocator.alloc<Load>();
curr->bytes = 8;
curr->type = Type::i64;
break;
case BinaryConsts::F32LoadMem:
- curr = allocator.alloc<Load>();
curr->bytes = 4;
curr->type = Type::f32;
break;
case BinaryConsts::F64LoadMem:
- curr = allocator.alloc<Load>();
curr->bytes = 8;
curr->type = Type::f64;
break;
@@ -3250,44 +3236,36 @@ bool WasmBinaryBuilder::maybeVisitLoad(Expression*& out,
} else {
switch (code) {
case BinaryConsts::I32AtomicLoad8U:
- curr = allocator.alloc<Load>();
curr->bytes = 1;
curr->type = Type::i32;
break;
case BinaryConsts::I32AtomicLoad16U:
- curr = allocator.alloc<Load>();
curr->bytes = 2;
curr->type = Type::i32;
break;
case BinaryConsts::I32AtomicLoad:
- curr = allocator.alloc<Load>();
curr->bytes = 4;
curr->type = Type::i32;
break;
case BinaryConsts::I64AtomicLoad8U:
- curr = allocator.alloc<Load>();
curr->bytes = 1;
curr->type = Type::i64;
break;
case BinaryConsts::I64AtomicLoad16U:
- curr = allocator.alloc<Load>();
curr->bytes = 2;
curr->type = Type::i64;
break;
case BinaryConsts::I64AtomicLoad32U:
- curr = allocator.alloc<Load>();
curr->bytes = 4;
curr->type = Type::i64;
break;
case BinaryConsts::I64AtomicLoad:
- curr = allocator.alloc<Load>();
curr->bytes = 8;
curr->type = Type::i64;
break;
default:
return false;
}
- curr->signed_ = false;
BYN_TRACE("zz node: AtomicLoad\n");
}