Add an offset to cranelift-wasm's GlobalVariable.

This commit is contained in:
Dan Gohman
2018-12-06 17:54:10 -05:00
parent 605f34257b
commit 7b51195f49
5 changed files with 14 additions and 11 deletions

View File

@@ -75,12 +75,12 @@ pub fn translate_operator<FE: FuncEnvironment + ?Sized>(
Operator::GetGlobal { global_index } => {
let val = match state.get_global(builder.func, global_index, environ) {
GlobalVariable::Const(val) => val,
GlobalVariable::Memory { gv, ty } => {
GlobalVariable::Memory { gv, offset, ty } => {
let addr = builder.ins().global_value(environ.pointer_type(), gv);
let mut flags = ir::MemFlags::new();
flags.set_notrap();
flags.set_aligned();
builder.ins().load(ty, flags, addr, 0)
builder.ins().load(ty, flags, addr, offset)
}
};
state.push1(val);
@@ -88,13 +88,14 @@ pub fn translate_operator<FE: FuncEnvironment + ?Sized>(
Operator::SetGlobal { global_index } => {
match state.get_global(builder.func, global_index, environ) {
GlobalVariable::Const(_) => panic!("global #{} is a constant", global_index),
GlobalVariable::Memory { gv, .. } => {
GlobalVariable::Memory { gv, offset, ty } => {
let addr = builder.ins().global_value(environ.pointer_type(), gv);
let mut flags = ir::MemFlags::new();
flags.set_notrap();
flags.set_aligned();
let val = state.pop1();
builder.ins().store(flags, val, addr, 0);
debug_assert_eq!(ty, builder.func.dfg.value_type(val));
builder.ins().store(flags, val, addr, offset);
}
}
}