Index: src/x64/lithium-x64.cc |
diff --git a/src/x64/lithium-x64.cc b/src/x64/lithium-x64.cc |
index bdda1fa12f1bce40b418c0229806570d4e030250..4535fc8ebb7596d786a9c426d0fb2def05cf1a35 100644 |
--- a/src/x64/lithium-x64.cc |
+++ b/src/x64/lithium-x64.cc |
@@ -1043,8 +1043,9 @@ LInstruction* LChunkBuilder::DoApplyArguments(HApplyArguments* instr) { |
LInstruction* LChunkBuilder::DoPushArgument(HPushArgument* instr) { |
- Abort("Unimplemented: %s", "DoPushArgument"); |
- return NULL; |
+ ++argument_count_; |
+ LOperand* argument = UseOrConstant(instr->argument()); |
+ return new LPushArgument(argument); |
} |
@@ -1097,8 +1098,10 @@ LInstruction* LChunkBuilder::DoCallKnownGlobal(HCallKnownGlobal* instr) { |
LInstruction* LChunkBuilder::DoCallNew(HCallNew* instr) { |
- Abort("Unimplemented: %s", "DoCallNew"); |
- return NULL; |
+ LOperand* constructor = UseFixed(instr->constructor(), rdi); |
+ argument_count_ -= instr->argument_count(); |
+ LCallNew* result = new LCallNew(constructor); |
+ return MarkAsCall(DefineFixed(result, rax), instr); |
} |
@@ -1394,8 +1397,8 @@ LInstruction* LChunkBuilder::DoChange(HChange* instr) { |
LInstruction* LChunkBuilder::DoCheckNonSmi(HCheckNonSmi* instr) { |
- Abort("Unimplemented: %s", "DoCheckNonSmi"); |
- return NULL; |
+ LOperand* value = UseRegisterAtStart(instr->value()); |
+ return AssignEnvironment(new LCheckSmi(value, zero)); |
} |
@@ -1412,8 +1415,8 @@ LInstruction* LChunkBuilder::DoCheckPrototypeMaps(HCheckPrototypeMaps* instr) { |
LInstruction* LChunkBuilder::DoCheckSmi(HCheckSmi* instr) { |
- Abort("Unimplemented: %s", "DoCheckSmi"); |
- return NULL; |
+ LOperand* value = UseRegisterAtStart(instr->value()); |
+ return AssignEnvironment(new LCheckSmi(value, not_zero)); |
} |
@@ -1424,8 +1427,9 @@ LInstruction* LChunkBuilder::DoCheckFunction(HCheckFunction* instr) { |
LInstruction* LChunkBuilder::DoCheckMap(HCheckMap* instr) { |
- Abort("Unimplemented: %s", "DoCheckMap"); |
- return NULL; |
+ LOperand* value = UseRegisterAtStart(instr->value()); |
+ LCheckMap* result = new LCheckMap(value); |
+ return AssignEnvironment(result); |
} |
@@ -1453,8 +1457,10 @@ LInstruction* LChunkBuilder::DoConstant(HConstant* instr) { |
LInstruction* LChunkBuilder::DoLoadGlobal(HLoadGlobal* instr) { |
- Abort("Unimplemented: %s", "DoLoadGlobal"); |
- return NULL; |
+ LLoadGlobal* result = new LLoadGlobal; |
+ return instr->check_hole_value() |
+ ? AssignEnvironment(DefineAsRegister(result)) |
+ : DefineAsRegister(result); |
} |