| Index: src/arm/lithium-codegen-arm.cc
|
| diff --git a/src/arm/lithium-codegen-arm.cc b/src/arm/lithium-codegen-arm.cc
|
| index 51bf3e09b1658c5a3c4832a7ede5deba06d870c5..a06ed7344802219b7a3f3887160d54940b380132 100644
|
| --- a/src/arm/lithium-codegen-arm.cc
|
| +++ b/src/arm/lithium-codegen-arm.cc
|
| @@ -319,29 +319,25 @@ bool LCodeGen::GenerateJumpTable() {
|
| // Each entry in the jump table generates one instruction and inlines one
|
| // 32bit data after it.
|
| if (!is_int24((masm()->pc_offset() / Assembler::kInstrSize) +
|
| - deopt_jump_table_.length() * 7)) {
|
| + jump_table_.length() * 7)) {
|
| Abort(kGeneratedCodeIsTooLarge);
|
| }
|
|
|
| - if (deopt_jump_table_.length() > 0) {
|
| + if (jump_table_.length() > 0) {
|
| Label needs_frame, call_deopt_entry;
|
|
|
| Comment(";;; -------------------- Jump table --------------------");
|
| - Address base = deopt_jump_table_[0].address;
|
| + Address base = jump_table_[0].address;
|
|
|
| Register entry_offset = scratch0();
|
|
|
| - int length = deopt_jump_table_.length();
|
| + int length = jump_table_.length();
|
| for (int i = 0; i < length; i++) {
|
| - Deoptimizer::JumpTableEntry* table_entry = &deopt_jump_table_[i];
|
| + Deoptimizer::JumpTableEntry* table_entry = &jump_table_[i];
|
| __ bind(&table_entry->label);
|
|
|
| - Deoptimizer::BailoutType type = table_entry->bailout_type;
|
| - DCHECK(type == deopt_jump_table_[0].bailout_type);
|
| + DCHECK_EQ(jump_table_[0].bailout_type, table_entry->bailout_type);
|
| Address entry = table_entry->address;
|
| - int id = Deoptimizer::GetDeoptimizationId(isolate(), entry, type);
|
| - DCHECK_NE(Deoptimizer::kNotDeoptimizationEntry, id);
|
| - Comment(";;; jump table entry %d: deoptimization bailout %d.", i, id);
|
| DeoptComment(table_entry->reason);
|
|
|
| // Second-level deopt table entries are contiguous and small, so instead
|
| @@ -909,17 +905,15 @@ void LCodeGen::DeoptimizeIf(Condition condition, LInstruction* instr,
|
| DeoptComment(reason);
|
| __ Call(entry, RelocInfo::RUNTIME_ENTRY);
|
| } else {
|
| + Deoptimizer::JumpTableEntry table_entry(entry, reason, bailout_type,
|
| + !frame_is_built_);
|
| // We often have several deopts to the same entry, reuse the last
|
| // jump entry if this is the case.
|
| - if (deopt_jump_table_.is_empty() ||
|
| - (deopt_jump_table_.last().address != entry) ||
|
| - (deopt_jump_table_.last().bailout_type != bailout_type) ||
|
| - (deopt_jump_table_.last().needs_frame != !frame_is_built_)) {
|
| - Deoptimizer::JumpTableEntry table_entry(entry, reason, bailout_type,
|
| - !frame_is_built_);
|
| - deopt_jump_table_.Add(table_entry, zone());
|
| + if (jump_table_.is_empty() ||
|
| + !table_entry.IsEquivalentTo(jump_table_.last())) {
|
| + jump_table_.Add(table_entry, zone());
|
| }
|
| - __ b(condition, &deopt_jump_table_.last().label);
|
| + __ b(condition, &jump_table_.last().label);
|
| }
|
| }
|
|
|
|
|