feat: implement memory.atomic.notify,wait32,wait64 (#5255)
* feat: implement memory.atomic.notify,wait32,wait64 Added the parking_spot crate, which provides the needed registry for the operations. Signed-off-by: Harald Hoyer <harald@profian.com> * fix: change trap message for HeapMisaligned The threads spec test wants "unaligned atomic" instead of "misaligned memory access". Signed-off-by: Harald Hoyer <harald@profian.com> * tests: add test for atomic wait on non-shared memory Signed-off-by: Harald Hoyer <harald@profian.com> * tests: add tests/spec_testsuite/proposals/threads without pooling and reference types. Also "shared_memory" is added to the "spectest" interface. Signed-off-by: Harald Hoyer <harald@profian.com> * tests: add atomics_notify.wast checking that notify with 0 waiters returns 0 on shared and non-shared memory. Signed-off-by: Harald Hoyer <harald@profian.com> * tests: add tests for atomic wait on shared memory - return 2 - timeout for 0 - return 2 - timeout for 1000ns - return 1 - invalid value Signed-off-by: Harald Hoyer <harald@profian.com> * fixup! feat: implement memory.atomic.notify,wait32,wait64 Signed-off-by: Harald Hoyer <harald@profian.com> * fixup! feat: implement memory.atomic.notify,wait32,wait64 Signed-off-by: Harald Hoyer <harald@profian.com> Signed-off-by: Harald Hoyer <harald@profian.com>
This commit is contained in:
@@ -196,6 +196,17 @@ impl Instance {
|
||||
}
|
||||
}
|
||||
|
||||
/// Get a locally defined or imported memory.
|
||||
pub(crate) fn get_runtime_memory(&mut self, index: MemoryIndex) -> &mut Memory {
|
||||
if let Some(defined_index) = self.module().defined_memory_index(index) {
|
||||
unsafe { &mut *self.get_defined_memory(defined_index) }
|
||||
} else {
|
||||
let import = self.imported_memory(index);
|
||||
let ctx = unsafe { &mut *import.vmctx };
|
||||
unsafe { &mut *ctx.instance_mut().get_defined_memory(import.index) }
|
||||
}
|
||||
}
|
||||
|
||||
/// Return the indexed `VMMemoryDefinition`.
|
||||
fn memory(&self, index: DefinedMemoryIndex) -> VMMemoryDefinition {
|
||||
unsafe { VMMemoryDefinition::load(self.memory_ptr(index)) }
|
||||
|
||||
Reference in New Issue
Block a user