[PATCH] x86/Intel: correct AVX512F scatter insn element sizes

H.J. Lu hjl.tools@gmail.com
Wed Jul 20 16:48:39 GMT 2022


On Wed, Jul 20, 2022 at 12:57 AM Jan Beulich <jbeulich@suse.com> wrote:
>
> I clearly screwed up in 6ff00b5e12e7 ("x86/Intel: correct permitted
> operand sizes for AVX512 scatter/gather") giving all AVX512F scatter
> insns Dword element size. Update testcases (also their gather parts),
> utilizing that there previously were two identical lines each (for no
> apparent reason).
> ---
> Perhaps another candidate to also go on the 2.39 branch.

OK for master and 2.39 branch.

Thanks.

> --- a/gas/testsuite/gas/i386/avx512f.s
> +++ b/gas/testsuite/gas/i386/avx512f.s
> @@ -11109,22 +11109,22 @@ _start:
>         vfnmsub231ss    xmm6{k7}, xmm5, DWORD PTR [edx-516]      # AVX512F
>
>         vgatherdpd      zmm6{k1}, [ebp+ymm7*8-123]       # AVX512F
> -       vgatherdpd      zmm6{k1}, [ebp+ymm7*8-123]       # AVX512F
> +       vgatherdpd      zmm6{k1}, qword ptr [ebp+ymm7*8-123]     # AVX512F
>         vgatherdpd      zmm6{k1}, [eax+ymm7+256]         # AVX512F
>         vgatherdpd      zmm6{k1}, [ecx+ymm7*4+1024]      # AVX512F
>
>         vgatherdps      zmm6{k1}, [ebp+zmm7*8-123]       # AVX512F
> -       vgatherdps      zmm6{k1}, [ebp+zmm7*8-123]       # AVX512F
> +       vgatherdps      zmm6{k1}, dword ptr [ebp+zmm7*8-123]     # AVX512F
>         vgatherdps      zmm6{k1}, [eax+zmm7+256]         # AVX512F
>         vgatherdps      zmm6{k1}, [ecx+zmm7*4+1024]      # AVX512F
>
>         vgatherqpd      zmm6{k1}, [ebp+zmm7*8-123]       # AVX512F
> -       vgatherqpd      zmm6{k1}, [ebp+zmm7*8-123]       # AVX512F
> +       vgatherqpd      zmm6{k1}, qword ptr [ebp+zmm7*8-123]     # AVX512F
>         vgatherqpd      zmm6{k1}, [eax+zmm7+256]         # AVX512F
>         vgatherqpd      zmm6{k1}, [ecx+zmm7*4+1024]      # AVX512F
>
>         vgatherqps      ymm6{k1}, [ebp+zmm7*8-123]       # AVX512F
> -       vgatherqps      ymm6{k1}, [ebp+zmm7*8-123]       # AVX512F
> +       vgatherqps      ymm6{k1}, dword ptr [ebp+zmm7*8-123]     # AVX512F
>         vgatherqps      ymm6{k1}, [eax+zmm7+256]         # AVX512F
>         vgatherqps      ymm6{k1}, [ecx+zmm7*4+1024]      # AVX512F
>
> @@ -12401,22 +12401,22 @@ _start:
>         vpexpandq       zmm6{k7}{z}, zmm5        # AVX512F
>
>         vpgatherdd      zmm6{k1}, [ebp+zmm7*8-123]       # AVX512F
> -       vpgatherdd      zmm6{k1}, [ebp+zmm7*8-123]       # AVX512F
> +       vpgatherdd      zmm6{k1}, dword ptr [ebp+zmm7*8-123]     # AVX512F
>         vpgatherdd      zmm6{k1}, [eax+zmm7+256]         # AVX512F
>         vpgatherdd      zmm6{k1}, [ecx+zmm7*4+1024]      # AVX512F
>
>         vpgatherdq      zmm6{k1}, [ebp+ymm7*8-123]       # AVX512F
> -       vpgatherdq      zmm6{k1}, [ebp+ymm7*8-123]       # AVX512F
> +       vpgatherdq      zmm6{k1}, qword ptr [ebp+ymm7*8-123]     # AVX512F
>         vpgatherdq      zmm6{k1}, [eax+ymm7+256]         # AVX512F
>         vpgatherdq      zmm6{k1}, [ecx+ymm7*4+1024]      # AVX512F
>
>         vpgatherqd      ymm6{k1}, [ebp+zmm7*8-123]       # AVX512F
> -       vpgatherqd      ymm6{k1}, [ebp+zmm7*8-123]       # AVX512F
> +       vpgatherqd      ymm6{k1}, dword ptr [ebp+zmm7*8-123]     # AVX512F
>         vpgatherqd      ymm6{k1}, [eax+zmm7+256]         # AVX512F
>         vpgatherqd      ymm6{k1}, [ecx+zmm7*4+1024]      # AVX512F
>
>         vpgatherqq      zmm6{k1}, [ebp+zmm7*8-123]       # AVX512F
> -       vpgatherqq      zmm6{k1}, [ebp+zmm7*8-123]       # AVX512F
> +       vpgatherqq      zmm6{k1}, qword ptr [ebp+zmm7*8-123]     # AVX512F
>         vpgatherqq      zmm6{k1}, [eax+zmm7+256]         # AVX512F
>         vpgatherqq      zmm6{k1}, [ecx+zmm7*4+1024]      # AVX512F
>
> @@ -12706,22 +12706,22 @@ _start:
>         vporq   zmm6, zmm5, qword bcst [edx-1032]        # AVX512F
>
>         vpscatterdd     [ebp+zmm7*8-123]{k1}, zmm6       # AVX512F
> -       vpscatterdd     [ebp+zmm7*8-123]{k1}, zmm6       # AVX512F
> +       vpscatterdd     dword ptr [ebp+zmm7*8-123]{k1}, zmm6     # AVX512F
>         vpscatterdd     [eax+zmm7+256]{k1}, zmm6         # AVX512F
>         vpscatterdd     [ecx+zmm7*4+1024]{k1}, zmm6      # AVX512F
>
>         vpscatterdq     [ebp+ymm7*8-123]{k1}, zmm6       # AVX512F
> -       vpscatterdq     [ebp+ymm7*8-123]{k1}, zmm6       # AVX512F
> +       vpscatterdq     qword ptr [ebp+ymm7*8-123]{k1}, zmm6     # AVX512F
>         vpscatterdq     [eax+ymm7+256]{k1}, zmm6         # AVX512F
>         vpscatterdq     [ecx+ymm7*4+1024]{k1}, zmm6      # AVX512F
>
>         vpscatterqd     [ebp+zmm7*8-123]{k1}, ymm6       # AVX512F
> -       vpscatterqd     [ebp+zmm7*8-123]{k1}, ymm6       # AVX512F
> +       vpscatterqd     dword ptr [ebp+zmm7*8-123]{k1}, ymm6     # AVX512F
>         vpscatterqd     [eax+zmm7+256]{k1}, ymm6         # AVX512F
>         vpscatterqd     [ecx+zmm7*4+1024]{k1}, ymm6      # AVX512F
>
>         vpscatterqq     [ebp+zmm7*8-123]{k1}, zmm6       # AVX512F
> -       vpscatterqq     [ebp+zmm7*8-123]{k1}, zmm6       # AVX512F
> +       vpscatterqq     qword ptr [ebp+zmm7*8-123]{k1}, zmm6     # AVX512F
>         vpscatterqq     [eax+zmm7+256]{k1}, zmm6         # AVX512F
>         vpscatterqq     [ecx+zmm7*4+1024]{k1}, zmm6      # AVX512F
>
> @@ -13162,22 +13162,22 @@ _start:
>         vrsqrt14ss      xmm6{k7}, xmm5, DWORD PTR [edx-516]      # AVX512F
>
>         vscatterdpd     [ebp+ymm7*8-123]{k1}, zmm6       # AVX512F
> -       vscatterdpd     [ebp+ymm7*8-123]{k1}, zmm6       # AVX512F
> +       vscatterdpd     qword ptr [ebp+ymm7*8-123]{k1}, zmm6     # AVX512F
>         vscatterdpd     [eax+ymm7+256]{k1}, zmm6         # AVX512F
>         vscatterdpd     [ecx+ymm7*4+1024]{k1}, zmm6      # AVX512F
>
>         vscatterdps     [ebp+zmm7*8-123]{k1}, zmm6       # AVX512F
> -       vscatterdps     [ebp+zmm7*8-123]{k1}, zmm6       # AVX512F
> +       vscatterdps     dword ptr [ebp+zmm7*8-123]{k1}, zmm6     # AVX512F
>         vscatterdps     [eax+zmm7+256]{k1}, zmm6         # AVX512F
>         vscatterdps     [ecx+zmm7*4+1024]{k1}, zmm6      # AVX512F
>
>         vscatterqpd     [ebp+zmm7*8-123]{k1}, zmm6       # AVX512F
> -       vscatterqpd     [ebp+zmm7*8-123]{k1}, zmm6       # AVX512F
> +       vscatterqpd     qword ptr [ebp+zmm7*8-123]{k1}, zmm6     # AVX512F
>         vscatterqpd     [eax+zmm7+256]{k1}, zmm6         # AVX512F
>         vscatterqpd     [ecx+zmm7*4+1024]{k1}, zmm6      # AVX512F
>
>         vscatterqps     [ebp+zmm7*8-123]{k1}, ymm6       # AVX512F
> -       vscatterqps     [ebp+zmm7*8-123]{k1}, ymm6       # AVX512F
> +       vscatterqps     dword ptr [ebp+zmm7*8-123]{k1}, ymm6     # AVX512F
>         vscatterqps     [eax+zmm7+256]{k1}, ymm6         # AVX512F
>         vscatterqps     [ecx+zmm7*4+1024]{k1}, ymm6      # AVX512F
>
> --- a/gas/testsuite/gas/i386/x86-64-avx512f.s
> +++ b/gas/testsuite/gas/i386/x86-64-avx512f.s
> @@ -11618,23 +11618,23 @@ _start:
>         vfnmsub231ss    xmm30{k7}, xmm29, DWORD PTR [rdx-516]    # AVX512F
>
>         vgatherdpd      zmm30{k1}, [r14+ymm31*8-123]     # AVX512F
> -       vgatherdpd      zmm30{k1}, [r14+ymm31*8-123]     # AVX512F
> +       vgatherdpd      zmm30{k1}, qword ptr [r14+ymm31*8-123]   # AVX512F
>         vgatherdpd      zmm30{k1}, [r9+ymm31+256]        # AVX512F
>         vgatherdpd      zmm30{k1}, [rcx+ymm31*4+1024]    # AVX512F
>
>         vgatherdps      zmm30{k1}, [r14+zmm31*8-123]     # AVX512F
> -       vgatherdps      zmm30{k1}, [r14+zmm31*8-123]     # AVX512F
> +       vgatherdps      zmm30{k1}, dword ptr [r14+zmm31*8-123]   # AVX512F
>         vgatherdps      zmm30{k1}, [r9+zmm31+256]        # AVX512F
>         vgatherdps      zmm30{k1}, [rcx+zmm31*4+1024]    # AVX512F
>
>         vgatherqpd      zmm30{k1}, [r14+zmm31*8-123]     # AVX512F
> -       vgatherqpd      zmm30{k1}, [r14+zmm31*8-123]     # AVX512F
> +       vgatherqpd      zmm30{k1}, qword ptr [r14+zmm31*8-123]   # AVX512F
>         vgatherqpd      zmm30{k1}, [r9+zmm31+256]        # AVX512F
>         vgatherqpd      zmm30{k1}, [rcx+zmm31*4+1024]    # AVX512F
>         vgatherqpd      zmm3{k1}, [r14+zmm19*8+123]      # AVX512F
>
>         vgatherqps      ymm30{k1}, [r14+zmm31*8-123]     # AVX512F
> -       vgatherqps      ymm30{k1}, [r14+zmm31*8-123]     # AVX512F
> +       vgatherqps      ymm30{k1}, dword ptr [r14+zmm31*8-123]   # AVX512F
>         vgatherqps      ymm30{k1}, [r9+zmm31+256]        # AVX512F
>         vgatherqps      ymm30{k1}, [rcx+zmm31*4+1024]    # AVX512F
>
> @@ -13021,22 +13021,22 @@ _start:
>         vpexpandq       zmm30{k7}{z}, zmm29      # AVX512F
>
>         vpgatherdd      zmm30{k1}, [r14+zmm31*8-123]     # AVX512F
> -       vpgatherdd      zmm30{k1}, [r14+zmm31*8-123]     # AVX512F
> +       vpgatherdd      zmm30{k1}, dword ptr [r14+zmm31*8-123]   # AVX512F
>         vpgatherdd      zmm30{k1}, [r9+zmm31+256]        # AVX512F
>         vpgatherdd      zmm30{k1}, [rcx+zmm31*4+1024]    # AVX512F
>
>         vpgatherdq      zmm30{k1}, [r14+ymm31*8-123]     # AVX512F
> -       vpgatherdq      zmm30{k1}, [r14+ymm31*8-123]     # AVX512F
> +       vpgatherdq      zmm30{k1}, qword ptr [r14+ymm31*8-123]   # AVX512F
>         vpgatherdq      zmm30{k1}, [r9+ymm31+256]        # AVX512F
>         vpgatherdq      zmm30{k1}, [rcx+ymm31*4+1024]    # AVX512F
>
>         vpgatherqd      ymm30{k1}, [r14+zmm31*8-123]     # AVX512F
> -       vpgatherqd      ymm30{k1}, [r14+zmm31*8-123]     # AVX512F
> +       vpgatherqd      ymm30{k1}, dword ptr [r14+zmm31*8-123]   # AVX512F
>         vpgatherqd      ymm30{k1}, [r9+zmm31+256]        # AVX512F
>         vpgatherqd      ymm30{k1}, [rcx+zmm31*4+1024]    # AVX512F
>
>         vpgatherqq      zmm30{k1}, [r14+zmm31*8-123]     # AVX512F
> -       vpgatherqq      zmm30{k1}, [r14+zmm31*8-123]     # AVX512F
> +       vpgatherqq      zmm30{k1}, qword ptr [r14+zmm31*8-123]   # AVX512F
>         vpgatherqq      zmm30{k1}, [r9+zmm31+256]        # AVX512F
>         vpgatherqq      zmm30{k1}, [rcx+zmm31*4+1024]    # AVX512F
>
> @@ -13326,22 +13326,22 @@ _start:
>         vporq   zmm30, zmm29, qword bcst [rdx-1032]      # AVX512F
>
>         vpscatterdd     [r14+zmm31*8-123]{k1}, zmm30     # AVX512F
> -       vpscatterdd     [r14+zmm31*8-123]{k1}, zmm30     # AVX512F
> +       vpscatterdd     dword ptr [r14+zmm31*8-123]{k1}, zmm30   # AVX512F
>         vpscatterdd     [r9+zmm31+256]{k1}, zmm30        # AVX512F
>         vpscatterdd     [rcx+zmm31*4+1024]{k1}, zmm30    # AVX512F
>
>         vpscatterdq     [r14+ymm31*8-123]{k1}, zmm30     # AVX512F
> -       vpscatterdq     [r14+ymm31*8-123]{k1}, zmm30     # AVX512F
> +       vpscatterdq     qword ptr [r14+ymm31*8-123]{k1}, zmm30   # AVX512F
>         vpscatterdq     [r9+ymm31+256]{k1}, zmm30        # AVX512F
>         vpscatterdq     [rcx+ymm31*4+1024]{k1}, zmm30    # AVX512F
>
>         vpscatterqd     [r14+zmm31*8-123]{k1}, ymm30     # AVX512F
> -       vpscatterqd     [r14+zmm31*8-123]{k1}, ymm30     # AVX512F
> +       vpscatterqd     dword ptr [r14+zmm31*8-123]{k1}, ymm30   # AVX512F
>         vpscatterqd     [r9+zmm31+256]{k1}, ymm30        # AVX512F
>         vpscatterqd     [rcx+zmm31*4+1024]{k1}, ymm30    # AVX512F
>
>         vpscatterqq     [r14+zmm31*8-123]{k1}, zmm30     # AVX512F
> -       vpscatterqq     [r14+zmm31*8-123]{k1}, zmm30     # AVX512F
> +       vpscatterqq     qword ptr [r14+zmm31*8-123]{k1}, zmm30   # AVX512F
>         vpscatterqq     [r9+zmm31+256]{k1}, zmm30        # AVX512F
>         vpscatterqq     [rcx+zmm31*4+1024]{k1}, zmm30    # AVX512F
>
> @@ -13782,22 +13782,22 @@ _start:
>         vrsqrt14ss      xmm30{k7}, xmm29, DWORD PTR [rdx-516]    # AVX512F
>
>         vscatterdpd     [r14+ymm31*8-123]{k1}, zmm30     # AVX512F
> -       vscatterdpd     [r14+ymm31*8-123]{k1}, zmm30     # AVX512F
> +       vscatterdpd     qword ptr [r14+ymm31*8-123]{k1}, zmm30   # AVX512F
>         vscatterdpd     [r9+ymm31+256]{k1}, zmm30        # AVX512F
>         vscatterdpd     [rcx+ymm31*4+1024]{k1}, zmm30    # AVX512F
>
>         vscatterdps     [r14+zmm31*8-123]{k1}, zmm30     # AVX512F
> -       vscatterdps     [r14+zmm31*8-123]{k1}, zmm30     # AVX512F
> +       vscatterdps     dword ptr [r14+zmm31*8-123]{k1}, zmm30   # AVX512F
>         vscatterdps     [r9+zmm31+256]{k1}, zmm30        # AVX512F
>         vscatterdps     [rcx+zmm31*4+1024]{k1}, zmm30    # AVX512F
>
>         vscatterqpd     [r14+zmm31*8-123]{k1}, zmm30     # AVX512F
> -       vscatterqpd     [r14+zmm31*8-123]{k1}, zmm30     # AVX512F
> +       vscatterqpd     qword ptr [r14+zmm31*8-123]{k1}, zmm30   # AVX512F
>         vscatterqpd     [r9+zmm31+256]{k1}, zmm30        # AVX512F
>         vscatterqpd     [rcx+zmm31*4+1024]{k1}, zmm30    # AVX512F
>
>         vscatterqps     [r14+zmm31*8-123]{k1}, ymm30     # AVX512F
> -       vscatterqps     [r14+zmm31*8-123]{k1}, ymm30     # AVX512F
> +       vscatterqps     dword ptr [r14+zmm31*8-123]{k1}, ymm30   # AVX512F
>         vscatterqps     [r9+zmm31+256]{k1}, ymm30        # AVX512F
>         vscatterqps     [rcx+zmm31*4+1024]{k1}, ymm30    # AVX512F
>
> --- a/opcodes/i386-opc.tbl
> +++ b/opcodes/i386-opc.tbl
> @@ -2278,10 +2278,10 @@ vcompressps, 0x668A, None, CpuAVX512F, M
>  vpcompressq, 0x668B, None, CpuAVX512F, Modrm|MaskingMorZ|Space0F38|VexW=2|Disp8MemShift=3|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex }
>  vpcompressd, 0x668B, None, CpuAVX512F, Modrm|MaskingMorZ|Space0F38|VexW=1|Disp8MemShift=2|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex }
>
> -vpscatterdq, 0x66A0, None, CpuAVX512F, Modrm|EVex=1|Masking=2|NoDefMask|Space0F38|VexW1|Disp8MemShift=3|VecSIB256|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegZMM, Dword|Unspecified|BaseIndex }
> -vpscatterqq, 0x66A1, None, CpuAVX512F, Modrm|EVex=1|Masking=2|NoDefMask|Space0F38|VexW1|Disp8MemShift=3|VecSIB512|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegZMM, Dword|Unspecified|BaseIndex }
> -vscatterdpd, 0x66A2, None, CpuAVX512F, Modrm|EVex=1|Masking=2|NoDefMask|Space0F38|VexW1|Disp8MemShift=3|VecSIB256|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegZMM, Dword|Unspecified|BaseIndex }
> -vscatterqpd, 0x66A3, None, CpuAVX512F, Modrm|EVex=1|Masking=2|NoDefMask|Space0F38|VexW1|Disp8MemShift=3|VecSIB512|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegZMM, Dword|Unspecified|BaseIndex }
> +vpscatterdq, 0x66A0, None, CpuAVX512F, Modrm|EVex=1|Masking=2|NoDefMask|Space0F38|VexW1|Disp8MemShift=3|VecSIB256|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegZMM, Qword|Unspecified|BaseIndex }
> +vpscatterqq, 0x66A1, None, CpuAVX512F, Modrm|EVex=1|Masking=2|NoDefMask|Space0F38|VexW1|Disp8MemShift=3|VecSIB512|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegZMM, Qword|Unspecified|BaseIndex }
> +vscatterdpd, 0x66A2, None, CpuAVX512F, Modrm|EVex=1|Masking=2|NoDefMask|Space0F38|VexW1|Disp8MemShift=3|VecSIB256|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegZMM, Qword|Unspecified|BaseIndex }
> +vscatterqpd, 0x66A3, None, CpuAVX512F, Modrm|EVex=1|Masking=2|NoDefMask|Space0F38|VexW1|Disp8MemShift=3|VecSIB512|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegZMM, Qword|Unspecified|BaseIndex }
>
>  vpscatterdd, 0x66A0, None, CpuAVX512F, Modrm|EVex=1|Masking=2|NoDefMask|Space0F38|VexW0|Disp8MemShift=2|VecSIB512|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegZMM, Dword|Unspecified|BaseIndex }
>  vscatterdps, 0x66A2, None, CpuAVX512F, Modrm|EVex=1|Masking=2|NoDefMask|Space0F38|VexW0|Disp8MemShift=2|VecSIB512|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegZMM, Dword|Unspecified|BaseIndex }



-- 
H.J.


More information about the Binutils mailing list