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

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

Issue 1825333004: [wasm] Add more extensive tests for asm->wasm translation. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 9 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-f64.js ('k') | test/mjsunit/wasm/asm-wasm-i32.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 // Flags: --expose-wasm
6
7 const stdlib = {
8 Math: Math,
9 Int8Array: Int8Array,
10 Int16Array: Int16Array,
11 Int32Array: Int32Array,
12 Uint8Array: Uint8Array,
13 Uint16Array: Uint16Array,
14 Uint32Array: Uint32Array,
15 Float32Array: Float32Array,
16 Float64Array: Float64Array,
17 };
18
19 const buffer = new ArrayBuffer(65536);
20 const BASE = 1000000000;
21
22 const OOB_INDEXES = [
23 buffer.byteLength,
24 buffer.byteLength + 1,
25 buffer.byteLength + 2,
26 buffer.byteLength + 3,
27 buffer.byteLength + 4,
28 buffer.byteLength + 5,
29 buffer.byteLength + 6,
30 buffer.byteLength + 7,
31 buffer.byteLength + 8,
32 buffer.byteLength + 9,
33 buffer.byteLength + 10,
34 0x80000000,
35 0x80000004,
36 0xF0000000,
37 0xFFFFFFFF,
38 0xFFFFFFFE,
39 -1, -2, -3, -4, -5, -6, -7, -8
40 ];
41
42 function resetBuffer() {
43 var view = new Int32Array(buffer);
44 for (var i = 0; i < view.length; i++) {
45 view[i] = BASE | (i << 2);
46 }
47 }
48 resetBuffer();
49
50
51 function checkView(view, load, shift) {
52 for (var i = 0; i < 300; i++) {
53 assertEquals(view[i >> shift], load(i));
54 }
55 }
56
57 function RunThreeWayTest(asmfunc, expect) {
58 var asm_source = asmfunc.toString();
59 var nonasm_source = asm_source.replace(new RegExp("use asm"), "");
60
61 var js_module = eval("(" + nonasm_source + ")")(stdlib, {}, buffer);
62 print("Testing " + asmfunc.name + " (js)...");
63 expect(js_module);
64
65 print("Testing " + asmfunc.name + " (asm.js)...");
66 var asm_module = asmfunc(stdlib, {}, buffer);
67 expect(asm_module);
68
69 print("Testing " + asmfunc.name + " (wasm)...");
70 var wasm_module = Wasm.instantiateModuleFromAsm(asm_source, null, buffer);
71 expect(wasm_module);
72 }
73
74 function LoadAt_i32(stdlib, foreign, buffer) {
75 "use asm";
76 var HEAP32 = new stdlib.Int32Array(buffer);
77 function load(a) {
78 a = a | 0;
79 return HEAP32[a >> 2] | 0;
80 }
81 return {load: load};
82 }
83
84 RunThreeWayTest(LoadAt_i32, function(module) {
85 var load = module.load;
86 assertEquals(BASE, load(0));
87 assertEquals(BASE | 0x30, load(0x30));
88 assertEquals(BASE | 0x704, load(0x704));
89 assertEquals(BASE | 0x704, load(0x705));
90 assertEquals(BASE | 0x704, load(0x706));
91 assertEquals(BASE | 0x704, load(0x707));
92
93 var length = buffer.byteLength;
94 assertEquals(BASE | (length - 4), load(length - 4));
95 assertEquals(BASE | (length - 4), load(length - 4 + 1));
96 assertEquals(BASE | (length - 4), load(length - 4 + 2));
97 assertEquals(BASE | (length - 4), load(length - 4 + 3));
98
99 for (index of OOB_INDEXES) assertEquals(0, load(index));
100 checkView(new Int32Array(buffer), load, 2);
101 });
102
103 function LoadAt_i16(stdlib, foreign, buffer) {
104 "use asm";
105 var HEAP16 = new stdlib.Int16Array(buffer);
106 function load(a) {
107 a = a | 0;
108 return HEAP16[a >> 1] | 0;
109 }
110 return {load: load};
111 }
112
113 RunThreeWayTest(LoadAt_i16, function(module) {
114 var load = module.load;
115 var LOWER = (BASE << 16) >> 16;
116 var UPPER = BASE >> 16;
117 assertEquals(LOWER, load(0));
118 assertEquals(UPPER, load(2));
119
120 assertEquals(LOWER | 0x30, load(0x30));
121 assertEquals(UPPER, load(0x32));
122
123 assertEquals(LOWER | 0x504, load(0x504));
124 assertEquals(LOWER | 0x504, load(0x505));
125
126 assertEquals(UPPER, load(0x706));
127 assertEquals(UPPER, load(0x707));
128
129 var length = buffer.byteLength;
130 assertEquals(LOWER | (length - 4), load(length - 4));
131 assertEquals(LOWER | (length - 4), load(length - 4 + 1));
132 assertEquals(UPPER, load(length - 4 + 2));
133 assertEquals(UPPER, load(length - 4 + 3));
134
135 for (index of OOB_INDEXES) assertEquals(0, load(index));
136 checkView(new Int16Array(buffer), load, 1);
137 });
138
139 function LoadAt_u16(stdlib, foreign, buffer) {
140 "use asm";
141 var HEAP16 = new stdlib.Uint16Array(buffer);
142 function load(a) {
143 a = a | 0;
144 return HEAP16[a >> 1] | 0;
145 }
146 return {load: load};
147 }
148
149 RunThreeWayTest(LoadAt_u16, function(module) {
150 var load = module.load;
151 for (index of OOB_INDEXES) assertEquals(0, load(index));
152 checkView(new Uint16Array(buffer), load, 1);
153 });
154
155 function LoadAt_i8(stdlib, foreign, buffer) {
156 "use asm";
157 var HEAP8 = new stdlib.Int8Array(buffer);
158 function load(a) {
159 a = a | 0;
160 return HEAP8[a >> 0] | 0;
161 }
162 return {load: load};
163 }
164
165 RunThreeWayTest(LoadAt_i8, function(module) {
166 var load = module.load;
167 for (index of OOB_INDEXES) assertEquals(0, load(index));
168 checkView(new Int8Array(buffer), load, 0);
169 });
170
171 function LoadAt_u8(stdlib, foreign, buffer) {
172 "use asm";
173 var HEAP8 = new stdlib.Uint8Array(buffer);
174 function load(a) {
175 a = a | 0;
176 return HEAP8[a >> 0] | 0;
177 }
178 return {load: load};
179 }
180
181 RunThreeWayTest(LoadAt_u8, function(module) {
182 var load = module.load;
183 for (index of OOB_INDEXES) assertEquals(0, load(index));
184 checkView(new Uint8Array(buffer), load, 0);
185 });
186
187
188 function LoadAt_u32(stdlib, foreign, buffer) {
189 "use asm";
190 var HEAP32 = new stdlib.Uint32Array(buffer);
191 function load(a) {
192 a = a | 0;
193 return +(HEAP32[a >> 2] >>> 0);
194 }
195 return {load: load};
196 }
197
198 RunThreeWayTest(LoadAt_u32, function(module) {
199 var load = module.load;
200 for (index of OOB_INDEXES) assertEquals(0, load(index));
201 checkView(new Uint32Array(buffer), load, 2);
202 });
203
204 function LoadAt_f32(stdlib, foreign, buffer) {
205 "use asm";
206 var HEAP32 = new stdlib.Float32Array(buffer);
207 var fround = stdlib.Math.fround;
208 function load(a) {
209 a = a | 0;
210 return fround(HEAP32[a >> 2]);
211 }
212 return {load: load};
213 }
214
215 RunThreeWayTest(LoadAt_f32, function(module) {
216 var load = module.load;
217 for (index of OOB_INDEXES) assertEquals(NaN, load(index));
218 checkView(new Float32Array(buffer), load, 2);
219 });
220
221 function LoadAt_f64(stdlib, foreign, buffer) {
222 "use asm";
223 var HEAP64 = new stdlib.Float64Array(buffer);
224 function load(a) {
225 a = a | 0;
226 return +HEAP64[a >> 3];
227 }
228 return {load: load};
229 }
230
231 RunThreeWayTest(LoadAt_f64, function(module) {
232 var load = module.load;
233 for (index of OOB_INDEXES) assertEquals(NaN, load(index));
234 checkView(new Float64Array(buffer), load, 3);
235 });
236
237 // TODO(titzer): constant heap indexes
238 // TODO(titzer): heap accesses with offsets and arithmetic
239 // TODO(titzer): [i >> K] where K is greater than log(size)
OLDNEW
« no previous file with comments | « test/mjsunit/wasm/asm-wasm-f64.js ('k') | test/mjsunit/wasm/asm-wasm-i32.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698