Load/store constant offset utility

This commit is contained in:
dcodeIO
2018-01-21 16:34:50 +01:00
parent b77646df6e
commit a257b6e529
11 changed files with 327 additions and 27 deletions

View File

@ -354,6 +354,66 @@
(i32.const 8)
)
)
(set_global $builtins/i
(i32.load
(i32.const 8)
)
)
(i32.store
(i32.const 8)
(get_global $builtins/i)
)
(i32.store
(i32.const 8)
(i32.load
(i32.const 8)
)
)
(set_global $builtins/I
(i64.load
(i32.const 8)
)
)
(i64.store
(i32.const 8)
(get_global $builtins/I)
)
(i64.store
(i32.const 8)
(i64.load
(i32.const 8)
)
)
(set_global $builtins/f
(f32.load
(i32.const 8)
)
)
(f32.store
(i32.const 8)
(get_global $builtins/f)
)
(f32.store
(i32.const 8)
(f32.load
(i32.const 8)
)
)
(set_global $builtins/F
(f64.load
(i32.const 8)
)
)
(f64.store
(i32.const 8)
(get_global $builtins/F)
)
(f64.store
(i32.const 8)
(f64.load
(i32.const 8)
)
)
(set_global $builtins/i
(i32.const 1067450368)
)

View File

@ -115,6 +115,16 @@ store<f32>(8, load<f32>(8));
F = load<f64>(8); store<f64>(8, F);
store<f64>(8, load<f64>(8));
const constantOffset: usize = 8;
i = load<i32>(0, constantOffset); store<i32>(0, i, constantOffset);
store<i32>(0, load<i32>(0, constantOffset), constantOffset);
I = load<i64>(0, constantOffset); store<i64>(0, I, constantOffset);
store<i64>(0, load<i64>(0, constantOffset), constantOffset);
f = load<f32>(0, constantOffset); store<f32>(0, f, constantOffset);
store<f32>(0, load<f32>(0, constantOffset), constantOffset);
F = load<f64>(0, constantOffset); store<f64>(0, F, constantOffset);
store<f64>(0, load<f64>(0, constantOffset), constantOffset);
// reinterpretation
reinterpret<i32>(1.25);

View File

@ -1,10 +1,12 @@
(module
(type $i (func (result i32)))
(type $v (func))
(global $builtins/b (mut i32) (i32.const 0))
(global $builtins/i (mut i32) (i32.const 0))
(global $builtins/I (mut i64) (i64.const 0))
(global $builtins/f (mut f32) (f32.const 0))
(global $builtins/F (mut f64) (f64.const 0))
(global $builtins/constantOffset i32 (i32.const 8))
(global $builtins/s (mut i32) (i32.const 0))
(global $i8.MIN_VALUE i32 (i32.const -128))
(global $i8.MAX_VALUE i32 (i32.const 127))
@ -748,6 +750,66 @@
(i32.const 8)
)
)
(set_global $builtins/i
(i32.load offset=8
(i32.const 0)
)
)
(i32.store offset=8
(i32.const 0)
(get_global $builtins/i)
)
(i32.store offset=8
(i32.const 0)
(i32.load offset=8
(i32.const 0)
)
)
(set_global $builtins/I
(i64.load offset=8
(i32.const 0)
)
)
(i64.store offset=8
(i32.const 0)
(get_global $builtins/I)
)
(i64.store offset=8
(i32.const 0)
(i64.load offset=8
(i32.const 0)
)
)
(set_global $builtins/f
(f32.load offset=8
(i32.const 0)
)
)
(f32.store offset=8
(i32.const 0)
(get_global $builtins/f)
)
(f32.store offset=8
(i32.const 0)
(f32.load offset=8
(i32.const 0)
)
)
(set_global $builtins/F
(f64.load offset=8
(i32.const 0)
)
)
(f64.store offset=8
(i32.const 0)
(get_global $builtins/F)
)
(f64.store offset=8
(i32.const 0)
(f64.load offset=8
(i32.const 0)
)
)
(drop
(i32.reinterpret/f32
(f32.const 1.25)
@ -1391,6 +1453,7 @@
GLOBAL: builtins/I
GLOBAL: builtins/f
GLOBAL: builtins/F
GLOBAL: builtins/constantOffset
GLOBAL: builtins/s
FUNCTION_PROTOTYPE: builtins/test
[program.exports]

View File

@ -3598,6 +3598,66 @@
(i32.const 8)
)
)
(set_global $builtins/i
(i32.load
(i32.const 8)
)
)
(i32.store
(i32.const 8)
(get_global $builtins/i)
)
(i32.store
(i32.const 8)
(i32.load
(i32.const 8)
)
)
(set_global $builtins/I
(i64.load
(i32.const 8)
)
)
(i64.store
(i32.const 8)
(get_global $builtins/I)
)
(i64.store
(i32.const 8)
(i64.load
(i32.const 8)
)
)
(set_global $builtins/f
(f32.load
(i32.const 8)
)
)
(f32.store
(i32.const 8)
(get_global $builtins/f)
)
(f32.store
(i32.const 8)
(f32.load
(i32.const 8)
)
)
(set_global $builtins/F
(f64.load
(i32.const 8)
)
)
(f64.store
(i32.const 8)
(get_global $builtins/F)
)
(f64.store
(i32.const 8)
(f64.load
(i32.const 8)
)
)
(set_global $builtins/i
(i32.const 1067450368)
)

View File

@ -1,6 +1,6 @@
(module
(type $ii (func (param i32) (result i32)))
(type $i (func (result i32)))
(type $ii (func (param i32) (result i32)))
(type $iii (func (param i32 i32) (result i32)))
(type $fff (func (param f32 f32) (result f32)))
(type $FFF (func (param f64 f64) (result f64)))
@ -33,6 +33,7 @@
(global $builtins/I (mut i64) (i64.const 0))
(global $builtins/f (mut f32) (f32.const 0))
(global $builtins/F (mut f64) (f64.const 0))
(global $builtins/constantOffset i32 (i32.const 8))
(global $builtins/s (mut i32) (i32.const 0))
(global $i8.MIN_VALUE i32 (i32.const -128))
(global $i8.MAX_VALUE i32 (i32.const 127))
@ -5134,6 +5135,66 @@
(i32.const 8)
)
)
(set_global $builtins/i
(i32.load offset=8
(i32.const 0)
)
)
(i32.store offset=8
(i32.const 0)
(get_global $builtins/i)
)
(i32.store offset=8
(i32.const 0)
(i32.load offset=8
(i32.const 0)
)
)
(set_global $builtins/I
(i64.load offset=8
(i32.const 0)
)
)
(i64.store offset=8
(i32.const 0)
(get_global $builtins/I)
)
(i64.store offset=8
(i32.const 0)
(i64.load offset=8
(i32.const 0)
)
)
(set_global $builtins/f
(f32.load offset=8
(i32.const 0)
)
)
(f32.store offset=8
(i32.const 0)
(get_global $builtins/f)
)
(f32.store offset=8
(i32.const 0)
(f32.load offset=8
(i32.const 0)
)
)
(set_global $builtins/F
(f64.load offset=8
(i32.const 0)
)
)
(f64.store offset=8
(i32.const 0)
(get_global $builtins/F)
)
(f64.store offset=8
(i32.const 0)
(f64.load offset=8
(i32.const 0)
)
)
(drop
(i32.reinterpret/f32
(f32.const 1.25)
@ -6307,6 +6368,7 @@
GLOBAL: builtins/I
GLOBAL: builtins/f
GLOBAL: builtins/F
GLOBAL: builtins/constantOffset
GLOBAL: builtins/s
FUNCTION_PROTOTYPE: builtins/test
FUNCTION_PROTOTYPE: memcpy/memcpy