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

Side by Side Diff: test/mjsunit/asm/asm-validation.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, 4 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 | « src/wasm/wasm-js.cc ('k') | test/mjsunit/regress/regress-575364.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: --validate-asm --allow-natives-syntax 5 // Flags: --validate-asm --allow-natives-syntax
6 6
7 function IsAlwaysOpt(module) { 7 function assertValidAsm(func) {
8 return %GetOptimizationStatus(module) === 3; 8 assertTrue(%IsAsmWasmCode(func));
9 } 9 }
10 10
11 (function TestModuleArgs() { 11 (function TestModuleArgs() {
12 function Module1(stdlib) { 12 function Module1(stdlib) {
13 "use asm"; 13 "use asm";
14 function foo() { } 14 function foo() { }
15 return { foo: foo }; 15 return { foo: foo };
16 } 16 }
17 function Module2(stdlib, ffi) { 17 function Module2(stdlib, ffi) {
18 "use asm"; 18 "use asm";
19 function foo() { } 19 function foo() { }
20 return { foo: foo }; 20 return { foo: foo };
21 } 21 }
22 function Module3(stdlib, ffi, heap) { 22 function Module3(stdlib, ffi, heap) {
23 "use asm"; 23 "use asm";
24 function foo() { } 24 function foo() { }
25 return { foo: foo }; 25 return { foo: foo };
26 } 26 }
27 var modules = [Module1, Module2, Module3]; 27 var modules = [Module1, Module2, Module3];
28 var heap = new ArrayBuffer(1024 * 1024); 28 var heap = new ArrayBuffer(1024 * 1024);
29 for (var i = 0; i < modules.length; ++i) { 29 for (var i = 0; i < modules.length; ++i) {
30 print('Module' + (i + 1)); 30 print('Module' + (i + 1));
31 var module = modules[i]; 31 var module = modules[i];
32 // TODO(bradnelson): Support modules without the stdlib. 32 var m = module();
33 assertValidAsm(module);
33 var m = module({}); 34 var m = module({});
34 assertTrue(%IsAsmWasmCode(module) || IsAlwaysOpt(module)); 35 assertValidAsm(module);
35 var m = module({}, {}); 36 var m = module({}, {});
36 assertTrue(%IsAsmWasmCode(module) || IsAlwaysOpt(module)); 37 assertValidAsm(module);
37 var m = module({}, {}, heap); 38 var m = module({}, {}, heap);
38 assertTrue(%IsAsmWasmCode(module) || IsAlwaysOpt(module)); 39 assertValidAsm(module);
39 var m = module({}, {}, heap, {}); 40 var m = module({}, {}, heap, {});
40 assertTrue(%IsAsmWasmCode(module) || IsAlwaysOpt(module)); 41 assertValidAsm(module);
41 } 42 }
42 })(); 43 })();
43 44
44 (function TestBadModule() { 45 (function TestBadModule() {
45 function Module(stdlib, ffi, heap) { 46 function Module(stdlib, ffi, heap) {
46 "use asm"; 47 "use asm";
47 function foo() { var y = 3; var x = 1 + y; return 123; } 48 function foo() { var y = 3; var x = 1 + y; return 123; }
48 return { foo: foo }; 49 return { foo: foo };
49 } 50 }
50 var m = Module({}); 51 var m = Module({});
51 assertFalse(%IsAsmWasmCode(Module)); 52 assertTrue(%IsNotAsmWasmCode(Module));
52 assertEquals(123, m.foo()); 53 assertEquals(123, m.foo());
53 })(); 54 })();
54 55
55 (function TestBadArgTypes() { 56 (function TestBadArgTypes() {
56 function Module(a, b, c) { 57 function Module(a, b, c) {
57 "use asm"; 58 "use asm";
59 var NaN = a.NaN;
58 return {}; 60 return {};
59 } 61 }
60 var m = Module(1, 2, 3); 62 var m = Module(1, 2, 3);
61 assertFalse(%IsAsmWasmCode(Module)); 63 assertTrue(%IsNotAsmWasmCode(Module));
62 assertEquals({}, m); 64 assertEquals({}, m);
63 })(); 65 })();
64 66
65 (function TestBadArgTypesMismatch() { 67 (function TestBadArgTypesMismatch() {
66 function Module(a, b, c) { 68 function Module(a, b, c) {
67 "use asm"; 69 "use asm";
70 var NaN = a.NaN;
68 return {}; 71 return {};
69 } 72 }
70 var m = Module(1, 2); 73 var m = Module(1, 2);
71 assertFalse(%IsAsmWasmCode(Module)); 74 assertTrue(%IsNotAsmWasmCode(Module));
72 assertEquals({}, m); 75 assertEquals({}, m);
73 })(); 76 })();
74 77
75 (function TestModuleNoStdlib() { 78 (function TestModuleNoStdlib() {
76 // TODO(bradnelson):
77 // Support modules like this if they don't use the whole stdlib.
78 function Module() { 79 function Module() {
79 "use asm"; 80 "use asm";
80 function foo() { return 123; } 81 function foo() { return 123; }
81 return { foo: foo }; 82 return { foo: foo };
82 } 83 }
83 var m = Module({}); 84 var m = Module({});
84 assertFalse(%IsAsmWasmCode(Module)); 85 assertValidAsm(Module);
85 assertEquals(123, m.foo()); 86 assertEquals(123, m.foo());
86 })(); 87 })();
87 88
88 (function TestModuleWith5() { 89 (function TestModuleWith5() {
89 function Module(a, b, c, d, e) { 90 function Module(a, b, c, d, e) {
90 "use asm"; 91 "use asm";
91 function foo() { return 123; } 92 function foo() { return 123; }
92 return { foo: foo }; 93 return { foo: foo };
93 } 94 }
94 var heap = new ArrayBuffer(1024 * 1024); 95 var heap = new ArrayBuffer(1024 * 1024);
95 var m = Module({}, {}, heap); 96 var m = Module({}, {}, heap);
96 assertFalse(%IsAsmWasmCode(Module)); 97 assertTrue(%IsNotAsmWasmCode(Module));
97 assertEquals(123, m.foo()); 98 assertEquals(123, m.foo());
98 })(); 99 })();
99 100
100 (function TestModuleNoStdlibCall() { 101 (function TestModuleNoStdlibCall() {
101 function Module(stdlib, ffi, heap) { 102 function Module(stdlib, ffi, heap) {
102 "use asm"; 103 "use asm";
103 function foo() { return 123; } 104 function foo() { return 123; }
104 return { foo: foo }; 105 return { foo: foo };
105 } 106 }
106 // TODO(bradnelson): Support instantiation like this if stdlib is unused.
107 var m = Module(); 107 var m = Module();
108 assertFalse(%IsAsmWasmCode(Module)); 108 assertValidAsm(Module);
109 assertEquals(123, m.foo()); 109 assertEquals(123, m.foo());
110 })(); 110 })();
111 111
112 (function TestModuleNew() { 112 (function TestModuleNew() {
113 function Module(stdlib, ffi, heap) { 113 function Module(stdlib, ffi, heap) {
114 "use asm"; 114 "use asm";
115 function foo() { return 123; } 115 function foo() { return 123; }
116 return { foo: foo }; 116 return { foo: foo };
117 } 117 }
118 var m = new Module({}, {}); 118 var m = new Module({}, {});
119 assertTrue(%IsAsmWasmCode(Module) || IsAlwaysOpt(Module)); 119 assertValidAsm(Module);
120 assertEquals(123, m.foo()); 120 assertEquals(123, m.foo());
121 })(); 121 })();
122 122
123 (function TestMultipleFailures() { 123 (function TestMultipleFailures() {
124 function Module(stdlib) { 124 function Module(stdlib) {
125 "use asm"; 125 "use asm";
126 var NaN = stdlib.NaN;
126 function foo() { return 123; } 127 function foo() { return 123; }
127 return { foo: foo }; 128 return { foo: foo };
128 } 129 }
129 var m1 = Module(1, 2, 3); 130 var m1 = Module(1, 2, 3);
130 assertFalse(%IsAsmWasmCode(Module)); 131 assertTrue(%IsNotAsmWasmCode(Module));
131 var m2 = Module(1, 2, 3); 132 var m2 = Module(1, 2, 3);
132 assertFalse(%IsAsmWasmCode(Module)); 133 assertTrue(%IsNotAsmWasmCode(Module));
133 assertEquals(123, m1.foo()); 134 assertEquals(123, m1.foo());
134 assertEquals(123, m2.foo()); 135 assertEquals(123, m2.foo());
135 })(); 136 })();
136 137
137 (function TestFailureThenSuccess() { 138 (function TestFailureThenSuccess() {
138 function MkModule() { 139 function MkModule() {
139 function Module(stdlib, ffi, heap) { 140 function Module(stdlib, ffi, heap) {
140 "use asm"; 141 "use asm";
142 var NaN = stdlib.NaN;
141 function foo() { return 123; } 143 function foo() { return 123; }
142 return { foo: foo }; 144 return { foo: foo };
143 } 145 }
144 return Module; 146 return Module;
145 } 147 }
146 var Module1 = MkModule(); 148 var Module1 = MkModule();
147 var Module2 = MkModule(); 149 var Module2 = MkModule();
148 var heap = new ArrayBuffer(1024 * 1024); 150 var heap = new ArrayBuffer(1024 * 1024);
149 var m1 = Module1(1, 2, 3); 151 var m1 = Module1(1, 2, 3);
150 assertFalse(%IsAsmWasmCode(Module1)); 152 assertTrue(%IsNotAsmWasmCode(Module1));
151 var m2 = Module2({}, {}, heap); 153 var m2 = Module2({}, {}, heap);
152 assertFalse(%IsAsmWasmCode(Module2)); 154 assertTrue(%IsNotAsmWasmCode(Module2));
153 assertEquals(123, m1.foo()); 155 assertEquals(123, m1.foo());
154 assertEquals(123, m2.foo()); 156 assertEquals(123, m2.foo());
155 })(); 157 })();
156 158
157 (function TestSuccessThenFailure() { 159 (function TestSuccessThenFailure() {
158 function MkModule() { 160 function MkModule() {
159 function Module(stdlib, ffi, heap) { 161 function Module(stdlib, ffi, heap) {
160 "use asm"; 162 "use asm";
163 var NaN = stdlib.NaN;
161 function foo() { return 123; } 164 function foo() { return 123; }
162 return { foo: foo }; 165 return { foo: foo };
163 } 166 }
164 return Module; 167 return Module;
165 } 168 }
166 var Module1 = MkModule(); 169 var Module1 = MkModule();
167 var Module2 = MkModule(); 170 var Module2 = MkModule();
168 var heap = new ArrayBuffer(1024 * 1024); 171 var heap = new ArrayBuffer(1024 * 1024);
169 var m1 = Module1({}, {}, heap); 172 var m1 = Module1({NaN: NaN}, {}, heap);
170 assertTrue(%IsAsmWasmCode(Module1) || IsAlwaysOpt(Module1)); 173 assertValidAsm(Module1);
171 var m2 = Module2(1, 2, 3); 174 var m2 = Module2(1, 2, 3);
172 assertFalse(%IsAsmWasmCode(Module2)); 175 assertTrue(%IsNotAsmWasmCode(Module2));
173 assertEquals(123, m1.foo()); 176 assertEquals(123, m1.foo());
174 assertEquals(123, m2.foo()); 177 assertEquals(123, m2.foo());
175 })(); 178 })();
176 179
177 (function TestSuccessThenFailureThenRetry() { 180 (function TestSuccessThenFailureThenRetry() {
178 function MkModule() { 181 function MkModule() {
179 function Module(stdlib, ffi, heap) { 182 function Module(stdlib, ffi, heap) {
180 "use asm"; 183 "use asm";
184 var NaN = stdlib.NaN;
181 function foo() { return 123; } 185 function foo() { return 123; }
182 return { foo: foo }; 186 return { foo: foo };
183 } 187 }
184 return Module; 188 return Module;
185 } 189 }
186 var Module1 = MkModule(); 190 var Module1 = MkModule();
187 var Module2 = MkModule(); 191 var Module2 = MkModule();
188 var heap = new ArrayBuffer(1024 * 1024); 192 var heap = new ArrayBuffer(1024 * 1024);
189 var m1a = Module1({}, {}, heap); 193 var m1a = Module1({NaN: NaN}, {}, heap);
190 assertTrue(%IsAsmWasmCode(Module1) || IsAlwaysOpt(Module1)); 194 assertValidAsm(Module1);
191 var m2 = Module2(1, 2, 3); 195 var m2 = Module2(1, 2, 3);
192 assertFalse(%IsAsmWasmCode(Module2)); 196 assertTrue(%IsNotAsmWasmCode(Module2));
193 var m1b = Module1({}, {}, heap); 197 var m1b = Module1({NaN: NaN}, {}, heap);
194 assertFalse(%IsAsmWasmCode(Module1)); 198 assertTrue(%IsNotAsmWasmCode(Module1));
195 assertEquals(123, m1a.foo()); 199 assertEquals(123, m1a.foo());
196 assertEquals(123, m1b.foo()); 200 assertEquals(123, m1b.foo());
197 assertEquals(123, m2.foo()); 201 assertEquals(123, m2.foo());
198 })(); 202 })();
199 203
200 (function TestBoundFunction() { 204 (function TestBoundFunction() {
201 function Module(stdlib, ffi, heap) { 205 function Module(stdlib, ffi, heap) {
202 "use asm"; 206 "use asm";
203 function foo() { return 123; } 207 function foo() { return 123; }
204 return { foo: foo }; 208 return { foo: foo };
205 } 209 }
206 var heap = new ArrayBuffer(1024 * 1024); 210 var heap = new ArrayBuffer(1024 * 1024);
207 var ModuleBound = Module.bind(this, {}, {}, heap); 211 var ModuleBound = Module.bind(this, {}, {}, heap);
208 var m = ModuleBound(); 212 var m = ModuleBound();
209 assertTrue(%IsAsmWasmCode(Module) || IsAlwaysOpt(Module)); 213 assertValidAsm(Module);
210 assertEquals(123, m.foo()); 214 assertEquals(123, m.foo());
211 })(); 215 })();
OLDNEW
« no previous file with comments | « src/wasm/wasm-js.cc ('k') | test/mjsunit/regress/regress-575364.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698