Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(331)

Side by Side Diff: test/mjsunit/wasm/asm-wasm-literals.js

Issue 2264913002: [wasm] asm.js - Remove Wasm.instantiateModuleFromAsm, use asm.js directly. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: fix Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « test/mjsunit/wasm/asm-wasm-i32.js ('k') | test/mjsunit/wasm/asm-wasm-stdlib.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 the V8 project authors. All rights reserved. 1 // Copyright 2016 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: --validate-asm --allow-natives-syntax
6 6
7 function RunThreeWayTest(asmfunc, expect) { 7 function RunAsmJsTest(asmfunc, expect) {
8 var asm_source = asmfunc.toString(); 8 var asm_source = asmfunc.toString();
9 var nonasm_source = asm_source.replace(new RegExp("use asm"), ""); 9 var nonasm_source = asm_source.replace(new RegExp("use asm"), "");
10 var stdlib = {Math: Math}; 10 var stdlib = {Math: Math};
11 11
12 print("Testing " + asmfunc.name + " (js)...");
12 var js_module = eval("(" + nonasm_source + ")")(stdlib); 13 var js_module = eval("(" + nonasm_source + ")")(stdlib);
13 print("Testing " + asmfunc.name + " (js)...");
14 expect(js_module); 14 expect(js_module);
15 15
16 print("Testing " + asmfunc.name + " (asm.js)..."); 16 print("Testing " + asmfunc.name + " (asm.js)...");
17 var asm_module = asmfunc(stdlib); 17 var asm_module = asmfunc(stdlib);
18 assertTrue(%IsAsmWasmCode(asmfunc));
18 expect(asm_module); 19 expect(asm_module);
19
20 print("Testing " + asmfunc.name + " (wasm)...");
21 var wasm_module = Wasm.instantiateModuleFromAsm(asm_source, stdlib);
22 expect(wasm_module);
23 } 20 }
24 21
25 function PositiveIntLiterals() { 22 function PositiveIntLiterals() {
26 "use asm"; 23 "use asm";
27 function f0() { return 0; } 24 function f0() { return 0; }
28 function f1() { return 1; } 25 function f1() { return 1; }
29 function f4() { return 4; } 26 function f4() { return 4; }
30 function f64() { return 64; } 27 function f64() { return 64; }
31 function f127() { return 127; } 28 function f127() { return 127; }
32 function f128() { return 128; } 29 function f128() { return 128; }
33 function f256() { return 256; } 30 function f256() { return 256; }
34 function f1000() { return 1000; } 31 function f1000() { return 1000; }
35 function f2000000() { return 2000000; } 32 function f2000000() { return 2000000; }
36 function fmax() { return 2147483647; } 33 function fmax() { return 2147483647; }
37 return {f0: f0, f1: f1, f4: f4, f64: f64, f127: f127, f128: f128, 34 return {f0: f0, f1: f1, f4: f4, f64: f64, f127: f127, f128: f128,
38 f256: f256, f1000: f1000, f2000000, fmax: fmax}; 35 f256: f256, f1000: f1000, f2000000, fmax: fmax};
39 } 36 }
40 37
41 RunThreeWayTest(PositiveIntLiterals, function(module) { 38 RunAsmJsTest(PositiveIntLiterals, function(module) {
42 assertEquals(0, module.f0()); 39 assertEquals(0, module.f0());
43 assertEquals(1, module.f1()); 40 assertEquals(1, module.f1());
41 assertEquals(1, module.f1());
44 assertEquals(4, module.f4()); 42 assertEquals(4, module.f4());
45 assertEquals(64, module.f64()); 43 assertEquals(64, module.f64());
46 assertEquals(128, module.f128()); 44 assertEquals(128, module.f128());
47 assertEquals(256, module.f256()); 45 assertEquals(256, module.f256());
48 assertEquals(1000, module.f1000()); 46 assertEquals(1000, module.f1000());
49 assertEquals(2000000, module.f2000000()); 47 assertEquals(2000000, module.f2000000());
50 assertEquals(2147483647, module.fmax()); 48 assertEquals(2147483647, module.fmax());
51 }); 49 });
52 50
53 function NegativeIntLiterals() { 51 function NegativeIntLiterals() {
54 "use asm"; 52 "use asm";
55 function f1() { return -1; } 53 function f1() { return -1; }
56 function f4() { return -4; } 54 function f4() { return -4; }
57 function f64() { return -64; } 55 function f64() { return -64; }
58 function f127() { return -127; } 56 function f127() { return -127; }
59 function f128() { return -128; } 57 function f128() { return -128; }
60 function f256() { return -256; } 58 function f256() { return -256; }
61 function f1000() { return -1000; } 59 function f1000() { return -1000; }
62 function f2000000() { return -2000000; } 60 function f2000000() { return -2000000; }
63 function fmin() { return -2147483648; } 61 function fmin() { return -2147483648; }
64 return {f1: f1, f4: f4, f64: f64, f127: f127, f128: f128, 62 return {f1: f1, f4: f4, f64: f64, f127: f127, f128: f128,
65 f256: f256, f1000: f1000, f2000000, fmin: fmin}; 63 f256: f256, f1000: f1000, f2000000, fmin: fmin};
66 } 64 }
67 65
68 RunThreeWayTest(NegativeIntLiterals, function (module) { 66 RunAsmJsTest(NegativeIntLiterals, function (module) {
69 assertEquals(-1, module.f1()); 67 assertEquals(-1, module.f1());
70 assertEquals(-4, module.f4()); 68 assertEquals(-4, module.f4());
71 assertEquals(-64, module.f64()); 69 assertEquals(-64, module.f64());
72 assertEquals(-127, module.f127()); 70 assertEquals(-127, module.f127());
73 assertEquals(-128, module.f128()); 71 assertEquals(-128, module.f128());
74 assertEquals(-256, module.f256()); 72 assertEquals(-256, module.f256());
75 assertEquals(-1000, module.f1000()); 73 assertEquals(-1000, module.f1000());
76 assertEquals(-2000000, module.f2000000()); 74 assertEquals(-2000000, module.f2000000());
77 assertEquals(-2147483648, module.fmin()); 75 assertEquals(-2147483648, module.fmin());
78 }); 76 });
79 77
80 function PositiveUnsignedLiterals() { 78 function PositiveUnsignedLiterals() {
81 "use asm"; 79 "use asm";
82 function f0() { return 0 >>> 0; } 80 function f0() { return 0 >>> 0; }
83 function f1() { return 1 >>> 0; } 81 function f1() { return 1 >>> 0; }
84 function f4() { return 4 >>> 0; } 82 function f4() { return 4 >>> 0; }
85 function f64() { return 64 >>> 0; } 83 function f64() { return 64 >>> 0; }
86 function f127() { return 127 >>> 0; } 84 function f127() { return 127 >>> 0; }
87 function f128() { return 128 >>> 0; } 85 function f128() { return 128 >>> 0; }
88 function f256() { return 256 >>> 0; } 86 function f256() { return 256 >>> 0; }
89 function f1000() { return 1000 >>> 0; } 87 function f1000() { return 1000 >>> 0; }
90 function f2000000() { return 2000000 >>> 0; } 88 function f2000000() { return 2000000 >>> 0; }
91 function fmax() { return 2147483647 >>> 0; } 89 function fmax() { return 2147483647 >>> 0; }
92 return {f0: f0, f1: f1, f4: f4, f64: f64, f127: f127, f128: f128, 90 return {f0: f0, f1: f1, f4: f4, f64: f64, f127: f127, f128: f128,
93 f256: f256, f1000: f1000, f2000000, fmax: fmax}; 91 f256: f256, f1000: f1000, f2000000, fmax: fmax};
94 } 92 }
95 93
96 RunThreeWayTest(PositiveUnsignedLiterals, function (module) { 94 RunAsmJsTest(PositiveUnsignedLiterals, function (module) {
97 assertEquals(0, module.f0()); 95 assertEquals(0, module.f0());
98 assertEquals(1, module.f1()); 96 assertEquals(1, module.f1());
99 assertEquals(4, module.f4()); 97 assertEquals(4, module.f4());
100 assertEquals(64, module.f64()); 98 assertEquals(64, module.f64());
101 assertEquals(128, module.f128()); 99 assertEquals(128, module.f128());
102 assertEquals(256, module.f256()); 100 assertEquals(256, module.f256());
103 assertEquals(1000, module.f1000()); 101 assertEquals(1000, module.f1000());
104 assertEquals(2000000, module.f2000000()); 102 assertEquals(2000000, module.f2000000());
105 assertEquals(2147483647, module.fmax()); 103 assertEquals(2147483647, module.fmax());
106 }); 104 });
(...skipping 16 matching lines...) Expand all
123 var x = 0x80000001; 121 var x = 0x80000001;
124 return +(x >>> 0); 122 return +(x >>> 0);
125 } 123 }
126 function e() { 124 function e() {
127 var x = 0xffffffff; 125 var x = 0xffffffff;
128 return +(x >>> 0); 126 return +(x >>> 0);
129 } 127 }
130 return {a: a, b: b, c: c, d: d, e: e}; 128 return {a: a, b: b, c: c, d: d, e: e};
131 } 129 }
132 130
133 RunThreeWayTest(LargeUnsignedLiterals, function(module) { 131 RunAsmJsTest(LargeUnsignedLiterals, function(module) {
134 assertEquals(2147483648, module.a()); 132 assertEquals(2147483648, module.a());
135 assertEquals(2147483649, module.b()); 133 assertEquals(2147483649, module.b());
136 assertEquals(0x80000000, module.c()); 134 assertEquals(0x80000000, module.c());
137 assertEquals(0x80000001, module.d()); 135 assertEquals(0x80000001, module.d());
138 assertEquals(0xffffffff, module.e()); 136 assertEquals(0xffffffff, module.e());
139 }); 137 });
140 138
141 function ManyI32() { 139 function ManyI32() {
142 "use asm"; 140 "use asm";
143 function main() { 141 function main() {
(...skipping 14 matching lines...) Expand all
158 0x10D00 + 0x20E00 + 0x400F0 + 0x80002 + 156 0x10D00 + 0x20E00 + 0x400F0 + 0x80002 +
159 0x10C000 + 0x20D000 + 0x400E00 + 0x800030 + 157 0x10C000 + 0x20D000 + 0x400E00 + 0x800030 +
160 0x10B0000 + 0x20C0000 + 0x400D000 + 0x8000400 + 158 0x10B0000 + 0x20C0000 + 0x400D000 + 0x8000400 +
161 0x10A00000 + 0x20B00000 + 0x400C0000 + 0x80005000 159 0x10A00000 + 0x20B00000 + 0x400C0000 + 0x80005000
162 ) | 0; 160 ) | 0;
163 return (a + b + c + d + e + f + g + h + i + j) | 0; 161 return (a + b + c + d + e + f + g + h + i + j) | 0;
164 } 162 }
165 return {main: main}; 163 return {main: main};
166 } 164 }
167 165
168 RunThreeWayTest(ManyI32, function(module) { 166 RunAsmJsTest(ManyI32, function(module) {
169 assertEquals(-222411306, module.main()); 167 assertEquals(-222411306, module.main());
170 }); 168 });
171 169
172 170
173 function ManyF64a() { 171 function ManyF64a() {
174 "use asm"; 172 "use asm";
175 function main() { 173 function main() {
176 var a = +( 0.1 + -0.2 + 0.3 + -0.4); 174 var a = +( 0.1 + -0.2 + 0.3 + -0.4);
177 var b = +( 1.1 + -2.2 + 0.33 + -4.4); 175 var b = +( 1.1 + -2.2 + 0.33 + -4.4);
178 var c = +( 11.1 + -22.2 + 3.33 + -4.44); 176 var c = +( 11.1 + -22.2 + 3.33 + -4.44);
179 var d = +( 111.1 + -222.2 + 33.33 + -4.444); 177 var d = +( 111.1 + -222.2 + 33.33 + -4.444);
180 var e = +( 1111.1 + -2222.2 + 333.33 + -4.4444); 178 var e = +( 1111.1 + -2222.2 + 333.33 + -4.4444);
181 var f = +( 15555.5 + -26666.6 + 3777.77 + -4.88888); 179 var f = +( 15555.5 + -26666.6 + 3777.77 + -4.88888);
182 var g = +( 115555.5 + -226666.6 + 33777.77 + -4.488888); 180 var g = +( 115555.5 + -226666.6 + 33777.77 + -4.488888);
183 var h = +( 1115555.5 + -2226666.6 + 333777.77 + -4.4488888); 181 var h = +( 1115555.5 + -2226666.6 + 333777.77 + -4.4488888);
184 var i = +(11115555.5 + -22226666.6 + 3333777.77 + -4.44488888); 182 var i = +(11115555.5 + -22226666.6 + 3333777.77 + -4.44488888);
185 return +(a + b + c + d + e + f + g + h + i); 183 return +(a + b + c + d + e + f + g + h + i);
186 } 184 }
187 return {main: main}; 185 return {main: main};
188 } 186 }
189 187
190 RunThreeWayTest(ManyF64a, function(module) { 188 RunAsmJsTest(ManyF64a, function(module) {
191 assertEquals(-8640233.599945681, module.main()); 189 assertEquals(-8640233.599945681, module.main());
192 }); 190 });
193 191
194 function ManyF64b() { 192 function ManyF64b() {
195 "use asm"; 193 "use asm";
196 function k1() { return +(1.0e-25 + 3.0e-25 + 5.0e-25 + 6.0e-25 + 9.0e-25); } 194 function k1() { return +(1.0e-25 + 3.0e-25 + 5.0e-25 + 6.0e-25 + 9.0e-25); }
197 function k2() { return +(1.0e-20 + 3.0e-20 + 5.0e-20 + 6.0e-20 + 9.0e-20); } 195 function k2() { return +(1.0e-20 + 3.0e-20 + 5.0e-20 + 6.0e-20 + 9.0e-20); }
198 function k3() { return +(1.0e-15 + 3.0e-15 + 5.0e-15 + 6.0e-15 + 9.0e-15); } 196 function k3() { return +(1.0e-15 + 3.0e-15 + 5.0e-15 + 6.0e-15 + 9.0e-15); }
199 function k4() { return +(1.0e-10 + 3.0e-10 + 5.0e-10 + 6.0e-10 + 9.0e-10); } 197 function k4() { return +(1.0e-10 + 3.0e-10 + 5.0e-10 + 6.0e-10 + 9.0e-10); }
200 function k5() { return +(1.0e-5 + 3.0e-5 + 5.0e-5 + 6.0e-5 + 9.0e-5); } 198 function k5() { return +(1.0e-5 + 3.0e-5 + 5.0e-5 + 6.0e-5 + 9.0e-5); }
201 function k6() { return +(1.1e+0 + 3.1e+0 + 5.1e+0 + 6.1e+0 + 9.1e+0); } 199 function k6() { return +(1.1e+0 + 3.1e+0 + 5.1e+0 + 6.1e+0 + 9.1e+0); }
202 200
203 return {k1: k1, k2: k2, k3: k3, k4: k4, k5: k5, k6: k6}; 201 return {k1: k1, k2: k2, k3: k3, k4: k4, k5: k5, k6: k6};
204 } 202 }
205 203
206 RunThreeWayTest(ManyF64b, function(module) { 204 RunAsmJsTest(ManyF64b, function(module) {
207 assertEquals(2.4e-24, module.k1()); 205 assertEquals(2.4e-24, module.k1());
208 assertEquals(2.4e-19, module.k2()); 206 assertEquals(2.4e-19, module.k2());
209 assertEquals(2.4e-14, module.k3()); 207 assertEquals(2.4e-14, module.k3());
210 assertEquals(2.4e-9, module.k4()); 208 assertEquals(2.4e-9, module.k4());
211 assertEquals(0.00024000000000000003, module.k5()); 209 assertEquals(0.00024000000000000003, module.k5());
212 assertEquals(24.5, module.k6()); 210 assertEquals(24.5, module.k6());
213 }); 211 });
214 212
215 213
216 function ManyF64c() { 214 function ManyF64c() {
217 "use asm"; 215 "use asm";
218 function k1() { return +(1.0e+25 + 3.0e+25 + 5.0e+25 + 6.0e+25 + 9.0e+25); } 216 function k1() { return +(1.0e+25 + 3.0e+25 + 5.0e+25 + 6.0e+25 + 9.0e+25); }
219 function k2() { return +(1.0e+20 + 3.0e+20 + 5.0e+20 + 6.0e+20 + 9.0e+20); } 217 function k2() { return +(1.0e+20 + 3.0e+20 + 5.0e+20 + 6.0e+20 + 9.0e+20); }
220 function k3() { return +(1.0e+15 + 3.0e+15 + 5.0e+15 + 6.0e+15 + 9.0e+15); } 218 function k3() { return +(1.0e+15 + 3.0e+15 + 5.0e+15 + 6.0e+15 + 9.0e+15); }
221 function k4() { return +(1.0e+10 + 3.0e+10 + 5.0e+10 + 6.0e+10 + 9.0e+10); } 219 function k4() { return +(1.0e+10 + 3.0e+10 + 5.0e+10 + 6.0e+10 + 9.0e+10); }
222 function k5() { return +(1.0e+5 + 3.0e+5 + 5.0e+5 + 6.0e+5 + 9.0e+5); } 220 function k5() { return +(1.0e+5 + 3.0e+5 + 5.0e+5 + 6.0e+5 + 9.0e+5); }
223 function k6() { return +(1.4e+0 + 3.4e+0 + 5.4e+0 + 6.4e+0 + 9.4e+0); } 221 function k6() { return +(1.4e+0 + 3.4e+0 + 5.4e+0 + 6.4e+0 + 9.4e+0); }
224 222
225 return {k1: k1, k2: k2, k3: k3, k4: k4, k5: k5, k6: k6}; 223 return {k1: k1, k2: k2, k3: k3, k4: k4, k5: k5, k6: k6};
226 } 224 }
227 225
228 RunThreeWayTest(ManyF64c, function(module) { 226 RunAsmJsTest(ManyF64c, function(module) {
229 assertEquals(2.4000000000000004e+26, module.k1()); 227 assertEquals(2.4000000000000004e+26, module.k1());
230 assertEquals(2.4e+21, module.k2()); 228 assertEquals(2.4e+21, module.k2());
231 assertEquals(2.4e+16, module.k3()); 229 assertEquals(2.4e+16, module.k3());
232 assertEquals(2.4e+11, module.k4()); 230 assertEquals(2.4e+11, module.k4());
233 assertEquals(2.4e+6, module.k5()); 231 assertEquals(2.4e+6, module.k5());
234 assertEquals(26, module.k6()); 232 assertEquals(26, module.k6());
235 }); 233 });
236 234
237 function ManyF32a(stdlib) { 235 function ManyF32a(stdlib) {
238 "use asm"; 236 "use asm";
239 var F = stdlib.Math.fround; 237 var F = stdlib.Math.fround;
240 238
241 function k1() { return F(F(1.0e-25) + F(5.0e-25) + F(6.0e-25) + F(9.0e-25)); } 239 function k1() { return F(F(1.0e-25) + F(5.0e-25) + F(6.0e-25) + F(9.0e-25)); }
242 function k2() { return F(F(1.0e-20) + F(5.0e-20) + F(6.0e-20) + F(9.0e-20)); } 240 function k2() { return F(F(1.0e-20) + F(5.0e-20) + F(6.0e-20) + F(9.0e-20)); }
243 function k3() { return F(F(1.0e-15) + F(5.0e-15) + F(6.0e-15) + F(9.0e-15)); } 241 function k3() { return F(F(1.0e-15) + F(5.0e-15) + F(6.0e-15) + F(9.0e-15)); }
244 function k4() { return F(F(1.0e-10) + F(5.0e-10) + F(6.0e-10) + F(9.0e-10)); } 242 function k4() { return F(F(1.0e-10) + F(5.0e-10) + F(6.0e-10) + F(9.0e-10)); }
245 function k5() { return F(F(1.0e-5) + F(5.0e-5) + F(6.0e-5) + F(9.0e-5)); } 243 function k5() { return F(F(1.0e-5) + F(5.0e-5) + F(6.0e-5) + F(9.0e-5)); }
246 function k6() { return F(F(1.1e+0) + F(5.1e+0) + F(6.1e+0) + F(9.1e+0)); } 244 function k6() { return F(F(1.1e+0) + F(5.1e+0) + F(6.1e+0) + F(9.1e+0)); }
247 245
248 return {k1: k1, k2: k2, k3: k3, k4: k4, k5: k5, k6: k6}; 246 return {k1: k1, k2: k2, k3: k3, k4: k4, k5: k5, k6: k6};
249 } 247 }
250 248
251 if (false) { 249 if (false) {
252 // TODO(bradnelson): fails validation of F32 literals somehow. 250 // TODO(bradnelson): fails validation of F32 literals somehow.
253 RunThreeWayTest(ManyF32a, function(module) { 251 RunAsmJsTest(ManyF32a, function(module) {
254 assertEquals(2.0999999917333043e-24, module.k1()); 252 assertEquals(2.0999999917333043e-24, module.k1());
255 assertEquals(2.099999868734112e-19, module.k2()); 253 assertEquals(2.099999868734112e-19, module.k2());
256 assertEquals(2.099999997029825e-14, module.k3()); 254 assertEquals(2.099999997029825e-14, module.k3());
257 assertEquals(2.099999951710174e-9, module.k4()); 255 assertEquals(2.099999951710174e-9, module.k4());
258 assertEquals(0.0002099999983329326, module.k5()); 256 assertEquals(0.0002099999983329326, module.k5());
259 assertEquals(21.399999618530273, module.k6()); 257 assertEquals(21.399999618530273, module.k6());
260 }); 258 });
261 } 259 }
OLDNEW
« no previous file with comments | « test/mjsunit/wasm/asm-wasm-i32.js ('k') | test/mjsunit/wasm/asm-wasm-stdlib.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698