...

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	PSHUFB X0, X1
   290	ADDQ   $0x01, SI
   291	ADCQ   $0x00, DI
   292	MOVQ   SI, X2
   293	PINSRQ $0x01, DI, X2
   294	PSHUFB X0, X2
   295	ADDQ   $0x01, SI
   296	ADCQ   $0x00, DI
   297	MOVQ   SI, X3
   298	PINSRQ $0x01, DI, X3
   299	PSHUFB X0, X3
   300	ADDQ   $0x01, SI
   301	ADCQ   $0x00, DI
   302	MOVQ   SI, X4
   303	PINSRQ $0x01, DI, X4
   304	PSHUFB X0, X4
   305	ADDQ   $0x01, SI
   306	ADCQ   $0x00, DI
   307	MOVQ   SI, X5
   308	PINSRQ $0x01, DI, X5
   309	PSHUFB X0, X5
   310	ADDQ   $0x01, SI
   311	ADCQ   $0x00, DI
   312	MOVQ   SI, X6
   313	PINSRQ $0x01, DI, X6
   314	PSHUFB X0, X6
   315	ADDQ   $0x01, SI
   316	ADCQ   $0x00, DI
   317	MOVQ   SI, X7
   318	PINSRQ $0x01, DI, X7
   319	PSHUFB X0, X7
   320	ADDQ   $0x01, SI
   321	ADCQ   $0x00, DI
   322	MOVQ   SI, X8
   323	PINSRQ $0x01, DI, X8
   324	PSHUFB X0, X8
   325	MOVUPS (CX), X0
   326	PXOR   X0, X1
   327	PXOR   X0, X2
   328	PXOR   X0, X3
   329	PXOR   X0, X4
   330	PXOR   X0, X5
   331	PXOR   X0, X6
   332	PXOR   X0, X7
   333	PXOR   X0, X8
   334	ADDQ   $0x10, CX
   335	SUBQ   $0x0c, AX
   336	JE     enc192
   337	JB     enc128
   338	MOVUPS (CX), X0
   339	AESENC X0, X1
   340	AESENC X0, X2
   341	AESENC X0, X3
   342	AESENC X0, X4
   343	AESENC X0, X5
   344	AESENC X0, X6
   345	AESENC X0, X7
   346	AESENC X0, X8
   347	MOVUPS 16(CX), X0
   348	AESENC X0, X1
   349	AESENC X0, X2
   350	AESENC X0, X3
   351	AESENC X0, X4
   352	AESENC X0, X5
   353	AESENC X0, X6
   354	AESENC X0, X7
   355	AESENC X0, X8
   356	ADDQ   $0x20, CX
   357
   358enc192:
   359	MOVUPS (CX), X0
   360	AESENC X0, X1
   361	AESENC X0, X2
   362	AESENC X0, X3
   363	AESENC X0, X4
   364	AESENC X0, X5
   365	AESENC X0, X6
   366	AESENC X0, X7
   367	AESENC X0, X8
   368	MOVUPS 16(CX), X0
   369	AESENC X0, X1
   370	AESENC X0, X2
   371	AESENC X0, X3
   372	AESENC X0, X4
   373	AESENC X0, X5
   374	AESENC X0, X6
   375	AESENC X0, X7
   376	AESENC X0, X8
   377	ADDQ   $0x20, CX
   378
   379enc128:
   380	MOVUPS     (CX), X0
   381	AESENC     X0, X1
   382	AESENC     X0, X2
   383	AESENC     X0, X3
   384	AESENC     X0, X4
   385	AESENC     X0, X5
   386	AESENC     X0, X6
   387	AESENC     X0, X7
   388	AESENC     X0, X8
   389	MOVUPS     16(CX), X0
   390	AESENC     X0, X1
   391	AESENC     X0, X2
   392	AESENC     X0, X3
   393	AESENC     X0, X4
   394	AESENC     X0, X5
   395	AESENC     X0, X6
   396	AESENC     X0, X7
   397	AESENC     X0, X8
   398	MOVUPS     32(CX), X0
   399	AESENC     X0, X1
   400	AESENC     X0, X2
   401	AESENC     X0, X3
   402	AESENC     X0, X4
   403	AESENC     X0, X5
   404	AESENC     X0, X6
   405	AESENC     X0, X7
   406	AESENC     X0, X8
   407	MOVUPS     48(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     64(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     80(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     96(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     112(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     128(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     144(CX), X0
   462	AESENCLAST X0, X1
   463	AESENCLAST X0, X2
   464	AESENCLAST X0, X3
   465	AESENCLAST X0, X4
   466	AESENCLAST X0, X5
   467	AESENCLAST X0, X6
   468	AESENCLAST X0, X7
   469	AESENCLAST X0, X8
   470	MOVUPS     (BX), X0
   471	PXOR       X1, X0
   472	MOVUPS     X0, (DX)
   473	MOVUPS     16(BX), X0
   474	PXOR       X2, X0
   475	MOVUPS     X0, 16(DX)
   476	MOVUPS     32(BX), X0
   477	PXOR       X3, X0
   478	MOVUPS     X0, 32(DX)
   479	MOVUPS     48(BX), X0
   480	PXOR       X4, X0
   481	MOVUPS     X0, 48(DX)
   482	MOVUPS     64(BX), X0
   483	PXOR       X5, X0
   484	MOVUPS     X0, 64(DX)
   485	MOVUPS     80(BX), X0
   486	PXOR       X6, X0
   487	MOVUPS     X0, 80(DX)
   488	MOVUPS     96(BX), X0
   489	PXOR       X7, X0
   490	MOVUPS     X0, 96(DX)
   491	MOVUPS     112(BX), X0
   492	PXOR       X8, X0
   493	MOVUPS     X0, 112(DX)
   494	RET

View as plain text