aboutsummaryrefslogtreecommitdiff
path: root/lib/CodeGen/AsmPrinter.cpp
diff options
context:
space:
mode:
authorJeff Cohen <jeffc@jolt-lang.org>2006-05-02 01:16:28 +0000
committerJeff Cohen <jeffc@jolt-lang.org>2006-05-02 01:16:28 +0000
commitc884db47f1a1d5449b749e6528292451e49025e4 (patch)
treeabab26776c6b5c030c18847de91038730f3feddb /lib/CodeGen/AsmPrinter.cpp
parenteff5c3623848152b60457318af8e23df25496449 (diff)
Make Intel syntax mode friendlier to Microsoft ML assembler (still needs more work).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28044 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/AsmPrinter.cpp')
-rw-r--r--lib/CodeGen/AsmPrinter.cpp26
1 files changed, 16 insertions, 10 deletions
diff --git a/lib/CodeGen/AsmPrinter.cpp b/lib/CodeGen/AsmPrinter.cpp
index b28c386788..9e94f7a52f 100644
--- a/lib/CodeGen/AsmPrinter.cpp
+++ b/lib/CodeGen/AsmPrinter.cpp
@@ -372,6 +372,21 @@ static void printAsCString(std::ostream &O, const ConstantArray *CVA,
O << "\"";
}
+/// EmitString - Emit a zero-byte-terminated string constant.
+///
+void AsmPrinter::EmitString(const ConstantArray *CVA) const {
+ unsigned NumElts = CVA->getNumOperands();
+ if (AscizDirective && NumElts &&
+ cast<ConstantInt>(CVA->getOperand(NumElts-1))->getRawValue() == 0) {
+ O << AscizDirective;
+ printAsCString(O, CVA, NumElts-1);
+ } else {
+ O << AsciiDirective;
+ printAsCString(O, CVA, NumElts);
+ }
+ O << "\n";
+}
+
/// EmitGlobalConstant - Print a general LLVM constant to the .s file.
///
void AsmPrinter::EmitGlobalConstant(const Constant *CV) {
@@ -382,16 +397,7 @@ void AsmPrinter::EmitGlobalConstant(const Constant *CV) {
return;
} else if (const ConstantArray *CVA = dyn_cast<ConstantArray>(CV)) {
if (CVA->isString()) {
- unsigned NumElts = CVA->getNumOperands();
- if (AscizDirective && NumElts &&
- cast<ConstantInt>(CVA->getOperand(NumElts-1))->getRawValue() == 0) {
- O << AscizDirective;
- printAsCString(O, CVA, NumElts-1);
- } else {
- O << AsciiDirective;
- printAsCString(O, CVA, NumElts);
- }
- O << "\n";
+ EmitString(CVA);
} else { // Not a string. Print the values in successive locations
for (unsigned i = 0, e = CVA->getNumOperands(); i != e; ++i)
EmitGlobalConstant(CVA->getOperand(i));