// 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); }