forked from OSchip/llvm-project
add an MCAsmStreamer::EmitFill specialization of EmitFill that
emits one directive instead of N. Not doing this would be a significant regression on the # bytes generated by .fill. llvm-svn: 93889
This commit is contained in:
parent
0c65fd4902
commit
4340cb3246
|
@ -61,6 +61,7 @@ public:
|
|||
virtual void EmitBytes(StringRef Data);
|
||||
|
||||
virtual void EmitValue(const MCExpr *Value, unsigned Size);
|
||||
virtual void EmitFill(uint64_t NumBytes, uint8_t FillValue);
|
||||
|
||||
virtual void EmitValueToAlignment(unsigned ByteAlignment, int64_t Value = 0,
|
||||
unsigned ValueSize = 1,
|
||||
|
@ -199,6 +200,20 @@ void MCAsmStreamer::EmitValue(const MCExpr *Value, unsigned Size) {
|
|||
OS << ' ' << *truncateToSize(Value, Size) << '\n';
|
||||
}
|
||||
|
||||
/// EmitFill - Emit NumBytes bytes worth of the value specified by
|
||||
/// FillValue. This implements directives such as '.space'.
|
||||
void MCAsmStreamer::EmitFill(uint64_t NumBytes, uint8_t FillValue) {
|
||||
if (const char *ZeroDirective = MAI.getZeroDirective()) {
|
||||
OS << ZeroDirective << NumBytes;
|
||||
if (FillValue != 0)
|
||||
OS << ',' << (int)FillValue;
|
||||
OS << '\n';
|
||||
} else {
|
||||
// Emit a byte at a time.
|
||||
MCStreamer::EmitFill(NumBytes, FillValue);
|
||||
}
|
||||
}
|
||||
|
||||
void MCAsmStreamer::EmitValueToAlignment(unsigned ByteAlignment, int64_t Value,
|
||||
unsigned ValueSize,
|
||||
unsigned MaxBytesToEmit) {
|
||||
|
|
|
@ -1,12 +1,11 @@
|
|||
# RUN: llvm-mc -triple i386-unknown-unknown %s | FileCheck %s
|
||||
# RUN: llvm-mc -triple i386-apple-darwin %s | FileCheck %s
|
||||
|
||||
# CHECK: TEST0:
|
||||
# CHECK: .byte 0
|
||||
# CHECK: .space 1
|
||||
TEST0:
|
||||
.space 1
|
||||
|
||||
# CHECK: TEST1:
|
||||
# CHECK: .byte 3
|
||||
# CHECK: .byte 3
|
||||
# CHECK: .space 2,3
|
||||
TEST1:
|
||||
.space 2, 3
|
||||
|
|
Loading…
Reference in New Issue