From 8143a05812c56cf8b728f05aff68d2e207bde82a Mon Sep 17 00:00:00 2001 From: Scott Olson Date: Fri, 14 Oct 2016 03:49:02 -0600 Subject: [PATCH] Implement atomic_{load,store}. --- src/interpreter/terminator/intrinsics.rs | 26 +++++++++++++----------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/src/interpreter/terminator/intrinsics.rs b/src/interpreter/terminator/intrinsics.rs index 5fd96426b798..dbf99cad52dc 100644 --- a/src/interpreter/terminator/intrinsics.rs +++ b/src/interpreter/terminator/intrinsics.rs @@ -75,6 +75,20 @@ impl<'a, 'tcx> EvalContext<'a, 'tcx> { } } + "atomic_load" | + "volatile_load" => { + let ty = substs.type_at(0); + let ptr = args_ptrs[0].read_ptr(&self.memory)?; + self.write_value(Value::ByRef(ptr), dest, ty)?; + } + + "atomic_store" | + "volatile_store" => { + let ty = substs.type_at(0); + let dest = args_ptrs[0].read_ptr(&self.memory)?; + self.write_value_to_ptr(args_ptrs[1], dest, ty)?; + } + "breakpoint" => unimplemented!(), // halt miri "copy" | @@ -246,18 +260,6 @@ impl<'a, 'tcx> EvalContext<'a, 'tcx> { self.memory.mark_definedness(dest, size, false)?; } - "volatile_load" => { - let ty = substs.type_at(0); - let ptr = args_ptrs[0].read_ptr(&self.memory)?; - self.write_value(Value::ByRef(ptr), dest, ty)?; - } - - "volatile_store" => { - let ty = substs.type_at(0); - let dest = args_ptrs[0].read_ptr(&self.memory)?; - self.write_value_to_ptr(args_ptrs[1], dest, ty)?; - } - name => return Err(EvalError::Unimplemented(format!("unimplemented intrinsic: {}", name))), }