mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-05-18 06:38:41 +00:00
add a "MCStreamer::EmitFill" method, and move the default implementation
(which just iteratively emits bytes) to MCStreamer. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@93888 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
f03ffd13f8
commit
ddf6bdde44
@ -168,6 +168,11 @@ namespace llvm {
|
|||||||
/// match a native machine width.
|
/// match a native machine width.
|
||||||
virtual void EmitValue(const MCExpr *Value, unsigned Size) = 0;
|
virtual void EmitValue(const MCExpr *Value, unsigned Size) = 0;
|
||||||
|
|
||||||
|
/// 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 = 0);
|
||||||
|
|
||||||
|
|
||||||
/// EmitValueToAlignment - Emit some number of copies of @param Value until
|
/// EmitValueToAlignment - Emit some number of copies of @param Value until
|
||||||
/// the byte alignment @param ByteAlignment is reached.
|
/// the byte alignment @param ByteAlignment is reached.
|
||||||
///
|
///
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
#include "llvm/MC/MCStreamer.h"
|
#include "llvm/MC/MCStreamer.h"
|
||||||
|
#include "llvm/MC/MCExpr.h"
|
||||||
|
|
||||||
using namespace llvm;
|
using namespace llvm;
|
||||||
|
|
||||||
@ -16,3 +17,11 @@ MCStreamer::MCStreamer(MCContext &_Context) : Context(_Context), CurSection(0) {
|
|||||||
|
|
||||||
MCStreamer::~MCStreamer() {
|
MCStreamer::~MCStreamer() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// 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) {
|
||||||
|
const MCExpr *E = MCConstantExpr::Create(FillValue, getContext());
|
||||||
|
for (uint64_t i = 0, e = NumBytes; i != e; ++i)
|
||||||
|
EmitValue(E, 1);
|
||||||
|
}
|
||||||
|
@ -1041,8 +1041,7 @@ bool AsmParser::ParseDirectiveSpace() {
|
|||||||
return TokError("invalid number of bytes in '.space' directive");
|
return TokError("invalid number of bytes in '.space' directive");
|
||||||
|
|
||||||
// FIXME: Sometimes the fill expr is 'nop' if it isn't supplied, instead of 0.
|
// FIXME: Sometimes the fill expr is 'nop' if it isn't supplied, instead of 0.
|
||||||
for (uint64_t i = 0, e = NumBytes; i != e; ++i)
|
Out.EmitFill(NumBytes, FillExpr);
|
||||||
Out.EmitValue(MCConstantExpr::Create(FillExpr, getContext()), 1);
|
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user