diff options
author | Bill Wendling <isanbard@gmail.com> | 2010-12-07 23:05:20 +0000 |
---|---|---|
committer | Bill Wendling <isanbard@gmail.com> | 2010-12-07 23:05:20 +0000 |
commit | 52e635ea3512cfcd03587201b20100074e5b6ac9 (patch) | |
tree | fec50446d5a3dab2ded29b228c9a2cd7821ab005 | |
parent | 2196caab823d6de2a7713b3e9dbc48b01cba25c8 (diff) | |
download | external_llvm-52e635ea3512cfcd03587201b20100074e5b6ac9.zip external_llvm-52e635ea3512cfcd03587201b20100074e5b6ac9.tar.gz external_llvm-52e635ea3512cfcd03587201b20100074e5b6ac9.tar.bz2 |
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
-rw-r--r-- | lib/Target/ARM/ARMAsmBackend.cpp | 27 |
1 files changed, 14 insertions, 13 deletions
diff --git a/lib/Target/ARM/ARMAsmBackend.cpp b/lib/Target/ARM/ARMAsmBackend.cpp index 7b9e59f..81bc8f1 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; + unsigned NumBytes = 4; // FIXME: 2 for Thumb + Value = adjustFixupValue(Fixup.getKind(), Value); + if (!Value) return; // No need to encode nothing. - 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)); - } + 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, |