[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