Revision: 7073
Author: [email protected]
Date: Mon Mar 7 03:26:43 2011
Log: X64 Crankshaft: Revert r7071 and fix DoStoreContextSlot in a different
way.
Review URL: http://codereview.chromium.org/6627048
http://code.google.com/p/v8/source/detail?r=7073
Modified:
/branches/bleeding_edge/src/x64/lithium-codegen-x64.cc
/branches/bleeding_edge/src/x64/lithium-x64.cc
/branches/bleeding_edge/src/x64/lithium-x64.h
/branches/bleeding_edge/src/x64/macro-assembler-x64.cc
=======================================
--- /branches/bleeding_edge/src/x64/lithium-codegen-x64.cc Mon Mar 7
02:30:58 2011
+++ /branches/bleeding_edge/src/x64/lithium-codegen-x64.cc Mon Mar 7
03:26:43 2011
@@ -1993,7 +1993,8 @@
__ 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);
}
}
=======================================
--- /branches/bleeding_edge/src/x64/lithium-x64.cc Mon Mar 7 02:28:37 2011
+++ /branches/bleeding_edge/src/x64/lithium-x64.cc Mon Mar 7 03:26:43 2011
@@ -1728,14 +1728,17 @@
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());
- }
- return new LStoreContextSlot(context, value);
+ temp = NULL;
+ }
+ return new LStoreContextSlot(context, value, temp);
}
=======================================
--- /branches/bleeding_edge/src/x64/lithium-x64.h Thu Mar 3 08:09:52 2011
+++ /branches/bleeding_edge/src/x64/lithium-x64.h Mon Mar 7 03:26:43 2011
@@ -1258,11 +1258,12 @@
};
-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")
=======================================
--- /branches/bleeding_edge/src/x64/macro-assembler-x64.cc Mon Mar 7
02:28:37 2011
+++ /branches/bleeding_edge/src/x64/macro-assembler-x64.cc Mon Mar 7
03:26:43 2011
@@ -95,13 +95,7 @@
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, ¬_in_new_space);
- pop(kScratchRegister);
- } else {
- InNewSpace(object, scratch, not_equal, ¬_in_new_space);
- }
+ InNewSpace(object, scratch, not_equal, ¬_in_new_space);
Abort("new-space object passed to RecordWriteHelper");
bind(¬_in_new_space);
}
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev