github.com/fumiama/gofastTEA@v0.0.10/tea_1.16_amd64.s (about)

     1  //go:build !go1.17 && amd64
     2  // +build !go1.17,amd64
     3  
     4  #include "textflag.h"
     5  
     6  // func encrypt(dstlen uintptr, t uintptr)
     7  TEXT ·encrypt(SB), NOSPLIT, $0-16
     8  	MOVQ	·dstlen+0(FP), AX	// go:<1.17 dst
     9  	MOVQ	·teaptr+8(FP), DI	// go:<1.17 t
    10  	MOVQ	AX, BX		// len(dst) low 24 bits
    11  	MOVQ	DI, R8		// len(dst) middle 24 bits
    12  	SHRQ	$40, BX		// unpack len
    13  	SHLQ	$24, AX
    14  	SHRQ	$24, AX
    15  	SHLQ	$24, DI
    16  	SHRQ	$24, DI
    17  	MOVQ	(DI), DX	// t0
    18  	MOVQ	4(DI), R12	// t1
    19  	MOVQ	8(DI), R10	// t2
    20  	MOVQ	12(DI), SI	// t3
    21  	SHRQ	$40, R8
    22  	SHLQ	$24, R8
    23  	ORQ		R8, BX		// len(dst) has 48 bits
    24  	ADDQ	BX, AX		// dst += len(dst)
    25  	NOTQ	BX			// i = -i - 1
    26  	INCQ	BX			// i++
    27  	// XORQ	R11, R11	// holder
    28  	XORQ	R13, R13	// iv1
    29  	XORQ	DI, DI		// iv2
    30  enclop:
    31  	MOVQ	(AX)(BX*1), R11		// holder = Uint64(dst[i:])
    32  	BSWAPQ	R11					// holder = BE(block)
    33  	XORQ	R13, R11			// holder ^= iv1
    34  	MOVQ	R11, R13			// iv1 = holder
    35  	// Use Register CX(v1), DX(t0), SI(t3), R8(tmp), R10(t2), R12(t1), R13(v0/ret)
    36  	////////////////iv1 = encrypt(iv1)////////////////
    37  	MOVQ	R11, CX					// v1
    38  	SHRQ	$32, R13				// v0
    39  
    40  	LEAQ	-1640531527(CX), R8		// R8 = v1 + 0x...
    41  	MOVQ	CX, R9					// R9 = v1
    42  	SHLQ	$4, R9					// R9 <<= 4
    43  	ADDQ	DX, R9					// R9 += t0
    44  	XORQ	R9, R8					// R8 ^= R9
    45  	MOVQ	CX, R9					// R9 = v1
    46  	SHRL	$5, R9					// R9 >>= 5
    47  	ADDQ	R12, R9					// R9 += t1
    48  	XORQ	R9, R8					// R8 ^= R9
    49  	ADDQ	R8, R13					// v0 += R8
    50  	LEAQ	-1640531527(R13), R8	// R8 = v0 + 0x...
    51  	MOVQ	R13, R9					// R9 = v0
    52  	SHLQ	$4, R9					// R9 <<= 4
    53  	ADDQ	R10, R9					// R9 += t2
    54  	XORQ	R9, R8					// R8 ^= R9
    55  	MOVQ	R13, R9					// R9 = v0
    56  	SHRL	$5, R9					// R9 >>= 5
    57  	ADDQ	SI, R9					// R9 += t3
    58  	XORQ	R9, R8					// R8 ^= R9
    59  	ADDL	R8, CX					// v0 += R8
    60  
    61  	LEAQ	1013904242(CX), R8		// R8 = v1 + 0x...
    62  	MOVQ	CX, R9					// R9 = v1
    63  	SHLQ	$4, R9					// R9 <<= 4
    64  	ADDQ	DX, R9					// R9 += t0
    65  	XORQ	R9, R8					// R8 ^= R9
    66  	MOVQ	CX, R9					// R9 = v1
    67  	SHRL	$5, R9					// R9 >>= 5
    68  	ADDQ	R12, R9					// R9 += t1
    69  	XORQ	R9, R8					// R8 ^= R9
    70  	ADDQ	R8, R13					// v0 += R8
    71  	LEAQ	1013904242(R13), R8		// R8 = v0 + 0x...
    72  	MOVQ	R13, R9					// R9 = v0
    73  	SHLQ	$4, R9					// R9 <<= 4
    74  	ADDQ	R10, R9					// R9 += t2
    75  	XORQ	R9, R8					// R8 ^= R9
    76  	MOVQ	R13, R9					// R9 = v0
    77  	SHRL	$5, R9					// R9 >>= 5
    78  	ADDQ	SI, R9					// R9 += t3
    79  	XORQ	R9, R8					// R8 ^= R9
    80  	ADDL	R8, CX					// v0 += R8
    81  
    82  	LEAQ	-626627285(CX), R8		// R8 = v1 + 0x...
    83  	MOVQ	CX, R9					// R9 = v1
    84  	SHLQ	$4, R9					// R9 <<= 4
    85  	ADDQ	DX, R9					// R9 += t0
    86  	XORQ	R9, R8					// R8 ^= R9
    87  	MOVQ	CX, R9					// R9 = v1
    88  	SHRL	$5, R9					// R9 >>= 5
    89  	ADDQ	R12, R9					// R9 += t1
    90  	XORQ	R9, R8					// R8 ^= R9
    91  	ADDQ	R8, R13					// v0 += R8
    92  	LEAQ	-626627285(R13), R8		// R8 = v0 + 0x...
    93  	MOVQ	R13, R9					// R9 = v0
    94  	SHLQ	$4, R9					// R9 <<= 4
    95  	ADDQ	R10, R9					// R9 += t2
    96  	XORQ	R9, R8					// R8 ^= R9
    97  	MOVQ	R13, R9					// R9 = v0
    98  	SHRL	$5, R9					// R9 >>= 5
    99  	ADDQ	SI, R9					// R9 += t3
   100  	XORQ	R9, R8					// R8 ^= R9
   101  	ADDL	R8, CX					// v0 += R8
   102  	
   103  	LEAQ	2027808484(CX), R8		// R8 = v1 + 0x...
   104  	MOVQ	CX, R9					// R9 = v1
   105  	SHLQ	$4, R9					// R9 <<= 4
   106  	ADDQ	DX, R9					// R9 += t0
   107  	XORQ	R9, R8					// R8 ^= R9
   108  	MOVQ	CX, R9					// R9 = v1
   109  	SHRL	$5, R9					// R9 >>= 5
   110  	ADDQ	R12, R9					// R9 += t1
   111  	XORQ	R9, R8					// R8 ^= R9
   112  	ADDQ	R8, R13					// v0 += R8
   113  	LEAQ	2027808484(R13), R8		// R8 = v0 + 0x...
   114  	MOVQ	R13, R9					// R9 = v0
   115  	SHLQ	$4, R9					// R9 <<= 4
   116  	ADDQ	R10, R9					// R9 += t2
   117  	XORQ	R9, R8					// R8 ^= R9
   118  	MOVQ	R13, R9					// R9 = v0
   119  	SHRL	$5, R9					// R9 >>= 5
   120  	ADDQ	SI, R9					// R9 += t3
   121  	XORQ	R9, R8					// R8 ^= R9
   122  	ADDL	R8, CX					// v0 += R8
   123  	
   124  	LEAQ	387276957(CX), R8		// R8 = v1 + 0x...
   125  	MOVQ	CX, R9					// R9 = v1
   126  	SHLQ	$4, R9					// R9 <<= 4
   127  	ADDQ	DX, R9					// R9 += t0
   128  	XORQ	R9, R8					// R8 ^= R9
   129  	MOVQ	CX, R9					// R9 = v1
   130  	SHRL	$5, R9					// R9 >>= 5
   131  	ADDQ	R12, R9					// R9 += t1
   132  	XORQ	R9, R8					// R8 ^= R9
   133  	ADDQ	R8, R13					// v0 += R8
   134  	LEAQ	387276957(R13), R8		// R8 = v0 + 0x...
   135  	MOVQ	R13, R9					// R9 = v0
   136  	SHLQ	$4, R9					// R9 <<= 4
   137  	ADDQ	R10, R9					// R9 += t2
   138  	XORQ	R9, R8					// R8 ^= R9
   139  	MOVQ	R13, R9					// R9 = v0
   140  	SHRL	$5, R9					// R9 >>= 5
   141  	ADDQ	SI, R9					// R9 += t3
   142  	XORQ	R9, R8					// R8 ^= R9
   143  	ADDL	R8, CX					// v0 += R8
   144  	
   145  	LEAQ	-1253254570(CX), R8		// R8 = v1 + 0x...
   146  	MOVQ	CX, R9					// R9 = v1
   147  	SHLQ	$4, R9					// R9 <<= 4
   148  	ADDQ	DX, R9					// R9 += t0
   149  	XORQ	R9, R8					// R8 ^= R9
   150  	MOVQ	CX, R9					// R9 = v1
   151  	SHRL	$5, R9					// R9 >>= 5
   152  	ADDQ	R12, R9					// R9 += t1
   153  	XORQ	R9, R8					// R8 ^= R9
   154  	ADDQ	R8, R13					// v0 += R8
   155  	LEAQ	-1253254570(R13), R8		// R8 = v0 + 0x...
   156  	MOVQ	R13, R9					// R9 = v0
   157  	SHLQ	$4, R9					// R9 <<= 4
   158  	ADDQ	R10, R9					// R9 += t2
   159  	XORQ	R9, R8					// R8 ^= R9
   160  	MOVQ	R13, R9					// R9 = v0
   161  	SHRL	$5, R9					// R9 >>= 5
   162  	ADDQ	SI, R9					// R9 += t3
   163  	XORQ	R9, R8					// R8 ^= R9
   164  	ADDL	R8, CX					// v0 += R8
   165  	
   166  	LEAQ	1401181199(CX), R8		// R8 = v1 + 0x...
   167  	MOVQ	CX, R9					// R9 = v1
   168  	SHLQ	$4, R9					// R9 <<= 4
   169  	ADDQ	DX, R9					// R9 += t0
   170  	XORQ	R9, R8					// R8 ^= R9
   171  	MOVQ	CX, R9					// R9 = v1
   172  	SHRL	$5, R9					// R9 >>= 5
   173  	ADDQ	R12, R9					// R9 += t1
   174  	XORQ	R9, R8					// R8 ^= R9
   175  	ADDQ	R8, R13					// v0 += R8
   176  	LEAQ	1401181199(R13), R8		// R8 = v0 + 0x...
   177  	MOVQ	R13, R9					// R9 = v0
   178  	SHLQ	$4, R9					// R9 <<= 4
   179  	ADDQ	R10, R9					// R9 += t2
   180  	XORQ	R9, R8					// R8 ^= R9
   181  	MOVQ	R13, R9					// R9 = v0
   182  	SHRL	$5, R9					// R9 >>= 5
   183  	ADDQ	SI, R9					// R9 += t3
   184  	XORQ	R9, R8					// R8 ^= R9
   185  	ADDL	R8, CX					// v0 += R8
   186  	
   187  	LEAQ	-239350328(CX), R8		// R8 = v1 + 0x...
   188  	MOVQ	CX, R9					// R9 = v1
   189  	SHLQ	$4, R9					// R9 <<= 4
   190  	ADDQ	DX, R9					// R9 += t0
   191  	XORQ	R9, R8					// R8 ^= R9
   192  	MOVQ	CX, R9					// R9 = v1
   193  	SHRL	$5, R9					// R9 >>= 5
   194  	ADDQ	R12, R9					// R9 += t1
   195  	XORQ	R9, R8					// R8 ^= R9
   196  	ADDQ	R8, R13					// v0 += R8
   197  	LEAQ	-239350328(R13), R8		// R8 = v0 + 0x...
   198  	MOVQ	R13, R9					// R9 = v0
   199  	SHLQ	$4, R9					// R9 <<= 4
   200  	ADDQ	R10, R9					// R9 += t2
   201  	XORQ	R9, R8					// R8 ^= R9
   202  	MOVQ	R13, R9					// R9 = v0
   203  	SHRL	$5, R9					// R9 >>= 5
   204  	ADDQ	SI, R9					// R9 += t3
   205  	XORQ	R9, R8					// R8 ^= R9
   206  	ADDL	R8, CX					// v0 += R8
   207  	
   208  	LEAQ	-1879881855(CX), R8		// R8 = v1 + 0x...
   209  	MOVQ	CX, R9					// R9 = v1
   210  	SHLQ	$4, R9					// R9 <<= 4
   211  	ADDQ	DX, R9					// R9 += t0
   212  	XORQ	R9, R8					// R8 ^= R9
   213  	MOVQ	CX, R9					// R9 = v1
   214  	SHRL	$5, R9					// R9 >>= 5
   215  	ADDQ	R12, R9					// R9 += t1
   216  	XORQ	R9, R8					// R8 ^= R9
   217  	ADDQ	R8, R13					// v0 += R8
   218  	LEAQ	-1879881855(R13), R8	// R8 = v0 + 0x...
   219  	MOVQ	R13, R9					// R9 = v0
   220  	SHLQ	$4, R9					// R9 <<= 4
   221  	ADDQ	R10, R9					// R9 += t2
   222  	XORQ	R9, R8					// R8 ^= R9
   223  	MOVQ	R13, R9					// R9 = v0
   224  	SHRL	$5, R9					// R9 >>= 5
   225  	ADDQ	SI, R9					// R9 += t3
   226  	XORQ	R9, R8					// R8 ^= R9
   227  	ADDL	R8, CX					// v0 += R8
   228  	
   229  	LEAQ	774553914(CX), R8		// R8 = v1 + 0x...
   230  	MOVQ	CX, R9					// R9 = v1
   231  	SHLQ	$4, R9					// R9 <<= 4
   232  	ADDQ	DX, R9					// R9 += t0
   233  	XORQ	R9, R8					// R8 ^= R9
   234  	MOVQ	CX, R9					// R9 = v1
   235  	SHRL	$5, R9					// R9 >>= 5
   236  	ADDQ	R12, R9					// R9 += t1
   237  	XORQ	R9, R8					// R8 ^= R9
   238  	ADDQ	R8, R13					// v0 += R8
   239  	LEAQ	774553914(R13), R8		// R8 = v0 + 0x...
   240  	MOVQ	R13, R9					// R9 = v0
   241  	SHLQ	$4, R9					// R9 <<= 4
   242  	ADDQ	R10, R9					// R9 += t2
   243  	XORQ	R9, R8					// R8 ^= R9
   244  	MOVQ	R13, R9					// R9 = v0
   245  	SHRL	$5, R9					// R9 >>= 5
   246  	ADDQ	SI, R9					// R9 += t3
   247  	XORQ	R9, R8					// R8 ^= R9
   248  	ADDL	R8, CX					// v0 += R8
   249  	
   250  	LEAQ	-865977613(CX), R8		// R8 = v1 + 0x...
   251  	MOVQ	CX, R9					// R9 = v1
   252  	SHLQ	$4, R9					// R9 <<= 4
   253  	ADDQ	DX, R9					// R9 += t0
   254  	XORQ	R9, R8					// R8 ^= R9
   255  	MOVQ	CX, R9					// R9 = v1
   256  	SHRL	$5, R9					// R9 >>= 5
   257  	ADDQ	R12, R9					// R9 += t1
   258  	XORQ	R9, R8					// R8 ^= R9
   259  	ADDQ	R8, R13					// v0 += R8
   260  	LEAQ	-865977613(R13), R8		// R8 = v0 + 0x...
   261  	MOVQ	R13, R9					// R9 = v0
   262  	SHLQ	$4, R9					// R9 <<= 4
   263  	ADDQ	R10, R9					// R9 += t2
   264  	XORQ	R9, R8					// R8 ^= R9
   265  	MOVQ	R13, R9					// R9 = v0
   266  	SHRL	$5, R9					// R9 >>= 5
   267  	ADDQ	SI, R9					// R9 += t3
   268  	XORQ	R9, R8					// R8 ^= R9
   269  	ADDL	R8, CX					// v0 += R8
   270  	
   271  	LEAQ	1788458156(CX), R8		// R8 = v1 + 0x...
   272  	MOVQ	CX, R9					// R9 = v1
   273  	SHLQ	$4, R9					// R9 <<= 4
   274  	ADDQ	DX, R9					// R9 += t0
   275  	XORQ	R9, R8					// R8 ^= R9
   276  	MOVQ	CX, R9					// R9 = v1
   277  	SHRQ	$5, R9					// R9 >>= 5
   278  	ADDQ	R12, R9					// R9 += t1
   279  	XORQ	R9, R8					// R8 ^= R9
   280  	ADDL	R8, R13					// v0 += R8
   281  	LEAQ	1788458156(R13), R8		// R8 = v0 + 0x...
   282  	MOVQ	R13, R9					// R9 = v0
   283  	SHLQ	$4, R9					// R9 <<= 4
   284  	ADDQ	R10, R9					// R9 += t2
   285  	XORQ	R9, R8					// R8 ^= R9
   286  	MOVQ	R13, R9					// R9 = v0
   287  	SHRQ	$5, R9					// R9 >>= 5
   288  	ADDQ	SI, R9					// R9 += t3
   289  	XORQ	R9, R8					// R8 ^= R9
   290  	ADDL	R8, CX					// v0 += R8
   291  	
   292  	LEAQ	147926629(CX), R8		// R8 = v1 + 0x...
   293  	MOVQ	CX, R9					// R9 = v1
   294  	SHLQ	$4, R9					// R9 <<= 4
   295  	ADDQ	DX, R9					// R9 += t0
   296  	XORQ	R9, R8					// R8 ^= R9
   297  	MOVQ	CX, R9					// R9 = v1
   298  	SHRL	$5, R9					// R9 >>= 5
   299  	ADDQ	R12, R9					// R9 += t1
   300  	XORQ	R9, R8					// R8 ^= R9
   301  	ADDQ	R8, R13					// v0 += R8
   302  	LEAQ	147926629(R13), R8		// R8 = v0 + 0x...
   303  	MOVQ	R13, R9					// R9 = v0
   304  	SHLQ	$4, R9					// R9 <<= 4
   305  	ADDQ	R10, R9					// R9 += t2
   306  	XORQ	R9, R8					// R8 ^= R9
   307  	MOVQ	R13, R9					// R9 = v0
   308  	SHRL	$5, R9					// R9 >>= 5
   309  	ADDQ	SI, R9					// R9 += t3
   310  	XORQ	R9, R8					// R8 ^= R9
   311  	ADDL	R8, CX					// v0 += R8
   312  	
   313  	LEAQ	-1492604898(CX), R8		// R8 = v1 + 0x...
   314  	MOVQ	CX, R9					// R9 = v1
   315  	SHLQ	$4, R9					// R9 <<= 4
   316  	ADDQ	DX, R9					// R9 += t0
   317  	XORQ	R9, R8					// R8 ^= R9
   318  	MOVQ	CX, R9					// R9 = v1
   319  	SHRL	$5, R9					// R9 >>= 5
   320  	ADDQ	R12, R9					// R9 += t1
   321  	XORQ	R9, R8					// R8 ^= R9
   322  	ADDQ	R8, R13					// v0 += R8
   323  	LEAQ	-1492604898(R13), R8	// R8 = v0 + 0x...
   324  	MOVQ	R13, R9					// R9 = v0
   325  	SHLQ	$4, R9					// R9 <<= 4
   326  	ADDQ	R10, R9					// R9 += t2
   327  	XORQ	R9, R8					// R8 ^= R9
   328  	MOVQ	R13, R9					// R9 = v0
   329  	SHRL	$5, R9					// R9 >>= 5
   330  	ADDQ	SI, R9					// R9 += t3
   331  	XORQ	R9, R8					// R8 ^= R9
   332  	ADDL	R8, CX					// v0 += R8
   333  	
   334  	LEAQ	1161830871(CX), R8		// R8 = v1 + 0x...
   335  	MOVQ	CX, R9					// R9 = v1
   336  	SHLQ	$4, R9					// R9 <<= 4
   337  	ADDQ	DX, R9					// R9 += t0
   338  	XORQ	R9, R8					// R8 ^= R9
   339  	MOVQ	CX, R9					// R9 = v1
   340  	SHRL	$5, R9					// R9 >>= 5
   341  	ADDQ	R12, R9					// R9 += t1
   342  	XORQ	R9, R8					// R8 ^= R9
   343  	ADDQ	R8, R13					// v0 += R8
   344  	LEAQ	1161830871(R13), R8		// R8 = v0 + 0x...
   345  	MOVQ	R13, R9					// R9 = v0
   346  	SHLQ	$4, R9					// R9 <<= 4
   347  	ADDQ	R10, R9					// R9 += t2
   348  	XORQ	R9, R8					// R8 ^= R9
   349  	MOVQ	R13, R9					// R9 = v0
   350  	SHRL	$5, R9					// R9 >>= 5
   351  	ADDQ	SI, R9					// R9 += t3
   352  	XORQ	R9, R8					// R8 ^= R9
   353  	ADDL	R8, CX					// v0 += R8
   354  	
   355  	LEAQ	-478700656(CX), R8		// R8 = v1 + 0x...
   356  	MOVQ	CX, R9					// R9 = v1
   357  	SHLQ	$4, R9					// R9 <<= 4
   358  	ADDQ	DX, R9					// R9 += t0
   359  	XORQ	R9, R8					// R8 ^= R9
   360  	MOVQ	CX, R9					// R9 = v1
   361  	SHRL	$5, R9					// R9 >>= 5
   362  	ADDQ	R12, R9					// R9 += t1
   363  	XORQ	R9, R8					// R8 ^= R9
   364  	ADDQ	R8, R13					// v0 += R8
   365  	LEAQ	-478700656(R13), R8		// R8 = v0 + 0x...
   366  	MOVQ	R13, R9					// R9 = v0
   367  	SHLQ	$4, R9					// R9 <<= 4
   368  	ADDQ	R10, R9					// R9 += t2
   369  	XORQ	R9, R8					// R8 ^= R9
   370  	MOVQ	R13, R9					// R9 = v0
   371  	SHRL	$5, R9					// R9 >>= 5
   372  	ADDQ	SI, R9					// R9 += t3
   373  	XORQ	R9, R8					// R8 ^= R9
   374  	ADDL	R8, CX					// v0 += R8
   375  
   376  	SHLQ	$32, R13				// v0 <<= 32
   377  	ORQ		CX, R13					// v0 |= v1
   378  	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   379  	XORQ	DI, R13				// iv1 ^= iv2
   380  	MOVQ	R11, DI				// iv2 = holder
   381  	MOVQ	R13, R11			// holder = iv1
   382  	BSWAPQ	R11					// holder = BE(holder)
   383  	MOVQ	R11, (AX)(BX*1)		// PutUint64(dst[i:], holder)
   384  	ADDQ	$8, BX				// i += 8
   385  	JNZ		enclop
   386  	RET
   387  
   388  // func decrypt(datalen uintptr, dst uintptr, t *TEA)
   389  TEXT ·decrypt(SB), NOSPLIT, $0-24
   390  	MOVQ	·data+0(FP), AX		// go:<1.17 data
   391  	MOVQ	·dst+8(FP), DI		// go:<1.17 dst
   392  	MOVQ	·teaptr+16(FP), SI	// go:<1.17 t
   393  	MOVQ	AX, BX		// len(data) low 24 bits
   394  	MOVQ	DI, R8		// dst middle 24 bits
   395  	SHRQ	$40, BX		// unpack len
   396  	SHLQ	$24, AX
   397  	SHRQ	$24, AX
   398  	SHLQ	$24, DI
   399  	SHRQ	$24, DI
   400  	MOVQ	(SI), DX	// t0
   401  	MOVQ	4(SI), R12	// t1
   402  	MOVQ	8(SI), R10	// t2
   403  	MOVQ	12(SI), R13	// t3
   404  	SHRQ	$40, R8
   405  	SHLQ	$24, R8
   406  	ORQ		R8, BX		// len(data) has 48 bits
   407  	ADDQ	BX, AX		// data += len(data)
   408  	ADDQ	BX, DI		// dst += len(data)
   409  	NOTQ	BX			// i = -len - 1
   410  	INCQ	BX			// i++
   411  	XORQ	SI, SI		// iv1
   412  	XORQ	R15, R15	// iv2
   413  	XORQ	R11, R11	// holder
   414  declop:
   415  	MOVQ	(AX)(BX*1), SI		// iv1 = Uint64(data[i:])
   416  	BSWAPQ	SI					// iv1 = BE(block)
   417  	XORQ	SI, R15				// iv2 ^= iv1
   418  	// Use Register R15(v0/ret), R12(t1), CX(v1), DX(t0), R13(t3), R8, R9, R10(t2)
   419  	///////////////iv2 = decrypt(iv2)///////////////
   420  	MOVQ	R15, CX				// v1
   421  	SHRQ	$32, R15			// v0
   422  
   423  	LEAQ	-478700656(R15), R8	// R8 = v0 + 0x...
   424  	MOVQ	R15, R9				// R9 = v0
   425  	SHLQ	$4, R9				// R9 <<= 4
   426  	ADDQ	R10, R9				// R9 += t2
   427  	XORQ	R9, R8				// R8 ^= R9
   428  	MOVQ	R15, R9				// R9 = v0
   429  	SHRQ	$5, R9				// R9 >>= 5
   430  	ADDQ	R13, R9				// R9 += t3
   431  	XORQ	R9, R8				// R8 ^= R9
   432  	SUBL	R8, CX				// v1 -= R8
   433  	LEAQ	-478700656(CX), R8	// R8 = v1 + 0x...
   434  	MOVQ	CX, R9				// R9 = v1
   435  	SHLQ	$4, R9				// R9 <<= 4
   436  	ADDQ	DX, R9				// R9 += t0
   437  	XORQ	R9, R8				// R8 ^= R9
   438  	MOVQ	CX, R9				// R9 = v1
   439  	SHRQ	$5, R9				// R9 >>= 5
   440  	ADDQ	R12, R9				// R9 += t1
   441  	XORQ	R9, R8				// R8 ^= R9
   442  	SUBL	R8, R15				// v0 -= R8
   443  
   444  	LEAQ	1161830871(R15), R8	// R8 = v0 + 0x...
   445  	MOVQ	R15, R9				// R9 = v0
   446  	SHLQ	$4, R9				// R9 <<= 4
   447  	ADDQ	R10, R9				// R9 += t2
   448  	XORQ	R9, R8				// R8 ^= R9
   449  	MOVQ	R15, R9				// R9 = v0
   450  	SHRQ	$5, R9				// R9 >>= 5
   451  	ADDQ	R13, R9				// R9 += t3
   452  	XORQ	R9, R8				// R8 ^= R9
   453  	SUBL	R8, CX				// v1 -= R8
   454  	LEAQ	1161830871(CX), R8	// R8 = v1 + 0x...
   455  	MOVQ	CX, R9				// R9 = v1
   456  	SHLQ	$4, R9				// R9 <<= 4
   457  	ADDQ	DX, R9				// R9 += t0
   458  	XORQ	R9, R8				// R8 ^= R9
   459  	MOVQ	CX, R9				// R9 = v1
   460  	SHRQ	$5, R9				// R9 >>= 5
   461  	ADDQ	R12, R9				// R9 += t1
   462  	XORQ	R9, R8				// R8 ^= R9
   463  	SUBL	R8, R15				// v0 -= R8
   464  
   465  	LEAQ	-1492604898(R15), R8	// R8 = v0 + 0x...
   466  	MOVQ	R15, R9				// R9 = v0
   467  	SHLQ	$4, R9				// R9 <<= 4
   468  	ADDQ	R10, R9				// R9 += t2
   469  	XORQ	R9, R8				// R8 ^= R9
   470  	MOVQ	R15, R9				// R9 = v0
   471  	SHRQ	$5, R9				// R9 >>= 5
   472  	ADDQ	R13, R9				// R9 += t3
   473  	XORQ	R9, R8				// R8 ^= R9
   474  	SUBL	R8, CX				// v1 -= R8
   475  	LEAQ	-1492604898(CX), R8	// R8 = v1 + 0x...
   476  	MOVQ	CX, R9				// R9 = v1
   477  	SHLQ	$4, R9				// R9 <<= 4
   478  	ADDQ	DX, R9				// R9 += t0
   479  	XORQ	R9, R8				// R8 ^= R9
   480  	MOVQ	CX, R9				// R9 = v1
   481  	SHRQ	$5, R9				// R9 >>= 5
   482  	ADDQ	R12, R9				// R9 += t1
   483  	XORQ	R9, R8				// R8 ^= R9
   484  	SUBL	R8, R15				// v0 -= R8
   485  
   486  	LEAQ	147926629(R15), R8	// R8 = v0 + 0x...
   487  	MOVQ	R15, R9				// R9 = v0
   488  	SHLQ	$4, R9				// R9 <<= 4
   489  	ADDQ	R10, R9				// R9 += t2
   490  	XORQ	R9, R8				// R8 ^= R9
   491  	MOVQ	R15, R9				// R9 = v0
   492  	SHRQ	$5, R9				// R9 >>= 5
   493  	ADDQ	R13, R9				// R9 += t3
   494  	XORQ	R9, R8				// R8 ^= R9
   495  	SUBL	R8, CX				// v1 -= R8
   496  	LEAQ	147926629(CX), R8	// R8 = v1 + 0x...
   497  	MOVQ	CX, R9				// R9 = v1
   498  	SHLQ	$4, R9				// R9 <<= 4
   499  	ADDQ	DX, R9				// R9 += t0
   500  	XORQ	R9, R8				// R8 ^= R9
   501  	MOVQ	CX, R9				// R9 = v1
   502  	SHRQ	$5, R9				// R9 >>= 5
   503  	ADDQ	R12, R9				// R9 += t1
   504  	XORQ	R9, R8				// R8 ^= R9
   505  	SUBL	R8, R15				// v0 -= R8
   506  
   507  	LEAQ	1788458156(R15), R8	// R8 = v0 + 0x...
   508  	MOVQ	R15, R9				// R9 = v0
   509  	SHLQ	$4, R9				// R9 <<= 4
   510  	ADDQ	R10, R9				// R9 += t2
   511  	XORQ	R9, R8				// R8 ^= R9
   512  	MOVQ	R15, R9				// R9 = v0
   513  	SHRQ	$5, R9				// R9 >>= 5
   514  	ADDQ	R13, R9				// R9 += t3
   515  	XORQ	R9, R8				// R8 ^= R9
   516  	SUBL	R8, CX				// v1 -= R8
   517  	LEAQ	1788458156(CX), R8	// R8 = v1 + 0x...
   518  	MOVQ	CX, R9				// R9 = v1
   519  	SHLQ	$4, R9				// R9 <<= 4
   520  	ADDQ	DX, R9				// R9 += t0
   521  	XORQ	R9, R8				// R8 ^= R9
   522  	MOVQ	CX, R9				// R9 = v1
   523  	SHRQ	$5, R9				// R9 >>= 5
   524  	ADDQ	R12, R9				// R9 += t1
   525  	XORQ	R9, R8				// R8 ^= R9
   526  	SUBL	R8, R15				// v0 -= R8
   527  
   528  	LEAQ	-865977613(R15), R8	// R8 = v0 + 0x...
   529  	MOVQ	R15, R9				// R9 = v0
   530  	SHLQ	$4, R9				// R9 <<= 4
   531  	ADDQ	R10, R9				// R9 += t2
   532  	XORQ	R9, R8				// R8 ^= R9
   533  	MOVQ	R15, R9				// R9 = v0
   534  	SHRQ	$5, R9				// R9 >>= 5
   535  	ADDQ	R13, R9				// R9 += t3
   536  	XORQ	R9, R8				// R8 ^= R9
   537  	SUBL	R8, CX				// v1 -= R8
   538  	LEAQ	-865977613(CX), R8	// R8 = v1 + 0x...
   539  	MOVQ	CX, R9				// R9 = v1
   540  	SHLQ	$4, R9				// R9 <<= 4
   541  	ADDQ	DX, R9				// R9 += t0
   542  	XORQ	R9, R8				// R8 ^= R9
   543  	MOVQ	CX, R9				// R9 = v1
   544  	SHRQ	$5, R9				// R9 >>= 5
   545  	ADDQ	R12, R9				// R9 += t1
   546  	XORQ	R9, R8				// R8 ^= R9
   547  	SUBL	R8, R15				// v0 -= R8
   548  
   549  	LEAQ	774553914(R15), R8	// R8 = v0 + 0x...
   550  	MOVQ	R15, R9				// R9 = v0
   551  	SHLQ	$4, R9				// R9 <<= 4
   552  	ADDQ	R10, R9				// R9 += t2
   553  	XORQ	R9, R8				// R8 ^= R9
   554  	MOVQ	R15, R9				// R9 = v0
   555  	SHRQ	$5, R9				// R9 >>= 5
   556  	ADDQ	R13, R9				// R9 += t3
   557  	XORQ	R9, R8				// R8 ^= R9
   558  	SUBL	R8, CX				// v1 -= R8
   559  	LEAQ	774553914(CX), R8	// R8 = v1 + 0x...
   560  	MOVQ	CX, R9				// R9 = v1
   561  	SHLQ	$4, R9				// R9 <<= 4
   562  	ADDQ	DX, R9				// R9 += t0
   563  	XORQ	R9, R8				// R8 ^= R9
   564  	MOVQ	CX, R9				// R9 = v1
   565  	SHRQ	$5, R9				// R9 >>= 5
   566  	ADDQ	R12, R9				// R9 += t1
   567  	XORQ	R9, R8				// R8 ^= R9
   568  	SUBL	R8, R15				// v0 -= R8
   569  
   570  	LEAQ	-1879881855(R15), R8	// R8 = v0 + 0x...
   571  	MOVQ	R15, R9				// R9 = v0
   572  	SHLQ	$4, R9				// R9 <<= 4
   573  	ADDQ	R10, R9				// R9 += t2
   574  	XORQ	R9, R8				// R8 ^= R9
   575  	MOVQ	R15, R9				// R9 = v0
   576  	SHRQ	$5, R9				// R9 >>= 5
   577  	ADDQ	R13, R9				// R9 += t3
   578  	XORQ	R9, R8				// R8 ^= R9
   579  	SUBL	R8, CX				// v1 -= R8
   580  	LEAQ	-1879881855(CX), R8	// R8 = v1 + 0x...
   581  	MOVQ	CX, R9				// R9 = v1
   582  	SHLQ	$4, R9				// R9 <<= 4
   583  	ADDQ	DX, R9				// R9 += t0
   584  	XORQ	R9, R8				// R8 ^= R9
   585  	MOVQ	CX, R9				// R9 = v1
   586  	SHRQ	$5, R9				// R9 >>= 5
   587  	ADDQ	R12, R9				// R9 += t1
   588  	XORQ	R9, R8				// R8 ^= R9
   589  	SUBL	R8, R15				// v0 -= R8
   590  
   591  	LEAQ	-239350328(R15), R8	// R8 = v0 + 0x...
   592  	MOVQ	R15, R9				// R9 = v0
   593  	SHLQ	$4, R9				// R9 <<= 4
   594  	ADDQ	R10, R9				// R9 += t2
   595  	XORQ	R9, R8				// R8 ^= R9
   596  	MOVQ	R15, R9				// R9 = v0
   597  	SHRQ	$5, R9				// R9 >>= 5
   598  	ADDQ	R13, R9				// R9 += t3
   599  	XORQ	R9, R8				// R8 ^= R9
   600  	SUBL	R8, CX				// v1 -= R8
   601  	LEAQ	-239350328(CX), R8	// R8 = v1 + 0x...
   602  	MOVQ	CX, R9				// R9 = v1
   603  	SHLQ	$4, R9				// R9 <<= 4
   604  	ADDQ	DX, R9				// R9 += t0
   605  	XORQ	R9, R8				// R8 ^= R9
   606  	MOVQ	CX, R9				// R9 = v1
   607  	SHRQ	$5, R9				// R9 >>= 5
   608  	ADDQ	R12, R9				// R9 += t1
   609  	XORQ	R9, R8				// R8 ^= R9
   610  	SUBL	R8, R15				// v0 -= R8
   611  
   612  	LEAQ	1401181199(R15), R8	// R8 = v0 + 0x...
   613  	MOVQ	R15, R9				// R9 = v0
   614  	SHLQ	$4, R9				// R9 <<= 4
   615  	ADDQ	R10, R9				// R9 += t2
   616  	XORQ	R9, R8				// R8 ^= R9
   617  	MOVQ	R15, R9				// R9 = v0
   618  	SHRQ	$5, R9				// R9 >>= 5
   619  	ADDQ	R13, R9				// R9 += t3
   620  	XORQ	R9, R8				// R8 ^= R9
   621  	SUBL	R8, CX				// v1 -= R8
   622  	LEAQ	1401181199(CX), R8	// R8 = v1 + 0x...
   623  	MOVQ	CX, R9				// R9 = v1
   624  	SHLQ	$4, R9				// R9 <<= 4
   625  	ADDQ	DX, R9				// R9 += t0
   626  	XORQ	R9, R8				// R8 ^= R9
   627  	MOVQ	CX, R9				// R9 = v1
   628  	SHRQ	$5, R9				// R9 >>= 5
   629  	ADDQ	R12, R9				// R9 += t1
   630  	XORQ	R9, R8				// R8 ^= R9
   631  	SUBL	R8, R15				// v0 -= R8
   632  
   633  	LEAQ	-1253254570(R15), R8	// R8 = v0 + 0x...
   634  	MOVQ	R15, R9				// R9 = v0
   635  	SHLQ	$4, R9				// R9 <<= 4
   636  	ADDQ	R10, R9				// R9 += t2
   637  	XORQ	R9, R8				// R8 ^= R9
   638  	MOVQ	R15, R9				// R9 = v0
   639  	SHRQ	$5, R9				// R9 >>= 5
   640  	ADDQ	R13, R9				// R9 += t3
   641  	XORQ	R9, R8				// R8 ^= R9
   642  	SUBL	R8, CX				// v1 -= R8
   643  	LEAQ	-1253254570(CX), R8	// R8 = v1 + 0x...
   644  	MOVQ	CX, R9				// R9 = v1
   645  	SHLQ	$4, R9				// R9 <<= 4
   646  	ADDQ	DX, R9				// R9 += t0
   647  	XORQ	R9, R8				// R8 ^= R9
   648  	MOVQ	CX, R9				// R9 = v1
   649  	SHRQ	$5, R9				// R9 >>= 5
   650  	ADDQ	R12, R9				// R9 += t1
   651  	XORQ	R9, R8				// R8 ^= R9
   652  	SUBL	R8, R15				// v0 -= R8
   653  
   654  	LEAQ	387276957(R15), R8	// R8 = v0 + 0x...
   655  	MOVQ	R15, R9				// R9 = v0
   656  	SHLQ	$4, R9				// R9 <<= 4
   657  	ADDQ	R10, R9				// R9 += t2
   658  	XORQ	R9, R8				// R8 ^= R9
   659  	MOVQ	R15, R9				// R9 = v0
   660  	SHRQ	$5, R9				// R9 >>= 5
   661  	ADDQ	R13, R9				// R9 += t3
   662  	XORQ	R9, R8				// R8 ^= R9
   663  	SUBL	R8, CX				// v1 -= R8
   664  	LEAQ	387276957(CX), R8	// R8 = v1 + 0x...
   665  	MOVQ	CX, R9				// R9 = v1
   666  	SHLQ	$4, R9				// R9 <<= 4
   667  	ADDQ	DX, R9				// R9 += t0
   668  	XORQ	R9, R8				// R8 ^= R9
   669  	MOVQ	CX, R9				// R9 = v1
   670  	SHRQ	$5, R9				// R9 >>= 5
   671  	ADDQ	R12, R9				// R9 += t1
   672  	XORQ	R9, R8				// R8 ^= R9
   673  	SUBL	R8, R15				// v0 -= R8
   674  
   675  	LEAQ	2027808484(R15), R8	// R8 = v0 + 0x...
   676  	MOVQ	R15, R9				// R9 = v0
   677  	SHLQ	$4, R9				// R9 <<= 4
   678  	ADDQ	R10, R9				// R9 += t2
   679  	XORQ	R9, R8				// R8 ^= R9
   680  	MOVQ	R15, R9				// R9 = v0
   681  	SHRQ	$5, R9				// R9 >>= 5
   682  	ADDQ	R13, R9				// R9 += t3
   683  	XORQ	R9, R8				// R8 ^= R9
   684  	SUBL	R8, CX				// v1 -= R8
   685  	LEAQ	2027808484(CX), R8	// R8 = v1 + 0x...
   686  	MOVQ	CX, R9				// R9 = v1
   687  	SHLQ	$4, R9				// R9 <<= 4
   688  	ADDQ	DX, R9				// R9 += t0
   689  	XORQ	R9, R8				// R8 ^= R9
   690  	MOVQ	CX, R9				// R9 = v1
   691  	SHRQ	$5, R9				// R9 >>= 5
   692  	ADDQ	R12, R9				// R9 += t1
   693  	XORQ	R9, R8				// R8 ^= R9
   694  	SUBL	R8, R15				// v0 -= R8
   695  
   696  	LEAQ	-626627285(R15), R8	// R8 = v0 + 0x...
   697  	MOVQ	R15, R9				// R9 = v0
   698  	SHLQ	$4, R9				// R9 <<= 4
   699  	ADDQ	R10, R9				// R9 += t2
   700  	XORQ	R9, R8				// R8 ^= R9
   701  	MOVQ	R15, R9				// R9 = v0
   702  	SHRQ	$5, R9				// R9 >>= 5
   703  	ADDQ	R13, R9				// R9 += t3
   704  	XORQ	R9, R8				// R8 ^= R9
   705  	SUBL	R8, CX				// v1 -= R8
   706  	LEAQ	-626627285(CX), R8	// R8 = v1 + 0x...
   707  	MOVQ	CX, R9				// R9 = v1
   708  	SHLQ	$4, R9				// R9 <<= 4
   709  	ADDQ	DX, R9				// R9 += t0
   710  	XORQ	R9, R8				// R8 ^= R9
   711  	MOVQ	CX, R9				// R9 = v1
   712  	SHRQ	$5, R9				// R9 >>= 5
   713  	ADDQ	R12, R9				// R9 += t1
   714  	XORQ	R9, R8				// R8 ^= R9
   715  	SUBL	R8, R15				// v0 -= R8
   716  
   717  	LEAQ	1013904242(R15), R8	// R8 = v0 + 0x...
   718  	MOVQ	R15, R9				// R9 = v0
   719  	SHLQ	$4, R9				// R9 <<= 4
   720  	ADDQ	R10, R9				// R9 += t2
   721  	XORQ	R9, R8				// R8 ^= R9
   722  	MOVQ	R15, R9				// R9 = v0
   723  	SHRQ	$5, R9				// R9 >>= 5
   724  	ADDQ	R13, R9				// R9 += t3
   725  	XORQ	R9, R8				// R8 ^= R9
   726  	SUBL	R8, CX				// v1 -= R8
   727  	LEAQ	1013904242(CX), R8	// R8 = v1 + 0x...
   728  	MOVQ	CX, R9				// R9 = v1
   729  	SHLQ	$4, R9				// R9 <<= 4
   730  	ADDQ	DX, R9				// R9 += t0
   731  	XORQ	R9, R8				// R8 ^= R9
   732  	MOVQ	CX, R9				// R9 = v1
   733  	SHRQ	$5, R9				// R9 >>= 5
   734  	ADDQ	R12, R9				// R9 += t1
   735  	XORQ	R9, R8				// R8 ^= R9
   736  	SUBL	R8, R15				// v0 -= R8
   737  
   738  	LEAQ	-1640531527(R15), R8	// R8 = v0 + 0x...
   739  	MOVQ	R15, R9				// R9 = v0
   740  	SHLQ	$4, R9				// R9 <<= 4
   741  	ADDQ	R10, R9				// R9 += t2
   742  	XORQ	R9, R8				// R8 ^= R9
   743  	MOVQ	R15, R9				// R9 = v0
   744  	SHRQ	$5, R9				// R9 >>= 5
   745  	ADDQ	R13, R9				// R9 += t3
   746  	XORQ	R9, R8				// R8 ^= R9
   747  	SUBL	R8, CX				// v1 -= R8
   748  	LEAQ	-1640531527(CX), R8	// R8 = v1 + 0x...
   749  	MOVQ	CX, R9				// R9 = v1
   750  	SHLQ	$4, R9				// R9 <<= 4
   751  	ADDQ	DX, R9				// R9 += t0
   752  	XORQ	R9, R8				// R8 ^= R9
   753  	MOVQ	CX, R9				// R9 = v1
   754  	SHRQ	$5, R9				// R9 >>= 5
   755  	ADDQ	R12, R9				// R9 += t1
   756  	XORQ	R9, R8				// R8 ^= R9
   757  	SUBL	R8, R15				// v0 -= R8
   758  
   759  	SHLQ	$32, R15
   760  	ORQ		CX, R15
   761  	///////////////////////////////////////////////
   762  	XORQ	R15, R11			// holder ^= iv2
   763  	BSWAPQ	R11					// holder = BE(holder)
   764  	MOVQ	R11, (DI)(BX*1)		// PutUint64(dst[i:], holder)
   765  	MOVQ	SI, R11				// holder = iv1
   766  	ADDQ	$8, BX				// i += 8
   767  	JNZ		declop
   768  	RET