x86/Intel: support "mmword ptr"
authorJan Beulich <jbeulich@suse.com>
Mon, 9 Dec 2019 12:31:39 +0000 (13:31 +0100)
committerJan Beulich <jbeulich@suse.com>
Mon, 9 Dec 2019 12:31:39 +0000 (13:31 +0100)
This is an alias of "qword ptr", commonly used with MMX insns.

At this occasion also test (alongside the newly supported "mmword")
- "zmmword" used as expression,
- PADDB with "oword ptr" (aliasing "xmmword ptr").

gas/ChangeLog
gas/config/tc-i386-intel.c
gas/testsuite/gas/i386/intel-expr.d
gas/testsuite/gas/i386/intel-expr.s
gas/testsuite/gas/i386/intelok.d
gas/testsuite/gas/i386/intelok.e
gas/testsuite/gas/i386/intelok.s

index f198b01a441080efe2dbe408442e2a19b88d522b..3f9344e0e811ebab53e8d95ff1ae7d58d2bee8ac 100644 (file)
@@ -1,3 +1,13 @@
+2019-12-09  Jan Beulich  <jbeulich@suse.com>
+
+       * config/tc-i386-intel.c (O_mmword_ptr): Define.
+       (i386_types): Add mmword entry.
+       (i386_intel_simplify, i386_intel_operand): Add comment.
+       * testsuite/gas/i386/intel-expr.s: Also test mmword and zmmword.
+       * testsuite/gas/i386/intelok.s: Also test "mmword ptr".
+       * testsuite/gas/i386/intel-expr.d, testsuite/gas/i386/intelok.d,
+       testsuite/gas/i386/intelok.e: Adjust expectations.
+
 2019-12-09  Jan Beulich  <jbeulich@suse.com>
 
        * config/tc-i386-intel.c (i386_intel_operand): Set "byte"
index 8eb587b233e29bb2f4fa5f212e111879dce992f3..2f79d36d397d62517334339eb1817718455fe04b 100644 (file)
@@ -52,6 +52,8 @@ intel_state;
 #define O_dword_ptr O_md26
 /* qword ptr X_add_symbol */
 #define O_qword_ptr O_md25
+/* mmword ptr X_add_symbol */
+#define O_mmword_ptr O_qword_ptr
 /* oword ptr X_add_symbol */
 #define O_oword_ptr O_md24
 /* fword ptr X_add_symbol */
@@ -105,6 +107,7 @@ const i386_types[] =
     I386_TYPE(dword, 4),
     I386_TYPE(fword, 6),
     I386_TYPE(qword, 8),
+    I386_TYPE(mmword, 8),
     I386_TYPE(tbyte, 10),
     I386_TYPE(oword, 16),
     I386_TYPE(xmmword, 16),
@@ -383,7 +386,7 @@ static int i386_intel_simplify (expressionS *e)
     case O_word_ptr:
     case O_dword_ptr:
     case O_fword_ptr:
-    case O_qword_ptr:
+    case O_qword_ptr: /* O_mmword_ptr */
     case O_tbyte_ptr:
     case O_oword_ptr:
     case O_xmmword_ptr:
@@ -678,7 +681,7 @@ i386_intel_operand (char *operand_string, int got_a_float)
            }
          break;
 
-       case O_qword_ptr:
+       case O_qword_ptr: /* O_mmword_ptr */
          i.types[this_operand].bitfield.qword = 1;
          if (current_templates->start->base_opcode == 0x62 /* bound */
              || got_a_float == 1)      /* "f..." */
index 1b1f937ba2d1d7d866c6cb2ec5029b42ed331db8..5113f15bc886db3dc42c81b902a28b2b6a6592c2 100644 (file)
@@ -9,5 +9,5 @@ Contents of section .data:
  0020 03000000 40020000 00000000 08000000  .*
  0030 05000000 0f000000 ffffffff 00000000  .*
  0040 ffffffff 00000000 ffffffff 00000000  .*
- 0050 01020406 080a1010 20cccccc cccccccc  .*
+ 0050 01020406 08080a10 102040cc cccccccc  .*
  0060 02ff05ff 04ff06ff 08ff06ff cccccccc  .*
index 7149f6951532f6f76ad7e03cccad98e35bb3e32b..8e89d7471b532bd56930e1a49f2662270d20be83 100644 (file)
@@ -24,7 +24,8 @@
 
        .p2align 4, 0xcc
 
-       .byte   byte, word, dword, fword, qword, tbyte, oword, xmmword, ymmword
+       .byte   byte, word, dword, fword, qword, mmword, tbyte
+       .byte   oword, xmmword, ymmword, zmmword
 
        .p2align 4, 0xcc
 
index f0780271098c144c5f2830cf0ccd1bb275403278..b1bb6f114b680ede6fc1b78d37d0542396a1d7ca 100644 (file)
@@ -88,6 +88,8 @@ Disassembly of section .text:
 [      ]*[0-9a-f]+:    0f bf 00[       ]+movsx[        ]+eax,WORD PTR \[eax\]
 [      ]*[0-9a-f]+:    0f fc 00[       ]+paddb[        ]+mm0,(QWORD PTR )?\[eax\]
 [      ]*[0-9a-f]+:    0f fc 00[       ]+paddb[        ]+mm0,(QWORD PTR )?\[eax\]
+[      ]*[0-9a-f]+:    0f fc 00[       ]+paddb[        ]+mm0,(QWORD PTR )?\[eax\]
+[      ]*[0-9a-f]+:    66 0f fc 00[    ]+paddb[        ]+xmm0,(XMMWORD PTR )?\[eax\]
 [      ]*[0-9a-f]+:    66 0f fc 00[    ]+paddb[        ]+xmm0,(XMMWORD PTR )?\[eax\]
 [      ]*[0-9a-f]+:    66 0f fc 00[    ]+paddb[        ]+xmm0,(XMMWORD PTR )?\[eax\]
 [      ]*[0-9a-f]+:    0f c4 00 03[    ]+pinsrw[       ]+mm0,(WORD PTR )?\[eax\],0x3
index 585eaf458f05a1c18a4c20eea5e7147e21584a13..fa0818204f0b73da4ef28fce2b68c70ebf286884 100644 (file)
@@ -1,2 +1,2 @@
 .*: Assembler messages:
-.*:153: Warning: redundant segment overrides
+.*:155: Warning: redundant segment overrides
index eae9c2d50923e1067bb1436a917d0556ca9fd7bd..abd98b460c9fe45d36a926882ddcf1ea84ac86f5 100644 (file)
@@ -83,9 +83,11 @@ start:
        movsx   eax, byte ptr [eax]
        movsx   eax, word ptr [eax]
        paddb   mm0, [eax]
+       paddb   mm0, mmword ptr [eax]
        paddb   mm0, qword ptr [eax]
        paddb   xmm0, [eax]
        paddb   xmm0, xmmword ptr [eax]
+       paddb   xmm0, oword ptr [eax]
        pinsrw  mm0, word ptr [eax], 3
        pinsrw  xmm0, word ptr [eax], 7
        push    dword ptr [eax]