]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
x86-64: extend expected-size check in check_qword_reg()
authorJan Beulich <jbeulich@suse.com>
Fri, 17 Nov 2023 10:20:06 +0000 (11:20 +0100)
committerJan Beulich <jbeulich@suse.com>
Fri, 17 Nov 2023 10:20:06 +0000 (11:20 +0100)
Due to a missing check "crc32q %al, %rax" was wrongly translated to the
encoding of "crc32q %rax, %rax", rather than being rejected as invalid.
(The mnemonic suffix describes the source operand, not the destination
one.)

Note that check_{word,long}_reg() do not (currently) appear to require
similar amending, as there are no insn templates permitting an L or W
suffix and having an operand which allows for Reg8 and Reg64, but
neither Reg16 nor Reg32.

gas/config/tc-i386.c
gas/testsuite/gas/i386/x86-64-inval-crc32.l
gas/testsuite/gas/i386/x86-64-inval-crc32.s

index 235e41e7918f9a7d4b95c712e7a2d6db1ef8ce35..6dcdccbccd622be0020f7ca42bee0350f089a2e5 100644 (file)
@@ -8151,7 +8151,8 @@ check_qword_reg (void)
             && (i.tm.operand_types[op].bitfield.class == Reg
                 || i.tm.operand_types[op].bitfield.instance == Accum)
             && (i.tm.operand_types[op].bitfield.word
-                || i.tm.operand_types[op].bitfield.dword))
+                || i.tm.operand_types[op].bitfield.dword
+                || i.tm.operand_types[op].bitfield.qword))
       {
        as_bad (_("`%s%s' not allowed with `%s%c'"),
                register_prefix,
index 4c3d418275e4b168401e163a0f806457cd620dd9..260f4e7b94dc0c320f214edb9d6b000358855524 100644 (file)
@@ -15,8 +15,8 @@
 .*:19: Error: .*
 .*:20: Error: .*
 .*:21: Error: .*
-.*:24: Error: .*
-.*:25: Error: .*
+.*:22: Error: .*
+.*:23: Error: .*
 .*:26: Error: .*
 .*:27: Error: .*
 .*:28: Error: .*
@@ -26,6 +26,8 @@
 .*:32: Error: .*
 .*:33: Error: .*
 .*:34: Error: .*
+.*:35: Error: .*
+.*:36: Error: .*
 GAS LISTING .*
 
 
@@ -52,20 +54,22 @@ GAS LISTING .*
 [      ]*17[   ]+crc32  %eax, %rax
 [      ]*18[   ]+crc32l  %rax, %eax
 [      ]*19[   ]+crc32l  %eax, %rax
-[      ]*20[   ]+crc32q  %eax, %rax
-[      ]*21[   ]+crc32q  %rax, %eax
-[      ]*22[   ]+
-[      ]*23[   ]+\.intel_syntax noprefix
-[      ]*24[   ]+crc32  al,byte ptr \[rsi\]
-[      ]*25[   ]+crc32  ax, word ptr \[rsi\]
-[      ]*26[   ]+crc32  rax,word ptr \[rsi\]
-[      ]*27[   ]+crc32  rax,dword ptr \[rsi\]
-[      ]*28[   ]+crc32  al,\[rsi\]
-[      ]*29[   ]+crc32  ax,\[rsi\]
-[      ]*30[   ]+crc32  eax,\[rsi\]
-[      ]*31[   ]+crc32  rax,\[rsi\]
-[      ]*32[   ]+crc32  al,al
-[      ]*33[   ]+crc32  ax, ax
-[      ]*34[   ]+crc32  rax,eax
-[      ]*35[   ]*
+[      ]*[0-9]+[       ]+crc32q  %al, %rax
+[      ]*[0-9]+[       ]+crc32q  %ax, %rax
+[      ]*[0-9]+[       ]+crc32q  %eax, %rax
+[      ]*[0-9]+[       ]+crc32q  %rax, %eax
+[      ]*[0-9]+[       ]+
+[      ]*[0-9]+[       ]+\.intel_syntax noprefix
+[      ]*[0-9]+[       ]+crc32  al,byte ptr \[rsi\]
+[      ]*[0-9]+[       ]+crc32  ax, word ptr \[rsi\]
+[      ]*[0-9]+[       ]+crc32  rax,word ptr \[rsi\]
+[      ]*[0-9]+[       ]+crc32  rax,dword ptr \[rsi\]
+[      ]*[0-9]+[       ]+crc32  al,\[rsi\]
+[      ]*[0-9]+[       ]+crc32  ax,\[rsi\]
+[      ]*[0-9]+[       ]+crc32  eax,\[rsi\]
+[      ]*[0-9]+[       ]+crc32  rax,\[rsi\]
+[      ]*[0-9]+[       ]+crc32  al,al
+[      ]*[0-9]+[       ]+crc32  ax, ax
+[      ]*[0-9]+[       ]+crc32  rax,eax
+[      ]*[0-9]+[       ]*
 #pass
index 8f05c57ac5e3d8358cf1deef51d06e8914ecc365..7e106c72330940fadff4b8b47e2a1f4364e347f1 100644 (file)
@@ -17,6 +17,8 @@ crc32  %rax, %eax
 crc32  %eax, %rax
 crc32l  %rax, %eax
 crc32l  %eax, %rax
+crc32q  %al, %rax
+crc32q  %ax, %rax
 crc32q  %eax, %rax
 crc32q  %rax, %eax