//
//===----------------------------------------------------------------------===//
+#include "llvm/MC/MCAsmInfo.h"
#include "llvm/MC/MCContext.h"
#include "llvm/MC/MCStreamer.h"
#include "llvm/MC/MCExpr.h"
/// pass in a MCExpr for constant integers.
void MCStreamer::EmitIntValue(uint64_t Value, unsigned Size,
unsigned AddrSpace) {
- assert(Size <= 8);
+ assert(Size <= 8 && "Invalid size");
+ assert(!(Size == 1 && (signed)Value > 255) && "Invalid size");
char buf[8];
// FIXME: Endianness assumption.
for (unsigned i = 0; i != Size; ++i)
EmitBytes(OSE.str(), AddrSpace);
}
-void MCStreamer::EmitAbsValue(const MCExpr *Value, unsigned Size) {
+void MCStreamer::EmitAbsValue(const MCExpr *Value, unsigned Size,
+ unsigned AddrSpace) {
+ if (!getContext().getAsmInfo().needsSetToChangeDiffSize()) {
+ EmitValue(Value, Size, AddrSpace);
+ return;
+ }
MCSymbol *ABS = getContext().CreateTempSymbol();
EmitAssignment(ABS, Value);
- EmitSymbolValue(ABS, Size, 0);
+ EmitSymbolValue(ABS, Size, AddrSpace);
}
void MCStreamer::EmitSymbolValue(const MCSymbol *Sym, unsigned Size,