Commit 632e79bf authored by whesse@chromium.org's avatar whesse@chromium.org

X64 Crankshaft: Revert r7071 and fix DoStoreContextSlot in a different way.

Review URL: http://codereview.chromium.org/6627048

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@7073 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent 56753adb
......@@ -1993,7 +1993,8 @@ void LCodeGen::DoStoreContextSlot(LStoreContextSlot* instr) {
__ movq(ContextOperand(context, instr->slot_index()), value);
if (instr->needs_write_barrier()) {
int offset = Context::SlotOffset(instr->slot_index());
__ RecordWrite(context, offset, value, kScratchRegister);
Register scratch = ToRegister(instr->TempAt(0));
__ RecordWrite(context, offset, value, scratch);
}
}
......
......@@ -1728,14 +1728,17 @@ LInstruction* LChunkBuilder::DoLoadContextSlot(HLoadContextSlot* instr) {
LInstruction* LChunkBuilder::DoStoreContextSlot(HStoreContextSlot* instr) {
LOperand* context;
LOperand* value;
LOperand* temp;
if (instr->NeedsWriteBarrier()) {
context = UseTempRegister(instr->context());
value = UseTempRegister(instr->value());
temp = TempRegister();
} else {
context = UseRegister(instr->context());
value = UseRegister(instr->value());
temp = NULL;
}
return new LStoreContextSlot(context, value);
return new LStoreContextSlot(context, value, temp);
}
......
......@@ -1258,11 +1258,12 @@ class LLoadContextSlot: public LTemplateInstruction<1, 1, 0> {
};
class LStoreContextSlot: public LTemplateInstruction<0, 2, 0> {
class LStoreContextSlot: public LTemplateInstruction<0, 2, 1> {
public:
LStoreContextSlot(LOperand* context, LOperand* value) {
LStoreContextSlot(LOperand* context, LOperand* value, LOperand* temp) {
inputs_[0] = context;
inputs_[1] = value;
temps_[0] = temp;
}
DECLARE_CONCRETE_INSTRUCTION(StoreContextSlot, "store-context-slot")
......
......@@ -95,13 +95,7 @@ void MacroAssembler::RecordWriteHelper(Register object,
if (FLAG_debug_code) {
// Check that the object is not in new space.
NearLabel not_in_new_space;
if (addr.is(kScratchRegister)) {
push(kScratchRegister);
InNewSpace(object, scratch, not_equal, &not_in_new_space);
pop(kScratchRegister);
} else {
InNewSpace(object, scratch, not_equal, &not_in_new_space);
}
InNewSpace(object, scratch, not_equal, &not_in_new_space);
Abort("new-space object passed to RecordWriteHelper");
bind(&not_in_new_space);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment