From 543c6700a50acc1ebda93a581eecb0ab0b70d5b3 Mon Sep 17 00:00:00 2001 From: kkHAIKE Date: Sat, 15 Oct 2022 09:44:11 +0800 Subject: [PATCH] Fix ADR instruction encoding --- llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCCodeEmitter.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCCodeEmitter.cpp b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCCodeEmitter.cpp index c07084e7..dec0c62b 100644 --- a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCCodeEmitter.cpp +++ b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCCodeEmitter.cpp @@ -219,7 +219,7 @@ AArch64MCCodeEmitter::getAdrLabelOpValue(const MCInst &MI, unsigned OpIdx, // If the destination is an immediate, we have nothing to do. if (MO.isImm()) - return MO.getImm() - (MI.getAddress() >> 12); + return MO.getImm() - (MI.getAddress() >> (MI.getOpcode() == AArch64::ADR ? 0 : 12)); assert(MO.isExpr() && "Unexpected target type!"); const MCExpr *Expr = MO.getExpr();