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