OLD | NEW |
1 // Copyright (c) 1994-2006 Sun Microsystems Inc. | 1 // Copyright (c) 1994-2006 Sun Microsystems Inc. |
2 // All Rights Reserved. | 2 // All Rights Reserved. |
3 // | 3 // |
4 // Redistribution and use in source and binary forms, with or without | 4 // Redistribution and use in source and binary forms, with or without |
5 // modification, are permitted provided that the following conditions | 5 // modification, are permitted provided that the following conditions |
6 // are met: | 6 // are met: |
7 // | 7 // |
8 // - Redistributions of source code must retain the above copyright notice, | 8 // - Redistributions of source code must retain the above copyright notice, |
9 // this list of conditions and the following disclaimer. | 9 // this list of conditions and the following disclaimer. |
10 // | 10 // |
(...skipping 1470 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1481 | 1481 |
1482 // Check if is time to emit a constant pool. | 1482 // Check if is time to emit a constant pool. |
1483 void CheckConstPool(bool force_emit, bool require_jump); | 1483 void CheckConstPool(bool force_emit, bool require_jump); |
1484 | 1484 |
1485 // Allocate a constant pool of the correct size for the generated code. | 1485 // Allocate a constant pool of the correct size for the generated code. |
1486 Handle<ConstantPoolArray> NewConstantPool(Isolate* isolate); | 1486 Handle<ConstantPoolArray> NewConstantPool(Isolate* isolate); |
1487 | 1487 |
1488 // Generate the constant pool for the generated code. | 1488 // Generate the constant pool for the generated code. |
1489 void PopulateConstantPool(ConstantPoolArray* constant_pool); | 1489 void PopulateConstantPool(ConstantPoolArray* constant_pool); |
1490 | 1490 |
1491 bool is_constant_pool_available() const { return constant_pool_available_; } | |
1492 | |
1493 bool use_extended_constant_pool() const { | 1491 bool use_extended_constant_pool() const { |
1494 return constant_pool_builder_.current_section() == | 1492 return constant_pool_builder_.current_section() == |
1495 ConstantPoolArray::EXTENDED_SECTION; | 1493 ConstantPoolArray::EXTENDED_SECTION; |
1496 } | 1494 } |
1497 | 1495 |
1498 | 1496 |
1499 protected: | 1497 protected: |
1500 // Relocation for a type-recording IC has the AST id added to it. This | 1498 // Relocation for a type-recording IC has the AST id added to it. This |
1501 // member variable is a way to pass the information from the call site to | 1499 // member variable is a way to pass the information from the call site to |
1502 // the relocation info. | 1500 // the relocation info. |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1542 // trigger a check. | 1540 // trigger a check. |
1543 next_buffer_check_ = no_const_pool_before_; | 1541 next_buffer_check_ = no_const_pool_before_; |
1544 } | 1542 } |
1545 } | 1543 } |
1546 | 1544 |
1547 bool is_const_pool_blocked() const { | 1545 bool is_const_pool_blocked() const { |
1548 return (const_pool_blocked_nesting_ > 0) || | 1546 return (const_pool_blocked_nesting_ > 0) || |
1549 (pc_offset() < no_const_pool_before_); | 1547 (pc_offset() < no_const_pool_before_); |
1550 } | 1548 } |
1551 | 1549 |
1552 void set_constant_pool_available(bool available) { | |
1553 constant_pool_available_ = available; | |
1554 } | |
1555 | |
1556 private: | 1550 private: |
1557 int next_buffer_check_; // pc offset of next buffer check | 1551 int next_buffer_check_; // pc offset of next buffer check |
1558 | 1552 |
1559 // Code generation | 1553 // Code generation |
1560 // The relocation writer's position is at least kGap bytes below the end of | 1554 // The relocation writer's position is at least kGap bytes below the end of |
1561 // the generated instructions. This is so that multi-instruction sequences do | 1555 // the generated instructions. This is so that multi-instruction sequences do |
1562 // not have to check for overflow. The same is true for writes of large | 1556 // not have to check for overflow. The same is true for writes of large |
1563 // relocation info entries. | 1557 // relocation info entries. |
1564 static const int kGap = 32; | 1558 static const int kGap = 32; |
1565 | 1559 |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1608 // Number of pending reloc info entries in the 32 bits buffer. | 1602 // Number of pending reloc info entries in the 32 bits buffer. |
1609 int num_pending_32_bit_reloc_info_; | 1603 int num_pending_32_bit_reloc_info_; |
1610 // Number of pending reloc info entries in the 64 bits buffer. | 1604 // Number of pending reloc info entries in the 64 bits buffer. |
1611 int num_pending_64_bit_reloc_info_; | 1605 int num_pending_64_bit_reloc_info_; |
1612 | 1606 |
1613 ConstantPoolBuilder constant_pool_builder_; | 1607 ConstantPoolBuilder constant_pool_builder_; |
1614 | 1608 |
1615 // The bound position, before this we cannot do instruction elimination. | 1609 // The bound position, before this we cannot do instruction elimination. |
1616 int last_bound_pos_; | 1610 int last_bound_pos_; |
1617 | 1611 |
1618 // Indicates whether the constant pool can be accessed, which is only possible | |
1619 // if the pp register points to the current code object's constant pool. | |
1620 bool constant_pool_available_; | |
1621 | |
1622 // Code emission | 1612 // Code emission |
1623 inline void CheckBuffer(); | 1613 inline void CheckBuffer(); |
1624 void GrowBuffer(); | 1614 void GrowBuffer(); |
1625 inline void emit(Instr x); | 1615 inline void emit(Instr x); |
1626 | 1616 |
1627 // 32-bit immediate values | 1617 // 32-bit immediate values |
1628 void move_32_bit_immediate(Register rd, | 1618 void move_32_bit_immediate(Register rd, |
1629 const Operand& x, | 1619 const Operand& x, |
1630 Condition cond = al); | 1620 Condition cond = al); |
1631 | 1621 |
(...skipping 15 matching lines...) Expand all Loading... |
1647 }; | 1637 }; |
1648 | 1638 |
1649 // Record reloc info for current pc_ | 1639 // Record reloc info for current pc_ |
1650 void RecordRelocInfo(RelocInfo::Mode rmode, intptr_t data = 0); | 1640 void RecordRelocInfo(RelocInfo::Mode rmode, intptr_t data = 0); |
1651 void RecordRelocInfo(const RelocInfo& rinfo); | 1641 void RecordRelocInfo(const RelocInfo& rinfo); |
1652 ConstantPoolArray::LayoutSection ConstantPoolAddEntry(const RelocInfo& rinfo); | 1642 ConstantPoolArray::LayoutSection ConstantPoolAddEntry(const RelocInfo& rinfo); |
1653 | 1643 |
1654 friend class RelocInfo; | 1644 friend class RelocInfo; |
1655 friend class CodePatcher; | 1645 friend class CodePatcher; |
1656 friend class BlockConstPoolScope; | 1646 friend class BlockConstPoolScope; |
1657 friend class FrameAndConstantPoolScope; | |
1658 friend class ConstantPoolUnavailableScope; | |
1659 | |
1660 PositionsRecorder positions_recorder_; | 1647 PositionsRecorder positions_recorder_; |
1661 friend class PositionsRecorder; | 1648 friend class PositionsRecorder; |
1662 friend class EnsureSpace; | 1649 friend class EnsureSpace; |
1663 }; | 1650 }; |
1664 | 1651 |
1665 | 1652 |
1666 class EnsureSpace BASE_EMBEDDED { | 1653 class EnsureSpace BASE_EMBEDDED { |
1667 public: | 1654 public: |
1668 explicit EnsureSpace(Assembler* assembler) { | 1655 explicit EnsureSpace(Assembler* assembler) { |
1669 assembler->CheckBuffer(); | 1656 assembler->CheckBuffer(); |
1670 } | 1657 } |
1671 }; | 1658 }; |
1672 | 1659 |
1673 | 1660 |
1674 } } // namespace v8::internal | 1661 } } // namespace v8::internal |
1675 | 1662 |
1676 #endif // V8_ARM_ASSEMBLER_ARM_H_ | 1663 #endif // V8_ARM_ASSEMBLER_ARM_H_ |
OLD | NEW |