diff options
-rw-r--r-- | src/passes/Memory64Lowering.cpp | 16 | ||||
-rw-r--r-- | src/wasm/wasm-emscripten.cpp | 4 | ||||
-rw-r--r-- | test/passes/memory64-lowering_enable-memory64_enable-bulk-memory_enable-threads.txt (renamed from test/passes/memory64-lowering_enable-memory64_enable-bulk-memory.txt) | 47 | ||||
-rw-r--r-- | test/passes/memory64-lowering_enable-memory64_enable-bulk-memory_enable-threads.wast (renamed from test/passes/memory64-lowering_enable-memory64_enable-bulk-memory.wast) | 6 |
4 files changed, 68 insertions, 5 deletions
diff --git a/src/passes/Memory64Lowering.cpp b/src/passes/Memory64Lowering.cpp index c376ed6c6..95dbf4f17 100644 --- a/src/passes/Memory64Lowering.cpp +++ b/src/passes/Memory64Lowering.cpp @@ -90,11 +90,21 @@ struct Memory64Lowering : public WalkerPass<PostWalker<Memory64Lowering>> { wrapAddress64(curr->size); } + void visitAtomicRMW(AtomicRMW* curr) { wrapAddress64(curr->ptr); } + + void visitAtomicCmpxchg(AtomicCmpxchg* curr) { wrapAddress64(curr->ptr); } + + void visitAtomicWait(AtomicWait* curr) { wrapAddress64(curr->ptr); } + + void visitAtomicNotify(AtomicNotify* curr) { wrapAddress64(curr->ptr); } + void visitMemory(Memory* memory) { for (auto& segment : memory->segments) { - auto* c = segment.offset->cast<Const>(); - c->value = Literal(static_cast<uint32_t>(c->value.geti64())); - c->type = Type::i32; + if (!segment.isPassive) { + auto* c = segment.offset->cast<Const>(); + c->value = Literal(static_cast<uint32_t>(c->value.geti64())); + c->type = Type::i32; + } } // This is visited last. memory->indexType = Type::i32; diff --git a/src/wasm/wasm-emscripten.cpp b/src/wasm/wasm-emscripten.cpp index 5eed4d4c4..7e56ef849 100644 --- a/src/wasm/wasm-emscripten.cpp +++ b/src/wasm/wasm-emscripten.cpp @@ -148,7 +148,7 @@ private: Fatal() << "Cannot get offset of passive segment initialized " "multiple times"; } - offsets[curr->segment] = dest->value.geti32(); + offsets[curr->segment] = dest->value.getInteger(); } } searcher(passiveOffsets); searcher.walkModule(&wasm); @@ -514,7 +514,7 @@ void EmscriptenGlueGenerator::separateDataSegments(Output* outfile, if (!seg.offset->is<Const>()) { Fatal() << "separating relocatable segments not implemented"; } - size_t offset = seg.offset->cast<Const>()->value.geti32(); + size_t offset = seg.offset->cast<Const>()->value.getInteger(); offset -= base; size_t fill = offset - lastEnd; if (fill > 0) { diff --git a/test/passes/memory64-lowering_enable-memory64_enable-bulk-memory.txt b/test/passes/memory64-lowering_enable-memory64_enable-bulk-memory_enable-threads.txt index ee263c3cb..535778232 100644 --- a/test/passes/memory64-lowering_enable-memory64_enable-bulk-memory.txt +++ b/test/passes/memory64-lowering_enable-memory64_enable-bulk-memory_enable-threads.txt @@ -164,6 +164,53 @@ (i64.const 3) ) ) + (drop + (i32.atomic.load + (i32.wrap_i64 + (i64.const 4) + ) + ) + ) + (i32.atomic.store + (i32.wrap_i64 + (i64.const 4) + ) + (i32.const 8) + ) + (drop + (i32.atomic.rmw8.add_u + (i32.wrap_i64 + (i64.const 1) + ) + (i32.const 2) + ) + ) + (drop + (i32.atomic.rmw8.cmpxchg_u + (i32.wrap_i64 + (i64.const 1) + ) + (i32.const 2) + (i32.const 3) + ) + ) + (drop + (memory.atomic.wait32 + (i32.wrap_i64 + (i64.const 1) + ) + (i32.const 2) + (i64.const 3) + ) + ) + (drop + (memory.atomic.notify + (i32.wrap_i64 + (i64.const 1) + ) + (i32.const 2) + ) + ) ) ) (module diff --git a/test/passes/memory64-lowering_enable-memory64_enable-bulk-memory.wast b/test/passes/memory64-lowering_enable-memory64_enable-bulk-memory_enable-threads.wast index 68422aea8..c59da359d 100644 --- a/test/passes/memory64-lowering_enable-memory64_enable-bulk-memory.wast +++ b/test/passes/memory64-lowering_enable-memory64_enable-bulk-memory_enable-threads.wast @@ -27,6 +27,12 @@ (memory.init 0 (i64.const 1) (i32.const 2) (i32.const 3)) (memory.fill (i64.const 1) (i32.const 2) (i64.const 3)) (memory.copy (i64.const 1) (i64.const 2) (i64.const 3)) + (drop (i32.atomic.load (i64.const 4))) + (i32.atomic.store (i64.const 4) (i32.const 8)) + (drop (i32.atomic.rmw8.add_u (i64.const 1) (i32.const 2))) + (drop (i32.atomic.rmw8.cmpxchg_u (i64.const 1) (i32.const 2) (i32.const 3))) + (drop (memory.atomic.wait32 (i64.const 1) (i32.const 2) (i64.const 3))) + (drop (memory.atomic.notify (i64.const 1) (i32.const 2))) ) ) |