Index: src/x64/lithium-x64.cc |
=================================================================== |
--- src/x64/lithium-x64.cc (revision 6451) |
+++ src/x64/lithium-x64.cc (working copy) |
@@ -1054,8 +1054,7 @@ |
LInstruction* LChunkBuilder::DoGlobalObject(HGlobalObject* instr) { |
- Abort("Unimplemented: %s", "DoGlobalObject"); |
- return NULL; |
+ return DefineAsRegister(new LGlobalObject); |
} |
@@ -1181,8 +1180,23 @@ |
LInstruction* LChunkBuilder::DoSub(HSub* instr) { |
- Abort("Unimplemented: %s", "DoSub"); |
- return NULL; |
+ if (instr->representation().IsInteger32()) { |
+ ASSERT(instr->left()->representation().IsInteger32()); |
+ ASSERT(instr->right()->representation().IsInteger32()); |
+ LOperand* left = UseRegisterAtStart(instr->LeastConstantOperand()); |
+ LOperand* right = UseOrConstantAtStart(instr->MostConstantOperand()); |
+ LSubI* sub = new LSubI(left, right); |
+ LInstruction* result = DefineSameAsFirst(sub); |
William Hesse
2011/01/25 11:12:20
Subtraction is not commutative. I don't think you
|
+ if (instr->CheckFlag(HValue::kCanOverflow)) { |
+ result = AssignEnvironment(result); |
+ } |
+ return result; |
+ } else if (instr->representation().IsDouble()) { |
+ return DoArithmeticD(Token::SUB, instr); |
+ } else { |
+ ASSERT(instr->representation().IsTagged()); |
+ return DoArithmeticT(Token::SUB, instr); |
+ } |
} |