...

Text file src/github.com/zeebo/xxh3/accum_vector_avx512_amd64.s

Documentation: github.com/zeebo/xxh3

     1// Code generated by command: go run gen.go -avx512 -out ../accum_vector_avx512_amd64.s -pkg xxh3. DO NOT EDIT.
     2
     3#include "textflag.h"
     4
     5DATA prime_avx512<>+0(SB)/8, $0x000000009e3779b1
     6DATA prime_avx512<>+8(SB)/8, $0x000000009e3779b1
     7DATA prime_avx512<>+16(SB)/8, $0x000000009e3779b1
     8DATA prime_avx512<>+24(SB)/8, $0x000000009e3779b1
     9DATA prime_avx512<>+32(SB)/8, $0x000000009e3779b1
    10DATA prime_avx512<>+40(SB)/8, $0x000000009e3779b1
    11DATA prime_avx512<>+48(SB)/8, $0x000000009e3779b1
    12DATA prime_avx512<>+56(SB)/8, $0x000000009e3779b1
    13GLOBL prime_avx512<>(SB), RODATA|NOPTR, $64
    14
    15// func accumAVX512(acc *[8]uint64, data *byte, key *byte, len uint64)
    16// Requires: AVX, AVX512F, MMX+
    17TEXT ·accumAVX512(SB), NOSPLIT, $0-32
    18	MOVQ      acc+0(FP), AX
    19	MOVQ      data+8(FP), CX
    20	MOVQ      key+16(FP), DX
    21	MOVQ      len+24(FP), BX
    22	VMOVDQU64 (AX), Z1
    23	VMOVDQU64 prime_avx512<>+0(SB), Z0
    24	VMOVDQU64 (DX), Z2
    25	VMOVDQU64 8(DX), Z3
    26	VMOVDQU64 16(DX), Z4
    27	VMOVDQU64 24(DX), Z5
    28	VMOVDQU64 32(DX), Z6
    29	VMOVDQU64 40(DX), Z7
    30	VMOVDQU64 48(DX), Z8
    31	VMOVDQU64 56(DX), Z9
    32	VMOVDQU64 64(DX), Z10
    33	VMOVDQU64 72(DX), Z11
    34	VMOVDQU64 80(DX), Z12
    35	VMOVDQU64 88(DX), Z13
    36	VMOVDQU64 96(DX), Z14
    37	VMOVDQU64 104(DX), Z15
    38	VMOVDQU64 112(DX), Z16
    39	VMOVDQU64 120(DX), Z17
    40	VMOVDQU64 128(DX), Z18
    41	VMOVDQU64 121(DX), Z19
    42
    43accum_large:
    44	CMPQ       BX, $0x00000400
    45	JLE        accum
    46	VMOVDQU64  (CX), Z20
    47	PREFETCHT0 1024(CX)
    48	VPXORD     Z2, Z20, Z21
    49	VPSHUFD    $0x31, Z21, Z22
    50	VPMULUDQ   Z21, Z22, Z21
    51	VPSHUFD    $0x4e, Z20, Z20
    52	VPADDQ     Z1, Z20, Z1
    53	VPADDQ     Z1, Z21, Z1
    54	VMOVDQU64  64(CX), Z20
    55	PREFETCHT0 1088(CX)
    56	VPXORD     Z3, Z20, Z21
    57	VPSHUFD    $0x31, Z21, Z22
    58	VPMULUDQ   Z21, Z22, Z21
    59	VPSHUFD    $0x4e, Z20, Z20
    60	VPADDQ     Z1, Z20, Z1
    61	VPADDQ     Z1, Z21, Z1
    62	VMOVDQU64  128(CX), Z20
    63	PREFETCHT0 1152(CX)
    64	VPXORD     Z4, Z20, Z21
    65	VPSHUFD    $0x31, Z21, Z22
    66	VPMULUDQ   Z21, Z22, Z21
    67	VPSHUFD    $0x4e, Z20, Z20
    68	VPADDQ     Z1, Z20, Z1
    69	VPADDQ     Z1, Z21, Z1
    70	VMOVDQU64  192(CX), Z20
    71	PREFETCHT0 1216(CX)
    72	VPXORD     Z5, Z20, Z21
    73	VPSHUFD    $0x31, Z21, Z22
    74	VPMULUDQ   Z21, Z22, Z21
    75	VPSHUFD    $0x4e, Z20, Z20
    76	VPADDQ     Z1, Z20, Z1
    77	VPADDQ     Z1, Z21, Z1
    78	VMOVDQU64  256(CX), Z20
    79	PREFETCHT0 1280(CX)
    80	VPXORD     Z6, Z20, Z21
    81	VPSHUFD    $0x31, Z21, Z22
    82	VPMULUDQ   Z21, Z22, Z21
    83	VPSHUFD    $0x4e, Z20, Z20
    84	VPADDQ     Z1, Z20, Z1
    85	VPADDQ     Z1, Z21, Z1
    86	VMOVDQU64  320(CX), Z20
    87	PREFETCHT0 1344(CX)
    88	VPXORD     Z7, Z20, Z21
    89	VPSHUFD    $0x31, Z21, Z22
    90	VPMULUDQ   Z21, Z22, Z21
    91	VPSHUFD    $0x4e, Z20, Z20
    92	VPADDQ     Z1, Z20, Z1
    93	VPADDQ     Z1, Z21, Z1
    94	VMOVDQU64  384(CX), Z20
    95	PREFETCHT0 1408(CX)
    96	VPXORD     Z8, Z20, Z21
    97	VPSHUFD    $0x31, Z21, Z22
    98	VPMULUDQ   Z21, Z22, Z21
    99	VPSHUFD    $0x4e, Z20, Z20
   100	VPADDQ     Z1, Z20, Z1
   101	VPADDQ     Z1, Z21, Z1
   102	VMOVDQU64  448(CX), Z20
   103	PREFETCHT0 1472(CX)
   104	VPXORD     Z9, Z20, Z21
   105	VPSHUFD    $0x31, Z21, Z22
   106	VPMULUDQ   Z21, Z22, Z21
   107	VPSHUFD    $0x4e, Z20, Z20
   108	VPADDQ     Z1, Z20, Z1
   109	VPADDQ     Z1, Z21, Z1
   110	VMOVDQU64  512(CX), Z20
   111	PREFETCHT0 1536(CX)
   112	VPXORD     Z10, Z20, Z21
   113	VPSHUFD    $0x31, Z21, Z22
   114	VPMULUDQ   Z21, Z22, Z21
   115	VPSHUFD    $0x4e, Z20, Z20
   116	VPADDQ     Z1, Z20, Z1
   117	VPADDQ     Z1, Z21, Z1
   118	VMOVDQU64  576(CX), Z20
   119	PREFETCHT0 1600(CX)
   120	VPXORD     Z11, Z20, Z21
   121	VPSHUFD    $0x31, Z21, Z22
   122	VPMULUDQ   Z21, Z22, Z21
   123	VPSHUFD    $0x4e, Z20, Z20
   124	VPADDQ     Z1, Z20, Z1
   125	VPADDQ     Z1, Z21, Z1
   126	VMOVDQU64  640(CX), Z20
   127	PREFETCHT0 1664(CX)
   128	VPXORD     Z12, Z20, Z21
   129	VPSHUFD    $0x31, Z21, Z22
   130	VPMULUDQ   Z21, Z22, Z21
   131	VPSHUFD    $0x4e, Z20, Z20
   132	VPADDQ     Z1, Z20, Z1
   133	VPADDQ     Z1, Z21, Z1
   134	VMOVDQU64  704(CX), Z20
   135	PREFETCHT0 1728(CX)
   136	VPXORD     Z13, Z20, Z21
   137	VPSHUFD    $0x31, Z21, Z22
   138	VPMULUDQ   Z21, Z22, Z21
   139	VPSHUFD    $0x4e, Z20, Z20
   140	VPADDQ     Z1, Z20, Z1
   141	VPADDQ     Z1, Z21, Z1
   142	VMOVDQU64  768(CX), Z20
   143	PREFETCHT0 1792(CX)
   144	VPXORD     Z14, Z20, Z21
   145	VPSHUFD    $0x31, Z21, Z22
   146	VPMULUDQ   Z21, Z22, Z21
   147	VPSHUFD    $0x4e, Z20, Z20
   148	VPADDQ     Z1, Z20, Z1
   149	VPADDQ     Z1, Z21, Z1
   150	VMOVDQU64  832(CX), Z20
   151	PREFETCHT0 1856(CX)
   152	VPXORD     Z15, Z20, Z21
   153	VPSHUFD    $0x31, Z21, Z22
   154	VPMULUDQ   Z21, Z22, Z21
   155	VPSHUFD    $0x4e, Z20, Z20
   156	VPADDQ     Z1, Z20, Z1
   157	VPADDQ     Z1, Z21, Z1
   158	VMOVDQU64  896(CX), Z20
   159	PREFETCHT0 1920(CX)
   160	VPXORD     Z16, Z20, Z21
   161	VPSHUFD    $0x31, Z21, Z22
   162	VPMULUDQ   Z21, Z22, Z21
   163	VPSHUFD    $0x4e, Z20, Z20
   164	VPADDQ     Z1, Z20, Z1
   165	VPADDQ     Z1, Z21, Z1
   166	VMOVDQU64  960(CX), Z20
   167	PREFETCHT0 1984(CX)
   168	VPXORD     Z17, Z20, Z21
   169	VPSHUFD    $0x31, Z21, Z22
   170	VPMULUDQ   Z21, Z22, Z21
   171	VPSHUFD    $0x4e, Z20, Z20
   172	VPADDQ     Z1, Z20, Z1
   173	VPADDQ     Z1, Z21, Z1
   174	ADDQ       $0x00000400, CX
   175	SUBQ       $0x00000400, BX
   176	VPSRLQ     $0x2f, Z1, Z20
   177	VPTERNLOGD $0x96, Z1, Z18, Z20
   178	VPMULUDQ   Z0, Z20, Z1
   179	VPSHUFD    $0xf5, Z20, Z20
   180	VPMULUDQ   Z0, Z20, Z20
   181	VPSLLQ     $0x20, Z20, Z20
   182	VPADDQ     Z1, Z20, Z1
   183	JMP        accum_large
   184
   185accum:
   186	CMPQ      BX, $0x40
   187	JLE       finalize
   188	VMOVDQU64 (CX), Z0
   189	VPXORD    Z2, Z0, Z2
   190	VPSHUFD   $0x31, Z2, Z18
   191	VPMULUDQ  Z2, Z18, Z2
   192	VPSHUFD   $0x4e, Z0, Z0
   193	VPADDQ    Z1, Z0, Z1
   194	VPADDQ    Z1, Z2, Z1
   195	ADDQ      $0x00000040, CX
   196	SUBQ      $0x00000040, BX
   197	CMPQ      BX, $0x40
   198	JLE       finalize
   199	VMOVDQU64 (CX), Z0
   200	VPXORD    Z3, Z0, Z2
   201	VPSHUFD   $0x31, Z2, Z3
   202	VPMULUDQ  Z2, Z3, Z2
   203	VPSHUFD   $0x4e, Z0, Z0
   204	VPADDQ    Z1, Z0, Z1
   205	VPADDQ    Z1, Z2, Z1
   206	ADDQ      $0x00000040, CX
   207	SUBQ      $0x00000040, BX
   208	CMPQ      BX, $0x40
   209	JLE       finalize
   210	VMOVDQU64 (CX), Z0
   211	VPXORD    Z4, Z0, Z2
   212	VPSHUFD   $0x31, Z2, Z3
   213	VPMULUDQ  Z2, Z3, Z2
   214	VPSHUFD   $0x4e, Z0, Z0
   215	VPADDQ    Z1, Z0, Z1
   216	VPADDQ    Z1, Z2, Z1
   217	ADDQ      $0x00000040, CX
   218	SUBQ      $0x00000040, BX
   219	CMPQ      BX, $0x40
   220	JLE       finalize
   221	VMOVDQU64 (CX), Z0
   222	VPXORD    Z5, Z0, Z2
   223	VPSHUFD   $0x31, Z2, Z3
   224	VPMULUDQ  Z2, Z3, Z2
   225	VPSHUFD   $0x4e, Z0, Z0
   226	VPADDQ    Z1, Z0, Z1
   227	VPADDQ    Z1, Z2, Z1
   228	ADDQ      $0x00000040, CX
   229	SUBQ      $0x00000040, BX
   230	CMPQ      BX, $0x40
   231	JLE       finalize
   232	VMOVDQU64 (CX), Z0
   233	VPXORD    Z6, Z0, Z2
   234	VPSHUFD   $0x31, Z2, Z3
   235	VPMULUDQ  Z2, Z3, Z2
   236	VPSHUFD   $0x4e, Z0, Z0
   237	VPADDQ    Z1, Z0, Z1
   238	VPADDQ    Z1, Z2, Z1
   239	ADDQ      $0x00000040, CX
   240	SUBQ      $0x00000040, BX
   241	CMPQ      BX, $0x40
   242	JLE       finalize
   243	VMOVDQU64 (CX), Z0
   244	VPXORD    Z7, Z0, Z2
   245	VPSHUFD   $0x31, Z2, Z3
   246	VPMULUDQ  Z2, Z3, Z2
   247	VPSHUFD   $0x4e, Z0, Z0
   248	VPADDQ    Z1, Z0, Z1
   249	VPADDQ    Z1, Z2, Z1
   250	ADDQ      $0x00000040, CX
   251	SUBQ      $0x00000040, BX
   252	CMPQ      BX, $0x40
   253	JLE       finalize
   254	VMOVDQU64 (CX), Z0
   255	VPXORD    Z8, Z0, Z2
   256	VPSHUFD   $0x31, Z2, Z3
   257	VPMULUDQ  Z2, Z3, Z2
   258	VPSHUFD   $0x4e, Z0, Z0
   259	VPADDQ    Z1, Z0, Z1
   260	VPADDQ    Z1, Z2, Z1
   261	ADDQ      $0x00000040, CX
   262	SUBQ      $0x00000040, BX
   263	CMPQ      BX, $0x40
   264	JLE       finalize
   265	VMOVDQU64 (CX), Z0
   266	VPXORD    Z9, Z0, Z2
   267	VPSHUFD   $0x31, Z2, Z3
   268	VPMULUDQ  Z2, Z3, Z2
   269	VPSHUFD   $0x4e, Z0, Z0
   270	VPADDQ    Z1, Z0, Z1
   271	VPADDQ    Z1, Z2, Z1
   272	ADDQ      $0x00000040, CX
   273	SUBQ      $0x00000040, BX
   274	CMPQ      BX, $0x40
   275	JLE       finalize
   276	VMOVDQU64 (CX), Z0
   277	VPXORD    Z10, Z0, Z2
   278	VPSHUFD   $0x31, Z2, Z3
   279	VPMULUDQ  Z2, Z3, Z2
   280	VPSHUFD   $0x4e, Z0, Z0
   281	VPADDQ    Z1, Z0, Z1
   282	VPADDQ    Z1, Z2, Z1
   283	ADDQ      $0x00000040, CX
   284	SUBQ      $0x00000040, BX
   285	CMPQ      BX, $0x40
   286	JLE       finalize
   287	VMOVDQU64 (CX), Z0
   288	VPXORD    Z11, Z0, Z2
   289	VPSHUFD   $0x31, Z2, Z3
   290	VPMULUDQ  Z2, Z3, Z2
   291	VPSHUFD   $0x4e, Z0, Z0
   292	VPADDQ    Z1, Z0, Z1
   293	VPADDQ    Z1, Z2, Z1
   294	ADDQ      $0x00000040, CX
   295	SUBQ      $0x00000040, BX
   296	CMPQ      BX, $0x40
   297	JLE       finalize
   298	VMOVDQU64 (CX), Z0
   299	VPXORD    Z12, Z0, Z2
   300	VPSHUFD   $0x31, Z2, Z3
   301	VPMULUDQ  Z2, Z3, Z2
   302	VPSHUFD   $0x4e, Z0, Z0
   303	VPADDQ    Z1, Z0, Z1
   304	VPADDQ    Z1, Z2, Z1
   305	ADDQ      $0x00000040, CX
   306	SUBQ      $0x00000040, BX
   307	CMPQ      BX, $0x40
   308	JLE       finalize
   309	VMOVDQU64 (CX), Z0
   310	VPXORD    Z13, Z0, Z2
   311	VPSHUFD   $0x31, Z2, Z3
   312	VPMULUDQ  Z2, Z3, Z2
   313	VPSHUFD   $0x4e, Z0, Z0
   314	VPADDQ    Z1, Z0, Z1
   315	VPADDQ    Z1, Z2, Z1
   316	ADDQ      $0x00000040, CX
   317	SUBQ      $0x00000040, BX
   318	CMPQ      BX, $0x40
   319	JLE       finalize
   320	VMOVDQU64 (CX), Z0
   321	VPXORD    Z14, Z0, Z2
   322	VPSHUFD   $0x31, Z2, Z3
   323	VPMULUDQ  Z2, Z3, Z2
   324	VPSHUFD   $0x4e, Z0, Z0
   325	VPADDQ    Z1, Z0, Z1
   326	VPADDQ    Z1, Z2, Z1
   327	ADDQ      $0x00000040, CX
   328	SUBQ      $0x00000040, BX
   329	CMPQ      BX, $0x40
   330	JLE       finalize
   331	VMOVDQU64 (CX), Z0
   332	VPXORD    Z15, Z0, Z2
   333	VPSHUFD   $0x31, Z2, Z3
   334	VPMULUDQ  Z2, Z3, Z2
   335	VPSHUFD   $0x4e, Z0, Z0
   336	VPADDQ    Z1, Z0, Z1
   337	VPADDQ    Z1, Z2, Z1
   338	ADDQ      $0x00000040, CX
   339	SUBQ      $0x00000040, BX
   340	CMPQ      BX, $0x40
   341	JLE       finalize
   342	VMOVDQU64 (CX), Z0
   343	VPXORD    Z16, Z0, Z2
   344	VPSHUFD   $0x31, Z2, Z3
   345	VPMULUDQ  Z2, Z3, Z2
   346	VPSHUFD   $0x4e, Z0, Z0
   347	VPADDQ    Z1, Z0, Z1
   348	VPADDQ    Z1, Z2, Z1
   349	ADDQ      $0x00000040, CX
   350	SUBQ      $0x00000040, BX
   351	CMPQ      BX, $0x40
   352	JLE       finalize
   353	VMOVDQU64 (CX), Z0
   354	VPXORD    Z17, Z0, Z2
   355	VPSHUFD   $0x31, Z2, Z3
   356	VPMULUDQ  Z2, Z3, Z2
   357	VPSHUFD   $0x4e, Z0, Z0
   358	VPADDQ    Z1, Z0, Z1
   359	VPADDQ    Z1, Z2, Z1
   360	ADDQ      $0x00000040, CX
   361	SUBQ      $0x00000040, BX
   362
   363finalize:
   364	CMPQ      BX, $0x00
   365	JE        return
   366	SUBQ      $0x40, CX
   367	ADDQ      BX, CX
   368	VMOVDQU64 (CX), Z0
   369	VPXORD    Z19, Z0, Z2
   370	VPSHUFD   $0x31, Z2, Z3
   371	VPMULUDQ  Z2, Z3, Z2
   372	VPSHUFD   $0x4e, Z0, Z0
   373	VPADDQ    Z1, Z0, Z1
   374	VPADDQ    Z1, Z2, Z1
   375
   376return:
   377	VMOVDQU64 Z1, (AX)
   378	VZEROUPPER
   379	RET

View as plain text