Skip to content

Commit 955c048

Browse files
committed
AArch64MCCodeEmitter: Standardize how fixups are appended
This helper will facilitate future fixup data structure optimizations.
1 parent 43397e5 commit 955c048

File tree

2 files changed

+20
-14
lines changed

2 files changed

+20
-14
lines changed

llvm/lib/Target/AArch64/MCTargetDesc/AArch64AsmBackend.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ namespace {
3131

3232
class AArch64AsmBackend : public MCAsmBackend {
3333
static const unsigned PCRelFlagVal =
34-
MCFixupKindInfo::FKF_IsAlignedDownTo32Bits | MCFixupKindInfo::FKF_IsPCRel;
34+
MCFixupKindInfo::FKF_IsAlignedDownTo32Bits;
35+
3536
protected:
3637
Triple TheTriple;
3738

llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCCodeEmitter.cpp

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,11 @@ class AArch64MCCodeEmitter : public MCCodeEmitter {
223223

224224
} // end anonymous namespace
225225

226+
static void addFixup(SmallVectorImpl<MCFixup> &Fixups, uint32_t Offset,
227+
const MCExpr *Value, uint16_t Kind, bool PCRel = false) {
228+
Fixups.push_back(MCFixup::create(Offset, Value, Kind, PCRel));
229+
}
230+
226231
/// getMachineOpValue - Return binary encoding of operand. If the machine
227232
/// operand requires relocation, record the relocation and return zero.
228233
unsigned
@@ -248,7 +253,7 @@ AArch64MCCodeEmitter::getLdStUImm12OpValue(const MCInst &MI, unsigned OpIdx,
248253
else {
249254
assert(MO.isExpr() && "unable to encode load/store imm operand");
250255
MCFixupKind Kind = MCFixupKind(FixupKind);
251-
Fixups.push_back(MCFixup::create(0, MO.getExpr(), Kind));
256+
addFixup(Fixups, 0, MO.getExpr(), Kind);
252257
++MCNumFixups;
253258
}
254259

@@ -272,7 +277,7 @@ AArch64MCCodeEmitter::getAdrLabelOpValue(const MCInst &MI, unsigned OpIdx,
272277
unsigned Kind = MI.getOpcode() == AArch64::ADR
273278
? AArch64::fixup_aarch64_pcrel_adr_imm21
274279
: AArch64::fixup_aarch64_pcrel_adrp_imm21;
275-
Fixups.push_back(MCFixup::create(0, Expr, Kind, true));
280+
addFixup(Fixups, 0, Expr, Kind, true);
276281
MCNumFixups += 1;
277282
return 0;
278283
}
@@ -299,7 +304,7 @@ AArch64MCCodeEmitter::getAddSubImmOpValue(const MCInst &MI, unsigned OpIdx,
299304

300305
// Encode the 12 bits of the fixup.
301306
MCFixupKind Kind = MCFixupKind(AArch64::fixup_aarch64_add_imm12);
302-
Fixups.push_back(MCFixup::create(0, Expr, Kind));
307+
addFixup(Fixups, 0, Expr, Kind);
303308

304309
++MCNumFixups;
305310

@@ -326,8 +331,8 @@ uint32_t AArch64MCCodeEmitter::getCondBranchTargetOpValue(
326331
return MO.getImm();
327332
assert(MO.isExpr() && "Unexpected target type!");
328333

329-
Fixups.push_back(MCFixup::create(
330-
0, MO.getExpr(), AArch64::fixup_aarch64_pcrel_branch19, true));
334+
addFixup(Fixups, 0, MO.getExpr(), AArch64::fixup_aarch64_pcrel_branch19,
335+
true);
331336
++MCNumFixups;
332337
return 0;
333338
}
@@ -364,8 +369,8 @@ AArch64MCCodeEmitter::getPAuthPCRelOpValue(const MCInst &MI, unsigned OpIdx,
364369
return -(MO.getImm());
365370
assert(MO.isExpr() && "Unexpected target type!");
366371

367-
Fixups.push_back(MCFixup::create(
368-
0, MO.getExpr(), AArch64::fixup_aarch64_pcrel_branch16, true));
372+
addFixup(Fixups, 0, MO.getExpr(), AArch64::fixup_aarch64_pcrel_branch16,
373+
true);
369374
++MCNumFixups;
370375
return 0;
371376
}
@@ -383,8 +388,8 @@ AArch64MCCodeEmitter::getLoadLiteralOpValue(const MCInst &MI, unsigned OpIdx,
383388
return MO.getImm();
384389
assert(MO.isExpr() && "Unexpected target type!");
385390

386-
Fixups.push_back(MCFixup::create(
387-
0, MO.getExpr(), AArch64::fixup_aarch64_ldr_pcrel_imm19, true));
391+
addFixup(Fixups, 0, MO.getExpr(), AArch64::fixup_aarch64_ldr_pcrel_imm19,
392+
true);
388393
++MCNumFixups;
389394
return 0;
390395
}
@@ -428,8 +433,8 @@ uint32_t AArch64MCCodeEmitter::getTestBranchTargetOpValue(
428433
return MO.getImm();
429434
assert(MO.isExpr() && "Unexpected ADR target type!");
430435

431-
Fixups.push_back(MCFixup::create(
432-
0, MO.getExpr(), AArch64::fixup_aarch64_pcrel_branch14, true));
436+
addFixup(Fixups, 0, MO.getExpr(), AArch64::fixup_aarch64_pcrel_branch14,
437+
true);
433438
++MCNumFixups;
434439
return 0;
435440
}
@@ -450,7 +455,7 @@ AArch64MCCodeEmitter::getBranchTargetOpValue(const MCInst &MI, unsigned OpIdx,
450455
unsigned Kind = MI.getOpcode() == AArch64::BL
451456
? AArch64::fixup_aarch64_pcrel_call26
452457
: AArch64::fixup_aarch64_pcrel_branch26;
453-
Fixups.push_back(MCFixup::create(0, MO.getExpr(), Kind, true));
458+
addFixup(Fixups, 0, MO.getExpr(), Kind, true);
454459

455460
++MCNumFixups;
456461

@@ -730,7 +735,7 @@ void AArch64MCCodeEmitter::encodeInstruction(const MCInst &MI,
730735
auto Reloc = STI.getTargetTriple().getEnvironment() == Triple::GNUILP32
731736
? ELF::R_AARCH64_P32_TLSDESC_CALL
732737
: ELF::R_AARCH64_TLSDESC_CALL;
733-
Fixups.push_back(MCFixup::create(0, MI.getOperand(0).getExpr(), Reloc));
738+
addFixup(Fixups, 0, MI.getOperand(0).getExpr(), Reloc);
734739
return;
735740
}
736741

0 commit comments

Comments
 (0)