Reviewers: lrn,
Description:
Implement DoGlobalReceiver and DoCheckFunction lithium instructions on x64
Please review this at http://codereview.chromium.org/6277024/
SVN Base: http://v8.googlecode.com/svn/branches/bleeding_edge/
Affected files:
M src/x64/lithium-codegen-x64.cc
M src/x64/lithium-x64.cc
Index: src/x64/lithium-codegen-x64.cc
===================================================================
--- src/x64/lithium-codegen-x64.cc (revision 6512)
+++ src/x64/lithium-codegen-x64.cc (working copy)
@@ -1517,7 +1517,10 @@
void LCodeGen::DoGlobalReceiver(LGlobalReceiver* instr) {
- Abort("Unimplemented: %s", "DoGlobalReceiver");
+ Register result = ToRegister(instr->result());
+ __ movq(result, Operand(rsi,
Context::SlotOffset(Context::GLOBAL_INDEX)));
+ __ movq(result, FieldOperand(result,
GlobalObject::kGlobalReceiverOffset));
+
}
@@ -1820,7 +1823,10 @@
void LCodeGen::DoCheckFunction(LCheckFunction* instr) {
- Abort("Unimplemented: %s", "DoCheckFunction");
+ ASSERT(instr->InputAt(0)->IsRegister());
+ Register reg = ToRegister(instr->InputAt(0));
+ __ Cmp(reg, instr->hydrogen()->target());
+ DeoptimizeIf(not_equal, instr->environment());
}
Index: src/x64/lithium-x64.cc
===================================================================
--- src/x64/lithium-x64.cc (revision 6512)
+++ src/x64/lithium-x64.cc (working copy)
@@ -1055,8 +1055,7 @@
LInstruction* LChunkBuilder::DoGlobalReceiver(HGlobalReceiver* instr) {
- Abort("Unimplemented: %s", "DoGlobalReceiver");
- return NULL;
+ return DefineAsRegister(new LGlobalReceiver);
}
@@ -1422,8 +1421,8 @@
LInstruction* LChunkBuilder::DoCheckFunction(HCheckFunction* instr) {
- Abort("Unimplemented: %s", "DoCheckFunction");
- return NULL;
+ LOperand* value = UseRegisterAtStart(instr->value());
+ return AssignEnvironment(new LCheckFunction(value));
}
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev