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); |
} |
} |