[JSC] AI should not propagate AbstractValue relying on constant folding phase
[WebKit-https.git] / JSTests / microbenchmarks / data-view-accesses.js
1 "use strict";
2
3 function assert(b, m = "") {
4     if (!b)
5         throw new Error("Bad: " + m);
6 }
7
8 let getOps = {
9     getUint8: 1,
10     getUint16: 2,
11     getUint32: 4,
12     getInt8: 1,
13     getInt16: 2,
14     getInt32: 4,
15     getFloat32: 4,
16     getFloat64: 8,
17 };
18
19 let setOps = {
20     setUint8: 1,
21     setUint16: 2,
22     setUint32: 4,
23     setInt8: 1,
24     setInt16: 2,
25     setInt32: 4,
26     setFloat32: 4,
27     setFloat64: 8,
28 };
29
30 let getFuncs = [];
31 for (let p of Object.keys(getOps)) {
32     let endOfCall = getOps[p] === 1 ? ");" : ", true);";
33     let str = `
34         (function ${p}(dv, index) {
35             return dv.${p}(index${endOfCall}
36         })
37     `;
38        
39     let func = eval(str);
40     noInline(func);
41     getFuncs.push(func);
42 }
43
44 let setFuncs = [];
45 for (let p of Object.keys(setOps)) {
46     let endOfCall = setOps[p] === 1 ? ");" : ", true);";
47     let str = `
48         (function ${p}(dv, index, value) {
49             dv.${p}(index, value${endOfCall}
50         })
51     `;
52
53     let func = eval(str);
54     noInline(func);
55     setFuncs.push(func);
56 }
57
58 function test() {
59     const size = 16*1024;
60     let ab = new ArrayBuffer(size);
61     let dv = new DataView(ab);
62     for (let i = 0; i < 100000; ++i) {
63         let index = (Math.random() * size) >>> 0;
64         index = Math.max(index - 8, 0);
65         for (let f of getFuncs) {
66             f(dv, index);
67         }
68
69         for (let f of setFuncs) {
70             f(dv, index, 10);
71         }
72     }
73 }
74 test();