mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 18:54:02 +01:00
ARM diagnostic when 's' suffix on mnemonic that can't set flags.
For example, "mlss r0, r1, r2, r3". The MLS instruction does not have a flag-setting variant. llvm-svn: 135203
This commit is contained in:
parent
ed868b039b
commit
6122eb0fff
@ -2071,20 +2071,22 @@ bool ARMAsmParser::ParseInstruction(StringRef Name, SMLoc NameLoc,
|
||||
bool CanAcceptCarrySet, CanAcceptPredicationCode;
|
||||
GetMnemonicAcceptInfo(Head, CanAcceptCarrySet, CanAcceptPredicationCode);
|
||||
|
||||
// If we had a carry-set on an instruction that can't do that, issue an
|
||||
// error.
|
||||
if (!CanAcceptCarrySet && CarrySetting) {
|
||||
Parser.EatToEndOfStatement();
|
||||
return Error(NameLoc, "instruction '" + Head +
|
||||
"' can not set flags, but 's' suffix specified");
|
||||
}
|
||||
|
||||
// Add the carry setting operand, if necessary.
|
||||
//
|
||||
// FIXME: It would be awesome if we could somehow invent a location such that
|
||||
// match errors on this operand would print a nice diagnostic about how the
|
||||
// 's' character in the mnemonic resulted in a CCOut operand.
|
||||
if (CanAcceptCarrySet) {
|
||||
if (CanAcceptCarrySet)
|
||||
Operands.push_back(ARMOperand::CreateCCOut(CarrySetting ? ARM::CPSR : 0,
|
||||
NameLoc));
|
||||
} else {
|
||||
// This mnemonic can't ever accept a carry set, but the user wrote one (or
|
||||
// misspelled another mnemonic).
|
||||
|
||||
// FIXME: Issue a nice error.
|
||||
}
|
||||
|
||||
// Add the predication code operand, if necessary.
|
||||
if (CanAcceptPredicationCode) {
|
||||
|
@ -3,6 +3,12 @@
|
||||
|
||||
@ Check for various assembly diagnostic messages on invalid input.
|
||||
|
||||
@ 's' bit on an instruction that can't accept it.
|
||||
mlss r1, r2, r3, r4
|
||||
@ CHECK-ERRORS: error: instruction 'mls' can not set flags,
|
||||
@ CHECK-ERRORS: but 's' suffix specified
|
||||
|
||||
|
||||
@ Out of range shift immediate values.
|
||||
adc r1, r2, r3, lsl #invalid
|
||||
adc r4, r5, r6, lsl #-1
|
||||
|
Loading…
Reference in New Issue
Block a user