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