]>
Commit | Line | Data |
---|---|---|
ed1e77d3 A |
1 | // Put early out-of-bound data. |
2 | function opaquePutByValOnInt32ArrayEarlyOutOfBounds(array, index, value) | |
3 | { | |
4 | array[index] = value; | |
5 | } | |
6 | noInline(opaquePutByValOnInt32ArrayEarlyOutOfBounds); | |
7 | ||
8 | function testInt32ArrayEarlyOutOfBounds() | |
9 | { | |
10 | // Warm up with an immediate out of bounds. | |
11 | var int32Array = new Array(10); | |
12 | for (var i = 0; i < 10; ++i) { | |
13 | opaquePutByValOnInt32ArrayEarlyOutOfBounds(int32Array, i, i); | |
14 | var value = int32Array[i]; | |
15 | if (value !== i) | |
16 | throw "Failed opaquePutByValOnInt32ArrayEarlyOutOfBounds(int32Array, i, i) warmup with i = " + i + " value = " + value; | |
17 | } | |
18 | opaquePutByValOnInt32ArrayEarlyOutOfBounds(int32Array, 1042, 1); | |
19 | var value = int32Array[1042]; | |
20 | if (value !== 1) | |
21 | throw "Failed opaquePutByValOnInt32ArrayEarlyOutOfBounds(int32Array, 1042, 1) value = " + value; | |
22 | ||
23 | var length = int32Array.length; | |
24 | if (int32Array.length !== 1043) | |
25 | throw "Incorrect int32Array.length, length = " + length; | |
26 | ||
27 | ||
28 | // We then do plenty of in-bounds accesses. | |
29 | for (var i = 0; i < 1e4; ++i) { | |
30 | for (var j = 0; j < 10; ++j) { | |
31 | opaquePutByValOnInt32ArrayEarlyOutOfBounds(int32Array, j, i); | |
32 | var value = int32Array[j]; | |
33 | if (value !== i) | |
34 | throw "Failed opaquePutByValOnInt32ArrayEarlyOutOfBounds(int32Array, j, i) in-bounds with i = " + i + " j = " + j + " value = " + value; | |
35 | } | |
36 | } | |
37 | } | |
38 | testInt32ArrayEarlyOutOfBounds(); | |
39 | ||
40 | ||
41 | // Get out-of-bound data after a thousand run. | |
42 | function opaquePutByValOnStringArrayHotOutOfBounds(array, index, value) | |
43 | { | |
44 | array[index] = value; | |
45 | } | |
46 | noInline(opaquePutByValOnStringArrayHotOutOfBounds); | |
47 | ||
48 | function testStringArrayHotOutOfBounds() | |
49 | { | |
50 | // Warm up with in bounds access. | |
51 | var stringArray = new Array(10); | |
52 | for (var i = 0; i < 1e2; ++i) { | |
53 | for (var j = 0; j < 10; ++j) { | |
54 | opaquePutByValOnStringArrayHotOutOfBounds(stringArray, j, "" + i); | |
55 | var value = stringArray[j]; | |
56 | if (value !== "" + i) | |
57 | throw "Failed opaquePutByValOnStringArrayHotOutOfBounds(stringArray, j, i) in-bounds with i = " + i + " j = " + j + " value = " + value; | |
58 | } | |
59 | } | |
60 | ||
61 | // Do a single out of bounds after warmup. | |
62 | opaquePutByValOnStringArrayHotOutOfBounds(stringArray, 513, 42); | |
63 | var value = stringArray[513]; | |
64 | if (value !== 42) | |
65 | throw "Failed opaquePutByValOnStringArrayHotOutOfBounds(stringArray, 513, 42), value = " + value; | |
66 | ||
67 | // We then do plenty of in-bounds accesses. | |
68 | for (var i = 0; i < 1e3; ++i) { | |
69 | for (var j = 0; j < 10; ++j) { | |
70 | opaquePutByValOnStringArrayHotOutOfBounds(stringArray, j, "" + i); | |
71 | var value = stringArray[j]; | |
72 | if (value !== "" + i) | |
73 | throw "Failed opaquePutByValOnStringArrayHotOutOfBounds(stringArray, j, i) in-bounds with i = " + i + " j = " + j + " value = " + value; | |
74 | } | |
75 | } | |
76 | ||
77 | // Followed by plenty of out-of-bounds accesses. | |
78 | for (var j = 514; j <= 1025; ++j) | |
79 | opaquePutByValOnStringArrayHotOutOfBounds(stringArray, j, "" + j); | |
80 | ||
81 | for (var j = 514; j <= 1025; ++j) { | |
82 | var value = stringArray[j]; | |
83 | if (value !== "" + j) | |
84 | throw "Failed opaquePutByValOnStringArrayHotOutOfBounds(stringArray, j, j) in-bounds with j = " + j + " value = " + value; | |
85 | } | |
86 | } | |
87 | testStringArrayHotOutOfBounds(); |