OLD | NEW |
1 // Copyright 2017 the V8 project authors. All rights reserved. | 1 // Copyright 2017 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Flags: --expose-wasm | 5 // Flags: --expose-wasm |
6 | 6 |
7 load("test/mjsunit/wasm/wasm-constants.js"); | 7 load("test/mjsunit/wasm/wasm-constants.js"); |
8 load("test/mjsunit/wasm/wasm-module-builder.js"); | 8 load("test/mjsunit/wasm/wasm-module-builder.js"); |
9 | 9 |
10 (function() { | 10 (function() { |
11 print("F32: sNaN - 0 = qNaN"); | 11 print("F32: sNaN - 0 = qNaN"); |
12 var builder = new WasmModuleBuilder(); | 12 var builder = new WasmModuleBuilder(); |
13 builder.addFunction("F32Sub0", kSig_i_i) | 13 builder.addFunction("F32Sub0", kSig_i_i).addBody( |
14 .addBody([ | 14 [ kExprGetLocal, 0, kExprF32ReinterpretI32, kExprF32Const, 0x00, 0x00, |
15 kExprGetLocal, 0, | 15 0x00, 0x00, // 0.0 |
16 kExprF32ReinterpretI32, | 16 kExprF32Sub, kExprI32ReinterpretF32, ]).exportFunc(); |
17 kExprF32Const, 0x00, 0x00, 0x00, 0x00, // 0.0 | |
18 kExprF32Sub, | |
19 kExprI32ReinterpretF32, | |
20 ]) | |
21 .exportFunc(); | |
22 var module = builder.instantiate(); | 17 var module = builder.instantiate(); |
23 // F32Sub0(signalling_NaN) | 18 // F32Sub0(signalling_NaN) |
24 assertEquals(0x7fe00000, module.exports.F32Sub0(0x7fa00000)); | 19 assertEquals(0x7fe00000, module.exports.F32Sub0(0x7fa00000)); |
25 })(); | 20 })(); |
26 | 21 |
27 (function() { | 22 (function() { |
28 print("F32: -0 sNaN = qNaN"); | 23 print("F32: -0 sNaN = qNaN"); |
29 var builder = new WasmModuleBuilder(); | 24 var builder = new WasmModuleBuilder(); |
30 builder.addFunction("F32Sub0", kSig_i_i) | 25 builder.addFunction("F32Sub0", kSig_i_i).addBody( |
31 .addBody([ | 26 [ kExprF32Const, 0x00, 0x00, 0x00, 0x80, // 0.0 |
32 kExprF32Const, 0x00, 0x00, 0x00, 0x80, // 0.0 | 27 kExprGetLocal, 0, kExprF32ReinterpretI32, kExprF32Sub, |
33 kExprGetLocal, 0, | 28 kExprI32ReinterpretF32, ]).exportFunc(); |
34 kExprF32ReinterpretI32, | |
35 kExprF32Sub, | |
36 kExprI32ReinterpretF32, | |
37 ]) | |
38 .exportFunc(); | |
39 var module = builder.instantiate(); | 29 var module = builder.instantiate(); |
40 // F32Sub0(signalling_NaN) | 30 // F32Sub0(signalling_NaN) |
41 assertEquals(0x7fe00000, module.exports.F32Sub0(0x7fa00000)); | 31 assertEquals(0x7fe00000, module.exports.F32Sub0(0x7fa00000)); |
42 })(); | 32 })(); |
43 | 33 |
44 (function() { | 34 (function() { |
45 print("F32: sNaN - X = qNaN"); | 35 print("F32: sNaN - X = qNaN"); |
46 var builder = new WasmModuleBuilder(); | 36 var builder = new WasmModuleBuilder(); |
47 builder.addFunction("F32NaNSubX", kSig_i_i) | 37 builder.addFunction("F32NaNSubX", kSig_i_i).addBody( |
48 .addBody([ | 38 [ kExprF32Const, 0x00, 0x00, 0xa0, 0x7f, kExprF32Const, 0x12, 0x34, 0x56, |
49 kExprF32Const, 0x00, 0x00, 0xa0, 0x7f, | 39 0x78, kExprF32Sub, kExprI32ReinterpretF32, ]).exportFunc(); |
50 kExprF32Const, 0x12, 0x34, 0x56, 0x78, | |
51 kExprF32Sub, | |
52 kExprI32ReinterpretF32, | |
53 ]) | |
54 .exportFunc(); | |
55 var module = builder.instantiate(); | 40 var module = builder.instantiate(); |
56 assertEquals(0x7fe00000, module.exports.F32NaNSubX()); | 41 assertEquals(0x7fe00000, module.exports.F32NaNSubX()); |
57 })(); | 42 })(); |
58 | 43 |
59 (function() { | 44 (function() { |
60 print("F32: X - sNaN = qNaN"); | 45 print("F32: X - sNaN = qNaN"); |
61 var builder = new WasmModuleBuilder(); | 46 var builder = new WasmModuleBuilder(); |
62 builder.addFunction("F32XSubNaN", kSig_i_i) | 47 builder.addFunction("F32XSubNaN", kSig_i_i).addBody( |
63 .addBody([ | 48 [ kExprF32Const, 0x12, 0x34, 0x56, 0x78, kExprF32Const, 0x00, 0x00, 0xa0, |
64 kExprF32Const, 0x12, 0x34, 0x56, 0x78, | 49 0x7f, kExprF32Sub, kExprI32ReinterpretF32, ]).exportFunc(); |
65 kExprF32Const, 0x00, 0x00, 0xa0, 0x7f, | |
66 kExprF32Sub, | |
67 kExprI32ReinterpretF32, | |
68 ]) | |
69 .exportFunc(); | |
70 var module = builder.instantiate(); | 50 var module = builder.instantiate(); |
71 assertEquals(0x7fe00000, module.exports.F32XSubNaN()); | 51 assertEquals(0x7fe00000, module.exports.F32XSubNaN()); |
72 })(); | 52 })(); |
73 | 53 |
74 (function() { | 54 (function() { |
75 print("F64: X + sNaN = qNaN"); | 55 print("F64: X + sNaN = qNaN"); |
76 var builder = new WasmModuleBuilder(); | 56 var builder = new WasmModuleBuilder(); |
77 builder.addFunction("F32XAddNaN", kSig_i_i) | 57 builder.addFunction("F32XAddNaN", kSig_i_i).addBody( |
78 .addBody([ | 58 [ kExprF64Const, 0xde, 0xbc, 0x0a, 0x89, 0x67, 0x45, 0x23, 0x01, |
79 kExprF64Const, 0xde, 0xbc, 0x0a, 0x89, 0x67, 0x45, 0x23, 0x01, | 59 kExprF64Const, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x7f, |
80 kExprF64Const, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x7f, | 60 kExprF64Add, kExprI64ReinterpretF64, kExprI64Const, 32, kExprI64ShrU, |
81 kExprF64Add, | 61 kExprI32ConvertI64, ]).exportFunc(); |
82 kExprI64ReinterpretF64, | |
83 kExprI64Const, 32, | |
84 kExprI64ShrU, | |
85 kExprI32ConvertI64, | |
86 ]) | |
87 .exportFunc(); | |
88 var module = builder.instantiate(); | 62 var module = builder.instantiate(); |
89 assertEquals(0x7ffa0000, module.exports.F32XAddNaN()); | 63 assertEquals(0x7ffa0000, module.exports.F32XAddNaN()); |
90 })(); | 64 })(); |
91 | 65 |
92 (function() { | 66 (function() { |
93 print("F64: sNaN - 0 = qNaN"); | 67 print("F64: sNaN - 0 = qNaN"); |
94 var builder = new WasmModuleBuilder(); | 68 var builder = new WasmModuleBuilder(); |
95 builder.addFunction("F64Sub0", kSig_i_i) | 69 builder.addFunction("F64Sub0", kSig_i_i).addBody( |
96 .addBody([ | 70 [ kExprI64Const, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xf9, 0xff, |
97 kExprI64Const, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xf9, 0xff, 0x00, | 71 0x00, kExprF64ReinterpretI64, kExprF64Const, 0x00, 0x00, 0x00, 0x00, |
98 kExprF64ReinterpretI64, | 72 0x00, 0x00, 0x00, 0x00, // 0.0 |
99 kExprF64Const, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0.0 | 73 kExprF64Sub, kExprI64ReinterpretF64, kExprI64Const, 32, kExprI64ShrU, |
100 kExprF64Sub, | 74 kExprI32ConvertI64, ]).exportFunc(); |
101 kExprI64ReinterpretF64, | |
102 kExprI64Const, 32, | |
103 kExprI64ShrU, | |
104 kExprI32ConvertI64, | |
105 ]) | |
106 .exportFunc(); | |
107 var module = builder.instantiate(); | 75 var module = builder.instantiate(); |
108 assertEquals(0x7ffa0000, module.exports.F64Sub0()); | 76 assertEquals(0x7ffa0000, module.exports.F64Sub0()); |
109 })(); | 77 })(); |
110 | 78 |
111 (function() { | 79 (function() { |
112 print("F64: -0 - sNaN = qNaN"); | 80 print("F64: -0 - sNaN = qNaN"); |
113 var builder = new WasmModuleBuilder(); | 81 var builder = new WasmModuleBuilder(); |
114 builder.addFunction("F64Sub0", kSig_i_i) | 82 builder.addFunction("F64Sub0", kSig_i_i).addBody( |
115 .addBody([ | 83 [ kExprF64Const, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, // 0.0 |
116 kExprF64Const, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, // 0.0 | 84 kExprI64Const, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xf9, 0xff, |
117 kExprI64Const, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xf9, 0xff, 0x00, | 85 0x00, kExprF64ReinterpretI64, kExprF64Sub, kExprI64ReinterpretF64, |
118 kExprF64ReinterpretI64, | 86 kExprI64Const, 32, kExprI64ShrU, kExprI32ConvertI64, ]).exportFunc(); |
119 kExprF64Sub, | |
120 kExprI64ReinterpretF64, | |
121 kExprI64Const, 32, | |
122 kExprI64ShrU, | |
123 kExprI32ConvertI64, | |
124 ]) | |
125 .exportFunc(); | |
126 var module = builder.instantiate(); | 87 var module = builder.instantiate(); |
127 assertEquals(0x7ffa0000, module.exports.F64Sub0()); | 88 assertEquals(0x7ffa0000, module.exports.F64Sub0()); |
128 })(); | 89 })(); |
129 | 90 |
130 (function() { | 91 (function() { |
131 print("F64: sNaN - X = qNaN"); | 92 print("F64: sNaN - X = qNaN"); |
132 var builder = new WasmModuleBuilder(); | 93 var builder = new WasmModuleBuilder(); |
133 builder.addFunction("F64NaNSubX", kSig_i_i) | 94 builder.addFunction("F64NaNSubX", kSig_i_i).addBody( |
134 .addBody([ | 95 [ kExprF64Const, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x7f, |
135 kExprF64Const, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x7f, | 96 kExprF64Const, 0xde, 0xbc, 0x0a, 0x89, 0x67, 0x45, 0x23, 0x01, |
136 kExprF64Const, 0xde, 0xbc, 0x0a, 0x89, 0x67, 0x45, 0x23, 0x01, | 97 kExprF64Sub, kExprI64ReinterpretF64, kExprI64Const, 32, kExprI64ShrU, |
137 kExprF64Sub, | 98 kExprI32ConvertI64, ]).exportFunc(); |
138 kExprI64ReinterpretF64, | |
139 kExprI64Const, 32, | |
140 kExprI64ShrU, | |
141 kExprI32ConvertI64, | |
142 ]) | |
143 .exportFunc(); | |
144 var module = builder.instantiate(); | 99 var module = builder.instantiate(); |
145 assertEquals(0x7ffa0000, module.exports.F64NaNSubX()); | 100 assertEquals(0x7ffa0000, module.exports.F64NaNSubX()); |
146 })(); | 101 })(); |
147 | 102 |
148 (function() { | 103 (function() { |
149 print("F64: X - sNaN = qNaN"); | 104 print("F64: X - sNaN = qNaN"); |
150 var builder = new WasmModuleBuilder(); | 105 var builder = new WasmModuleBuilder(); |
151 builder.addFunction("F64XSubNaN", kSig_i_i) | 106 builder.addFunction("F64XSubNaN", kSig_i_i).addBody( |
152 .addBody([ | 107 [ kExprF64Const, 0xde, 0xbc, 0x0a, 0x89, 0x67, 0x45, 0x23, 0x01, |
153 kExprF64Const, 0xde, 0xbc, 0x0a, 0x89, 0x67, 0x45, 0x23, 0x01, | 108 kExprF64Const, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x7f, |
154 kExprF64Const, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x7f, | 109 kExprF64Sub, kExprI64ReinterpretF64, kExprI64Const, 32, kExprI64ShrU, |
155 kExprF64Sub, | 110 kExprI32ConvertI64, ]).exportFunc(); |
156 kExprI64ReinterpretF64, | |
157 kExprI64Const, 32, | |
158 kExprI64ShrU, | |
159 kExprI32ConvertI64, | |
160 ]) | |
161 .exportFunc(); | |
162 var module = builder.instantiate(); | 111 var module = builder.instantiate(); |
163 assertEquals(0x7ffa0000, module.exports.F64XSubNaN()); | 112 assertEquals(0x7ffa0000, module.exports.F64XSubNaN()); |
164 })(); | 113 })(); |
165 | 114 |
166 (function() { | 115 (function() { |
167 print("F64: sNaN * 1 = qNaN"); | 116 print("F64: sNaN * 1 = qNaN"); |
168 var builder = new WasmModuleBuilder(); | 117 var builder = new WasmModuleBuilder(); |
169 builder.addFunction("F64Mul1", kSig_i_i) | 118 builder.addFunction("F64Mul1", kSig_i_i).addBody( |
170 .addBody([ | 119 [ kExprI64Const, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xf9, 0xff, |
171 kExprI64Const, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xf9, 0xff, 0x00, | 120 0x00, kExprF64ReinterpretI64, kExprF64Const, 0x00, 0x00, 0x00, 0x00, |
172 kExprF64ReinterpretI64, | 121 0x00, 0x00, 0xf0, 0x3f, kExprF64Mul, kExprI64ReinterpretF64, |
173 kExprF64Const, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x3f, | 122 kExprI64Const, 32, kExprI64ShrU, kExprI32ConvertI64, ]).exportFunc(); |
174 kExprF64Mul, | |
175 kExprI64ReinterpretF64, | |
176 kExprI64Const, 32, | |
177 kExprI64ShrU, | |
178 kExprI32ConvertI64, | |
179 ]) | |
180 .exportFunc(); | |
181 var module = builder.instantiate(); | 123 var module = builder.instantiate(); |
182 assertEquals(0x7ffa0000, module.exports.F64Mul1()); | 124 assertEquals(0x7ffa0000, module.exports.F64Mul1()); |
183 })(); | 125 })(); |
184 | 126 |
185 (function() { | 127 (function() { |
186 print("F64: X * sNaN = qNaN"); | 128 print("F64: X * sNaN = qNaN"); |
187 var builder = new WasmModuleBuilder(); | 129 var builder = new WasmModuleBuilder(); |
188 builder.addFunction("F64XMulNaN", kSig_i_i) | 130 builder.addFunction("F64XMulNaN", kSig_i_i).addBody( |
189 .addBody([ | 131 [ kExprF64Const, 0xde, 0xbc, 0x0a, 0x89, 0x67, 0x45, 0x23, 0x01, |
190 kExprF64Const, 0xde, 0xbc, 0x0a, 0x89, 0x67, 0x45, 0x23, 0x01, | 132 kExprF64Const, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x7f, |
191 kExprF64Const, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x7f, | 133 kExprF64Mul, kExprI64ReinterpretF64, kExprI64Const, 32, kExprI64ShrU, |
192 kExprF64Mul, | 134 kExprI32ConvertI64, ]).exportFunc(); |
193 kExprI64ReinterpretF64, | |
194 kExprI64Const, 32, | |
195 kExprI64ShrU, | |
196 kExprI32ConvertI64, | |
197 ]) | |
198 .exportFunc(); | |
199 var module = builder.instantiate(); | 135 var module = builder.instantiate(); |
200 assertEquals(0x7ffa0000, module.exports.F64XMulNaN()); | 136 assertEquals(0x7ffa0000, module.exports.F64XMulNaN()); |
201 })(); | 137 })(); |
202 | 138 |
203 (function() { | 139 (function() { |
204 print("F64: sNaN / 1 = qNaN"); | 140 print("F64: sNaN / 1 = qNaN"); |
205 var builder = new WasmModuleBuilder(); | 141 var builder = new WasmModuleBuilder(); |
206 builder.addFunction("F64Div1", kSig_i_i) | 142 builder.addFunction("F64Div1", kSig_i_i).addBody( |
207 .addBody([ | 143 [ kExprI64Const, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xf9, 0xff, |
208 kExprI64Const, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xf9, 0xff, 0x00, | 144 0x00, kExprF64ReinterpretI64, kExprF64Const, 0x00, 0x00, 0x00, 0x00, |
209 kExprF64ReinterpretI64, | 145 0x00, 0x00, 0xf0, 0x3f, kExprF64Div, kExprI64ReinterpretF64, |
210 kExprF64Const, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x3f, | 146 kExprI64Const, 32, kExprI64ShrU, kExprI32ConvertI64, ]).exportFunc(); |
211 kExprF64Div, | |
212 kExprI64ReinterpretF64, | |
213 kExprI64Const, 32, | |
214 kExprI64ShrU, | |
215 kExprI32ConvertI64, | |
216 ]) | |
217 .exportFunc(); | |
218 var module = builder.instantiate(); | 147 var module = builder.instantiate(); |
219 assertEquals(0x7ffa0000, module.exports.F64Div1()); | 148 assertEquals(0x7ffa0000, module.exports.F64Div1()); |
220 })(); | 149 })(); |
221 | 150 |
222 (function() { | 151 (function() { |
223 print("F64: sNaN / -1 = qNaN"); | 152 print("F64: sNaN / -1 = qNaN"); |
224 var builder = new WasmModuleBuilder(); | 153 var builder = new WasmModuleBuilder(); |
225 builder.addFunction("F64Div1", kSig_i_i) | 154 builder.addFunction("F64Div1", kSig_i_i).addBody( |
226 .addBody([ | 155 [ kExprI64Const, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xf9, 0xff, |
227 kExprI64Const, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xf9, 0xff, 0x00, | 156 0x00, kExprF64ReinterpretI64, kExprF64Const, 0x00, 0x00, 0x00, 0x00, |
228 kExprF64ReinterpretI64, | 157 0x00, 0x00, 0xf0, 0xbf, kExprF64Div, kExprI64ReinterpretF64, |
229 kExprF64Const, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xbf, | 158 kExprI64Const, 32, kExprI64ShrU, kExprI32ConvertI64, ]).exportFunc(); |
230 kExprF64Div, | |
231 kExprI64ReinterpretF64, | |
232 kExprI64Const, 32, | |
233 kExprI64ShrU, | |
234 kExprI32ConvertI64, | |
235 ]) | |
236 .exportFunc(); | |
237 var module = builder.instantiate(); | 159 var module = builder.instantiate(); |
238 assertEquals(0x7ffa0000, module.exports.F64Div1()); | 160 assertEquals(0x7ffa0000, module.exports.F64Div1()); |
239 })(); | 161 })(); |
240 | 162 |
241 (function() { | 163 (function() { |
242 print("F64: X / sNaN = qNaN"); | 164 print("F64: X / sNaN = qNaN"); |
243 var builder = new WasmModuleBuilder(); | 165 var builder = new WasmModuleBuilder(); |
244 builder.addFunction("F64XDivNaN", kSig_i_i) | 166 builder.addFunction("F64XDivNaN", kSig_i_i).addBody( |
245 .addBody([ | 167 [ kExprF64Const, 0xde, 0xbc, 0x0a, 0x89, 0x67, 0x45, 0x23, 0x01, |
246 kExprF64Const, 0xde, 0xbc, 0x0a, 0x89, 0x67, 0x45, 0x23, 0x01, | 168 kExprF64Const, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x7f, |
247 kExprF64Const, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x7f, | 169 kExprF64Div, kExprI64ReinterpretF64, kExprI64Const, 32, kExprI64ShrU, |
248 kExprF64Div, | 170 kExprI32ConvertI64, ]).exportFunc(); |
249 kExprI64ReinterpretF64, | |
250 kExprI64Const, 32, | |
251 kExprI64ShrU, | |
252 kExprI32ConvertI64, | |
253 ]) | |
254 .exportFunc(); | |
255 var module = builder.instantiate(); | 171 var module = builder.instantiate(); |
256 assertEquals(0x7ffa0000, module.exports.F64XDivNaN()); | 172 assertEquals(0x7ffa0000, module.exports.F64XDivNaN()); |
257 })(); | 173 })(); |
258 | 174 |
259 (function() { | 175 (function() { |
260 print("F64: sNaN / X = qNaN"); | 176 print("F64: sNaN / X = qNaN"); |
261 var builder = new WasmModuleBuilder(); | 177 var builder = new WasmModuleBuilder(); |
262 builder.addFunction("F64NaNDivX", kSig_i_i) | 178 builder.addFunction("F64NaNDivX", kSig_i_i).addBody( |
263 .addBody([ | 179 [ kExprF64Const, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x7f, |
264 kExprF64Const, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x7f, | 180 kExprF64Const, 0xde, 0xbc, 0x0a, 0x89, 0x67, 0x45, 0x23, 0x01, |
265 kExprF64Const, 0xde, 0xbc, 0x0a, 0x89, 0x67, 0x45, 0x23, 0x01, | 181 kExprF64Div, kExprI64ReinterpretF64, kExprI64Const, 32, kExprI64ShrU, |
266 kExprF64Div, | 182 kExprI32ConvertI64, ]).exportFunc(); |
267 kExprI64ReinterpretF64, | |
268 kExprI64Const, 32, | |
269 kExprI64ShrU, | |
270 kExprI32ConvertI64, | |
271 ]) | |
272 .exportFunc(); | |
273 var module = builder.instantiate(); | 183 var module = builder.instantiate(); |
274 assertEquals(0x7ffa0000, module.exports.F64NaNDivX()); | 184 assertEquals(0x7ffa0000, module.exports.F64NaNDivX()); |
275 })(); | 185 })(); |
| 186 |
| 187 (function() { |
| 188 print("F32ConvertF64(sNaN) = qNaN"); |
| 189 var builder = new WasmModuleBuilder(); |
| 190 builder.addFunction("F32ConvertF64X", kSig_i_i).addBody( |
| 191 [ kExprF64Const, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x7f, |
| 192 kExprF32ConvertF64, kExprI32ReinterpretF32, ]).exportFunc(); |
| 193 var module = builder.instantiate(); |
| 194 assertEquals(0x7fd00000, module.exports.F32ConvertF64X()); |
| 195 })(); |
| 196 |
| 197 (function() { |
| 198 print("F64ConvertF32(sNaN) = qNaN"); |
| 199 var builder = new WasmModuleBuilder(); |
| 200 builder.addFunction("F64ConvertF32X", kSig_i_i).addBody( |
| 201 [ kExprF32Const, 0x00, 0x00, 0xa0, 0x7f, kExprF64ConvertF32, |
| 202 kExprI64ReinterpretF64, kExprI64Const, 32, kExprI64ShrU, |
| 203 kExprI32ConvertI64, ]).exportFunc(); |
| 204 var module = builder.instantiate(); |
| 205 assertEquals(0x7ffc0000, module.exports.F64ConvertF32X()); |
| 206 })(); |
| 207 |
| 208 (function() { |
| 209 print("F64ConvertF32(F32ConvertF64(sNaN)) = qNaN"); |
| 210 var builder = new WasmModuleBuilder(); |
| 211 builder.addFunction("F64toF32toF64", kSig_i_i).addBody( |
| 212 [ kExprI64Const, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xf9, 0xff, |
| 213 0x00, kExprF64ReinterpretI64, kExprF32ConvertF64, kExprF64ConvertF32, |
| 214 kExprI64ReinterpretF64, kExprI64Const, 32, kExprI64ShrU, |
| 215 kExprI32ConvertI64, ]).exportFunc(); |
| 216 var module = builder.instantiate(); |
| 217 assertEquals(0x7ffa0000, module.exports.F64toF32toF64()); |
| 218 })(); |
OLD | NEW |