Skip to content

Commit 0eec666

Browse files
committed
[MC][mips] Replace setRType## methods by single setRTypes function. NFC
MCELFObjectWriter::setRType## methods are always used altogether to build complete MIPS N64 ABI "chain" of relocations. Using single function for this task makes code less verbose.
1 parent 9aa6792 commit 0eec666

File tree

2 files changed

+17
-44
lines changed

2 files changed

+17
-44
lines changed

llvm/include/llvm/MC/MCELFObjectWriter.h

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -130,14 +130,10 @@ class MCELFObjectTargetWriter : public MCObjectTargetWriter {
130130
}
131131

132132
// N64 relocation type setting
133-
unsigned setRType(unsigned Value, unsigned Type) const {
134-
return ((Type & R_TYPE_MASK) | ((Value & 0xff) << R_TYPE_SHIFT));
135-
}
136-
unsigned setRType2(unsigned Value, unsigned Type) const {
137-
return (Type & R_TYPE2_MASK) | ((Value & 0xff) << R_TYPE2_SHIFT);
138-
}
139-
unsigned setRType3(unsigned Value, unsigned Type) const {
140-
return (Type & R_TYPE3_MASK) | ((Value & 0xff) << R_TYPE3_SHIFT);
133+
static unsigned setRTypes(unsigned Value1, unsigned Value2, unsigned Value3) {
134+
return ((Value1 & 0xff) << R_TYPE_SHIFT) |
135+
((Value2 & 0xff) << R_TYPE2_SHIFT) |
136+
((Value3 & 0xff) << R_TYPE3_SHIFT);
141137
}
142138
unsigned setRSsym(unsigned Value, unsigned Type) const {
143139
return (Type & R_SSYM_MASK) | ((Value & 0xff) << R_SSYM_SHIFT);

llvm/lib/Target/Mips/MCTargetDesc/MipsELFObjectWriter.cpp

Lines changed: 13 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -289,14 +289,9 @@ unsigned MipsELFObjectWriter::getRelocType(MCContext &Ctx,
289289
case FK_TPRel_8:
290290
return ELF::R_MIPS_TLS_TPREL64;
291291
case FK_GPRel_4:
292-
if (is64Bit()) {
293-
unsigned Type = (unsigned)ELF::R_MIPS_NONE;
294-
Type = setRType((unsigned)ELF::R_MIPS_GPREL32, Type);
295-
Type = setRType2((unsigned)ELF::R_MIPS_64, Type);
296-
Type = setRType3((unsigned)ELF::R_MIPS_NONE, Type);
297-
return Type;
298-
}
299-
return ELF::R_MIPS_GPREL32;
292+
return setRTypes(ELF::R_MIPS_GPREL32,
293+
is64Bit() ? ELF::R_MIPS_64 : ELF::R_MIPS_NONE,
294+
ELF::R_MIPS_NONE);
300295
case Mips::fixup_Mips_GPREL16:
301296
return ELF::R_MIPS_GPREL16;
302297
case Mips::fixup_Mips_26:
@@ -329,34 +324,16 @@ unsigned MipsELFObjectWriter::getRelocType(MCContext &Ctx,
329324
return ELF::R_MIPS_GOT_OFST;
330325
case Mips::fixup_Mips_GOT_DISP:
331326
return ELF::R_MIPS_GOT_DISP;
332-
case Mips::fixup_Mips_GPOFF_HI: {
333-
unsigned Type = (unsigned)ELF::R_MIPS_NONE;
334-
Type = setRType((unsigned)ELF::R_MIPS_GPREL16, Type);
335-
Type = setRType2((unsigned)ELF::R_MIPS_SUB, Type);
336-
Type = setRType3((unsigned)ELF::R_MIPS_HI16, Type);
337-
return Type;
338-
}
339-
case Mips::fixup_MICROMIPS_GPOFF_HI: {
340-
unsigned Type = (unsigned)ELF::R_MIPS_NONE;
341-
Type = setRType((unsigned)ELF::R_MICROMIPS_GPREL16, Type);
342-
Type = setRType2((unsigned)ELF::R_MICROMIPS_SUB, Type);
343-
Type = setRType3((unsigned)ELF::R_MICROMIPS_HI16, Type);
344-
return Type;
345-
}
346-
case Mips::fixup_Mips_GPOFF_LO: {
347-
unsigned Type = (unsigned)ELF::R_MIPS_NONE;
348-
Type = setRType((unsigned)ELF::R_MIPS_GPREL16, Type);
349-
Type = setRType2((unsigned)ELF::R_MIPS_SUB, Type);
350-
Type = setRType3((unsigned)ELF::R_MIPS_LO16, Type);
351-
return Type;
352-
}
353-
case Mips::fixup_MICROMIPS_GPOFF_LO: {
354-
unsigned Type = (unsigned)ELF::R_MIPS_NONE;
355-
Type = setRType((unsigned)ELF::R_MICROMIPS_GPREL16, Type);
356-
Type = setRType2((unsigned)ELF::R_MICROMIPS_SUB, Type);
357-
Type = setRType3((unsigned)ELF::R_MICROMIPS_LO16, Type);
358-
return Type;
359-
}
327+
case Mips::fixup_Mips_GPOFF_HI:
328+
return setRTypes(ELF::R_MIPS_GPREL16, ELF::R_MIPS_SUB, ELF::R_MIPS_HI16);
329+
case Mips::fixup_MICROMIPS_GPOFF_HI:
330+
return setRTypes(ELF::R_MICROMIPS_GPREL16, ELF::R_MICROMIPS_SUB,
331+
ELF::R_MICROMIPS_HI16);
332+
case Mips::fixup_Mips_GPOFF_LO:
333+
return setRTypes(ELF::R_MIPS_GPREL16, ELF::R_MIPS_SUB, ELF::R_MIPS_LO16);
334+
case Mips::fixup_MICROMIPS_GPOFF_LO:
335+
return setRTypes(ELF::R_MICROMIPS_GPREL16, ELF::R_MICROMIPS_SUB,
336+
ELF::R_MICROMIPS_LO16);
360337
case Mips::fixup_Mips_HIGHER:
361338
return ELF::R_MIPS_HIGHER;
362339
case Mips::fixup_Mips_HIGHEST:

0 commit comments

Comments
 (0)