Don't use vec_disp8 encoding with the .d32 suffix
authorH.J. Lu <hjl.tools@gmail.com>
Tue, 5 Apr 2016 04:19:27 +0000 (21:19 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Tue, 5 Apr 2016 04:19:27 +0000 (21:19 -0700)
Since the .d32 suffix prefers 32-bit displacement in encoding, try
vec_disp8 encoding only if i.disp_encoding != disp_encoding_32bit.

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/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 ce5304d868e51caa6041664be7bfb1d19105aacf..f382a73a3908c85573a235322ecce8ef4f1137f0 100644 (file)
@@ -4575,7 +4575,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]