mirror of
https://github.com/fluencelabs/wasmer
synced 2025-06-16 02:11:20 +00:00
Simplified even more the global inits
This commit is contained in:
@ -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,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
Reference in New Issue
Block a user