diff options
| author | Rui Ueyama <ruiu@google.com> | 2015-03-31 18:15:05 +0000 |
|---|---|---|
| committer | Rui Ueyama <ruiu@google.com> | 2015-03-31 18:15:05 +0000 |
| commit | 6814d4f52de3fb1b6f76cb49ba1c900fafb5a32d (patch) | |
| tree | 1fbae9bfd33060dbe7a44b3d9735ba8bd96bd6e3 /lld/lib/ReaderWriter/ELF/Hexagon/HexagonRelocationFunctions.h | |
| parent | ace9717a9b4a01900282b061ff9f77bd004f434a (diff) | |
| download | bcm5719-llvm-6814d4f52de3fb1b6f76cb49ba1c900fafb5a32d.tar.gz bcm5719-llvm-6814d4f52de3fb1b6f76cb49ba1c900fafb5a32d.zip | |
ELF: Replace a macro with an inlined function.
FINDV4BITMASK macro is defined as a macro so that the macro body is inlined.
We should use inlined functions instead of macros.
llvm-svn: 233719
Diffstat (limited to 'lld/lib/ReaderWriter/ELF/Hexagon/HexagonRelocationFunctions.h')
| -rw-r--r-- | lld/lib/ReaderWriter/ELF/Hexagon/HexagonRelocationFunctions.h | 25 |
1 files changed, 11 insertions, 14 deletions
diff --git a/lld/lib/ReaderWriter/ELF/Hexagon/HexagonRelocationFunctions.h b/lld/lib/ReaderWriter/ELF/Hexagon/HexagonRelocationFunctions.h index 2b9e25ce363..6bc6db28d9e 100644 --- a/lld/lib/ReaderWriter/ELF/Hexagon/HexagonRelocationFunctions.h +++ b/lld/lib/ReaderWriter/ELF/Hexagon/HexagonRelocationFunctions.h @@ -6,9 +6,13 @@ // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// + #ifndef LLD_READER_WRITER_ELF_HEXAGON_HEXAGON_RELOCATION_FUNCTIONS_H #define LLD_READER_WRITER_ELF_HEXAGON_HEXAGON_RELOCATION_FUNCTIONS_H +#include "llvm/ADT/STLExtras.h" +#include "llvm/Support/Endian.h" + namespace lld { namespace elf { @@ -22,23 +26,16 @@ typedef struct { #include "HexagonEncodings.h" -#define FINDV4BITMASK(INSN) \ - findBitMask((uint32_t) * ((llvm::support::ulittle32_t *) INSN), \ - insn_encodings, \ - sizeof(insn_encodings) / sizeof(Instruction)) - /// \brief finds the scatter Bits that need to be used to apply relocations -inline uint32_t -findBitMask(uint32_t insn, Instruction *encodings, int32_t numInsns) { - for (int32_t i = 0; i < numInsns; i++) { - if (((insn & 0xc000) == 0) && !(encodings[i].isDuplex)) +inline uint32_t findv4bitmask(uint8_t *location) { + uint32_t insn = llvm::support::endian::read32le(location); + for (int32_t i = 0, e = llvm::array_lengthof(insn_encodings); i < e; i++) { + if (((insn & 0xc000) == 0) && !(insn_encodings[i].isDuplex)) continue; - - if (((insn & 0xc000) != 0) && (encodings[i].isDuplex)) + if (((insn & 0xc000) != 0) && (insn_encodings[i].isDuplex)) continue; - - if (((encodings[i].insnMask) & insn) == encodings[i].insnCmpMask) - return encodings[i].insnBitMask; + if (((insn_encodings[i].insnMask) & insn) == insn_encodings[i].insnCmpMask) + return insn_encodings[i].insnBitMask; } llvm_unreachable("found unknown instruction"); } |

