diff --git a/lib/wasm/src/code_translator.rs b/lib/wasm/src/code_translator.rs index 578ba9dfcb..dec6dda896 100644 --- a/lib/wasm/src/code_translator.rs +++ b/lib/wasm/src/code_translator.rs @@ -75,7 +75,7 @@ pub fn translate_operator( let val = match state.get_global(builder.func, global_index, environ) { GlobalVariable::Const(val) => val, GlobalVariable::Memory { gv, ty } => { - let addr = builder.ins().global_value(environ.native_pointer(), gv); + let addr = builder.ins().global_value(environ.pointer_type(), gv); let mut flags = ir::MemFlags::new(); flags.set_notrap(); flags.set_aligned(); @@ -88,7 +88,7 @@ pub fn translate_operator( match state.get_global(builder.func, global_index, environ) { GlobalVariable::Const(_) => panic!("global #{} is a constant", global_index), GlobalVariable::Memory { gv, .. } => { - let addr = builder.ins().global_value(environ.native_pointer(), gv); + let addr = builder.ins().global_value(environ.pointer_type(), gv); let mut flags = ir::MemFlags::new(); flags.set_notrap(); flags.set_aligned(); @@ -1024,7 +1024,7 @@ fn translate_load( let addr32 = state.pop1(); // We don't yet support multiple linear memories. let heap = state.get_heap(builder.func, 0, environ); - let (base, offset) = get_heap_addr(heap, addr32, offset, environ.native_pointer(), builder); + let (base, offset) = get_heap_addr(heap, addr32, offset, environ.pointer_type(), builder); // Note that we don't set `is_aligned` here, even if the load instruction's // alignment immediate says it's aligned, because WebAssembly's immediate // field is just a hint, while Cranelift's aligned flag needs a guarantee. @@ -1048,7 +1048,7 @@ fn translate_store( // We don't yet support multiple linear memories. let heap = state.get_heap(builder.func, 0, environ); - let (base, offset) = get_heap_addr(heap, addr32, offset, environ.native_pointer(), builder); + let (base, offset) = get_heap_addr(heap, addr32, offset, environ.pointer_type(), builder); // See the comments in `translate_load` about the flags. let flags = MemFlags::new(); builder diff --git a/lib/wasm/src/environ/dummy.rs b/lib/wasm/src/environ/dummy.rs index 37013cad0a..b2f58de97b 100644 --- a/lib/wasm/src/environ/dummy.rs +++ b/lib/wasm/src/environ/dummy.rs @@ -141,7 +141,7 @@ impl<'dummy_environment> DummyFuncEnvironment<'dummy_environment> { fn vmctx_sig(&self, sigidx: SignatureIndex) -> ir::Signature { let mut sig = self.mod_info.signatures[sigidx].clone(); sig.params.push(ir::AbiParam::special( - self.native_pointer(), + self.pointer_type(), ir::ArgumentPurpose::VMContext, )); sig @@ -217,7 +217,7 @@ impl<'dummy_environment> FuncEnvironment for DummyFuncEnvironment<'dummy_environ // The `callee` value is an index into a table of function pointers. // Apparently, that table is stored at absolute address 0 in this dummy environment. // TODO: Generate bounds checking code. - let ptr = self.native_pointer(); + let ptr = self.pointer_type(); let callee_offset = if ptr == I32 { pos.ins().imul_imm(callee, 4) } else { diff --git a/lib/wasm/src/environ/spec.rs b/lib/wasm/src/environ/spec.rs index 7368b60e58..3c52ba32fe 100644 --- a/lib/wasm/src/environ/spec.rs +++ b/lib/wasm/src/environ/spec.rs @@ -85,7 +85,7 @@ pub trait FuncEnvironment { /// Get the Cranelift integer type to use for native pointers. /// /// This returns `I64` for 64-bit architectures and `I32` for 32-bit architectures. - fn native_pointer(&self) -> ir::Type { + fn pointer_type(&self) -> ir::Type { ir::Type::int(u16::from(self.triple().pointer_width().unwrap().bits())).unwrap() }