[AArch64] Fix checks for AArch64MCExpr::VK_SABS flag.
VK_SABS is part of the SymLoc bitfield in the variant kind which should be compared for equality, not by checking the VK_SABS bit. As far as I know, the existing code happened to produce the correct results in all cases, so this is just a cleanup. Patch by Stephen Crane. Differential Revision: https://reviews.llvm.org/D60596 llvm-svn: 358788
This commit is contained in:
parent
ad69af3e95
commit
1810339bc3
|
@ -273,7 +273,7 @@ static uint64_t adjustFixupValue(const MCFixup &Fixup, const MCValue &Target,
|
||||||
if (RefKind & AArch64MCExpr::VK_NC) {
|
if (RefKind & AArch64MCExpr::VK_NC) {
|
||||||
Value &= 0xFFFF;
|
Value &= 0xFFFF;
|
||||||
}
|
}
|
||||||
else if (RefKind & AArch64MCExpr::VK_SABS) {
|
else if (AArch64MCExpr::getSymbolLoc(RefKind) == AArch64MCExpr::VK_SABS) {
|
||||||
if (SignedValue > 0xFFFF || SignedValue < -0xFFFF)
|
if (SignedValue > 0xFFFF || SignedValue < -0xFFFF)
|
||||||
Ctx.reportError(Fixup.getLoc(), "fixup value out of range");
|
Ctx.reportError(Fixup.getLoc(), "fixup value out of range");
|
||||||
|
|
||||||
|
@ -397,7 +397,7 @@ void AArch64AsmBackend::applyFixup(const MCAssembler &Asm, const MCFixup &Fixup,
|
||||||
// handle this more cleanly. This may affect the output of -show-mc-encoding.
|
// handle this more cleanly. This may affect the output of -show-mc-encoding.
|
||||||
AArch64MCExpr::VariantKind RefKind =
|
AArch64MCExpr::VariantKind RefKind =
|
||||||
static_cast<AArch64MCExpr::VariantKind>(Target.getRefKind());
|
static_cast<AArch64MCExpr::VariantKind>(Target.getRefKind());
|
||||||
if (RefKind & AArch64MCExpr::VK_SABS) {
|
if (AArch64MCExpr::getSymbolLoc(RefKind) == AArch64MCExpr::VK_SABS) {
|
||||||
// If the immediate is negative, generate MOVN else MOVZ.
|
// If the immediate is negative, generate MOVN else MOVZ.
|
||||||
// (Bit 30 = 0) ==> MOVN, (Bit 30 = 1) ==> MOVZ.
|
// (Bit 30 = 0) ==> MOVN, (Bit 30 = 1) ==> MOVZ.
|
||||||
if (SignedValue < 0)
|
if (SignedValue < 0)
|
||||||
|
|
Loading…
Reference in New Issue