diff --git a/src/parser/parsers.h b/src/parser/parsers.h index d9ef5d4437d..b1eb6c71b9d 100644 --- a/src/parser/parsers.h +++ b/src/parser/parsers.h @@ -1815,10 +1815,20 @@ Result<> makeAtomicRMW(Ctx& ctx, uint8_t bytes) { auto mem = maybeMemidx(ctx); CHECK_ERR(mem); + + auto maybeOrder = maybeMemOrder(ctx); + CHECK_ERR(maybeOrder); + auto arg = memarg(ctx, bytes); CHECK_ERR(arg); - return ctx.makeAtomicRMW( - pos, annotations, op, type, bytes, mem.getPtr(), *arg, MemoryOrder::SeqCst); + return ctx.makeAtomicRMW(pos, + annotations, + op, + type, + bytes, + mem.getPtr(), + *arg, + maybeOrder ? *maybeOrder : MemoryOrder::SeqCst); } template diff --git a/src/passes/Print.cpp b/src/passes/Print.cpp index e54d3eebdff..6eba429fa44 100644 --- a/src/passes/Print.cpp +++ b/src/passes/Print.cpp @@ -661,6 +661,7 @@ struct PrintExpressionContents } restoreNormalColor(o); printMemoryName(curr->memory, o, wasm); + printMemoryOrder(curr->order); if (curr->offset) { o << " offset=" << curr->offset; } diff --git a/src/wasm/wasm-binary.cpp b/src/wasm/wasm-binary.cpp index 2c730401242..1aa002f4e03 100644 --- a/src/wasm/wasm-binary.cpp +++ b/src/wasm/wasm-binary.cpp @@ -3705,37 +3705,37 @@ Result<> WasmBinaryReader::readInst() { case BinaryConsts::I32AtomicRMW##op: { \ auto [mem, align, offset, memoryOrder] = getRMWMemarg(); \ return builder.makeAtomicRMW( \ - RMW##op, 4, offset, Type::i32, mem, MemoryOrder::SeqCst); \ + RMW##op, 4, offset, Type::i32, mem, memoryOrder); \ } \ case BinaryConsts::I32AtomicRMW##op##8U: { \ auto [mem, align, offset, memoryOrder] = getRMWMemarg(); \ return builder.makeAtomicRMW( \ - RMW##op, 1, offset, Type::i32, mem, MemoryOrder::SeqCst); \ + RMW##op, 1, offset, Type::i32, mem, memoryOrder); \ } \ case BinaryConsts::I32AtomicRMW##op##16U: { \ auto [mem, align, offset, memoryOrder] = getRMWMemarg(); \ return builder.makeAtomicRMW( \ - RMW##op, 2, offset, Type::i32, mem, MemoryOrder::SeqCst); \ + RMW##op, 2, offset, Type::i32, mem, memoryOrder); \ } \ case BinaryConsts::I64AtomicRMW##op: { \ auto [mem, align, offset, memoryOrder] = getRMWMemarg(); \ return builder.makeAtomicRMW( \ - RMW##op, 8, offset, Type::i64, mem, MemoryOrder::SeqCst); \ + RMW##op, 8, offset, Type::i64, mem, memoryOrder); \ } \ case BinaryConsts::I64AtomicRMW##op##8U: { \ auto [mem, align, offset, memoryOrder] = getRMWMemarg(); \ return builder.makeAtomicRMW( \ - RMW##op, 1, offset, Type::i64, mem, MemoryOrder::SeqCst); \ + RMW##op, 1, offset, Type::i64, mem, memoryOrder); \ } \ case BinaryConsts::I64AtomicRMW##op##16U: { \ auto [mem, align, offset, memoryOrder] = getRMWMemarg(); \ return builder.makeAtomicRMW( \ - RMW##op, 2, offset, Type::i64, mem, MemoryOrder::SeqCst); \ + RMW##op, 2, offset, Type::i64, mem, memoryOrder); \ } \ case BinaryConsts::I64AtomicRMW##op##32U: { \ auto [mem, align, offset, memoryOrder] = getRMWMemarg(); \ return builder.makeAtomicRMW( \ - RMW##op, 4, offset, Type::i64, mem, MemoryOrder::SeqCst); \ + RMW##op, 4, offset, Type::i64, mem, memoryOrder); \ } RMW(Add);