From 52e635ea3512cfcd03587201b20100074e5b6ac9 Mon Sep 17 00:00:00 2001 From: Bill Wendling Date: Tue, 7 Dec 2010 23:05:20 +0000 Subject: [PATCH] A bit of cleanup: early exit ApplyFixup and cache the Fixup offset. No functionality change. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121195 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/ARM/ARMAsmBackend.cpp | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/lib/Target/ARM/ARMAsmBackend.cpp b/lib/Target/ARM/ARMAsmBackend.cpp index 7b9e59f9a9d..81bc8f18d0f 100644 --- a/lib/Target/ARM/ARMAsmBackend.cpp +++ b/lib/Target/ARM/ARMAsmBackend.cpp @@ -133,6 +133,7 @@ static unsigned adjustFixupValue(unsigned Kind, uint64_t Value) { } namespace { + // FIXME: This should be in a separate file. // ELF is an ELF of course... class ELFARMAsmBackend : public ARMAsmBackend { @@ -160,24 +161,24 @@ public: } }; -// Fixme: Raise this to share code between Darwin and ELF. +// FIXME: Raise this to share code between Darwin and ELF. void ELFARMAsmBackend::ApplyFixup(const MCFixup &Fixup, char *Data, unsigned DataSize, uint64_t Value) const { - // Fixme: 2 for Thumb - unsigned NumBytes = 4; - Value = adjustFixupValue(Fixup.getKind(), Value); + unsigned NumBytes = 4; // FIXME: 2 for Thumb - assert((Fixup.getOffset() % NumBytes == 0) - && "Offset mod NumBytes is nonzero!"); - // For each byte of the fragment that the fixup touches, mask in the - // bits from the fixup value. - // The Value has been "split up" into the appropriate bitfields above. - for (unsigned i = 0; i != NumBytes; ++i) { - Data[Fixup.getOffset() + i] |= uint8_t(Value >> (i * 8)); - } + Value = adjustFixupValue(Fixup.getKind(), Value); + if (!Value) return; // No need to encode nothing. + + unsigned Offset = Fixup.getOffset(); + assert(Offset % NumBytes == 0 && "Offset mod NumBytes is nonzero!"); + + // For each byte of the fragment that the fixup touches, mask in the bits from + // the fixup value. The Value has been "split up" into the appropriate + // bitfields above. + for (unsigned i = 0; i != NumBytes; ++i) + Data[Offset + i] |= uint8_t((Value >> (i * 8)) & 0xff); } -namespace { // FIXME: This should be in a separate file. class DarwinARMAsmBackend : public ARMAsmBackend { MCMachOObjectFormat Format; @@ -205,7 +206,6 @@ public: return false; } }; -} // end anonymous namespace static unsigned getFixupKindNumBytes(unsigned Kind) { switch (Kind) { @@ -235,6 +235,7 @@ void DarwinARMAsmBackend::ApplyFixup(const MCFixup &Fixup, char *Data, for (unsigned i = 0; i != NumBytes; ++i) Data[Fixup.getOffset() + i] |= uint8_t(Value >> (i * 8)); } + } // end anonymous namespace TargetAsmBackend *llvm::createARMAsmBackend(const Target &T,