Chromium Code Reviews| Index: src/x64/lithium-codegen-x64.cc |
| =================================================================== |
| --- src/x64/lithium-codegen-x64.cc (revision 6957) |
| +++ src/x64/lithium-codegen-x64.cc (working copy) |
| @@ -77,6 +77,7 @@ |
| return GeneratePrologue() && |
| GenerateBody() && |
| GenerateDeferredCode() && |
| + GenerateJumpTable() && |
| GenerateSafepointTable(); |
| } |
| @@ -240,6 +241,16 @@ |
| } |
| +bool LCodeGen::GenerateJumpTable() { |
| + for (int i = 0; i < jump_table_.length(); i++) { |
| + JumpTableEntry* info = jump_table_[i]; |
| + __ bind(&(info->label)); |
| + __ Jump(info->address, RelocInfo::RUNTIME_ENTRY); |
| + } |
| + return !is_aborted(); |
| +} |
| + |
| + |
| bool LCodeGen::GenerateDeferredCode() { |
| ASSERT(is_generating()); |
| for (int i = 0; !is_aborted() && i < deferred_.length(); i++) { |
| @@ -512,10 +523,10 @@ |
| if (cc == no_condition) { |
| __ Jump(entry, RelocInfo::RUNTIME_ENTRY); |
| } else { |
| - NearLabel done; |
| - __ j(NegateCondition(cc), &done); |
| - __ Jump(entry, RelocInfo::RUNTIME_ENTRY); |
| - __ bind(&done); |
| + JumpTableEntry* jump_info = new JumpTableEntry(); |
|
Lasse Reichstein
2011/02/28 08:42:30
Can we generate the same jump more than once? (I.e
Rico
2011/02/28 09:57:13
Done.
|
| + jump_info->address = entry; |
|
Lasse Reichstein
2011/02/28 08:42:30
Set this in a constructor.
Rico
2011/02/28 09:57:13
Done.
|
| + __ j(cc, &jump_info->label); |
| + jump_table_.Add(jump_info); |
| } |
| } |