summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorJack Carter <jcarter@mips.com>2012-06-28 01:33:40 +0000
committerJack Carter <jcarter@mips.com>2012-06-28 01:33:40 +0000
commit6c0bc0b378790ca38a3d31fc9571c7f25c4a494d (patch)
tree22111e776daa644ed2691aba1bc979af40b308cd /llvm/lib
parentfe251c88d9644203e490d52ce71fa8605635ea45 (diff)
downloadbcm5719-llvm-6c0bc0b378790ca38a3d31fc9571c7f25c4a494d.tar.gz
bcm5719-llvm-6c0bc0b378790ca38a3d31fc9571c7f25c4a494d.zip
The Mips specific inline asm operand modifier 'z' has the
following description in the gnu sources: Print $0 if operand is zero otherwise print the op normally. llvm-svn: 159324
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/Target/Mips/MipsAsmPrinter.cpp14
1 files changed, 13 insertions, 1 deletions
diff --git a/llvm/lib/Target/Mips/MipsAsmPrinter.cpp b/llvm/lib/Target/Mips/MipsAsmPrinter.cpp
index 0609241df2c..1c5bb1633be 100644
--- a/llvm/lib/Target/Mips/MipsAsmPrinter.cpp
+++ b/llvm/lib/Target/Mips/MipsAsmPrinter.cpp
@@ -323,6 +323,17 @@ bool MipsAsmPrinter::PrintAsmOperand(const MachineInstr *MI, unsigned OpNum,
return true;
O << MO.getImm() - 1;
return false;
+ case 'z': // $0 if zero, regular printing otherwise
+ {
+ if (MO.getType() != MachineOperand::MO_Immediate)
+ return true;
+ int64_t Val = MO.getImm();
+ if (Val)
+ O << Val;
+ else
+ O << "$0";
+ return false;
+ }
}
}
@@ -335,11 +346,12 @@ bool MipsAsmPrinter::PrintAsmMemoryOperand(const MachineInstr *MI,
const char *ExtraCode,
raw_ostream &O) {
if (ExtraCode && ExtraCode[0])
- return true; // Unknown modifier.
+ return true; // Unknown modifier.
const MachineOperand &MO = MI->getOperand(OpNum);
assert(MO.isReg() && "unexpected inline asm memory operand");
O << "0($" << MipsInstPrinter::getRegisterName(MO.getReg()) << ")";
+
return false;
}
OpenPOWER on IntegriCloud