Skip to content

Commit 3965c54

Browse files
mythrialleCommit Bot
authored andcommitted
[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}
1 parent e71e8e8 commit 3965c54

4 files changed

Lines changed: 653 additions & 2 deletions

File tree

Lines changed: 336 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,336 @@
1+
// Copyright 2017 the V8 project authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
function addBenchmark(name, test) {
6+
new BenchmarkSuite(name, [1000],
7+
[
8+
new Benchmark(name, false, false, 0, test)
9+
]);
10+
}
11+
12+
addBenchmark('Smi-Add', addSmi);
13+
addBenchmark('Number-Add', addNumber);
14+
addBenchmark('Number-Oddball-Add', addOddball);
15+
addBenchmark('String-Add', addString);
16+
addBenchmark('Number-String-Add', addNumberString);
17+
addBenchmark('Object-Add', addObject);
18+
addBenchmark('Smi-Sub', subSmi);
19+
addBenchmark('Number-Sub', subNumber);
20+
addBenchmark('Number-Oddball-Sub', subOddball);
21+
addBenchmark('Object-Sub', subObject);
22+
addBenchmark('Smi-Mul', mulSmi);
23+
addBenchmark('Number-Mul', mulNumber);
24+
addBenchmark('Number-Oddball-Mul', mulOddball);
25+
addBenchmark('Object-Mul', mulObject);
26+
addBenchmark('Smi-Div', divSmi);
27+
addBenchmark('Number-Div', divNumber);
28+
addBenchmark('Number-Oddball-Div', divOddball);
29+
addBenchmark('Object-Div', divObject);
30+
addBenchmark('Smi-Mod', modSmi);
31+
addBenchmark('Number-Mod', modNumber);
32+
addBenchmark('Number-Oddball-Mod', modOddball);
33+
addBenchmark('Object-Mod', modObject);
34+
addBenchmark('Smi-Constant-Add', addSmiConstant);
35+
addBenchmark('Smi-Constant-Sub', subSmiConstant);
36+
addBenchmark('Smi-Constant-Mul', mulSmiConstant);
37+
addBenchmark('Smi-Constant-Div', divSmiConstant);
38+
addBenchmark('Smi-Constant-Mod', modSmiConstant);
39+
addBenchmark('Smi-Increment', SmiIncrement);
40+
addBenchmark('Number-Increment', NumberIncrement);
41+
addBenchmark('Smi-Decrement', SmiDecrement);
42+
addBenchmark('Number-Decrement', NumberDecrement);
43+
44+
45+
function add(a, b) {
46+
for (var i = 0; i < 1000; ++i) {
47+
a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b;
48+
a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b;
49+
a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b;
50+
a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b;
51+
a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b;
52+
a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b;
53+
a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b;
54+
a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b;
55+
a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b;
56+
a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b; a + b;
57+
}
58+
}
59+
60+
function sub(a, b) {
61+
for (var i = 0; i < 1000; ++i) {
62+
a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b;
63+
a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b;
64+
a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b;
65+
a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b;
66+
a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b;
67+
a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b;
68+
a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b;
69+
a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b;
70+
a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b;
71+
a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b; a - b;
72+
}
73+
}
74+
75+
function mul(a, b) {
76+
for (var i = 0; i < 1000; ++i) {
77+
a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b;
78+
a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b;
79+
a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b;
80+
a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b;
81+
a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b;
82+
a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b;
83+
a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b;
84+
a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b;
85+
a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b;
86+
a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b; a * b;
87+
}
88+
}
89+
90+
function div(a, b) {
91+
for (var i = 0; i < 1000; ++i) {
92+
a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b;
93+
a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b;
94+
a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b;
95+
a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b;
96+
a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b;
97+
a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b;
98+
a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b;
99+
a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b;
100+
a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b;
101+
a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b; a / b;
102+
}
103+
}
104+
105+
function mod(a, b) {
106+
for (var i = 0; i < 1000; ++i) {
107+
a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b;
108+
a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b;
109+
a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b;
110+
a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b;
111+
a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b;
112+
a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b;
113+
a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b;
114+
a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b;
115+
a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b;
116+
a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b; a % b;
117+
}
118+
}
119+
120+
function addSmiConstant(a) {
121+
var a = 20;
122+
for (var i = 0; i < 1000; ++i) {
123+
a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10;
124+
a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10;
125+
a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10;
126+
a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10;
127+
a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10;
128+
a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10;
129+
a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10;
130+
a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10;
131+
a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10;
132+
a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10; a + 10;
133+
}
134+
}
135+
136+
function subSmiConstant() {
137+
var a = 20;
138+
for (var i = 0; i < 1000; ++i) {
139+
a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10;
140+
a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10;
141+
a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10;
142+
a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10;
143+
a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10;
144+
a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10;
145+
a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10;
146+
a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10;
147+
a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10;
148+
a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10; a - 10;
149+
}
150+
}
151+
152+
function mulSmiConstant() {
153+
var a = 20;
154+
for (var i = 0; i < 1000; ++i) {
155+
a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10;
156+
a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10;
157+
a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10;
158+
a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10;
159+
a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10;
160+
a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10;
161+
a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10;
162+
a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10;
163+
a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10;
164+
a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10; a * 10;
165+
}
166+
}
167+
168+
function divSmiConstant() {
169+
var a = 20;
170+
for (var i = 0; i < 1000; ++i) {
171+
a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10;
172+
a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10;
173+
a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10;
174+
a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10;
175+
a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10;
176+
a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10;
177+
a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10;
178+
a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10;
179+
a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10;
180+
a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10; a / 10;
181+
}
182+
}
183+
184+
function modSmiConstant() {
185+
var a = 20;
186+
for (var i = 0; i < 1000; ++i) {
187+
a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10;
188+
a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10;
189+
a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10;
190+
a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10;
191+
a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10;
192+
a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10;
193+
a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10;
194+
a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10;
195+
a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10;
196+
a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10; a % 10;
197+
}
198+
}
199+
200+
function inc(a) {
201+
for (var i = 0; i < 1000; ++i) {
202+
++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a;
203+
++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a;
204+
++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a;
205+
++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a;
206+
++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a;
207+
++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a;
208+
++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a;
209+
++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a;
210+
++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a;
211+
++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a; ++a;
212+
// To ensure it is always in SmiRange for Smi operation.
213+
a -= 1000;
214+
}
215+
}
216+
217+
function dec(a) {
218+
for (var i = 0; i < 1000; ++i) {
219+
--a; --a; --a; --a; --a; --a; --a; --a; --a; --a;
220+
--a; --a; --a; --a; --a; --a; --a; --a; --a; --a;
221+
--a; --a; --a; --a; --a; --a; --a; --a; --a; --a;
222+
--a; --a; --a; --a; --a; --a; --a; --a; --a; --a;
223+
--a; --a; --a; --a; --a; --a; --a; --a; --a; --a;
224+
--a; --a; --a; --a; --a; --a; --a; --a; --a; --a;
225+
--a; --a; --a; --a; --a; --a; --a; --a; --a; --a;
226+
--a; --a; --a; --a; --a; --a; --a; --a; --a; --a;
227+
--a; --a; --a; --a; --a; --a; --a; --a; --a; --a;
228+
--a; --a; --a; --a; --a; --a; --a; --a; --a; --a;
229+
// To ensure it is always in SmiRange for Smi operation.
230+
a += 1000;
231+
}
232+
}
233+
234+
function addSmi() {
235+
add(10, 20);
236+
}
237+
238+
function addNumber() {
239+
add(0.333, 0.5);
240+
}
241+
242+
function addOddball() {
243+
add(0.333, true);
244+
}
245+
246+
function addString() {
247+
add("abc", "def");
248+
}
249+
250+
function addNumberString() {
251+
add("abc", 1.23);
252+
}
253+
254+
function addObject() {
255+
add({x: 1, y:2}, {x:3, y:4});
256+
}
257+
258+
function subSmi() {
259+
sub(10, 20);
260+
}
261+
262+
function subNumber() {
263+
sub(0.333, 0.5);
264+
}
265+
266+
function subOddball() {
267+
sub(0.333, true);
268+
}
269+
270+
function subObject() {
271+
sub({x: 1, y:2}, {x:3, y:4});
272+
}
273+
274+
function mulSmi() {
275+
mul(10, 20);
276+
}
277+
278+
function mulNumber() {
279+
mul(0.333, 0.5);
280+
}
281+
282+
function mulOddball() {
283+
mul(0.333, true);
284+
}
285+
286+
function mulObject() {
287+
mul({x: 1, y:2}, {x:3, y:4});
288+
}
289+
290+
function divSmi() {
291+
div(10, 20);
292+
}
293+
294+
function divNumber() {
295+
div(0.333, 0.5);
296+
}
297+
298+
function divOddball() {
299+
div(0.333, true);
300+
}
301+
302+
function divObject() {
303+
div({x: 1, y:2}, {x:3, y:4});
304+
}
305+
306+
function modSmi() {
307+
mod(10, 20);
308+
}
309+
310+
function modNumber() {
311+
mod(0.333, 0.5);
312+
}
313+
314+
function modOddball() {
315+
mod(0.333, true);
316+
}
317+
318+
function modObject() {
319+
mod({x: 1, y:2}, {x:3, y:4});
320+
}
321+
322+
function SmiIncrement() {
323+
inc(3);
324+
}
325+
326+
function NumberIncrement() {
327+
inc(0.33);
328+
}
329+
330+
function SmiDecrement() {
331+
dec(3);
332+
}
333+
334+
function NumberDecrement() {
335+
dec(0.33);
336+
}

0 commit comments

Comments
 (0)