| // Copyright 2015 the V8 project authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // Flags: --expose-wasm |
| |
| load("test/mjsunit/wasm/wasm-constants.js"); |
| |
| function runSelect2(module, which, a, b) { |
| assertEquals(which == 0 ? a : b, module.select(a, b)); |
| } |
| |
| function testSelect2(type) { |
| var kBodySize = 2; |
| var kNameOffset = 21 + kBodySize + 1; |
| |
| for (var which = 0; which < 2; which++) { |
| print("type = " + type + ", which = " + which); |
| |
| var data = bytes( |
| // -- memory |
| kDeclMemory, |
| 12, 12, 1, // memory |
| // -- signatures |
| kDeclSignatures, 1, |
| 2, type, type, type, // signature: (t,t)->t |
| // -- select |
| kDeclFunctions, 1, |
| kDeclFunctionName | kDeclFunctionExport, |
| 0, 0, |
| kNameOffset, 0, 0, 0, // name offset |
| kBodySize, 0, // body size |
| kExprGetLocal, which, // -- |
| kDeclEnd, |
| 's','e','l','e','c','t',0 // name |
| ); |
| |
| var module = _WASMEXP_.instantiateModule(data); |
| |
| assertEquals("function", typeof module.select); |
| runSelect2(module, which, 99, 97); |
| runSelect2(module, which, -99, -97); |
| |
| if (type != kAstF32) { |
| runSelect2(module, which, 0x80000000 | 0, 0x7fffffff | 0); |
| runSelect2(module, which, 0x80000001 | 0, 0x7ffffffe | 0); |
| runSelect2(module, which, 0xffffffff | 0, 0xfffffffe | 0); |
| runSelect2(module, which, -2147483647, 2147483646); |
| runSelect2(module, which, -2147483646, 2147483645); |
| runSelect2(module, which, -2147483648, 2147483647); |
| } |
| |
| if (type != kAstI32 && type != kAstI64) { |
| runSelect2(module, which, -1.25, 5.25); |
| runSelect2(module, which, Infinity, -Infinity); |
| } |
| } |
| } |
| |
| |
| testSelect2(kAstI32); |
| testSelect2(kAstF32); |
| testSelect2(kAstF64); |
| |
| |
| function runSelect10(module, which, a, b) { |
| var x = -1; |
| |
| var result = [ |
| module.select(a, b, x, x, x, x, x, x, x, x), |
| module.select(x, a, b, x, x, x, x, x, x, x), |
| module.select(x, x, a, b, x, x, x, x, x, x), |
| module.select(x, x, x, a, b, x, x, x, x, x), |
| module.select(x, x, x, x, a, b, x, x, x, x), |
| module.select(x, x, x, x, x, a, b, x, x, x), |
| module.select(x, x, x, x, x, x, a, b, x, x), |
| module.select(x, x, x, x, x, x, x, a, b, x), |
| module.select(x, x, x, x, x, x, x, x, a, b), |
| module.select(x, x, x, x, x, x, x, x, x, a) |
| ]; |
| |
| for (var i = 0; i < 10; i++) { |
| if (which == i) assertEquals(a, result[i]); |
| else if (which == i+1) assertEquals(b, result[i]); |
| else assertEquals(x, result[i]); |
| } |
| } |
| |
| function testSelect10(type) { |
| var kBodySize = 2; |
| var kNameOffset = 29 + kBodySize + 1; |
| |
| for (var which = 0; which < 10; which++) { |
| print("type = " + type + ", which = " + which); |
| |
| var t = type; |
| var data = bytes( |
| kDeclMemory, |
| 12, 12, 1, // memory |
| // signatures |
| kDeclSignatures, 1, |
| 10, t,t,t,t,t,t,t,t,t,t,t, // (tx10)->t |
| // main function |
| kDeclFunctions, 1, |
| kDeclFunctionName | kDeclFunctionExport, |
| 0, 0, |
| kNameOffset, 0, 0, 0, // name offset |
| kBodySize, 0, // body size |
| kExprGetLocal, which, // -- |
| kDeclEnd, |
| 's','e','l','e','c','t',0 // name |
| ); |
| |
| var module = _WASMEXP_.instantiateModule(data); |
| |
| assertEquals("function", typeof module.select); |
| runSelect10(module, which, 99, 97); |
| runSelect10(module, which, -99, -97); |
| |
| if (type != kAstF32) { |
| runSelect10(module, which, 0x80000000 | 0, 0x7fffffff | 0); |
| runSelect10(module, which, 0x80000001 | 0, 0x7ffffffe | 0); |
| runSelect10(module, which, 0xffffffff | 0, 0xfffffffe | 0); |
| runSelect10(module, which, -2147483647, 2147483646); |
| runSelect10(module, which, -2147483646, 2147483645); |
| runSelect10(module, which, -2147483648, 2147483647); |
| } |
| |
| if (type != kAstI32 && type != kAstI64) { |
| runSelect10(module, which, -1.25, 5.25); |
| runSelect10(module, which, Infinity, -Infinity); |
| } |
| } |
| } |
| |
| |
| testSelect10(kAstI32); |
| testSelect10(kAstF32); |
| testSelect10(kAstF64); |