Index: src/x64/lithium-x64.cc |
diff --git a/src/x64/lithium-x64.cc b/src/x64/lithium-x64.cc |
index 5b7169b7e9db08b39178c3fac7c10a27698ef419..f0610d4b443e8e25916d40f7f8e5e1bf8a4bc453 100644 |
--- a/src/x64/lithium-x64.cc |
+++ b/src/x64/lithium-x64.cc |
@@ -1027,8 +1027,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); |
} |
@@ -1081,8 +1082,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); |
} |
@@ -1378,8 +1381,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)); |
} |
@@ -1396,8 +1399,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)); |
} |
@@ -1408,8 +1411,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); |
} |
@@ -1437,8 +1441,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); |
} |