[JSC] Add support for typed arrays to the Array profiling
[WebKit-https.git] / LayoutTests / js / regress / script-tests / typed-array-get-set-by-val-profiling.js
1 // The type of arrayObject is polymorphic, but the access we do on it are not.
2 function nonPolymorphicUint8ClampedArraySetter(arrayObject, isTypedArray) {
3     if (isTypedArray) {
4         for (var i = 0; i < arrayObject.length; ++i) {
5             arrayObject[i] = i;
6         }
7     } else {
8         for (var i = 0; i < arrayObject.length; ++i) {
9             arrayObject[i] = i;
10         }
11     }
12 }
13 noInline(nonPolymorphicUint8ClampedArraySetter);
14
15 function nonPolymorphicFloat64ArraySetter(arrayObject, isTypedArray) {
16     if (isTypedArray) {
17         for (var i = 0; i < arrayObject.length; ++i) {
18             arrayObject[i] = i + 0.5;
19         }
20     } else {
21         for (var i = 0; i < arrayObject.length; ++i) {
22             arrayObject[i] = i + 0.5;
23         }
24     }
25 }
26 noInline(nonPolymorphicFloat64ArraySetter);
27
28 function nonPolymorphicUint8ClampedArrayGetter(arrayObject, isTypedArray) {
29     var output = 0;
30     if (isTypedArray) {
31         for (var i = 0; i < arrayObject.length; ++i) {
32             output += arrayObject[i];
33         }
34     } else {
35         for (var i = 0; i < arrayObject.length; ++i) {
36             output += arrayObject[i];
37         }
38     }
39     return output;
40 }
41 noInline(nonPolymorphicUint8ClampedArrayGetter);
42
43 function nonPolymorphicFloat64ArrayGetter(arrayObject, isTypedArray) {
44     var output = 0;
45     if (isTypedArray) {
46         for (var i = 0; i < arrayObject.length; ++i) {
47             output += arrayObject[i];
48         }
49     } else {
50         for (var i = 0; i < arrayObject.length; ++i) {
51             output += arrayObject[i];
52         }
53     }
54     return output
55 }
56 noInline(nonPolymorphicFloat64ArrayGetter);
57
58 function test() {
59     var uint8ClampedArray = new Uint8ClampedArray(1024);
60     var float64Array = new Float64Array(1024);
61     var regularArray = new Array(32);
62
63     var output = 0;
64     for (var i = 0; i < 5000; ++i) {
65         nonPolymorphicUint8ClampedArraySetter(uint8ClampedArray, true);
66         nonPolymorphicUint8ClampedArraySetter(regularArray, false);
67         nonPolymorphicFloat64ArraySetter(float64Array, true);
68         nonPolymorphicFloat64ArraySetter(regularArray, false);
69
70         output += nonPolymorphicUint8ClampedArrayGetter(uint8ClampedArray, true);
71         output += nonPolymorphicUint8ClampedArrayGetter(regularArray, false);
72         output += nonPolymorphicFloat64ArrayGetter(float64Array, true);
73         output += nonPolymorphicFloat64ArrayGetter(regularArray, false);
74     }
75     return output;
76 }
77
78 test();