diff --git a/gas/config/tc-aarch64.c b/gas/config/tc-aarch64.c index a8ee74aacb..930a00c4c2 100644 --- a/gas/config/tc-aarch64.c +++ b/gas/config/tc-aarch64.c @@ -6714,7 +6714,11 @@ parse_operands (char *str, const aarch64_opcode *opcode) { /* Regular barriers accept options CRm (C0-C15). DSB nXS barrier variant accepts values > 15. */ - po_imm_or_fail (0, 15); + if (val < 0 || val > 15) + { + set_syntax_error (_("the specified option is not accepted in DSB")); + goto failure; + } } /* This is an extension to accept a 0..15 immediate. */ if (val == PARSE_FAIL) diff --git a/gas/testsuite/gas/aarch64/system.d b/gas/testsuite/gas/aarch64/system.d index c973584af5..ea6459f366 100644 --- a/gas/testsuite/gas/aarch64/system.d +++ b/gas/testsuite/gas/aarch64/system.d @@ -193,6 +193,20 @@ Disassembly of section \.text: .*: d5033fdf isb .*: d503309f ssbb .*: d503349f pssbb +.*: d503319f dsb oshld +.*: d503329f dsb oshst +.*: d503339f dsb osh +.*: d503359f dsb nshld +.*: d503369f dsb nshst +.*: d503379f dsb nsh +.*: d503389f dsb #0x08 +.*: d503399f dsb ishld +.*: d5033a9f dsb ishst +.*: d5033b9f dsb ish +.*: d5033c9f dsb #0x0c +.*: d5033d9f dsb ld +.*: d5033e9f dsb st +.*: d5033f9f dsb sy .*: d8000000 prfm pldl1keep, 0 .*: R_AARCH64_(P32_|)LD_PREL_LO19 LABEL1 .*: f8af6be0 prfm pldl1keep, \[sp, x15\] diff --git a/gas/testsuite/gas/aarch64/system.s b/gas/testsuite/gas/aarch64/system.s index 6f494f885a..2cff6a2d1e 100644 --- a/gas/testsuite/gas/aarch64/system.s +++ b/gas/testsuite/gas/aarch64/system.s @@ -48,6 +48,21 @@ ssbb pssbb + dsb oshld + dsb oshst + dsb osh + dsb nshld + dsb nshst + dsb nsh + dsb #0x08 + dsb ishld + dsb ishst + dsb ish + dsb #0x0c + dsb ld + dsb st + dsb sy + // // PREFETCHS //