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  	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  
   358  enc192:
   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  
   379  enc128:
   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
   495  

View as plain text