OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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 function Module(stdlib, foreign, heap) { | 5 function Module(stdlib, foreign, heap) { |
6 "use asm"; | 6 "use asm"; |
7 var MEM32 = new stdlib.Int32Array(heap); | 7 var MEM32 = new stdlib.Int32Array(heap); |
8 function loadm4194304() { | 8 function loadm4194304() { |
9 return MEM32[-4194304]; | 9 var i = -4194304 << 2; |
| 10 return MEM32[i >> 2] | 0; |
10 } | 11 } |
11 function loadm0() { | 12 function loadm0() { |
12 return MEM32[-0]; | 13 return MEM32[-0] | 0; |
13 } | 14 } |
14 function load0() { | 15 function load0() { |
15 return MEM32[0]; | 16 return MEM32[0] | 0; |
16 } | 17 } |
17 function load4() { | 18 function load4() { |
18 return MEM32[4]; | 19 return MEM32[4] | 0; |
19 } | 20 } |
20 function storem4194304(v) { | 21 function storem4194304(v) { |
21 MEM32[-4194304] = v; | 22 v = v | 0; |
| 23 var i = -4194304 << 2; |
| 24 MEM32[i >> 2] = v; |
22 } | 25 } |
23 function storem0(v) { | 26 function storem0(v) { |
| 27 v = v | 0; |
24 MEM32[-0] = v; | 28 MEM32[-0] = v; |
25 } | 29 } |
26 function store0(v) { | 30 function store0(v) { |
27 MEM32[0] = v; | 31 v = v | 0; |
| 32 MEM32[0 >> 2] = v; |
28 } | 33 } |
29 function store4(v) { | 34 function store4(v) { |
30 MEM32[4] = v; | 35 v = v | 0; |
| 36 MEM32[(4 << 2) >> 2] = v; |
31 } | 37 } |
32 return { loadm4194304: loadm4194304, storem4194304: storem4194304, | 38 return { loadm4194304: loadm4194304, storem4194304: storem4194304, |
33 loadm0: loadm0, storem0: storem0, load0: load0, store0: store0, | 39 loadm0: loadm0, storem0: storem0, load0: load0, store0: store0, |
34 load4: load4, store4: store4 }; | 40 load4: load4, store4: store4 }; |
35 } | 41 } |
36 | 42 |
37 var m = Module(this, {}, new ArrayBuffer(4)); | 43 var m = Module(this, {}, new ArrayBuffer(4)); |
38 | 44 |
39 assertEquals(undefined, m.loadm4194304()); | 45 assertEquals(0, m.loadm4194304()); |
40 assertEquals(0, m.loadm0()); | 46 assertEquals(0, m.loadm0()); |
41 assertEquals(0, m.load0()); | 47 assertEquals(0, m.load0()); |
42 assertEquals(undefined, m.load4()); | 48 assertEquals(0, m.load4()); |
43 m.storem4194304(123456789); | 49 m.storem4194304(123456789); |
44 assertEquals(undefined, m.loadm4194304()); | 50 assertEquals(0, m.loadm4194304()); |
45 assertEquals(0, m.loadm0()); | 51 assertEquals(0, m.loadm0()); |
46 assertEquals(0, m.load0()); | 52 assertEquals(0, m.load0()); |
47 assertEquals(undefined, m.load4()); | 53 assertEquals(0, m.load4()); |
48 m.storem0(987654321); | 54 m.storem0(987654321); |
49 assertEquals(undefined, m.loadm4194304()); | 55 assertEquals(0, m.loadm4194304()); |
50 assertEquals(987654321, m.loadm0()); | 56 assertEquals(987654321, m.loadm0()); |
51 assertEquals(987654321, m.load0()); | 57 assertEquals(987654321, m.load0()); |
52 assertEquals(undefined, m.load4()); | 58 assertEquals(0, m.load4()); |
53 m.store0(0x12345678); | 59 m.store0(0x12345678); |
54 assertEquals(undefined, m.loadm4194304()); | 60 assertEquals(0, m.loadm4194304()); |
55 assertEquals(0x12345678, m.loadm0()); | 61 assertEquals(0x12345678, m.loadm0()); |
56 assertEquals(0x12345678, m.load0()); | 62 assertEquals(0x12345678, m.load0()); |
57 assertEquals(undefined, m.load4()); | 63 assertEquals(0, m.load4()); |
58 m.store4(43); | 64 m.store4(43); |
59 assertEquals(undefined, m.loadm4194304()); | 65 assertEquals(0, m.loadm4194304()); |
60 assertEquals(0x12345678, m.loadm0()); | 66 assertEquals(0x12345678, m.loadm0()); |
61 assertEquals(0x12345678, m.load0()); | 67 assertEquals(0x12345678, m.load0()); |
62 assertEquals(undefined, m.load4()); | 68 assertEquals(0, m.load4()); |
OLD | NEW |