"use strict"; function assert(b, m = "") { if (!b) throw new Error("Bad: " + m); } let getOps = { getUint8: 1, getUint16: 2, getUint32: 4, getInt8: 1, getInt16: 2, getInt32: 4, getFloat32: 4, getFloat64: 8, }; let setOps = { setUint8: 1, setUint16: 2, setUint32: 4, setInt8: 1, setInt16: 2, setInt32: 4, setFloat32: 4, setFloat64: 8, }; let getFuncs = []; for (let p of Object.keys(getOps)) { let endOfCall = getOps[p] === 1 ? ");" : ", true);"; let str = ` (function ${p}(dv, index) { return dv.${p}(index${endOfCall} }) `; let func = eval(str); noInline(func); getFuncs.push(func); } let setFuncs = []; for (let p of Object.keys(setOps)) { let endOfCall = setOps[p] === 1 ? ");" : ", true);"; let str = ` (function ${p}(dv, index, value) { dv.${p}(index, value${endOfCall} }) `; let func = eval(str); noInline(func); setFuncs.push(func); } function test() { const size = 16*1024; let ab = new ArrayBuffer(size); let dv = new DataView(ab); for (let i = 0; i < 100000; ++i) { let index = (Math.random() * size) >>> 0; index = Math.max(index - 8, 0); for (let f of getFuncs) { f(dv, index); } for (let f of setFuncs) { f(dv, index, 10); } } } test();