From c1436eb4de722224757173df99621fb5f0692456 Mon Sep 17 00:00:00 2001 From: Yi LIU Date: Sat, 14 Feb 2026 00:00:26 +0800 Subject: [PATCH] Fix i64.atomic.rmw.or using AND instead of OR The I64_ATOMIC_RMW_OR handler incorrectly dispatched to V3Eval.I64_AND instead of V3Eval.I64_OR, causing the atomic read-modify-write to perform a bitwise AND instead of the intended bitwise OR. --- src/engine/v3/V3Interpreter.v3 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/v3/V3Interpreter.v3 b/src/engine/v3/V3Interpreter.v3 index 3465c453f..decfbc0e0 100644 --- a/src/engine/v3/V3Interpreter.v3 +++ b/src/engine/v3/V3Interpreter.v3 @@ -524,7 +524,7 @@ class V3Interpreter extends WasmStack { I64_ATOMIC_RMW16_AND_U => doAtomicRmw(ACCESS_U16, popw16(), u16.&, pushw16); I64_ATOMIC_RMW32_AND_U => doAtomicRmw(ACCESS_U32, popw32(), u32.&, pushw32); I32_ATOMIC_RMW_OR => doAtomicRmw(ACCESS_U32, popu(), V3Eval.I32_OR, pushu); - I64_ATOMIC_RMW_OR => doAtomicRmw(ACCESS_U64, popw(), V3Eval.I64_AND, pushw); + I64_ATOMIC_RMW_OR => doAtomicRmw(ACCESS_U64, popw(), V3Eval.I64_OR, pushw); I32_ATOMIC_RMW8_OR_U => doAtomicRmw(ACCESS_U8, popu8(), u8.|, pushu8); I32_ATOMIC_RMW16_OR_U => doAtomicRmw(ACCESS_U16, popu16(), u16.|, pushu16); I64_ATOMIC_RMW8_OR_U => doAtomicRmw(ACCESS_U8, popw8(), u8.|, pushw8);