| 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 1099 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1110 // Mark address of the ExitJSFrame code. | 1110 // Mark address of the ExitJSFrame code. |
| 1111 void RecordJSReturn(); | 1111 void RecordJSReturn(); |
| 1112 | 1112 |
| 1113 // Mark address of a debug break slot. | 1113 // Mark address of a debug break slot. |
| 1114 void RecordDebugBreakSlot(); | 1114 void RecordDebugBreakSlot(); |
| 1115 | 1115 |
| 1116 // Record a comment relocation entry that can be used by a disassembler. | 1116 // Record a comment relocation entry that can be used by a disassembler. |
| 1117 // Use --debug_code to enable. | 1117 // Use --debug_code to enable. |
| 1118 void RecordComment(const char* msg); | 1118 void RecordComment(const char* msg); |
| 1119 | 1119 |
| 1120 void RecordPosition(int pos); | 1120 int pc_offset() const { return pc_ - buffer_; } |
| 1121 void RecordStatementPosition(int pos); | |
| 1122 bool WriteRecordedPositions(); | |
| 1123 | 1121 |
| 1124 int pc_offset() const { return pc_ - buffer_; } | 1122 PositionsRecorder* positions_recorder() { return &positions_recorder_; } |
| 1125 int current_position() const { return current_position_; } | |
| 1126 int current_statement_position() const { return current_statement_position_; } | |
| 1127 | 1123 |
| 1128 bool can_peephole_optimize(int instructions) { | 1124 bool can_peephole_optimize(int instructions) { |
| 1129 if (!FLAG_peephole_optimization) return false; | 1125 if (!FLAG_peephole_optimization) return false; |
| 1130 if (last_bound_pos_ > pc_offset() - instructions * kInstrSize) return false; | 1126 if (last_bound_pos_ > pc_offset() - instructions * kInstrSize) return false; |
| 1131 return reloc_info_writer.last_pc() <= pc_ - instructions * kInstrSize; | 1127 return reloc_info_writer.last_pc() <= pc_ - instructions * kInstrSize; |
| 1132 } | 1128 } |
| 1133 | 1129 |
| 1134 // Read/patch instructions | 1130 // Read/patch instructions |
| 1135 static Instr instr_at(byte* pc) { return *reinterpret_cast<Instr*>(pc); } | 1131 static Instr instr_at(byte* pc) { return *reinterpret_cast<Instr*>(pc); } |
| 1136 static void instr_at_put(byte* pc, Instr instr) { | 1132 static void instr_at_put(byte* pc, Instr instr) { |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1252 // stored in a separate buffer until a constant pool is emitted. | 1248 // stored in a separate buffer until a constant pool is emitted. |
| 1253 // If every instruction in a long sequence is accessing the pool, we need one | 1249 // If every instruction in a long sequence is accessing the pool, we need one |
| 1254 // pending relocation entry per instruction. | 1250 // pending relocation entry per instruction. |
| 1255 static const int kMaxNumPRInfo = kMaxDistBetweenPools/kInstrSize; | 1251 static const int kMaxNumPRInfo = kMaxDistBetweenPools/kInstrSize; |
| 1256 RelocInfo prinfo_[kMaxNumPRInfo]; // the buffer of pending relocation info | 1252 RelocInfo prinfo_[kMaxNumPRInfo]; // the buffer of pending relocation info |
| 1257 int num_prinfo_; // number of pending reloc info entries in the buffer | 1253 int num_prinfo_; // number of pending reloc info entries in the buffer |
| 1258 | 1254 |
| 1259 // The bound position, before this we cannot do instruction elimination. | 1255 // The bound position, before this we cannot do instruction elimination. |
| 1260 int last_bound_pos_; | 1256 int last_bound_pos_; |
| 1261 | 1257 |
| 1262 // source position information | |
| 1263 int current_position_; | |
| 1264 int current_statement_position_; | |
| 1265 int written_position_; | |
| 1266 int written_statement_position_; | |
| 1267 | |
| 1268 // Code emission | 1258 // Code emission |
| 1269 inline void CheckBuffer(); | 1259 inline void CheckBuffer(); |
| 1270 void GrowBuffer(); | 1260 void GrowBuffer(); |
| 1271 inline void emit(Instr x); | 1261 inline void emit(Instr x); |
| 1272 | 1262 |
| 1273 // Instruction generation | 1263 // Instruction generation |
| 1274 void addrmod1(Instr instr, Register rn, Register rd, const Operand& x); | 1264 void addrmod1(Instr instr, Register rn, Register rd, const Operand& x); |
| 1275 void addrmod2(Instr instr, Register rd, const MemOperand& x); | 1265 void addrmod2(Instr instr, Register rd, const MemOperand& x); |
| 1276 void addrmod3(Instr instr, Register rd, const MemOperand& x); | 1266 void addrmod3(Instr instr, Register rd, const MemOperand& x); |
| 1277 void addrmod4(Instr instr, Register rn, RegList rl); | 1267 void addrmod4(Instr instr, Register rn, RegList rl); |
| 1278 void addrmod5(Instr instr, CRegister crd, const MemOperand& x); | 1268 void addrmod5(Instr instr, CRegister crd, const MemOperand& x); |
| 1279 | 1269 |
| 1280 // Labels | 1270 // Labels |
| 1281 void print(Label* L); | 1271 void print(Label* L); |
| 1282 void bind_to(Label* L, int pos); | 1272 void bind_to(Label* L, int pos); |
| 1283 void link_to(Label* L, Label* appendix); | 1273 void link_to(Label* L, Label* appendix); |
| 1284 void next(Label* L); | 1274 void next(Label* L); |
| 1285 | 1275 |
| 1286 // Record reloc info for current pc_ | 1276 // Record reloc info for current pc_ |
| 1287 void RecordRelocInfo(RelocInfo::Mode rmode, intptr_t data = 0); | 1277 void RecordRelocInfo(RelocInfo::Mode rmode, intptr_t data = 0); |
| 1288 | 1278 |
| 1289 friend class RegExpMacroAssemblerARM; | 1279 friend class RegExpMacroAssemblerARM; |
| 1290 friend class RelocInfo; | 1280 friend class RelocInfo; |
| 1291 friend class CodePatcher; | 1281 friend class CodePatcher; |
| 1292 friend class BlockConstPoolScope; | 1282 friend class BlockConstPoolScope; |
| 1283 |
| 1284 PositionsRecorder positions_recorder_; |
| 1285 friend class PositionsRecorder; |
| 1286 friend class EnsureSpace; |
| 1293 }; | 1287 }; |
| 1294 | 1288 |
| 1289 |
| 1290 class EnsureSpace BASE_EMBEDDED { |
| 1291 public: |
| 1292 EnsureSpace(Assembler* assembler) { |
| 1293 assembler->CheckBuffer(); |
| 1294 } |
| 1295 }; |
| 1296 |
| 1297 |
| 1295 } } // namespace v8::internal | 1298 } } // namespace v8::internal |
| 1296 | 1299 |
| 1297 #endif // V8_ARM_ASSEMBLER_ARM_H_ | 1300 #endif // V8_ARM_ASSEMBLER_ARM_H_ |
| OLD | NEW |