v8/test/js-perf-test/BytecodeHandlers/arithmetic.js
Mythri 3965c54879 [Interpreter] Add micro-benchmarks for arithmetic and bitwise operations.
Bug: v8:4280
Change-Id: Iedd3182301ad6cde4e63c65dca6cd280e3f05198
Reviewed-on: https://chromium-review.googlesource.com/524044
Reviewed-by: Ross McIlroy <rmcilroy@chromium.org>
Commit-Queue: Mythri Alle <mythria@chromium.org>
Cr-Commit-Position: refs/heads/master@{#45707}
2017-06-05 15:28:21 +00:00

337 lines
12 KiB
JavaScript

// Copyright 2017 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.
function addBenchmark(name, test) {
new BenchmarkSuite(name, [1000],
[
new Benchmark(name, false, false, 0, test)
]);
}
addBenchmark('Smi-Add', addSmi);
addBenchmark('Number-Add', addNumber);
addBenchmark('Number-Oddball-Add', addOddball);
addBenchmark('String-Add', addString);
addBenchmark('Number-String-Add', addNumberString);
addBenchmark('Object-Add', addObject);
addBenchmark('Smi-Sub', subSmi);
addBenchmark('Number-Sub', subNumber);
addBenchmark('Number-Oddball-Sub', subOddball);
addBenchmark('Object-Sub', subObject);
addBenchmark('Smi-Mul', mulSmi);
addBenchmark('Number-Mul', mulNumber);
addBenchmark('Number-Oddball-Mul', mulOddball);
addBenchmark('Object-Mul', mulObject);
addBenchmark('Smi-Div', divSmi);
addBenchmark('Number-Div', divNumber);
addBenchmark('Number-Oddball-Div', divOddball);
addBenchmark('Object-Div', divObject);
addBenchmark('Smi-Mod', modSmi);
addBenchmark('Number-Mod', modNumber);
addBenchmark('Number-Oddball-Mod', modOddball);
addBenchmark('Object-Mod', modObject);
addBenchmark('Smi-Constant-Add', addSmiConstant);
addBenchmark('Smi-Constant-Sub', subSmiConstant);
addBenchmark('Smi-Constant-Mul', mulSmiConstant);
addBenchmark('Smi-Constant-Div', divSmiConstant);
addBenchmark('Smi-Constant-Mod', modSmiConstant);
addBenchmark('Smi-Increment', SmiIncrement);
addBenchmark('Number-Increment', NumberIncrement);
addBenchmark('Smi-Decrement', SmiDecrement);
addBenchmark('Number-Decrement', NumberDecrement);
function add(a, b) {
for (var i = 0; i < 1000; ++i) {
a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b;
a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b;
a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b;
a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b;
a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b;
a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b;
a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b;
a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b;
a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b;
a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b;
}
}
function sub(a, b) {
for (var i = 0; i < 1000; ++i) {
a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b;
a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b;
a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b;
a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b;
a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b;
a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b;
a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b;
a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b;
a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b;
a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b;
}
}
function mul(a, b) {
for (var i = 0; i < 1000; ++i) {
a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b;
a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b;
a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b;
a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b;
a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b;
a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b;
a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b;
a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b;
a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b;
a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b;
}
}
function div(a, b) {
for (var i = 0; i < 1000; ++i) {
a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b;
a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b;
a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b;
a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b;
a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b;
a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b;
a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b;
a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b;
a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b;
a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b;
}
}
function mod(a, b) {
for (var i = 0; i < 1000; ++i) {
a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b;
a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b;
a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b;
a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b;
a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b;
a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b;
a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b;
a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b;
a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b;
a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b;
}
}
function addSmiConstant(a) {
var a = 20;
for (var i = 0; i < 1000; ++i) {
a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10;
a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10;
a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10;
a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10;
a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10;
a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10;
a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10;
a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10;
a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10;
a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10;
}
}
function subSmiConstant() {
var a = 20;
for (var i = 0; i < 1000; ++i) {
a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10;
a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10;
a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10;
a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10;
a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10;
a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10;
a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10;
a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10;
a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10;
a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10;
}
}
function mulSmiConstant() {
var a = 20;
for (var i = 0; i < 1000; ++i) {
a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10;
a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10;
a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10;
a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10;
a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10;
a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10;
a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10;
a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10;
a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10;
a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10;
}
}
function divSmiConstant() {
var a = 20;
for (var i = 0; i < 1000; ++i) {
a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10;
a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10;
a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10;
a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10;
a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10;
a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10;
a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10;
a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10;
a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10;
a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10;
}
}
function modSmiConstant() {
var a = 20;
for (var i = 0; i < 1000; ++i) {
a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10;
a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10;
a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10;
a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10;
a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10;
a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10;
a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10;
a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10;
a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10;
a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10;
}
}
function inc(a) {
for (var i = 0; i < 1000; ++i) {
++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a;
++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a;
++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a;
++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a;
++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a;
++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a;
++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a;
++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a;
++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a;
++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a;
// To ensure it is always in SmiRange for Smi operation.
a -= 1000;
}
}
function dec(a) {
for (var i = 0; i < 1000; ++i) {
--a; --a; --a; --a; --a; --a; --a; --a; --a; --a;
--a; --a; --a; --a; --a; --a; --a; --a; --a; --a;
--a; --a; --a; --a; --a; --a; --a; --a; --a; --a;
--a; --a; --a; --a; --a; --a; --a; --a; --a; --a;
--a; --a; --a; --a; --a; --a; --a; --a; --a; --a;
--a; --a; --a; --a; --a; --a; --a; --a; --a; --a;
--a; --a; --a; --a; --a; --a; --a; --a; --a; --a;
--a; --a; --a; --a; --a; --a; --a; --a; --a; --a;
--a; --a; --a; --a; --a; --a; --a; --a; --a; --a;
--a; --a; --a; --a; --a; --a; --a; --a; --a; --a;
// To ensure it is always in SmiRange for Smi operation.
a += 1000;
}
}
function addSmi() {
add(10, 20);
}
function addNumber() {
add(0.333, 0.5);
}
function addOddball() {
add(0.333, true);
}
function addString() {
add("abc", "def");
}
function addNumberString() {
add("abc", 1.23);
}
function addObject() {
add({x: 1, y:2}, {x:3, y:4});
}
function subSmi() {
sub(10, 20);
}
function subNumber() {
sub(0.333, 0.5);
}
function subOddball() {
sub(0.333, true);
}
function subObject() {
sub({x: 1, y:2}, {x:3, y:4});
}
function mulSmi() {
mul(10, 20);
}
function mulNumber() {
mul(0.333, 0.5);
}
function mulOddball() {
mul(0.333, true);
}
function mulObject() {
mul({x: 1, y:2}, {x:3, y:4});
}
function divSmi() {
div(10, 20);
}
function divNumber() {
div(0.333, 0.5);
}
function divOddball() {
div(0.333, true);
}
function divObject() {
div({x: 1, y:2}, {x:3, y:4});
}
function modSmi() {
mod(10, 20);
}
function modNumber() {
mod(0.333, 0.5);
}
function modOddball() {
mod(0.333, true);
}
function modObject() {
mod({x: 1, y:2}, {x:3, y:4});
}
function SmiIncrement() {
inc(3);
}
function NumberIncrement() {
inc(0.33);
}
function SmiDecrement() {
dec(3);
}
function NumberDecrement() {
dec(0.33);
}