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 249 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
260 !is_aborted() && current_instruction_ < instructions_->length(); | 260 !is_aborted() && current_instruction_ < instructions_->length(); |
261 current_instruction_++) { | 261 current_instruction_++) { |
262 LInstruction* instr = instructions_->at(current_instruction_); | 262 LInstruction* instr = instructions_->at(current_instruction_); |
263 | 263 |
264 // Don't emit code for basic blocks with a replacement. | 264 // Don't emit code for basic blocks with a replacement. |
265 if (instr->IsLabel()) { | 265 if (instr->IsLabel()) { |
266 emit_instructions = !LLabel::cast(instr)->HasReplacement(); | 266 emit_instructions = !LLabel::cast(instr)->HasReplacement(); |
267 } | 267 } |
268 if (!emit_instructions) continue; | 268 if (!emit_instructions) continue; |
269 | 269 |
270 if (FLAG_code_comments && instr->HasInterestingComment(this)) { | 270 if (instr->hydrogen_value()->block()->IsReachable()) { |
271 Comment(";;; <@%d,#%d> %s", | 271 if (FLAG_code_comments && instr->HasInterestingComment(this)) { |
272 current_instruction_, | 272 Comment(";;; <@%d,#%d> %s", |
273 instr->hydrogen_value()->id(), | 273 current_instruction_, |
274 instr->Mnemonic()); | 274 instr->hydrogen_value()->id(), |
| 275 instr->Mnemonic()); |
| 276 } |
| 277 |
| 278 RecordAndUpdatePosition(instr->position()); |
| 279 |
| 280 instr->CompileToNative(this); |
| 281 } else { |
| 282 if (FLAG_code_comments && instr->IsLabel()) { |
| 283 Comment( |
| 284 ";;; <@%d,#%d> -------------------- B%d (unreachable/elided) " |
| 285 "--------------------", |
| 286 current_instruction_, |
| 287 instr->hydrogen_value()->id(), |
| 288 instr->hydrogen_value()->block()->block_id()); |
| 289 } |
275 } | 290 } |
276 | |
277 RecordAndUpdatePosition(instr->position()); | |
278 | |
279 instr->CompileToNative(this); | |
280 } | 291 } |
281 EnsureSpaceForLazyDeopt(); | 292 EnsureSpaceForLazyDeopt(); |
282 last_lazy_deopt_pc_ = masm()->pc_offset(); | 293 last_lazy_deopt_pc_ = masm()->pc_offset(); |
283 return !is_aborted(); | 294 return !is_aborted(); |
284 } | 295 } |
285 | 296 |
286 | 297 |
287 bool LCodeGen::GenerateDeferredCode() { | 298 bool LCodeGen::GenerateDeferredCode() { |
288 ASSERT(is_generating()); | 299 ASSERT(is_generating()); |
289 if (deferred_.length() > 0) { | 300 if (deferred_.length() > 0) { |
(...skipping 1849 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2139 // Block literal pool emission to ensure nop indicating no inlined smi code | 2150 // Block literal pool emission to ensure nop indicating no inlined smi code |
2140 // is in the correct position. | 2151 // is in the correct position. |
2141 Assembler::BlockConstPoolScope block_const_pool(masm()); | 2152 Assembler::BlockConstPoolScope block_const_pool(masm()); |
2142 CallCode(stub.GetCode(isolate()), RelocInfo::CODE_TARGET, instr); | 2153 CallCode(stub.GetCode(isolate()), RelocInfo::CODE_TARGET, instr); |
2143 __ nop(); // Signals no inlined code. | 2154 __ nop(); // Signals no inlined code. |
2144 } | 2155 } |
2145 | 2156 |
2146 | 2157 |
2147 int LCodeGen::GetNextEmittedBlock() const { | 2158 int LCodeGen::GetNextEmittedBlock() const { |
2148 for (int i = current_block_ + 1; i < graph()->blocks()->length(); ++i) { | 2159 for (int i = current_block_ + 1; i < graph()->blocks()->length(); ++i) { |
| 2160 if (!graph()->blocks()->at(i)->IsReachable()) continue; |
2149 if (!chunk_->GetLabel(i)->HasReplacement()) return i; | 2161 if (!chunk_->GetLabel(i)->HasReplacement()) return i; |
2150 } | 2162 } |
2151 return -1; | 2163 return -1; |
2152 } | 2164 } |
2153 | 2165 |
2154 template<class InstrType> | 2166 template<class InstrType> |
2155 void LCodeGen::EmitBranch(InstrType instr, Condition condition) { | 2167 void LCodeGen::EmitBranch(InstrType instr, Condition condition) { |
2156 int left_block = instr->TrueDestination(chunk_); | 2168 int left_block = instr->TrueDestination(chunk_); |
2157 int right_block = instr->FalseDestination(chunk_); | 2169 int right_block = instr->FalseDestination(chunk_); |
2158 | 2170 |
(...skipping 3616 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5775 __ sub(scratch, result, Operand::PointerOffsetFromSmiKey(index)); | 5787 __ sub(scratch, result, Operand::PointerOffsetFromSmiKey(index)); |
5776 __ ldr(result, FieldMemOperand(scratch, | 5788 __ ldr(result, FieldMemOperand(scratch, |
5777 FixedArray::kHeaderSize - kPointerSize)); | 5789 FixedArray::kHeaderSize - kPointerSize)); |
5778 __ bind(&done); | 5790 __ bind(&done); |
5779 } | 5791 } |
5780 | 5792 |
5781 | 5793 |
5782 #undef __ | 5794 #undef __ |
5783 | 5795 |
5784 } } // namespace v8::internal | 5796 } } // namespace v8::internal |
OLD | NEW |