]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
Don't use vec_disp8 encoding with the .d32 suffix
authorH.J. Lu <hjl.tools@gmail.com>
Fri, 15 Apr 2016 13:01:31 +0000 (06:01 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Fri, 15 Apr 2016 13:02:38 +0000 (06:02 -0700)
Since the .d32 suffix prefers 32-bit displacement in encoding, try
vec_disp8 encoding only if i.disp_encoding != disp_encoding_32bit.

Backport from master

PR gas/19909
* config/tc-i386.c (check_VecOperands): Try vec_disp8 encoding
only if i.disp_encoding != disp_encoding_32bit.
* gas/testsuite/gas/i386/disp32.s: Add tests for vmovdqu64.d32.
* gas/testsuite/gas/i386/x86-64-disp32.s: Likewise.
* gas/testsuite/gas/i386/disp32.d: Updated.
* gas/testsuite/gas/i386/x86-64-disp32.d: Likewise.

gas/ChangeLog
gas/config/tc-i386.c
gas/testsuite/gas/i386/disp32.d
gas/testsuite/gas/i386/disp32.s
gas/testsuite/gas/i386/x86-64-disp32.d
gas/testsuite/gas/i386/x86-64-disp32.s

index 96a882234fcd89910a42263d7fc1d21a2671a688..ae27fd047659fcecb1a64e31f7585f1225291477 100644 (file)
@@ -1,3 +1,16 @@
+2016-04-15  H.J. Lu  <hongjiu.lu@intel.com>
+
+       Backport from master
+       2016-04-04  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR gas/19909
+       * config/tc-i386.c (check_VecOperands): Try vec_disp8 encoding
+       only if i.disp_encoding != disp_encoding_32bit.
+       * gas/testsuite/gas/i386/disp32.s: Add tests for vmovdqu64.d32.
+       * gas/testsuite/gas/i386/x86-64-disp32.s: Likewise.
+       * gas/testsuite/gas/i386/disp32.d: Updated.
+       * gas/testsuite/gas/i386/x86-64-disp32.d: Likewise.
+
 2016-02-20  H.J. Lu  <hongjiu.lu@intel.com>
 
        Backport from master
index 8676c5f2e740e25738d940a7dbbdb2978b8c3417..664f38102f751aaa5795955d0b6ac5b44b45d250 100644 (file)
@@ -4564,7 +4564,9 @@ check_VecOperands (const insn_template *t)
            && i.op[op].disps->X_op == O_constant)
          {
            offsetT value = i.op[op].disps->X_add_number;
-           int vec_disp8_ok = fits_in_vec_disp8 (value);
+           int vec_disp8_ok
+             = (i.disp_encoding != disp_encoding_32bit
+                && fits_in_vec_disp8 (value));
            if (t->operand_types [op].bitfield.vec_disp8)
              {
                if (vec_disp8_ok)
index a3255fa1377be114fab2aa2435fab62c26d1ec59..24ada8151af0d5bc34a5325d51fbbfc37433f4e2 100644 (file)
@@ -15,11 +15,12 @@ Disassembly of section .text:
 [      ]*[a-f0-9]+:    8b 98 ff 0f 00 00       mov    0xfff\(%eax\),%ebx
 [      ]*[a-f0-9]+:    8b 98 00 00 00 00       mov    0x0\(%eax\),%ebx
 [      ]*[a-f0-9]+:    8b 98 03 00 00 00       mov    0x3\(%eax\),%ebx
-[      ]*[a-f0-9]+:    eb 07                   jmp    26 <foo>
-[      ]*[a-f0-9]+:    eb 05                   jmp    26 <foo>
-[      ]*[a-f0-9]+:    e9 00 00 00 00          jmp    26 <foo>
+[      ]*[a-f0-9]+:    62 f1 fe 08 6f 98 c0 ff ff ff   vmovdqu64 -0x40\(%eax\),%xmm3
+[      ]*[a-f0-9]+:    eb 07                   jmp    30 <foo>
+[      ]*[a-f0-9]+:    eb 05                   jmp    30 <foo>
+[      ]*[a-f0-9]+:    e9 00 00 00 00          jmp    30 <foo>
 
-0+26 <foo>:
+0+30 <foo>:
 [      ]*[a-f0-9]+:    89 18                   mov    %ebx,\(%eax\)
 [      ]*[a-f0-9]+:    89 58 03                mov    %ebx,0x3\(%eax\)
 [      ]*[a-f0-9]+:    89 98 ff 0f 00 00       mov    %ebx,0xfff\(%eax\)
@@ -27,4 +28,5 @@ Disassembly of section .text:
 [      ]*[a-f0-9]+:    89 58 03                mov    %ebx,0x3\(%eax\)
 [      ]*[a-f0-9]+:    89 98 00 00 00 00       mov    %ebx,0x0\(%eax\)
 [      ]*[a-f0-9]+:    89 98 03 00 00 00       mov    %ebx,0x3\(%eax\)
+[      ]*[a-f0-9]+:    62 f1 fe 08 6f 98 c0 ff ff ff   vmovdqu64 -0x40\(%eax\),%xmm3
 #pass
index c3bec3a8232163d54d3a24b2d0bf92f201538b45..fa85ae530c0c96b420680b8ce81d15606d0981d6 100644 (file)
@@ -9,6 +9,8 @@
        mov.d32 (%eax),%ebx
        mov.d32 3(%eax),%ebx
 
+       vmovdqu64.d32 -0x40(%eax),%xmm3
+
        jmp foo
        jmp.d8 foo
        jmp.d32 foo
@@ -24,3 +26,5 @@ foo:
 
        mov.d32 DWORD PTR [eax], ebx
        mov.d32 DWORD PTR [eax+3], ebx
+
+       vmovdqu64.d32 xmm3,XMMWORD PTR [eax-0x40]
index 8e307ee671fba8dc55ac499c52cf26760cab5524..da5dcb0db74d2773efc8e8a318acedb408bbdc4a 100644 (file)
@@ -15,11 +15,12 @@ Disassembly of section .text:
 [      ]*[a-f0-9]+:    8b 98 ff 0f 00 00       mov    0xfff\(%rax\),%ebx
 [      ]*[a-f0-9]+:    8b 98 00 00 00 00       mov    0x0\(%rax\),%ebx
 [      ]*[a-f0-9]+:    8b 98 03 00 00 00       mov    0x3\(%rax\),%ebx
-[      ]*[a-f0-9]+:    eb 07                   jmp    26 <foo>
-[      ]*[a-f0-9]+:    eb 05                   jmp    26 <foo>
-[      ]*[a-f0-9]+:    e9 00 00 00 00          jmpq   26 <foo>
+[      ]*[a-f0-9]+:    62 f1 fe 08 6f 98 c0 ff ff ff   vmovdqu64 -0x40\(%rax\),%xmm3
+[      ]*[a-f0-9]+:    eb 07                   jmp    30 <foo>
+[      ]*[a-f0-9]+:    eb 05                   jmp    30 <foo>
+[      ]*[a-f0-9]+:    e9 00 00 00 00          jmpq   30 <foo>
 
-0+26 <foo>:
+0+30 <foo>:
 [      ]*[a-f0-9]+:    89 18                   mov    %ebx,\(%rax\)
 [      ]*[a-f0-9]+:    89 58 03                mov    %ebx,0x3\(%rax\)
 [      ]*[a-f0-9]+:    89 98 ff 0f 00 00       mov    %ebx,0xfff\(%rax\)
@@ -27,4 +28,5 @@ Disassembly of section .text:
 [      ]*[a-f0-9]+:    89 58 03                mov    %ebx,0x3\(%rax\)
 [      ]*[a-f0-9]+:    89 98 00 00 00 00       mov    %ebx,0x0\(%rax\)
 [      ]*[a-f0-9]+:    89 98 03 00 00 00       mov    %ebx,0x3\(%rax\)
+[      ]*[a-f0-9]+:    62 f1 fe 08 6f 98 c0 ff ff ff   vmovdqu64 -0x40\(%rax\),%xmm3
 #pass
index 08563396a5328ce5434e4a150a4f5b1c813dd228..e00aa02b798b6e42dc00d279533225dd12282fbc 100644 (file)
@@ -8,6 +8,7 @@
 
        mov.d32 (%rax),%ebx
        mov.d32 3(%rax),%ebx
+       vmovdqu64.d32 -0x40(%rax),%xmm3
 
        jmp foo
        jmp.d8 foo
@@ -24,3 +25,5 @@ foo:
 
        mov.d32 DWORD PTR [rax], ebx
        mov.d32 DWORD PTR [rax+3], ebx
+
+       vmovdqu64.d32 xmm3,XMMWORD PTR [rax-0x40]