summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/Sparc/AsmParser/SparcAsmParser.cpp
diff options
context:
space:
mode:
authorVenkatraman Govindaraju <venkatra@cs.wisc.edu>2014-03-02 03:39:39 +0000
committerVenkatraman Govindaraju <venkatra@cs.wisc.edu>2014-03-02 03:39:39 +0000
commit81aae572828077f54948b6dfdcab5003a4985ab9 (patch)
tree07d11385b9accc78a79b1d1569f84e0288ecbc1f /llvm/lib/Target/Sparc/AsmParser/SparcAsmParser.cpp
parent871171a25beb46d128e0a5713d8fff18516191e7 (diff)
downloadbcm5719-llvm-81aae572828077f54948b6dfdcab5003a4985ab9.tar.gz
bcm5719-llvm-81aae572828077f54948b6dfdcab5003a4985ab9.zip
[Sparc] Add support for parsing fcmp with %fcc registers.
llvm-svn: 202610
Diffstat (limited to 'llvm/lib/Target/Sparc/AsmParser/SparcAsmParser.cpp')
-rw-r--r--llvm/lib/Target/Sparc/AsmParser/SparcAsmParser.cpp21
1 files changed, 14 insertions, 7 deletions
diff --git a/llvm/lib/Target/Sparc/AsmParser/SparcAsmParser.cpp b/llvm/lib/Target/Sparc/AsmParser/SparcAsmParser.cpp
index 65d9228ad94..9cbece93a3c 100644
--- a/llvm/lib/Target/Sparc/AsmParser/SparcAsmParser.cpp
+++ b/llvm/lib/Target/Sparc/AsmParser/SparcAsmParser.cpp
@@ -68,7 +68,8 @@ class SparcAsmParser : public MCTargetAsmParser {
StringRef Name);
OperandMatchResultTy
- parseSparcAsmOperand(SparcOperand *&Operand, bool isCall = false);
+ parseSparcAsmOperand(SparcOperand *&Operand, bool isCall = false,
+ bool createTokenForFCC = true);
OperandMatchResultTy
parseBranchModifiers(SmallVectorImpl<MCParsedAsmOperand*> &Operands);
@@ -631,7 +632,10 @@ parseOperand(SmallVectorImpl<MCParsedAsmOperand*> &Operands,
}
SparcOperand *Op = 0;
- ResTy = parseSparcAsmOperand(Op, (Mnemonic == "call"));
+
+ bool createTokenForFCC = !(Mnemonic == "fcmps" || Mnemonic == "fcmpd"
+ || Mnemonic == "fcmpq");
+ ResTy = parseSparcAsmOperand(Op, (Mnemonic == "call"), createTokenForFCC);
if (ResTy != MatchOperand_Success || !Op)
return MatchOperand_ParseFail;
@@ -642,7 +646,8 @@ parseOperand(SmallVectorImpl<MCParsedAsmOperand*> &Operands,
}
SparcAsmParser::OperandMatchResultTy
-SparcAsmParser::parseSparcAsmOperand(SparcOperand *&Op, bool isCall)
+SparcAsmParser::parseSparcAsmOperand(SparcOperand *&Op, bool isCall,
+ bool createTokenForFCC)
{
SMLoc S = Parser.getTok().getLoc();
@@ -677,9 +682,11 @@ SparcAsmParser::parseSparcAsmOperand(SparcOperand *&Op, bool isCall)
break;
case Sparc::FCC0:
- assert(name == "fcc0" && "Cannot handle %fcc other than %fcc0 yet");
- Op = SparcOperand::CreateToken("%fcc0", S);
- break;
+ if (createTokenForFCC) {
+ assert(name == "fcc0" && "Cannot handle %fcc other than %fcc0 yet");
+ Op = SparcOperand::CreateToken("%fcc0", S);
+ break;
+ }
}
break;
}
@@ -783,7 +790,7 @@ bool SparcAsmParser::matchRegisterName(const AsmToken &Tok,
&& !name.substr(3).getAsInteger(10, intVal)
&& intVal < 4) {
// FIXME: check 64bit and handle %fcc1 - %fcc3
- RegNo = Sparc::FCC0;
+ RegNo = Sparc::FCC0 + intVal;
RegKind = SparcOperand::rk_CCReg;
return true;
}
OpenPOWER on IntegriCloud