@@ -223,6 +223,11 @@ class AArch64MCCodeEmitter : public MCCodeEmitter {
223
223
224
224
} // end anonymous namespace
225
225
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
+
226
231
// / getMachineOpValue - Return binary encoding of operand. If the machine
227
232
// / operand requires relocation, record the relocation and return zero.
228
233
unsigned
@@ -248,7 +253,7 @@ AArch64MCCodeEmitter::getLdStUImm12OpValue(const MCInst &MI, unsigned OpIdx,
248
253
else {
249
254
assert (MO.isExpr () && " unable to encode load/store imm operand" );
250
255
MCFixupKind Kind = MCFixupKind (FixupKind);
251
- Fixups. push_back ( MCFixup::create ( 0 , MO.getExpr (), Kind) );
256
+ addFixup (Fixups, 0 , MO.getExpr (), Kind);
252
257
++MCNumFixups;
253
258
}
254
259
@@ -272,7 +277,7 @@ AArch64MCCodeEmitter::getAdrLabelOpValue(const MCInst &MI, unsigned OpIdx,
272
277
unsigned Kind = MI.getOpcode () == AArch64::ADR
273
278
? AArch64::fixup_aarch64_pcrel_adr_imm21
274
279
: AArch64::fixup_aarch64_pcrel_adrp_imm21;
275
- Fixups. push_back ( MCFixup::create ( 0 , Expr, Kind, true ) );
280
+ addFixup (Fixups, 0 , Expr, Kind, true );
276
281
MCNumFixups += 1 ;
277
282
return 0 ;
278
283
}
@@ -299,7 +304,7 @@ AArch64MCCodeEmitter::getAddSubImmOpValue(const MCInst &MI, unsigned OpIdx,
299
304
300
305
// Encode the 12 bits of the fixup.
301
306
MCFixupKind Kind = MCFixupKind (AArch64::fixup_aarch64_add_imm12);
302
- Fixups. push_back ( MCFixup::create ( 0 , Expr, Kind) );
307
+ addFixup (Fixups, 0 , Expr, Kind);
303
308
304
309
++MCNumFixups;
305
310
@@ -326,8 +331,8 @@ uint32_t AArch64MCCodeEmitter::getCondBranchTargetOpValue(
326
331
return MO.getImm ();
327
332
assert (MO.isExpr () && " Unexpected target type!" );
328
333
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 );
331
336
++MCNumFixups;
332
337
return 0 ;
333
338
}
@@ -364,8 +369,8 @@ AArch64MCCodeEmitter::getPAuthPCRelOpValue(const MCInst &MI, unsigned OpIdx,
364
369
return -(MO.getImm ());
365
370
assert (MO.isExpr () && " Unexpected target type!" );
366
371
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 );
369
374
++MCNumFixups;
370
375
return 0 ;
371
376
}
@@ -383,8 +388,8 @@ AArch64MCCodeEmitter::getLoadLiteralOpValue(const MCInst &MI, unsigned OpIdx,
383
388
return MO.getImm ();
384
389
assert (MO.isExpr () && " Unexpected target type!" );
385
390
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 );
388
393
++MCNumFixups;
389
394
return 0 ;
390
395
}
@@ -428,8 +433,8 @@ uint32_t AArch64MCCodeEmitter::getTestBranchTargetOpValue(
428
433
return MO.getImm ();
429
434
assert (MO.isExpr () && " Unexpected ADR target type!" );
430
435
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 );
433
438
++MCNumFixups;
434
439
return 0 ;
435
440
}
@@ -450,7 +455,7 @@ AArch64MCCodeEmitter::getBranchTargetOpValue(const MCInst &MI, unsigned OpIdx,
450
455
unsigned Kind = MI.getOpcode () == AArch64::BL
451
456
? AArch64::fixup_aarch64_pcrel_call26
452
457
: AArch64::fixup_aarch64_pcrel_branch26;
453
- Fixups. push_back ( MCFixup::create ( 0 , MO.getExpr (), Kind, true ) );
458
+ addFixup (Fixups, 0 , MO.getExpr (), Kind, true );
454
459
455
460
++MCNumFixups;
456
461
@@ -730,7 +735,7 @@ void AArch64MCCodeEmitter::encodeInstruction(const MCInst &MI,
730
735
auto Reloc = STI.getTargetTriple ().getEnvironment () == Triple::GNUILP32
731
736
? ELF::R_AARCH64_P32_TLSDESC_CALL
732
737
: 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);
734
739
return ;
735
740
}
736
741
0 commit comments