diff options
author | Jan Beulich <jbeulich@novell.com> | 2018-03-22 08:31:43 +0100 |
---|---|---|
committer | Jan Beulich <jbeulich@suse.com> | 2018-03-22 08:31:43 +0100 |
commit | d6793fa1acf384a93c83db6eb916e3b9eedd9ef4 (patch) | |
tree | 8c6ac3bc26803c338b3ae5a9edce2ff5f025f7e6 /gas/testsuite | |
parent | f776822506b417ce25170c67c33cc05870b37adf (diff) | |
download | gdb-d6793fa1acf384a93c83db6eb916e3b9eedd9ef4.zip gdb-d6793fa1acf384a93c83db6eb916e3b9eedd9ef4.tar.gz gdb-d6793fa1acf384a93c83db6eb916e3b9eedd9ef4.tar.bz2 |
x86/Intel: fix fallout from earlier template folding
While many templates allowing multiple suitably matching XMM/YMM/ZMM
operand sizes can be folded, a few need to be split in order to not
wrongly accept "xmmword ptr" operands when only XMM registers are
permitted (and memory operands are more narrow). Add a test case
validating this.
Diffstat (limited to 'gas/testsuite')
-rw-r--r-- | gas/testsuite/gas/i386/i386.exp | 1 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/xmmword.l | 101 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/xmmword.s | 129 |
3 files changed, 231 insertions, 0 deletions
diff --git a/gas/testsuite/gas/i386/i386.exp b/gas/testsuite/gas/i386/i386.exp index 2fbb52b..035d510 100644 --- a/gas/testsuite/gas/i386/i386.exp +++ b/gas/testsuite/gas/i386/i386.exp @@ -553,6 +553,7 @@ if [expr [istarget "i*86-*-*"] || [istarget "x86_64-*-*"]] then { run_list_test "string-bad" "" run_list_test "reg-bad" "" run_list_test "space1" "-al" + run_list_test "xmmword" "" run_dump_test rept run_dump_test pr19498 run_list_test "nop-bad-1" "" diff --git a/gas/testsuite/gas/i386/xmmword.l b/gas/testsuite/gas/i386/xmmword.l new file mode 100644 index 0000000..ce3af8d --- /dev/null +++ b/gas/testsuite/gas/i386/xmmword.l @@ -0,0 +1,101 @@ +.*: Assembler messages: +.*:4: Error: .* `addsd' +.*:5: Error: .* `vaddsd' +.*:6: Error: .* `vaddsd' +.*:8: Error: .* `addss' +.*:9: Error: .* `vaddss' +.*:10: Error: .* `vaddss' +.*:12: Error: .* `vbroadcastf32x2' +.*:13: Error: .* `vbroadcastf32x2' +.*:15: Error: .* `vbroadcasti32x2' +.*:16: Error: .* `vbroadcasti32x2' +.*:17: Error: .* `vbroadcasti32x2' +.*:19: Error: .* `vbroadcastsd' +.*:20: Error: .* `vbroadcastsd' +.*:21: Error: .* `vbroadcastsd' +.*:23: Error: .* `vbroadcastss' +.*:24: Error: .* `vbroadcastss' +.*:25: Error: .* `vbroadcastss' +.*:26: Error: .* `vbroadcastss' +.*:27: Error: .* `vbroadcastss' +.*:29: Error: .* `cvtdq2pd' +.*:30: Error: .* `vcvtdq2pd' +.*:31: Error: .* `vcvtdq2pd' +.*:33: Error: .* `vcvtph2ps' +.*:34: Error: .* `vcvtph2ps' +.*:36: Error: .* `cvtps2pd' +.*:37: Error: .* `vcvtps2pd' +.*:38: Error: .* `vcvtps2pd' +.*:40: Error: .* `vcvtps2ph' +.*:41: Error: .* `vcvtps2ph' +.*:43: Error: .* `vcvtudq2pd' +.*:45: Error: .* `insertps' +.*:46: Error: .* `vinsertps' +.*:47: Error: .* `vinsertps' +.*:49: Error: .* `movddup' +.*:50: Error: .* `vmovddup' +.*:51: Error: .* `vmovddup' +.*:53: Error: .* `vpbroadcastb' +.*:54: Error: .* `vpbroadcastb' +.*:55: Error: .* `vpbroadcastb' +.*:56: Error: .* `vpbroadcastb' +.*:57: Error: .* `vpbroadcastb' +.*:59: Error: .* `vpbroadcastd' +.*:60: Error: .* `vpbroadcastd' +.*:61: Error: .* `vpbroadcastd' +.*:62: Error: .* `vpbroadcastd' +.*:63: Error: .* `vpbroadcastd' +.*:65: Error: .* `vpbroadcastq' +.*:66: Error: .* `vpbroadcastq' +.*:67: Error: .* `vpbroadcastq' +.*:68: Error: .* `vpbroadcastq' +.*:69: Error: .* `vpbroadcastq' +.*:71: Error: .* `vpbroadcastw' +.*:72: Error: .* `vpbroadcastw' +.*:73: Error: .* `vpbroadcastw' +.*:74: Error: .* `vpbroadcastw' +.*:75: Error: .* `vpbroadcastw' +.*:77: Error: .* `pmovsxbd' +.*:78: Error: .* `vpmovsxbd' +.*:79: Error: .* `vpmovsxbd' +.*:80: Error: .* `vpmovsxbd' +.*:81: Error: .* `vpmovsxbd' +.*:83: Error: .* `pmovsxbq' +.*:84: Error: .* `vpmovsxbq' +.*:85: Error: .* `vpmovsxbq' +.*:86: Error: .* `vpmovsxbq' +.*:87: Error: .* `vpmovsxbq' +.*:88: Error: .* `vpmovsxbq' +.*:90: Error: .* `pmovsxdq' +.*:91: Error: .* `vpmovsxdq' +.*:92: Error: .* `vpmovsxdq' +.*:94: Error: .* `pmovsxwd' +.*:95: Error: .* `vpmovsxwd' +.*:96: Error: .* `vpmovsxwd' +.*:98: Error: .* `pmovsxwq' +.*:99: Error: .* `vpmovsxwq' +.*:100: Error: .* `vpmovsxwq' +.*:101: Error: .* `vpmovsxwq' +.*:102: Error: .* `vpmovsxwq' +.*:104: Error: .* `pmovzxbd' +.*:105: Error: .* `vpmovzxbd' +.*:106: Error: .* `vpmovzxbd' +.*:107: Error: .* `vpmovzxbd' +.*:108: Error: .* `vpmovzxbd' +.*:110: Error: .* `pmovzxbq' +.*:111: Error: .* `vpmovzxbq' +.*:112: Error: .* `vpmovzxbq' +.*:113: Error: .* `vpmovzxbq' +.*:114: Error: .* `vpmovzxbq' +.*:115: Error: .* `vpmovzxbq' +.*:117: Error: .* `pmovzxdq' +.*:118: Error: .* `vpmovzxdq' +.*:119: Error: .* `vpmovzxdq' +.*:121: Error: .* `pmovzxwd' +.*:122: Error: .* `vpmovzxwd' +.*:123: Error: .* `vpmovzxwd' +.*:125: Error: .* `pmovzxwq' +.*:126: Error: .* `vpmovzxwq' +.*:127: Error: .* `vpmovzxwq' +.*:128: Error: .* `vpmovzxwq' +.*:129: Error: .* `vpmovzxwq' diff --git a/gas/testsuite/gas/i386/xmmword.s b/gas/testsuite/gas/i386/xmmword.s new file mode 100644 index 0000000..47d2d8d --- /dev/null +++ b/gas/testsuite/gas/i386/xmmword.s @@ -0,0 +1,129 @@ + .text + .intel_syntax noprefix +xmmword: + addsd xmm0, xmmword ptr [eax] + vaddsd xmm0, xmm0, xmmword ptr [eax] + vaddsd xmm0{k7}, xmm0, xmmword ptr [eax] + + addss xmm0, xmmword ptr [eax] + vaddss xmm0, xmm0, xmmword ptr [eax] + vaddss xmm0{k7}, xmm0, xmmword ptr [eax] + + vbroadcastf32x2 ymm0, xmmword ptr [eax] + vbroadcastf32x2 zmm0, xmmword ptr [eax] + + vbroadcasti32x2 xmm0, xmmword ptr [eax] + vbroadcasti32x2 ymm0, xmmword ptr [eax] + vbroadcasti32x2 zmm0, xmmword ptr [eax] + + vbroadcastsd ymm0, xmmword ptr [eax] + vbroadcastsd ymm0{k7}, xmmword ptr [eax] + vbroadcastsd zmm0{k7}, xmmword ptr [eax] + + vbroadcastss xmm0, xmmword ptr [eax] + vbroadcastss xmm0{k7}, xmmword ptr [eax] + vbroadcastss ymm0, xmmword ptr [eax] + vbroadcastss ymm0{k7}, xmmword ptr [eax] + vbroadcastss zmm0, xmmword ptr [eax] + + cvtdq2pd xmm0, xmmword ptr [eax] + vcvtdq2pd xmm0, xmmword ptr [eax] + vcvtdq2pd xmm0{k7}, xmmword ptr [eax] + + vcvtph2ps xmm0, xmmword ptr [eax] + vcvtph2ps xmm0{k7}, xmmword ptr [eax] + + cvtps2pd xmm0, xmmword ptr [eax] + vcvtps2pd xmm0, xmmword ptr [eax] + vcvtps2pd xmm0{k7}, xmmword ptr [eax] + + vcvtps2ph xmmword ptr [eax], xmm0, 0 + vcvtps2ph xmmword ptr [eax]{k7}, xmm0, 0 + + vcvtudq2pd xmm0, xmmword ptr [eax] + + insertps xmm0, xmmword ptr [eax], 0 + vinsertps xmm0, xmm0, xmmword ptr [eax], 0 + {evex} vinsertps xmm0, xmm0, xmmword ptr [eax], 0 + + movddup xmm0, xmmword ptr [eax] + vmovddup xmm0, xmmword ptr [eax] + vmovddup xmm0{k7}, xmmword ptr [eax] + + vpbroadcastb xmm0, xmmword ptr [eax] + vpbroadcastb xmm0{k7}, xmmword ptr [eax] + vpbroadcastb ymm0, xmmword ptr [eax] + vpbroadcastb ymm0{k7}, xmmword ptr [eax] + vpbroadcastb zmm0, xmmword ptr [eax] + + vpbroadcastd xmm0, xmmword ptr [eax] + vpbroadcastd xmm0{k7}, xmmword ptr [eax] + vpbroadcastd ymm0, xmmword ptr [eax] + vpbroadcastd ymm0{k7}, xmmword ptr [eax] + vpbroadcastd zmm0, xmmword ptr [eax] + + vpbroadcastq xmm0, xmmword ptr [eax] + vpbroadcastq xmm0{k7}, xmmword ptr [eax] + vpbroadcastq ymm0, xmmword ptr [eax] + vpbroadcastq ymm0{k7}, xmmword ptr [eax] + vpbroadcastq zmm0, xmmword ptr [eax] + + vpbroadcastw xmm0, xmmword ptr [eax] + vpbroadcastw xmm0{k7}, xmmword ptr [eax] + vpbroadcastw ymm0, xmmword ptr [eax] + vpbroadcastw ymm0{k7}, xmmword ptr [eax] + vpbroadcastw zmm0, xmmword ptr [eax] + + pmovsxbd xmm0, xmmword ptr [eax] + vpmovsxbd xmm0, xmmword ptr [eax] + vpmovsxbd xmm0{k7}, xmmword ptr [eax] + vpmovsxbd ymm0, xmmword ptr [eax] + vpmovsxbd ymm0{k7}, xmmword ptr [eax] + + pmovsxbq xmm0, xmmword ptr [eax] + vpmovsxbq xmm0, xmmword ptr [eax] + vpmovsxbq xmm0{k7}, xmmword ptr [eax] + vpmovsxbq ymm0, xmmword ptr [eax] + vpmovsxbq ymm0{k7}, xmmword ptr [eax] + vpmovsxbq zmm0, xmmword ptr [eax] + + pmovsxdq xmm0, xmmword ptr [eax] + vpmovsxdq xmm0, xmmword ptr [eax] + vpmovsxdq xmm0{k7}, xmmword ptr [eax] + + pmovsxwd xmm0, xmmword ptr [eax] + vpmovsxwd xmm0, xmmword ptr [eax] + vpmovsxwd xmm0{k7}, xmmword ptr [eax] + + pmovsxwq xmm0, xmmword ptr [eax] + vpmovsxwq xmm0, xmmword ptr [eax] + vpmovsxwq xmm0{k7}, xmmword ptr [eax] + vpmovsxwq ymm0, xmmword ptr [eax] + vpmovsxwq ymm0{k7}, xmmword ptr [eax] + + pmovzxbd xmm0, xmmword ptr [eax] + vpmovzxbd xmm0, xmmword ptr [eax] + vpmovzxbd xmm0{k7}, xmmword ptr [eax] + vpmovzxbd ymm0, xmmword ptr [eax] + vpmovzxbd ymm0{k7}, xmmword ptr [eax] + + pmovzxbq xmm0, xmmword ptr [eax] + vpmovzxbq xmm0, xmmword ptr [eax] + vpmovzxbq xmm0{k7}, xmmword ptr [eax] + vpmovzxbq ymm0, xmmword ptr [eax] + vpmovzxbq ymm0{k7}, xmmword ptr [eax] + vpmovzxbq zmm0, xmmword ptr [eax] + + pmovzxdq xmm0, xmmword ptr [eax] + vpmovzxdq xmm0, xmmword ptr [eax] + vpmovzxdq xmm0{k7}, xmmword ptr [eax] + + pmovzxwd xmm0, xmmword ptr [eax] + vpmovzxwd xmm0, xmmword ptr [eax] + vpmovzxwd xmm0{k7}, xmmword ptr [eax] + + pmovzxwq xmm0, xmmword ptr [eax] + vpmovzxwq xmm0, xmmword ptr [eax] + vpmovzxwq xmm0{k7}, xmmword ptr [eax] + vpmovzxwq ymm0, xmmword ptr [eax] + vpmovzxwq ymm0{k7}, xmmword ptr [eax] |