OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef V8_ARM64_ASSEMBLER_ARM64_H_ | 5 #ifndef V8_ARM64_ASSEMBLER_ARM64_H_ |
6 #define V8_ARM64_ASSEMBLER_ARM64_H_ | 6 #define V8_ARM64_ASSEMBLER_ARM64_H_ |
7 | 7 |
| 8 #include <deque> |
8 #include <list> | 9 #include <list> |
9 #include <map> | 10 #include <map> |
10 #include <vector> | 11 #include <vector> |
11 | 12 |
12 #include "src/arm64/instructions-arm64.h" | 13 #include "src/arm64/instructions-arm64.h" |
13 #include "src/assembler.h" | 14 #include "src/assembler.h" |
14 #include "src/compiler.h" | 15 #include "src/compiler.h" |
15 #include "src/globals.h" | 16 #include "src/globals.h" |
16 #include "src/serialize.h" | 17 #include "src/serialize.h" |
17 #include "src/utils.h" | 18 #include "src/utils.h" |
(...skipping 1725 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1743 | 1744 |
1744 // Emit 8 bits of data in the instruction stream. | 1745 // Emit 8 bits of data in the instruction stream. |
1745 void dc8(uint8_t data) { EmitData(&data, sizeof(data)); } | 1746 void dc8(uint8_t data) { EmitData(&data, sizeof(data)); } |
1746 | 1747 |
1747 // Emit 32 bits of data in the instruction stream. | 1748 // Emit 32 bits of data in the instruction stream. |
1748 void dc32(uint32_t data) { EmitData(&data, sizeof(data)); } | 1749 void dc32(uint32_t data) { EmitData(&data, sizeof(data)); } |
1749 | 1750 |
1750 // Emit 64 bits of data in the instruction stream. | 1751 // Emit 64 bits of data in the instruction stream. |
1751 void dc64(uint64_t data) { EmitData(&data, sizeof(data)); } | 1752 void dc64(uint64_t data) { EmitData(&data, sizeof(data)); } |
1752 | 1753 |
| 1754 // Emit an address in the instruction stream. |
| 1755 void dcptr(Label* label); |
| 1756 |
1753 // Copy a string into the instruction stream, including the terminating NULL | 1757 // Copy a string into the instruction stream, including the terminating NULL |
1754 // character. The instruction pointer (pc_) is then aligned correctly for | 1758 // character. The instruction pointer (pc_) is then aligned correctly for |
1755 // subsequent instructions. | 1759 // subsequent instructions. |
1756 void EmitStringData(const char* string); | 1760 void EmitStringData(const char* string); |
1757 | 1761 |
1758 // Pseudo-instructions ------------------------------------------------------ | 1762 // Pseudo-instructions ------------------------------------------------------ |
1759 | 1763 |
1760 // Parameters are described in arm64/instructions-arm64.h. | 1764 // Parameters are described in arm64/instructions-arm64.h. |
1761 void debug(const char* message, uint32_t code, Instr params = BREAK); | 1765 void debug(const char* message, uint32_t code, Instr params = BREAK); |
1762 | 1766 |
(...skipping 396 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2159 int const_pool_blocked_nesting_; // Block emission if this is not zero. | 2163 int const_pool_blocked_nesting_; // Block emission if this is not zero. |
2160 int no_const_pool_before_; // Block emission before this pc offset. | 2164 int no_const_pool_before_; // Block emission before this pc offset. |
2161 | 2165 |
2162 // Emission of the veneer pools may be blocked in some code sequences. | 2166 // Emission of the veneer pools may be blocked in some code sequences. |
2163 int veneer_pool_blocked_nesting_; // Block emission if this is not zero. | 2167 int veneer_pool_blocked_nesting_; // Block emission if this is not zero. |
2164 | 2168 |
2165 // Relocation info generation | 2169 // Relocation info generation |
2166 // Each relocation is encoded as a variable size value | 2170 // Each relocation is encoded as a variable size value |
2167 static const int kMaxRelocSize = RelocInfoWriter::kMaxSize; | 2171 static const int kMaxRelocSize = RelocInfoWriter::kMaxSize; |
2168 RelocInfoWriter reloc_info_writer; | 2172 RelocInfoWriter reloc_info_writer; |
| 2173 // Internal reference positions, required for (potential) patching in |
| 2174 // GrowBuffer(); contains only those internal references whose labels |
| 2175 // are already bound. |
| 2176 std::deque<int> internal_reference_positions_; |
2169 | 2177 |
2170 // Relocation info records are also used during code generation as temporary | 2178 // Relocation info records are also used during code generation as temporary |
2171 // containers for constants and code target addresses until they are emitted | 2179 // containers for constants and code target addresses until they are emitted |
2172 // to the constant pool. These pending relocation info records are temporarily | 2180 // to the constant pool. These pending relocation info records are temporarily |
2173 // stored in a separate buffer until a constant pool is emitted. | 2181 // stored in a separate buffer until a constant pool is emitted. |
2174 // If every instruction in a long sequence is accessing the pool, we need one | 2182 // If every instruction in a long sequence is accessing the pool, we need one |
2175 // pending relocation entry per instruction. | 2183 // pending relocation entry per instruction. |
2176 | 2184 |
2177 // The pending constant pool. | 2185 // The pending constant pool. |
2178 ConstPool constpool_; | 2186 ConstPool constpool_; |
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2311 class EnsureSpace BASE_EMBEDDED { | 2319 class EnsureSpace BASE_EMBEDDED { |
2312 public: | 2320 public: |
2313 explicit EnsureSpace(Assembler* assembler) { | 2321 explicit EnsureSpace(Assembler* assembler) { |
2314 assembler->CheckBufferSpace(); | 2322 assembler->CheckBufferSpace(); |
2315 } | 2323 } |
2316 }; | 2324 }; |
2317 | 2325 |
2318 } } // namespace v8::internal | 2326 } } // namespace v8::internal |
2319 | 2327 |
2320 #endif // V8_ARM64_ASSEMBLER_ARM64_H_ | 2328 #endif // V8_ARM64_ASSEMBLER_ARM64_H_ |
OLD | NEW |