// 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-Or', orSmi); addBenchmark('Number-Or', orNumber); addBenchmark('Smi-Xor', xorSmi); addBenchmark('Number-Xor', xorNumber); addBenchmark('Smi-And', andSmi); addBenchmark('Number-And', andNumber); addBenchmark('Smi-Constant-Or', orSmiConstant); addBenchmark('Smi-Constant-Xor', xorSmiConstant); addBenchmark('Smi-Constant-And', andSmiConstant); addBenchmark('Smi-ShiftLeft', shiftLeftSmi); addBenchmark('Number-ShiftLeft', shiftLeftNumber); addBenchmark('Smi-ShiftRight', shiftRightSmi); addBenchmark('Number-ShiftRight', shiftRightNumber); addBenchmark('Smi-ShiftRightLogical', shiftRightLogicalSmi); addBenchmark('Number-ShiftRightLogical', shiftRightLogicalNumber); addBenchmark('Smi-Constant-ShiftLeft', shiftLeftSmiConstant); addBenchmark('Smi-Constant-ShiftRight', shiftRightSmiConstant); addBenchmark('Smi-Constant-ShiftRightLogical', shiftRightLogicalSmiConstant); function bitwiseOr(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 bitwiseXor(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 bitwiseAnd(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 shiftLeft(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 shiftRight(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 shiftRightLogical(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 orSmiConstant() { 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 xorSmiConstant() { 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 andSmiConstant() { 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 shiftLeftSmiConstant() { 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 shiftRightSmiConstant() { 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 shiftRightLogicalSmiConstant() { 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 orSmi() { bitwiseOr(10, 20); } function orNumber() { bitwiseOr(0.33, 0.5); } function xorSmi() { bitwiseXor(10, 20); } function xorNumber() { bitwiseXor(0.33, 0.5); } function andSmi() { bitwiseAnd(10, 20); } function andNumber() { bitwiseAnd(0.33, 0.5); } function shiftLeftSmi() { shiftLeft(10, 20); } function shiftLeftNumber() { shiftLeft(0.333, 0.5); } function shiftRightSmi() { shiftRight(10, 20); } function shiftRightNumber() { shiftRight(0.333, 0.5); } function shiftRightLogicalSmi() { shiftRightLogical(10, 20); } function shiftRightLogicalNumber() { shiftRightLogical(0.333, 0.5); }