return result;
}
+/// \brief R_MIPS_PCLO16
/// local/external: lo16 (S + AHL - P)
static uint32_t relocPcLo16(uint64_t P, uint64_t S, int64_t AHL) {
AHL = llvm::SignExtend32<16>(AHL);
}
/// \brief R_MIPS_PC18_S3
+/// local/external: (S + A - P) >> 3 (P with cleared 3 less significant bits)
static uint32_t relocPc18(uint64_t P, uint64_t S, int64_t A) {
A = llvm::SignExtend32<21>(A);
// FIXME (simon): Check that S + A has 8-byte alignment
- int32_t result = S + A - ((P | 7) ^ 7); // pc with cleared 3-lsb
+ int32_t result = S + A - ((P | 7) ^ 7);
return result >> 3;
}
/// \brief R_MIPS_PC19_S2
+/// local/external: (S + A - P) >> 2
static uint32_t relocPc19(uint64_t P, uint64_t S, int64_t A) {
A = llvm::SignExtend32<21>(A);
// FIXME (simon): Check that S + A has 4-byte alignment
}
/// \brief R_MIPS_PC21_S2
+/// local/external: (S + A - P) >> 2
static uint32_t relocPc21(uint64_t P, uint64_t S, int64_t A) {
A = llvm::SignExtend32<23>(A);
// FIXME (simon): Check that S + A has 4-byte alignment
}
/// \brief R_MIPS_PC26_S2
+/// local/external: (S + A - P) >> 2
static uint32_t relocPc26(uint64_t P, uint64_t S, int64_t A) {
A = llvm::SignExtend32<28>(A);
// FIXME (simon): Check that S + A has 4-byte alignment