...

Text file src/crypto/internal/fips140/aes/ctr_amd64.s

Documentation: crypto/internal/fips140/aes

     1// Code generated by command: go run ctr_amd64_asm.go -out ../../ctr_amd64.s. DO NOT EDIT.
     2
     3//go:build !purego
     4
     5#include "textflag.h"
     6
     7// func ctrBlocks1Asm(nr int, xk *[60]uint32, dst *[16]byte, src *[16]byte, ivlo uint64, ivhi uint64)
     8// Requires: AES, SSE, SSE2, SSE4.1, SSSE3
     9TEXT ·ctrBlocks1Asm(SB), $0-48
    10	MOVQ   nr+0(FP), AX
    11	MOVQ   xk+8(FP), CX
    12	MOVQ   dst+16(FP), DX
    13	MOVQ   src+24(FP), BX
    14	MOVQ   ivlo+32(FP), SI
    15	MOVQ   ivhi+40(FP), DI
    16	MOVOU  bswapMask<>+0(SB), X0
    17	MOVQ   SI, X1
    18	PINSRQ $0x01, DI, X1
    19	PSHUFB X0, X1
    20	MOVUPS (CX), X0
    21	PXOR   X0, X1
    22	ADDQ   $0x10, CX
    23	SUBQ   $0x0c, AX
    24	JE     enc192
    25	JB     enc128
    26	MOVUPS (CX), X0
    27	AESENC X0, X1
    28	MOVUPS 16(CX), X0
    29	AESENC X0, X1
    30	ADDQ   $0x20, CX
    31
    32enc192:
    33	MOVUPS (CX), X0
    34	AESENC X0, X1
    35	MOVUPS 16(CX), X0
    36	AESENC X0, X1
    37	ADDQ   $0x20, CX
    38
    39enc128:
    40	MOVUPS     (CX), X0
    41	AESENC     X0, X1
    42	MOVUPS     16(CX), X0
    43	AESENC     X0, X1
    44	MOVUPS     32(CX), X0
    45	AESENC     X0, X1
    46	MOVUPS     48(CX), X0
    47	AESENC     X0, X1
    48	MOVUPS     64(CX), X0
    49	AESENC     X0, X1
    50	MOVUPS     80(CX), X0
    51	AESENC     X0, X1
    52	MOVUPS     96(CX), X0
    53	AESENC     X0, X1
    54	MOVUPS     112(CX), X0
    55	AESENC     X0, X1
    56	MOVUPS     128(CX), X0
    57	AESENC     X0, X1
    58	MOVUPS     144(CX), X0
    59	AESENCLAST X0, X1
    60	MOVUPS     (BX), X0
    61	PXOR       X1, X0
    62	MOVUPS     X0, (DX)
    63	RET
    64
    65DATA bswapMask<>+0(SB)/8, $0x08090a0b0c0d0e0f
    66DATA bswapMask<>+8(SB)/8, $0x0001020304050607
    67GLOBL bswapMask<>(SB), RODATA|NOPTR, $16
    68
    69// func ctrBlocks2Asm(nr int, xk *[60]uint32, dst *[32]byte, src *[32]byte, ivlo uint64, ivhi uint64)
    70// Requires: AES, SSE, SSE2, SSE4.1, SSSE3
    71TEXT ·ctrBlocks2Asm(SB), $0-48
    72	MOVQ   nr+0(FP), AX
    73	MOVQ   xk+8(FP), CX
    74	MOVQ   dst+16(FP), DX
    75	MOVQ   src+24(FP), BX
    76	MOVQ   ivlo+32(FP), SI
    77	MOVQ   ivhi+40(FP), DI
    78	MOVOU  bswapMask<>+0(SB), X0
    79	MOVQ   SI, X1
    80	PINSRQ $0x01, DI, X1
    81	PSHUFB X0, X1
    82	ADDQ   $0x01, SI
    83	ADCQ   $0x00, DI
    84	MOVQ   SI, X2
    85	PINSRQ $0x01, DI, X2
    86	PSHUFB X0, X2
    87	MOVUPS (CX), X0
    88	PXOR   X0, X1
    89	PXOR   X0, X2
    90	ADDQ   $0x10, CX
    91	SUBQ   $0x0c, AX
    92	JE     enc192
    93	JB     enc128
    94	MOVUPS (CX), X0
    95	AESENC X0, X1
    96	AESENC X0, X2
    97	MOVUPS 16(CX), X0
    98	AESENC X0, X1
    99	AESENC X0, X2
   100	ADDQ   $0x20, CX
   101
   102enc192:
   103	MOVUPS (CX), X0
   104	AESENC X0, X1
   105	AESENC X0, X2
   106	MOVUPS 16(CX), X0
   107	AESENC X0, X1
   108	AESENC X0, X2
   109	ADDQ   $0x20, CX
   110
   111enc128:
   112	MOVUPS     (CX), X0
   113	AESENC     X0, X1
   114	AESENC     X0, X2
   115	MOVUPS     16(CX), X0
   116	AESENC     X0, X1
   117	AESENC     X0, X2
   118	MOVUPS     32(CX), X0
   119	AESENC     X0, X1
   120	AESENC     X0, X2
   121	MOVUPS     48(CX), X0
   122	AESENC     X0, X1
   123	AESENC     X0, X2
   124	MOVUPS     64(CX), X0
   125	AESENC     X0, X1
   126	AESENC     X0, X2
   127	MOVUPS     80(CX), X0
   128	AESENC     X0, X1
   129	AESENC     X0, X2
   130	MOVUPS     96(CX), X0
   131	AESENC     X0, X1
   132	AESENC     X0, X2
   133	MOVUPS     112(CX), X0
   134	AESENC     X0, X1
   135	AESENC     X0, X2
   136	MOVUPS     128(CX), X0
   137	AESENC     X0, X1
   138	AESENC     X0, X2
   139	MOVUPS     144(CX), X0
   140	AESENCLAST X0, X1
   141	AESENCLAST X0, X2
   142	MOVUPS     (BX), X0
   143	PXOR       X1, X0
   144	MOVUPS     X0, (DX)
   145	MOVUPS     16(BX), X0
   146	PXOR       X2, X0
   147	MOVUPS     X0, 16(DX)
   148	RET
   149
   150// func ctrBlocks4Asm(nr int, xk *[60]uint32, dst *[64]byte, src *[64]byte, ivlo uint64, ivhi uint64)
   151// Requires: AES, SSE, SSE2, SSE4.1, SSSE3
   152TEXT ·ctrBlocks4Asm(SB), $0-48
   153	MOVQ   nr+0(FP), AX
   154	MOVQ   xk+8(FP), CX
   155	MOVQ   dst+16(FP), DX
   156	MOVQ   src+24(FP), BX
   157	MOVQ   ivlo+32(FP), SI
   158	MOVQ   ivhi+40(FP), DI
   159	MOVOU  bswapMask<>+0(SB), X0
   160	MOVQ   SI, X1
   161	PINSRQ $0x01, DI, X1
   162	PSHUFB X0, X1
   163	ADDQ   $0x01, SI
   164	ADCQ   $0x00, DI
   165	MOVQ   SI, X2
   166	PINSRQ $0x01, DI, X2
   167	PSHUFB X0, X2
   168	ADDQ   $0x01, SI
   169	ADCQ   $0x00, DI
   170	MOVQ   SI, X3
   171	PINSRQ $0x01, DI, X3
   172	PSHUFB X0, X3
   173	ADDQ   $0x01, SI
   174	ADCQ   $0x00, DI
   175	MOVQ   SI, X4
   176	PINSRQ $0x01, DI, X4
   177	PSHUFB X0, X4
   178	MOVUPS (CX), X0
   179	PXOR   X0, X1
   180	PXOR   X0, X2
   181	PXOR   X0, X3
   182	PXOR   X0, X4
   183	ADDQ   $0x10, CX
   184	SUBQ   $0x0c, AX
   185	JE     enc192
   186	JB     enc128
   187	MOVUPS (CX), X0
   188	AESENC X0, X1
   189	AESENC X0, X2
   190	AESENC X0, X3
   191	AESENC X0, X4
   192	MOVUPS 16(CX), X0
   193	AESENC X0, X1
   194	AESENC X0, X2
   195	AESENC X0, X3
   196	AESENC X0, X4
   197	ADDQ   $0x20, CX
   198
   199enc192:
   200	MOVUPS (CX), X0
   201	AESENC X0, X1
   202	AESENC X0, X2
   203	AESENC X0, X3
   204	AESENC X0, X4
   205	MOVUPS 16(CX), X0
   206	AESENC X0, X1
   207	AESENC X0, X2
   208	AESENC X0, X3
   209	AESENC X0, X4
   210	ADDQ   $0x20, CX
   211
   212enc128:
   213	MOVUPS     (CX), X0
   214	AESENC     X0, X1
   215	AESENC     X0, X2
   216	AESENC     X0, X3
   217	AESENC     X0, X4
   218	MOVUPS     16(CX), X0
   219	AESENC     X0, X1
   220	AESENC     X0, X2
   221	AESENC     X0, X3
   222	AESENC     X0, X4
   223	MOVUPS     32(CX), X0
   224	AESENC     X0, X1
   225	AESENC     X0, X2
   226	AESENC     X0, X3
   227	AESENC     X0, X4
   228	MOVUPS     48(CX), X0
   229	AESENC     X0, X1
   230	AESENC     X0, X2
   231	AESENC     X0, X3
   232	AESENC     X0, X4
   233	MOVUPS     64(CX), X0
   234	AESENC     X0, X1
   235	AESENC     X0, X2
   236	AESENC     X0, X3
   237	AESENC     X0, X4
   238	MOVUPS     80(CX), X0
   239	AESENC     X0, X1
   240	AESENC     X0, X2
   241	AESENC     X0, X3
   242	AESENC     X0, X4
   243	MOVUPS     96(CX), X0
   244	AESENC     X0, X1
   245	AESENC     X0, X2
   246	AESENC     X0, X3
   247	AESENC     X0, X4
   248	MOVUPS     112(CX), X0
   249	AESENC     X0, X1
   250	AESENC     X0, X2
   251	AESENC     X0, X3
   252	AESENC     X0, X4
   253	MOVUPS     128(CX), X0
   254	AESENC     X0, X1
   255	AESENC     X0, X2
   256	AESENC     X0, X3
   257	AESENC     X0, X4
   258	MOVUPS     144(CX), X0
   259	AESENCLAST X0, X1
   260	AESENCLAST X0, X2
   261	AESENCLAST X0, X3
   262	AESENCLAST X0, X4
   263	MOVUPS     (BX), X0
   264	PXOR       X1, X0
   265	MOVUPS     X0, (DX)
   266	MOVUPS     16(BX), X0
   267	PXOR       X2, X0
   268	MOVUPS     X0, 16(DX)
   269	MOVUPS     32(BX), X0
   270	PXOR       X3, X0
   271	MOVUPS     X0, 32(DX)
   272	MOVUPS     48(BX), X0
   273	PXOR       X4, X0
   274	MOVUPS     X0, 48(DX)
   275	RET
   276
   277// func ctrBlocks8Asm(nr int, xk *[60]uint32, dst *[128]byte, src *[128]byte, ivlo uint64, ivhi uint64)
   278// Requires: AES, SSE, SSE2, SSE4.1, SSSE3
   279TEXT ·ctrBlocks8Asm(SB), $0-48
   280	MOVQ   nr+0(FP), AX
   281	MOVQ   xk+8(FP), CX
   282	MOVQ   dst+16(FP), DX
   283	MOVQ   src+24(FP), BX
   284	MOVQ   ivlo+32(FP), SI
   285	MOVQ   ivhi+40(FP), DI
   286	MOVOU  bswapMask<>+0(SB), X0
   287	MOVQ   SI, X1
   288	PINSRQ $0x01, DI, X1
   289	MOVAPS X1, X8
   290	PSHUFB X0, X1
   291	MOVQ   SI, R8
   292	ADDQ   $0x07, R8
   293	JC     ctr8_slow
   294	XORQ   R8, R8
   295	INCQ   R8
   296	PXOR   X9, X9
   297	PINSRQ $0x00, R8, X9
   298	PADDQ  X9, X8
   299	MOVAPS X8, X2
   300	PADDQ  X9, X8
   301	MOVAPS X8, X3
   302	PADDQ  X9, X8
   303	MOVAPS X8, X4
   304	PADDQ  X9, X8
   305	MOVAPS X8, X5
   306	PADDQ  X9, X8
   307	MOVAPS X8, X6
   308	PADDQ  X9, X8
   309	MOVAPS X8, X7
   310	PADDQ  X9, X8
   311	MOVAPS X8, X8
   312	JMP    ctr8_done
   313
   314ctr8_slow:
   315	ADDQ   $0x01, SI
   316	ADCQ   $0x00, DI
   317	MOVQ   SI, X2
   318	PINSRQ $0x01, DI, X2
   319	ADDQ   $0x01, SI
   320	ADCQ   $0x00, DI
   321	MOVQ   SI, X3
   322	PINSRQ $0x01, DI, X3
   323	ADDQ   $0x01, SI
   324	ADCQ   $0x00, DI
   325	MOVQ   SI, X4
   326	PINSRQ $0x01, DI, X4
   327	ADDQ   $0x01, SI
   328	ADCQ   $0x00, DI
   329	MOVQ   SI, X5
   330	PINSRQ $0x01, DI, X5
   331	ADDQ   $0x01, SI
   332	ADCQ   $0x00, DI
   333	MOVQ   SI, X6
   334	PINSRQ $0x01, DI, X6
   335	ADDQ   $0x01, SI
   336	ADCQ   $0x00, DI
   337	MOVQ   SI, X7
   338	PINSRQ $0x01, DI, X7
   339	ADDQ   $0x01, SI
   340	ADCQ   $0x00, DI
   341	MOVQ   SI, X8
   342	PINSRQ $0x01, DI, X8
   343
   344ctr8_done:
   345	PSHUFB X0, X2
   346	PSHUFB X0, X3
   347	PSHUFB X0, X4
   348	PSHUFB X0, X5
   349	PSHUFB X0, X6
   350	PSHUFB X0, X7
   351	PSHUFB X0, X8
   352	MOVUPS (CX), X0
   353	PXOR   X0, X1
   354	PXOR   X0, X2
   355	PXOR   X0, X3
   356	PXOR   X0, X4
   357	PXOR   X0, X5
   358	PXOR   X0, X6
   359	PXOR   X0, X7
   360	PXOR   X0, X8
   361	ADDQ   $0x10, CX
   362	SUBQ   $0x0c, AX
   363	JE     enc192
   364	JB     enc128
   365	MOVUPS (CX), X0
   366	AESENC X0, X1
   367	AESENC X0, X2
   368	AESENC X0, X3
   369	AESENC X0, X4
   370	AESENC X0, X5
   371	AESENC X0, X6
   372	AESENC X0, X7
   373	AESENC X0, X8
   374	MOVUPS 16(CX), X0
   375	AESENC X0, X1
   376	AESENC X0, X2
   377	AESENC X0, X3
   378	AESENC X0, X4
   379	AESENC X0, X5
   380	AESENC X0, X6
   381	AESENC X0, X7
   382	AESENC X0, X8
   383	ADDQ   $0x20, CX
   384
   385enc192:
   386	MOVUPS (CX), X0
   387	AESENC X0, X1
   388	AESENC X0, X2
   389	AESENC X0, X3
   390	AESENC X0, X4
   391	AESENC X0, X5
   392	AESENC X0, X6
   393	AESENC X0, X7
   394	AESENC X0, X8
   395	MOVUPS 16(CX), X0
   396	AESENC X0, X1
   397	AESENC X0, X2
   398	AESENC X0, X3
   399	AESENC X0, X4
   400	AESENC X0, X5
   401	AESENC X0, X6
   402	AESENC X0, X7
   403	AESENC X0, X8
   404	ADDQ   $0x20, CX
   405
   406enc128:
   407	MOVUPS     (CX), X0
   408	AESENC     X0, X1
   409	AESENC     X0, X2
   410	AESENC     X0, X3
   411	AESENC     X0, X4
   412	AESENC     X0, X5
   413	AESENC     X0, X6
   414	AESENC     X0, X7
   415	AESENC     X0, X8
   416	MOVUPS     16(CX), X0
   417	AESENC     X0, X1
   418	AESENC     X0, X2
   419	AESENC     X0, X3
   420	AESENC     X0, X4
   421	AESENC     X0, X5
   422	AESENC     X0, X6
   423	AESENC     X0, X7
   424	AESENC     X0, X8
   425	MOVUPS     32(CX), X0
   426	AESENC     X0, X1
   427	AESENC     X0, X2
   428	AESENC     X0, X3
   429	AESENC     X0, X4
   430	AESENC     X0, X5
   431	AESENC     X0, X6
   432	AESENC     X0, X7
   433	AESENC     X0, X8
   434	MOVUPS     48(CX), X0
   435	AESENC     X0, X1
   436	AESENC     X0, X2
   437	AESENC     X0, X3
   438	AESENC     X0, X4
   439	AESENC     X0, X5
   440	AESENC     X0, X6
   441	AESENC     X0, X7
   442	AESENC     X0, X8
   443	MOVUPS     64(CX), X0
   444	AESENC     X0, X1
   445	AESENC     X0, X2
   446	AESENC     X0, X3
   447	AESENC     X0, X4
   448	AESENC     X0, X5
   449	AESENC     X0, X6
   450	AESENC     X0, X7
   451	AESENC     X0, X8
   452	MOVUPS     80(CX), X0
   453	AESENC     X0, X1
   454	AESENC     X0, X2
   455	AESENC     X0, X3
   456	AESENC     X0, X4
   457	AESENC     X0, X5
   458	AESENC     X0, X6
   459	AESENC     X0, X7
   460	AESENC     X0, X8
   461	MOVUPS     96(CX), X0
   462	AESENC     X0, X1
   463	AESENC     X0, X2
   464	AESENC     X0, X3
   465	AESENC     X0, X4
   466	AESENC     X0, X5
   467	AESENC     X0, X6
   468	AESENC     X0, X7
   469	AESENC     X0, X8
   470	MOVUPS     112(CX), X0
   471	AESENC     X0, X1
   472	AESENC     X0, X2
   473	AESENC     X0, X3
   474	AESENC     X0, X4
   475	AESENC     X0, X5
   476	AESENC     X0, X6
   477	AESENC     X0, X7
   478	AESENC     X0, X8
   479	MOVUPS     128(CX), X0
   480	AESENC     X0, X1
   481	AESENC     X0, X2
   482	AESENC     X0, X3
   483	AESENC     X0, X4
   484	AESENC     X0, X5
   485	AESENC     X0, X6
   486	AESENC     X0, X7
   487	AESENC     X0, X8
   488	MOVUPS     144(CX), X0
   489	AESENCLAST X0, X1
   490	AESENCLAST X0, X2
   491	AESENCLAST X0, X3
   492	AESENCLAST X0, X4
   493	AESENCLAST X0, X5
   494	AESENCLAST X0, X6
   495	AESENCLAST X0, X7
   496	AESENCLAST X0, X8
   497	MOVUPS     (BX), X0
   498	PXOR       X1, X0
   499	MOVUPS     X0, (DX)
   500	MOVUPS     16(BX), X0
   501	PXOR       X2, X0
   502	MOVUPS     X0, 16(DX)
   503	MOVUPS     32(BX), X0
   504	PXOR       X3, X0
   505	MOVUPS     X0, 32(DX)
   506	MOVUPS     48(BX), X0
   507	PXOR       X4, X0
   508	MOVUPS     X0, 48(DX)
   509	MOVUPS     64(BX), X0
   510	PXOR       X5, X0
   511	MOVUPS     X0, 64(DX)
   512	MOVUPS     80(BX), X0
   513	PXOR       X6, X0
   514	MOVUPS     X0, 80(DX)
   515	MOVUPS     96(BX), X0
   516	PXOR       X7, X0
   517	MOVUPS     X0, 96(DX)
   518	MOVUPS     112(BX), X0
   519	PXOR       X8, X0
   520	MOVUPS     X0, 112(DX)
   521	RET

View as plain text