Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(394)

Side by Side Diff: src/arm/assembler-arm.h

Issue 190793002: Introduce FrameAndConstantPoolScope and ConstantPoolUnavailableScope. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Sync Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | src/arm/assembler-arm.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 1440 matching lines...) Expand 10 before | Expand all | Expand 10 after
1451 static const int kMaxNumPending32RelocInfo = kMaxDistToIntPool/kInstrSize; 1451 static const int kMaxNumPending32RelocInfo = kMaxDistToIntPool/kInstrSize;
1452 static const int kMaxNumPending64RelocInfo = kMaxDistToFPPool/kInstrSize; 1452 static const int kMaxNumPending64RelocInfo = kMaxDistToFPPool/kInstrSize;
1453 1453
1454 // Postpone the generation of the constant pool for the specified number of 1454 // Postpone the generation of the constant pool for the specified number of
1455 // instructions. 1455 // instructions.
1456 void BlockConstPoolFor(int instructions); 1456 void BlockConstPoolFor(int instructions);
1457 1457
1458 // Check if is time to emit a constant pool. 1458 // Check if is time to emit a constant pool.
1459 void CheckConstPool(bool force_emit, bool require_jump); 1459 void CheckConstPool(bool force_emit, bool require_jump);
1460 1460
1461 bool can_use_constant_pool() const {
1462 return is_constant_pool_available() && !constant_pool_full_;
1463 }
1464
1465 void set_constant_pool_full() {
1466 constant_pool_full_ = true;
1467 }
1468
1461 protected: 1469 protected:
1462 // Relocation for a type-recording IC has the AST id added to it. This 1470 // Relocation for a type-recording IC has the AST id added to it. This
1463 // member variable is a way to pass the information from the call site to 1471 // member variable is a way to pass the information from the call site to
1464 // the relocation info. 1472 // the relocation info.
1465 TypeFeedbackId recorded_ast_id_; 1473 TypeFeedbackId recorded_ast_id_;
1466 1474
1467 int buffer_space() const { return reloc_info_writer.pos() - pc_; } 1475 int buffer_space() const { return reloc_info_writer.pos() - pc_; }
1468 1476
1469 // Decode branch instruction at pos and return branch target pos 1477 // Decode branch instruction at pos and return branch target pos
1470 int target_at(int pos); 1478 int target_at(int pos);
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
1504 // trigger a check. 1512 // trigger a check.
1505 next_buffer_check_ = no_const_pool_before_; 1513 next_buffer_check_ = no_const_pool_before_;
1506 } 1514 }
1507 } 1515 }
1508 1516
1509 bool is_const_pool_blocked() const { 1517 bool is_const_pool_blocked() const {
1510 return (const_pool_blocked_nesting_ > 0) || 1518 return (const_pool_blocked_nesting_ > 0) ||
1511 (pc_offset() < no_const_pool_before_); 1519 (pc_offset() < no_const_pool_before_);
1512 } 1520 }
1513 1521
1522 bool is_constant_pool_available() const {
1523 return constant_pool_available_;
1524 }
1525
1526 void set_constant_pool_available(bool available) {
1527 constant_pool_available_ = available;
1528 }
1529
1514 private: 1530 private:
1515 int next_buffer_check_; // pc offset of next buffer check 1531 int next_buffer_check_; // pc offset of next buffer check
1516 1532
1517 // Code generation 1533 // Code generation
1518 // The relocation writer's position is at least kGap bytes below the end of 1534 // The relocation writer's position is at least kGap bytes below the end of
1519 // the generated instructions. This is so that multi-instruction sequences do 1535 // the generated instructions. This is so that multi-instruction sequences do
1520 // not have to check for overflow. The same is true for writes of large 1536 // not have to check for overflow. The same is true for writes of large
1521 // relocation info entries. 1537 // relocation info entries.
1522 static const int kGap = 32; 1538 static const int kGap = 32;
1523 1539
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
1564 RelocInfo pending_32_bit_reloc_info_[kMaxNumPending32RelocInfo]; 1580 RelocInfo pending_32_bit_reloc_info_[kMaxNumPending32RelocInfo];
1565 RelocInfo pending_64_bit_reloc_info_[kMaxNumPending64RelocInfo]; 1581 RelocInfo pending_64_bit_reloc_info_[kMaxNumPending64RelocInfo];
1566 // Number of pending reloc info entries in the 32 bits buffer. 1582 // Number of pending reloc info entries in the 32 bits buffer.
1567 int num_pending_32_bit_reloc_info_; 1583 int num_pending_32_bit_reloc_info_;
1568 // Number of pending reloc info entries in the 64 bits buffer. 1584 // Number of pending reloc info entries in the 64 bits buffer.
1569 int num_pending_64_bit_reloc_info_; 1585 int num_pending_64_bit_reloc_info_;
1570 1586
1571 // The bound position, before this we cannot do instruction elimination. 1587 // The bound position, before this we cannot do instruction elimination.
1572 int last_bound_pos_; 1588 int last_bound_pos_;
1573 1589
1590 // Indicates whether the constant pool can be accessed, which is only possible
1591 // if the pp register points to the current code object's constant pool.
1592 bool constant_pool_available_;
1593 // Indicates whether the constant pool is too full to accept new entries due
1594 // to the ldr instruction's limitted immediate offset range.
1595 bool constant_pool_full_;
1596
1574 // Code emission 1597 // Code emission
1575 inline void CheckBuffer(); 1598 inline void CheckBuffer();
1576 void GrowBuffer(); 1599 void GrowBuffer();
1577 inline void emit(Instr x); 1600 inline void emit(Instr x);
1578 1601
1579 // 32-bit immediate values 1602 // 32-bit immediate values
1580 void move_32_bit_immediate(Register rd, 1603 void move_32_bit_immediate(Register rd,
1581 const Operand& x, 1604 const Operand& x,
1582 Condition cond = al); 1605 Condition cond = al);
1583 1606
(...skipping 16 matching lines...) Expand all
1600 1623
1601 // Record reloc info for current pc_ 1624 // Record reloc info for current pc_
1602 void RecordRelocInfo(RelocInfo::Mode rmode, intptr_t data = 0, 1625 void RecordRelocInfo(RelocInfo::Mode rmode, intptr_t data = 0,
1603 UseConstantPoolMode mode = USE_CONSTANT_POOL); 1626 UseConstantPoolMode mode = USE_CONSTANT_POOL);
1604 void RecordRelocInfo(double data); 1627 void RecordRelocInfo(double data);
1605 void RecordRelocInfoConstantPoolEntryHelper(const RelocInfo& rinfo); 1628 void RecordRelocInfoConstantPoolEntryHelper(const RelocInfo& rinfo);
1606 1629
1607 friend class RelocInfo; 1630 friend class RelocInfo;
1608 friend class CodePatcher; 1631 friend class CodePatcher;
1609 friend class BlockConstPoolScope; 1632 friend class BlockConstPoolScope;
1633 friend class FrameAndConstantPoolScope;
1634 friend class ConstantPoolUnavailableScope;
1610 1635
1611 PositionsRecorder positions_recorder_; 1636 PositionsRecorder positions_recorder_;
1612 friend class PositionsRecorder; 1637 friend class PositionsRecorder;
1613 friend class EnsureSpace; 1638 friend class EnsureSpace;
1614 }; 1639 };
1615 1640
1616 1641
1617 class EnsureSpace BASE_EMBEDDED { 1642 class EnsureSpace BASE_EMBEDDED {
1618 public: 1643 public:
1619 explicit EnsureSpace(Assembler* assembler) { 1644 explicit EnsureSpace(Assembler* assembler) {
1620 assembler->CheckBuffer(); 1645 assembler->CheckBuffer();
1621 } 1646 }
1622 }; 1647 };
1623 1648
1624 1649
1625 } } // namespace v8::internal 1650 } } // namespace v8::internal
1626 1651
1627 #endif // V8_ARM_ASSEMBLER_ARM_H_ 1652 #endif // V8_ARM_ASSEMBLER_ARM_H_
OLDNEW
« no previous file with comments | « no previous file | src/arm/assembler-arm.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698