e583ea9b484fe16d72899fa3fae33475ab51ce05
[platform/framework/web/lwnode.git] /
1 (module
2   (memory i64 1)
3
4   ;; Stores an i16 value in little-endian-format
5   (func $i16_store_little (param $address i64) (param $value i32)
6     (i32.store8 (local.get $address) (local.get $value))
7     (i32.store8 (i64.add (local.get $address) (i64.const 1)) (i32.shr_u (local.get $value) (i32.const 8)))
8   )
9
10   ;; Stores an i32 value in little-endian format
11   (func $i32_store_little (param $address i64) (param $value i32)
12     (call $i16_store_little (local.get $address) (local.get $value))
13     (call $i16_store_little (i64.add (local.get $address) (i64.const 2)) (i32.shr_u (local.get $value) (i32.const 16)))
14   )
15
16   ;; Stores an i64 value in little-endian format
17   (func $i64_store_little (param $address i64) (param $value i64)
18     (call $i32_store_little (local.get $address) (i32.wrap_i64 (local.get $value)))
19     (call $i32_store_little (i64.add (local.get $address) (i64.const 4)) (i32.wrap_i64 (i64.shr_u (local.get $value) (i64.const 32))))
20   )
21
22   ;; Loads an i16 value in little-endian format
23   (func $i16_load_little (param $address i64) (result i32)
24     (i32.or
25       (i32.load8_u (local.get $address))
26       (i32.shl (i32.load8_u (i64.add (local.get $address) (i64.const 1))) (i32.const 8))
27     )
28   )
29
30   ;; Loads an i32 value in little-endian format
31   (func $i32_load_little (param $address i64) (result i32)
32     (i32.or
33       (call $i16_load_little (local.get $address))
34       (i32.shl (call $i16_load_little (i64.add (local.get $address) (i64.const 2))) (i32.const 16))
35     )
36   )
37
38   ;; Loads an i64 value in little-endian format
39   (func $i64_load_little (param $address i64) (result i64)
40     (i64.or
41       (i64.extend_i32_u (call $i32_load_little (local.get $address)))
42       (i64.shl (i64.extend_i32_u (call $i32_load_little (i64.add (local.get $address) (i64.const 4)))) (i64.const 32))
43     )
44   )
45
46   (func (export "i32_load16_s") (param $value i32) (result i32)
47     (call $i16_store_little (i64.const 0) (local.get $value))
48     (i32.load16_s (i64.const 0))
49   )
50
51   (func (export "i32_load16_u") (param $value i32) (result i32)
52     (call $i16_store_little (i64.const 0) (local.get $value))
53     (i32.load16_u (i64.const 0))
54   )
55
56   (func (export "i32_load") (param $value i32) (result i32)
57     (call $i32_store_little (i64.const 0) (local.get $value))
58     (i32.load (i64.const 0))
59   )
60
61   (func (export "i64_load16_s") (param $value i64) (result i64)
62     (call $i16_store_little (i64.const 0) (i32.wrap_i64 (local.get $value)))
63     (i64.load16_s (i64.const 0))
64   )
65
66   (func (export "i64_load16_u") (param $value i64) (result i64)
67     (call $i16_store_little (i64.const 0) (i32.wrap_i64 (local.get $value)))
68     (i64.load16_u (i64.const 0))
69   )
70
71   (func (export "i64_load32_s") (param $value i64) (result i64)
72     (call $i32_store_little (i64.const 0) (i32.wrap_i64 (local.get $value)))
73     (i64.load32_s (i64.const 0))
74   )
75
76   (func (export "i64_load32_u") (param $value i64) (result i64)
77     (call $i32_store_little (i64.const 0) (i32.wrap_i64 (local.get $value)))
78     (i64.load32_u (i64.const 0))
79   )
80
81   (func (export "i64_load") (param $value i64) (result i64)
82     (call $i64_store_little (i64.const 0) (local.get $value))
83     (i64.load (i64.const 0))
84   )
85
86   (func (export "f32_load") (param $value f32) (result f32)
87     (call $i32_store_little (i64.const 0) (i32.reinterpret_f32 (local.get $value)))
88     (f32.load (i64.const 0))
89   )
90
91   (func (export "f64_load") (param $value f64) (result f64)
92     (call $i64_store_little (i64.const 0) (i64.reinterpret_f64 (local.get $value)))
93     (f64.load (i64.const 0))
94   )
95
96
97   (func (export "i32_store16") (param $value i32) (result i32)
98     (i32.store16 (i64.const 0) (local.get $value))
99     (call $i16_load_little (i64.const 0))
100   )
101
102   (func (export "i32_store") (param $value i32) (result i32)
103     (i32.store (i64.const 0) (local.get $value))
104     (call $i32_load_little (i64.const 0))
105   )
106
107   (func (export "i64_store16") (param $value i64) (result i64)
108     (i64.store16 (i64.const 0) (local.get $value))
109     (i64.extend_i32_u (call $i16_load_little (i64.const 0)))
110   )
111
112   (func (export "i64_store32") (param $value i64) (result i64)
113     (i64.store32 (i64.const 0) (local.get $value))
114     (i64.extend_i32_u (call $i32_load_little (i64.const 0)))
115   )
116
117   (func (export "i64_store") (param $value i64) (result i64)
118     (i64.store (i64.const 0) (local.get $value))
119     (call $i64_load_little (i64.const 0))
120   )
121
122   (func (export "f32_store") (param $value f32) (result f32)
123     (f32.store (i64.const 0) (local.get $value))
124     (f32.reinterpret_i32 (call $i32_load_little (i64.const 0)))
125   )
126
127   (func (export "f64_store") (param $value f64) (result f64)
128     (f64.store (i64.const 0) (local.get $value))
129     (f64.reinterpret_i64 (call $i64_load_little (i64.const 0)))
130   )
131 )
132
133 (assert_return (invoke "i32_load16_s" (i32.const -1)) (i32.const -1))
134 (assert_return (invoke "i32_load16_s" (i32.const -4242)) (i32.const -4242))
135 (assert_return (invoke "i32_load16_s" (i32.const 42)) (i32.const 42))
136 (assert_return (invoke "i32_load16_s" (i32.const 0x3210)) (i32.const 0x3210))
137
138 (assert_return (invoke "i32_load16_u" (i32.const -1)) (i32.const 0xFFFF))
139 (assert_return (invoke "i32_load16_u" (i32.const -4242)) (i32.const 61294))
140 (assert_return (invoke "i32_load16_u" (i32.const 42)) (i32.const 42))
141 (assert_return (invoke "i32_load16_u" (i32.const 0xCAFE)) (i32.const 0xCAFE))
142
143 (assert_return (invoke "i32_load" (i32.const -1)) (i32.const -1))
144 (assert_return (invoke "i32_load" (i32.const -42424242)) (i32.const -42424242))
145 (assert_return (invoke "i32_load" (i32.const 42424242)) (i32.const 42424242))
146 (assert_return (invoke "i32_load" (i32.const 0xABAD1DEA)) (i32.const 0xABAD1DEA))
147
148 (assert_return (invoke "i64_load16_s" (i64.const -1)) (i64.const -1))
149 (assert_return (invoke "i64_load16_s" (i64.const -4242)) (i64.const -4242))
150 (assert_return (invoke "i64_load16_s" (i64.const 42)) (i64.const 42))
151 (assert_return (invoke "i64_load16_s" (i64.const 0x3210)) (i64.const 0x3210))
152
153 (assert_return (invoke "i64_load16_u" (i64.const -1)) (i64.const 0xFFFF))
154 (assert_return (invoke "i64_load16_u" (i64.const -4242)) (i64.const 61294))
155 (assert_return (invoke "i64_load16_u" (i64.const 42)) (i64.const 42))
156 (assert_return (invoke "i64_load16_u" (i64.const 0xCAFE)) (i64.const 0xCAFE))
157
158 (assert_return (invoke "i64_load32_s" (i64.const -1)) (i64.const -1))
159 (assert_return (invoke "i64_load32_s" (i64.const -42424242)) (i64.const -42424242))
160 (assert_return (invoke "i64_load32_s" (i64.const 42424242)) (i64.const 42424242))
161 (assert_return (invoke "i64_load32_s" (i64.const 0x12345678)) (i64.const 0x12345678))
162
163 (assert_return (invoke "i64_load32_u" (i64.const -1)) (i64.const 0xFFFFFFFF))
164 (assert_return (invoke "i64_load32_u" (i64.const -42424242)) (i64.const 4252543054))
165 (assert_return (invoke "i64_load32_u" (i64.const 42424242)) (i64.const 42424242))
166 (assert_return (invoke "i64_load32_u" (i64.const 0xABAD1DEA)) (i64.const 0xABAD1DEA))
167
168 (assert_return (invoke "i64_load" (i64.const -1)) (i64.const -1))
169 (assert_return (invoke "i64_load" (i64.const -42424242)) (i64.const -42424242))
170 (assert_return (invoke "i64_load" (i64.const 0xABAD1DEA)) (i64.const 0xABAD1DEA))
171 (assert_return (invoke "i64_load" (i64.const 0xABADCAFEDEAD1DEA)) (i64.const 0xABADCAFEDEAD1DEA))
172
173 (assert_return (invoke "f32_load" (f32.const -1)) (f32.const -1))
174 (assert_return (invoke "f32_load" (f32.const 1234e-5)) (f32.const 1234e-5))
175 (assert_return (invoke "f32_load" (f32.const 4242.4242)) (f32.const 4242.4242))
176 (assert_return (invoke "f32_load" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127))
177
178 (assert_return (invoke "f64_load" (f64.const -1)) (f64.const -1))
179 (assert_return (invoke "f64_load" (f64.const 123456789e-5)) (f64.const 123456789e-5))
180 (assert_return (invoke "f64_load" (f64.const 424242.424242)) (f64.const 424242.424242))
181 (assert_return (invoke "f64_load" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023))
182
183
184 (assert_return (invoke "i32_store16" (i32.const -1)) (i32.const 0xFFFF))
185 (assert_return (invoke "i32_store16" (i32.const -4242)) (i32.const 61294))
186 (assert_return (invoke "i32_store16" (i32.const 42)) (i32.const 42))
187 (assert_return (invoke "i32_store16" (i32.const 0xCAFE)) (i32.const 0xCAFE))
188
189 (assert_return (invoke "i32_store" (i32.const -1)) (i32.const -1))
190 (assert_return (invoke "i32_store" (i32.const -4242)) (i32.const -4242))
191 (assert_return (invoke "i32_store" (i32.const 42424242)) (i32.const 42424242))
192 (assert_return (invoke "i32_store" (i32.const 0xDEADCAFE)) (i32.const 0xDEADCAFE))
193
194 (assert_return (invoke "i64_store16" (i64.const -1)) (i64.const 0xFFFF))
195 (assert_return (invoke "i64_store16" (i64.const -4242)) (i64.const 61294))
196 (assert_return (invoke "i64_store16" (i64.const 42)) (i64.const 42))
197 (assert_return (invoke "i64_store16" (i64.const 0xCAFE)) (i64.const 0xCAFE))
198
199 (assert_return (invoke "i64_store32" (i64.const -1)) (i64.const 0xFFFFFFFF))
200 (assert_return (invoke "i64_store32" (i64.const -4242)) (i64.const 4294963054))
201 (assert_return (invoke "i64_store32" (i64.const 42424242)) (i64.const 42424242))
202 (assert_return (invoke "i64_store32" (i64.const 0xDEADCAFE)) (i64.const 0xDEADCAFE))
203
204 (assert_return (invoke "i64_store" (i64.const -1)) (i64.const -1))
205 (assert_return (invoke "i64_store" (i64.const -42424242)) (i64.const -42424242))
206 (assert_return (invoke "i64_store" (i64.const 0xABAD1DEA)) (i64.const 0xABAD1DEA))
207 (assert_return (invoke "i64_store" (i64.const 0xABADCAFEDEAD1DEA)) (i64.const 0xABADCAFEDEAD1DEA))
208
209 (assert_return (invoke "f32_store" (f32.const -1)) (f32.const -1))
210 (assert_return (invoke "f32_store" (f32.const 1234e-5)) (f32.const 1234e-5))
211 (assert_return (invoke "f32_store" (f32.const 4242.4242)) (f32.const 4242.4242))
212 (assert_return (invoke "f32_store" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127))
213
214 (assert_return (invoke "f64_store" (f64.const -1)) (f64.const -1))
215 (assert_return (invoke "f64_store" (f64.const 123456789e-5)) (f64.const 123456789e-5))
216 (assert_return (invoke "f64_store" (f64.const 424242.424242)) (f64.const 424242.424242))
217 (assert_return (invoke "f64_store" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023))