Simplified even more the global inits

This commit is contained in:
Syrus
2019-01-24 16:45:22 -08:00
parent 4a8eacb370
commit c22f1eee0f

View File

@ -327,7 +327,7 @@ macro_rules! func {
} }
macro_rules! global { macro_rules! global {
($value:ident) => {{ ($value:expr) => {{
unsafe { unsafe {
GlobalPointer::new( GlobalPointer::new(
// NOTE: Taking a shortcut here. LocalGlobal is a struct containing just u64. // NOTE: Taking a shortcut here. LocalGlobal is a struct containing just u64.
@ -337,20 +337,18 @@ macro_rules! global {
}}; }};
} }
type EmscriptenDataType = (u64, Type);
pub struct EmscriptenGlobalsData { pub struct EmscriptenGlobalsData {
// Env namespace // Env namespace
stacktop: EmscriptenDataType, stacktop: u64,
stack_max: EmscriptenDataType, stack_max: u64,
dynamictop_ptr: EmscriptenDataType, dynamictop_ptr: u64,
memory_base: EmscriptenDataType, memory_base: u64,
table_base: EmscriptenDataType, table_base: u64,
temp_double_ptr: EmscriptenDataType, temp_double_ptr: u64,
// Global namespace // Global namespace
infinity: EmscriptenDataType, infinity: u64,
nan: EmscriptenDataType, nan: u64,
} }
pub struct EmscriptenGlobals { pub struct EmscriptenGlobals {
@ -383,21 +381,21 @@ impl<'a> EmscriptenGlobals {
let mut table = TableBacking::new(&table_type); let mut table = TableBacking::new(&table_type);
let vm_table = table.into_vm_table(); let vm_table = table.into_vm_table();
let memory_base = (STATIC_BASE as u64, I32); let memory_base = STATIC_BASE as u64;
let table_base = (0 as u64, I32); let table_base = 0 as u64;
let temp_double_ptr = (0 as u64, I32); let temp_double_ptr = 0 as u64;
let data = EmscriptenGlobalsData { let data = EmscriptenGlobalsData {
// env // env
stacktop: (stacktop(STATIC_BUMP) as _, I32), stacktop: stacktop(STATIC_BUMP) as _,
stack_max: (stack_max(STATIC_BUMP) as _, I32), stack_max: stack_max(STATIC_BUMP) as _,
dynamictop_ptr: (dynamictop_ptr(STATIC_BUMP) as _, I32), dynamictop_ptr: dynamictop_ptr(STATIC_BUMP) as _,
memory_base: memory_base, memory_base: memory_base,
table_base: table_base, table_base: table_base,
temp_double_ptr: temp_double_ptr, temp_double_ptr: temp_double_ptr,
// global // global
infinity: (std::f64::INFINITY.to_bits() as _, F64), infinity: std::f64::INFINITY.to_bits() as _,
nan: (std::f64::NAN.to_bits() as _, F64), nan: std::f64::NAN.to_bits() as _,
}; };
Self { Self {
@ -456,122 +454,112 @@ pub fn generate_emscripten_env(globals: &mut EmscriptenGlobals) -> ImportObject
}, },
); );
let (value, ty) = globals.data.stacktop;
env_namespace.insert( env_namespace.insert(
"STACKTOP".to_string(), "STACKTOP".to_string(),
Export::Global { Export::Global {
local: global!(value), local: global!(globals.data.stacktop),
global: GlobalDesc { global: GlobalDesc {
mutable: false, mutable: false,
ty: ty.clone(), ty: I32,
}, },
}, },
); );
let (value, ty) = globals.data.stack_max;
env_namespace.insert( env_namespace.insert(
"STACK_MAX".to_string(), "STACK_MAX".to_string(),
Export::Global { Export::Global {
local: global!(value), local: global!(globals.data.stack_max),
global: GlobalDesc { global: GlobalDesc {
mutable: false, mutable: false,
ty: ty.clone(), ty: I32,
}, },
}, },
); );
let (value, ty) = globals.data.dynamictop_ptr;
env_namespace.insert( env_namespace.insert(
"DYNAMICTOP_PTR".to_string(), "DYNAMICTOP_PTR".to_string(),
Export::Global { Export::Global {
local: global!(value), local: global!(globals.data.dynamictop_ptr),
global: GlobalDesc { global: GlobalDesc {
mutable: false, mutable: false,
ty: ty.clone(), ty: I32,
}, },
}, },
); );
let (value, ty) = globals.data.table_base;
env_namespace.insert( env_namespace.insert(
"tableBase".to_string(), "tableBase".to_string(),
Export::Global { Export::Global {
local: global!(value), local: global!(globals.data.table_base),
global: GlobalDesc { global: GlobalDesc {
mutable: false, mutable: false,
ty: ty.clone(), ty: I32,
}, },
}, },
); );
let (value, ty) = globals.data.table_base;
env_namespace.insert( env_namespace.insert(
"__table_base".to_string(), "__table_base".to_string(),
Export::Global { Export::Global {
local: global!(value), local: global!(globals.data.table_base),
global: GlobalDesc { global: GlobalDesc {
mutable: false, mutable: false,
ty: ty.clone(), ty: I32,
}, },
}, },
); );
let (value, ty) = globals.data.memory_base;
env_namespace.insert( env_namespace.insert(
"memoryBase".to_string(), "memoryBase".to_string(),
Export::Global { Export::Global {
local: global!(value), local: global!(globals.data.memory_base),
global: GlobalDesc { global: GlobalDesc {
mutable: false, mutable: false,
ty: ty.clone(), ty: I32,
}, },
}, },
); );
let (value, ty) = globals.data.memory_base;
env_namespace.insert( env_namespace.insert(
"__memory_base".to_string(), "__memory_base".to_string(),
Export::Global { Export::Global {
local: global!(value), local: global!(globals.data.memory_base),
global: GlobalDesc { global: GlobalDesc {
mutable: false, mutable: false,
ty: ty.clone(), ty: I32,
}, },
}, },
); );
let (value, ty) = globals.data.temp_double_ptr;
env_namespace.insert( env_namespace.insert(
"tempDoublePtr".to_string(), "tempDoublePtr".to_string(),
Export::Global { Export::Global {
local: global!(value), local: global!(globals.data.temp_double_ptr),
global: GlobalDesc { global: GlobalDesc {
mutable: false, mutable: false,
ty: ty.clone(), ty: I32,
}, },
}, },
); );
let (value, ty) = globals.data.infinity;
global_namespace.insert( global_namespace.insert(
"Infinity".to_string(), "Infinity".to_string(),
Export::Global { Export::Global {
local: global!(value), local: global!(globals.data.infinity),
global: GlobalDesc { global: GlobalDesc {
mutable: false, mutable: false,
ty: ty.clone(), ty: F64,
}, },
}, },
); );
let (value, ty) = globals.data.nan;
global_namespace.insert( global_namespace.insert(
"NaN".to_string(), "NaN".to_string(),
Export::Global { Export::Global {
local: global!(value), local: global!(globals.data.nan),
global: GlobalDesc { global: GlobalDesc {
mutable: false, mutable: false,
ty: ty.clone(), ty: F64,
}, },
}, },
); );