diff options
author | Chuang-Yu Cheng <cycheng@multicorewareinc.com> | 2016-04-06 01:47:02 +0000 |
---|---|---|
committer | Chuang-Yu Cheng <cycheng@multicorewareinc.com> | 2016-04-06 01:47:02 +0000 |
commit | 024a623c5599bd11839939dfed0eeecbc389201e (patch) | |
tree | 18d437143f33d3e35eb7128eea65234527d99caf /llvm/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp | |
parent | eaf4b3d75ca523b19b4da1a329775ae988633c07 (diff) | |
download | llvm-024a623c5599bd11839939dfed0eeecbc389201e.zip llvm-024a623c5599bd11839939dfed0eeecbc389201e.tar.gz llvm-024a623c5599bd11839939dfed0eeecbc389201e.tar.bz2 |
[Power9] Implement add-pc, multiply-add, modulo, extend-sign-shift, random number, set bool, and dfp test significance
This patch implement the following instructions:
- addpcis subpcis
- maddhd maddhdu maddld
- modsw moduw modsd modud
- darn
- extswsli extswsli.
- setb
- dtstsfi dtstsfiq
Total 15 instructions
Reviewers: nemanjai hfinkel tjablin amehsan kbarton
http://reviews.llvm.org/D17885
llvm-svn: 265505
Diffstat (limited to 'llvm/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp')
-rw-r--r-- | llvm/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/llvm/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp b/llvm/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp index c35c2b1..e177b85 100644 --- a/llvm/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp +++ b/llvm/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp @@ -530,6 +530,10 @@ public: (Kind == Immediate && isInt<16>(getImm()) && (getImm() & 3) == 0); } bool isRegNumber() const { return Kind == Immediate && isUInt<5>(getImm()); } + bool isD8RCRegNumber() const { return Kind == Immediate && + isUInt<5>(getImm()) && + // required even register id + !(getImm() & 0x1); } bool isVSRegNumber() const { return Kind == Immediate && isUInt<6>(getImm()); } bool isCCRegNumber() const { return (Kind == Expression && isUInt<3>(getExprCRVal())) || @@ -592,6 +596,11 @@ public: Inst.addOperand(MCOperand::createReg(FRegs[getReg()])); } + void addRegD8RCOperands(MCInst &Inst, unsigned N) const { + assert(N == 1 && "Invalid number of operands!"); + Inst.addOperand(MCOperand::createReg(FRegs[getReg()])); + } + void addRegVRRCOperands(MCInst &Inst, unsigned N) const { assert(N == 1 && "Invalid number of operands!"); Inst.addOperand(MCOperand::createReg(VRegs[getReg()])); @@ -1222,6 +1231,19 @@ void PPCAsmParser::ProcessInstruction(MCInst &Inst, Inst = TmpInst; break; } + // ISA3.0 Instructions: + case PPC::SUBPCIS: + case PPC::LNIA: { + MCInst TmpInst; + TmpInst.setOpcode(PPC::ADDPCIS); + TmpInst.addOperand(Inst.getOperand(0)); + if (Opcode == PPC::SUBPCIS) + addNegOperand(TmpInst, Inst.getOperand(1), getContext()); + else + TmpInst.addOperand(MCOperand::createImm(0)); + Inst = TmpInst; + break; + } } } |