summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp
diff options
context:
space:
mode:
authorZoran Jovanovic <zoran.jovanovic@imgtec.com>2014-10-10 13:45:34 +0000
committerZoran Jovanovic <zoran.jovanovic@imgtec.com>2014-10-10 13:45:34 +0000
commitb26f889afaa82f17d6bf25c213c77aafdf7d3de0 (patch)
tree2359f013d754fe1b05f7bcd9c9c099f1fc75ae62 /llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp
parentb39a174f111420df7711f9fb9ace5f250122d1a2 (diff)
downloadbcm5719-llvm-b26f889afaa82f17d6bf25c213c77aafdf7d3de0.tar.gz
bcm5719-llvm-b26f889afaa82f17d6bf25c213c77aafdf7d3de0.zip
[mips][microMIPS] Implement ADDIUS5 instruction
Differential Revision: http://reviews.llvm.org/D5049 llvm-svn: 219495
Diffstat (limited to 'llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp')
-rw-r--r--llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp19
1 files changed, 19 insertions, 0 deletions
diff --git a/llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp b/llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp
index 21d2876fdd0..db9c679b767 100644
--- a/llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp
+++ b/llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp
@@ -1117,6 +1117,25 @@ bool MipsAsmParser::processInstruction(MCInst &Inst, SMLoc IDLoc,
} // for
} // if load/store
+ // TODO: Handle this with the AsmOperandClass.PredicateMethod.
+ if (inMicroMipsMode()) {
+ MCOperand Opnd;
+ int Imm;
+
+ switch (Inst.getOpcode()) {
+ default:
+ break;
+ case Mips::ADDIUS5_MM:
+ Opnd = Inst.getOperand(2);
+ if (!Opnd.isImm())
+ return Error(IDLoc, "expected immediate operand kind");
+ Imm = Opnd.getImm();
+ if (Imm < -8 || Imm > 7)
+ return Error(IDLoc, "immediate operand value out of range");
+ break;
+ }
+ }
+
if (needsExpansion(Inst))
return expandInstruction(Inst, IDLoc, Instructions);
else
OpenPOWER on IntegriCloud