aboutsummaryrefslogtreecommitdiff
path: root/gas/testsuite
diff options
context:
space:
mode:
authorJan Beulich <jbeulich@novell.com>2012-08-07 16:55:00 +0000
committerJan Beulich <jbeulich@novell.com>2012-08-07 16:55:00 +0000
commit7bab8ab56f7c09acbaca2645314e0622b20c2afe (patch)
treecc394cb8692e08ffec7ee9af268c90b4ad47c8ad /gas/testsuite
parent4c692bc7aa91109a1102fd0c6f3229e7efbe87d0 (diff)
downloadgdb-7bab8ab56f7c09acbaca2645314e0622b20c2afe.zip
gdb-7bab8ab56f7c09acbaca2645314e0622b20c2afe.tar.gz
gdb-7bab8ab56f7c09acbaca2645314e0622b20c2afe.tar.bz2
The VGATHER group of instructions requires that all three involved
xmm/ymm registers are distinct. This patch adds code to check for this, and at once eliminates a superfluous check for not using PC-relative addressing for these instructions (the fact that an index register is required here already excludes valid PC-relative addresses). The severity of the resulting diagnostics can be controlled via command line option or directive. gas/ 2012-08-07 Jan Beulich <jbeulich@suse.com> * config/tc-i386.c (set_check): Renamed from set_sse_check. Generalize to also handle operand checking option. (enum i386_error): New enumerator 'invalid_vector_register_set'. (match_template): Handle it. (enum check_kind): Give it a tag. Drop sse_ prefixes from enumerators. (operand_check): New. (md_pseudo_table): Add "operand_check". (check_VecOperands): Don't special case RIP addressing. Check that vSIB operands use distinct vector registers unless no checking was requested. (OPTION_MOPERAND_CHECK): New. (md_parse_option): Handle it. (OPTION_MAVXSCALAR, OPTION_X32): Adjust. (md_longopts): Add "moperand-check". (md_show_usage): Add help text for it. gas/testsuite/ 2012-08-07 Jan Beulich <jbeulich@suse.com> * gas/i386/vgather-check-error.{s,l}: New. * gas/i386/vgather-check-none.{s,d}: New. * gas/i386/vgather-check-warn.{d,e}: New. * gas/i386/vgather-check.{s,d}: New. * gas/i386/x86-64-vgather-check-error.{s,l}: New. * gas/i386/x86-64-vgather-check-none.{s,d}: New. * gas/i386/x86-64-vgather-check-warn.{d,e}: New. * gas/i386/x86-64-vgather-check.{s,d}: New. * gas/i386/i386.exp: Run new tests.
Diffstat (limited to 'gas/testsuite')
-rw-r--r--gas/testsuite/ChangeLog12
-rw-r--r--gas/testsuite/gas/i386/i386.exp8
-rw-r--r--gas/testsuite/gas/i386/vgather-check-error.l4
-rw-r--r--gas/testsuite/gas/i386/vgather-check-error.s1
-rw-r--r--gas/testsuite/gas/i386/vgather-check-none.d14
-rw-r--r--gas/testsuite/gas/i386/vgather-check-none.s2
-rw-r--r--gas/testsuite/gas/i386/vgather-check-warn.d15
-rw-r--r--gas/testsuite/gas/i386/vgather-check-warn.e4
-rw-r--r--gas/testsuite/gas/i386/vgather-check.d14
-rw-r--r--gas/testsuite/gas/i386/vgather-check.s8
-rw-r--r--gas/testsuite/gas/i386/x86-64-vgather-check-error.l4
-rw-r--r--gas/testsuite/gas/i386/x86-64-vgather-check-error.s1
-rw-r--r--gas/testsuite/gas/i386/x86-64-vgather-check-none.d17
-rw-r--r--gas/testsuite/gas/i386/x86-64-vgather-check-none.s2
-rw-r--r--gas/testsuite/gas/i386/x86-64-vgather-check-warn.d18
-rw-r--r--gas/testsuite/gas/i386/x86-64-vgather-check-warn.e4
-rw-r--r--gas/testsuite/gas/i386/x86-64-vgather-check.d17
-rw-r--r--gas/testsuite/gas/i386/x86-64-vgather-check.s11
18 files changed, 156 insertions, 0 deletions
diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog
index e11121a..8225b23 100644
--- a/gas/testsuite/ChangeLog
+++ b/gas/testsuite/ChangeLog
@@ -1,5 +1,17 @@
2012-08-07 Jan Beulich <jbeulich@suse.com>
+ * gas/i386/vgather-check-error.{s,l}: New.
+ * gas/i386/vgather-check-none.{s,d}: New.
+ * gas/i386/vgather-check-warn.{d,e}: New.
+ * gas/i386/vgather-check.{s,d}: New.
+ * gas/i386/x86-64-vgather-check-error.{s,l}: New.
+ * gas/i386/x86-64-vgather-check-none.{s,d}: New.
+ * gas/i386/x86-64-vgather-check-warn.{d,e}: New.
+ * gas/i386/x86-64-vgather-check.{s,d}: New.
+ * gas/i386/i386.exp: Run new tests.
+
+2012-08-07 Jan Beulich <jbeulich@suse.com>
+
* gas/i386/x86-64-specific-reg.{s,l}: New.
* gas/i386/i386.exp: Run new test.
diff --git a/gas/testsuite/gas/i386/i386.exp b/gas/testsuite/gas/i386/i386.exp
index 85e6c4b..fb36423 100644
--- a/gas/testsuite/gas/i386/i386.exp
+++ b/gas/testsuite/gas/i386/i386.exp
@@ -160,6 +160,10 @@ if [expr ([istarget "i*86-*-*"] || [istarget "x86_64-*-*"]) && [gas_32_check]]
run_dump_test "sse-check-none"
run_dump_test "sse-check-warn"
run_list_test "sse-check-error" "-msse-check=error -I${srcdir}/$subdir -al"
+ run_dump_test "vgather-check"
+ run_dump_test "vgather-check-none"
+ run_dump_test "vgather-check-warn"
+ run_list_test "vgather-check-error" "-moperand-check=error -I${srcdir}/$subdir"
run_dump_test "sse-noavx"
run_dump_test "movbe"
run_dump_test "movbe-intel"
@@ -403,6 +407,10 @@ if [expr ([istarget "i*86-*-*"] || [istarget "x86_64-*-*"]) && [gas_64_check]] t
run_dump_test "x86-64-sse-check-none"
run_dump_test "x86-64-sse-check-warn"
run_list_test "x86-64-sse-check-error" "-msse-check=error -I${srcdir}/$subdir -al"
+ run_dump_test "x86-64-vgather-check"
+ run_dump_test "x86-64-vgather-check-none"
+ run_dump_test "x86-64-vgather-check-warn"
+ run_list_test "x86-64-vgather-check-error" "-moperand-check=error -I${srcdir}/$subdir"
run_dump_test "x86-64-sse-noavx"
run_dump_test "x86-64-movbe"
run_dump_test "x86-64-movbe-intel"
diff --git a/gas/testsuite/gas/i386/vgather-check-error.l b/gas/testsuite/gas/i386/vgather-check-error.l
new file mode 100644
index 0000000..41273dc
--- /dev/null
+++ b/gas/testsuite/gas/i386/vgather-check-error.l
@@ -0,0 +1,4 @@
+.*: Assembler messages:
+.*:6: Error: .*
+.*:7: Error: .*
+.*:8: Error: .*
diff --git a/gas/testsuite/gas/i386/vgather-check-error.s b/gas/testsuite/gas/i386/vgather-check-error.s
new file mode 100644
index 0000000..9db69c6
--- /dev/null
+++ b/gas/testsuite/gas/i386/vgather-check-error.s
@@ -0,0 +1 @@
+.include "vgather-check.s"
diff --git a/gas/testsuite/gas/i386/vgather-check-none.d b/gas/testsuite/gas/i386/vgather-check-none.d
new file mode 100644
index 0000000..b51cc94
--- /dev/null
+++ b/gas/testsuite/gas/i386/vgather-check-none.d
@@ -0,0 +1,14 @@
+#as: -moperand-check=error -I${srcdir}/$subdir
+#objdump: -dw
+#name: i386 vgather check (.operand_check none)
+
+.*: file format .*
+
+Disassembly of section .text:
+
+0+ <vgather>:
+[ ]*[a-f0-9]+:[ ]+c4 e2 69 92 04 08[ ]+vgatherdps %xmm2,\(%eax,%xmm1,1\),%xmm0
+[ ]*[a-f0-9]+:[ ]+c4 e2 69 92 14 48[ ]+vgatherdps %xmm2,\(%eax,%xmm1,2\),%xmm2
+[ ]*[a-f0-9]+:[ ]+c4 e2 71 92 04 88[ ]+vgatherdps %xmm1,\(%eax,%xmm1,4\),%xmm0
+[ ]*[a-f0-9]+:[ ]+c4 e2 69 92 0c c8[ ]+vgatherdps %xmm2,\(%eax,%xmm1,8\),%xmm1
+#pass
diff --git a/gas/testsuite/gas/i386/vgather-check-none.s b/gas/testsuite/gas/i386/vgather-check-none.s
new file mode 100644
index 0000000..cf31039
--- /dev/null
+++ b/gas/testsuite/gas/i386/vgather-check-none.s
@@ -0,0 +1,2 @@
+.operand_check none
+.include "vgather-check.s"
diff --git a/gas/testsuite/gas/i386/vgather-check-warn.d b/gas/testsuite/gas/i386/vgather-check-warn.d
new file mode 100644
index 0000000..22be247
--- /dev/null
+++ b/gas/testsuite/gas/i386/vgather-check-warn.d
@@ -0,0 +1,15 @@
+#source: vgather-check.s
+#stderr: vgather-check-warn.e
+#objdump: -dw
+#name: i386 vgather check (warning)
+
+.*: file format .*
+
+Disassembly of section .text:
+
+0+ <vgather>:
+[ ]*[a-f0-9]+:[ ]+c4 e2 69 92 04 08[ ]+vgatherdps %xmm2,\(%eax,%xmm1,1\),%xmm0
+[ ]*[a-f0-9]+:[ ]+c4 e2 69 92 14 48[ ]+vgatherdps %xmm2,\(%eax,%xmm1,2\),%xmm2
+[ ]*[a-f0-9]+:[ ]+c4 e2 71 92 04 88[ ]+vgatherdps %xmm1,\(%eax,%xmm1,4\),%xmm0
+[ ]*[a-f0-9]+:[ ]+c4 e2 69 92 0c c8[ ]+vgatherdps %xmm2,\(%eax,%xmm1,8\),%xmm1
+#pass
diff --git a/gas/testsuite/gas/i386/vgather-check-warn.e b/gas/testsuite/gas/i386/vgather-check-warn.e
new file mode 100644
index 0000000..095840b
--- /dev/null
+++ b/gas/testsuite/gas/i386/vgather-check-warn.e
@@ -0,0 +1,4 @@
+.*: Assembler messages:
+.*:6: Warning: .*
+.*:7: Warning: .*
+.*:8: Warning: .*
diff --git a/gas/testsuite/gas/i386/vgather-check.d b/gas/testsuite/gas/i386/vgather-check.d
new file mode 100644
index 0000000..25042f4
--- /dev/null
+++ b/gas/testsuite/gas/i386/vgather-check.d
@@ -0,0 +1,14 @@
+#as: -moperand-check=none
+#objdump: -dw
+#name: i386 vgather check (-moperand-check=none)
+
+.*: file format .*
+
+Disassembly of section .text:
+
+0+ <vgather>:
+[ ]*[a-f0-9]+:[ ]+c4 e2 69 92 04 08[ ]+vgatherdps %xmm2,\(%eax,%xmm1,1\),%xmm0
+[ ]*[a-f0-9]+:[ ]+c4 e2 69 92 14 48[ ]+vgatherdps %xmm2,\(%eax,%xmm1,2\),%xmm2
+[ ]*[a-f0-9]+:[ ]+c4 e2 71 92 04 88[ ]+vgatherdps %xmm1,\(%eax,%xmm1,4\),%xmm0
+[ ]*[a-f0-9]+:[ ]+c4 e2 69 92 0c c8[ ]+vgatherdps %xmm2,\(%eax,%xmm1,8\),%xmm1
+#pass
diff --git a/gas/testsuite/gas/i386/vgather-check.s b/gas/testsuite/gas/i386/vgather-check.s
new file mode 100644
index 0000000..c784029
--- /dev/null
+++ b/gas/testsuite/gas/i386/vgather-check.s
@@ -0,0 +1,8 @@
+# Check vgather instructions
+
+ .text
+vgather:
+ vgatherdps %xmm2,(%eax,%xmm1,1),%xmm0
+ vgatherdps %xmm2,(%eax,%xmm1,2),%xmm2
+ vgatherdps %xmm1,(%eax,%xmm1,4),%xmm0
+ vgatherdps %xmm2,(%eax,%xmm1,8),%xmm1
diff --git a/gas/testsuite/gas/i386/x86-64-vgather-check-error.l b/gas/testsuite/gas/i386/x86-64-vgather-check-error.l
new file mode 100644
index 0000000..d5c7205
--- /dev/null
+++ b/gas/testsuite/gas/i386/x86-64-vgather-check-error.l
@@ -0,0 +1,4 @@
+.*: Assembler messages:
+.*:6: Error: .*
+.*:8: Error: .*
+.*:10: Error: .*
diff --git a/gas/testsuite/gas/i386/x86-64-vgather-check-error.s b/gas/testsuite/gas/i386/x86-64-vgather-check-error.s
new file mode 100644
index 0000000..f038be2
--- /dev/null
+++ b/gas/testsuite/gas/i386/x86-64-vgather-check-error.s
@@ -0,0 +1 @@
+.include "x86-64-vgather-check.s"
diff --git a/gas/testsuite/gas/i386/x86-64-vgather-check-none.d b/gas/testsuite/gas/i386/x86-64-vgather-check-none.d
new file mode 100644
index 0000000..e235e00
--- /dev/null
+++ b/gas/testsuite/gas/i386/x86-64-vgather-check-none.d
@@ -0,0 +1,17 @@
+#as: -moperand-check=error -I${srcdir}/$subdir
+#objdump: -dw
+#name: x86-64 vgather check (.operand_check none)
+
+.*: file format .*
+
+Disassembly of section .text:
+
+0+ <vgather>:
+[ ]*[a-f0-9]+:[ ]+c4 e2 69 92 04 08[ ]+vgatherdps %xmm2,\(%rax,%xmm1,1\),%xmm0
+[ ]*[a-f0-9]+:[ ]+c4 e2 69 92 14 48[ ]+vgatherdps %xmm2,\(%rax,%xmm1,2\),%xmm2
+[ ]*[a-f0-9]+:[ ]+c4 62 69 92 14 48[ ]+vgatherdps %xmm2,\(%rax,%xmm1,2\),%xmm10
+[ ]*[a-f0-9]+:[ ]+c4 e2 71 92 04 88[ ]+vgatherdps %xmm1,\(%rax,%xmm1,4\),%xmm0
+[ ]*[a-f0-9]+:[ ]+c4 e2 31 92 04 88[ ]+vgatherdps %xmm9,\(%rax,%xmm1,4\),%xmm0
+[ ]*[a-f0-9]+:[ ]+c4 e2 69 92 0c c8[ ]+vgatherdps %xmm2,\(%rax,%xmm1,8\),%xmm1
+[ ]*[a-f0-9]+:[ ]+c4 62 69 92 0c c8[ ]+vgatherdps %xmm2,\(%rax,%xmm1,8\),%xmm9
+#pass
diff --git a/gas/testsuite/gas/i386/x86-64-vgather-check-none.s b/gas/testsuite/gas/i386/x86-64-vgather-check-none.s
new file mode 100644
index 0000000..42d0002
--- /dev/null
+++ b/gas/testsuite/gas/i386/x86-64-vgather-check-none.s
@@ -0,0 +1,2 @@
+.operand_check none
+.include "x86-64-vgather-check.s"
diff --git a/gas/testsuite/gas/i386/x86-64-vgather-check-warn.d b/gas/testsuite/gas/i386/x86-64-vgather-check-warn.d
new file mode 100644
index 0000000..33846d2
--- /dev/null
+++ b/gas/testsuite/gas/i386/x86-64-vgather-check-warn.d
@@ -0,0 +1,18 @@
+#source: x86-64-vgather-check.s
+#stderr: x86-64-vgather-check-warn.e
+#objdump: -dw
+#name: x86-64 vgather check (warning)
+
+.*: file format .*
+
+Disassembly of section .text:
+
+0+ <vgather>:
+[ ]*[a-f0-9]+:[ ]+c4 e2 69 92 04 08[ ]+vgatherdps %xmm2,\(%rax,%xmm1,1\),%xmm0
+[ ]*[a-f0-9]+:[ ]+c4 e2 69 92 14 48[ ]+vgatherdps %xmm2,\(%rax,%xmm1,2\),%xmm2
+[ ]*[a-f0-9]+:[ ]+c4 62 69 92 14 48[ ]+vgatherdps %xmm2,\(%rax,%xmm1,2\),%xmm10
+[ ]*[a-f0-9]+:[ ]+c4 e2 71 92 04 88[ ]+vgatherdps %xmm1,\(%rax,%xmm1,4\),%xmm0
+[ ]*[a-f0-9]+:[ ]+c4 e2 31 92 04 88[ ]+vgatherdps %xmm9,\(%rax,%xmm1,4\),%xmm0
+[ ]*[a-f0-9]+:[ ]+c4 e2 69 92 0c c8[ ]+vgatherdps %xmm2,\(%rax,%xmm1,8\),%xmm1
+[ ]*[a-f0-9]+:[ ]+c4 62 69 92 0c c8[ ]+vgatherdps %xmm2,\(%rax,%xmm1,8\),%xmm9
+#pass
diff --git a/gas/testsuite/gas/i386/x86-64-vgather-check-warn.e b/gas/testsuite/gas/i386/x86-64-vgather-check-warn.e
new file mode 100644
index 0000000..24e6a57
--- /dev/null
+++ b/gas/testsuite/gas/i386/x86-64-vgather-check-warn.e
@@ -0,0 +1,4 @@
+.*: Assembler messages:
+.*:6: Warning: .*
+.*:8: Warning: .*
+.*:10: Warning: .*
diff --git a/gas/testsuite/gas/i386/x86-64-vgather-check.d b/gas/testsuite/gas/i386/x86-64-vgather-check.d
new file mode 100644
index 0000000..bd8ce57
--- /dev/null
+++ b/gas/testsuite/gas/i386/x86-64-vgather-check.d
@@ -0,0 +1,17 @@
+#as: -moperand-check=none
+#objdump: -dw
+#name: x86-64 vgather check (-moperand-check=none)
+
+.*: file format .*
+
+Disassembly of section .text:
+
+0+ <vgather>:
+[ ]*[a-f0-9]+:[ ]+c4 e2 69 92 04 08[ ]+vgatherdps %xmm2,\(%rax,%xmm1,1\),%xmm0
+[ ]*[a-f0-9]+:[ ]+c4 e2 69 92 14 48[ ]+vgatherdps %xmm2,\(%rax,%xmm1,2\),%xmm2
+[ ]*[a-f0-9]+:[ ]+c4 62 69 92 14 48[ ]+vgatherdps %xmm2,\(%rax,%xmm1,2\),%xmm10
+[ ]*[a-f0-9]+:[ ]+c4 e2 71 92 04 88[ ]+vgatherdps %xmm1,\(%rax,%xmm1,4\),%xmm0
+[ ]*[a-f0-9]+:[ ]+c4 e2 31 92 04 88[ ]+vgatherdps %xmm9,\(%rax,%xmm1,4\),%xmm0
+[ ]*[a-f0-9]+:[ ]+c4 e2 69 92 0c c8[ ]+vgatherdps %xmm2,\(%rax,%xmm1,8\),%xmm1
+[ ]*[a-f0-9]+:[ ]+c4 62 69 92 0c c8[ ]+vgatherdps %xmm2,\(%rax,%xmm1,8\),%xmm9
+#pass
diff --git a/gas/testsuite/gas/i386/x86-64-vgather-check.s b/gas/testsuite/gas/i386/x86-64-vgather-check.s
new file mode 100644
index 0000000..43b058b
--- /dev/null
+++ b/gas/testsuite/gas/i386/x86-64-vgather-check.s
@@ -0,0 +1,11 @@
+# Check vgather instructions
+
+ .text
+vgather:
+ vgatherdps %xmm2,(%rax,%xmm1,1),%xmm0
+ vgatherdps %xmm2,(%rax,%xmm1,2),%xmm2
+ vgatherdps %xmm2,(%rax,%xmm1,2),%xmm10
+ vgatherdps %xmm1,(%rax,%xmm1,4),%xmm0
+ vgatherdps %xmm9,(%rax,%xmm1,4),%xmm0
+ vgatherdps %xmm2,(%rax,%xmm1,8),%xmm1
+ vgatherdps %xmm2,(%rax,%xmm1,8),%xmm9