aboutsummaryrefslogtreecommitdiffstats
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
commit7c3cd4d24edf125bafc9aa258fc8e8ae1b00a4df (patch)
tree7cff8176dc10f0ea1108a3532103c7db9c128f31
parente4413947843c66cd71c160fffcb711a763c30914 (diff)
downloadexternal_llvm-7c3cd4d24edf125bafc9aa258fc8e8ae1b00a4df.zip
external_llvm-7c3cd4d24edf125bafc9aa258fc8e8ae1b00a4df.tar.gz
external_llvm-7c3cd4d24edf125bafc9aa258fc8e8ae1b00a4df.tar.bz2
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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@159324 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Target/Mips/MipsAsmPrinter.cpp14
-rw-r--r--test/CodeGen/Mips/inlineasm-operand-code.ll12
2 files changed, 25 insertions, 1 deletions
diff --git a/lib/Target/Mips/MipsAsmPrinter.cpp b/lib/Target/Mips/MipsAsmPrinter.cpp
index 0609241..1c5bb16 100644
--- a/lib/Target/Mips/MipsAsmPrinter.cpp
+++ b/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;
}
diff --git a/test/CodeGen/Mips/inlineasm-operand-code.ll b/test/CodeGen/Mips/inlineasm-operand-code.ll
index 2dcc10d..ca4f3e4 100644
--- a/test/CodeGen/Mips/inlineasm-operand-code.ll
+++ b/test/CodeGen/Mips/inlineasm-operand-code.ll
@@ -29,5 +29,17 @@ entry:
;CHECK: #NO_APP
tail call i32 asm sideeffect "addi $0,$1,${2:m}", "=r,r,I"(i32 7, i32 -3) nounwind
+; z with -3
+;CHECK: #APP
+;CHECK: addi ${{[0-9]+}},${{[0-9]+}},-3
+;CHECK: #NO_APP
+ tail call i32 asm sideeffect "addi $0,$1,${2:z}", "=r,r,I"(i32 7, i32 -3) nounwind
+
+; z with 0
+;CHECK: #APP
+;CHECK: addi ${{[0-9]+}},${{[0-9]+}},$0
+;CHECK: #NO_APP
+ tail call i32 asm sideeffect "addi $0,$1,${2:z}", "=r,r,I"(i32 7, i32 0) nounwind
+
ret i32 0
}