Reviewers: Lasse Reichstein, Description: X64 Crankshaft: Add DoOuterContext to x64 lithium.
Please review this at http://codereview.chromium.org/6570008/ SVN Base: http://v8.googlecode.com/svn/branches/bleeding_edge/ Affected files: M src/x64/lithium-codegen-x64.cc M src/x64/lithium-x64.h M src/x64/lithium-x64.cc Index: src/x64/lithium-codegen-x64.cc =================================================================== --- src/x64/lithium-codegen-x64.cc (revision 6912) +++ src/x64/lithium-codegen-x64.cc (working copy) @@ -2205,6 +2205,15 @@ } +void LCodeGen::DoOuterContext(LOuterContext* instr) { + Register context = ToRegister(instr->context()); + Register result = ToRegister(instr->result()); + __ movq(result, + Operand(context, Context::SlotOffset(Context::CLOSURE_INDEX))); + __ movq(result, FieldOperand(result, JSFunction::kContextOffset)); +} + + void LCodeGen::DoGlobalObject(LGlobalObject* instr) { Register result = ToRegister(instr->result()); __ movq(result, GlobalObjectOperand()); Index: src/x64/lithium-x64.cc =================================================================== --- src/x64/lithium-x64.cc (revision 6912) +++ src/x64/lithium-x64.cc (working copy) @@ -1190,8 +1190,8 @@ LInstruction* LChunkBuilder::DoOuterContext(HOuterContext* instr) { - Abort("Unimplemented: DoOuterContext"); - return NULL; + LOperand* context = UseRegisterAtStart(instr->value()); + return DefineAsRegister(new LOuterContext(context)); } Index: src/x64/lithium-x64.h =================================================================== --- src/x64/lithium-x64.h (revision 6911) +++ src/x64/lithium-x64.h (working copy) @@ -129,6 +129,7 @@ V(NumberUntagD) \ V(ObjectLiteral) \ V(OsrEntry) \ + V(OuterContext) \ V(Parameter) \ V(PixelArrayLength) \ V(Power) \ @@ -1280,6 +1281,18 @@ }; +class LOuterContext: public LTemplateInstruction<1, 1, 0> { + public: + explicit LOuterContext(LOperand* context) { + inputs_[0] = context; + } + + DECLARE_CONCRETE_INSTRUCTION(OuterContext, "outer-context") + + LOperand* context() { return InputAt(0); } +}; + + class LGlobalObject: public LTemplateInstruction<1, 0, 0> { public: DECLARE_CONCRETE_INSTRUCTION(GlobalObject, "global-object") -- v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev
