[builtins] Avoid reloading undefined value in InterpreterEntryTrampoline
Since we were already loading the undefined value a few lines above, we could avoid loading it again. Bug: v8:9771 Change-Id: Id05a77494c06a212612a365b5c0dcba4803ba756 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1817609 Commit-Queue: Santiago Aboy Solanes <solanes@chromium.org> Reviewed-by: Dan Elphick <delphick@chromium.org> Cr-Commit-Position: refs/heads/master@{#63935}
This commit is contained in:
parent
12a9ee3a5b
commit
40c0f84a38
@ -1138,11 +1138,11 @@ void Builtins::Generate_InterpreterEntryTrampoline(MacroAssembler* masm) {
|
||||
// If ok, push undefined as the initial value for all register file entries.
|
||||
Label loop_header;
|
||||
Label loop_check;
|
||||
__ LoadRoot(r9, RootIndex::kUndefinedValue);
|
||||
__ LoadRoot(kInterpreterAccumulatorRegister, RootIndex::kUndefinedValue);
|
||||
__ b(&loop_check, al);
|
||||
__ bind(&loop_header);
|
||||
// TODO(rmcilroy): Consider doing more than one push per loop iteration.
|
||||
__ push(r9);
|
||||
__ push(kInterpreterAccumulatorRegister);
|
||||
// Continue loop if not done.
|
||||
__ bind(&loop_check);
|
||||
__ sub(r4, r4, Operand(kPointerSize), SetCC);
|
||||
@ -1157,8 +1157,7 @@ void Builtins::Generate_InterpreterEntryTrampoline(MacroAssembler* masm) {
|
||||
__ cmp(r9, Operand::Zero());
|
||||
__ str(r3, MemOperand(fp, r9, LSL, kPointerSizeLog2), ne);
|
||||
|
||||
// Load accumulator with undefined.
|
||||
__ LoadRoot(kInterpreterAccumulatorRegister, RootIndex::kUndefinedValue);
|
||||
// The accumulator is already loaded with undefined.
|
||||
|
||||
// Load the dispatch table into a register and dispatch to the bytecode
|
||||
// handler at the current bytecode offset.
|
||||
|
@ -1270,13 +1270,13 @@ void Builtins::Generate_InterpreterEntryTrampoline(MacroAssembler* masm) {
|
||||
// Note: there should always be at least one stack slot for the return
|
||||
// register in the register file.
|
||||
Label loop_header;
|
||||
__ LoadRoot(x10, RootIndex::kUndefinedValue);
|
||||
__ LoadRoot(kInterpreterAccumulatorRegister, RootIndex::kUndefinedValue);
|
||||
__ Lsr(x11, x11, kSystemPointerSizeLog2);
|
||||
// Round up the number of registers to a multiple of 2, to align the stack
|
||||
// to 16 bytes.
|
||||
__ Add(x11, x11, 1);
|
||||
__ Bic(x11, x11, 1);
|
||||
__ PushMultipleTimes(x10, x11);
|
||||
__ PushMultipleTimes(kInterpreterAccumulatorRegister, x11);
|
||||
__ Bind(&loop_header);
|
||||
}
|
||||
|
||||
@ -1291,8 +1291,7 @@ void Builtins::Generate_InterpreterEntryTrampoline(MacroAssembler* masm) {
|
||||
__ Str(x3, MemOperand(fp, x10, LSL, kSystemPointerSizeLog2));
|
||||
__ Bind(&no_incoming_new_target_or_generator_register);
|
||||
|
||||
// Load accumulator with undefined.
|
||||
__ LoadRoot(kInterpreterAccumulatorRegister, RootIndex::kUndefinedValue);
|
||||
// The accumulator is already loaded with undefined.
|
||||
|
||||
// Load the dispatch table into a register and dispatch to the bytecode
|
||||
// handler at the current bytecode offset.
|
||||
|
@ -1154,11 +1154,11 @@ void Builtins::Generate_InterpreterEntryTrampoline(MacroAssembler* masm) {
|
||||
// If ok, push undefined as the initial value for all register file entries.
|
||||
Label loop_header;
|
||||
Label loop_check;
|
||||
__ LoadRoot(rax, RootIndex::kUndefinedValue);
|
||||
__ LoadRoot(kInterpreterAccumulatorRegister, RootIndex::kUndefinedValue);
|
||||
__ j(always, &loop_check, Label::kNear);
|
||||
__ bind(&loop_header);
|
||||
// TODO(rmcilroy): Consider doing more than one push per loop iteration.
|
||||
__ Push(rax);
|
||||
__ Push(kInterpreterAccumulatorRegister);
|
||||
// Continue loop if not done.
|
||||
__ bind(&loop_check);
|
||||
__ subq(rcx, Immediate(kSystemPointerSize));
|
||||
@ -1169,16 +1169,15 @@ void Builtins::Generate_InterpreterEntryTrampoline(MacroAssembler* masm) {
|
||||
// register, initialize it with incoming value which was passed in rdx.
|
||||
Label no_incoming_new_target_or_generator_register;
|
||||
__ movsxlq(
|
||||
rax,
|
||||
rcx,
|
||||
FieldOperand(kInterpreterBytecodeArrayRegister,
|
||||
BytecodeArray::kIncomingNewTargetOrGeneratorRegisterOffset));
|
||||
__ testl(rax, rax);
|
||||
__ testl(rcx, rcx);
|
||||
__ j(zero, &no_incoming_new_target_or_generator_register, Label::kNear);
|
||||
__ movq(Operand(rbp, rax, times_system_pointer_size, 0), rdx);
|
||||
__ movq(Operand(rbp, rcx, times_system_pointer_size, 0), rdx);
|
||||
__ bind(&no_incoming_new_target_or_generator_register);
|
||||
|
||||
// Load accumulator with undefined.
|
||||
__ LoadRoot(kInterpreterAccumulatorRegister, RootIndex::kUndefinedValue);
|
||||
// The accumulator is already loaded with undefined.
|
||||
|
||||
// Load the dispatch table into a register and dispatch to the bytecode
|
||||
// handler at the current bytecode offset.
|
||||
|
Loading…
Reference in New Issue
Block a user