mirror of
https://github.com/RPCS3/llvm.git
synced 2025-02-07 19:19:26 +00:00
[Arch64AsmParser] better diagnostic for isb
Instruction isb takes as an operand either 'sy' or an immediate value. This improves the diagnostic when the string is not 'sy' and adds a test case for this which was missing. This also adds tests to check invalid inputs for dsb and dmb. Differential Revision: https://reviews.llvm.org/D32227 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301165 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
eaf78a2f04
commit
8e5f1d4de2
@ -2473,16 +2473,14 @@ AArch64AsmParser::tryParseBarrierOperand(OperandVector &Operands) {
|
||||
return MatchOperand_ParseFail;
|
||||
}
|
||||
|
||||
auto DB = AArch64DB::lookupDBByName(Tok.getString());
|
||||
if (!DB) {
|
||||
TokError("invalid barrier option name");
|
||||
return MatchOperand_ParseFail;
|
||||
}
|
||||
|
||||
// The only valid named option for ISB is 'sy'
|
||||
if (Mnemonic == "isb" && DB->Encoding != AArch64DB::sy) {
|
||||
auto DB = AArch64DB::lookupDBByName(Tok.getString());
|
||||
if (Mnemonic == "isb" && (!DB || DB->Encoding != AArch64DB::sy)) {
|
||||
TokError("'sy' or #imm operand expected");
|
||||
return MatchOperand_ParseFail;
|
||||
} else if (!DB) {
|
||||
TokError("invalid barrier option name");
|
||||
return MatchOperand_ParseFail;
|
||||
}
|
||||
|
||||
Operands.push_back(AArch64Operand::CreateBarrier(
|
||||
|
@ -3273,29 +3273,41 @@
|
||||
|
||||
dsb #-1
|
||||
dsb #16
|
||||
dsb foo
|
||||
dmb #-1
|
||||
dmb #16
|
||||
dmb foo
|
||||
// CHECK-ERROR-NEXT: error: {{Invalid immediate for instruction|barrier operand out of range}}
|
||||
// CHECK-ERROR-NEXT: dsb #-1
|
||||
// CHECK-ERROR-NEXT: ^
|
||||
// CHECK-ERROR-NEXT: error: {{Invalid immediate for instruction|barrier operand out of range}}
|
||||
// CHECK-ERROR-NEXT: dsb #16
|
||||
// CHECK-ERROR-NEXT: ^
|
||||
// CHECK-ERROR-NEXT: error: invalid barrier option name
|
||||
// CHECK-ERROR-NEXT: dsb foo
|
||||
// CHECK-ERROR-NEXT: ^
|
||||
// CHECK-ERROR-NEXT: error: {{Invalid immediate for instruction|barrier operand out of range}}
|
||||
// CHECK-ERROR-NEXT: dmb #-1
|
||||
// CHECK-ERROR-NEXT: ^
|
||||
// CHECK-ERROR-NEXT: error: {{Invalid immediate for instruction|barrier operand out of range}}
|
||||
// CHECK-ERROR-NEXT: dmb #16
|
||||
// CHECK-ERROR-NEXT: ^
|
||||
// CHECK-ERROR-NEXT: error: invalid barrier option name
|
||||
// CHECK-ERROR-NEXT: dmb foo
|
||||
// CHECK-ERROR-NEXT: ^
|
||||
|
||||
isb #-1
|
||||
isb #16
|
||||
isb foo
|
||||
// CHECK-ERROR-NEXT: error: {{Invalid immediate for instruction|barrier operand out of range}}
|
||||
// CHECK-ERROR-NEXT: isb #-1
|
||||
// CHECK-ERROR-NEXT: ^
|
||||
// CHECK-ERROR-NEXT: error: {{Invalid immediate for instruction|barrier operand out of range}}
|
||||
// CHECK-ERROR-NEXT: isb #16
|
||||
// CHECK-ERROR-NEXT: ^
|
||||
// CHECK-ERROR-NEXT: error: 'sy' or #imm operand expected
|
||||
// CHECK-ERROR-NEXT: isb foo
|
||||
// CHECK-ERROR-NEXT: ^
|
||||
|
||||
msr daifset, x4
|
||||
msr spsel, #-1
|
||||
|
Loading…
x
Reference in New Issue
Block a user