Contrary to ELF, we don't add any markers that distinguish data generated with .long from normal instructions, so the .inst directive only adds compatibility with assembly that uses it. Differential Revision: https://reviews.llvm.org/D49935 llvm-svn: 338355
55 lines
1.8 KiB
C++
55 lines
1.8 KiB
C++
//===- AArch64TargetStreamer.cpp - AArch64TargetStreamer class ------------===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file implements the AArch64TargetStreamer class.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "AArch64TargetStreamer.h"
|
|
#include "llvm/MC/ConstantPools.h"
|
|
|
|
using namespace llvm;
|
|
|
|
//
|
|
// AArch64TargetStreamer Implemenation
|
|
//
|
|
AArch64TargetStreamer::AArch64TargetStreamer(MCStreamer &S)
|
|
: MCTargetStreamer(S), ConstantPools(new AssemblerConstantPools()) {}
|
|
|
|
AArch64TargetStreamer::~AArch64TargetStreamer() = default;
|
|
|
|
// The constant pool handling is shared by all AArch64TargetStreamer
|
|
// implementations.
|
|
const MCExpr *AArch64TargetStreamer::addConstantPoolEntry(const MCExpr *Expr,
|
|
unsigned Size,
|
|
SMLoc Loc) {
|
|
return ConstantPools->addEntry(Streamer, Expr, Size, Loc);
|
|
}
|
|
|
|
void AArch64TargetStreamer::emitCurrentConstantPool() {
|
|
ConstantPools->emitForCurrentSection(Streamer);
|
|
}
|
|
|
|
// finish() - write out any non-empty assembler constant pools.
|
|
void AArch64TargetStreamer::finish() { ConstantPools->emitAll(Streamer); }
|
|
|
|
void AArch64TargetStreamer::emitInst(uint32_t Inst) {
|
|
char Buffer[4];
|
|
|
|
// We can't just use EmitIntValue here, as that will swap the
|
|
// endianness on big-endian systems (instructions are always
|
|
// little-endian).
|
|
for (unsigned I = 0; I < 4; ++I) {
|
|
Buffer[I] = uint8_t(Inst);
|
|
Inst >>= 8;
|
|
}
|
|
|
|
getStreamer().EmitBytes(StringRef(Buffer, 4));
|
|
}
|