mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-04-16 20:40:16 +00:00
add a new EmitIntValue method that MCStreamer impls can optionally define
and that clients can use. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@93923 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
bafbbdde38
commit
32ae3fe0ba
@ -169,6 +169,10 @@ namespace llvm {
|
||||
virtual void EmitValue(const MCExpr *Value, unsigned Size,
|
||||
unsigned AddrSpace) = 0;
|
||||
|
||||
/// EmitIntValue - Special case of EmitValue that avoids the client having
|
||||
/// to pass in a MCExpr for constant integers.
|
||||
virtual void EmitIntValue(uint64_t Value, unsigned Size,unsigned AddrSpace);
|
||||
|
||||
/// EmitFill - Emit NumBytes bytes worth of the value specified by
|
||||
/// FillValue. This implements directives such as '.space'.
|
||||
virtual void EmitFill(uint64_t NumBytes, uint8_t FillValue,
|
||||
|
@ -61,6 +61,8 @@ public:
|
||||
virtual void EmitBytes(StringRef Data, unsigned AddrSpace);
|
||||
|
||||
virtual void EmitValue(const MCExpr *Value, unsigned Size,unsigned AddrSpace);
|
||||
virtual void EmitIntValue(uint64_t Value, unsigned Size, unsigned AddrSpace);
|
||||
|
||||
virtual void EmitFill(uint64_t NumBytes, uint8_t FillValue,
|
||||
unsigned AddrSpace);
|
||||
|
||||
@ -187,19 +189,40 @@ void MCAsmStreamer::EmitBytes(StringRef Data, unsigned AddrSpace) {
|
||||
OS << Directive << (unsigned)(unsigned char)Data[i] << '\n';
|
||||
}
|
||||
|
||||
/// EmitIntValue - Special case of EmitValue that avoids the client having
|
||||
/// to pass in a MCExpr for constant integers.
|
||||
void MCAsmStreamer::EmitIntValue(uint64_t Value, unsigned Size,
|
||||
unsigned AddrSpace) {
|
||||
assert(CurSection && "Cannot emit contents before setting section!");
|
||||
// Need target hooks to know how to print this.
|
||||
const char *Directive = 0;
|
||||
switch (Size) {
|
||||
default: break;
|
||||
case 1: Directive = MAI.getData8bitsDirective(AddrSpace); break;
|
||||
case 2: Directive = MAI.getData16bitsDirective(AddrSpace); break;
|
||||
case 4: Directive = MAI.getData32bitsDirective(AddrSpace); break;
|
||||
case 8: Directive = MAI.getData64bitsDirective(AddrSpace); break;
|
||||
}
|
||||
|
||||
assert(Directive && "Invalid size for machine code value!");
|
||||
OS << Directive << truncateToSize(Value, Size) << '\n';
|
||||
}
|
||||
|
||||
void MCAsmStreamer::EmitValue(const MCExpr *Value, unsigned Size,
|
||||
unsigned AddrSpace) {
|
||||
assert(CurSection && "Cannot emit contents before setting section!");
|
||||
// Need target hooks to know how to print this.
|
||||
const char *Directive = 0;
|
||||
switch (Size) {
|
||||
default: assert(0 && "Invalid size for machine code value!");
|
||||
case 1: OS << MAI.getData8bitsDirective(AddrSpace); break;
|
||||
case 2: OS << MAI.getData16bitsDirective(AddrSpace); break;
|
||||
case 4: OS << MAI.getData32bitsDirective(AddrSpace); break;
|
||||
case 8: OS << MAI.getData64bitsDirective(AddrSpace); break;
|
||||
default: break;
|
||||
case 1: Directive = MAI.getData8bitsDirective(AddrSpace); break;
|
||||
case 2: Directive = MAI.getData16bitsDirective(AddrSpace); break;
|
||||
case 4: Directive = MAI.getData32bitsDirective(AddrSpace); break;
|
||||
case 8: Directive = MAI.getData64bitsDirective(AddrSpace); break;
|
||||
}
|
||||
|
||||
OS << *truncateToSize(Value, Size) << '\n';
|
||||
assert(Directive && "Invalid size for machine code value!");
|
||||
OS << Directive << *truncateToSize(Value, Size) << '\n';
|
||||
}
|
||||
|
||||
/// EmitFill - Emit NumBytes bytes worth of the value specified by
|
||||
|
@ -18,6 +18,13 @@ MCStreamer::MCStreamer(MCContext &_Context) : Context(_Context), CurSection(0) {
|
||||
MCStreamer::~MCStreamer() {
|
||||
}
|
||||
|
||||
/// EmitIntValue - Special case of EmitValue that avoids the client having to
|
||||
/// pass in a MCExpr for constant integers.
|
||||
void MCStreamer::EmitIntValue(uint64_t Value, unsigned Size,
|
||||
unsigned AddrSpace) {
|
||||
EmitValue(MCConstantExpr::Create(Value, getContext()), Size, AddrSpace);
|
||||
}
|
||||
|
||||
/// EmitFill - Emit NumBytes bytes worth of the value specified by
|
||||
/// FillValue. This implements directives such as '.space'.
|
||||
void MCStreamer::EmitFill(uint64_t NumBytes, uint8_t FillValue,
|
||||
|
Loading…
x
Reference in New Issue
Block a user