Index: runtime/vm/assembler_mips.h |
=================================================================== |
--- runtime/vm/assembler_mips.h (revision 20794) |
+++ runtime/vm/assembler_mips.h (working copy) |
@@ -515,6 +515,15 @@ |
jr(TMP); |
} |
+ void BranchPatchable(const ExternalLabel* label) { |
+ const uint16_t low = Utils::Low16Bits(label->address()); |
+ const uint16_t high = Utils::High16Bits(label->address()); |
+ lui(TMP, Immediate(high)); |
+ ori(TMP, TMP, Immediate(low)); |
+ jr(TMP); |
+ delay_slot()->nop(); |
regis
2013/04/02 20:40:51
This works, but there is already a nop in the dela
|
+ } |
+ |
void BranchLink(const ExternalLabel* label) { |
LoadImmediate(TMP, label->address()); |
jalr(TMP); |
@@ -525,6 +534,7 @@ |
Array::data_offset() + 4*AddExternalLabel(label) - kHeapObjectTag; |
LoadWordFromPoolOffset(TMP, offset); |
jalr(TMP); |
+ delay_slot()->nop(); |
regis
2013/04/02 20:40:51
ditto
|
} |
// If the signed value in rs is less than value, rd is 1, and 0 otherwise. |