blob: 52d62147510c39a54f983caad0031aee9fe45296 [file] [log] [blame]
Ben Murdoch4a90d5f2016-03-22 12:00:34 +00001// Copyright 2015 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// Flags: --expose-wasm
6
7load("test/mjsunit/wasm/wasm-constants.js");
8
9function runSelect2(module, which, a, b) {
10 assertEquals(which == 0 ? a : b, module.select(a, b));
11}
12
13function testSelect2(type) {
14 var kBodySize = 2;
15 var kNameOffset = 21 + kBodySize + 1;
16
17 for (var which = 0; which < 2; which++) {
18 print("type = " + type + ", which = " + which);
19
20 var data = bytes(
21 // -- memory
22 kDeclMemory,
23 12, 12, 1, // memory
24 // -- signatures
25 kDeclSignatures, 1,
26 2, type, type, type, // signature: (t,t)->t
27 // -- select
28 kDeclFunctions, 1,
29 kDeclFunctionName | kDeclFunctionExport,
30 0, 0,
31 kNameOffset, 0, 0, 0, // name offset
32 kBodySize, 0, // body size
33 kExprGetLocal, which, // --
34 kDeclEnd,
35 's','e','l','e','c','t',0 // name
36 );
37
38 var module = _WASMEXP_.instantiateModule(data);
39
40 assertEquals("function", typeof module.select);
41 runSelect2(module, which, 99, 97);
42 runSelect2(module, which, -99, -97);
43
44 if (type != kAstF32) {
45 runSelect2(module, which, 0x80000000 | 0, 0x7fffffff | 0);
46 runSelect2(module, which, 0x80000001 | 0, 0x7ffffffe | 0);
47 runSelect2(module, which, 0xffffffff | 0, 0xfffffffe | 0);
48 runSelect2(module, which, -2147483647, 2147483646);
49 runSelect2(module, which, -2147483646, 2147483645);
50 runSelect2(module, which, -2147483648, 2147483647);
51 }
52
53 if (type != kAstI32 && type != kAstI64) {
54 runSelect2(module, which, -1.25, 5.25);
55 runSelect2(module, which, Infinity, -Infinity);
56 }
57 }
58}
59
60
61testSelect2(kAstI32);
62testSelect2(kAstF32);
63testSelect2(kAstF64);
64
65
66function runSelect10(module, which, a, b) {
67 var x = -1;
68
69 var result = [
70 module.select(a, b, x, x, x, x, x, x, x, x),
71 module.select(x, a, b, x, x, x, x, x, x, x),
72 module.select(x, x, a, b, x, x, x, x, x, x),
73 module.select(x, x, x, a, b, x, x, x, x, x),
74 module.select(x, x, x, x, a, b, x, x, x, x),
75 module.select(x, x, x, x, x, a, b, x, x, x),
76 module.select(x, x, x, x, x, x, a, b, x, x),
77 module.select(x, x, x, x, x, x, x, a, b, x),
78 module.select(x, x, x, x, x, x, x, x, a, b),
79 module.select(x, x, x, x, x, x, x, x, x, a)
80 ];
81
82 for (var i = 0; i < 10; i++) {
83 if (which == i) assertEquals(a, result[i]);
84 else if (which == i+1) assertEquals(b, result[i]);
85 else assertEquals(x, result[i]);
86 }
87}
88
89function testSelect10(type) {
90 var kBodySize = 2;
91 var kNameOffset = 29 + kBodySize + 1;
92
93 for (var which = 0; which < 10; which++) {
94 print("type = " + type + ", which = " + which);
95
96 var t = type;
97 var data = bytes(
98 kDeclMemory,
99 12, 12, 1, // memory
100 // signatures
101 kDeclSignatures, 1,
102 10, t,t,t,t,t,t,t,t,t,t,t, // (tx10)->t
103 // main function
104 kDeclFunctions, 1,
105 kDeclFunctionName | kDeclFunctionExport,
106 0, 0,
107 kNameOffset, 0, 0, 0, // name offset
108 kBodySize, 0, // body size
109 kExprGetLocal, which, // --
110 kDeclEnd,
111 's','e','l','e','c','t',0 // name
112 );
113
114 var module = _WASMEXP_.instantiateModule(data);
115
116 assertEquals("function", typeof module.select);
117 runSelect10(module, which, 99, 97);
118 runSelect10(module, which, -99, -97);
119
120 if (type != kAstF32) {
121 runSelect10(module, which, 0x80000000 | 0, 0x7fffffff | 0);
122 runSelect10(module, which, 0x80000001 | 0, 0x7ffffffe | 0);
123 runSelect10(module, which, 0xffffffff | 0, 0xfffffffe | 0);
124 runSelect10(module, which, -2147483647, 2147483646);
125 runSelect10(module, which, -2147483646, 2147483645);
126 runSelect10(module, which, -2147483648, 2147483647);
127 }
128
129 if (type != kAstI32 && type != kAstI64) {
130 runSelect10(module, which, -1.25, 5.25);
131 runSelect10(module, which, Infinity, -Infinity);
132 }
133 }
134}
135
136
137testSelect10(kAstI32);
138testSelect10(kAstF32);
139testSelect10(kAstF64);