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

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

Powered by Google App Engine
This is Rietveld 408576698