- optimized global variable access

- removed full compliance with the spec for strict mode variable
  assignment so that they are as fast as in non strict mode (V8,
  SpiderMonkey and JavascriptCore do the same, so IMHO the spec should
  be updated).
This commit is contained in:
Fabrice Bellard
2025-10-03 14:26:13 +02:00
parent f4951efd94
commit 2c90110287
4 changed files with 72 additions and 142 deletions

View File

@@ -527,22 +527,21 @@ function global_read(n)
return n * 4;
}
// non strict version
var global_write =
(1, eval)(`(function global_write(n)
{
var j;
for(j = 0; j < n; j++) {
global_var0 = j;
global_var0 = j;
global_var0 = j;
global_var0 = j;
}
return n * 4;
})`);
function global_write(n)
{
var j;
for(j = 0; j < n; j++) {
global_var0 = j;
global_var0 = j;
global_var0 = j;
global_var0 = j;
}
return n * 4;
}
function global_write_strict(n)
{
"use strict";
var j;
for(j = 0; j < n; j++) {
global_var0 = j;
@@ -570,23 +569,22 @@ function local_destruct(n)
var global_v1, global_v2, global_v3, global_v4;
var global_a, global_b, global_c, global_d;
// non strict version
var global_destruct =
(1, eval)(`(function global_destruct(n)
{
var j, v1, v2, v3, v4;
var array = [ 1, 2, 3, 4, 5 ];
var o = { a:1, b:2, c:3, d:4 };
var a, b, c, d;
for(j = 0; j < n; j++) {
[ global_v1, global_v2,, global_v3, ...global_v4] = array;
({ a: global_a, b: global_b, c: global_c, d: global_d } = o);
}
return n * 8;
})`);
function global_destruct(n)
{
var j, v1, v2, v3, v4;
var array = [ 1, 2, 3, 4, 5 ];
var o = { a:1, b:2, c:3, d:4 };
var a, b, c, d;
for(j = 0; j < n; j++) {
[ global_v1, global_v2,, global_v3, ...global_v4] = array;
({ a: global_a, b: global_b, c: global_c, d: global_d } = o);
}
return n * 8;
}
function global_destruct_strict(n)
{
"use strict";
var j, v1, v2, v3, v4;
var array = [ 1, 2, 3, 4, 5 ];
var o = { a:1, b:2, c:3, d:4 };