OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 1074 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1085 } | 1085 } |
1086 | 1086 |
1087 | 1087 |
1088 LInstruction* LChunkBuilder::DoCallKeyed(HCallKeyed* instr) { | 1088 LInstruction* LChunkBuilder::DoCallKeyed(HCallKeyed* instr) { |
1089 Abort("Unimplemented: %s", "DoCallKeyed"); | 1089 Abort("Unimplemented: %s", "DoCallKeyed"); |
1090 return NULL; | 1090 return NULL; |
1091 } | 1091 } |
1092 | 1092 |
1093 | 1093 |
1094 LInstruction* LChunkBuilder::DoCallNamed(HCallNamed* instr) { | 1094 LInstruction* LChunkBuilder::DoCallNamed(HCallNamed* instr) { |
1095 Abort("Unimplemented: %s", "DoCallNamed"); | 1095 argument_count_ -= instr->argument_count(); |
1096 return NULL; | 1096 return MarkAsCall(DefineFixed(new LCallNamed, rax), instr); |
1097 } | 1097 } |
1098 | 1098 |
1099 | 1099 |
1100 LInstruction* LChunkBuilder::DoCallGlobal(HCallGlobal* instr) { | 1100 LInstruction* LChunkBuilder::DoCallGlobal(HCallGlobal* instr) { |
1101 Abort("Unimplemented: %s", "DoCallGlobal"); | 1101 Abort("Unimplemented: %s", "DoCallGlobal"); |
1102 return NULL; | 1102 return NULL; |
1103 } | 1103 } |
1104 | 1104 |
1105 | 1105 |
1106 LInstruction* LChunkBuilder::DoCallKnownGlobal(HCallKnownGlobal* instr) { | 1106 LInstruction* LChunkBuilder::DoCallKnownGlobal(HCallKnownGlobal* instr) { |
1107 Abort("Unimplemented: %s", "DoCallKnownGlobal"); | 1107 argument_count_ -= instr->argument_count(); |
1108 return NULL; | 1108 return MarkAsCall(DefineFixed(new LCallKnownGlobal, rax), instr); |
1109 } | 1109 } |
1110 | 1110 |
1111 | 1111 |
1112 LInstruction* LChunkBuilder::DoCallNew(HCallNew* instr) { | 1112 LInstruction* LChunkBuilder::DoCallNew(HCallNew* instr) { |
1113 LOperand* constructor = UseFixed(instr->constructor(), rdi); | 1113 LOperand* constructor = UseFixed(instr->constructor(), rdi); |
1114 argument_count_ -= instr->argument_count(); | 1114 argument_count_ -= instr->argument_count(); |
1115 LCallNew* result = new LCallNew(constructor); | 1115 LCallNew* result = new LCallNew(constructor); |
1116 return MarkAsCall(DefineFixed(result, rax), instr); | 1116 return MarkAsCall(DefineFixed(result, rax), instr); |
1117 } | 1117 } |
1118 | 1118 |
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1311 } | 1311 } |
1312 | 1312 |
1313 | 1313 |
1314 LInstruction* LChunkBuilder::DoClassOfTest(HClassOfTest* instr) { | 1314 LInstruction* LChunkBuilder::DoClassOfTest(HClassOfTest* instr) { |
1315 Abort("Unimplemented: %s", "DoClassOfTest"); | 1315 Abort("Unimplemented: %s", "DoClassOfTest"); |
1316 return NULL; | 1316 return NULL; |
1317 } | 1317 } |
1318 | 1318 |
1319 | 1319 |
1320 LInstruction* LChunkBuilder::DoJSArrayLength(HJSArrayLength* instr) { | 1320 LInstruction* LChunkBuilder::DoJSArrayLength(HJSArrayLength* instr) { |
1321 Abort("Unimplemented: %s", "DoJSArrayLength"); | 1321 LOperand* array = UseRegisterAtStart(instr->value()); |
1322 return NULL; | 1322 return DefineAsRegister(new LJSArrayLength(array)); |
1323 } | 1323 } |
1324 | 1324 |
1325 | 1325 |
1326 LInstruction* LChunkBuilder::DoFixedArrayLength(HFixedArrayLength* instr) { | 1326 LInstruction* LChunkBuilder::DoFixedArrayLength(HFixedArrayLength* instr) { |
1327 Abort("Unimplemented: %s", "DoFixedArrayLength"); | 1327 Abort("Unimplemented: %s", "DoFixedArrayLength"); |
1328 return NULL; | 1328 return NULL; |
1329 } | 1329 } |
1330 | 1330 |
1331 | 1331 |
1332 LInstruction* LChunkBuilder::DoValueOf(HValueOf* instr) { | 1332 LInstruction* LChunkBuilder::DoValueOf(HValueOf* instr) { |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1415 } | 1415 } |
1416 | 1416 |
1417 | 1417 |
1418 LInstruction* LChunkBuilder::DoCheckNonSmi(HCheckNonSmi* instr) { | 1418 LInstruction* LChunkBuilder::DoCheckNonSmi(HCheckNonSmi* instr) { |
1419 LOperand* value = UseRegisterAtStart(instr->value()); | 1419 LOperand* value = UseRegisterAtStart(instr->value()); |
1420 return AssignEnvironment(new LCheckSmi(value, zero)); | 1420 return AssignEnvironment(new LCheckSmi(value, zero)); |
1421 } | 1421 } |
1422 | 1422 |
1423 | 1423 |
1424 LInstruction* LChunkBuilder::DoCheckInstanceType(HCheckInstanceType* instr) { | 1424 LInstruction* LChunkBuilder::DoCheckInstanceType(HCheckInstanceType* instr) { |
1425 Abort("Unimplemented: %s", "DoCheckInstanceType"); | 1425 LOperand* value = UseRegisterAtStart(instr->value()); |
1426 return NULL; | 1426 LCheckInstanceType* result = new LCheckInstanceType(value); |
| 1427 return AssignEnvironment(result); |
1427 } | 1428 } |
1428 | 1429 |
1429 | 1430 |
1430 LInstruction* LChunkBuilder::DoCheckPrototypeMaps(HCheckPrototypeMaps* instr) { | 1431 LInstruction* LChunkBuilder::DoCheckPrototypeMaps(HCheckPrototypeMaps* instr) { |
1431 LOperand* temp = TempRegister(); | 1432 LOperand* temp = TempRegister(); |
1432 LCheckPrototypeMaps* result = new LCheckPrototypeMaps(temp); | 1433 LCheckPrototypeMaps* result = new LCheckPrototypeMaps(temp); |
1433 return AssignEnvironment(result); | 1434 return AssignEnvironment(result); |
1434 } | 1435 } |
1435 | 1436 |
1436 | 1437 |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1478 | 1479 |
1479 LInstruction* LChunkBuilder::DoLoadGlobal(HLoadGlobal* instr) { | 1480 LInstruction* LChunkBuilder::DoLoadGlobal(HLoadGlobal* instr) { |
1480 LLoadGlobal* result = new LLoadGlobal; | 1481 LLoadGlobal* result = new LLoadGlobal; |
1481 return instr->check_hole_value() | 1482 return instr->check_hole_value() |
1482 ? AssignEnvironment(DefineAsRegister(result)) | 1483 ? AssignEnvironment(DefineAsRegister(result)) |
1483 : DefineAsRegister(result); | 1484 : DefineAsRegister(result); |
1484 } | 1485 } |
1485 | 1486 |
1486 | 1487 |
1487 LInstruction* LChunkBuilder::DoStoreGlobal(HStoreGlobal* instr) { | 1488 LInstruction* LChunkBuilder::DoStoreGlobal(HStoreGlobal* instr) { |
1488 return new LStoreGlobal(UseRegisterAtStart(instr->value())); | 1489 LStoreGlobal* result = new LStoreGlobal(UseRegister(instr->value()), |
| 1490 TempRegister()); |
| 1491 return instr->check_hole_value() ? AssignEnvironment(result) : result; |
1489 } | 1492 } |
1490 | 1493 |
1491 | 1494 |
1492 LInstruction* LChunkBuilder::DoLoadContextSlot(HLoadContextSlot* instr) { | 1495 LInstruction* LChunkBuilder::DoLoadContextSlot(HLoadContextSlot* instr) { |
1493 Abort("Unimplemented: %s", "DoLoadContextSlot"); | 1496 Abort("Unimplemented: %s", "DoLoadContextSlot"); |
1494 return NULL; | 1497 return NULL; |
1495 } | 1498 } |
1496 | 1499 |
1497 | 1500 |
1498 LInstruction* LChunkBuilder::DoStoreContextSlot(HStoreContextSlot* instr) { | 1501 LInstruction* LChunkBuilder::DoStoreContextSlot(HStoreContextSlot* instr) { |
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1719 | 1722 |
1720 | 1723 |
1721 LInstruction* LChunkBuilder::DoLeaveInlined(HLeaveInlined* instr) { | 1724 LInstruction* LChunkBuilder::DoLeaveInlined(HLeaveInlined* instr) { |
1722 Abort("Unimplemented: %s", "DoLeaveInlined"); | 1725 Abort("Unimplemented: %s", "DoLeaveInlined"); |
1723 return NULL; | 1726 return NULL; |
1724 } | 1727 } |
1725 | 1728 |
1726 } } // namespace v8::internal | 1729 } } // namespace v8::internal |
1727 | 1730 |
1728 #endif // V8_TARGET_ARCH_X64 | 1731 #endif // V8_TARGET_ARCH_X64 |
OLD | NEW |