x86/Intel: don't accept malformed EXTRQ / INSERTQ
authorJan Beulich <jbeulich@suse.com>
Wed, 9 Nov 2022 10:09:34 +0000 (11:09 +0100)
committerJan Beulich <jbeulich@suse.com>
Wed, 9 Nov 2022 10:09:34 +0000 (11:09 +0100)
Operand swapping was mistakenly suppressed when the first two operands
were immediate ones, not taking into account overall operand count. This
way EXTRQ / INSERTQ would have been accepted also with kind-of-AT&T
operand order.

For the testcase being extended, in order to not move around "GAS
LISTING" expectations, suppress pagination.

gas/config/tc-i386.c
gas/testsuite/gas/i386/i386.exp
gas/testsuite/gas/i386/inval.l
gas/testsuite/gas/i386/inval.s

index 6dcf11470ccd5b3f4110aa82f5a11326c6531d02..da005c5d61d1210a84757cfb475c560b141f3080 100644 (file)
@@ -4885,7 +4885,8 @@ md_assemble (char *line)
       && !startswith (mnemonic, "rmp")
       && (strcmp (mnemonic, "tpause") != 0)
       && (strcmp (mnemonic, "umwait") != 0)
-      && !(operand_type_check (i.types[0], imm)
+      && !(i.operands == 2
+          && operand_type_check (i.types[0], imm)
           && operand_type_check (i.types[1], imm)))
     swap_operands ();
 
index 5b20ac7ce5f9e259522818d2ef3b91aeccd3418a..cad783e46fd5aff79c537be11c494d0b33447501 100644 (file)
@@ -51,7 +51,7 @@ if [gas_32_check] then {
 
     run_list_test "float" "-al -mmnemonic=att"
     run_list_test "general" "-al --listing-lhs-width=2"
-    run_list_test "inval" "-al"
+    run_list_test "inval" "-aln"
     run_list_test "inval-16" "-al"
     run_list_test "segment" "-al"
     run_list_test "inval-seg" "-al"
index abe220620b7537769e735d436b5809c6f891e3a7..5d520f0e8e7564a429d3dfba82c671642a02a6fe 100644 (file)
 .*:97: Error: .*shl.*
 .*:98: Error: .*rol.*
 .*:99: Error: .*rcl.*
-.*:102: Error: .*
-.*:104: Error: .*
+.*:101: Error: .*extrq.*
+.*:102: Error: .*insertq.*
 .*:105: Error: .*
-.*:106: Error: .*
+.*:107: Error: .*
 .*:108: Error: .*
 .*:109: Error: .*
-.*:110: Error: .*
+.*:111: Error: .*
 .*:112: Error: .*
 .*:113: Error: .*
-.*:114: Error: .*
-GAS LISTING .*
-
-
+.*:115: Error: .*
+.*:116: Error: .*
+.*:117: Error: .*
 [      ]*1[    ]+\.text
 [      ]*2[    ]+\.allow_index_reg
 [      ]*3[    ]+\# All the following should be illegal
@@ -157,9 +156,6 @@ GAS LISTING .*
 [      ]*55[   ]+fnstsw %al
 [      ]*56[   ]+fstsw %eax
 [      ]*57[   ]+fstsw %al
-\fGAS LISTING .*
-
-
 [      ]*58[   ]+
 [      ]*59[   ]+movnti %ax, \(%eax\)
 [      ]*60[   ]+movntiw %ax, \(%eax\)
@@ -203,6 +199,9 @@ GAS LISTING .*
 [      ]*[1-9][0-9]*[  ]+rol \[ecx\], 2
 [      ]*[1-9][0-9]*[  ]+rcl \[edx\], cl
 [      ]*[1-9][0-9]*[  ]+
+[      ]*[1-9][0-9]*[  ]+extrq 1, 2, xmm3
+[      ]*[1-9][0-9]*[  ]+insertq 1, 2, xmm3, xmm4
+[      ]*[1-9][0-9]*[  ]+
 [      ]*[1-9][0-9]*[  ]+\.att_syntax prefix
 [      ]*[1-9][0-9]*[  ]+movsd \(%esi\), %ss:\(%edi\), %ss:\(%eax\)
 [      ]*[1-9][0-9]*[  ]+
@@ -217,6 +216,4 @@ GAS LISTING .*
 [      ]*[1-9][0-9]*[  ]+inb   %dx, %ax
 [      ]*[1-9][0-9]*[  ]+outb  %ax, %dx
 [      ]*[1-9][0-9]*[  ]+movb  %ax, %bx
-\fGAS LISTING .*
-
-
+#pass
index 7adfec64600a453430c2883e1115fec13e386426..4e9f751c61f1539396e77c1d840d16be56d0688c 100644 (file)
@@ -98,6 +98,9 @@ movnti word ptr [eax], ax
        rol [ecx], 2
        rcl [edx], cl
 
+       extrq 1, 2, xmm3
+       insertq 1, 2, xmm3, xmm4
+
        .att_syntax prefix
        movsd (%esi), %ss:(%edi), %ss:(%eax)