diff --git a/llvm/lib/Target/AVR/MCTargetDesc/AVRMCCodeEmitter.cpp b/llvm/lib/Target/AVR/MCTargetDesc/AVRMCCodeEmitter.cpp --- a/llvm/lib/Target/AVR/MCTargetDesc/AVRMCCodeEmitter.cpp +++ b/llvm/lib/Target/AVR/MCTargetDesc/AVRMCCodeEmitter.cpp @@ -25,6 +25,7 @@ #include "llvm/MC/MCRegisterInfo.h" #include "llvm/MC/MCSubtargetInfo.h" #include "llvm/Support/Casting.h" +#include "llvm/Support/EndianStream.h" #include "llvm/Support/raw_ostream.h" #define DEBUG_TYPE "mccodeemitter" @@ -268,14 +269,11 @@ void AVRMCCodeEmitter::emitInstruction(uint64_t Val, unsigned Size, const MCSubtargetInfo &STI, raw_ostream &OS) const { - const uint16_t *Words = reinterpret_cast(&Val); size_t WordCount = Size / 2; for (int64_t i = WordCount - 1; i >= 0; --i) { - uint16_t Word = Words[i]; - - OS << (uint8_t) ((Word & 0x00ff) >> 0); - OS << (uint8_t) ((Word & 0xff00) >> 8); + uint16_t Word = (Val >> (i * 16)) & 0xFFFF; + support::endian::write(OS, Word, support::endianness::little); } }