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

     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
     9  TEXT ·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  
    32  enc192:
    33  	MOVUPS (CX), X0
    34  	AESENC X0, X1
    35  	MOVUPS 16(CX), X0
    36  	AESENC X0, X1
    37  	ADDQ   $0x20, CX
    38  
    39  enc128:
    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  
    65  DATA bswapMask<>+0(SB)/8, $0x08090a0b0c0d0e0f
    66  DATA bswapMask<>+8(SB)/8, $0x0001020304050607
    67  GLOBL 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
    71  TEXT ·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  
   102  enc192:
   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  
   111  enc128:
   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
   152  TEXT ·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  
   199  enc192:
   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  
   212  enc128:
   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
   279  TEXT ·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  
   314  ctr8_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  
   344  ctr8_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  
   385  enc192:
   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  
   406  enc128:
   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
   522  

View as plain text