mirror of
https://github.com/dart-lang/sdk
synced 2024-09-19 14:51:30 +00:00
Improve instruction scheduling when calling the store buffer stub.
R=fschneider@google.com Review-Url: https://codereview.chromium.org/2752013003 .
This commit is contained in:
parent
319b726f8b
commit
801da91772
|
@ -1791,8 +1791,8 @@ void Assembler::StoreIntoObject(Register object,
|
|||
if (object != R0) {
|
||||
mov(R0, Operand(object));
|
||||
}
|
||||
ldr(CODE_REG, Address(THR, Thread::update_store_buffer_code_offset()));
|
||||
ldr(LR, Address(THR, Thread::update_store_buffer_entry_point_offset()));
|
||||
ldr(CODE_REG, Address(THR, Thread::update_store_buffer_code_offset()));
|
||||
blx(LR);
|
||||
PopList(regs);
|
||||
Bind(&done);
|
||||
|
|
|
@ -909,8 +909,8 @@ void Assembler::StoreIntoObject(Register object,
|
|||
if (object != R0) {
|
||||
mov(R0, object);
|
||||
}
|
||||
ldr(CODE_REG, Address(THR, Thread::update_store_buffer_code_offset()));
|
||||
ldr(TMP, Address(THR, Thread::update_store_buffer_entry_point_offset()));
|
||||
ldr(CODE_REG, Address(THR, Thread::update_store_buffer_code_offset()));
|
||||
blr(TMP);
|
||||
Pop(LR);
|
||||
if (value != R0) {
|
||||
|
|
|
@ -545,8 +545,9 @@ void Assembler::BranchLinkPatchable(const StubEntry& stub_entry) {
|
|||
|
||||
void Assembler::BranchLinkToRuntime() {
|
||||
lw(T9, Address(THR, Thread::call_to_runtime_entry_point_offset()));
|
||||
lw(CODE_REG, Address(THR, Thread::call_to_runtime_stub_offset()));
|
||||
jalr(T9);
|
||||
delay_slot()->lw(CODE_REG,
|
||||
Address(THR, Thread::call_to_runtime_stub_offset()));
|
||||
}
|
||||
|
||||
|
||||
|
@ -701,9 +702,10 @@ void Assembler::StoreIntoObject(Register object,
|
|||
if (object != T0) {
|
||||
mov(T0, object);
|
||||
}
|
||||
lw(CODE_REG, Address(THR, Thread::update_store_buffer_code_offset()));
|
||||
lw(T9, Address(THR, Thread::update_store_buffer_entry_point_offset()));
|
||||
jalr(T9);
|
||||
delay_slot()->lw(CODE_REG,
|
||||
Address(THR, Thread::update_store_buffer_code_offset()));
|
||||
lw(RA, Address(SP, 0 * kWordSize));
|
||||
if (value != T0) {
|
||||
// Restore T0.
|
||||
|
|
|
@ -2953,8 +2953,8 @@ void Assembler::StoreIntoObject(Register object,
|
|||
movq(RDX, object);
|
||||
}
|
||||
pushq(CODE_REG);
|
||||
movq(CODE_REG, Address(THR, Thread::update_store_buffer_code_offset()));
|
||||
movq(TMP, Address(THR, Thread::update_store_buffer_entry_point_offset()));
|
||||
movq(CODE_REG, Address(THR, Thread::update_store_buffer_code_offset()));
|
||||
call(TMP);
|
||||
|
||||
popq(CODE_REG);
|
||||
|
|
Loading…
Reference in a new issue