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) |
14 .addBody([ | 14 .addBody([ |
15 kExprGetLocal, 0, | 15 kExprGetLocal, 0, |
16 kExprF32ReinterpretI32, | 16 kExprF32ReinterpretI32, |
17 kExprF32Const, 0x00, 0x00, 0x00, 0x00, // 0.0 | 17 kExprF32Const, 0x00, 0x00, 0x00, 0x00, // 0.0 |
18 kExprF32Sub, | 18 kExprF32Sub, |
19 kExprI32ReinterpretF32, | 19 kExprI32ReinterpretF32, |
20 ]) | 20 ]) |
21 .exportFunc(); | 21 .exportFunc(); |
22 var module = builder.instantiate(); | 22 var module = builder.instantiate(); |
23 // F32Sub0(signalling_NaN) | 23 // F32Sub0(signalling_NaN) |
24 assertEquals(0x7fe00000, module.exports.F32Sub0(0x7fa00000)); | 24 assertEquals(0x7fe00000, module.exports.F32Sub0(0x7fa00000)); |
25 })(); | 25 })(); |
26 | 26 |
27 (function() { | 27 (function() { |
| 28 print("F32: -0 sNaN = qNaN"); |
| 29 var builder = new WasmModuleBuilder(); |
| 30 builder.addFunction("F32Sub0", kSig_i_i) |
| 31 .addBody([ |
| 32 kExprF32Const, 0x00, 0x00, 0x00, 0x80, // 0.0 |
| 33 kExprGetLocal, 0, |
| 34 kExprF32ReinterpretI32, |
| 35 kExprF32Sub, |
| 36 kExprI32ReinterpretF32, |
| 37 ]) |
| 38 .exportFunc(); |
| 39 var module = builder.instantiate(); |
| 40 // F32Sub0(signalling_NaN) |
| 41 assertEquals(0x7fe00000, module.exports.F32Sub0(0x7fa00000)); |
| 42 })(); |
| 43 |
| 44 (function() { |
28 print("F32: sNaN - X = qNaN"); | 45 print("F32: sNaN - X = qNaN"); |
29 var builder = new WasmModuleBuilder(); | 46 var builder = new WasmModuleBuilder(); |
30 builder.addFunction("F32NaNSubX", kSig_i_i) | 47 builder.addFunction("F32NaNSubX", kSig_i_i) |
31 .addBody([ | 48 .addBody([ |
32 kExprF32Const, 0x00, 0x00, 0xa0, 0x7f, | 49 kExprF32Const, 0x00, 0x00, 0xa0, 0x7f, |
33 kExprF32Const, 0x12, 0x34, 0x56, 0x78, | 50 kExprF32Const, 0x12, 0x34, 0x56, 0x78, |
34 kExprF32Sub, | 51 kExprF32Sub, |
35 kExprI32ReinterpretF32, | 52 kExprI32ReinterpretF32, |
36 ]) | 53 ]) |
37 .exportFunc(); | 54 .exportFunc(); |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
85 kExprI64Const, 32, | 102 kExprI64Const, 32, |
86 kExprI64ShrU, | 103 kExprI64ShrU, |
87 kExprI32ConvertI64, | 104 kExprI32ConvertI64, |
88 ]) | 105 ]) |
89 .exportFunc(); | 106 .exportFunc(); |
90 var module = builder.instantiate(); | 107 var module = builder.instantiate(); |
91 assertEquals(0x7ffa0000, module.exports.F64Sub0()); | 108 assertEquals(0x7ffa0000, module.exports.F64Sub0()); |
92 })(); | 109 })(); |
93 | 110 |
94 (function() { | 111 (function() { |
| 112 print("F64: -0 - sNaN = qNaN"); |
| 113 var builder = new WasmModuleBuilder(); |
| 114 builder.addFunction("F64Sub0", kSig_i_i) |
| 115 .addBody([ |
| 116 kExprF64Const, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, // 0.0 |
| 117 kExprI64Const, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xf9, 0xff, 0x00, |
| 118 kExprF64ReinterpretI64, |
| 119 kExprF64Sub, |
| 120 kExprI64ReinterpretF64, |
| 121 kExprI64Const, 32, |
| 122 kExprI64ShrU, |
| 123 kExprI32ConvertI64, |
| 124 ]) |
| 125 .exportFunc(); |
| 126 var module = builder.instantiate(); |
| 127 assertEquals(0x7ffa0000, module.exports.F64Sub0()); |
| 128 })(); |
| 129 |
| 130 (function() { |
95 print("F64: sNaN - X = qNaN"); | 131 print("F64: sNaN - X = qNaN"); |
96 var builder = new WasmModuleBuilder(); | 132 var builder = new WasmModuleBuilder(); |
97 builder.addFunction("F64NaNSubX", kSig_i_i) | 133 builder.addFunction("F64NaNSubX", kSig_i_i) |
98 .addBody([ | 134 .addBody([ |
99 kExprF64Const, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x7f, | 135 kExprF64Const, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x7f, |
100 kExprF64Const, 0xde, 0xbc, 0x0a, 0x89, 0x67, 0x45, 0x23, 0x01, | 136 kExprF64Const, 0xde, 0xbc, 0x0a, 0x89, 0x67, 0x45, 0x23, 0x01, |
101 kExprF64Sub, | 137 kExprF64Sub, |
102 kExprI64ReinterpretF64, | 138 kExprI64ReinterpretF64, |
103 kExprI64Const, 32, | 139 kExprI64Const, 32, |
104 kExprI64ShrU, | 140 kExprI64ShrU, |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
177 kExprI64Const, 32, | 213 kExprI64Const, 32, |
178 kExprI64ShrU, | 214 kExprI64ShrU, |
179 kExprI32ConvertI64, | 215 kExprI32ConvertI64, |
180 ]) | 216 ]) |
181 .exportFunc(); | 217 .exportFunc(); |
182 var module = builder.instantiate(); | 218 var module = builder.instantiate(); |
183 assertEquals(0x7ffa0000, module.exports.F64Div1()); | 219 assertEquals(0x7ffa0000, module.exports.F64Div1()); |
184 })(); | 220 })(); |
185 | 221 |
186 (function() { | 222 (function() { |
| 223 print("F64: sNaN / -1 = qNaN"); |
| 224 var builder = new WasmModuleBuilder(); |
| 225 builder.addFunction("F64Div1", kSig_i_i) |
| 226 .addBody([ |
| 227 kExprI64Const, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xf9, 0xff, 0x00, |
| 228 kExprF64ReinterpretI64, |
| 229 kExprF64Const, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xbf, |
| 230 kExprF64Div, |
| 231 kExprI64ReinterpretF64, |
| 232 kExprI64Const, 32, |
| 233 kExprI64ShrU, |
| 234 kExprI32ConvertI64, |
| 235 ]) |
| 236 .exportFunc(); |
| 237 var module = builder.instantiate(); |
| 238 assertEquals(0x7ffa0000, module.exports.F64Div1()); |
| 239 })(); |
| 240 |
| 241 (function() { |
187 print("F64: X / sNaN = qNaN"); | 242 print("F64: X / sNaN = qNaN"); |
188 var builder = new WasmModuleBuilder(); | 243 var builder = new WasmModuleBuilder(); |
189 builder.addFunction("F64XDivNaN", kSig_i_i) | 244 builder.addFunction("F64XDivNaN", kSig_i_i) |
190 .addBody([ | 245 .addBody([ |
191 kExprF64Const, 0xde, 0xbc, 0x0a, 0x89, 0x67, 0x45, 0x23, 0x01, | 246 kExprF64Const, 0xde, 0xbc, 0x0a, 0x89, 0x67, 0x45, 0x23, 0x01, |
192 kExprF64Const, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x7f, | 247 kExprF64Const, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x7f, |
193 kExprF64Div, | 248 kExprF64Div, |
194 kExprI64ReinterpretF64, | 249 kExprI64ReinterpretF64, |
195 kExprI64Const, 32, | 250 kExprI64Const, 32, |
196 kExprI64ShrU, | 251 kExprI64ShrU, |
(...skipping 14 matching lines...) Expand all Loading... |
211 kExprF64Div, | 266 kExprF64Div, |
212 kExprI64ReinterpretF64, | 267 kExprI64ReinterpretF64, |
213 kExprI64Const, 32, | 268 kExprI64Const, 32, |
214 kExprI64ShrU, | 269 kExprI64ShrU, |
215 kExprI32ConvertI64, | 270 kExprI32ConvertI64, |
216 ]) | 271 ]) |
217 .exportFunc(); | 272 .exportFunc(); |
218 var module = builder.instantiate(); | 273 var module = builder.instantiate(); |
219 assertEquals(0x7ffa0000, module.exports.F64NaNDivX()); | 274 assertEquals(0x7ffa0000, module.exports.F64NaNDivX()); |
220 })(); | 275 })(); |
OLD | NEW |