forked from OSchip/llvm-project
[LLVM][AVR] Support for R_AVR_6 fixup
Summary: Handle the emission of `R_AVR_6` ELF relocation type. Reviewers: dylanmckay Reviewed By: dylanmckay Subscribers: hiraditya, Jim, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D78721 Patch by @LemonBoy https://reviews.llvm.org/p/LemonBoy/
This commit is contained in:
parent
1420f4efbe
commit
1335737ee1
|
@ -141,6 +141,18 @@ static void fixup_13_pcrel(unsigned Size, const MCFixup &Fixup, uint64_t &Value,
|
|||
Value &= 0xfff;
|
||||
}
|
||||
|
||||
/// 6-bit fixup for the immediate operand of the STD/LDD family of
|
||||
/// instructions.
|
||||
///
|
||||
/// Resolves to:
|
||||
/// 10q0 qq10 0000 1qqq
|
||||
static void fixup_6(const MCFixup &Fixup, uint64_t &Value,
|
||||
MCContext *Ctx = nullptr) {
|
||||
unsigned_width(6, Value, std::string("immediate"), Fixup, Ctx);
|
||||
|
||||
Value = ((Value & 0x20) << 8) | ((Value & 0x18) << 7) | (Value & 0x07);
|
||||
}
|
||||
|
||||
/// 6-bit fixup for the immediate operand of the ADIW family of
|
||||
/// instructions.
|
||||
///
|
||||
|
@ -336,6 +348,9 @@ void AVRAsmBackend::adjustFixupValue(const MCFixup &Fixup,
|
|||
Value &= 0xffff;
|
||||
break;
|
||||
|
||||
case AVR::fixup_6:
|
||||
adjust::fixup_6(Fixup, Value, Ctx);
|
||||
break;
|
||||
case AVR::fixup_6_adiw:
|
||||
adjust::fixup_6_adiw(Fixup, Value, Ctx);
|
||||
break;
|
||||
|
|
|
@ -9,6 +9,9 @@ bar:
|
|||
; CHECK: R_AVR_LDI SYMBOL+0x3
|
||||
ldi r21, SYMBOL+3
|
||||
|
||||
; CHECK: R_AVR_6 SYMBOL+0x4
|
||||
ldd r8, Y+SYMBOL+4
|
||||
|
||||
; CHECK-NEXT: R_AVR_6_ADIW FOO
|
||||
adiw r24, FOO
|
||||
|
||||
|
|
Loading…
Reference in New Issue