@@ -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.
228233unsigned
@@ -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