Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <limits.h> // For LONG_MIN, LONG_MAX. | 5 #include <limits.h> // For LONG_MIN, LONG_MAX. |
| 6 | 6 |
| 7 #include "src/v8.h" | 7 #include "src/v8.h" |
| 8 | 8 |
| 9 #if V8_TARGET_ARCH_MIPS64 | 9 #if V8_TARGET_ARCH_MIPS64 |
| 10 | 10 |
| (...skipping 2737 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2748 void MacroAssembler::BranchAndLink(Label* L, Condition cond, Register rs, | 2748 void MacroAssembler::BranchAndLink(Label* L, Condition cond, Register rs, |
| 2749 const Operand& rt, | 2749 const Operand& rt, |
| 2750 BranchDelaySlot bdslot) { | 2750 BranchDelaySlot bdslot) { |
| 2751 if (L->is_bound()) { | 2751 if (L->is_bound()) { |
| 2752 if (is_near(L)) { | 2752 if (is_near(L)) { |
| 2753 BranchAndLinkShort(L, cond, rs, rt, bdslot); | 2753 BranchAndLinkShort(L, cond, rs, rt, bdslot); |
| 2754 } else { | 2754 } else { |
| 2755 Label skip; | 2755 Label skip; |
| 2756 Condition neg_cond = NegateCondition(cond); | 2756 Condition neg_cond = NegateCondition(cond); |
| 2757 BranchShort(&skip, neg_cond, rs, rt); | 2757 BranchShort(&skip, neg_cond, rs, rt); |
| 2758 J(L, bdslot); | 2758 J(L, bdslot); |
|
paul.l...
2015/08/01 17:02:22
This should be Jal(L, bdslot), was incorrect from
| |
| 2759 bind(&skip); | 2759 bind(&skip); |
| 2760 } | 2760 } |
| 2761 } else { | 2761 } else { |
| 2762 if (is_trampoline_emitted()) { | 2762 if (is_trampoline_emitted()) { |
| 2763 Label skip; | 2763 Label skip; |
| 2764 Condition neg_cond = NegateCondition(cond); | 2764 Condition neg_cond = NegateCondition(cond); |
| 2765 BranchShort(&skip, neg_cond, rs, rt); | 2765 BranchShort(&skip, neg_cond, rs, rt); |
| 2766 Jal(L, bdslot); | 2766 Jal(L, bdslot); |
| 2767 bind(&skip); | 2767 bind(&skip); |
| 2768 } else { | 2768 } else { |
| (...skipping 417 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3186 void MacroAssembler::Ret(Condition cond, | 3186 void MacroAssembler::Ret(Condition cond, |
| 3187 Register rs, | 3187 Register rs, |
| 3188 const Operand& rt, | 3188 const Operand& rt, |
| 3189 BranchDelaySlot bd) { | 3189 BranchDelaySlot bd) { |
| 3190 Jump(ra, cond, rs, rt, bd); | 3190 Jump(ra, cond, rs, rt, bd); |
| 3191 } | 3191 } |
| 3192 | 3192 |
| 3193 | 3193 |
| 3194 void MacroAssembler::J(Label* L, BranchDelaySlot bdslot) { | 3194 void MacroAssembler::J(Label* L, BranchDelaySlot bdslot) { |
| 3195 BlockTrampolinePoolScope block_trampoline_pool(this); | 3195 BlockTrampolinePoolScope block_trampoline_pool(this); |
| 3196 | |
| 3197 uint64_t imm28; | |
| 3198 imm28 = jump_address(L); | |
| 3199 { | 3196 { |
| 3200 BlockGrowBufferScope block_buf_growth(this); | 3197 BlockGrowBufferScope block_buf_growth(this); |
| 3201 // Buffer growth (and relocation) must be blocked for internal references | 3198 // Buffer growth (and relocation) must be blocked for internal references |
| 3202 // until associated instructions are emitted and available to be patched. | 3199 // until associated instructions are emitted and available to be patched. |
| 3203 RecordRelocInfo(RelocInfo::INTERNAL_REFERENCE_ENCODED); | 3200 RecordRelocInfo(RelocInfo::INTERNAL_REFERENCE_ENCODED); |
| 3204 j(imm28); | 3201 j(L); |
| 3205 } | 3202 } |
| 3206 // Emit a nop in the branch delay slot if required. | 3203 // Emit a nop in the branch delay slot if required. |
| 3207 if (bdslot == PROTECT) nop(); | 3204 if (bdslot == PROTECT) nop(); |
| 3208 } | 3205 } |
| 3209 | 3206 |
| 3210 | 3207 |
| 3211 void MacroAssembler::Jal(Label* L, BranchDelaySlot bdslot) { | 3208 void MacroAssembler::Jal(Label* L, BranchDelaySlot bdslot) { |
| 3212 BlockTrampolinePoolScope block_trampoline_pool(this); | 3209 BlockTrampolinePoolScope block_trampoline_pool(this); |
| 3213 | |
| 3214 uint64_t imm28; | |
| 3215 imm28 = jump_address(L); | |
| 3216 { | 3210 { |
| 3217 BlockGrowBufferScope block_buf_growth(this); | 3211 BlockGrowBufferScope block_buf_growth(this); |
| 3218 // Buffer growth (and relocation) must be blocked for internal references | 3212 // Buffer growth (and relocation) must be blocked for internal references |
| 3219 // until associated instructions are emitted and available to be patched. | 3213 // until associated instructions are emitted and available to be patched. |
| 3220 RecordRelocInfo(RelocInfo::INTERNAL_REFERENCE_ENCODED); | 3214 RecordRelocInfo(RelocInfo::INTERNAL_REFERENCE_ENCODED); |
| 3221 jal(imm28); | 3215 jal(L); |
| 3222 } | 3216 } |
| 3223 // Emit a nop in the branch delay slot if required. | 3217 // Emit a nop in the branch delay slot if required. |
| 3224 if (bdslot == PROTECT) nop(); | 3218 if (bdslot == PROTECT) nop(); |
| 3225 } | 3219 } |
| 3226 | 3220 |
| 3227 | 3221 |
| 3228 void MacroAssembler::Jr(Label* L, BranchDelaySlot bdslot) { | 3222 void MacroAssembler::Jr(Label* L, BranchDelaySlot bdslot) { |
| 3229 BlockTrampolinePoolScope block_trampoline_pool(this); | 3223 BlockTrampolinePoolScope block_trampoline_pool(this); |
| 3230 | 3224 |
| 3231 uint64_t imm64; | 3225 uint64_t imm64; |
| (...skipping 3113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 6345 if (mag.shift > 0) sra(result, result, mag.shift); | 6339 if (mag.shift > 0) sra(result, result, mag.shift); |
| 6346 srl(at, dividend, 31); | 6340 srl(at, dividend, 31); |
| 6347 Addu(result, result, Operand(at)); | 6341 Addu(result, result, Operand(at)); |
| 6348 } | 6342 } |
| 6349 | 6343 |
| 6350 | 6344 |
| 6351 } // namespace internal | 6345 } // namespace internal |
| 6352 } // namespace v8 | 6346 } // namespace v8 |
| 6353 | 6347 |
| 6354 #endif // V8_TARGET_ARCH_MIPS64 | 6348 #endif // V8_TARGET_ARCH_MIPS64 |
| OLD | NEW |