diff options
author | Nick Clifton <nickc@redhat.com> | 2016-08-05 11:26:13 +0100 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2016-08-05 11:26:13 +0100 |
commit | b126985ec3f922f86a9fa164cc0f443b1aa9e0bb (patch) | |
tree | 18b9709cb079ed3885e3eedfaeedd8c473286085 /gas/testsuite | |
parent | 7ea12e5c3ad54da440c08f32da09534e63e515ca (diff) | |
download | binutils-b126985ec3f922f86a9fa164cc0f443b1aa9e0bb.zip binutils-b126985ec3f922f86a9fa164cc0f443b1aa9e0bb.tar.gz binutils-b126985ec3f922f86a9fa164cc0f443b1aa9e0bb.tar.bz2 |
Ensure ARM VPUSH and VPOP instructions do not affect more than 16 registers.
PR gas/20429
* config/tc-arm.c (do_vfp_nsyn_push): Check that no more than 16
registers are pushed.
(do_vfp_nsyn_pop): Check that no more than 16 registers are
popped.
* testsuite/gas/arm/pr20429.s: New test.
* testsuite/gas/arm/pr20429.d: New test driver.
* testsuite/gas/arm/pr20429.1: Expected error output.
Diffstat (limited to 'gas/testsuite')
-rw-r--r-- | gas/testsuite/gas/arm/pr20429.d | 3 | ||||
-rw-r--r-- | gas/testsuite/gas/arm/pr20429.l | 11 | ||||
-rw-r--r-- | gas/testsuite/gas/arm/pr20429.s | 13 |
3 files changed, 27 insertions, 0 deletions
diff --git a/gas/testsuite/gas/arm/pr20429.d b/gas/testsuite/gas/arm/pr20429.d new file mode 100644 index 0000000..8837537 --- /dev/null +++ b/gas/testsuite/gas/arm/pr20429.d @@ -0,0 +1,3 @@ +# name: PR 20429: Too many registers in VPUSH/VPOP +# as: -mfpu=neon +# error-output: pr20429.l diff --git a/gas/testsuite/gas/arm/pr20429.l b/gas/testsuite/gas/arm/pr20429.l new file mode 100644 index 0000000..73886dd --- /dev/null +++ b/gas/testsuite/gas/arm/pr20429.l @@ -0,0 +1,11 @@ +[^:]*: Assembler messages: +[^:]*:5: Error: register list must contain at least 1 and at most 16 registers -- `vpush {d0-d31}' +[^:]*:6: Error: register list must contain at least 1 and at most 16 registers -- `vpush {d1-d17}' +[^:]*:7: Error: register list must contain at least 1 and at most 16 registers -- `vpop {d1-d17}' +[^:]*:8: Error: register list must contain at least 1 and at most 16 registers -- `vpop {d0-d31}' +[^:]*:10: Error: register list must contain at least 1 and at most 16 registers -- `vpush {q0-q15}' +[^:]*:11: Error: register list must contain at least 1 and at most 16 registers -- `vpush {q1-q9}' +[^:]*:12: Error: register list must contain at least 1 and at most 16 registers -- `vpop {q1-q9}' +[^:]*:13: Error: register list must contain at least 1 and at most 16 registers -- `vpop {q0-q15}' +#pass + diff --git a/gas/testsuite/gas/arm/pr20429.s b/gas/testsuite/gas/arm/pr20429.s new file mode 100644 index 0000000..02195c9 --- /dev/null +++ b/gas/testsuite/gas/arm/pr20429.s @@ -0,0 +1,13 @@ +.syntax unified +.arm + +.text + vpush {d0-d31} // 32 > 16, not catched. + vpush {d1-d17} // 17 > 16, not catched. + vpop {d1-d17} // 17 > 16, not catched. + vpop {d0-d31} // 32 > 16, not catched. + + vpush {q0-q15} // 32 > 16, not catched. + vpush {q1-q9} // 18 > 16, not catched. + vpop {q1-q9} // 18 > 16, not catched. + vpop {q0-q15} // 32 > 16, not catched. |