| 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 |