OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
267 } | 267 } |
268 if (!emit_instructions) continue; | 268 if (!emit_instructions) continue; |
269 | 269 |
270 if (FLAG_code_comments && instr->HasInterestingComment(this)) { | 270 if (FLAG_code_comments && instr->HasInterestingComment(this)) { |
271 Comment(";;; <@%d,#%d> %s", | 271 Comment(";;; <@%d,#%d> %s", |
272 current_instruction_, | 272 current_instruction_, |
273 instr->hydrogen_value()->id(), | 273 instr->hydrogen_value()->id(), |
274 instr->Mnemonic()); | 274 instr->Mnemonic()); |
275 } | 275 } |
276 | 276 |
| 277 RecordAndUpdatePosition(instr->position()); |
| 278 |
277 instr->CompileToNative(this); | 279 instr->CompileToNative(this); |
278 } | 280 } |
279 EnsureSpaceForLazyDeopt(); | 281 EnsureSpaceForLazyDeopt(); |
280 last_lazy_deopt_pc_ = masm()->pc_offset(); | 282 last_lazy_deopt_pc_ = masm()->pc_offset(); |
281 return !is_aborted(); | 283 return !is_aborted(); |
282 } | 284 } |
283 | 285 |
284 | 286 |
285 bool LCodeGen::GenerateDeferredCode() { | 287 bool LCodeGen::GenerateDeferredCode() { |
286 ASSERT(is_generating()); | 288 ASSERT(is_generating()); |
287 if (deferred_.length() > 0) { | 289 if (deferred_.length() > 0) { |
288 for (int i = 0; !is_aborted() && i < deferred_.length(); i++) { | 290 for (int i = 0; !is_aborted() && i < deferred_.length(); i++) { |
289 LDeferredCode* code = deferred_[i]; | 291 LDeferredCode* code = deferred_[i]; |
| 292 |
| 293 int pos = instructions_->at(code->instruction_index())->position(); |
| 294 RecordAndUpdatePosition(pos); |
| 295 |
290 Comment(";;; <@%d,#%d> " | 296 Comment(";;; <@%d,#%d> " |
291 "-------------------- Deferred %s --------------------", | 297 "-------------------- Deferred %s --------------------", |
292 code->instruction_index(), | 298 code->instruction_index(), |
293 code->instr()->hydrogen_value()->id(), | 299 code->instr()->hydrogen_value()->id(), |
294 code->instr()->Mnemonic()); | 300 code->instr()->Mnemonic()); |
295 __ bind(code->entry()); | 301 __ bind(code->entry()); |
296 if (NeedsDeferredFrame()) { | 302 if (NeedsDeferredFrame()) { |
297 Comment(";;; Build frame"); | 303 Comment(";;; Build frame"); |
298 ASSERT(!frame_is_built_); | 304 ASSERT(!frame_is_built_); |
299 ASSERT(info()->IsStub()); | 305 ASSERT(info()->IsStub()); |
(...skipping 670 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
970 pointers, Safepoint::kWithRegistersAndDoubles, arguments, deopt_mode); | 976 pointers, Safepoint::kWithRegistersAndDoubles, arguments, deopt_mode); |
971 } | 977 } |
972 | 978 |
973 | 979 |
974 void LCodeGen::RecordPosition(int position) { | 980 void LCodeGen::RecordPosition(int position) { |
975 if (position == RelocInfo::kNoPosition) return; | 981 if (position == RelocInfo::kNoPosition) return; |
976 masm()->positions_recorder()->RecordPosition(position); | 982 masm()->positions_recorder()->RecordPosition(position); |
977 } | 983 } |
978 | 984 |
979 | 985 |
| 986 void LCodeGen::RecordAndUpdatePosition(int position) { |
| 987 if (position >= 0 && position != old_position_) { |
| 988 masm()->positions_recorder()->RecordPosition(position); |
| 989 old_position_ = position; |
| 990 } |
| 991 } |
| 992 |
| 993 |
980 static const char* LabelType(LLabel* label) { | 994 static const char* LabelType(LLabel* label) { |
981 if (label->is_loop_header()) return " (loop header)"; | 995 if (label->is_loop_header()) return " (loop header)"; |
982 if (label->is_osr_entry()) return " (OSR entry)"; | 996 if (label->is_osr_entry()) return " (OSR entry)"; |
983 return ""; | 997 return ""; |
984 } | 998 } |
985 | 999 |
986 | 1000 |
987 void LCodeGen::DoLabel(LLabel* label) { | 1001 void LCodeGen::DoLabel(LLabel* label) { |
988 Comment(";;; <@%d,#%d> -------------------- B%d%s --------------------", | 1002 Comment(";;; <@%d,#%d> -------------------- B%d%s --------------------", |
989 current_instruction_, | 1003 current_instruction_, |
(...skipping 4849 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5839 __ sub(scratch, result, Operand::PointerOffsetFromSmiKey(index)); | 5853 __ sub(scratch, result, Operand::PointerOffsetFromSmiKey(index)); |
5840 __ ldr(result, FieldMemOperand(scratch, | 5854 __ ldr(result, FieldMemOperand(scratch, |
5841 FixedArray::kHeaderSize - kPointerSize)); | 5855 FixedArray::kHeaderSize - kPointerSize)); |
5842 __ bind(&done); | 5856 __ bind(&done); |
5843 } | 5857 } |
5844 | 5858 |
5845 | 5859 |
5846 #undef __ | 5860 #undef __ |
5847 | 5861 |
5848 } } // namespace v8::internal | 5862 } } // namespace v8::internal |
OLD | NEW |