summaryrefslogtreecommitdiffstats
path: root/lld/lib/ReaderWriter/ELF/Hexagon/HexagonRelocationFunctions.h
diff options
context:
space:
mode:
authorRui Ueyama <ruiu@google.com>2015-03-31 18:15:05 +0000
committerRui Ueyama <ruiu@google.com>2015-03-31 18:15:05 +0000
commit6814d4f52de3fb1b6f76cb49ba1c900fafb5a32d (patch)
tree1fbae9bfd33060dbe7a44b3d9735ba8bd96bd6e3 /lld/lib/ReaderWriter/ELF/Hexagon/HexagonRelocationFunctions.h
parentace9717a9b4a01900282b061ff9f77bd004f434a (diff)
downloadbcm5719-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.h25
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");
}
OpenPOWER on IntegriCloud