[lld] r233719 - ELF: Replace a macro with an inlined function.
Rui Ueyama
ruiu at google.com
Tue Mar 31 11:15:05 PDT 2015
Author: ruiu
Date: Tue Mar 31 13:15:05 2015
New Revision: 233719
URL: http://llvm.org/viewvc/llvm-project?rev=233719&view=rev
Log:
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.
Modified:
lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonRelocationFunctions.h
lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonRelocationHandler.cpp
Modified: lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonRelocationFunctions.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonRelocationFunctions.h?rev=233719&r1=233718&r2=233719&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonRelocationFunctions.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonRelocationFunctions.h Tue Mar 31 13:15:05 2015
@@ -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");
}
Modified: lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonRelocationHandler.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonRelocationHandler.cpp?rev=233719&r1=233718&r2=233719&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonRelocationHandler.cpp (original)
+++ lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonRelocationHandler.cpp Tue Mar 31 13:15:05 2015
@@ -26,7 +26,7 @@ static int relocBNPCREL(uint8_t *locatio
int32_t result = (uint32_t)(((S + A) - P) >> 2);
int32_t range = 1 << nBits;
if (result < range && result > -range) {
- result = lld::scatterBits<int32_t>(result, FINDV4BITMASK(location));
+ result = lld::scatterBits<int32_t>(result, findv4bitmask(location));
APPLY_RELOC(result);
return 0;
}
@@ -81,7 +81,7 @@ static int relocHexBNPCRELX(uint8_t *loc
int32_t result = ((S + A - P) & 0x3f);
int32_t range = 1 << nbits;
if (result < range && result > -range) {
- result = lld::scatterBits<int32_t>(result, FINDV4BITMASK(location));
+ result = lld::scatterBits<int32_t>(result, findv4bitmask(location));
APPLY_RELOC(result);
return 0;
}
@@ -92,7 +92,7 @@ static int relocHexBNPCRELX(uint8_t *loc
static int relocHex6PCRELX(uint8_t *location, uint64_t P, uint64_t S,
uint64_t A) {
int32_t result = (S + A - P);
- result = lld::scatterBits<int32_t>(result, FINDV4BITMASK(location));
+ result = lld::scatterBits<int32_t>(result, findv4bitmask(location));
APPLY_RELOC(result);
return 0;
}
@@ -100,7 +100,7 @@ static int relocHex6PCRELX(uint8_t *loca
// R_HEX_N_X : Word32_U6 : (S + A) : Unsigned Truncate
static int relocHex_N_X(uint8_t *location, uint64_t P, uint64_t S, uint64_t A) {
uint32_t result = (S + A);
- result = lld::scatterBits<uint32_t>(result, FINDV4BITMASK(location));
+ result = lld::scatterBits<uint32_t>(result, findv4bitmask(location));
APPLY_RELOC(result);
return 0;
}
@@ -111,7 +111,7 @@ static int relocHexGPRELN(uint8_t *locat
int32_t result = (int64_t)((S + A - GP) >> nShiftBits);
int32_t range = 1L << 16;
if (result <= range) {
- result = lld::scatterBits<uint32_t>(result, FINDV4BITMASK(location));
+ result = lld::scatterBits<uint32_t>(result, findv4bitmask(location));
APPLY_RELOC(result);
return 0;
}
@@ -146,7 +146,7 @@ static int relocHexGOT16(uint8_t *locati
int32_t result = (int32_t)(GOT-A);
int32_t range = 1L << 16;
if (result <= range) {
- result = lld::scatterBits<int32_t>(result, FINDV4BITMASK(location));
+ result = lld::scatterBits<int32_t>(result, findv4bitmask(location));
APPLY_RELOC(result);
return 0;
}
@@ -155,7 +155,7 @@ static int relocHexGOT16(uint8_t *locati
static int relocHexGOT32_6_X(uint8_t *location, uint64_t A, uint64_t GOT) {
int32_t result = (int32_t)((A-GOT) >> 6);
- result = lld::scatterBits<int32_t>(result, FINDV4BITMASK(location));
+ result = lld::scatterBits<int32_t>(result, findv4bitmask(location));
APPLY_RELOC(result);
return 0;
}
@@ -164,7 +164,7 @@ static int relocHexGOT16_X(uint8_t *loca
int32_t result = (int32_t)(A-GOT);
int32_t range = 1L << 6;
if (result <= range) {
- result = lld::scatterBits<int32_t>(result, FINDV4BITMASK(location));
+ result = lld::scatterBits<int32_t>(result, findv4bitmask(location));
APPLY_RELOC(result);
return 0;
}
@@ -173,7 +173,7 @@ static int relocHexGOT16_X(uint8_t *loca
static int relocHexGOT11_X(uint8_t *location, uint64_t A, uint64_t GOT) {
uint32_t result = (uint32_t)(A-GOT);
- result = lld::scatterBits<uint32_t>(result, FINDV4BITMASK(location));
+ result = lld::scatterBits<uint32_t>(result, findv4bitmask(location));
APPLY_RELOC(result);
return 0;
}
@@ -181,7 +181,7 @@ static int relocHexGOT11_X(uint8_t *loca
static int relocHexGOTRELSigned(uint8_t *location, uint64_t P, uint64_t S,
uint64_t A, uint64_t GOT, int shiftBits = 0) {
int32_t result = (int32_t)((S + A - GOT) >> shiftBits);
- result = lld::scatterBits<int32_t>(result, FINDV4BITMASK(location));
+ result = lld::scatterBits<int32_t>(result, findv4bitmask(location));
APPLY_RELOC(result);
return 0;
}
@@ -189,7 +189,7 @@ static int relocHexGOTRELSigned(uint8_t
static int relocHexGOTRELUnsigned(uint8_t *location, uint64_t P, uint64_t S,
uint64_t A, uint64_t GOT, int shiftBits = 0) {
uint32_t result = (uint32_t)((S + A - GOT) >> shiftBits);
- result = lld::scatterBits<uint32_t>(result, FINDV4BITMASK(location));
+ result = lld::scatterBits<uint32_t>(result, findv4bitmask(location));
APPLY_RELOC(result);
return 0;
}
More information about the llvm-commits
mailing list