| 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 |