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 477 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
488 for (int i = 0, length = inlined_closures->length(); | 488 for (int i = 0, length = inlined_closures->length(); |
489 i < length; | 489 i < length; |
490 i++) { | 490 i++) { |
491 DefineDeoptimizationLiteral(inlined_closures->at(i)); | 491 DefineDeoptimizationLiteral(inlined_closures->at(i)); |
492 } | 492 } |
493 | 493 |
494 inlined_function_count_ = deoptimization_literals_.length(); | 494 inlined_function_count_ = deoptimization_literals_.length(); |
495 } | 495 } |
496 | 496 |
497 | 497 |
| 498 void LCodeGen::RecordSafepoint( |
| 499 LPointerMap* pointers, |
| 500 Safepoint::Kind kind, |
| 501 int arguments, |
| 502 int deoptimization_index) { |
| 503 const ZoneList<LOperand*>* operands = pointers->operands(); |
| 504 Safepoint safepoint = safepoints_.DefineSafepoint(masm(), |
| 505 kind, arguments, deoptimization_index); |
| 506 for (int i = 0; i < operands->length(); i++) { |
| 507 LOperand* pointer = operands->at(i); |
| 508 if (pointer->IsStackSlot()) { |
| 509 safepoint.DefinePointerSlot(pointer->index()); |
| 510 } else if (pointer->IsRegister() && (kind & Safepoint::kWithRegisters)) { |
| 511 safepoint.DefinePointerRegister(ToRegister(pointer)); |
| 512 } |
| 513 } |
| 514 if (kind & Safepoint::kWithRegisters) { |
| 515 // Register rsi always contains a pointer to the context. |
| 516 safepoint.DefinePointerRegister(rsi); |
| 517 } |
| 518 } |
| 519 |
| 520 |
498 void LCodeGen::RecordSafepoint(LPointerMap* pointers, | 521 void LCodeGen::RecordSafepoint(LPointerMap* pointers, |
499 int deoptimization_index) { | 522 int deoptimization_index) { |
500 const ZoneList<LOperand*>* operands = pointers->operands(); | 523 RecordSafepoint(pointers, Safepoint::kSimple, 0, deoptimization_index); |
501 Safepoint safepoint = safepoints_.DefineSafepoint(masm(), | |
502 deoptimization_index); | |
503 for (int i = 0; i < operands->length(); i++) { | |
504 LOperand* pointer = operands->at(i); | |
505 if (pointer->IsStackSlot()) { | |
506 safepoint.DefinePointerSlot(pointer->index()); | |
507 } | |
508 } | |
509 } | 524 } |
510 | 525 |
511 | 526 |
512 void LCodeGen::RecordSafepointWithRegisters(LPointerMap* pointers, | 527 void LCodeGen::RecordSafepointWithRegisters(LPointerMap* pointers, |
513 int arguments, | 528 int arguments, |
514 int deoptimization_index) { | 529 int deoptimization_index) { |
515 const ZoneList<LOperand*>* operands = pointers->operands(); | 530 RecordSafepoint(pointers, Safepoint::kWithRegisters, arguments, |
516 Safepoint safepoint = | 531 deoptimization_index); |
517 safepoints_.DefineSafepointWithRegisters( | |
518 masm(), arguments, deoptimization_index); | |
519 for (int i = 0; i < operands->length(); i++) { | |
520 LOperand* pointer = operands->at(i); | |
521 if (pointer->IsStackSlot()) { | |
522 safepoint.DefinePointerSlot(pointer->index()); | |
523 } else if (pointer->IsRegister()) { | |
524 safepoint.DefinePointerRegister(ToRegister(pointer)); | |
525 } | |
526 } | |
527 // Register rsi always contains a pointer to the context. | |
528 safepoint.DefinePointerRegister(rsi); | |
529 } | 532 } |
530 | 533 |
531 | 534 |
532 void LCodeGen::RecordPosition(int position) { | 535 void LCodeGen::RecordPosition(int position) { |
533 if (!FLAG_debug_info || position == RelocInfo::kNoPosition) return; | 536 if (!FLAG_debug_info || position == RelocInfo::kNoPosition) return; |
534 masm()->positions_recorder()->RecordPosition(position); | 537 masm()->positions_recorder()->RecordPosition(position); |
535 } | 538 } |
536 | 539 |
537 | 540 |
538 void LCodeGen::DoLabel(LLabel* label) { | 541 void LCodeGen::DoLabel(LLabel* label) { |
(...skipping 1352 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1891 | 1894 |
1892 void LCodeGen::DoOsrEntry(LOsrEntry* instr) { | 1895 void LCodeGen::DoOsrEntry(LOsrEntry* instr) { |
1893 Abort("Unimplemented: %s", "DoOsrEntry"); | 1896 Abort("Unimplemented: %s", "DoOsrEntry"); |
1894 } | 1897 } |
1895 | 1898 |
1896 #undef __ | 1899 #undef __ |
1897 | 1900 |
1898 } } // namespace v8::internal | 1901 } } // namespace v8::internal |
1899 | 1902 |
1900 #endif // V8_TARGET_ARCH_X64 | 1903 #endif // V8_TARGET_ARCH_X64 |
OLD | NEW |