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 736 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
747 void bind(Label* L); // binds an unbound label L to the current code position | 747 void bind(Label* L); // binds an unbound label L to the current code position |
748 | 748 |
749 // Returns the branch offset to the given label from the current code position | 749 // Returns the branch offset to the given label from the current code position |
750 // Links the label to the current position if it is still unbound | 750 // Links the label to the current position if it is still unbound |
751 // Manages the jump elimination optimization if the second parameter is true. | 751 // Manages the jump elimination optimization if the second parameter is true. |
752 int branch_offset(Label* L, bool jump_elimination_allowed); | 752 int branch_offset(Label* L, bool jump_elimination_allowed); |
753 | 753 |
754 // Return the address in the constant pool of the code target address used by | 754 // Return the address in the constant pool of the code target address used by |
755 // the branch/call instruction at pc, or the object in a mov. | 755 // the branch/call instruction at pc, or the object in a mov. |
756 INLINE(static Address target_pointer_address_at(Address pc)); | 756 INLINE(static Address target_pointer_address_at(Address pc)); |
| 757 INLINE(static Address thumb_target_pointer_address_at(Address pc)); |
757 | 758 |
758 // Read/Modify the pointer in the branch/call/move instruction at pc. | 759 // Read/Modify the pointer in the branch/call/move instruction at pc. |
759 INLINE(static Address target_pointer_at(Address pc)); | 760 INLINE(static Address target_pointer_at(Address pc)); |
760 INLINE(static void set_target_pointer_at(Address pc, Address target)); | 761 INLINE(static void set_target_pointer_at(Address pc, Address target)); |
| 762 INLINE(static Address thumb_target_pointer_at(Address pc)); |
| 763 INLINE(static void thumb_set_target_pointer_at(Address pc, |
| 764 Address target, |
| 765 Code* host = NULL)); |
761 | 766 |
762 // Read/Modify the code target address in the branch/call instruction at pc. | 767 // Read/Modify the code target address in the branch/call instruction at pc. |
763 INLINE(static Address target_address_at(Address pc)); | 768 INLINE(static Address target_address_at(Address pc)); |
764 INLINE(static void set_target_address_at(Address pc, Address target)); | 769 INLINE(static void set_target_address_at(Address pc, Address target)); |
765 | 770 |
766 // Return the code target address at a call site from the return address | 771 // Return the code target address at a call site from the return address |
767 // of that call in the instruction stream. | 772 // of that call in the instruction stream. |
768 INLINE(static Address target_address_from_return_address(Address pc)); | 773 INLINE(static Address target_address_from_return_address(Address pc)); |
769 | 774 |
770 // Given the address of the beginning of a call, return the address | 775 // Given the address of the beginning of a call, return the address |
(...skipping 806 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1577 static bool IsTstImmediate(Instr instr); | 1582 static bool IsTstImmediate(Instr instr); |
1578 static bool IsCmpRegister(Instr instr); | 1583 static bool IsCmpRegister(Instr instr); |
1579 static bool IsCmpImmediate(Instr instr); | 1584 static bool IsCmpImmediate(Instr instr); |
1580 static Register GetCmpImmediateRegister(Instr instr); | 1585 static Register GetCmpImmediateRegister(Instr instr); |
1581 static int GetCmpImmediateRawImmediate(Instr instr); | 1586 static int GetCmpImmediateRawImmediate(Instr instr); |
1582 static bool IsNop(Instr instr, int type = NON_MARKING_NOP); | 1587 static bool IsNop(Instr instr, int type = NON_MARKING_NOP); |
1583 static bool IsMovT(Instr instr); | 1588 static bool IsMovT(Instr instr); |
1584 static bool IsMovW(Instr instr); | 1589 static bool IsMovW(Instr instr); |
1585 static bool IsMovTThumb(Instr instr); | 1590 static bool IsMovTThumb(Instr instr); |
1586 static bool IsMovWThumb(Instr instr); | 1591 static bool IsMovWThumb(Instr instr); |
| 1592 static bool IsThumbLdrPcImmediateOffset(Instr instr); |
| 1593 static inline Address UntagAddress(Address addr); |
| 1594 static inline bool IsThumbAddress(Address addr); |
| 1595 static inline Address AlignAddress(Address addr); |
1587 | 1596 |
1588 // Constants in pools are accessed via pc relative addressing, which can | 1597 // Constants in pools are accessed via pc relative addressing, which can |
1589 // reach +/-4KB for integer PC-relative loads and +/-1KB for floating-point | 1598 // reach +/-4KB for integer PC-relative loads and +/-1KB for floating-point |
1590 // PC-relative loads, thereby defining a maximum distance between the | 1599 // PC-relative loads, thereby defining a maximum distance between the |
1591 // instruction and the accessed constant. | 1600 // instruction and the accessed constant. |
1592 static const int kMaxDistToIntPool = 4*KB; | 1601 static const int kMaxDistToIntPool = 4*KB; |
1593 static const int kMaxDistToFPPool = 1*KB; | 1602 static const int kMaxDistToFPPool = 1*KB; |
1594 // All relocations could be integer, it therefore acts as the limit. | 1603 // All relocations could be integer, it therefore acts as the limit. |
1595 static const int kMaxNumPendingRelocInfo = kMaxDistToIntPool/kInstrSize; | 1604 static const int kMaxNumPendingRelocInfo = kMaxDistToIntPool/kInstrSize; |
1596 | 1605 |
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1873 public: | 1882 public: |
1874 explicit EnsureSpace(Assembler* assembler) { | 1883 explicit EnsureSpace(Assembler* assembler) { |
1875 assembler->CheckBuffer(); | 1884 assembler->CheckBuffer(); |
1876 } | 1885 } |
1877 }; | 1886 }; |
1878 | 1887 |
1879 | 1888 |
1880 } } // namespace v8::internal | 1889 } } // namespace v8::internal |
1881 | 1890 |
1882 #endif // V8_ARM_ASSEMBLER_ARM_H_ | 1891 #endif // V8_ARM_ASSEMBLER_ARM_H_ |
OLD | NEW |