diff --git a/test/js-perf-test/InterpreterEntryTrampoline/InterpreterEntryTrampoline.js b/test/js-perf-test/InterpreterEntryTrampoline/InterpreterEntryTrampoline.js new file mode 100644 index 0000000000..2855fd44f8 --- /dev/null +++ b/test/js-perf-test/InterpreterEntryTrampoline/InterpreterEntryTrampoline.js @@ -0,0 +1,119 @@ +// Copyright 2019 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('Calls-No-Argument', callsNoArgument); +addBenchmark('Calls-One-Argument', callsOneArgument); +addBenchmark('Calls-Six-Arguments', callsSixArguments); +addBenchmark('Calls-With-Receiver', callsWithReceiver); + +function callsNoArgument() { + function f() { + return 0; + } + + for (var i = 0; i < 1000; ++i) { + f(); f(); f(); f(); f(); f(); f(); f(); f(); + f(); f(); f(); f(); f(); f(); f(); f(); f(); + f(); f(); f(); f(); f(); f(); f(); f(); f(); + f(); f(); f(); f(); f(); f(); f(); f(); f(); + f(); f(); f(); f(); f(); f(); f(); f(); f(); + f(); f(); f(); f(); f(); f(); f(); f(); f(); + f(); f(); f(); f(); f(); f(); f(); f(); f(); + f(); f(); f(); f(); f(); f(); f(); f(); f(); + f(); f(); f(); f(); f(); f(); f(); f(); f(); + f(); f(); f(); f(); f(); f(); f(); f(); f(); + f(); f(); f(); f(); f(); f(); f(); f(); f(); + } +} + +function callsOneArgument() { + function f(a) { + return a; + } + let z = 0; + + for (var i = 0; i < 1000; ++i) { + f(z); f(z); f(z); f(z); f(z); f(z); f(z); f(z); + f(z); f(z); f(z); f(z); f(z); f(z); f(z); f(z); + f(z); f(z); f(z); f(z); f(z); f(z); f(z); f(z); + f(z); f(z); f(z); f(z); f(z); f(z); f(z); f(z); + f(z); f(z); f(z); f(z); f(z); f(z); f(z); f(z); + f(z); f(z); f(z); f(z); f(z); f(z); f(z); f(z); + f(z); f(z); f(z); f(z); f(z); f(z); f(z); f(z); + f(z); f(z); f(z); f(z); f(z); f(z); f(z); f(z); + f(z); f(z); f(z); f(z); f(z); f(z); f(z); f(z); + f(z); f(z); f(z); f(z); f(z); f(z); f(z); f(z); + f(z); f(z); f(z); f(z); f(z); f(z); f(z); f(z); + f(z); f(z); f(z); f(z); f(z); f(z); f(z); f(z); + } +} + +function callsSixArguments() { + function g(a,b,c,d,e,f) { + return c; + } + let a = 0; + let b = 1; + let c = 2; + let d = 3; + let e = 4; + let f = 5; + + for (var i = 0; i < 1000; ++i) { + g(a,b,c,d,e,f); g(a,b,c,d,e,f); g(a,b,c,d,e,f); g(a,b,c,d,e,f); + g(a,b,c,d,e,f); g(a,b,c,d,e,f); g(a,b,c,d,e,f); g(a,b,c,d,e,f); + g(a,b,c,d,e,f); g(a,b,c,d,e,f); g(a,b,c,d,e,f); g(a,b,c,d,e,f); + g(a,b,c,d,e,f); g(a,b,c,d,e,f); g(a,b,c,d,e,f); g(a,b,c,d,e,f); + g(a,b,c,d,e,f); g(a,b,c,d,e,f); g(a,b,c,d,e,f); g(a,b,c,d,e,f); + g(a,b,c,d,e,f); g(a,b,c,d,e,f); g(a,b,c,d,e,f); g(a,b,c,d,e,f); + g(a,b,c,d,e,f); g(a,b,c,d,e,f); g(a,b,c,d,e,f); g(a,b,c,d,e,f); + g(a,b,c,d,e,f); g(a,b,c,d,e,f); g(a,b,c,d,e,f); g(a,b,c,d,e,f); + g(a,b,c,d,e,f); g(a,b,c,d,e,f); g(a,b,c,d,e,f); g(a,b,c,d,e,f); + g(a,b,c,d,e,f); g(a,b,c,d,e,f); g(a,b,c,d,e,f); g(a,b,c,d,e,f); + g(a,b,c,d,e,f); g(a,b,c,d,e,f); g(a,b,c,d,e,f); g(a,b,c,d,e,f); + g(a,b,c,d,e,f); g(a,b,c,d,e,f); g(a,b,c,d,e,f); g(a,b,c,d,e,f); + g(a,b,c,d,e,f); g(a,b,c,d,e,f); g(a,b,c,d,e,f); g(a,b,c,d,e,f); + g(a,b,c,d,e,f); g(a,b,c,d,e,f); g(a,b,c,d,e,f); g(a,b,c,d,e,f); + g(a,b,c,d,e,f); g(a,b,c,d,e,f); g(a,b,c,d,e,f); g(a,b,c,d,e,f); + g(a,b,c,d,e,f); g(a,b,c,d,e,f); g(a,b,c,d,e,f); g(a,b,c,d,e,f); + g(a,b,c,d,e,f); g(a,b,c,d,e,f); g(a,b,c,d,e,f); g(a,b,c,d,e,f); + g(a,b,c,d,e,f); g(a,b,c,d,e,f); g(a,b,c,d,e,f); g(a,b,c,d,e,f); + g(a,b,c,d,e,f); g(a,b,c,d,e,f); g(a,b,c,d,e,f); g(a,b,c,d,e,f); + g(a,b,c,d,e,f); g(a,b,c,d,e,f); g(a,b,c,d,e,f); g(a,b,c,d,e,f); + g(a,b,c,d,e,f); g(a,b,c,d,e,f); g(a,b,c,d,e,f); g(a,b,c,d,e,f); + g(a,b,c,d,e,f); g(a,b,c,d,e,f); g(a,b,c,d,e,f); g(a,b,c,d,e,f); + g(a,b,c,d,e,f); g(a,b,c,d,e,f); g(a,b,c,d,e,f); g(a,b,c,d,e,f); + g(a,b,c,d,e,f); g(a,b,c,d,e,f); g(a,b,c,d,e,f); g(a,b,c,d,e,f); + } +} + +function callsWithReceiver() { + function constructObject() { + this.f = function() { + return 0; + }; + } + let o = new constructObject(); + + for (var i = 0; i < 1000; ++i) { + o.f(); o.f(); o.f(); o.f(); o.f(); o.f(); o.f(); o.f(); o.f(); + o.f(); o.f(); o.f(); o.f(); o.f(); o.f(); o.f(); o.f(); o.f(); + o.f(); o.f(); o.f(); o.f(); o.f(); o.f(); o.f(); o.f(); o.f(); + o.f(); o.f(); o.f(); o.f(); o.f(); o.f(); o.f(); o.f(); o.f(); + o.f(); o.f(); o.f(); o.f(); o.f(); o.f(); o.f(); o.f(); o.f(); + o.f(); o.f(); o.f(); o.f(); o.f(); o.f(); o.f(); o.f(); o.f(); + o.f(); o.f(); o.f(); o.f(); o.f(); o.f(); o.f(); o.f(); o.f(); + o.f(); o.f(); o.f(); o.f(); o.f(); o.f(); o.f(); o.f(); o.f(); + o.f(); o.f(); o.f(); o.f(); o.f(); o.f(); o.f(); o.f(); o.f(); + o.f(); o.f(); o.f(); o.f(); o.f(); o.f(); o.f(); o.f(); o.f(); + o.f(); o.f(); o.f(); o.f(); o.f(); o.f(); o.f(); o.f(); o.f(); + } +} diff --git a/test/js-perf-test/InterpreterEntryTrampoline/run.js b/test/js-perf-test/InterpreterEntryTrampoline/run.js new file mode 100644 index 0000000000..2e0b73f229 --- /dev/null +++ b/test/js-perf-test/InterpreterEntryTrampoline/run.js @@ -0,0 +1,26 @@ +// Copyright 2019 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. + +load('../base.js'); +load('InterpreterEntryTrampoline.js'); + +var success = true; + +function PrintResult(name, result) { + print(name + '-InterpreterEntryTrampoline(Score): ' + result); +} + +function PrintStep(name) {} + +function PrintError(name, error) { + PrintResult(name, error); + success = false; +} + +BenchmarkSuite.config.doWarmup = undefined; +BenchmarkSuite.config.doDeterministic = undefined; + +BenchmarkSuite.RunSuites({ NotifyResult: PrintResult, + NotifyError: PrintError, + NotifyStep: PrintStep }); diff --git a/test/js-perf-test/JSTests3.json b/test/js-perf-test/JSTests3.json index 751bdfce8c..26e03bf1ce 100644 --- a/test/js-perf-test/JSTests3.json +++ b/test/js-perf-test/JSTests3.json @@ -361,6 +361,20 @@ ] } ] + }, + { + "name": "InterpreterEntryTrampoline", + "path": ["InterpreterEntryTrampoline"], + "main": "run.js", + "flags": ["--no-opt"], + "resources": ["InterpreterEntryTrampoline.js"], + "results_regexp": "^%s\\-InterpreterEntryTrampoline\\(Score\\): (.+)$", + "tests": [ + {"name": "Calls-No-Argument"}, + {"name": "Calls-One-Argument"}, + {"name": "Calls-Six-Arguments"}, + {"name": "Calls-With-Receiver"} + ] } ] }