diff options
| author | Dylan McKay <me@dylanmckay.io> | 2017-04-30 23:33:52 +0000 |
|---|---|---|
| committer | Dylan McKay <me@dylanmckay.io> | 2017-04-30 23:33:52 +0000 |
| commit | 2e8718bcbb9ee54a0a8f492782d86dc49c96a344 (patch) | |
| tree | 6a4423deaa8320bb76601acdb5058cf4992e67ed /llvm/lib/Target/AVR/MCTargetDesc | |
| parent | ad13826aea229cbafa2093a5069c4c6335299736 (diff) | |
| download | bcm5719-llvm-2e8718bcbb9ee54a0a8f492782d86dc49c96a344.tar.gz bcm5719-llvm-2e8718bcbb9ee54a0a8f492782d86dc49c96a344.zip | |
[AVR] Fix a bug so that we now emit R_AVR_16 fixups with the correct offset
Before this, the LDS/STS instructions would have their opcodes
overwritten while linking.
llvm-svn: 301782
Diffstat (limited to 'llvm/lib/Target/AVR/MCTargetDesc')
| -rw-r--r-- | llvm/lib/Target/AVR/MCTargetDesc/AVRMCCodeEmitter.cpp | 4 | ||||
| -rw-r--r-- | llvm/lib/Target/AVR/MCTargetDesc/AVRMCCodeEmitter.h | 3 |
2 files changed, 4 insertions, 3 deletions
diff --git a/llvm/lib/Target/AVR/MCTargetDesc/AVRMCCodeEmitter.cpp b/llvm/lib/Target/AVR/MCTargetDesc/AVRMCCodeEmitter.cpp index c3d43ebb407..4dbbce8c205 100644 --- a/llvm/lib/Target/AVR/MCTargetDesc/AVRMCCodeEmitter.cpp +++ b/llvm/lib/Target/AVR/MCTargetDesc/AVRMCCodeEmitter.cpp @@ -177,7 +177,7 @@ unsigned AVRMCCodeEmitter::encodeComplement(const MCInst &MI, unsigned OpNo, return (~0) - Imm; } -template <AVR::Fixups Fixup> +template <AVR::Fixups Fixup, unsigned Offset> unsigned AVRMCCodeEmitter::encodeImm(const MCInst &MI, unsigned OpNo, SmallVectorImpl<MCFixup> &Fixups, const MCSubtargetInfo &STI) const { @@ -193,7 +193,7 @@ unsigned AVRMCCodeEmitter::encodeImm(const MCInst &MI, unsigned OpNo, } MCFixupKind FixupKind = static_cast<MCFixupKind>(Fixup); - Fixups.push_back(MCFixup::create(0, MO.getExpr(), FixupKind, MI.getLoc())); + Fixups.push_back(MCFixup::create(Offset, MO.getExpr(), FixupKind, MI.getLoc())); return 0; } diff --git a/llvm/lib/Target/AVR/MCTargetDesc/AVRMCCodeEmitter.h b/llvm/lib/Target/AVR/MCTargetDesc/AVRMCCodeEmitter.h index 4cee8d904c9..883abf8db78 100644 --- a/llvm/lib/Target/AVR/MCTargetDesc/AVRMCCodeEmitter.h +++ b/llvm/lib/Target/AVR/MCTargetDesc/AVRMCCodeEmitter.h @@ -69,7 +69,8 @@ private: const MCSubtargetInfo &STI) const; /// Encodes an immediate value with a given fixup. - template <AVR::Fixups Fixup> + /// \tparam Offset The offset into the instruction for the fixup. + template <AVR::Fixups Fixup, unsigned Offset> unsigned encodeImm(const MCInst &MI, unsigned OpNo, SmallVectorImpl<MCFixup> &Fixups, const MCSubtargetInfo &STI) const; |

