/// "\t.zero\t" and "\t.space\t". If this is set to null, the
/// Data*bitsDirective's will be used to emit zero bytes.
const char *ZeroDirective; // Defaults to "\t.zero\t"
+ const char *ZeroDirectiveSuffix; // Defaults to ""
/// AsciiDirective - This directive allows emission of an ascii string with
/// the standard C escape characters embedded into it.
/// EmitZeros - Emit a block of zeros.
///
- virtual void EmitZeros(uint64_t NumZeros) const;
+ void EmitZeros(uint64_t NumZeros) const;
/// EmitString - Emit a zero-byte-terminated string constant.
///
InlineAsmStart("#APP\n\t"),
InlineAsmEnd("\t#NO_APP\n"),
ZeroDirective("\t.zero\t"),
+ ZeroDirectiveSuffix(0),
AsciiDirective("\t.ascii\t"),
AscizDirective("\t.asciz\t"),
Data8bitsDirective("\t.byte\t"),
///
void AsmPrinter::EmitZeros(uint64_t NumZeros) const {
if (NumZeros) {
- if (ZeroDirective)
- O << ZeroDirective << NumZeros << "\n";
- else {
+ if (ZeroDirective) {
+ O << ZeroDirective << NumZeros;
+ if (ZeroDirectiveSuffix)
+ O << ZeroDirectiveSuffix;
+ O << "\n";
+ } else {
for (; NumZeros; --NumZeros)
O << Data8bitsDirective << "0\n";
}
GlobalPrefix = "_";
PrivateGlobalPrefix = "$";
AlignDirective = "\talign\t";
- ZeroDirective = 0;
+ ZeroDirective = "\tdb\t";
+ ZeroDirectiveSuffix = " dup(0)";
AsciiDirective = "\tdb\t";
AscizDirective = 0;
Data8bitsDirective = "\t.db\t";
}
}
-void X86IntelAsmPrinter::EmitZeros(uint64_t NumZeros) const {
- if (NumZeros) {
- O << "\tdb " << NumZeros << " dup(0)\n";
- }
-}
-
void X86IntelAsmPrinter::EmitString(const ConstantArray *CVA) const {
unsigned NumElts = CVA->getNumOperands();
if (NumElts) {
bool doFinalization(Module &M);
virtual void SwitchSection(const char *NewSection, const GlobalValue *GV);
- virtual void EmitZeros(uint64_t NumZeros) const;
virtual void EmitString(const ConstantArray *CVA) const;
};