Implement load and store.

This commit is contained in:
Nick Lewycky
2020-05-07 18:30:17 -07:00
parent fa8774e9a2
commit 63d7df78fa
2 changed files with 1695 additions and 1885 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -169,6 +169,10 @@ pub struct Intrinsics<'ctx> {
pub experimental_stackmap: FunctionValue<'ctx>,
pub vmmemory_definition_ptr_ty: PointerType<'ctx>,
pub vmmemory_definition_base_element: u32,
pub vmmemory_definition_current_length_element: u32,
pub memory32_grow_ptr_ty: PointerType<'ctx>,
pub imported_memory32_grow_ptr_ty: PointerType<'ctx>,
pub memory32_size_ptr_ty: PointerType<'ctx>,
@@ -226,6 +230,7 @@ impl<'ctx> Intrinsics<'ctx> {
let f32x4_ty_basic = f32x4_ty.as_basic_type_enum();
let f64x2_ty_basic = f64x2_ty.as_basic_type_enum();
let i8_ptr_ty_basic = i8_ptr_ty.as_basic_type_enum();
let i64_ptr_ty_basic = i64_ptr_ty.as_basic_type_enum();
let ctx_ty = i8_ty;
let ctx_ptr_ty = ctx_ty.ptr_type(AddressSpace::Generic);
@@ -572,6 +577,13 @@ impl<'ctx> Intrinsics<'ctx> {
None,
),
// TODO: this i64 is actually a rust usize
vmmemory_definition_ptr_ty: context
.struct_type(&[i8_ptr_ty_basic, i64_ptr_ty_basic], false)
.ptr_type(AddressSpace::Generic),
vmmemory_definition_base_element: 0,
vmmemory_definition_current_length_element: 1,
memory32_grow_ptr_ty: i32_ty
.fn_type(
&[ctx_ptr_ty.as_basic_type_enum(), i32_ty_basic, i32_ty_basic],
@@ -665,7 +677,7 @@ struct ImportedFuncCache<'ctx> {
}
pub struct CtxType<'ctx, 'a> {
pub ctx_ptr_value: PointerValue<'ctx>,
ctx_ptr_value: PointerValue<'ctx>,
wasm_module: &'a WasmerCompilerModule,
cache_builder: &'a Builder<'ctx>,