From 0c0ccc5d0999b5059fe9fd21e33e7beb023bed2a Mon Sep 17 00:00:00 2001 From: Dan Gohman Date: Thu, 13 Dec 2018 15:50:58 -0800 Subject: [PATCH] Add unsigned access methods to VMGlobalDefinition. --- lib/runtime/src/instance.rs | 4 ++-- lib/runtime/src/vmcontext.rs | 24 ++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/lib/runtime/src/instance.rs b/lib/runtime/src/instance.rs index 64c90b6622..5d89e95aab 100644 --- a/lib/runtime/src/instance.rs +++ b/lib/runtime/src/instance.rs @@ -329,7 +329,7 @@ fn check_table_init_bounds(instance: &mut Instance) -> Result<(), InstantiationE } else { unsafe { instance.vmctx.imported_global(base).from } }; - start += unsafe { *(&*global).as_i32() } as u32 as usize; + start += unsafe { *(&*global).as_u32() } as usize; } // TODO: Refactor this. @@ -368,7 +368,7 @@ fn check_memory_init_bounds( } else { unsafe { instance.vmctx.imported_global(base).from } }; - start += unsafe { *(&*global).as_i32() } as u32 as usize; + start += unsafe { *(&*global).as_u32() } as usize; } // TODO: Refactor this. diff --git a/lib/runtime/src/vmcontext.rs b/lib/runtime/src/vmcontext.rs index c3327f8be0..29da5e1891 100644 --- a/lib/runtime/src/vmcontext.rs +++ b/lib/runtime/src/vmcontext.rs @@ -295,6 +295,18 @@ impl VMGlobalDefinition { &mut *(self.storage.as_mut().as_mut_ptr() as *mut u8 as *mut i32) } + /// Return a reference to the value as a u32. + #[allow(clippy::cast_ptr_alignment)] + pub unsafe fn as_u32(&self) -> &u32 { + &*(self.storage.as_ref().as_ptr() as *const u8 as *const u32) + } + + /// Return a mutable reference to the value as an u32. + #[allow(clippy::cast_ptr_alignment)] + pub unsafe fn as_u32_mut(&mut self) -> &mut u32 { + &mut *(self.storage.as_mut().as_mut_ptr() as *mut u8 as *mut u32) + } + /// Return a reference to the value as an i64. #[allow(clippy::cast_ptr_alignment)] pub unsafe fn as_i64(&self) -> &i64 { @@ -307,6 +319,18 @@ impl VMGlobalDefinition { &mut *(self.storage.as_mut().as_mut_ptr() as *mut u8 as *mut i64) } + /// Return a reference to the value as an u64. + #[allow(clippy::cast_ptr_alignment)] + pub unsafe fn as_u64(&self) -> &u64 { + &*(self.storage.as_ref().as_ptr() as *const u8 as *const u64) + } + + /// Return a mutable reference to the value as an u64. + #[allow(clippy::cast_ptr_alignment)] + pub unsafe fn as_u64_mut(&mut self) -> &mut u64 { + &mut *(self.storage.as_mut().as_mut_ptr() as *mut u8 as *mut u64) + } + /// Return a reference to the value as an f32. #[allow(clippy::cast_ptr_alignment)] pub unsafe fn as_f32(&self) -> &f32 {