aboutsummaryrefslogtreecommitdiff
path: root/gas/testsuite
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2016-08-05 11:26:13 +0100
committerNick Clifton <nickc@redhat.com>2016-08-05 11:26:13 +0100
commitb126985ec3f922f86a9fa164cc0f443b1aa9e0bb (patch)
tree18b9709cb079ed3885e3eedfaeedd8c473286085 /gas/testsuite
parent7ea12e5c3ad54da440c08f32da09534e63e515ca (diff)
downloadbinutils-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.d3
-rw-r--r--gas/testsuite/gas/arm/pr20429.l11
-rw-r--r--gas/testsuite/gas/arm/pr20429.s13
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.