diff options
author | Jan Beulich <jbeulich@novell.com> | 2012-08-07 16:55:00 +0000 |
---|---|---|
committer | Jan Beulich <jbeulich@novell.com> | 2012-08-07 16:55:00 +0000 |
commit | 7bab8ab56f7c09acbaca2645314e0622b20c2afe (patch) | |
tree | cc394cb8692e08ffec7ee9af268c90b4ad47c8ad /gas/testsuite | |
parent | 4c692bc7aa91109a1102fd0c6f3229e7efbe87d0 (diff) | |
download | gdb-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')
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 |