9d3dc6f219
FunctionEntry StackChecks is one of the two cases where we generate a StackCheck bytecode. In these cases, we do stack check against the js limit (not to be confused with the real js limit). Their purpose is to be able to interrupt the running code. We can omit the FunctionEntry StackCheck by embedding its code into the InterpreterEntryTrampoline builtin. We save one bytecode per interpreted function. This change has rippling effects for optimized code, as well as the deoptimizer. Bug: v8:10149, v8:9977, v8:9960 Change-Id: I6156de48b3bc0b519dd21190a8e6214fbe96c78d Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1914218 Reviewed-by: Jakob Gruber <jgruber@chromium.org> Reviewed-by: Ross McIlroy <rmcilroy@chromium.org> Commit-Queue: Santiago Aboy Solanes <solanes@chromium.org> Cr-Commit-Position: refs/heads/master@{#66206}
283 lines
6.7 KiB
Plaintext
283 lines
6.7 KiB
Plaintext
#
|
|
# Autogenerated by generate-bytecode-expectations.
|
|
#
|
|
|
|
---
|
|
wrap: no
|
|
test function name: test
|
|
private methods: yes
|
|
|
|
---
|
|
snippet: "
|
|
class A {
|
|
static #a() { return 1; }
|
|
static test() { return this.#a(); }
|
|
}
|
|
|
|
var test = A.test;
|
|
test();
|
|
"
|
|
frame size: 4
|
|
parameter count: 1
|
|
bytecode array length: 35
|
|
bytecodes: [
|
|
/* 56 S> */ B(LdaCurrentContextSlot), U8(3),
|
|
B(TestReferenceEqual), R(this),
|
|
B(Mov), R(this), R(1),
|
|
B(JumpIfTrue), U8(18),
|
|
B(Wide), B(LdaSmi), I16(261),
|
|
B(Star), R(2),
|
|
B(LdaConstant), U8(0),
|
|
B(Star), R(3),
|
|
B(CallRuntime), U16(Runtime::kNewTypeError), R(2), U8(2),
|
|
B(Throw),
|
|
B(LdaCurrentContextSlot), U8(2),
|
|
B(Star), R(0),
|
|
/* 70 E> */ B(CallAnyReceiver), R(0), R(1), U8(1), U8(0),
|
|
/* 73 S> */ B(Return),
|
|
]
|
|
constant pool: [
|
|
ONE_BYTE_INTERNALIZED_STRING_TYPE ["#a"],
|
|
]
|
|
handlers: [
|
|
]
|
|
|
|
---
|
|
snippet: "
|
|
class B {
|
|
static #b() { return 1; }
|
|
static test() { this.#b = 1; }
|
|
}
|
|
|
|
var test = B.test;
|
|
test();
|
|
"
|
|
frame size: 2
|
|
parameter count: 1
|
|
bytecode array length: 16
|
|
bytecodes: [
|
|
/* 56 S> */ B(Wide), B(LdaSmi), I16(263),
|
|
B(Star), R(0),
|
|
B(LdaConstant), U8(0),
|
|
B(Star), R(1),
|
|
/* 64 E> */ B(CallRuntime), U16(Runtime::kNewTypeError), R(0), U8(2),
|
|
B(Throw),
|
|
]
|
|
constant pool: [
|
|
ONE_BYTE_INTERNALIZED_STRING_TYPE ["#b"],
|
|
]
|
|
handlers: [
|
|
]
|
|
|
|
---
|
|
snippet: "
|
|
class C {
|
|
static #c() { return 1; }
|
|
static test() { this.#c++; }
|
|
}
|
|
|
|
var test = C.test;
|
|
test();
|
|
"
|
|
frame size: 2
|
|
parameter count: 1
|
|
bytecode array length: 16
|
|
bytecodes: [
|
|
/* 56 S> */ B(Wide), B(LdaSmi), I16(263),
|
|
B(Star), R(0),
|
|
B(LdaConstant), U8(0),
|
|
B(Star), R(1),
|
|
B(CallRuntime), U16(Runtime::kNewTypeError), R(0), U8(2),
|
|
B(Throw),
|
|
]
|
|
constant pool: [
|
|
ONE_BYTE_INTERNALIZED_STRING_TYPE ["#c"],
|
|
]
|
|
handlers: [
|
|
]
|
|
|
|
---
|
|
snippet: "
|
|
class D {
|
|
static get #d() { return 1; }
|
|
static set #d(val) { }
|
|
|
|
static test() {
|
|
this.#d++;
|
|
this.#d = 1;
|
|
return this.#d;
|
|
}
|
|
}
|
|
|
|
var test = D.test;
|
|
test();
|
|
"
|
|
frame size: 5
|
|
parameter count: 1
|
|
bytecode array length: 142
|
|
bytecodes: [
|
|
/* 90 S> */ B(LdaCurrentContextSlot), U8(2),
|
|
B(Star), R(1),
|
|
B(LdaCurrentContextSlot), U8(3),
|
|
/* 94 E> */ B(TestReferenceEqual), R(this),
|
|
B(Mov), R(this), R(0),
|
|
B(JumpIfTrue), U8(18),
|
|
B(Wide), B(LdaSmi), I16(261),
|
|
B(Star), R(2),
|
|
B(LdaConstant), U8(0),
|
|
B(Star), R(3),
|
|
B(CallRuntime), U16(Runtime::kNewTypeError), R(2), U8(2),
|
|
B(Throw),
|
|
B(CallRuntime), U16(Runtime::kLoadPrivateGetter), R(1), U8(1),
|
|
B(Star), R(2),
|
|
B(CallProperty0), R(2), R(0), U8(0),
|
|
B(Inc), U8(2),
|
|
B(Star), R(2),
|
|
/* 97 E> */ B(CallRuntime), U16(Runtime::kLoadPrivateSetter), R(1), U8(1),
|
|
B(Star), R(3),
|
|
B(CallProperty1), R(3), R(0), R(2), U8(3),
|
|
/* 105 S> */ B(LdaSmi), I8(1),
|
|
B(Star), R(0),
|
|
B(LdaCurrentContextSlot), U8(2),
|
|
B(Star), R(2),
|
|
B(LdaCurrentContextSlot), U8(3),
|
|
/* 109 E> */ B(TestReferenceEqual), R(this),
|
|
B(Mov), R(this), R(1),
|
|
B(JumpIfTrue), U8(18),
|
|
B(Wide), B(LdaSmi), I16(262),
|
|
B(Star), R(3),
|
|
B(LdaConstant), U8(0),
|
|
B(Star), R(4),
|
|
B(CallRuntime), U16(Runtime::kNewTypeError), R(3), U8(2),
|
|
B(Throw),
|
|
B(CallRuntime), U16(Runtime::kLoadPrivateSetter), R(2), U8(1),
|
|
B(Star), R(3),
|
|
B(CallProperty1), R(3), R(1), R(0), U8(5),
|
|
/* 122 S> */ B(LdaCurrentContextSlot), U8(2),
|
|
B(Star), R(1),
|
|
B(LdaCurrentContextSlot), U8(3),
|
|
/* 133 E> */ B(TestReferenceEqual), R(this),
|
|
B(Mov), R(this), R(0),
|
|
B(JumpIfTrue), U8(18),
|
|
B(Wide), B(LdaSmi), I16(261),
|
|
B(Star), R(2),
|
|
B(LdaConstant), U8(0),
|
|
B(Star), R(3),
|
|
B(CallRuntime), U16(Runtime::kNewTypeError), R(2), U8(2),
|
|
B(Throw),
|
|
B(CallRuntime), U16(Runtime::kLoadPrivateGetter), R(1), U8(1),
|
|
B(Star), R(2),
|
|
B(CallProperty0), R(2), R(0), U8(7),
|
|
/* 137 S> */ B(Return),
|
|
]
|
|
constant pool: [
|
|
ONE_BYTE_INTERNALIZED_STRING_TYPE ["#d"],
|
|
]
|
|
handlers: [
|
|
]
|
|
|
|
---
|
|
snippet: "
|
|
class E {
|
|
static get #e() { return 1; }
|
|
static test() { this.#e++; }
|
|
}
|
|
var test = E.test;
|
|
test();
|
|
"
|
|
frame size: 2
|
|
parameter count: 1
|
|
bytecode array length: 16
|
|
bytecodes: [
|
|
/* 60 S> */ B(Wide), B(LdaSmi), I16(265),
|
|
B(Star), R(0),
|
|
B(LdaConstant), U8(0),
|
|
B(Star), R(1),
|
|
B(CallRuntime), U16(Runtime::kNewTypeError), R(0), U8(2),
|
|
B(Throw),
|
|
]
|
|
constant pool: [
|
|
ONE_BYTE_INTERNALIZED_STRING_TYPE ["#e"],
|
|
]
|
|
handlers: [
|
|
]
|
|
|
|
---
|
|
snippet: "
|
|
class F {
|
|
static set #f(val) { }
|
|
static test() { this.#f++; }
|
|
}
|
|
var test = F.test;
|
|
test();
|
|
"
|
|
frame size: 2
|
|
parameter count: 1
|
|
bytecode array length: 16
|
|
bytecodes: [
|
|
/* 53 S> */ B(Wide), B(LdaSmi), I16(264),
|
|
B(Star), R(0),
|
|
B(LdaConstant), U8(0),
|
|
B(Star), R(1),
|
|
B(CallRuntime), U16(Runtime::kNewTypeError), R(0), U8(2),
|
|
B(Throw),
|
|
]
|
|
constant pool: [
|
|
ONE_BYTE_INTERNALIZED_STRING_TYPE ["#f"],
|
|
]
|
|
handlers: [
|
|
]
|
|
|
|
---
|
|
snippet: "
|
|
class G {
|
|
static get #d() { return 1; }
|
|
static test() { this.#d = 1; }
|
|
}
|
|
var test = G.test;
|
|
test();
|
|
"
|
|
frame size: 2
|
|
parameter count: 1
|
|
bytecode array length: 16
|
|
bytecodes: [
|
|
/* 60 S> */ B(Wide), B(LdaSmi), I16(265),
|
|
B(Star), R(0),
|
|
B(LdaConstant), U8(0),
|
|
B(Star), R(1),
|
|
/* 68 E> */ B(CallRuntime), U16(Runtime::kNewTypeError), R(0), U8(2),
|
|
B(Throw),
|
|
]
|
|
constant pool: [
|
|
ONE_BYTE_INTERNALIZED_STRING_TYPE ["#d"],
|
|
]
|
|
handlers: [
|
|
]
|
|
|
|
---
|
|
snippet: "
|
|
class H {
|
|
set #h(val) { }
|
|
static test() { this.#h; }
|
|
}
|
|
var test = H.test;
|
|
test();
|
|
"
|
|
frame size: 3
|
|
parameter count: 1
|
|
bytecode array length: 16
|
|
bytecodes: [
|
|
/* 46 S> */ B(Wide), B(LdaSmi), I16(264),
|
|
B(Star), R(1),
|
|
B(LdaConstant), U8(0),
|
|
B(Star), R(2),
|
|
B(CallRuntime), U16(Runtime::kNewTypeError), R(1), U8(2),
|
|
B(Throw),
|
|
]
|
|
constant pool: [
|
|
ONE_BYTE_INTERNALIZED_STRING_TYPE ["#h"],
|
|
]
|
|
handlers: [
|
|
]
|
|
|