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:
Ryan Macnak 2017-03-17 10:50:09 -07:00
parent 319b726f8b
commit 801da91772
4 changed files with 7 additions and 5 deletions

View file

@ -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);

View file

@ -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) {

View file

@ -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.

View file

@ -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);