337 lines
12 KiB
JavaScript
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);
|
||
|
}
|