// Copyright 2019 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. "use strict"; d8.file.execute('bigint-util.js'); let random_bigints = []; // This dummy ensures that the feedback for benchmark.run() in the Measure // function from base.js is not monomorphic, thereby preventing the benchmarks // below from being inlined. This ensures consistent behavior and comparable // results. new BenchmarkSuite('Prevent-Inline-Dummy', [10000], [ new Benchmark('Prevent-Inline-Dummy', true, false, 0, () => {}) ]); [32, 64, 128, 256].forEach((d) => { new BenchmarkSuite(`AsUint64-${d}`, [1000], [ new Benchmark(`AsUint64-${d}`, true, false, 0, TestAsUint64, () => SetUpTestAsUintN(d)) ]); }); [32, 64, 128, 256].forEach((d) => { new BenchmarkSuite(`AsUint32-${d}`, [1000], [ new Benchmark(`AsUint32-${d}`, true, false, 0, TestAsUint32, () => SetUpTestAsUintN(d)) ]); }); [32, 64, 128, 256].forEach((d) => { new BenchmarkSuite(`AsUint8-${d}`, [1000], [ new Benchmark(`AsUint8-${d}`, true, false, 0, TestAsUint8, () => SetUpTestAsUintN(d)) ]); }); function SetUpTestAsUintN(d) { random_bigints = [ RandomBigIntWithBits(d), RandomBigIntWithBits(d), RandomBigIntWithBits(d), RandomBigIntWithBits(d), RandomBigIntWithBits(d), RandomBigIntWithBits(d), RandomBigIntWithBits(d), RandomBigIntWithBits(d) ]; } function TestAsUint64() { let result = 0n; for (let i = 0; i < TEST_ITERATIONS; ++i) { result = BigInt.asUintN(64, random_bigints[i % 8]); } return result; } function TestAsUint32() { let result = 0n; for (let i = 0; i < TEST_ITERATIONS; ++i) { result = BigInt.asUintN(32, random_bigints[i % 8]); } return result; } function TestAsUint8() { let result = 0n; for (let i = 0; i < TEST_ITERATIONS; ++i) { result = BigInt.asUintN(8, random_bigints[i % 8]); } return result; }