| OLD | NEW |
| 1 // Copyright (c) 1994-2006 Sun Microsystems Inc. | 1 // Copyright (c) 1994-2006 Sun Microsystems Inc. |
| 2 // All Rights Reserved. | 2 // All Rights Reserved. |
| 3 // | 3 // |
| 4 // Redistribution and use in source and binary forms, with or without | 4 // Redistribution and use in source and binary forms, with or without |
| 5 // modification, are permitted provided that the following conditions are | 5 // modification, are permitted provided that the following conditions are |
| 6 // met: | 6 // met: |
| 7 // | 7 // |
| 8 // - Redistributions of source code must retain the above copyright notice, | 8 // - Redistributions of source code must retain the above copyright notice, |
| 9 // this list of conditions and the following disclaimer. | 9 // this list of conditions and the following disclaimer. |
| 10 // | 10 // |
| (...skipping 1388 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1399 DCHECK(!(rs.is(zero_reg))); | 1399 DCHECK(!(rs.is(zero_reg))); |
| 1400 Instr instr = POP76 | (rs.code() << kRsShift) | offset; | 1400 Instr instr = POP76 | (rs.code() << kRsShift) | offset; |
| 1401 emit(instr); | 1401 emit(instr); |
| 1402 } | 1402 } |
| 1403 | 1403 |
| 1404 | 1404 |
| 1405 void Assembler::j(int32_t target) { | 1405 void Assembler::j(int32_t target) { |
| 1406 #if DEBUG | 1406 #if DEBUG |
| 1407 // Get pc of delay slot. | 1407 // Get pc of delay slot. |
| 1408 uint32_t ipc = reinterpret_cast<uint32_t>(pc_ + 1 * kInstrSize); | 1408 uint32_t ipc = reinterpret_cast<uint32_t>(pc_ + 1 * kInstrSize); |
| 1409 bool in_range = (ipc ^ static_cast<uint32_t>(target) >> | 1409 bool in_range = ((ipc ^ static_cast<uint32_t>(target)) >> |
| 1410 (kImm26Bits + kImmFieldShift)) == 0; | 1410 (kImm26Bits + kImmFieldShift)) == 0; |
| 1411 DCHECK(in_range && ((target & 3) == 0)); | 1411 DCHECK(in_range && ((target & 3) == 0)); |
| 1412 #endif | 1412 #endif |
| 1413 GenInstrJump(J, target >> 2); | 1413 GenInstrJump(J, (target >> 2) & kImm26Mask); |
| 1414 } | 1414 } |
| 1415 | 1415 |
| 1416 | 1416 |
| 1417 void Assembler::jr(Register rs) { | 1417 void Assembler::jr(Register rs) { |
| 1418 if (!IsMipsArchVariant(kMips32r6)) { | 1418 if (!IsMipsArchVariant(kMips32r6)) { |
| 1419 BlockTrampolinePoolScope block_trampoline_pool(this); | 1419 BlockTrampolinePoolScope block_trampoline_pool(this); |
| 1420 if (rs.is(ra)) { | 1420 if (rs.is(ra)) { |
| 1421 positions_recorder()->WriteRecordedPositions(); | 1421 positions_recorder()->WriteRecordedPositions(); |
| 1422 } | 1422 } |
| 1423 GenInstrRegister(SPECIAL, rs, zero_reg, zero_reg, 0, JR); | 1423 GenInstrRegister(SPECIAL, rs, zero_reg, zero_reg, 0, JR); |
| 1424 BlockTrampolinePoolFor(1); // For associated delay slot. | 1424 BlockTrampolinePoolFor(1); // For associated delay slot. |
| 1425 } else { | 1425 } else { |
| 1426 jalr(rs, zero_reg); | 1426 jalr(rs, zero_reg); |
| 1427 } | 1427 } |
| 1428 } | 1428 } |
| 1429 | 1429 |
| 1430 | 1430 |
| 1431 void Assembler::jal(int32_t target) { | 1431 void Assembler::jal(int32_t target) { |
| 1432 #ifdef DEBUG | 1432 #ifdef DEBUG |
| 1433 // Get pc of delay slot. | 1433 // Get pc of delay slot. |
| 1434 uint32_t ipc = reinterpret_cast<uint32_t>(pc_ + 1 * kInstrSize); | 1434 uint32_t ipc = reinterpret_cast<uint32_t>(pc_ + 1 * kInstrSize); |
| 1435 bool in_range = (ipc ^ static_cast<uint32_t>(target) >> | 1435 bool in_range = ((ipc ^ static_cast<uint32_t>(target)) >> |
| 1436 (kImm26Bits + kImmFieldShift)) == 0; | 1436 (kImm26Bits + kImmFieldShift)) == 0; |
| 1437 DCHECK(in_range && ((target & 3) == 0)); | 1437 DCHECK(in_range && ((target & 3) == 0)); |
| 1438 #endif | 1438 #endif |
| 1439 positions_recorder()->WriteRecordedPositions(); | 1439 positions_recorder()->WriteRecordedPositions(); |
| 1440 GenInstrJump(JAL, target >> 2); | 1440 GenInstrJump(JAL, (target >> 2) & kImm26Mask); |
| 1441 } | 1441 } |
| 1442 | 1442 |
| 1443 | 1443 |
| 1444 void Assembler::jalr(Register rs, Register rd) { | 1444 void Assembler::jalr(Register rs, Register rd) { |
| 1445 DCHECK(rs.code() != rd.code()); | 1445 DCHECK(rs.code() != rd.code()); |
| 1446 BlockTrampolinePoolScope block_trampoline_pool(this); | 1446 BlockTrampolinePoolScope block_trampoline_pool(this); |
| 1447 positions_recorder()->WriteRecordedPositions(); | 1447 positions_recorder()->WriteRecordedPositions(); |
| 1448 GenInstrRegister(SPECIAL, rs, zero_reg, rd, 0, JALR); | 1448 GenInstrRegister(SPECIAL, rs, zero_reg, rd, 0, JALR); |
| 1449 BlockTrampolinePoolFor(1); // For associated delay slot. | 1449 BlockTrampolinePoolFor(1); // For associated delay slot. |
| 1450 } | 1450 } |
| (...skipping 1644 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3095 if (patched) { | 3095 if (patched) { |
| 3096 CpuFeatures::FlushICache(pc + 2, sizeof(Address)); | 3096 CpuFeatures::FlushICache(pc + 2, sizeof(Address)); |
| 3097 } | 3097 } |
| 3098 } | 3098 } |
| 3099 | 3099 |
| 3100 | 3100 |
| 3101 } // namespace internal | 3101 } // namespace internal |
| 3102 } // namespace v8 | 3102 } // namespace v8 |
| 3103 | 3103 |
| 3104 #endif // V8_TARGET_ARCH_MIPS | 3104 #endif // V8_TARGET_ARCH_MIPS |
| OLD | NEW |