main
Raw Download raw file
   1// Code generated by command: go run keccakf_amd64_asm.go -out ../keccakf_amd64.s -pkg sha3. DO NOT EDIT.
   2
   3//go:build amd64 && !purego && gc
   4
   5// func keccakF1600(a *[25]uint64)
   6TEXT ยทkeccakF1600(SB), $200-8
   7	MOVQ a+0(FP), DI
   8
   9	// Convert the user state into an internal state
  10	NOTQ 8(DI)
  11	NOTQ 16(DI)
  12	NOTQ 64(DI)
  13	NOTQ 96(DI)
  14	NOTQ 136(DI)
  15	NOTQ 160(DI)
  16
  17	// Execute the KeccakF permutation
  18	MOVQ (DI), SI
  19	MOVQ 8(DI), BP
  20	MOVQ 32(DI), R15
  21	XORQ 40(DI), SI
  22	XORQ 48(DI), BP
  23	XORQ 72(DI), R15
  24	XORQ 80(DI), SI
  25	XORQ 88(DI), BP
  26	XORQ 112(DI), R15
  27	XORQ 120(DI), SI
  28	XORQ 128(DI), BP
  29	XORQ 152(DI), R15
  30	XORQ 160(DI), SI
  31	XORQ 168(DI), BP
  32	MOVQ 176(DI), DX
  33	MOVQ 184(DI), R8
  34	XORQ 192(DI), R15
  35
  36	// Prepare round
  37	MOVQ BP, BX
  38	ROLQ $0x01, BX
  39	MOVQ 16(DI), R12
  40	XORQ 56(DI), DX
  41	XORQ R15, BX
  42	XORQ 96(DI), R12
  43	XORQ 136(DI), DX
  44	XORQ DX, R12
  45	MOVQ R12, CX
  46	ROLQ $0x01, CX
  47	MOVQ 24(DI), R13
  48	XORQ 64(DI), R8
  49	XORQ SI, CX
  50	XORQ 104(DI), R13
  51	XORQ 144(DI), R8
  52	XORQ R8, R13
  53	MOVQ R13, DX
  54	ROLQ $0x01, DX
  55	MOVQ R15, R8
  56	XORQ BP, DX
  57	ROLQ $0x01, R8
  58	MOVQ SI, R9
  59	XORQ R12, R8
  60	ROLQ $0x01, R9
  61
  62	// Result b
  63	MOVQ (DI), R10
  64	MOVQ 48(DI), R11
  65	XORQ R13, R9
  66	MOVQ 96(DI), R12
  67	MOVQ 144(DI), R13
  68	MOVQ 192(DI), R14
  69	XORQ CX, R11
  70	ROLQ $0x2c, R11
  71	XORQ DX, R12
  72	XORQ BX, R10
  73	ROLQ $0x2b, R12
  74	MOVQ R11, SI
  75	MOVQ $0x0000000000000001, AX
  76	ORQ  R12, SI
  77	XORQ R10, AX
  78	XORQ AX, SI
  79	MOVQ SI, (SP)
  80	XORQ R9, R14
  81	ROLQ $0x0e, R14
  82	MOVQ R10, R15
  83	ANDQ R11, R15
  84	XORQ R14, R15
  85	MOVQ R15, 32(SP)
  86	XORQ R8, R13
  87	ROLQ $0x15, R13
  88	MOVQ R13, AX
  89	ANDQ R14, AX
  90	XORQ R12, AX
  91	MOVQ AX, 16(SP)
  92	NOTQ R12
  93	ORQ  R10, R14
  94	ORQ  R13, R12
  95	XORQ R13, R14
  96	XORQ R11, R12
  97	MOVQ R14, 24(SP)
  98	MOVQ R12, 8(SP)
  99	MOVQ R12, BP
 100
 101	// Result g
 102	MOVQ 72(DI), R11
 103	XORQ R9, R11
 104	MOVQ 80(DI), R12
 105	ROLQ $0x14, R11
 106	XORQ BX, R12
 107	ROLQ $0x03, R12
 108	MOVQ 24(DI), R10
 109	MOVQ R11, AX
 110	ORQ  R12, AX
 111	XORQ R8, R10
 112	MOVQ 128(DI), R13
 113	MOVQ 176(DI), R14
 114	ROLQ $0x1c, R10
 115	XORQ R10, AX
 116	MOVQ AX, 40(SP)
 117	XORQ AX, SI
 118	XORQ CX, R13
 119	ROLQ $0x2d, R13
 120	MOVQ R12, AX
 121	ANDQ R13, AX
 122	XORQ R11, AX
 123	MOVQ AX, 48(SP)
 124	XORQ AX, BP
 125	XORQ DX, R14
 126	ROLQ $0x3d, R14
 127	MOVQ R14, AX
 128	ORQ  R10, AX
 129	XORQ R13, AX
 130	MOVQ AX, 64(SP)
 131	ANDQ R11, R10
 132	XORQ R14, R10
 133	MOVQ R10, 72(SP)
 134	NOTQ R14
 135	XORQ R10, R15
 136	ORQ  R14, R13
 137	XORQ R12, R13
 138	MOVQ R13, 56(SP)
 139
 140	// Result k
 141	MOVQ 8(DI), R10
 142	MOVQ 56(DI), R11
 143	MOVQ 104(DI), R12
 144	MOVQ 152(DI), R13
 145	MOVQ 160(DI), R14
 146	XORQ DX, R11
 147	ROLQ $0x06, R11
 148	XORQ R8, R12
 149	ROLQ $0x19, R12
 150	MOVQ R11, AX
 151	ORQ  R12, AX
 152	XORQ CX, R10
 153	ROLQ $0x01, R10
 154	XORQ R10, AX
 155	MOVQ AX, 80(SP)
 156	XORQ AX, SI
 157	XORQ R9, R13
 158	ROLQ $0x08, R13
 159	MOVQ R12, AX
 160	ANDQ R13, AX
 161	XORQ R11, AX
 162	MOVQ AX, 88(SP)
 163	XORQ AX, BP
 164	XORQ BX, R14
 165	ROLQ $0x12, R14
 166	NOTQ R13
 167	MOVQ R13, AX
 168	ANDQ R14, AX
 169	XORQ R12, AX
 170	MOVQ AX, 96(SP)
 171	MOVQ R14, AX
 172	ORQ  R10, AX
 173	XORQ R13, AX
 174	MOVQ AX, 104(SP)
 175	ANDQ R11, R10
 176	XORQ R14, R10
 177	MOVQ R10, 112(SP)
 178	XORQ R10, R15
 179
 180	// Result m
 181	MOVQ 40(DI), R11
 182	XORQ BX, R11
 183	MOVQ 88(DI), R12
 184	ROLQ $0x24, R11
 185	XORQ CX, R12
 186	MOVQ 32(DI), R10
 187	ROLQ $0x0a, R12
 188	MOVQ R11, AX
 189	MOVQ 136(DI), R13
 190	ANDQ R12, AX
 191	XORQ R9, R10
 192	MOVQ 184(DI), R14
 193	ROLQ $0x1b, R10
 194	XORQ R10, AX
 195	MOVQ AX, 120(SP)
 196	XORQ AX, SI
 197	XORQ DX, R13
 198	ROLQ $0x0f, R13
 199	MOVQ R12, AX
 200	ORQ  R13, AX
 201	XORQ R11, AX
 202	MOVQ AX, 128(SP)
 203	XORQ AX, BP
 204	XORQ R8, R14
 205	ROLQ $0x38, R14
 206	NOTQ R13
 207	MOVQ R13, AX
 208	ORQ  R14, AX
 209	XORQ R12, AX
 210	MOVQ AX, 136(SP)
 211	ORQ  R10, R11
 212	XORQ R14, R11
 213	MOVQ R11, 152(SP)
 214	ANDQ R10, R14
 215	XORQ R13, R14
 216	MOVQ R14, 144(SP)
 217	XORQ R11, R15
 218
 219	// Result s
 220	MOVQ 16(DI), R10
 221	MOVQ 64(DI), R11
 222	MOVQ 112(DI), R12
 223	XORQ DX, R10
 224	MOVQ 120(DI), R13
 225	ROLQ $0x3e, R10
 226	XORQ R8, R11
 227	MOVQ 168(DI), R14
 228	ROLQ $0x37, R11
 229	XORQ R9, R12
 230	MOVQ R10, R9
 231	XORQ CX, R14
 232	ROLQ $0x02, R14
 233	ANDQ R11, R9
 234	XORQ R14, R9
 235	MOVQ R9, 192(SP)
 236	ROLQ $0x27, R12
 237	XORQ R9, R15
 238	NOTQ R11
 239	XORQ BX, R13
 240	MOVQ R11, BX
 241	ANDQ R12, BX
 242	XORQ R10, BX
 243	MOVQ BX, 160(SP)
 244	XORQ BX, SI
 245	ROLQ $0x29, R13
 246	MOVQ R12, CX
 247	ORQ  R13, CX
 248	XORQ R11, CX
 249	MOVQ CX, 168(SP)
 250	XORQ CX, BP
 251	MOVQ R13, DX
 252	MOVQ R14, R8
 253	ANDQ R14, DX
 254	ORQ  R10, R8
 255	XORQ R12, DX
 256	XORQ R13, R8
 257	MOVQ DX, 176(SP)
 258	MOVQ R8, 184(SP)
 259
 260	// Prepare round
 261	MOVQ BP, BX
 262	ROLQ $0x01, BX
 263	MOVQ 16(SP), R12
 264	XORQ 56(SP), DX
 265	XORQ R15, BX
 266	XORQ 96(SP), R12
 267	XORQ 136(SP), DX
 268	XORQ DX, R12
 269	MOVQ R12, CX
 270	ROLQ $0x01, CX
 271	MOVQ 24(SP), R13
 272	XORQ 64(SP), R8
 273	XORQ SI, CX
 274	XORQ 104(SP), R13
 275	XORQ 144(SP), R8
 276	XORQ R8, R13
 277	MOVQ R13, DX
 278	ROLQ $0x01, DX
 279	MOVQ R15, R8
 280	XORQ BP, DX
 281	ROLQ $0x01, R8
 282	MOVQ SI, R9
 283	XORQ R12, R8
 284	ROLQ $0x01, R9
 285
 286	// Result b
 287	MOVQ (SP), R10
 288	MOVQ 48(SP), R11
 289	XORQ R13, R9
 290	MOVQ 96(SP), R12
 291	MOVQ 144(SP), R13
 292	MOVQ 192(SP), R14
 293	XORQ CX, R11
 294	ROLQ $0x2c, R11
 295	XORQ DX, R12
 296	XORQ BX, R10
 297	ROLQ $0x2b, R12
 298	MOVQ R11, SI
 299	MOVQ $0x0000000000008082, AX
 300	ORQ  R12, SI
 301	XORQ R10, AX
 302	XORQ AX, SI
 303	MOVQ SI, (DI)
 304	XORQ R9, R14
 305	ROLQ $0x0e, R14
 306	MOVQ R10, R15
 307	ANDQ R11, R15
 308	XORQ R14, R15
 309	MOVQ R15, 32(DI)
 310	XORQ R8, R13
 311	ROLQ $0x15, R13
 312	MOVQ R13, AX
 313	ANDQ R14, AX
 314	XORQ R12, AX
 315	MOVQ AX, 16(DI)
 316	NOTQ R12
 317	ORQ  R10, R14
 318	ORQ  R13, R12
 319	XORQ R13, R14
 320	XORQ R11, R12
 321	MOVQ R14, 24(DI)
 322	MOVQ R12, 8(DI)
 323	MOVQ R12, BP
 324
 325	// Result g
 326	MOVQ 72(SP), R11
 327	XORQ R9, R11
 328	MOVQ 80(SP), R12
 329	ROLQ $0x14, R11
 330	XORQ BX, R12
 331	ROLQ $0x03, R12
 332	MOVQ 24(SP), R10
 333	MOVQ R11, AX
 334	ORQ  R12, AX
 335	XORQ R8, R10
 336	MOVQ 128(SP), R13
 337	MOVQ 176(SP), R14
 338	ROLQ $0x1c, R10
 339	XORQ R10, AX
 340	MOVQ AX, 40(DI)
 341	XORQ AX, SI
 342	XORQ CX, R13
 343	ROLQ $0x2d, R13
 344	MOVQ R12, AX
 345	ANDQ R13, AX
 346	XORQ R11, AX
 347	MOVQ AX, 48(DI)
 348	XORQ AX, BP
 349	XORQ DX, R14
 350	ROLQ $0x3d, R14
 351	MOVQ R14, AX
 352	ORQ  R10, AX
 353	XORQ R13, AX
 354	MOVQ AX, 64(DI)
 355	ANDQ R11, R10
 356	XORQ R14, R10
 357	MOVQ R10, 72(DI)
 358	NOTQ R14
 359	XORQ R10, R15
 360	ORQ  R14, R13
 361	XORQ R12, R13
 362	MOVQ R13, 56(DI)
 363
 364	// Result k
 365	MOVQ 8(SP), R10
 366	MOVQ 56(SP), R11
 367	MOVQ 104(SP), R12
 368	MOVQ 152(SP), R13
 369	MOVQ 160(SP), R14
 370	XORQ DX, R11
 371	ROLQ $0x06, R11
 372	XORQ R8, R12
 373	ROLQ $0x19, R12
 374	MOVQ R11, AX
 375	ORQ  R12, AX
 376	XORQ CX, R10
 377	ROLQ $0x01, R10
 378	XORQ R10, AX
 379	MOVQ AX, 80(DI)
 380	XORQ AX, SI
 381	XORQ R9, R13
 382	ROLQ $0x08, R13
 383	MOVQ R12, AX
 384	ANDQ R13, AX
 385	XORQ R11, AX
 386	MOVQ AX, 88(DI)
 387	XORQ AX, BP
 388	XORQ BX, R14
 389	ROLQ $0x12, R14
 390	NOTQ R13
 391	MOVQ R13, AX
 392	ANDQ R14, AX
 393	XORQ R12, AX
 394	MOVQ AX, 96(DI)
 395	MOVQ R14, AX
 396	ORQ  R10, AX
 397	XORQ R13, AX
 398	MOVQ AX, 104(DI)
 399	ANDQ R11, R10
 400	XORQ R14, R10
 401	MOVQ R10, 112(DI)
 402	XORQ R10, R15
 403
 404	// Result m
 405	MOVQ 40(SP), R11
 406	XORQ BX, R11
 407	MOVQ 88(SP), R12
 408	ROLQ $0x24, R11
 409	XORQ CX, R12
 410	MOVQ 32(SP), R10
 411	ROLQ $0x0a, R12
 412	MOVQ R11, AX
 413	MOVQ 136(SP), R13
 414	ANDQ R12, AX
 415	XORQ R9, R10
 416	MOVQ 184(SP), R14
 417	ROLQ $0x1b, R10
 418	XORQ R10, AX
 419	MOVQ AX, 120(DI)
 420	XORQ AX, SI
 421	XORQ DX, R13
 422	ROLQ $0x0f, R13
 423	MOVQ R12, AX
 424	ORQ  R13, AX
 425	XORQ R11, AX
 426	MOVQ AX, 128(DI)
 427	XORQ AX, BP
 428	XORQ R8, R14
 429	ROLQ $0x38, R14
 430	NOTQ R13
 431	MOVQ R13, AX
 432	ORQ  R14, AX
 433	XORQ R12, AX
 434	MOVQ AX, 136(DI)
 435	ORQ  R10, R11
 436	XORQ R14, R11
 437	MOVQ R11, 152(DI)
 438	ANDQ R10, R14
 439	XORQ R13, R14
 440	MOVQ R14, 144(DI)
 441	XORQ R11, R15
 442
 443	// Result s
 444	MOVQ 16(SP), R10
 445	MOVQ 64(SP), R11
 446	MOVQ 112(SP), R12
 447	XORQ DX, R10
 448	MOVQ 120(SP), R13
 449	ROLQ $0x3e, R10
 450	XORQ R8, R11
 451	MOVQ 168(SP), R14
 452	ROLQ $0x37, R11
 453	XORQ R9, R12
 454	MOVQ R10, R9
 455	XORQ CX, R14
 456	ROLQ $0x02, R14
 457	ANDQ R11, R9
 458	XORQ R14, R9
 459	MOVQ R9, 192(DI)
 460	ROLQ $0x27, R12
 461	XORQ R9, R15
 462	NOTQ R11
 463	XORQ BX, R13
 464	MOVQ R11, BX
 465	ANDQ R12, BX
 466	XORQ R10, BX
 467	MOVQ BX, 160(DI)
 468	XORQ BX, SI
 469	ROLQ $0x29, R13
 470	MOVQ R12, CX
 471	ORQ  R13, CX
 472	XORQ R11, CX
 473	MOVQ CX, 168(DI)
 474	XORQ CX, BP
 475	MOVQ R13, DX
 476	MOVQ R14, R8
 477	ANDQ R14, DX
 478	ORQ  R10, R8
 479	XORQ R12, DX
 480	XORQ R13, R8
 481	MOVQ DX, 176(DI)
 482	MOVQ R8, 184(DI)
 483
 484	// Prepare round
 485	MOVQ BP, BX
 486	ROLQ $0x01, BX
 487	MOVQ 16(DI), R12
 488	XORQ 56(DI), DX
 489	XORQ R15, BX
 490	XORQ 96(DI), R12
 491	XORQ 136(DI), DX
 492	XORQ DX, R12
 493	MOVQ R12, CX
 494	ROLQ $0x01, CX
 495	MOVQ 24(DI), R13
 496	XORQ 64(DI), R8
 497	XORQ SI, CX
 498	XORQ 104(DI), R13
 499	XORQ 144(DI), R8
 500	XORQ R8, R13
 501	MOVQ R13, DX
 502	ROLQ $0x01, DX
 503	MOVQ R15, R8
 504	XORQ BP, DX
 505	ROLQ $0x01, R8
 506	MOVQ SI, R9
 507	XORQ R12, R8
 508	ROLQ $0x01, R9
 509
 510	// Result b
 511	MOVQ (DI), R10
 512	MOVQ 48(DI), R11
 513	XORQ R13, R9
 514	MOVQ 96(DI), R12
 515	MOVQ 144(DI), R13
 516	MOVQ 192(DI), R14
 517	XORQ CX, R11
 518	ROLQ $0x2c, R11
 519	XORQ DX, R12
 520	XORQ BX, R10
 521	ROLQ $0x2b, R12
 522	MOVQ R11, SI
 523	MOVQ $0x800000000000808a, AX
 524	ORQ  R12, SI
 525	XORQ R10, AX
 526	XORQ AX, SI
 527	MOVQ SI, (SP)
 528	XORQ R9, R14
 529	ROLQ $0x0e, R14
 530	MOVQ R10, R15
 531	ANDQ R11, R15
 532	XORQ R14, R15
 533	MOVQ R15, 32(SP)
 534	XORQ R8, R13
 535	ROLQ $0x15, R13
 536	MOVQ R13, AX
 537	ANDQ R14, AX
 538	XORQ R12, AX
 539	MOVQ AX, 16(SP)
 540	NOTQ R12
 541	ORQ  R10, R14
 542	ORQ  R13, R12
 543	XORQ R13, R14
 544	XORQ R11, R12
 545	MOVQ R14, 24(SP)
 546	MOVQ R12, 8(SP)
 547	MOVQ R12, BP
 548
 549	// Result g
 550	MOVQ 72(DI), R11
 551	XORQ R9, R11
 552	MOVQ 80(DI), R12
 553	ROLQ $0x14, R11
 554	XORQ BX, R12
 555	ROLQ $0x03, R12
 556	MOVQ 24(DI), R10
 557	MOVQ R11, AX
 558	ORQ  R12, AX
 559	XORQ R8, R10
 560	MOVQ 128(DI), R13
 561	MOVQ 176(DI), R14
 562	ROLQ $0x1c, R10
 563	XORQ R10, AX
 564	MOVQ AX, 40(SP)
 565	XORQ AX, SI
 566	XORQ CX, R13
 567	ROLQ $0x2d, R13
 568	MOVQ R12, AX
 569	ANDQ R13, AX
 570	XORQ R11, AX
 571	MOVQ AX, 48(SP)
 572	XORQ AX, BP
 573	XORQ DX, R14
 574	ROLQ $0x3d, R14
 575	MOVQ R14, AX
 576	ORQ  R10, AX
 577	XORQ R13, AX
 578	MOVQ AX, 64(SP)
 579	ANDQ R11, R10
 580	XORQ R14, R10
 581	MOVQ R10, 72(SP)
 582	NOTQ R14
 583	XORQ R10, R15
 584	ORQ  R14, R13
 585	XORQ R12, R13
 586	MOVQ R13, 56(SP)
 587
 588	// Result k
 589	MOVQ 8(DI), R10
 590	MOVQ 56(DI), R11
 591	MOVQ 104(DI), R12
 592	MOVQ 152(DI), R13
 593	MOVQ 160(DI), R14
 594	XORQ DX, R11
 595	ROLQ $0x06, R11
 596	XORQ R8, R12
 597	ROLQ $0x19, R12
 598	MOVQ R11, AX
 599	ORQ  R12, AX
 600	XORQ CX, R10
 601	ROLQ $0x01, R10
 602	XORQ R10, AX
 603	MOVQ AX, 80(SP)
 604	XORQ AX, SI
 605	XORQ R9, R13
 606	ROLQ $0x08, R13
 607	MOVQ R12, AX
 608	ANDQ R13, AX
 609	XORQ R11, AX
 610	MOVQ AX, 88(SP)
 611	XORQ AX, BP
 612	XORQ BX, R14
 613	ROLQ $0x12, R14
 614	NOTQ R13
 615	MOVQ R13, AX
 616	ANDQ R14, AX
 617	XORQ R12, AX
 618	MOVQ AX, 96(SP)
 619	MOVQ R14, AX
 620	ORQ  R10, AX
 621	XORQ R13, AX
 622	MOVQ AX, 104(SP)
 623	ANDQ R11, R10
 624	XORQ R14, R10
 625	MOVQ R10, 112(SP)
 626	XORQ R10, R15
 627
 628	// Result m
 629	MOVQ 40(DI), R11
 630	XORQ BX, R11
 631	MOVQ 88(DI), R12
 632	ROLQ $0x24, R11
 633	XORQ CX, R12
 634	MOVQ 32(DI), R10
 635	ROLQ $0x0a, R12
 636	MOVQ R11, AX
 637	MOVQ 136(DI), R13
 638	ANDQ R12, AX
 639	XORQ R9, R10
 640	MOVQ 184(DI), R14
 641	ROLQ $0x1b, R10
 642	XORQ R10, AX
 643	MOVQ AX, 120(SP)
 644	XORQ AX, SI
 645	XORQ DX, R13
 646	ROLQ $0x0f, R13
 647	MOVQ R12, AX
 648	ORQ  R13, AX
 649	XORQ R11, AX
 650	MOVQ AX, 128(SP)
 651	XORQ AX, BP
 652	XORQ R8, R14
 653	ROLQ $0x38, R14
 654	NOTQ R13
 655	MOVQ R13, AX
 656	ORQ  R14, AX
 657	XORQ R12, AX
 658	MOVQ AX, 136(SP)
 659	ORQ  R10, R11
 660	XORQ R14, R11
 661	MOVQ R11, 152(SP)
 662	ANDQ R10, R14
 663	XORQ R13, R14
 664	MOVQ R14, 144(SP)
 665	XORQ R11, R15
 666
 667	// Result s
 668	MOVQ 16(DI), R10
 669	MOVQ 64(DI), R11
 670	MOVQ 112(DI), R12
 671	XORQ DX, R10
 672	MOVQ 120(DI), R13
 673	ROLQ $0x3e, R10
 674	XORQ R8, R11
 675	MOVQ 168(DI), R14
 676	ROLQ $0x37, R11
 677	XORQ R9, R12
 678	MOVQ R10, R9
 679	XORQ CX, R14
 680	ROLQ $0x02, R14
 681	ANDQ R11, R9
 682	XORQ R14, R9
 683	MOVQ R9, 192(SP)
 684	ROLQ $0x27, R12
 685	XORQ R9, R15
 686	NOTQ R11
 687	XORQ BX, R13
 688	MOVQ R11, BX
 689	ANDQ R12, BX
 690	XORQ R10, BX
 691	MOVQ BX, 160(SP)
 692	XORQ BX, SI
 693	ROLQ $0x29, R13
 694	MOVQ R12, CX
 695	ORQ  R13, CX
 696	XORQ R11, CX
 697	MOVQ CX, 168(SP)
 698	XORQ CX, BP
 699	MOVQ R13, DX
 700	MOVQ R14, R8
 701	ANDQ R14, DX
 702	ORQ  R10, R8
 703	XORQ R12, DX
 704	XORQ R13, R8
 705	MOVQ DX, 176(SP)
 706	MOVQ R8, 184(SP)
 707
 708	// Prepare round
 709	MOVQ BP, BX
 710	ROLQ $0x01, BX
 711	MOVQ 16(SP), R12
 712	XORQ 56(SP), DX
 713	XORQ R15, BX
 714	XORQ 96(SP), R12
 715	XORQ 136(SP), DX
 716	XORQ DX, R12
 717	MOVQ R12, CX
 718	ROLQ $0x01, CX
 719	MOVQ 24(SP), R13
 720	XORQ 64(SP), R8
 721	XORQ SI, CX
 722	XORQ 104(SP), R13
 723	XORQ 144(SP), R8
 724	XORQ R8, R13
 725	MOVQ R13, DX
 726	ROLQ $0x01, DX
 727	MOVQ R15, R8
 728	XORQ BP, DX
 729	ROLQ $0x01, R8
 730	MOVQ SI, R9
 731	XORQ R12, R8
 732	ROLQ $0x01, R9
 733
 734	// Result b
 735	MOVQ (SP), R10
 736	MOVQ 48(SP), R11
 737	XORQ R13, R9
 738	MOVQ 96(SP), R12
 739	MOVQ 144(SP), R13
 740	MOVQ 192(SP), R14
 741	XORQ CX, R11
 742	ROLQ $0x2c, R11
 743	XORQ DX, R12
 744	XORQ BX, R10
 745	ROLQ $0x2b, R12
 746	MOVQ R11, SI
 747	MOVQ $0x8000000080008000, AX
 748	ORQ  R12, SI
 749	XORQ R10, AX
 750	XORQ AX, SI
 751	MOVQ SI, (DI)
 752	XORQ R9, R14
 753	ROLQ $0x0e, R14
 754	MOVQ R10, R15
 755	ANDQ R11, R15
 756	XORQ R14, R15
 757	MOVQ R15, 32(DI)
 758	XORQ R8, R13
 759	ROLQ $0x15, R13
 760	MOVQ R13, AX
 761	ANDQ R14, AX
 762	XORQ R12, AX
 763	MOVQ AX, 16(DI)
 764	NOTQ R12
 765	ORQ  R10, R14
 766	ORQ  R13, R12
 767	XORQ R13, R14
 768	XORQ R11, R12
 769	MOVQ R14, 24(DI)
 770	MOVQ R12, 8(DI)
 771	MOVQ R12, BP
 772
 773	// Result g
 774	MOVQ 72(SP), R11
 775	XORQ R9, R11
 776	MOVQ 80(SP), R12
 777	ROLQ $0x14, R11
 778	XORQ BX, R12
 779	ROLQ $0x03, R12
 780	MOVQ 24(SP), R10
 781	MOVQ R11, AX
 782	ORQ  R12, AX
 783	XORQ R8, R10
 784	MOVQ 128(SP), R13
 785	MOVQ 176(SP), R14
 786	ROLQ $0x1c, R10
 787	XORQ R10, AX
 788	MOVQ AX, 40(DI)
 789	XORQ AX, SI
 790	XORQ CX, R13
 791	ROLQ $0x2d, R13
 792	MOVQ R12, AX
 793	ANDQ R13, AX
 794	XORQ R11, AX
 795	MOVQ AX, 48(DI)
 796	XORQ AX, BP
 797	XORQ DX, R14
 798	ROLQ $0x3d, R14
 799	MOVQ R14, AX
 800	ORQ  R10, AX
 801	XORQ R13, AX
 802	MOVQ AX, 64(DI)
 803	ANDQ R11, R10
 804	XORQ R14, R10
 805	MOVQ R10, 72(DI)
 806	NOTQ R14
 807	XORQ R10, R15
 808	ORQ  R14, R13
 809	XORQ R12, R13
 810	MOVQ R13, 56(DI)
 811
 812	// Result k
 813	MOVQ 8(SP), R10
 814	MOVQ 56(SP), R11
 815	MOVQ 104(SP), R12
 816	MOVQ 152(SP), R13
 817	MOVQ 160(SP), R14
 818	XORQ DX, R11
 819	ROLQ $0x06, R11
 820	XORQ R8, R12
 821	ROLQ $0x19, R12
 822	MOVQ R11, AX
 823	ORQ  R12, AX
 824	XORQ CX, R10
 825	ROLQ $0x01, R10
 826	XORQ R10, AX
 827	MOVQ AX, 80(DI)
 828	XORQ AX, SI
 829	XORQ R9, R13
 830	ROLQ $0x08, R13
 831	MOVQ R12, AX
 832	ANDQ R13, AX
 833	XORQ R11, AX
 834	MOVQ AX, 88(DI)
 835	XORQ AX, BP
 836	XORQ BX, R14
 837	ROLQ $0x12, R14
 838	NOTQ R13
 839	MOVQ R13, AX
 840	ANDQ R14, AX
 841	XORQ R12, AX
 842	MOVQ AX, 96(DI)
 843	MOVQ R14, AX
 844	ORQ  R10, AX
 845	XORQ R13, AX
 846	MOVQ AX, 104(DI)
 847	ANDQ R11, R10
 848	XORQ R14, R10
 849	MOVQ R10, 112(DI)
 850	XORQ R10, R15
 851
 852	// Result m
 853	MOVQ 40(SP), R11
 854	XORQ BX, R11
 855	MOVQ 88(SP), R12
 856	ROLQ $0x24, R11
 857	XORQ CX, R12
 858	MOVQ 32(SP), R10
 859	ROLQ $0x0a, R12
 860	MOVQ R11, AX
 861	MOVQ 136(SP), R13
 862	ANDQ R12, AX
 863	XORQ R9, R10
 864	MOVQ 184(SP), R14
 865	ROLQ $0x1b, R10
 866	XORQ R10, AX
 867	MOVQ AX, 120(DI)
 868	XORQ AX, SI
 869	XORQ DX, R13
 870	ROLQ $0x0f, R13
 871	MOVQ R12, AX
 872	ORQ  R13, AX
 873	XORQ R11, AX
 874	MOVQ AX, 128(DI)
 875	XORQ AX, BP
 876	XORQ R8, R14
 877	ROLQ $0x38, R14
 878	NOTQ R13
 879	MOVQ R13, AX
 880	ORQ  R14, AX
 881	XORQ R12, AX
 882	MOVQ AX, 136(DI)
 883	ORQ  R10, R11
 884	XORQ R14, R11
 885	MOVQ R11, 152(DI)
 886	ANDQ R10, R14
 887	XORQ R13, R14
 888	MOVQ R14, 144(DI)
 889	XORQ R11, R15
 890
 891	// Result s
 892	MOVQ 16(SP), R10
 893	MOVQ 64(SP), R11
 894	MOVQ 112(SP), R12
 895	XORQ DX, R10
 896	MOVQ 120(SP), R13
 897	ROLQ $0x3e, R10
 898	XORQ R8, R11
 899	MOVQ 168(SP), R14
 900	ROLQ $0x37, R11
 901	XORQ R9, R12
 902	MOVQ R10, R9
 903	XORQ CX, R14
 904	ROLQ $0x02, R14
 905	ANDQ R11, R9
 906	XORQ R14, R9
 907	MOVQ R9, 192(DI)
 908	ROLQ $0x27, R12
 909	XORQ R9, R15
 910	NOTQ R11
 911	XORQ BX, R13
 912	MOVQ R11, BX
 913	ANDQ R12, BX
 914	XORQ R10, BX
 915	MOVQ BX, 160(DI)
 916	XORQ BX, SI
 917	ROLQ $0x29, R13
 918	MOVQ R12, CX
 919	ORQ  R13, CX
 920	XORQ R11, CX
 921	MOVQ CX, 168(DI)
 922	XORQ CX, BP
 923	MOVQ R13, DX
 924	MOVQ R14, R8
 925	ANDQ R14, DX
 926	ORQ  R10, R8
 927	XORQ R12, DX
 928	XORQ R13, R8
 929	MOVQ DX, 176(DI)
 930	MOVQ R8, 184(DI)
 931
 932	// Prepare round
 933	MOVQ BP, BX
 934	ROLQ $0x01, BX
 935	MOVQ 16(DI), R12
 936	XORQ 56(DI), DX
 937	XORQ R15, BX
 938	XORQ 96(DI), R12
 939	XORQ 136(DI), DX
 940	XORQ DX, R12
 941	MOVQ R12, CX
 942	ROLQ $0x01, CX
 943	MOVQ 24(DI), R13
 944	XORQ 64(DI), R8
 945	XORQ SI, CX
 946	XORQ 104(DI), R13
 947	XORQ 144(DI), R8
 948	XORQ R8, R13
 949	MOVQ R13, DX
 950	ROLQ $0x01, DX
 951	MOVQ R15, R8
 952	XORQ BP, DX
 953	ROLQ $0x01, R8
 954	MOVQ SI, R9
 955	XORQ R12, R8
 956	ROLQ $0x01, R9
 957
 958	// Result b
 959	MOVQ (DI), R10
 960	MOVQ 48(DI), R11
 961	XORQ R13, R9
 962	MOVQ 96(DI), R12
 963	MOVQ 144(DI), R13
 964	MOVQ 192(DI), R14
 965	XORQ CX, R11
 966	ROLQ $0x2c, R11
 967	XORQ DX, R12
 968	XORQ BX, R10
 969	ROLQ $0x2b, R12
 970	MOVQ R11, SI
 971	MOVQ $0x000000000000808b, AX
 972	ORQ  R12, SI
 973	XORQ R10, AX
 974	XORQ AX, SI
 975	MOVQ SI, (SP)
 976	XORQ R9, R14
 977	ROLQ $0x0e, R14
 978	MOVQ R10, R15
 979	ANDQ R11, R15
 980	XORQ R14, R15
 981	MOVQ R15, 32(SP)
 982	XORQ R8, R13
 983	ROLQ $0x15, R13
 984	MOVQ R13, AX
 985	ANDQ R14, AX
 986	XORQ R12, AX
 987	MOVQ AX, 16(SP)
 988	NOTQ R12
 989	ORQ  R10, R14
 990	ORQ  R13, R12
 991	XORQ R13, R14
 992	XORQ R11, R12
 993	MOVQ R14, 24(SP)
 994	MOVQ R12, 8(SP)
 995	MOVQ R12, BP
 996
 997	// Result g
 998	MOVQ 72(DI), R11
 999	XORQ R9, R11
1000	MOVQ 80(DI), R12
1001	ROLQ $0x14, R11
1002	XORQ BX, R12
1003	ROLQ $0x03, R12
1004	MOVQ 24(DI), R10
1005	MOVQ R11, AX
1006	ORQ  R12, AX
1007	XORQ R8, R10
1008	MOVQ 128(DI), R13
1009	MOVQ 176(DI), R14
1010	ROLQ $0x1c, R10
1011	XORQ R10, AX
1012	MOVQ AX, 40(SP)
1013	XORQ AX, SI
1014	XORQ CX, R13
1015	ROLQ $0x2d, R13
1016	MOVQ R12, AX
1017	ANDQ R13, AX
1018	XORQ R11, AX
1019	MOVQ AX, 48(SP)
1020	XORQ AX, BP
1021	XORQ DX, R14
1022	ROLQ $0x3d, R14
1023	MOVQ R14, AX
1024	ORQ  R10, AX
1025	XORQ R13, AX
1026	MOVQ AX, 64(SP)
1027	ANDQ R11, R10
1028	XORQ R14, R10
1029	MOVQ R10, 72(SP)
1030	NOTQ R14
1031	XORQ R10, R15
1032	ORQ  R14, R13
1033	XORQ R12, R13
1034	MOVQ R13, 56(SP)
1035
1036	// Result k
1037	MOVQ 8(DI), R10
1038	MOVQ 56(DI), R11
1039	MOVQ 104(DI), R12
1040	MOVQ 152(DI), R13
1041	MOVQ 160(DI), R14
1042	XORQ DX, R11
1043	ROLQ $0x06, R11
1044	XORQ R8, R12
1045	ROLQ $0x19, R12
1046	MOVQ R11, AX
1047	ORQ  R12, AX
1048	XORQ CX, R10
1049	ROLQ $0x01, R10
1050	XORQ R10, AX
1051	MOVQ AX, 80(SP)
1052	XORQ AX, SI
1053	XORQ R9, R13
1054	ROLQ $0x08, R13
1055	MOVQ R12, AX
1056	ANDQ R13, AX
1057	XORQ R11, AX
1058	MOVQ AX, 88(SP)
1059	XORQ AX, BP
1060	XORQ BX, R14
1061	ROLQ $0x12, R14
1062	NOTQ R13
1063	MOVQ R13, AX
1064	ANDQ R14, AX
1065	XORQ R12, AX
1066	MOVQ AX, 96(SP)
1067	MOVQ R14, AX
1068	ORQ  R10, AX
1069	XORQ R13, AX
1070	MOVQ AX, 104(SP)
1071	ANDQ R11, R10
1072	XORQ R14, R10
1073	MOVQ R10, 112(SP)
1074	XORQ R10, R15
1075
1076	// Result m
1077	MOVQ 40(DI), R11
1078	XORQ BX, R11
1079	MOVQ 88(DI), R12
1080	ROLQ $0x24, R11
1081	XORQ CX, R12
1082	MOVQ 32(DI), R10
1083	ROLQ $0x0a, R12
1084	MOVQ R11, AX
1085	MOVQ 136(DI), R13
1086	ANDQ R12, AX
1087	XORQ R9, R10
1088	MOVQ 184(DI), R14
1089	ROLQ $0x1b, R10
1090	XORQ R10, AX
1091	MOVQ AX, 120(SP)
1092	XORQ AX, SI
1093	XORQ DX, R13
1094	ROLQ $0x0f, R13
1095	MOVQ R12, AX
1096	ORQ  R13, AX
1097	XORQ R11, AX
1098	MOVQ AX, 128(SP)
1099	XORQ AX, BP
1100	XORQ R8, R14
1101	ROLQ $0x38, R14
1102	NOTQ R13
1103	MOVQ R13, AX
1104	ORQ  R14, AX
1105	XORQ R12, AX
1106	MOVQ AX, 136(SP)
1107	ORQ  R10, R11
1108	XORQ R14, R11
1109	MOVQ R11, 152(SP)
1110	ANDQ R10, R14
1111	XORQ R13, R14
1112	MOVQ R14, 144(SP)
1113	XORQ R11, R15
1114
1115	// Result s
1116	MOVQ 16(DI), R10
1117	MOVQ 64(DI), R11
1118	MOVQ 112(DI), R12
1119	XORQ DX, R10
1120	MOVQ 120(DI), R13
1121	ROLQ $0x3e, R10
1122	XORQ R8, R11
1123	MOVQ 168(DI), R14
1124	ROLQ $0x37, R11
1125	XORQ R9, R12
1126	MOVQ R10, R9
1127	XORQ CX, R14
1128	ROLQ $0x02, R14
1129	ANDQ R11, R9
1130	XORQ R14, R9
1131	MOVQ R9, 192(SP)
1132	ROLQ $0x27, R12
1133	XORQ R9, R15
1134	NOTQ R11
1135	XORQ BX, R13
1136	MOVQ R11, BX
1137	ANDQ R12, BX
1138	XORQ R10, BX
1139	MOVQ BX, 160(SP)
1140	XORQ BX, SI
1141	ROLQ $0x29, R13
1142	MOVQ R12, CX
1143	ORQ  R13, CX
1144	XORQ R11, CX
1145	MOVQ CX, 168(SP)
1146	XORQ CX, BP
1147	MOVQ R13, DX
1148	MOVQ R14, R8
1149	ANDQ R14, DX
1150	ORQ  R10, R8
1151	XORQ R12, DX
1152	XORQ R13, R8
1153	MOVQ DX, 176(SP)
1154	MOVQ R8, 184(SP)
1155
1156	// Prepare round
1157	MOVQ BP, BX
1158	ROLQ $0x01, BX
1159	MOVQ 16(SP), R12
1160	XORQ 56(SP), DX
1161	XORQ R15, BX
1162	XORQ 96(SP), R12
1163	XORQ 136(SP), DX
1164	XORQ DX, R12
1165	MOVQ R12, CX
1166	ROLQ $0x01, CX
1167	MOVQ 24(SP), R13
1168	XORQ 64(SP), R8
1169	XORQ SI, CX
1170	XORQ 104(SP), R13
1171	XORQ 144(SP), R8
1172	XORQ R8, R13
1173	MOVQ R13, DX
1174	ROLQ $0x01, DX
1175	MOVQ R15, R8
1176	XORQ BP, DX
1177	ROLQ $0x01, R8
1178	MOVQ SI, R9
1179	XORQ R12, R8
1180	ROLQ $0x01, R9
1181
1182	// Result b
1183	MOVQ (SP), R10
1184	MOVQ 48(SP), R11
1185	XORQ R13, R9
1186	MOVQ 96(SP), R12
1187	MOVQ 144(SP), R13
1188	MOVQ 192(SP), R14
1189	XORQ CX, R11
1190	ROLQ $0x2c, R11
1191	XORQ DX, R12
1192	XORQ BX, R10
1193	ROLQ $0x2b, R12
1194	MOVQ R11, SI
1195	MOVQ $0x0000000080000001, AX
1196	ORQ  R12, SI
1197	XORQ R10, AX
1198	XORQ AX, SI
1199	MOVQ SI, (DI)
1200	XORQ R9, R14
1201	ROLQ $0x0e, R14
1202	MOVQ R10, R15
1203	ANDQ R11, R15
1204	XORQ R14, R15
1205	MOVQ R15, 32(DI)
1206	XORQ R8, R13
1207	ROLQ $0x15, R13
1208	MOVQ R13, AX
1209	ANDQ R14, AX
1210	XORQ R12, AX
1211	MOVQ AX, 16(DI)
1212	NOTQ R12
1213	ORQ  R10, R14
1214	ORQ  R13, R12
1215	XORQ R13, R14
1216	XORQ R11, R12
1217	MOVQ R14, 24(DI)
1218	MOVQ R12, 8(DI)
1219	MOVQ R12, BP
1220
1221	// Result g
1222	MOVQ 72(SP), R11
1223	XORQ R9, R11
1224	MOVQ 80(SP), R12
1225	ROLQ $0x14, R11
1226	XORQ BX, R12
1227	ROLQ $0x03, R12
1228	MOVQ 24(SP), R10
1229	MOVQ R11, AX
1230	ORQ  R12, AX
1231	XORQ R8, R10
1232	MOVQ 128(SP), R13
1233	MOVQ 176(SP), R14
1234	ROLQ $0x1c, R10
1235	XORQ R10, AX
1236	MOVQ AX, 40(DI)
1237	XORQ AX, SI
1238	XORQ CX, R13
1239	ROLQ $0x2d, R13
1240	MOVQ R12, AX
1241	ANDQ R13, AX
1242	XORQ R11, AX
1243	MOVQ AX, 48(DI)
1244	XORQ AX, BP
1245	XORQ DX, R14
1246	ROLQ $0x3d, R14
1247	MOVQ R14, AX
1248	ORQ  R10, AX
1249	XORQ R13, AX
1250	MOVQ AX, 64(DI)
1251	ANDQ R11, R10
1252	XORQ R14, R10
1253	MOVQ R10, 72(DI)
1254	NOTQ R14
1255	XORQ R10, R15
1256	ORQ  R14, R13
1257	XORQ R12, R13
1258	MOVQ R13, 56(DI)
1259
1260	// Result k
1261	MOVQ 8(SP), R10
1262	MOVQ 56(SP), R11
1263	MOVQ 104(SP), R12
1264	MOVQ 152(SP), R13
1265	MOVQ 160(SP), R14
1266	XORQ DX, R11
1267	ROLQ $0x06, R11
1268	XORQ R8, R12
1269	ROLQ $0x19, R12
1270	MOVQ R11, AX
1271	ORQ  R12, AX
1272	XORQ CX, R10
1273	ROLQ $0x01, R10
1274	XORQ R10, AX
1275	MOVQ AX, 80(DI)
1276	XORQ AX, SI
1277	XORQ R9, R13
1278	ROLQ $0x08, R13
1279	MOVQ R12, AX
1280	ANDQ R13, AX
1281	XORQ R11, AX
1282	MOVQ AX, 88(DI)
1283	XORQ AX, BP
1284	XORQ BX, R14
1285	ROLQ $0x12, R14
1286	NOTQ R13
1287	MOVQ R13, AX
1288	ANDQ R14, AX
1289	XORQ R12, AX
1290	MOVQ AX, 96(DI)
1291	MOVQ R14, AX
1292	ORQ  R10, AX
1293	XORQ R13, AX
1294	MOVQ AX, 104(DI)
1295	ANDQ R11, R10
1296	XORQ R14, R10
1297	MOVQ R10, 112(DI)
1298	XORQ R10, R15
1299
1300	// Result m
1301	MOVQ 40(SP), R11
1302	XORQ BX, R11
1303	MOVQ 88(SP), R12
1304	ROLQ $0x24, R11
1305	XORQ CX, R12
1306	MOVQ 32(SP), R10
1307	ROLQ $0x0a, R12
1308	MOVQ R11, AX
1309	MOVQ 136(SP), R13
1310	ANDQ R12, AX
1311	XORQ R9, R10
1312	MOVQ 184(SP), R14
1313	ROLQ $0x1b, R10
1314	XORQ R10, AX
1315	MOVQ AX, 120(DI)
1316	XORQ AX, SI
1317	XORQ DX, R13
1318	ROLQ $0x0f, R13
1319	MOVQ R12, AX
1320	ORQ  R13, AX
1321	XORQ R11, AX
1322	MOVQ AX, 128(DI)
1323	XORQ AX, BP
1324	XORQ R8, R14
1325	ROLQ $0x38, R14
1326	NOTQ R13
1327	MOVQ R13, AX
1328	ORQ  R14, AX
1329	XORQ R12, AX
1330	MOVQ AX, 136(DI)
1331	ORQ  R10, R11
1332	XORQ R14, R11
1333	MOVQ R11, 152(DI)
1334	ANDQ R10, R14
1335	XORQ R13, R14
1336	MOVQ R14, 144(DI)
1337	XORQ R11, R15
1338
1339	// Result s
1340	MOVQ 16(SP), R10
1341	MOVQ 64(SP), R11
1342	MOVQ 112(SP), R12
1343	XORQ DX, R10
1344	MOVQ 120(SP), R13
1345	ROLQ $0x3e, R10
1346	XORQ R8, R11
1347	MOVQ 168(SP), R14
1348	ROLQ $0x37, R11
1349	XORQ R9, R12
1350	MOVQ R10, R9
1351	XORQ CX, R14
1352	ROLQ $0x02, R14
1353	ANDQ R11, R9
1354	XORQ R14, R9
1355	MOVQ R9, 192(DI)
1356	ROLQ $0x27, R12
1357	XORQ R9, R15
1358	NOTQ R11
1359	XORQ BX, R13
1360	MOVQ R11, BX
1361	ANDQ R12, BX
1362	XORQ R10, BX
1363	MOVQ BX, 160(DI)
1364	XORQ BX, SI
1365	ROLQ $0x29, R13
1366	MOVQ R12, CX
1367	ORQ  R13, CX
1368	XORQ R11, CX
1369	MOVQ CX, 168(DI)
1370	XORQ CX, BP
1371	MOVQ R13, DX
1372	MOVQ R14, R8
1373	ANDQ R14, DX
1374	ORQ  R10, R8
1375	XORQ R12, DX
1376	XORQ R13, R8
1377	MOVQ DX, 176(DI)
1378	MOVQ R8, 184(DI)
1379
1380	// Prepare round
1381	MOVQ BP, BX
1382	ROLQ $0x01, BX
1383	MOVQ 16(DI), R12
1384	XORQ 56(DI), DX
1385	XORQ R15, BX
1386	XORQ 96(DI), R12
1387	XORQ 136(DI), DX
1388	XORQ DX, R12
1389	MOVQ R12, CX
1390	ROLQ $0x01, CX
1391	MOVQ 24(DI), R13
1392	XORQ 64(DI), R8
1393	XORQ SI, CX
1394	XORQ 104(DI), R13
1395	XORQ 144(DI), R8
1396	XORQ R8, R13
1397	MOVQ R13, DX
1398	ROLQ $0x01, DX
1399	MOVQ R15, R8
1400	XORQ BP, DX
1401	ROLQ $0x01, R8
1402	MOVQ SI, R9
1403	XORQ R12, R8
1404	ROLQ $0x01, R9
1405
1406	// Result b
1407	MOVQ (DI), R10
1408	MOVQ 48(DI), R11
1409	XORQ R13, R9
1410	MOVQ 96(DI), R12
1411	MOVQ 144(DI), R13
1412	MOVQ 192(DI), R14
1413	XORQ CX, R11
1414	ROLQ $0x2c, R11
1415	XORQ DX, R12
1416	XORQ BX, R10
1417	ROLQ $0x2b, R12
1418	MOVQ R11, SI
1419	MOVQ $0x8000000080008081, AX
1420	ORQ  R12, SI
1421	XORQ R10, AX
1422	XORQ AX, SI
1423	MOVQ SI, (SP)
1424	XORQ R9, R14
1425	ROLQ $0x0e, R14
1426	MOVQ R10, R15
1427	ANDQ R11, R15
1428	XORQ R14, R15
1429	MOVQ R15, 32(SP)
1430	XORQ R8, R13
1431	ROLQ $0x15, R13
1432	MOVQ R13, AX
1433	ANDQ R14, AX
1434	XORQ R12, AX
1435	MOVQ AX, 16(SP)
1436	NOTQ R12
1437	ORQ  R10, R14
1438	ORQ  R13, R12
1439	XORQ R13, R14
1440	XORQ R11, R12
1441	MOVQ R14, 24(SP)
1442	MOVQ R12, 8(SP)
1443	MOVQ R12, BP
1444
1445	// Result g
1446	MOVQ 72(DI), R11
1447	XORQ R9, R11
1448	MOVQ 80(DI), R12
1449	ROLQ $0x14, R11
1450	XORQ BX, R12
1451	ROLQ $0x03, R12
1452	MOVQ 24(DI), R10
1453	MOVQ R11, AX
1454	ORQ  R12, AX
1455	XORQ R8, R10
1456	MOVQ 128(DI), R13
1457	MOVQ 176(DI), R14
1458	ROLQ $0x1c, R10
1459	XORQ R10, AX
1460	MOVQ AX, 40(SP)
1461	XORQ AX, SI
1462	XORQ CX, R13
1463	ROLQ $0x2d, R13
1464	MOVQ R12, AX
1465	ANDQ R13, AX
1466	XORQ R11, AX
1467	MOVQ AX, 48(SP)
1468	XORQ AX, BP
1469	XORQ DX, R14
1470	ROLQ $0x3d, R14
1471	MOVQ R14, AX
1472	ORQ  R10, AX
1473	XORQ R13, AX
1474	MOVQ AX, 64(SP)
1475	ANDQ R11, R10
1476	XORQ R14, R10
1477	MOVQ R10, 72(SP)
1478	NOTQ R14
1479	XORQ R10, R15
1480	ORQ  R14, R13
1481	XORQ R12, R13
1482	MOVQ R13, 56(SP)
1483
1484	// Result k
1485	MOVQ 8(DI), R10
1486	MOVQ 56(DI), R11
1487	MOVQ 104(DI), R12
1488	MOVQ 152(DI), R13
1489	MOVQ 160(DI), R14
1490	XORQ DX, R11
1491	ROLQ $0x06, R11
1492	XORQ R8, R12
1493	ROLQ $0x19, R12
1494	MOVQ R11, AX
1495	ORQ  R12, AX
1496	XORQ CX, R10
1497	ROLQ $0x01, R10
1498	XORQ R10, AX
1499	MOVQ AX, 80(SP)
1500	XORQ AX, SI
1501	XORQ R9, R13
1502	ROLQ $0x08, R13
1503	MOVQ R12, AX
1504	ANDQ R13, AX
1505	XORQ R11, AX
1506	MOVQ AX, 88(SP)
1507	XORQ AX, BP
1508	XORQ BX, R14
1509	ROLQ $0x12, R14
1510	NOTQ R13
1511	MOVQ R13, AX
1512	ANDQ R14, AX
1513	XORQ R12, AX
1514	MOVQ AX, 96(SP)
1515	MOVQ R14, AX
1516	ORQ  R10, AX
1517	XORQ R13, AX
1518	MOVQ AX, 104(SP)
1519	ANDQ R11, R10
1520	XORQ R14, R10
1521	MOVQ R10, 112(SP)
1522	XORQ R10, R15
1523
1524	// Result m
1525	MOVQ 40(DI), R11
1526	XORQ BX, R11
1527	MOVQ 88(DI), R12
1528	ROLQ $0x24, R11
1529	XORQ CX, R12
1530	MOVQ 32(DI), R10
1531	ROLQ $0x0a, R12
1532	MOVQ R11, AX
1533	MOVQ 136(DI), R13
1534	ANDQ R12, AX
1535	XORQ R9, R10
1536	MOVQ 184(DI), R14
1537	ROLQ $0x1b, R10
1538	XORQ R10, AX
1539	MOVQ AX, 120(SP)
1540	XORQ AX, SI
1541	XORQ DX, R13
1542	ROLQ $0x0f, R13
1543	MOVQ R12, AX
1544	ORQ  R13, AX
1545	XORQ R11, AX
1546	MOVQ AX, 128(SP)
1547	XORQ AX, BP
1548	XORQ R8, R14
1549	ROLQ $0x38, R14
1550	NOTQ R13
1551	MOVQ R13, AX
1552	ORQ  R14, AX
1553	XORQ R12, AX
1554	MOVQ AX, 136(SP)
1555	ORQ  R10, R11
1556	XORQ R14, R11
1557	MOVQ R11, 152(SP)
1558	ANDQ R10, R14
1559	XORQ R13, R14
1560	MOVQ R14, 144(SP)
1561	XORQ R11, R15
1562
1563	// Result s
1564	MOVQ 16(DI), R10
1565	MOVQ 64(DI), R11
1566	MOVQ 112(DI), R12
1567	XORQ DX, R10
1568	MOVQ 120(DI), R13
1569	ROLQ $0x3e, R10
1570	XORQ R8, R11
1571	MOVQ 168(DI), R14
1572	ROLQ $0x37, R11
1573	XORQ R9, R12
1574	MOVQ R10, R9
1575	XORQ CX, R14
1576	ROLQ $0x02, R14
1577	ANDQ R11, R9
1578	XORQ R14, R9
1579	MOVQ R9, 192(SP)
1580	ROLQ $0x27, R12
1581	XORQ R9, R15
1582	NOTQ R11
1583	XORQ BX, R13
1584	MOVQ R11, BX
1585	ANDQ R12, BX
1586	XORQ R10, BX
1587	MOVQ BX, 160(SP)
1588	XORQ BX, SI
1589	ROLQ $0x29, R13
1590	MOVQ R12, CX
1591	ORQ  R13, CX
1592	XORQ R11, CX
1593	MOVQ CX, 168(SP)
1594	XORQ CX, BP
1595	MOVQ R13, DX
1596	MOVQ R14, R8
1597	ANDQ R14, DX
1598	ORQ  R10, R8
1599	XORQ R12, DX
1600	XORQ R13, R8
1601	MOVQ DX, 176(SP)
1602	MOVQ R8, 184(SP)
1603
1604	// Prepare round
1605	MOVQ BP, BX
1606	ROLQ $0x01, BX
1607	MOVQ 16(SP), R12
1608	XORQ 56(SP), DX
1609	XORQ R15, BX
1610	XORQ 96(SP), R12
1611	XORQ 136(SP), DX
1612	XORQ DX, R12
1613	MOVQ R12, CX
1614	ROLQ $0x01, CX
1615	MOVQ 24(SP), R13
1616	XORQ 64(SP), R8
1617	XORQ SI, CX
1618	XORQ 104(SP), R13
1619	XORQ 144(SP), R8
1620	XORQ R8, R13
1621	MOVQ R13, DX
1622	ROLQ $0x01, DX
1623	MOVQ R15, R8
1624	XORQ BP, DX
1625	ROLQ $0x01, R8
1626	MOVQ SI, R9
1627	XORQ R12, R8
1628	ROLQ $0x01, R9
1629
1630	// Result b
1631	MOVQ (SP), R10
1632	MOVQ 48(SP), R11
1633	XORQ R13, R9
1634	MOVQ 96(SP), R12
1635	MOVQ 144(SP), R13
1636	MOVQ 192(SP), R14
1637	XORQ CX, R11
1638	ROLQ $0x2c, R11
1639	XORQ DX, R12
1640	XORQ BX, R10
1641	ROLQ $0x2b, R12
1642	MOVQ R11, SI
1643	MOVQ $0x8000000000008009, AX
1644	ORQ  R12, SI
1645	XORQ R10, AX
1646	XORQ AX, SI
1647	MOVQ SI, (DI)
1648	XORQ R9, R14
1649	ROLQ $0x0e, R14
1650	MOVQ R10, R15
1651	ANDQ R11, R15
1652	XORQ R14, R15
1653	MOVQ R15, 32(DI)
1654	XORQ R8, R13
1655	ROLQ $0x15, R13
1656	MOVQ R13, AX
1657	ANDQ R14, AX
1658	XORQ R12, AX
1659	MOVQ AX, 16(DI)
1660	NOTQ R12
1661	ORQ  R10, R14
1662	ORQ  R13, R12
1663	XORQ R13, R14
1664	XORQ R11, R12
1665	MOVQ R14, 24(DI)
1666	MOVQ R12, 8(DI)
1667	MOVQ R12, BP
1668
1669	// Result g
1670	MOVQ 72(SP), R11
1671	XORQ R9, R11
1672	MOVQ 80(SP), R12
1673	ROLQ $0x14, R11
1674	XORQ BX, R12
1675	ROLQ $0x03, R12
1676	MOVQ 24(SP), R10
1677	MOVQ R11, AX
1678	ORQ  R12, AX
1679	XORQ R8, R10
1680	MOVQ 128(SP), R13
1681	MOVQ 176(SP), R14
1682	ROLQ $0x1c, R10
1683	XORQ R10, AX
1684	MOVQ AX, 40(DI)
1685	XORQ AX, SI
1686	XORQ CX, R13
1687	ROLQ $0x2d, R13
1688	MOVQ R12, AX
1689	ANDQ R13, AX
1690	XORQ R11, AX
1691	MOVQ AX, 48(DI)
1692	XORQ AX, BP
1693	XORQ DX, R14
1694	ROLQ $0x3d, R14
1695	MOVQ R14, AX
1696	ORQ  R10, AX
1697	XORQ R13, AX
1698	MOVQ AX, 64(DI)
1699	ANDQ R11, R10
1700	XORQ R14, R10
1701	MOVQ R10, 72(DI)
1702	NOTQ R14
1703	XORQ R10, R15
1704	ORQ  R14, R13
1705	XORQ R12, R13
1706	MOVQ R13, 56(DI)
1707
1708	// Result k
1709	MOVQ 8(SP), R10
1710	MOVQ 56(SP), R11
1711	MOVQ 104(SP), R12
1712	MOVQ 152(SP), R13
1713	MOVQ 160(SP), R14
1714	XORQ DX, R11
1715	ROLQ $0x06, R11
1716	XORQ R8, R12
1717	ROLQ $0x19, R12
1718	MOVQ R11, AX
1719	ORQ  R12, AX
1720	XORQ CX, R10
1721	ROLQ $0x01, R10
1722	XORQ R10, AX
1723	MOVQ AX, 80(DI)
1724	XORQ AX, SI
1725	XORQ R9, R13
1726	ROLQ $0x08, R13
1727	MOVQ R12, AX
1728	ANDQ R13, AX
1729	XORQ R11, AX
1730	MOVQ AX, 88(DI)
1731	XORQ AX, BP
1732	XORQ BX, R14
1733	ROLQ $0x12, R14
1734	NOTQ R13
1735	MOVQ R13, AX
1736	ANDQ R14, AX
1737	XORQ R12, AX
1738	MOVQ AX, 96(DI)
1739	MOVQ R14, AX
1740	ORQ  R10, AX
1741	XORQ R13, AX
1742	MOVQ AX, 104(DI)
1743	ANDQ R11, R10
1744	XORQ R14, R10
1745	MOVQ R10, 112(DI)
1746	XORQ R10, R15
1747
1748	// Result m
1749	MOVQ 40(SP), R11
1750	XORQ BX, R11
1751	MOVQ 88(SP), R12
1752	ROLQ $0x24, R11
1753	XORQ CX, R12
1754	MOVQ 32(SP), R10
1755	ROLQ $0x0a, R12
1756	MOVQ R11, AX
1757	MOVQ 136(SP), R13
1758	ANDQ R12, AX
1759	XORQ R9, R10
1760	MOVQ 184(SP), R14
1761	ROLQ $0x1b, R10
1762	XORQ R10, AX
1763	MOVQ AX, 120(DI)
1764	XORQ AX, SI
1765	XORQ DX, R13
1766	ROLQ $0x0f, R13
1767	MOVQ R12, AX
1768	ORQ  R13, AX
1769	XORQ R11, AX
1770	MOVQ AX, 128(DI)
1771	XORQ AX, BP
1772	XORQ R8, R14
1773	ROLQ $0x38, R14
1774	NOTQ R13
1775	MOVQ R13, AX
1776	ORQ  R14, AX
1777	XORQ R12, AX
1778	MOVQ AX, 136(DI)
1779	ORQ  R10, R11
1780	XORQ R14, R11
1781	MOVQ R11, 152(DI)
1782	ANDQ R10, R14
1783	XORQ R13, R14
1784	MOVQ R14, 144(DI)
1785	XORQ R11, R15
1786
1787	// Result s
1788	MOVQ 16(SP), R10
1789	MOVQ 64(SP), R11
1790	MOVQ 112(SP), R12
1791	XORQ DX, R10
1792	MOVQ 120(SP), R13
1793	ROLQ $0x3e, R10
1794	XORQ R8, R11
1795	MOVQ 168(SP), R14
1796	ROLQ $0x37, R11
1797	XORQ R9, R12
1798	MOVQ R10, R9
1799	XORQ CX, R14
1800	ROLQ $0x02, R14
1801	ANDQ R11, R9
1802	XORQ R14, R9
1803	MOVQ R9, 192(DI)
1804	ROLQ $0x27, R12
1805	XORQ R9, R15
1806	NOTQ R11
1807	XORQ BX, R13
1808	MOVQ R11, BX
1809	ANDQ R12, BX
1810	XORQ R10, BX
1811	MOVQ BX, 160(DI)
1812	XORQ BX, SI
1813	ROLQ $0x29, R13
1814	MOVQ R12, CX
1815	ORQ  R13, CX
1816	XORQ R11, CX
1817	MOVQ CX, 168(DI)
1818	XORQ CX, BP
1819	MOVQ R13, DX
1820	MOVQ R14, R8
1821	ANDQ R14, DX
1822	ORQ  R10, R8
1823	XORQ R12, DX
1824	XORQ R13, R8
1825	MOVQ DX, 176(DI)
1826	MOVQ R8, 184(DI)
1827
1828	// Prepare round
1829	MOVQ BP, BX
1830	ROLQ $0x01, BX
1831	MOVQ 16(DI), R12
1832	XORQ 56(DI), DX
1833	XORQ R15, BX
1834	XORQ 96(DI), R12
1835	XORQ 136(DI), DX
1836	XORQ DX, R12
1837	MOVQ R12, CX
1838	ROLQ $0x01, CX
1839	MOVQ 24(DI), R13
1840	XORQ 64(DI), R8
1841	XORQ SI, CX
1842	XORQ 104(DI), R13
1843	XORQ 144(DI), R8
1844	XORQ R8, R13
1845	MOVQ R13, DX
1846	ROLQ $0x01, DX
1847	MOVQ R15, R8
1848	XORQ BP, DX
1849	ROLQ $0x01, R8
1850	MOVQ SI, R9
1851	XORQ R12, R8
1852	ROLQ $0x01, R9
1853
1854	// Result b
1855	MOVQ (DI), R10
1856	MOVQ 48(DI), R11
1857	XORQ R13, R9
1858	MOVQ 96(DI), R12
1859	MOVQ 144(DI), R13
1860	MOVQ 192(DI), R14
1861	XORQ CX, R11
1862	ROLQ $0x2c, R11
1863	XORQ DX, R12
1864	XORQ BX, R10
1865	ROLQ $0x2b, R12
1866	MOVQ R11, SI
1867	MOVQ $0x000000000000008a, AX
1868	ORQ  R12, SI
1869	XORQ R10, AX
1870	XORQ AX, SI
1871	MOVQ SI, (SP)
1872	XORQ R9, R14
1873	ROLQ $0x0e, R14
1874	MOVQ R10, R15
1875	ANDQ R11, R15
1876	XORQ R14, R15
1877	MOVQ R15, 32(SP)
1878	XORQ R8, R13
1879	ROLQ $0x15, R13
1880	MOVQ R13, AX
1881	ANDQ R14, AX
1882	XORQ R12, AX
1883	MOVQ AX, 16(SP)
1884	NOTQ R12
1885	ORQ  R10, R14
1886	ORQ  R13, R12
1887	XORQ R13, R14
1888	XORQ R11, R12
1889	MOVQ R14, 24(SP)
1890	MOVQ R12, 8(SP)
1891	MOVQ R12, BP
1892
1893	// Result g
1894	MOVQ 72(DI), R11
1895	XORQ R9, R11
1896	MOVQ 80(DI), R12
1897	ROLQ $0x14, R11
1898	XORQ BX, R12
1899	ROLQ $0x03, R12
1900	MOVQ 24(DI), R10
1901	MOVQ R11, AX
1902	ORQ  R12, AX
1903	XORQ R8, R10
1904	MOVQ 128(DI), R13
1905	MOVQ 176(DI), R14
1906	ROLQ $0x1c, R10
1907	XORQ R10, AX
1908	MOVQ AX, 40(SP)
1909	XORQ AX, SI
1910	XORQ CX, R13
1911	ROLQ $0x2d, R13
1912	MOVQ R12, AX
1913	ANDQ R13, AX
1914	XORQ R11, AX
1915	MOVQ AX, 48(SP)
1916	XORQ AX, BP
1917	XORQ DX, R14
1918	ROLQ $0x3d, R14
1919	MOVQ R14, AX
1920	ORQ  R10, AX
1921	XORQ R13, AX
1922	MOVQ AX, 64(SP)
1923	ANDQ R11, R10
1924	XORQ R14, R10
1925	MOVQ R10, 72(SP)
1926	NOTQ R14
1927	XORQ R10, R15
1928	ORQ  R14, R13
1929	XORQ R12, R13
1930	MOVQ R13, 56(SP)
1931
1932	// Result k
1933	MOVQ 8(DI), R10
1934	MOVQ 56(DI), R11
1935	MOVQ 104(DI), R12
1936	MOVQ 152(DI), R13
1937	MOVQ 160(DI), R14
1938	XORQ DX, R11
1939	ROLQ $0x06, R11
1940	XORQ R8, R12
1941	ROLQ $0x19, R12
1942	MOVQ R11, AX
1943	ORQ  R12, AX
1944	XORQ CX, R10
1945	ROLQ $0x01, R10
1946	XORQ R10, AX
1947	MOVQ AX, 80(SP)
1948	XORQ AX, SI
1949	XORQ R9, R13
1950	ROLQ $0x08, R13
1951	MOVQ R12, AX
1952	ANDQ R13, AX
1953	XORQ R11, AX
1954	MOVQ AX, 88(SP)
1955	XORQ AX, BP
1956	XORQ BX, R14
1957	ROLQ $0x12, R14
1958	NOTQ R13
1959	MOVQ R13, AX
1960	ANDQ R14, AX
1961	XORQ R12, AX
1962	MOVQ AX, 96(SP)
1963	MOVQ R14, AX
1964	ORQ  R10, AX
1965	XORQ R13, AX
1966	MOVQ AX, 104(SP)
1967	ANDQ R11, R10
1968	XORQ R14, R10
1969	MOVQ R10, 112(SP)
1970	XORQ R10, R15
1971
1972	// Result m
1973	MOVQ 40(DI), R11
1974	XORQ BX, R11
1975	MOVQ 88(DI), R12
1976	ROLQ $0x24, R11
1977	XORQ CX, R12
1978	MOVQ 32(DI), R10
1979	ROLQ $0x0a, R12
1980	MOVQ R11, AX
1981	MOVQ 136(DI), R13
1982	ANDQ R12, AX
1983	XORQ R9, R10
1984	MOVQ 184(DI), R14
1985	ROLQ $0x1b, R10
1986	XORQ R10, AX
1987	MOVQ AX, 120(SP)
1988	XORQ AX, SI
1989	XORQ DX, R13
1990	ROLQ $0x0f, R13
1991	MOVQ R12, AX
1992	ORQ  R13, AX
1993	XORQ R11, AX
1994	MOVQ AX, 128(SP)
1995	XORQ AX, BP
1996	XORQ R8, R14
1997	ROLQ $0x38, R14
1998	NOTQ R13
1999	MOVQ R13, AX
2000	ORQ  R14, AX
2001	XORQ R12, AX
2002	MOVQ AX, 136(SP)
2003	ORQ  R10, R11
2004	XORQ R14, R11
2005	MOVQ R11, 152(SP)
2006	ANDQ R10, R14
2007	XORQ R13, R14
2008	MOVQ R14, 144(SP)
2009	XORQ R11, R15
2010
2011	// Result s
2012	MOVQ 16(DI), R10
2013	MOVQ 64(DI), R11
2014	MOVQ 112(DI), R12
2015	XORQ DX, R10
2016	MOVQ 120(DI), R13
2017	ROLQ $0x3e, R10
2018	XORQ R8, R11
2019	MOVQ 168(DI), R14
2020	ROLQ $0x37, R11
2021	XORQ R9, R12
2022	MOVQ R10, R9
2023	XORQ CX, R14
2024	ROLQ $0x02, R14
2025	ANDQ R11, R9
2026	XORQ R14, R9
2027	MOVQ R9, 192(SP)
2028	ROLQ $0x27, R12
2029	XORQ R9, R15
2030	NOTQ R11
2031	XORQ BX, R13
2032	MOVQ R11, BX
2033	ANDQ R12, BX
2034	XORQ R10, BX
2035	MOVQ BX, 160(SP)
2036	XORQ BX, SI
2037	ROLQ $0x29, R13
2038	MOVQ R12, CX
2039	ORQ  R13, CX
2040	XORQ R11, CX
2041	MOVQ CX, 168(SP)
2042	XORQ CX, BP
2043	MOVQ R13, DX
2044	MOVQ R14, R8
2045	ANDQ R14, DX
2046	ORQ  R10, R8
2047	XORQ R12, DX
2048	XORQ R13, R8
2049	MOVQ DX, 176(SP)
2050	MOVQ R8, 184(SP)
2051
2052	// Prepare round
2053	MOVQ BP, BX
2054	ROLQ $0x01, BX
2055	MOVQ 16(SP), R12
2056	XORQ 56(SP), DX
2057	XORQ R15, BX
2058	XORQ 96(SP), R12
2059	XORQ 136(SP), DX
2060	XORQ DX, R12
2061	MOVQ R12, CX
2062	ROLQ $0x01, CX
2063	MOVQ 24(SP), R13
2064	XORQ 64(SP), R8
2065	XORQ SI, CX
2066	XORQ 104(SP), R13
2067	XORQ 144(SP), R8
2068	XORQ R8, R13
2069	MOVQ R13, DX
2070	ROLQ $0x01, DX
2071	MOVQ R15, R8
2072	XORQ BP, DX
2073	ROLQ $0x01, R8
2074	MOVQ SI, R9
2075	XORQ R12, R8
2076	ROLQ $0x01, R9
2077
2078	// Result b
2079	MOVQ (SP), R10
2080	MOVQ 48(SP), R11
2081	XORQ R13, R9
2082	MOVQ 96(SP), R12
2083	MOVQ 144(SP), R13
2084	MOVQ 192(SP), R14
2085	XORQ CX, R11
2086	ROLQ $0x2c, R11
2087	XORQ DX, R12
2088	XORQ BX, R10
2089	ROLQ $0x2b, R12
2090	MOVQ R11, SI
2091	MOVQ $0x0000000000000088, AX
2092	ORQ  R12, SI
2093	XORQ R10, AX
2094	XORQ AX, SI
2095	MOVQ SI, (DI)
2096	XORQ R9, R14
2097	ROLQ $0x0e, R14
2098	MOVQ R10, R15
2099	ANDQ R11, R15
2100	XORQ R14, R15
2101	MOVQ R15, 32(DI)
2102	XORQ R8, R13
2103	ROLQ $0x15, R13
2104	MOVQ R13, AX
2105	ANDQ R14, AX
2106	XORQ R12, AX
2107	MOVQ AX, 16(DI)
2108	NOTQ R12
2109	ORQ  R10, R14
2110	ORQ  R13, R12
2111	XORQ R13, R14
2112	XORQ R11, R12
2113	MOVQ R14, 24(DI)
2114	MOVQ R12, 8(DI)
2115	MOVQ R12, BP
2116
2117	// Result g
2118	MOVQ 72(SP), R11
2119	XORQ R9, R11
2120	MOVQ 80(SP), R12
2121	ROLQ $0x14, R11
2122	XORQ BX, R12
2123	ROLQ $0x03, R12
2124	MOVQ 24(SP), R10
2125	MOVQ R11, AX
2126	ORQ  R12, AX
2127	XORQ R8, R10
2128	MOVQ 128(SP), R13
2129	MOVQ 176(SP), R14
2130	ROLQ $0x1c, R10
2131	XORQ R10, AX
2132	MOVQ AX, 40(DI)
2133	XORQ AX, SI
2134	XORQ CX, R13
2135	ROLQ $0x2d, R13
2136	MOVQ R12, AX
2137	ANDQ R13, AX
2138	XORQ R11, AX
2139	MOVQ AX, 48(DI)
2140	XORQ AX, BP
2141	XORQ DX, R14
2142	ROLQ $0x3d, R14
2143	MOVQ R14, AX
2144	ORQ  R10, AX
2145	XORQ R13, AX
2146	MOVQ AX, 64(DI)
2147	ANDQ R11, R10
2148	XORQ R14, R10
2149	MOVQ R10, 72(DI)
2150	NOTQ R14
2151	XORQ R10, R15
2152	ORQ  R14, R13
2153	XORQ R12, R13
2154	MOVQ R13, 56(DI)
2155
2156	// Result k
2157	MOVQ 8(SP), R10
2158	MOVQ 56(SP), R11
2159	MOVQ 104(SP), R12
2160	MOVQ 152(SP), R13
2161	MOVQ 160(SP), R14
2162	XORQ DX, R11
2163	ROLQ $0x06, R11
2164	XORQ R8, R12
2165	ROLQ $0x19, R12
2166	MOVQ R11, AX
2167	ORQ  R12, AX
2168	XORQ CX, R10
2169	ROLQ $0x01, R10
2170	XORQ R10, AX
2171	MOVQ AX, 80(DI)
2172	XORQ AX, SI
2173	XORQ R9, R13
2174	ROLQ $0x08, R13
2175	MOVQ R12, AX
2176	ANDQ R13, AX
2177	XORQ R11, AX
2178	MOVQ AX, 88(DI)
2179	XORQ AX, BP
2180	XORQ BX, R14
2181	ROLQ $0x12, R14
2182	NOTQ R13
2183	MOVQ R13, AX
2184	ANDQ R14, AX
2185	XORQ R12, AX
2186	MOVQ AX, 96(DI)
2187	MOVQ R14, AX
2188	ORQ  R10, AX
2189	XORQ R13, AX
2190	MOVQ AX, 104(DI)
2191	ANDQ R11, R10
2192	XORQ R14, R10
2193	MOVQ R10, 112(DI)
2194	XORQ R10, R15
2195
2196	// Result m
2197	MOVQ 40(SP), R11
2198	XORQ BX, R11
2199	MOVQ 88(SP), R12
2200	ROLQ $0x24, R11
2201	XORQ CX, R12
2202	MOVQ 32(SP), R10
2203	ROLQ $0x0a, R12
2204	MOVQ R11, AX
2205	MOVQ 136(SP), R13
2206	ANDQ R12, AX
2207	XORQ R9, R10
2208	MOVQ 184(SP), R14
2209	ROLQ $0x1b, R10
2210	XORQ R10, AX
2211	MOVQ AX, 120(DI)
2212	XORQ AX, SI
2213	XORQ DX, R13
2214	ROLQ $0x0f, R13
2215	MOVQ R12, AX
2216	ORQ  R13, AX
2217	XORQ R11, AX
2218	MOVQ AX, 128(DI)
2219	XORQ AX, BP
2220	XORQ R8, R14
2221	ROLQ $0x38, R14
2222	NOTQ R13
2223	MOVQ R13, AX
2224	ORQ  R14, AX
2225	XORQ R12, AX
2226	MOVQ AX, 136(DI)
2227	ORQ  R10, R11
2228	XORQ R14, R11
2229	MOVQ R11, 152(DI)
2230	ANDQ R10, R14
2231	XORQ R13, R14
2232	MOVQ R14, 144(DI)
2233	XORQ R11, R15
2234
2235	// Result s
2236	MOVQ 16(SP), R10
2237	MOVQ 64(SP), R11
2238	MOVQ 112(SP), R12
2239	XORQ DX, R10
2240	MOVQ 120(SP), R13
2241	ROLQ $0x3e, R10
2242	XORQ R8, R11
2243	MOVQ 168(SP), R14
2244	ROLQ $0x37, R11
2245	XORQ R9, R12
2246	MOVQ R10, R9
2247	XORQ CX, R14
2248	ROLQ $0x02, R14
2249	ANDQ R11, R9
2250	XORQ R14, R9
2251	MOVQ R9, 192(DI)
2252	ROLQ $0x27, R12
2253	XORQ R9, R15
2254	NOTQ R11
2255	XORQ BX, R13
2256	MOVQ R11, BX
2257	ANDQ R12, BX
2258	XORQ R10, BX
2259	MOVQ BX, 160(DI)
2260	XORQ BX, SI
2261	ROLQ $0x29, R13
2262	MOVQ R12, CX
2263	ORQ  R13, CX
2264	XORQ R11, CX
2265	MOVQ CX, 168(DI)
2266	XORQ CX, BP
2267	MOVQ R13, DX
2268	MOVQ R14, R8
2269	ANDQ R14, DX
2270	ORQ  R10, R8
2271	XORQ R12, DX
2272	XORQ R13, R8
2273	MOVQ DX, 176(DI)
2274	MOVQ R8, 184(DI)
2275
2276	// Prepare round
2277	MOVQ BP, BX
2278	ROLQ $0x01, BX
2279	MOVQ 16(DI), R12
2280	XORQ 56(DI), DX
2281	XORQ R15, BX
2282	XORQ 96(DI), R12
2283	XORQ 136(DI), DX
2284	XORQ DX, R12
2285	MOVQ R12, CX
2286	ROLQ $0x01, CX
2287	MOVQ 24(DI), R13
2288	XORQ 64(DI), R8
2289	XORQ SI, CX
2290	XORQ 104(DI), R13
2291	XORQ 144(DI), R8
2292	XORQ R8, R13
2293	MOVQ R13, DX
2294	ROLQ $0x01, DX
2295	MOVQ R15, R8
2296	XORQ BP, DX
2297	ROLQ $0x01, R8
2298	MOVQ SI, R9
2299	XORQ R12, R8
2300	ROLQ $0x01, R9
2301
2302	// Result b
2303	MOVQ (DI), R10
2304	MOVQ 48(DI), R11
2305	XORQ R13, R9
2306	MOVQ 96(DI), R12
2307	MOVQ 144(DI), R13
2308	MOVQ 192(DI), R14
2309	XORQ CX, R11
2310	ROLQ $0x2c, R11
2311	XORQ DX, R12
2312	XORQ BX, R10
2313	ROLQ $0x2b, R12
2314	MOVQ R11, SI
2315	MOVQ $0x0000000080008009, AX
2316	ORQ  R12, SI
2317	XORQ R10, AX
2318	XORQ AX, SI
2319	MOVQ SI, (SP)
2320	XORQ R9, R14
2321	ROLQ $0x0e, R14
2322	MOVQ R10, R15
2323	ANDQ R11, R15
2324	XORQ R14, R15
2325	MOVQ R15, 32(SP)
2326	XORQ R8, R13
2327	ROLQ $0x15, R13
2328	MOVQ R13, AX
2329	ANDQ R14, AX
2330	XORQ R12, AX
2331	MOVQ AX, 16(SP)
2332	NOTQ R12
2333	ORQ  R10, R14
2334	ORQ  R13, R12
2335	XORQ R13, R14
2336	XORQ R11, R12
2337	MOVQ R14, 24(SP)
2338	MOVQ R12, 8(SP)
2339	MOVQ R12, BP
2340
2341	// Result g
2342	MOVQ 72(DI), R11
2343	XORQ R9, R11
2344	MOVQ 80(DI), R12
2345	ROLQ $0x14, R11
2346	XORQ BX, R12
2347	ROLQ $0x03, R12
2348	MOVQ 24(DI), R10
2349	MOVQ R11, AX
2350	ORQ  R12, AX
2351	XORQ R8, R10
2352	MOVQ 128(DI), R13
2353	MOVQ 176(DI), R14
2354	ROLQ $0x1c, R10
2355	XORQ R10, AX
2356	MOVQ AX, 40(SP)
2357	XORQ AX, SI
2358	XORQ CX, R13
2359	ROLQ $0x2d, R13
2360	MOVQ R12, AX
2361	ANDQ R13, AX
2362	XORQ R11, AX
2363	MOVQ AX, 48(SP)
2364	XORQ AX, BP
2365	XORQ DX, R14
2366	ROLQ $0x3d, R14
2367	MOVQ R14, AX
2368	ORQ  R10, AX
2369	XORQ R13, AX
2370	MOVQ AX, 64(SP)
2371	ANDQ R11, R10
2372	XORQ R14, R10
2373	MOVQ R10, 72(SP)
2374	NOTQ R14
2375	XORQ R10, R15
2376	ORQ  R14, R13
2377	XORQ R12, R13
2378	MOVQ R13, 56(SP)
2379
2380	// Result k
2381	MOVQ 8(DI), R10
2382	MOVQ 56(DI), R11
2383	MOVQ 104(DI), R12
2384	MOVQ 152(DI), R13
2385	MOVQ 160(DI), R14
2386	XORQ DX, R11
2387	ROLQ $0x06, R11
2388	XORQ R8, R12
2389	ROLQ $0x19, R12
2390	MOVQ R11, AX
2391	ORQ  R12, AX
2392	XORQ CX, R10
2393	ROLQ $0x01, R10
2394	XORQ R10, AX
2395	MOVQ AX, 80(SP)
2396	XORQ AX, SI
2397	XORQ R9, R13
2398	ROLQ $0x08, R13
2399	MOVQ R12, AX
2400	ANDQ R13, AX
2401	XORQ R11, AX
2402	MOVQ AX, 88(SP)
2403	XORQ AX, BP
2404	XORQ BX, R14
2405	ROLQ $0x12, R14
2406	NOTQ R13
2407	MOVQ R13, AX
2408	ANDQ R14, AX
2409	XORQ R12, AX
2410	MOVQ AX, 96(SP)
2411	MOVQ R14, AX
2412	ORQ  R10, AX
2413	XORQ R13, AX
2414	MOVQ AX, 104(SP)
2415	ANDQ R11, R10
2416	XORQ R14, R10
2417	MOVQ R10, 112(SP)
2418	XORQ R10, R15
2419
2420	// Result m
2421	MOVQ 40(DI), R11
2422	XORQ BX, R11
2423	MOVQ 88(DI), R12
2424	ROLQ $0x24, R11
2425	XORQ CX, R12
2426	MOVQ 32(DI), R10
2427	ROLQ $0x0a, R12
2428	MOVQ R11, AX
2429	MOVQ 136(DI), R13
2430	ANDQ R12, AX
2431	XORQ R9, R10
2432	MOVQ 184(DI), R14
2433	ROLQ $0x1b, R10
2434	XORQ R10, AX
2435	MOVQ AX, 120(SP)
2436	XORQ AX, SI
2437	XORQ DX, R13
2438	ROLQ $0x0f, R13
2439	MOVQ R12, AX
2440	ORQ  R13, AX
2441	XORQ R11, AX
2442	MOVQ AX, 128(SP)
2443	XORQ AX, BP
2444	XORQ R8, R14
2445	ROLQ $0x38, R14
2446	NOTQ R13
2447	MOVQ R13, AX
2448	ORQ  R14, AX
2449	XORQ R12, AX
2450	MOVQ AX, 136(SP)
2451	ORQ  R10, R11
2452	XORQ R14, R11
2453	MOVQ R11, 152(SP)
2454	ANDQ R10, R14
2455	XORQ R13, R14
2456	MOVQ R14, 144(SP)
2457	XORQ R11, R15
2458
2459	// Result s
2460	MOVQ 16(DI), R10
2461	MOVQ 64(DI), R11
2462	MOVQ 112(DI), R12
2463	XORQ DX, R10
2464	MOVQ 120(DI), R13
2465	ROLQ $0x3e, R10
2466	XORQ R8, R11
2467	MOVQ 168(DI), R14
2468	ROLQ $0x37, R11
2469	XORQ R9, R12
2470	MOVQ R10, R9
2471	XORQ CX, R14
2472	ROLQ $0x02, R14
2473	ANDQ R11, R9
2474	XORQ R14, R9
2475	MOVQ R9, 192(SP)
2476	ROLQ $0x27, R12
2477	XORQ R9, R15
2478	NOTQ R11
2479	XORQ BX, R13
2480	MOVQ R11, BX
2481	ANDQ R12, BX
2482	XORQ R10, BX
2483	MOVQ BX, 160(SP)
2484	XORQ BX, SI
2485	ROLQ $0x29, R13
2486	MOVQ R12, CX
2487	ORQ  R13, CX
2488	XORQ R11, CX
2489	MOVQ CX, 168(SP)
2490	XORQ CX, BP
2491	MOVQ R13, DX
2492	MOVQ R14, R8
2493	ANDQ R14, DX
2494	ORQ  R10, R8
2495	XORQ R12, DX
2496	XORQ R13, R8
2497	MOVQ DX, 176(SP)
2498	MOVQ R8, 184(SP)
2499
2500	// Prepare round
2501	MOVQ BP, BX
2502	ROLQ $0x01, BX
2503	MOVQ 16(SP), R12
2504	XORQ 56(SP), DX
2505	XORQ R15, BX
2506	XORQ 96(SP), R12
2507	XORQ 136(SP), DX
2508	XORQ DX, R12
2509	MOVQ R12, CX
2510	ROLQ $0x01, CX
2511	MOVQ 24(SP), R13
2512	XORQ 64(SP), R8
2513	XORQ SI, CX
2514	XORQ 104(SP), R13
2515	XORQ 144(SP), R8
2516	XORQ R8, R13
2517	MOVQ R13, DX
2518	ROLQ $0x01, DX
2519	MOVQ R15, R8
2520	XORQ BP, DX
2521	ROLQ $0x01, R8
2522	MOVQ SI, R9
2523	XORQ R12, R8
2524	ROLQ $0x01, R9
2525
2526	// Result b
2527	MOVQ (SP), R10
2528	MOVQ 48(SP), R11
2529	XORQ R13, R9
2530	MOVQ 96(SP), R12
2531	MOVQ 144(SP), R13
2532	MOVQ 192(SP), R14
2533	XORQ CX, R11
2534	ROLQ $0x2c, R11
2535	XORQ DX, R12
2536	XORQ BX, R10
2537	ROLQ $0x2b, R12
2538	MOVQ R11, SI
2539	MOVQ $0x000000008000000a, AX
2540	ORQ  R12, SI
2541	XORQ R10, AX
2542	XORQ AX, SI
2543	MOVQ SI, (DI)
2544	XORQ R9, R14
2545	ROLQ $0x0e, R14
2546	MOVQ R10, R15
2547	ANDQ R11, R15
2548	XORQ R14, R15
2549	MOVQ R15, 32(DI)
2550	XORQ R8, R13
2551	ROLQ $0x15, R13
2552	MOVQ R13, AX
2553	ANDQ R14, AX
2554	XORQ R12, AX
2555	MOVQ AX, 16(DI)
2556	NOTQ R12
2557	ORQ  R10, R14
2558	ORQ  R13, R12
2559	XORQ R13, R14
2560	XORQ R11, R12
2561	MOVQ R14, 24(DI)
2562	MOVQ R12, 8(DI)
2563	MOVQ R12, BP
2564
2565	// Result g
2566	MOVQ 72(SP), R11
2567	XORQ R9, R11
2568	MOVQ 80(SP), R12
2569	ROLQ $0x14, R11
2570	XORQ BX, R12
2571	ROLQ $0x03, R12
2572	MOVQ 24(SP), R10
2573	MOVQ R11, AX
2574	ORQ  R12, AX
2575	XORQ R8, R10
2576	MOVQ 128(SP), R13
2577	MOVQ 176(SP), R14
2578	ROLQ $0x1c, R10
2579	XORQ R10, AX
2580	MOVQ AX, 40(DI)
2581	XORQ AX, SI
2582	XORQ CX, R13
2583	ROLQ $0x2d, R13
2584	MOVQ R12, AX
2585	ANDQ R13, AX
2586	XORQ R11, AX
2587	MOVQ AX, 48(DI)
2588	XORQ AX, BP
2589	XORQ DX, R14
2590	ROLQ $0x3d, R14
2591	MOVQ R14, AX
2592	ORQ  R10, AX
2593	XORQ R13, AX
2594	MOVQ AX, 64(DI)
2595	ANDQ R11, R10
2596	XORQ R14, R10
2597	MOVQ R10, 72(DI)
2598	NOTQ R14
2599	XORQ R10, R15
2600	ORQ  R14, R13
2601	XORQ R12, R13
2602	MOVQ R13, 56(DI)
2603
2604	// Result k
2605	MOVQ 8(SP), R10
2606	MOVQ 56(SP), R11
2607	MOVQ 104(SP), R12
2608	MOVQ 152(SP), R13
2609	MOVQ 160(SP), R14
2610	XORQ DX, R11
2611	ROLQ $0x06, R11
2612	XORQ R8, R12
2613	ROLQ $0x19, R12
2614	MOVQ R11, AX
2615	ORQ  R12, AX
2616	XORQ CX, R10
2617	ROLQ $0x01, R10
2618	XORQ R10, AX
2619	MOVQ AX, 80(DI)
2620	XORQ AX, SI
2621	XORQ R9, R13
2622	ROLQ $0x08, R13
2623	MOVQ R12, AX
2624	ANDQ R13, AX
2625	XORQ R11, AX
2626	MOVQ AX, 88(DI)
2627	XORQ AX, BP
2628	XORQ BX, R14
2629	ROLQ $0x12, R14
2630	NOTQ R13
2631	MOVQ R13, AX
2632	ANDQ R14, AX
2633	XORQ R12, AX
2634	MOVQ AX, 96(DI)
2635	MOVQ R14, AX
2636	ORQ  R10, AX
2637	XORQ R13, AX
2638	MOVQ AX, 104(DI)
2639	ANDQ R11, R10
2640	XORQ R14, R10
2641	MOVQ R10, 112(DI)
2642	XORQ R10, R15
2643
2644	// Result m
2645	MOVQ 40(SP), R11
2646	XORQ BX, R11
2647	MOVQ 88(SP), R12
2648	ROLQ $0x24, R11
2649	XORQ CX, R12
2650	MOVQ 32(SP), R10
2651	ROLQ $0x0a, R12
2652	MOVQ R11, AX
2653	MOVQ 136(SP), R13
2654	ANDQ R12, AX
2655	XORQ R9, R10
2656	MOVQ 184(SP), R14
2657	ROLQ $0x1b, R10
2658	XORQ R10, AX
2659	MOVQ AX, 120(DI)
2660	XORQ AX, SI
2661	XORQ DX, R13
2662	ROLQ $0x0f, R13
2663	MOVQ R12, AX
2664	ORQ  R13, AX
2665	XORQ R11, AX
2666	MOVQ AX, 128(DI)
2667	XORQ AX, BP
2668	XORQ R8, R14
2669	ROLQ $0x38, R14
2670	NOTQ R13
2671	MOVQ R13, AX
2672	ORQ  R14, AX
2673	XORQ R12, AX
2674	MOVQ AX, 136(DI)
2675	ORQ  R10, R11
2676	XORQ R14, R11
2677	MOVQ R11, 152(DI)
2678	ANDQ R10, R14
2679	XORQ R13, R14
2680	MOVQ R14, 144(DI)
2681	XORQ R11, R15
2682
2683	// Result s
2684	MOVQ 16(SP), R10
2685	MOVQ 64(SP), R11
2686	MOVQ 112(SP), R12
2687	XORQ DX, R10
2688	MOVQ 120(SP), R13
2689	ROLQ $0x3e, R10
2690	XORQ R8, R11
2691	MOVQ 168(SP), R14
2692	ROLQ $0x37, R11
2693	XORQ R9, R12
2694	MOVQ R10, R9
2695	XORQ CX, R14
2696	ROLQ $0x02, R14
2697	ANDQ R11, R9
2698	XORQ R14, R9
2699	MOVQ R9, 192(DI)
2700	ROLQ $0x27, R12
2701	XORQ R9, R15
2702	NOTQ R11
2703	XORQ BX, R13
2704	MOVQ R11, BX
2705	ANDQ R12, BX
2706	XORQ R10, BX
2707	MOVQ BX, 160(DI)
2708	XORQ BX, SI
2709	ROLQ $0x29, R13
2710	MOVQ R12, CX
2711	ORQ  R13, CX
2712	XORQ R11, CX
2713	MOVQ CX, 168(DI)
2714	XORQ CX, BP
2715	MOVQ R13, DX
2716	MOVQ R14, R8
2717	ANDQ R14, DX
2718	ORQ  R10, R8
2719	XORQ R12, DX
2720	XORQ R13, R8
2721	MOVQ DX, 176(DI)
2722	MOVQ R8, 184(DI)
2723
2724	// Prepare round
2725	MOVQ BP, BX
2726	ROLQ $0x01, BX
2727	MOVQ 16(DI), R12
2728	XORQ 56(DI), DX
2729	XORQ R15, BX
2730	XORQ 96(DI), R12
2731	XORQ 136(DI), DX
2732	XORQ DX, R12
2733	MOVQ R12, CX
2734	ROLQ $0x01, CX
2735	MOVQ 24(DI), R13
2736	XORQ 64(DI), R8
2737	XORQ SI, CX
2738	XORQ 104(DI), R13
2739	XORQ 144(DI), R8
2740	XORQ R8, R13
2741	MOVQ R13, DX
2742	ROLQ $0x01, DX
2743	MOVQ R15, R8
2744	XORQ BP, DX
2745	ROLQ $0x01, R8
2746	MOVQ SI, R9
2747	XORQ R12, R8
2748	ROLQ $0x01, R9
2749
2750	// Result b
2751	MOVQ (DI), R10
2752	MOVQ 48(DI), R11
2753	XORQ R13, R9
2754	MOVQ 96(DI), R12
2755	MOVQ 144(DI), R13
2756	MOVQ 192(DI), R14
2757	XORQ CX, R11
2758	ROLQ $0x2c, R11
2759	XORQ DX, R12
2760	XORQ BX, R10
2761	ROLQ $0x2b, R12
2762	MOVQ R11, SI
2763	MOVQ $0x000000008000808b, AX
2764	ORQ  R12, SI
2765	XORQ R10, AX
2766	XORQ AX, SI
2767	MOVQ SI, (SP)
2768	XORQ R9, R14
2769	ROLQ $0x0e, R14
2770	MOVQ R10, R15
2771	ANDQ R11, R15
2772	XORQ R14, R15
2773	MOVQ R15, 32(SP)
2774	XORQ R8, R13
2775	ROLQ $0x15, R13
2776	MOVQ R13, AX
2777	ANDQ R14, AX
2778	XORQ R12, AX
2779	MOVQ AX, 16(SP)
2780	NOTQ R12
2781	ORQ  R10, R14
2782	ORQ  R13, R12
2783	XORQ R13, R14
2784	XORQ R11, R12
2785	MOVQ R14, 24(SP)
2786	MOVQ R12, 8(SP)
2787	MOVQ R12, BP
2788
2789	// Result g
2790	MOVQ 72(DI), R11
2791	XORQ R9, R11
2792	MOVQ 80(DI), R12
2793	ROLQ $0x14, R11
2794	XORQ BX, R12
2795	ROLQ $0x03, R12
2796	MOVQ 24(DI), R10
2797	MOVQ R11, AX
2798	ORQ  R12, AX
2799	XORQ R8, R10
2800	MOVQ 128(DI), R13
2801	MOVQ 176(DI), R14
2802	ROLQ $0x1c, R10
2803	XORQ R10, AX
2804	MOVQ AX, 40(SP)
2805	XORQ AX, SI
2806	XORQ CX, R13
2807	ROLQ $0x2d, R13
2808	MOVQ R12, AX
2809	ANDQ R13, AX
2810	XORQ R11, AX
2811	MOVQ AX, 48(SP)
2812	XORQ AX, BP
2813	XORQ DX, R14
2814	ROLQ $0x3d, R14
2815	MOVQ R14, AX
2816	ORQ  R10, AX
2817	XORQ R13, AX
2818	MOVQ AX, 64(SP)
2819	ANDQ R11, R10
2820	XORQ R14, R10
2821	MOVQ R10, 72(SP)
2822	NOTQ R14
2823	XORQ R10, R15
2824	ORQ  R14, R13
2825	XORQ R12, R13
2826	MOVQ R13, 56(SP)
2827
2828	// Result k
2829	MOVQ 8(DI), R10
2830	MOVQ 56(DI), R11
2831	MOVQ 104(DI), R12
2832	MOVQ 152(DI), R13
2833	MOVQ 160(DI), R14
2834	XORQ DX, R11
2835	ROLQ $0x06, R11
2836	XORQ R8, R12
2837	ROLQ $0x19, R12
2838	MOVQ R11, AX
2839	ORQ  R12, AX
2840	XORQ CX, R10
2841	ROLQ $0x01, R10
2842	XORQ R10, AX
2843	MOVQ AX, 80(SP)
2844	XORQ AX, SI
2845	XORQ R9, R13
2846	ROLQ $0x08, R13
2847	MOVQ R12, AX
2848	ANDQ R13, AX
2849	XORQ R11, AX
2850	MOVQ AX, 88(SP)
2851	XORQ AX, BP
2852	XORQ BX, R14
2853	ROLQ $0x12, R14
2854	NOTQ R13
2855	MOVQ R13, AX
2856	ANDQ R14, AX
2857	XORQ R12, AX
2858	MOVQ AX, 96(SP)
2859	MOVQ R14, AX
2860	ORQ  R10, AX
2861	XORQ R13, AX
2862	MOVQ AX, 104(SP)
2863	ANDQ R11, R10
2864	XORQ R14, R10
2865	MOVQ R10, 112(SP)
2866	XORQ R10, R15
2867
2868	// Result m
2869	MOVQ 40(DI), R11
2870	XORQ BX, R11
2871	MOVQ 88(DI), R12
2872	ROLQ $0x24, R11
2873	XORQ CX, R12
2874	MOVQ 32(DI), R10
2875	ROLQ $0x0a, R12
2876	MOVQ R11, AX
2877	MOVQ 136(DI), R13
2878	ANDQ R12, AX
2879	XORQ R9, R10
2880	MOVQ 184(DI), R14
2881	ROLQ $0x1b, R10
2882	XORQ R10, AX
2883	MOVQ AX, 120(SP)
2884	XORQ AX, SI
2885	XORQ DX, R13
2886	ROLQ $0x0f, R13
2887	MOVQ R12, AX
2888	ORQ  R13, AX
2889	XORQ R11, AX
2890	MOVQ AX, 128(SP)
2891	XORQ AX, BP
2892	XORQ R8, R14
2893	ROLQ $0x38, R14
2894	NOTQ R13
2895	MOVQ R13, AX
2896	ORQ  R14, AX
2897	XORQ R12, AX
2898	MOVQ AX, 136(SP)
2899	ORQ  R10, R11
2900	XORQ R14, R11
2901	MOVQ R11, 152(SP)
2902	ANDQ R10, R14
2903	XORQ R13, R14
2904	MOVQ R14, 144(SP)
2905	XORQ R11, R15
2906
2907	// Result s
2908	MOVQ 16(DI), R10
2909	MOVQ 64(DI), R11
2910	MOVQ 112(DI), R12
2911	XORQ DX, R10
2912	MOVQ 120(DI), R13
2913	ROLQ $0x3e, R10
2914	XORQ R8, R11
2915	MOVQ 168(DI), R14
2916	ROLQ $0x37, R11
2917	XORQ R9, R12
2918	MOVQ R10, R9
2919	XORQ CX, R14
2920	ROLQ $0x02, R14
2921	ANDQ R11, R9
2922	XORQ R14, R9
2923	MOVQ R9, 192(SP)
2924	ROLQ $0x27, R12
2925	XORQ R9, R15
2926	NOTQ R11
2927	XORQ BX, R13
2928	MOVQ R11, BX
2929	ANDQ R12, BX
2930	XORQ R10, BX
2931	MOVQ BX, 160(SP)
2932	XORQ BX, SI
2933	ROLQ $0x29, R13
2934	MOVQ R12, CX
2935	ORQ  R13, CX
2936	XORQ R11, CX
2937	MOVQ CX, 168(SP)
2938	XORQ CX, BP
2939	MOVQ R13, DX
2940	MOVQ R14, R8
2941	ANDQ R14, DX
2942	ORQ  R10, R8
2943	XORQ R12, DX
2944	XORQ R13, R8
2945	MOVQ DX, 176(SP)
2946	MOVQ R8, 184(SP)
2947
2948	// Prepare round
2949	MOVQ BP, BX
2950	ROLQ $0x01, BX
2951	MOVQ 16(SP), R12
2952	XORQ 56(SP), DX
2953	XORQ R15, BX
2954	XORQ 96(SP), R12
2955	XORQ 136(SP), DX
2956	XORQ DX, R12
2957	MOVQ R12, CX
2958	ROLQ $0x01, CX
2959	MOVQ 24(SP), R13
2960	XORQ 64(SP), R8
2961	XORQ SI, CX
2962	XORQ 104(SP), R13
2963	XORQ 144(SP), R8
2964	XORQ R8, R13
2965	MOVQ R13, DX
2966	ROLQ $0x01, DX
2967	MOVQ R15, R8
2968	XORQ BP, DX
2969	ROLQ $0x01, R8
2970	MOVQ SI, R9
2971	XORQ R12, R8
2972	ROLQ $0x01, R9
2973
2974	// Result b
2975	MOVQ (SP), R10
2976	MOVQ 48(SP), R11
2977	XORQ R13, R9
2978	MOVQ 96(SP), R12
2979	MOVQ 144(SP), R13
2980	MOVQ 192(SP), R14
2981	XORQ CX, R11
2982	ROLQ $0x2c, R11
2983	XORQ DX, R12
2984	XORQ BX, R10
2985	ROLQ $0x2b, R12
2986	MOVQ R11, SI
2987	MOVQ $0x800000000000008b, AX
2988	ORQ  R12, SI
2989	XORQ R10, AX
2990	XORQ AX, SI
2991	MOVQ SI, (DI)
2992	XORQ R9, R14
2993	ROLQ $0x0e, R14
2994	MOVQ R10, R15
2995	ANDQ R11, R15
2996	XORQ R14, R15
2997	MOVQ R15, 32(DI)
2998	XORQ R8, R13
2999	ROLQ $0x15, R13
3000	MOVQ R13, AX
3001	ANDQ R14, AX
3002	XORQ R12, AX
3003	MOVQ AX, 16(DI)
3004	NOTQ R12
3005	ORQ  R10, R14
3006	ORQ  R13, R12
3007	XORQ R13, R14
3008	XORQ R11, R12
3009	MOVQ R14, 24(DI)
3010	MOVQ R12, 8(DI)
3011	MOVQ R12, BP
3012
3013	// Result g
3014	MOVQ 72(SP), R11
3015	XORQ R9, R11
3016	MOVQ 80(SP), R12
3017	ROLQ $0x14, R11
3018	XORQ BX, R12
3019	ROLQ $0x03, R12
3020	MOVQ 24(SP), R10
3021	MOVQ R11, AX
3022	ORQ  R12, AX
3023	XORQ R8, R10
3024	MOVQ 128(SP), R13
3025	MOVQ 176(SP), R14
3026	ROLQ $0x1c, R10
3027	XORQ R10, AX
3028	MOVQ AX, 40(DI)
3029	XORQ AX, SI
3030	XORQ CX, R13
3031	ROLQ $0x2d, R13
3032	MOVQ R12, AX
3033	ANDQ R13, AX
3034	XORQ R11, AX
3035	MOVQ AX, 48(DI)
3036	XORQ AX, BP
3037	XORQ DX, R14
3038	ROLQ $0x3d, R14
3039	MOVQ R14, AX
3040	ORQ  R10, AX
3041	XORQ R13, AX
3042	MOVQ AX, 64(DI)
3043	ANDQ R11, R10
3044	XORQ R14, R10
3045	MOVQ R10, 72(DI)
3046	NOTQ R14
3047	XORQ R10, R15
3048	ORQ  R14, R13
3049	XORQ R12, R13
3050	MOVQ R13, 56(DI)
3051
3052	// Result k
3053	MOVQ 8(SP), R10
3054	MOVQ 56(SP), R11
3055	MOVQ 104(SP), R12
3056	MOVQ 152(SP), R13
3057	MOVQ 160(SP), R14
3058	XORQ DX, R11
3059	ROLQ $0x06, R11
3060	XORQ R8, R12
3061	ROLQ $0x19, R12
3062	MOVQ R11, AX
3063	ORQ  R12, AX
3064	XORQ CX, R10
3065	ROLQ $0x01, R10
3066	XORQ R10, AX
3067	MOVQ AX, 80(DI)
3068	XORQ AX, SI
3069	XORQ R9, R13
3070	ROLQ $0x08, R13
3071	MOVQ R12, AX
3072	ANDQ R13, AX
3073	XORQ R11, AX
3074	MOVQ AX, 88(DI)
3075	XORQ AX, BP
3076	XORQ BX, R14
3077	ROLQ $0x12, R14
3078	NOTQ R13
3079	MOVQ R13, AX
3080	ANDQ R14, AX
3081	XORQ R12, AX
3082	MOVQ AX, 96(DI)
3083	MOVQ R14, AX
3084	ORQ  R10, AX
3085	XORQ R13, AX
3086	MOVQ AX, 104(DI)
3087	ANDQ R11, R10
3088	XORQ R14, R10
3089	MOVQ R10, 112(DI)
3090	XORQ R10, R15
3091
3092	// Result m
3093	MOVQ 40(SP), R11
3094	XORQ BX, R11
3095	MOVQ 88(SP), R12
3096	ROLQ $0x24, R11
3097	XORQ CX, R12
3098	MOVQ 32(SP), R10
3099	ROLQ $0x0a, R12
3100	MOVQ R11, AX
3101	MOVQ 136(SP), R13
3102	ANDQ R12, AX
3103	XORQ R9, R10
3104	MOVQ 184(SP), R14
3105	ROLQ $0x1b, R10
3106	XORQ R10, AX
3107	MOVQ AX, 120(DI)
3108	XORQ AX, SI
3109	XORQ DX, R13
3110	ROLQ $0x0f, R13
3111	MOVQ R12, AX
3112	ORQ  R13, AX
3113	XORQ R11, AX
3114	MOVQ AX, 128(DI)
3115	XORQ AX, BP
3116	XORQ R8, R14
3117	ROLQ $0x38, R14
3118	NOTQ R13
3119	MOVQ R13, AX
3120	ORQ  R14, AX
3121	XORQ R12, AX
3122	MOVQ AX, 136(DI)
3123	ORQ  R10, R11
3124	XORQ R14, R11
3125	MOVQ R11, 152(DI)
3126	ANDQ R10, R14
3127	XORQ R13, R14
3128	MOVQ R14, 144(DI)
3129	XORQ R11, R15
3130
3131	// Result s
3132	MOVQ 16(SP), R10
3133	MOVQ 64(SP), R11
3134	MOVQ 112(SP), R12
3135	XORQ DX, R10
3136	MOVQ 120(SP), R13
3137	ROLQ $0x3e, R10
3138	XORQ R8, R11
3139	MOVQ 168(SP), R14
3140	ROLQ $0x37, R11
3141	XORQ R9, R12
3142	MOVQ R10, R9
3143	XORQ CX, R14
3144	ROLQ $0x02, R14
3145	ANDQ R11, R9
3146	XORQ R14, R9
3147	MOVQ R9, 192(DI)
3148	ROLQ $0x27, R12
3149	XORQ R9, R15
3150	NOTQ R11
3151	XORQ BX, R13
3152	MOVQ R11, BX
3153	ANDQ R12, BX
3154	XORQ R10, BX
3155	MOVQ BX, 160(DI)
3156	XORQ BX, SI
3157	ROLQ $0x29, R13
3158	MOVQ R12, CX
3159	ORQ  R13, CX
3160	XORQ R11, CX
3161	MOVQ CX, 168(DI)
3162	XORQ CX, BP
3163	MOVQ R13, DX
3164	MOVQ R14, R8
3165	ANDQ R14, DX
3166	ORQ  R10, R8
3167	XORQ R12, DX
3168	XORQ R13, R8
3169	MOVQ DX, 176(DI)
3170	MOVQ R8, 184(DI)
3171
3172	// Prepare round
3173	MOVQ BP, BX
3174	ROLQ $0x01, BX
3175	MOVQ 16(DI), R12
3176	XORQ 56(DI), DX
3177	XORQ R15, BX
3178	XORQ 96(DI), R12
3179	XORQ 136(DI), DX
3180	XORQ DX, R12
3181	MOVQ R12, CX
3182	ROLQ $0x01, CX
3183	MOVQ 24(DI), R13
3184	XORQ 64(DI), R8
3185	XORQ SI, CX
3186	XORQ 104(DI), R13
3187	XORQ 144(DI), R8
3188	XORQ R8, R13
3189	MOVQ R13, DX
3190	ROLQ $0x01, DX
3191	MOVQ R15, R8
3192	XORQ BP, DX
3193	ROLQ $0x01, R8
3194	MOVQ SI, R9
3195	XORQ R12, R8
3196	ROLQ $0x01, R9
3197
3198	// Result b
3199	MOVQ (DI), R10
3200	MOVQ 48(DI), R11
3201	XORQ R13, R9
3202	MOVQ 96(DI), R12
3203	MOVQ 144(DI), R13
3204	MOVQ 192(DI), R14
3205	XORQ CX, R11
3206	ROLQ $0x2c, R11
3207	XORQ DX, R12
3208	XORQ BX, R10
3209	ROLQ $0x2b, R12
3210	MOVQ R11, SI
3211	MOVQ $0x8000000000008089, AX
3212	ORQ  R12, SI
3213	XORQ R10, AX
3214	XORQ AX, SI
3215	MOVQ SI, (SP)
3216	XORQ R9, R14
3217	ROLQ $0x0e, R14
3218	MOVQ R10, R15
3219	ANDQ R11, R15
3220	XORQ R14, R15
3221	MOVQ R15, 32(SP)
3222	XORQ R8, R13
3223	ROLQ $0x15, R13
3224	MOVQ R13, AX
3225	ANDQ R14, AX
3226	XORQ R12, AX
3227	MOVQ AX, 16(SP)
3228	NOTQ R12
3229	ORQ  R10, R14
3230	ORQ  R13, R12
3231	XORQ R13, R14
3232	XORQ R11, R12
3233	MOVQ R14, 24(SP)
3234	MOVQ R12, 8(SP)
3235	MOVQ R12, BP
3236
3237	// Result g
3238	MOVQ 72(DI), R11
3239	XORQ R9, R11
3240	MOVQ 80(DI), R12
3241	ROLQ $0x14, R11
3242	XORQ BX, R12
3243	ROLQ $0x03, R12
3244	MOVQ 24(DI), R10
3245	MOVQ R11, AX
3246	ORQ  R12, AX
3247	XORQ R8, R10
3248	MOVQ 128(DI), R13
3249	MOVQ 176(DI), R14
3250	ROLQ $0x1c, R10
3251	XORQ R10, AX
3252	MOVQ AX, 40(SP)
3253	XORQ AX, SI
3254	XORQ CX, R13
3255	ROLQ $0x2d, R13
3256	MOVQ R12, AX
3257	ANDQ R13, AX
3258	XORQ R11, AX
3259	MOVQ AX, 48(SP)
3260	XORQ AX, BP
3261	XORQ DX, R14
3262	ROLQ $0x3d, R14
3263	MOVQ R14, AX
3264	ORQ  R10, AX
3265	XORQ R13, AX
3266	MOVQ AX, 64(SP)
3267	ANDQ R11, R10
3268	XORQ R14, R10
3269	MOVQ R10, 72(SP)
3270	NOTQ R14
3271	XORQ R10, R15
3272	ORQ  R14, R13
3273	XORQ R12, R13
3274	MOVQ R13, 56(SP)
3275
3276	// Result k
3277	MOVQ 8(DI), R10
3278	MOVQ 56(DI), R11
3279	MOVQ 104(DI), R12
3280	MOVQ 152(DI), R13
3281	MOVQ 160(DI), R14
3282	XORQ DX, R11
3283	ROLQ $0x06, R11
3284	XORQ R8, R12
3285	ROLQ $0x19, R12
3286	MOVQ R11, AX
3287	ORQ  R12, AX
3288	XORQ CX, R10
3289	ROLQ $0x01, R10
3290	XORQ R10, AX
3291	MOVQ AX, 80(SP)
3292	XORQ AX, SI
3293	XORQ R9, R13
3294	ROLQ $0x08, R13
3295	MOVQ R12, AX
3296	ANDQ R13, AX
3297	XORQ R11, AX
3298	MOVQ AX, 88(SP)
3299	XORQ AX, BP
3300	XORQ BX, R14
3301	ROLQ $0x12, R14
3302	NOTQ R13
3303	MOVQ R13, AX
3304	ANDQ R14, AX
3305	XORQ R12, AX
3306	MOVQ AX, 96(SP)
3307	MOVQ R14, AX
3308	ORQ  R10, AX
3309	XORQ R13, AX
3310	MOVQ AX, 104(SP)
3311	ANDQ R11, R10
3312	XORQ R14, R10
3313	MOVQ R10, 112(SP)
3314	XORQ R10, R15
3315
3316	// Result m
3317	MOVQ 40(DI), R11
3318	XORQ BX, R11
3319	MOVQ 88(DI), R12
3320	ROLQ $0x24, R11
3321	XORQ CX, R12
3322	MOVQ 32(DI), R10
3323	ROLQ $0x0a, R12
3324	MOVQ R11, AX
3325	MOVQ 136(DI), R13
3326	ANDQ R12, AX
3327	XORQ R9, R10
3328	MOVQ 184(DI), R14
3329	ROLQ $0x1b, R10
3330	XORQ R10, AX
3331	MOVQ AX, 120(SP)
3332	XORQ AX, SI
3333	XORQ DX, R13
3334	ROLQ $0x0f, R13
3335	MOVQ R12, AX
3336	ORQ  R13, AX
3337	XORQ R11, AX
3338	MOVQ AX, 128(SP)
3339	XORQ AX, BP
3340	XORQ R8, R14
3341	ROLQ $0x38, R14
3342	NOTQ R13
3343	MOVQ R13, AX
3344	ORQ  R14, AX
3345	XORQ R12, AX
3346	MOVQ AX, 136(SP)
3347	ORQ  R10, R11
3348	XORQ R14, R11
3349	MOVQ R11, 152(SP)
3350	ANDQ R10, R14
3351	XORQ R13, R14
3352	MOVQ R14, 144(SP)
3353	XORQ R11, R15
3354
3355	// Result s
3356	MOVQ 16(DI), R10
3357	MOVQ 64(DI), R11
3358	MOVQ 112(DI), R12
3359	XORQ DX, R10
3360	MOVQ 120(DI), R13
3361	ROLQ $0x3e, R10
3362	XORQ R8, R11
3363	MOVQ 168(DI), R14
3364	ROLQ $0x37, R11
3365	XORQ R9, R12
3366	MOVQ R10, R9
3367	XORQ CX, R14
3368	ROLQ $0x02, R14
3369	ANDQ R11, R9
3370	XORQ R14, R9
3371	MOVQ R9, 192(SP)
3372	ROLQ $0x27, R12
3373	XORQ R9, R15
3374	NOTQ R11
3375	XORQ BX, R13
3376	MOVQ R11, BX
3377	ANDQ R12, BX
3378	XORQ R10, BX
3379	MOVQ BX, 160(SP)
3380	XORQ BX, SI
3381	ROLQ $0x29, R13
3382	MOVQ R12, CX
3383	ORQ  R13, CX
3384	XORQ R11, CX
3385	MOVQ CX, 168(SP)
3386	XORQ CX, BP
3387	MOVQ R13, DX
3388	MOVQ R14, R8
3389	ANDQ R14, DX
3390	ORQ  R10, R8
3391	XORQ R12, DX
3392	XORQ R13, R8
3393	MOVQ DX, 176(SP)
3394	MOVQ R8, 184(SP)
3395
3396	// Prepare round
3397	MOVQ BP, BX
3398	ROLQ $0x01, BX
3399	MOVQ 16(SP), R12
3400	XORQ 56(SP), DX
3401	XORQ R15, BX
3402	XORQ 96(SP), R12
3403	XORQ 136(SP), DX
3404	XORQ DX, R12
3405	MOVQ R12, CX
3406	ROLQ $0x01, CX
3407	MOVQ 24(SP), R13
3408	XORQ 64(SP), R8
3409	XORQ SI, CX
3410	XORQ 104(SP), R13
3411	XORQ 144(SP), R8
3412	XORQ R8, R13
3413	MOVQ R13, DX
3414	ROLQ $0x01, DX
3415	MOVQ R15, R8
3416	XORQ BP, DX
3417	ROLQ $0x01, R8
3418	MOVQ SI, R9
3419	XORQ R12, R8
3420	ROLQ $0x01, R9
3421
3422	// Result b
3423	MOVQ (SP), R10
3424	MOVQ 48(SP), R11
3425	XORQ R13, R9
3426	MOVQ 96(SP), R12
3427	MOVQ 144(SP), R13
3428	MOVQ 192(SP), R14
3429	XORQ CX, R11
3430	ROLQ $0x2c, R11
3431	XORQ DX, R12
3432	XORQ BX, R10
3433	ROLQ $0x2b, R12
3434	MOVQ R11, SI
3435	MOVQ $0x8000000000008003, AX
3436	ORQ  R12, SI
3437	XORQ R10, AX
3438	XORQ AX, SI
3439	MOVQ SI, (DI)
3440	XORQ R9, R14
3441	ROLQ $0x0e, R14
3442	MOVQ R10, R15
3443	ANDQ R11, R15
3444	XORQ R14, R15
3445	MOVQ R15, 32(DI)
3446	XORQ R8, R13
3447	ROLQ $0x15, R13
3448	MOVQ R13, AX
3449	ANDQ R14, AX
3450	XORQ R12, AX
3451	MOVQ AX, 16(DI)
3452	NOTQ R12
3453	ORQ  R10, R14
3454	ORQ  R13, R12
3455	XORQ R13, R14
3456	XORQ R11, R12
3457	MOVQ R14, 24(DI)
3458	MOVQ R12, 8(DI)
3459	MOVQ R12, BP
3460
3461	// Result g
3462	MOVQ 72(SP), R11
3463	XORQ R9, R11
3464	MOVQ 80(SP), R12
3465	ROLQ $0x14, R11
3466	XORQ BX, R12
3467	ROLQ $0x03, R12
3468	MOVQ 24(SP), R10
3469	MOVQ R11, AX
3470	ORQ  R12, AX
3471	XORQ R8, R10
3472	MOVQ 128(SP), R13
3473	MOVQ 176(SP), R14
3474	ROLQ $0x1c, R10
3475	XORQ R10, AX
3476	MOVQ AX, 40(DI)
3477	XORQ AX, SI
3478	XORQ CX, R13
3479	ROLQ $0x2d, R13
3480	MOVQ R12, AX
3481	ANDQ R13, AX
3482	XORQ R11, AX
3483	MOVQ AX, 48(DI)
3484	XORQ AX, BP
3485	XORQ DX, R14
3486	ROLQ $0x3d, R14
3487	MOVQ R14, AX
3488	ORQ  R10, AX
3489	XORQ R13, AX
3490	MOVQ AX, 64(DI)
3491	ANDQ R11, R10
3492	XORQ R14, R10
3493	MOVQ R10, 72(DI)
3494	NOTQ R14
3495	XORQ R10, R15
3496	ORQ  R14, R13
3497	XORQ R12, R13
3498	MOVQ R13, 56(DI)
3499
3500	// Result k
3501	MOVQ 8(SP), R10
3502	MOVQ 56(SP), R11
3503	MOVQ 104(SP), R12
3504	MOVQ 152(SP), R13
3505	MOVQ 160(SP), R14
3506	XORQ DX, R11
3507	ROLQ $0x06, R11
3508	XORQ R8, R12
3509	ROLQ $0x19, R12
3510	MOVQ R11, AX
3511	ORQ  R12, AX
3512	XORQ CX, R10
3513	ROLQ $0x01, R10
3514	XORQ R10, AX
3515	MOVQ AX, 80(DI)
3516	XORQ AX, SI
3517	XORQ R9, R13
3518	ROLQ $0x08, R13
3519	MOVQ R12, AX
3520	ANDQ R13, AX
3521	XORQ R11, AX
3522	MOVQ AX, 88(DI)
3523	XORQ AX, BP
3524	XORQ BX, R14
3525	ROLQ $0x12, R14
3526	NOTQ R13
3527	MOVQ R13, AX
3528	ANDQ R14, AX
3529	XORQ R12, AX
3530	MOVQ AX, 96(DI)
3531	MOVQ R14, AX
3532	ORQ  R10, AX
3533	XORQ R13, AX
3534	MOVQ AX, 104(DI)
3535	ANDQ R11, R10
3536	XORQ R14, R10
3537	MOVQ R10, 112(DI)
3538	XORQ R10, R15
3539
3540	// Result m
3541	MOVQ 40(SP), R11
3542	XORQ BX, R11
3543	MOVQ 88(SP), R12
3544	ROLQ $0x24, R11
3545	XORQ CX, R12
3546	MOVQ 32(SP), R10
3547	ROLQ $0x0a, R12
3548	MOVQ R11, AX
3549	MOVQ 136(SP), R13
3550	ANDQ R12, AX
3551	XORQ R9, R10
3552	MOVQ 184(SP), R14
3553	ROLQ $0x1b, R10
3554	XORQ R10, AX
3555	MOVQ AX, 120(DI)
3556	XORQ AX, SI
3557	XORQ DX, R13
3558	ROLQ $0x0f, R13
3559	MOVQ R12, AX
3560	ORQ  R13, AX
3561	XORQ R11, AX
3562	MOVQ AX, 128(DI)
3563	XORQ AX, BP
3564	XORQ R8, R14
3565	ROLQ $0x38, R14
3566	NOTQ R13
3567	MOVQ R13, AX
3568	ORQ  R14, AX
3569	XORQ R12, AX
3570	MOVQ AX, 136(DI)
3571	ORQ  R10, R11
3572	XORQ R14, R11
3573	MOVQ R11, 152(DI)
3574	ANDQ R10, R14
3575	XORQ R13, R14
3576	MOVQ R14, 144(DI)
3577	XORQ R11, R15
3578
3579	// Result s
3580	MOVQ 16(SP), R10
3581	MOVQ 64(SP), R11
3582	MOVQ 112(SP), R12
3583	XORQ DX, R10
3584	MOVQ 120(SP), R13
3585	ROLQ $0x3e, R10
3586	XORQ R8, R11
3587	MOVQ 168(SP), R14
3588	ROLQ $0x37, R11
3589	XORQ R9, R12
3590	MOVQ R10, R9
3591	XORQ CX, R14
3592	ROLQ $0x02, R14
3593	ANDQ R11, R9
3594	XORQ R14, R9
3595	MOVQ R9, 192(DI)
3596	ROLQ $0x27, R12
3597	XORQ R9, R15
3598	NOTQ R11
3599	XORQ BX, R13
3600	MOVQ R11, BX
3601	ANDQ R12, BX
3602	XORQ R10, BX
3603	MOVQ BX, 160(DI)
3604	XORQ BX, SI
3605	ROLQ $0x29, R13
3606	MOVQ R12, CX
3607	ORQ  R13, CX
3608	XORQ R11, CX
3609	MOVQ CX, 168(DI)
3610	XORQ CX, BP
3611	MOVQ R13, DX
3612	MOVQ R14, R8
3613	ANDQ R14, DX
3614	ORQ  R10, R8
3615	XORQ R12, DX
3616	XORQ R13, R8
3617	MOVQ DX, 176(DI)
3618	MOVQ R8, 184(DI)
3619
3620	// Prepare round
3621	MOVQ BP, BX
3622	ROLQ $0x01, BX
3623	MOVQ 16(DI), R12
3624	XORQ 56(DI), DX
3625	XORQ R15, BX
3626	XORQ 96(DI), R12
3627	XORQ 136(DI), DX
3628	XORQ DX, R12
3629	MOVQ R12, CX
3630	ROLQ $0x01, CX
3631	MOVQ 24(DI), R13
3632	XORQ 64(DI), R8
3633	XORQ SI, CX
3634	XORQ 104(DI), R13
3635	XORQ 144(DI), R8
3636	XORQ R8, R13
3637	MOVQ R13, DX
3638	ROLQ $0x01, DX
3639	MOVQ R15, R8
3640	XORQ BP, DX
3641	ROLQ $0x01, R8
3642	MOVQ SI, R9
3643	XORQ R12, R8
3644	ROLQ $0x01, R9
3645
3646	// Result b
3647	MOVQ (DI), R10
3648	MOVQ 48(DI), R11
3649	XORQ R13, R9
3650	MOVQ 96(DI), R12
3651	MOVQ 144(DI), R13
3652	MOVQ 192(DI), R14
3653	XORQ CX, R11
3654	ROLQ $0x2c, R11
3655	XORQ DX, R12
3656	XORQ BX, R10
3657	ROLQ $0x2b, R12
3658	MOVQ R11, SI
3659	MOVQ $0x8000000000008002, AX
3660	ORQ  R12, SI
3661	XORQ R10, AX
3662	XORQ AX, SI
3663	MOVQ SI, (SP)
3664	XORQ R9, R14
3665	ROLQ $0x0e, R14
3666	MOVQ R10, R15
3667	ANDQ R11, R15
3668	XORQ R14, R15
3669	MOVQ R15, 32(SP)
3670	XORQ R8, R13
3671	ROLQ $0x15, R13
3672	MOVQ R13, AX
3673	ANDQ R14, AX
3674	XORQ R12, AX
3675	MOVQ AX, 16(SP)
3676	NOTQ R12
3677	ORQ  R10, R14
3678	ORQ  R13, R12
3679	XORQ R13, R14
3680	XORQ R11, R12
3681	MOVQ R14, 24(SP)
3682	MOVQ R12, 8(SP)
3683	MOVQ R12, BP
3684
3685	// Result g
3686	MOVQ 72(DI), R11
3687	XORQ R9, R11
3688	MOVQ 80(DI), R12
3689	ROLQ $0x14, R11
3690	XORQ BX, R12
3691	ROLQ $0x03, R12
3692	MOVQ 24(DI), R10
3693	MOVQ R11, AX
3694	ORQ  R12, AX
3695	XORQ R8, R10
3696	MOVQ 128(DI), R13
3697	MOVQ 176(DI), R14
3698	ROLQ $0x1c, R10
3699	XORQ R10, AX
3700	MOVQ AX, 40(SP)
3701	XORQ AX, SI
3702	XORQ CX, R13
3703	ROLQ $0x2d, R13
3704	MOVQ R12, AX
3705	ANDQ R13, AX
3706	XORQ R11, AX
3707	MOVQ AX, 48(SP)
3708	XORQ AX, BP
3709	XORQ DX, R14
3710	ROLQ $0x3d, R14
3711	MOVQ R14, AX
3712	ORQ  R10, AX
3713	XORQ R13, AX
3714	MOVQ AX, 64(SP)
3715	ANDQ R11, R10
3716	XORQ R14, R10
3717	MOVQ R10, 72(SP)
3718	NOTQ R14
3719	XORQ R10, R15
3720	ORQ  R14, R13
3721	XORQ R12, R13
3722	MOVQ R13, 56(SP)
3723
3724	// Result k
3725	MOVQ 8(DI), R10
3726	MOVQ 56(DI), R11
3727	MOVQ 104(DI), R12
3728	MOVQ 152(DI), R13
3729	MOVQ 160(DI), R14
3730	XORQ DX, R11
3731	ROLQ $0x06, R11
3732	XORQ R8, R12
3733	ROLQ $0x19, R12
3734	MOVQ R11, AX
3735	ORQ  R12, AX
3736	XORQ CX, R10
3737	ROLQ $0x01, R10
3738	XORQ R10, AX
3739	MOVQ AX, 80(SP)
3740	XORQ AX, SI
3741	XORQ R9, R13
3742	ROLQ $0x08, R13
3743	MOVQ R12, AX
3744	ANDQ R13, AX
3745	XORQ R11, AX
3746	MOVQ AX, 88(SP)
3747	XORQ AX, BP
3748	XORQ BX, R14
3749	ROLQ $0x12, R14
3750	NOTQ R13
3751	MOVQ R13, AX
3752	ANDQ R14, AX
3753	XORQ R12, AX
3754	MOVQ AX, 96(SP)
3755	MOVQ R14, AX
3756	ORQ  R10, AX
3757	XORQ R13, AX
3758	MOVQ AX, 104(SP)
3759	ANDQ R11, R10
3760	XORQ R14, R10
3761	MOVQ R10, 112(SP)
3762	XORQ R10, R15
3763
3764	// Result m
3765	MOVQ 40(DI), R11
3766	XORQ BX, R11
3767	MOVQ 88(DI), R12
3768	ROLQ $0x24, R11
3769	XORQ CX, R12
3770	MOVQ 32(DI), R10
3771	ROLQ $0x0a, R12
3772	MOVQ R11, AX
3773	MOVQ 136(DI), R13
3774	ANDQ R12, AX
3775	XORQ R9, R10
3776	MOVQ 184(DI), R14
3777	ROLQ $0x1b, R10
3778	XORQ R10, AX
3779	MOVQ AX, 120(SP)
3780	XORQ AX, SI
3781	XORQ DX, R13
3782	ROLQ $0x0f, R13
3783	MOVQ R12, AX
3784	ORQ  R13, AX
3785	XORQ R11, AX
3786	MOVQ AX, 128(SP)
3787	XORQ AX, BP
3788	XORQ R8, R14
3789	ROLQ $0x38, R14
3790	NOTQ R13
3791	MOVQ R13, AX
3792	ORQ  R14, AX
3793	XORQ R12, AX
3794	MOVQ AX, 136(SP)
3795	ORQ  R10, R11
3796	XORQ R14, R11
3797	MOVQ R11, 152(SP)
3798	ANDQ R10, R14
3799	XORQ R13, R14
3800	MOVQ R14, 144(SP)
3801	XORQ R11, R15
3802
3803	// Result s
3804	MOVQ 16(DI), R10
3805	MOVQ 64(DI), R11
3806	MOVQ 112(DI), R12
3807	XORQ DX, R10
3808	MOVQ 120(DI), R13
3809	ROLQ $0x3e, R10
3810	XORQ R8, R11
3811	MOVQ 168(DI), R14
3812	ROLQ $0x37, R11
3813	XORQ R9, R12
3814	MOVQ R10, R9
3815	XORQ CX, R14
3816	ROLQ $0x02, R14
3817	ANDQ R11, R9
3818	XORQ R14, R9
3819	MOVQ R9, 192(SP)
3820	ROLQ $0x27, R12
3821	XORQ R9, R15
3822	NOTQ R11
3823	XORQ BX, R13
3824	MOVQ R11, BX
3825	ANDQ R12, BX
3826	XORQ R10, BX
3827	MOVQ BX, 160(SP)
3828	XORQ BX, SI
3829	ROLQ $0x29, R13
3830	MOVQ R12, CX
3831	ORQ  R13, CX
3832	XORQ R11, CX
3833	MOVQ CX, 168(SP)
3834	XORQ CX, BP
3835	MOVQ R13, DX
3836	MOVQ R14, R8
3837	ANDQ R14, DX
3838	ORQ  R10, R8
3839	XORQ R12, DX
3840	XORQ R13, R8
3841	MOVQ DX, 176(SP)
3842	MOVQ R8, 184(SP)
3843
3844	// Prepare round
3845	MOVQ BP, BX
3846	ROLQ $0x01, BX
3847	MOVQ 16(SP), R12
3848	XORQ 56(SP), DX
3849	XORQ R15, BX
3850	XORQ 96(SP), R12
3851	XORQ 136(SP), DX
3852	XORQ DX, R12
3853	MOVQ R12, CX
3854	ROLQ $0x01, CX
3855	MOVQ 24(SP), R13
3856	XORQ 64(SP), R8
3857	XORQ SI, CX
3858	XORQ 104(SP), R13
3859	XORQ 144(SP), R8
3860	XORQ R8, R13
3861	MOVQ R13, DX
3862	ROLQ $0x01, DX
3863	MOVQ R15, R8
3864	XORQ BP, DX
3865	ROLQ $0x01, R8
3866	MOVQ SI, R9
3867	XORQ R12, R8
3868	ROLQ $0x01, R9
3869
3870	// Result b
3871	MOVQ (SP), R10
3872	MOVQ 48(SP), R11
3873	XORQ R13, R9
3874	MOVQ 96(SP), R12
3875	MOVQ 144(SP), R13
3876	MOVQ 192(SP), R14
3877	XORQ CX, R11
3878	ROLQ $0x2c, R11
3879	XORQ DX, R12
3880	XORQ BX, R10
3881	ROLQ $0x2b, R12
3882	MOVQ R11, SI
3883	MOVQ $0x8000000000000080, AX
3884	ORQ  R12, SI
3885	XORQ R10, AX
3886	XORQ AX, SI
3887	MOVQ SI, (DI)
3888	XORQ R9, R14
3889	ROLQ $0x0e, R14
3890	MOVQ R10, R15
3891	ANDQ R11, R15
3892	XORQ R14, R15
3893	MOVQ R15, 32(DI)
3894	XORQ R8, R13
3895	ROLQ $0x15, R13
3896	MOVQ R13, AX
3897	ANDQ R14, AX
3898	XORQ R12, AX
3899	MOVQ AX, 16(DI)
3900	NOTQ R12
3901	ORQ  R10, R14
3902	ORQ  R13, R12
3903	XORQ R13, R14
3904	XORQ R11, R12
3905	MOVQ R14, 24(DI)
3906	MOVQ R12, 8(DI)
3907	MOVQ R12, BP
3908
3909	// Result g
3910	MOVQ 72(SP), R11
3911	XORQ R9, R11
3912	MOVQ 80(SP), R12
3913	ROLQ $0x14, R11
3914	XORQ BX, R12
3915	ROLQ $0x03, R12
3916	MOVQ 24(SP), R10
3917	MOVQ R11, AX
3918	ORQ  R12, AX
3919	XORQ R8, R10
3920	MOVQ 128(SP), R13
3921	MOVQ 176(SP), R14
3922	ROLQ $0x1c, R10
3923	XORQ R10, AX
3924	MOVQ AX, 40(DI)
3925	XORQ AX, SI
3926	XORQ CX, R13
3927	ROLQ $0x2d, R13
3928	MOVQ R12, AX
3929	ANDQ R13, AX
3930	XORQ R11, AX
3931	MOVQ AX, 48(DI)
3932	XORQ AX, BP
3933	XORQ DX, R14
3934	ROLQ $0x3d, R14
3935	MOVQ R14, AX
3936	ORQ  R10, AX
3937	XORQ R13, AX
3938	MOVQ AX, 64(DI)
3939	ANDQ R11, R10
3940	XORQ R14, R10
3941	MOVQ R10, 72(DI)
3942	NOTQ R14
3943	XORQ R10, R15
3944	ORQ  R14, R13
3945	XORQ R12, R13
3946	MOVQ R13, 56(DI)
3947
3948	// Result k
3949	MOVQ 8(SP), R10
3950	MOVQ 56(SP), R11
3951	MOVQ 104(SP), R12
3952	MOVQ 152(SP), R13
3953	MOVQ 160(SP), R14
3954	XORQ DX, R11
3955	ROLQ $0x06, R11
3956	XORQ R8, R12
3957	ROLQ $0x19, R12
3958	MOVQ R11, AX
3959	ORQ  R12, AX
3960	XORQ CX, R10
3961	ROLQ $0x01, R10
3962	XORQ R10, AX
3963	MOVQ AX, 80(DI)
3964	XORQ AX, SI
3965	XORQ R9, R13
3966	ROLQ $0x08, R13
3967	MOVQ R12, AX
3968	ANDQ R13, AX
3969	XORQ R11, AX
3970	MOVQ AX, 88(DI)
3971	XORQ AX, BP
3972	XORQ BX, R14
3973	ROLQ $0x12, R14
3974	NOTQ R13
3975	MOVQ R13, AX
3976	ANDQ R14, AX
3977	XORQ R12, AX
3978	MOVQ AX, 96(DI)
3979	MOVQ R14, AX
3980	ORQ  R10, AX
3981	XORQ R13, AX
3982	MOVQ AX, 104(DI)
3983	ANDQ R11, R10
3984	XORQ R14, R10
3985	MOVQ R10, 112(DI)
3986	XORQ R10, R15
3987
3988	// Result m
3989	MOVQ 40(SP), R11
3990	XORQ BX, R11
3991	MOVQ 88(SP), R12
3992	ROLQ $0x24, R11
3993	XORQ CX, R12
3994	MOVQ 32(SP), R10
3995	ROLQ $0x0a, R12
3996	MOVQ R11, AX
3997	MOVQ 136(SP), R13
3998	ANDQ R12, AX
3999	XORQ R9, R10
4000	MOVQ 184(SP), R14
4001	ROLQ $0x1b, R10
4002	XORQ R10, AX
4003	MOVQ AX, 120(DI)
4004	XORQ AX, SI
4005	XORQ DX, R13
4006	ROLQ $0x0f, R13
4007	MOVQ R12, AX
4008	ORQ  R13, AX
4009	XORQ R11, AX
4010	MOVQ AX, 128(DI)
4011	XORQ AX, BP
4012	XORQ R8, R14
4013	ROLQ $0x38, R14
4014	NOTQ R13
4015	MOVQ R13, AX
4016	ORQ  R14, AX
4017	XORQ R12, AX
4018	MOVQ AX, 136(DI)
4019	ORQ  R10, R11
4020	XORQ R14, R11
4021	MOVQ R11, 152(DI)
4022	ANDQ R10, R14
4023	XORQ R13, R14
4024	MOVQ R14, 144(DI)
4025	XORQ R11, R15
4026
4027	// Result s
4028	MOVQ 16(SP), R10
4029	MOVQ 64(SP), R11
4030	MOVQ 112(SP), R12
4031	XORQ DX, R10
4032	MOVQ 120(SP), R13
4033	ROLQ $0x3e, R10
4034	XORQ R8, R11
4035	MOVQ 168(SP), R14
4036	ROLQ $0x37, R11
4037	XORQ R9, R12
4038	MOVQ R10, R9
4039	XORQ CX, R14
4040	ROLQ $0x02, R14
4041	ANDQ R11, R9
4042	XORQ R14, R9
4043	MOVQ R9, 192(DI)
4044	ROLQ $0x27, R12
4045	XORQ R9, R15
4046	NOTQ R11
4047	XORQ BX, R13
4048	MOVQ R11, BX
4049	ANDQ R12, BX
4050	XORQ R10, BX
4051	MOVQ BX, 160(DI)
4052	XORQ BX, SI
4053	ROLQ $0x29, R13
4054	MOVQ R12, CX
4055	ORQ  R13, CX
4056	XORQ R11, CX
4057	MOVQ CX, 168(DI)
4058	XORQ CX, BP
4059	MOVQ R13, DX
4060	MOVQ R14, R8
4061	ANDQ R14, DX
4062	ORQ  R10, R8
4063	XORQ R12, DX
4064	XORQ R13, R8
4065	MOVQ DX, 176(DI)
4066	MOVQ R8, 184(DI)
4067
4068	// Prepare round
4069	MOVQ BP, BX
4070	ROLQ $0x01, BX
4071	MOVQ 16(DI), R12
4072	XORQ 56(DI), DX
4073	XORQ R15, BX
4074	XORQ 96(DI), R12
4075	XORQ 136(DI), DX
4076	XORQ DX, R12
4077	MOVQ R12, CX
4078	ROLQ $0x01, CX
4079	MOVQ 24(DI), R13
4080	XORQ 64(DI), R8
4081	XORQ SI, CX
4082	XORQ 104(DI), R13
4083	XORQ 144(DI), R8
4084	XORQ R8, R13
4085	MOVQ R13, DX
4086	ROLQ $0x01, DX
4087	MOVQ R15, R8
4088	XORQ BP, DX
4089	ROLQ $0x01, R8
4090	MOVQ SI, R9
4091	XORQ R12, R8
4092	ROLQ $0x01, R9
4093
4094	// Result b
4095	MOVQ (DI), R10
4096	MOVQ 48(DI), R11
4097	XORQ R13, R9
4098	MOVQ 96(DI), R12
4099	MOVQ 144(DI), R13
4100	MOVQ 192(DI), R14
4101	XORQ CX, R11
4102	ROLQ $0x2c, R11
4103	XORQ DX, R12
4104	XORQ BX, R10
4105	ROLQ $0x2b, R12
4106	MOVQ R11, SI
4107	MOVQ $0x000000000000800a, AX
4108	ORQ  R12, SI
4109	XORQ R10, AX
4110	XORQ AX, SI
4111	MOVQ SI, (SP)
4112	XORQ R9, R14
4113	ROLQ $0x0e, R14
4114	MOVQ R10, R15
4115	ANDQ R11, R15
4116	XORQ R14, R15
4117	MOVQ R15, 32(SP)
4118	XORQ R8, R13
4119	ROLQ $0x15, R13
4120	MOVQ R13, AX
4121	ANDQ R14, AX
4122	XORQ R12, AX
4123	MOVQ AX, 16(SP)
4124	NOTQ R12
4125	ORQ  R10, R14
4126	ORQ  R13, R12
4127	XORQ R13, R14
4128	XORQ R11, R12
4129	MOVQ R14, 24(SP)
4130	MOVQ R12, 8(SP)
4131	MOVQ R12, BP
4132
4133	// Result g
4134	MOVQ 72(DI), R11
4135	XORQ R9, R11
4136	MOVQ 80(DI), R12
4137	ROLQ $0x14, R11
4138	XORQ BX, R12
4139	ROLQ $0x03, R12
4140	MOVQ 24(DI), R10
4141	MOVQ R11, AX
4142	ORQ  R12, AX
4143	XORQ R8, R10
4144	MOVQ 128(DI), R13
4145	MOVQ 176(DI), R14
4146	ROLQ $0x1c, R10
4147	XORQ R10, AX
4148	MOVQ AX, 40(SP)
4149	XORQ AX, SI
4150	XORQ CX, R13
4151	ROLQ $0x2d, R13
4152	MOVQ R12, AX
4153	ANDQ R13, AX
4154	XORQ R11, AX
4155	MOVQ AX, 48(SP)
4156	XORQ AX, BP
4157	XORQ DX, R14
4158	ROLQ $0x3d, R14
4159	MOVQ R14, AX
4160	ORQ  R10, AX
4161	XORQ R13, AX
4162	MOVQ AX, 64(SP)
4163	ANDQ R11, R10
4164	XORQ R14, R10
4165	MOVQ R10, 72(SP)
4166	NOTQ R14
4167	XORQ R10, R15
4168	ORQ  R14, R13
4169	XORQ R12, R13
4170	MOVQ R13, 56(SP)
4171
4172	// Result k
4173	MOVQ 8(DI), R10
4174	MOVQ 56(DI), R11
4175	MOVQ 104(DI), R12
4176	MOVQ 152(DI), R13
4177	MOVQ 160(DI), R14
4178	XORQ DX, R11
4179	ROLQ $0x06, R11
4180	XORQ R8, R12
4181	ROLQ $0x19, R12
4182	MOVQ R11, AX
4183	ORQ  R12, AX
4184	XORQ CX, R10
4185	ROLQ $0x01, R10
4186	XORQ R10, AX
4187	MOVQ AX, 80(SP)
4188	XORQ AX, SI
4189	XORQ R9, R13
4190	ROLQ $0x08, R13
4191	MOVQ R12, AX
4192	ANDQ R13, AX
4193	XORQ R11, AX
4194	MOVQ AX, 88(SP)
4195	XORQ AX, BP
4196	XORQ BX, R14
4197	ROLQ $0x12, R14
4198	NOTQ R13
4199	MOVQ R13, AX
4200	ANDQ R14, AX
4201	XORQ R12, AX
4202	MOVQ AX, 96(SP)
4203	MOVQ R14, AX
4204	ORQ  R10, AX
4205	XORQ R13, AX
4206	MOVQ AX, 104(SP)
4207	ANDQ R11, R10
4208	XORQ R14, R10
4209	MOVQ R10, 112(SP)
4210	XORQ R10, R15
4211
4212	// Result m
4213	MOVQ 40(DI), R11
4214	XORQ BX, R11
4215	MOVQ 88(DI), R12
4216	ROLQ $0x24, R11
4217	XORQ CX, R12
4218	MOVQ 32(DI), R10
4219	ROLQ $0x0a, R12
4220	MOVQ R11, AX
4221	MOVQ 136(DI), R13
4222	ANDQ R12, AX
4223	XORQ R9, R10
4224	MOVQ 184(DI), R14
4225	ROLQ $0x1b, R10
4226	XORQ R10, AX
4227	MOVQ AX, 120(SP)
4228	XORQ AX, SI
4229	XORQ DX, R13
4230	ROLQ $0x0f, R13
4231	MOVQ R12, AX
4232	ORQ  R13, AX
4233	XORQ R11, AX
4234	MOVQ AX, 128(SP)
4235	XORQ AX, BP
4236	XORQ R8, R14
4237	ROLQ $0x38, R14
4238	NOTQ R13
4239	MOVQ R13, AX
4240	ORQ  R14, AX
4241	XORQ R12, AX
4242	MOVQ AX, 136(SP)
4243	ORQ  R10, R11
4244	XORQ R14, R11
4245	MOVQ R11, 152(SP)
4246	ANDQ R10, R14
4247	XORQ R13, R14
4248	MOVQ R14, 144(SP)
4249	XORQ R11, R15
4250
4251	// Result s
4252	MOVQ 16(DI), R10
4253	MOVQ 64(DI), R11
4254	MOVQ 112(DI), R12
4255	XORQ DX, R10
4256	MOVQ 120(DI), R13
4257	ROLQ $0x3e, R10
4258	XORQ R8, R11
4259	MOVQ 168(DI), R14
4260	ROLQ $0x37, R11
4261	XORQ R9, R12
4262	MOVQ R10, R9
4263	XORQ CX, R14
4264	ROLQ $0x02, R14
4265	ANDQ R11, R9
4266	XORQ R14, R9
4267	MOVQ R9, 192(SP)
4268	ROLQ $0x27, R12
4269	XORQ R9, R15
4270	NOTQ R11
4271	XORQ BX, R13
4272	MOVQ R11, BX
4273	ANDQ R12, BX
4274	XORQ R10, BX
4275	MOVQ BX, 160(SP)
4276	XORQ BX, SI
4277	ROLQ $0x29, R13
4278	MOVQ R12, CX
4279	ORQ  R13, CX
4280	XORQ R11, CX
4281	MOVQ CX, 168(SP)
4282	XORQ CX, BP
4283	MOVQ R13, DX
4284	MOVQ R14, R8
4285	ANDQ R14, DX
4286	ORQ  R10, R8
4287	XORQ R12, DX
4288	XORQ R13, R8
4289	MOVQ DX, 176(SP)
4290	MOVQ R8, 184(SP)
4291
4292	// Prepare round
4293	MOVQ BP, BX
4294	ROLQ $0x01, BX
4295	MOVQ 16(SP), R12
4296	XORQ 56(SP), DX
4297	XORQ R15, BX
4298	XORQ 96(SP), R12
4299	XORQ 136(SP), DX
4300	XORQ DX, R12
4301	MOVQ R12, CX
4302	ROLQ $0x01, CX
4303	MOVQ 24(SP), R13
4304	XORQ 64(SP), R8
4305	XORQ SI, CX
4306	XORQ 104(SP), R13
4307	XORQ 144(SP), R8
4308	XORQ R8, R13
4309	MOVQ R13, DX
4310	ROLQ $0x01, DX
4311	MOVQ R15, R8
4312	XORQ BP, DX
4313	ROLQ $0x01, R8
4314	MOVQ SI, R9
4315	XORQ R12, R8
4316	ROLQ $0x01, R9
4317
4318	// Result b
4319	MOVQ (SP), R10
4320	MOVQ 48(SP), R11
4321	XORQ R13, R9
4322	MOVQ 96(SP), R12
4323	MOVQ 144(SP), R13
4324	MOVQ 192(SP), R14
4325	XORQ CX, R11
4326	ROLQ $0x2c, R11
4327	XORQ DX, R12
4328	XORQ BX, R10
4329	ROLQ $0x2b, R12
4330	MOVQ R11, SI
4331	MOVQ $0x800000008000000a, AX
4332	ORQ  R12, SI
4333	XORQ R10, AX
4334	XORQ AX, SI
4335	MOVQ SI, (DI)
4336	XORQ R9, R14
4337	ROLQ $0x0e, R14
4338	MOVQ R10, R15
4339	ANDQ R11, R15
4340	XORQ R14, R15
4341	MOVQ R15, 32(DI)
4342	XORQ R8, R13
4343	ROLQ $0x15, R13
4344	MOVQ R13, AX
4345	ANDQ R14, AX
4346	XORQ R12, AX
4347	MOVQ AX, 16(DI)
4348	NOTQ R12
4349	ORQ  R10, R14
4350	ORQ  R13, R12
4351	XORQ R13, R14
4352	XORQ R11, R12
4353	MOVQ R14, 24(DI)
4354	MOVQ R12, 8(DI)
4355	MOVQ R12, BP
4356
4357	// Result g
4358	MOVQ 72(SP), R11
4359	XORQ R9, R11
4360	MOVQ 80(SP), R12
4361	ROLQ $0x14, R11
4362	XORQ BX, R12
4363	ROLQ $0x03, R12
4364	MOVQ 24(SP), R10
4365	MOVQ R11, AX
4366	ORQ  R12, AX
4367	XORQ R8, R10
4368	MOVQ 128(SP), R13
4369	MOVQ 176(SP), R14
4370	ROLQ $0x1c, R10
4371	XORQ R10, AX
4372	MOVQ AX, 40(DI)
4373	XORQ AX, SI
4374	XORQ CX, R13
4375	ROLQ $0x2d, R13
4376	MOVQ R12, AX
4377	ANDQ R13, AX
4378	XORQ R11, AX
4379	MOVQ AX, 48(DI)
4380	XORQ AX, BP
4381	XORQ DX, R14
4382	ROLQ $0x3d, R14
4383	MOVQ R14, AX
4384	ORQ  R10, AX
4385	XORQ R13, AX
4386	MOVQ AX, 64(DI)
4387	ANDQ R11, R10
4388	XORQ R14, R10
4389	MOVQ R10, 72(DI)
4390	NOTQ R14
4391	XORQ R10, R15
4392	ORQ  R14, R13
4393	XORQ R12, R13
4394	MOVQ R13, 56(DI)
4395
4396	// Result k
4397	MOVQ 8(SP), R10
4398	MOVQ 56(SP), R11
4399	MOVQ 104(SP), R12
4400	MOVQ 152(SP), R13
4401	MOVQ 160(SP), R14
4402	XORQ DX, R11
4403	ROLQ $0x06, R11
4404	XORQ R8, R12
4405	ROLQ $0x19, R12
4406	MOVQ R11, AX
4407	ORQ  R12, AX
4408	XORQ CX, R10
4409	ROLQ $0x01, R10
4410	XORQ R10, AX
4411	MOVQ AX, 80(DI)
4412	XORQ AX, SI
4413	XORQ R9, R13
4414	ROLQ $0x08, R13
4415	MOVQ R12, AX
4416	ANDQ R13, AX
4417	XORQ R11, AX
4418	MOVQ AX, 88(DI)
4419	XORQ AX, BP
4420	XORQ BX, R14
4421	ROLQ $0x12, R14
4422	NOTQ R13
4423	MOVQ R13, AX
4424	ANDQ R14, AX
4425	XORQ R12, AX
4426	MOVQ AX, 96(DI)
4427	MOVQ R14, AX
4428	ORQ  R10, AX
4429	XORQ R13, AX
4430	MOVQ AX, 104(DI)
4431	ANDQ R11, R10
4432	XORQ R14, R10
4433	MOVQ R10, 112(DI)
4434	XORQ R10, R15
4435
4436	// Result m
4437	MOVQ 40(SP), R11
4438	XORQ BX, R11
4439	MOVQ 88(SP), R12
4440	ROLQ $0x24, R11
4441	XORQ CX, R12
4442	MOVQ 32(SP), R10
4443	ROLQ $0x0a, R12
4444	MOVQ R11, AX
4445	MOVQ 136(SP), R13
4446	ANDQ R12, AX
4447	XORQ R9, R10
4448	MOVQ 184(SP), R14
4449	ROLQ $0x1b, R10
4450	XORQ R10, AX
4451	MOVQ AX, 120(DI)
4452	XORQ AX, SI
4453	XORQ DX, R13
4454	ROLQ $0x0f, R13
4455	MOVQ R12, AX
4456	ORQ  R13, AX
4457	XORQ R11, AX
4458	MOVQ AX, 128(DI)
4459	XORQ AX, BP
4460	XORQ R8, R14
4461	ROLQ $0x38, R14
4462	NOTQ R13
4463	MOVQ R13, AX
4464	ORQ  R14, AX
4465	XORQ R12, AX
4466	MOVQ AX, 136(DI)
4467	ORQ  R10, R11
4468	XORQ R14, R11
4469	MOVQ R11, 152(DI)
4470	ANDQ R10, R14
4471	XORQ R13, R14
4472	MOVQ R14, 144(DI)
4473	XORQ R11, R15
4474
4475	// Result s
4476	MOVQ 16(SP), R10
4477	MOVQ 64(SP), R11
4478	MOVQ 112(SP), R12
4479	XORQ DX, R10
4480	MOVQ 120(SP), R13
4481	ROLQ $0x3e, R10
4482	XORQ R8, R11
4483	MOVQ 168(SP), R14
4484	ROLQ $0x37, R11
4485	XORQ R9, R12
4486	MOVQ R10, R9
4487	XORQ CX, R14
4488	ROLQ $0x02, R14
4489	ANDQ R11, R9
4490	XORQ R14, R9
4491	MOVQ R9, 192(DI)
4492	ROLQ $0x27, R12
4493	XORQ R9, R15
4494	NOTQ R11
4495	XORQ BX, R13
4496	MOVQ R11, BX
4497	ANDQ R12, BX
4498	XORQ R10, BX
4499	MOVQ BX, 160(DI)
4500	XORQ BX, SI
4501	ROLQ $0x29, R13
4502	MOVQ R12, CX
4503	ORQ  R13, CX
4504	XORQ R11, CX
4505	MOVQ CX, 168(DI)
4506	XORQ CX, BP
4507	MOVQ R13, DX
4508	MOVQ R14, R8
4509	ANDQ R14, DX
4510	ORQ  R10, R8
4511	XORQ R12, DX
4512	XORQ R13, R8
4513	MOVQ DX, 176(DI)
4514	MOVQ R8, 184(DI)
4515
4516	// Prepare round
4517	MOVQ BP, BX
4518	ROLQ $0x01, BX
4519	MOVQ 16(DI), R12
4520	XORQ 56(DI), DX
4521	XORQ R15, BX
4522	XORQ 96(DI), R12
4523	XORQ 136(DI), DX
4524	XORQ DX, R12
4525	MOVQ R12, CX
4526	ROLQ $0x01, CX
4527	MOVQ 24(DI), R13
4528	XORQ 64(DI), R8
4529	XORQ SI, CX
4530	XORQ 104(DI), R13
4531	XORQ 144(DI), R8
4532	XORQ R8, R13
4533	MOVQ R13, DX
4534	ROLQ $0x01, DX
4535	MOVQ R15, R8
4536	XORQ BP, DX
4537	ROLQ $0x01, R8
4538	MOVQ SI, R9
4539	XORQ R12, R8
4540	ROLQ $0x01, R9
4541
4542	// Result b
4543	MOVQ (DI), R10
4544	MOVQ 48(DI), R11
4545	XORQ R13, R9
4546	MOVQ 96(DI), R12
4547	MOVQ 144(DI), R13
4548	MOVQ 192(DI), R14
4549	XORQ CX, R11
4550	ROLQ $0x2c, R11
4551	XORQ DX, R12
4552	XORQ BX, R10
4553	ROLQ $0x2b, R12
4554	MOVQ R11, SI
4555	MOVQ $0x8000000080008081, AX
4556	ORQ  R12, SI
4557	XORQ R10, AX
4558	XORQ AX, SI
4559	MOVQ SI, (SP)
4560	XORQ R9, R14
4561	ROLQ $0x0e, R14
4562	MOVQ R10, R15
4563	ANDQ R11, R15
4564	XORQ R14, R15
4565	MOVQ R15, 32(SP)
4566	XORQ R8, R13
4567	ROLQ $0x15, R13
4568	MOVQ R13, AX
4569	ANDQ R14, AX
4570	XORQ R12, AX
4571	MOVQ AX, 16(SP)
4572	NOTQ R12
4573	ORQ  R10, R14
4574	ORQ  R13, R12
4575	XORQ R13, R14
4576	XORQ R11, R12
4577	MOVQ R14, 24(SP)
4578	MOVQ R12, 8(SP)
4579	MOVQ R12, BP
4580
4581	// Result g
4582	MOVQ 72(DI), R11
4583	XORQ R9, R11
4584	MOVQ 80(DI), R12
4585	ROLQ $0x14, R11
4586	XORQ BX, R12
4587	ROLQ $0x03, R12
4588	MOVQ 24(DI), R10
4589	MOVQ R11, AX
4590	ORQ  R12, AX
4591	XORQ R8, R10
4592	MOVQ 128(DI), R13
4593	MOVQ 176(DI), R14
4594	ROLQ $0x1c, R10
4595	XORQ R10, AX
4596	MOVQ AX, 40(SP)
4597	XORQ AX, SI
4598	XORQ CX, R13
4599	ROLQ $0x2d, R13
4600	MOVQ R12, AX
4601	ANDQ R13, AX
4602	XORQ R11, AX
4603	MOVQ AX, 48(SP)
4604	XORQ AX, BP
4605	XORQ DX, R14
4606	ROLQ $0x3d, R14
4607	MOVQ R14, AX
4608	ORQ  R10, AX
4609	XORQ R13, AX
4610	MOVQ AX, 64(SP)
4611	ANDQ R11, R10
4612	XORQ R14, R10
4613	MOVQ R10, 72(SP)
4614	NOTQ R14
4615	XORQ R10, R15
4616	ORQ  R14, R13
4617	XORQ R12, R13
4618	MOVQ R13, 56(SP)
4619
4620	// Result k
4621	MOVQ 8(DI), R10
4622	MOVQ 56(DI), R11
4623	MOVQ 104(DI), R12
4624	MOVQ 152(DI), R13
4625	MOVQ 160(DI), R14
4626	XORQ DX, R11
4627	ROLQ $0x06, R11
4628	XORQ R8, R12
4629	ROLQ $0x19, R12
4630	MOVQ R11, AX
4631	ORQ  R12, AX
4632	XORQ CX, R10
4633	ROLQ $0x01, R10
4634	XORQ R10, AX
4635	MOVQ AX, 80(SP)
4636	XORQ AX, SI
4637	XORQ R9, R13
4638	ROLQ $0x08, R13
4639	MOVQ R12, AX
4640	ANDQ R13, AX
4641	XORQ R11, AX
4642	MOVQ AX, 88(SP)
4643	XORQ AX, BP
4644	XORQ BX, R14
4645	ROLQ $0x12, R14
4646	NOTQ R13
4647	MOVQ R13, AX
4648	ANDQ R14, AX
4649	XORQ R12, AX
4650	MOVQ AX, 96(SP)
4651	MOVQ R14, AX
4652	ORQ  R10, AX
4653	XORQ R13, AX
4654	MOVQ AX, 104(SP)
4655	ANDQ R11, R10
4656	XORQ R14, R10
4657	MOVQ R10, 112(SP)
4658	XORQ R10, R15
4659
4660	// Result m
4661	MOVQ 40(DI), R11
4662	XORQ BX, R11
4663	MOVQ 88(DI), R12
4664	ROLQ $0x24, R11
4665	XORQ CX, R12
4666	MOVQ 32(DI), R10
4667	ROLQ $0x0a, R12
4668	MOVQ R11, AX
4669	MOVQ 136(DI), R13
4670	ANDQ R12, AX
4671	XORQ R9, R10
4672	MOVQ 184(DI), R14
4673	ROLQ $0x1b, R10
4674	XORQ R10, AX
4675	MOVQ AX, 120(SP)
4676	XORQ AX, SI
4677	XORQ DX, R13
4678	ROLQ $0x0f, R13
4679	MOVQ R12, AX
4680	ORQ  R13, AX
4681	XORQ R11, AX
4682	MOVQ AX, 128(SP)
4683	XORQ AX, BP
4684	XORQ R8, R14
4685	ROLQ $0x38, R14
4686	NOTQ R13
4687	MOVQ R13, AX
4688	ORQ  R14, AX
4689	XORQ R12, AX
4690	MOVQ AX, 136(SP)
4691	ORQ  R10, R11
4692	XORQ R14, R11
4693	MOVQ R11, 152(SP)
4694	ANDQ R10, R14
4695	XORQ R13, R14
4696	MOVQ R14, 144(SP)
4697	XORQ R11, R15
4698
4699	// Result s
4700	MOVQ 16(DI), R10
4701	MOVQ 64(DI), R11
4702	MOVQ 112(DI), R12
4703	XORQ DX, R10
4704	MOVQ 120(DI), R13
4705	ROLQ $0x3e, R10
4706	XORQ R8, R11
4707	MOVQ 168(DI), R14
4708	ROLQ $0x37, R11
4709	XORQ R9, R12
4710	MOVQ R10, R9
4711	XORQ CX, R14
4712	ROLQ $0x02, R14
4713	ANDQ R11, R9
4714	XORQ R14, R9
4715	MOVQ R9, 192(SP)
4716	ROLQ $0x27, R12
4717	XORQ R9, R15
4718	NOTQ R11
4719	XORQ BX, R13
4720	MOVQ R11, BX
4721	ANDQ R12, BX
4722	XORQ R10, BX
4723	MOVQ BX, 160(SP)
4724	XORQ BX, SI
4725	ROLQ $0x29, R13
4726	MOVQ R12, CX
4727	ORQ  R13, CX
4728	XORQ R11, CX
4729	MOVQ CX, 168(SP)
4730	XORQ CX, BP
4731	MOVQ R13, DX
4732	MOVQ R14, R8
4733	ANDQ R14, DX
4734	ORQ  R10, R8
4735	XORQ R12, DX
4736	XORQ R13, R8
4737	MOVQ DX, 176(SP)
4738	MOVQ R8, 184(SP)
4739
4740	// Prepare round
4741	MOVQ BP, BX
4742	ROLQ $0x01, BX
4743	MOVQ 16(SP), R12
4744	XORQ 56(SP), DX
4745	XORQ R15, BX
4746	XORQ 96(SP), R12
4747	XORQ 136(SP), DX
4748	XORQ DX, R12
4749	MOVQ R12, CX
4750	ROLQ $0x01, CX
4751	MOVQ 24(SP), R13
4752	XORQ 64(SP), R8
4753	XORQ SI, CX
4754	XORQ 104(SP), R13
4755	XORQ 144(SP), R8
4756	XORQ R8, R13
4757	MOVQ R13, DX
4758	ROLQ $0x01, DX
4759	MOVQ R15, R8
4760	XORQ BP, DX
4761	ROLQ $0x01, R8
4762	MOVQ SI, R9
4763	XORQ R12, R8
4764	ROLQ $0x01, R9
4765
4766	// Result b
4767	MOVQ (SP), R10
4768	MOVQ 48(SP), R11
4769	XORQ R13, R9
4770	MOVQ 96(SP), R12
4771	MOVQ 144(SP), R13
4772	MOVQ 192(SP), R14
4773	XORQ CX, R11
4774	ROLQ $0x2c, R11
4775	XORQ DX, R12
4776	XORQ BX, R10
4777	ROLQ $0x2b, R12
4778	MOVQ R11, SI
4779	MOVQ $0x8000000000008080, AX
4780	ORQ  R12, SI
4781	XORQ R10, AX
4782	XORQ AX, SI
4783	MOVQ SI, (DI)
4784	XORQ R9, R14
4785	ROLQ $0x0e, R14
4786	MOVQ R10, R15
4787	ANDQ R11, R15
4788	XORQ R14, R15
4789	MOVQ R15, 32(DI)
4790	XORQ R8, R13
4791	ROLQ $0x15, R13
4792	MOVQ R13, AX
4793	ANDQ R14, AX
4794	XORQ R12, AX
4795	MOVQ AX, 16(DI)
4796	NOTQ R12
4797	ORQ  R10, R14
4798	ORQ  R13, R12
4799	XORQ R13, R14
4800	XORQ R11, R12
4801	MOVQ R14, 24(DI)
4802	MOVQ R12, 8(DI)
4803	MOVQ R12, BP
4804
4805	// Result g
4806	MOVQ 72(SP), R11
4807	XORQ R9, R11
4808	MOVQ 80(SP), R12
4809	ROLQ $0x14, R11
4810	XORQ BX, R12
4811	ROLQ $0x03, R12
4812	MOVQ 24(SP), R10
4813	MOVQ R11, AX
4814	ORQ  R12, AX
4815	XORQ R8, R10
4816	MOVQ 128(SP), R13
4817	MOVQ 176(SP), R14
4818	ROLQ $0x1c, R10
4819	XORQ R10, AX
4820	MOVQ AX, 40(DI)
4821	XORQ AX, SI
4822	XORQ CX, R13
4823	ROLQ $0x2d, R13
4824	MOVQ R12, AX
4825	ANDQ R13, AX
4826	XORQ R11, AX
4827	MOVQ AX, 48(DI)
4828	XORQ AX, BP
4829	XORQ DX, R14
4830	ROLQ $0x3d, R14
4831	MOVQ R14, AX
4832	ORQ  R10, AX
4833	XORQ R13, AX
4834	MOVQ AX, 64(DI)
4835	ANDQ R11, R10
4836	XORQ R14, R10
4837	MOVQ R10, 72(DI)
4838	NOTQ R14
4839	XORQ R10, R15
4840	ORQ  R14, R13
4841	XORQ R12, R13
4842	MOVQ R13, 56(DI)
4843
4844	// Result k
4845	MOVQ 8(SP), R10
4846	MOVQ 56(SP), R11
4847	MOVQ 104(SP), R12
4848	MOVQ 152(SP), R13
4849	MOVQ 160(SP), R14
4850	XORQ DX, R11
4851	ROLQ $0x06, R11
4852	XORQ R8, R12
4853	ROLQ $0x19, R12
4854	MOVQ R11, AX
4855	ORQ  R12, AX
4856	XORQ CX, R10
4857	ROLQ $0x01, R10
4858	XORQ R10, AX
4859	MOVQ AX, 80(DI)
4860	XORQ AX, SI
4861	XORQ R9, R13
4862	ROLQ $0x08, R13
4863	MOVQ R12, AX
4864	ANDQ R13, AX
4865	XORQ R11, AX
4866	MOVQ AX, 88(DI)
4867	XORQ AX, BP
4868	XORQ BX, R14
4869	ROLQ $0x12, R14
4870	NOTQ R13
4871	MOVQ R13, AX
4872	ANDQ R14, AX
4873	XORQ R12, AX
4874	MOVQ AX, 96(DI)
4875	MOVQ R14, AX
4876	ORQ  R10, AX
4877	XORQ R13, AX
4878	MOVQ AX, 104(DI)
4879	ANDQ R11, R10
4880	XORQ R14, R10
4881	MOVQ R10, 112(DI)
4882	XORQ R10, R15
4883
4884	// Result m
4885	MOVQ 40(SP), R11
4886	XORQ BX, R11
4887	MOVQ 88(SP), R12
4888	ROLQ $0x24, R11
4889	XORQ CX, R12
4890	MOVQ 32(SP), R10
4891	ROLQ $0x0a, R12
4892	MOVQ R11, AX
4893	MOVQ 136(SP), R13
4894	ANDQ R12, AX
4895	XORQ R9, R10
4896	MOVQ 184(SP), R14
4897	ROLQ $0x1b, R10
4898	XORQ R10, AX
4899	MOVQ AX, 120(DI)
4900	XORQ AX, SI
4901	XORQ DX, R13
4902	ROLQ $0x0f, R13
4903	MOVQ R12, AX
4904	ORQ  R13, AX
4905	XORQ R11, AX
4906	MOVQ AX, 128(DI)
4907	XORQ AX, BP
4908	XORQ R8, R14
4909	ROLQ $0x38, R14
4910	NOTQ R13
4911	MOVQ R13, AX
4912	ORQ  R14, AX
4913	XORQ R12, AX
4914	MOVQ AX, 136(DI)
4915	ORQ  R10, R11
4916	XORQ R14, R11
4917	MOVQ R11, 152(DI)
4918	ANDQ R10, R14
4919	XORQ R13, R14
4920	MOVQ R14, 144(DI)
4921	XORQ R11, R15
4922
4923	// Result s
4924	MOVQ 16(SP), R10
4925	MOVQ 64(SP), R11
4926	MOVQ 112(SP), R12
4927	XORQ DX, R10
4928	MOVQ 120(SP), R13
4929	ROLQ $0x3e, R10
4930	XORQ R8, R11
4931	MOVQ 168(SP), R14
4932	ROLQ $0x37, R11
4933	XORQ R9, R12
4934	MOVQ R10, R9
4935	XORQ CX, R14
4936	ROLQ $0x02, R14
4937	ANDQ R11, R9
4938	XORQ R14, R9
4939	MOVQ R9, 192(DI)
4940	ROLQ $0x27, R12
4941	XORQ R9, R15
4942	NOTQ R11
4943	XORQ BX, R13
4944	MOVQ R11, BX
4945	ANDQ R12, BX
4946	XORQ R10, BX
4947	MOVQ BX, 160(DI)
4948	XORQ BX, SI
4949	ROLQ $0x29, R13
4950	MOVQ R12, CX
4951	ORQ  R13, CX
4952	XORQ R11, CX
4953	MOVQ CX, 168(DI)
4954	XORQ CX, BP
4955	MOVQ R13, DX
4956	MOVQ R14, R8
4957	ANDQ R14, DX
4958	ORQ  R10, R8
4959	XORQ R12, DX
4960	XORQ R13, R8
4961	MOVQ DX, 176(DI)
4962	MOVQ R8, 184(DI)
4963
4964	// Prepare round
4965	MOVQ BP, BX
4966	ROLQ $0x01, BX
4967	MOVQ 16(DI), R12
4968	XORQ 56(DI), DX
4969	XORQ R15, BX
4970	XORQ 96(DI), R12
4971	XORQ 136(DI), DX
4972	XORQ DX, R12
4973	MOVQ R12, CX
4974	ROLQ $0x01, CX
4975	MOVQ 24(DI), R13
4976	XORQ 64(DI), R8
4977	XORQ SI, CX
4978	XORQ 104(DI), R13
4979	XORQ 144(DI), R8
4980	XORQ R8, R13
4981	MOVQ R13, DX
4982	ROLQ $0x01, DX
4983	MOVQ R15, R8
4984	XORQ BP, DX
4985	ROLQ $0x01, R8
4986	MOVQ SI, R9
4987	XORQ R12, R8
4988	ROLQ $0x01, R9
4989
4990	// Result b
4991	MOVQ (DI), R10
4992	MOVQ 48(DI), R11
4993	XORQ R13, R9
4994	MOVQ 96(DI), R12
4995	MOVQ 144(DI), R13
4996	MOVQ 192(DI), R14
4997	XORQ CX, R11
4998	ROLQ $0x2c, R11
4999	XORQ DX, R12
5000	XORQ BX, R10
5001	ROLQ $0x2b, R12
5002	MOVQ R11, SI
5003	MOVQ $0x0000000080000001, AX
5004	ORQ  R12, SI
5005	XORQ R10, AX
5006	XORQ AX, SI
5007	MOVQ SI, (SP)
5008	XORQ R9, R14
5009	ROLQ $0x0e, R14
5010	MOVQ R10, R15
5011	ANDQ R11, R15
5012	XORQ R14, R15
5013	MOVQ R15, 32(SP)
5014	XORQ R8, R13
5015	ROLQ $0x15, R13
5016	MOVQ R13, AX
5017	ANDQ R14, AX
5018	XORQ R12, AX
5019	MOVQ AX, 16(SP)
5020	NOTQ R12
5021	ORQ  R10, R14
5022	ORQ  R13, R12
5023	XORQ R13, R14
5024	XORQ R11, R12
5025	MOVQ R14, 24(SP)
5026	MOVQ R12, 8(SP)
5027	MOVQ R12, BP
5028
5029	// Result g
5030	MOVQ 72(DI), R11
5031	XORQ R9, R11
5032	MOVQ 80(DI), R12
5033	ROLQ $0x14, R11
5034	XORQ BX, R12
5035	ROLQ $0x03, R12
5036	MOVQ 24(DI), R10
5037	MOVQ R11, AX
5038	ORQ  R12, AX
5039	XORQ R8, R10
5040	MOVQ 128(DI), R13
5041	MOVQ 176(DI), R14
5042	ROLQ $0x1c, R10
5043	XORQ R10, AX
5044	MOVQ AX, 40(SP)
5045	XORQ AX, SI
5046	XORQ CX, R13
5047	ROLQ $0x2d, R13
5048	MOVQ R12, AX
5049	ANDQ R13, AX
5050	XORQ R11, AX
5051	MOVQ AX, 48(SP)
5052	XORQ AX, BP
5053	XORQ DX, R14
5054	ROLQ $0x3d, R14
5055	MOVQ R14, AX
5056	ORQ  R10, AX
5057	XORQ R13, AX
5058	MOVQ AX, 64(SP)
5059	ANDQ R11, R10
5060	XORQ R14, R10
5061	MOVQ R10, 72(SP)
5062	NOTQ R14
5063	XORQ R10, R15
5064	ORQ  R14, R13
5065	XORQ R12, R13
5066	MOVQ R13, 56(SP)
5067
5068	// Result k
5069	MOVQ 8(DI), R10
5070	MOVQ 56(DI), R11
5071	MOVQ 104(DI), R12
5072	MOVQ 152(DI), R13
5073	MOVQ 160(DI), R14
5074	XORQ DX, R11
5075	ROLQ $0x06, R11
5076	XORQ R8, R12
5077	ROLQ $0x19, R12
5078	MOVQ R11, AX
5079	ORQ  R12, AX
5080	XORQ CX, R10
5081	ROLQ $0x01, R10
5082	XORQ R10, AX
5083	MOVQ AX, 80(SP)
5084	XORQ AX, SI
5085	XORQ R9, R13
5086	ROLQ $0x08, R13
5087	MOVQ R12, AX
5088	ANDQ R13, AX
5089	XORQ R11, AX
5090	MOVQ AX, 88(SP)
5091	XORQ AX, BP
5092	XORQ BX, R14
5093	ROLQ $0x12, R14
5094	NOTQ R13
5095	MOVQ R13, AX
5096	ANDQ R14, AX
5097	XORQ R12, AX
5098	MOVQ AX, 96(SP)
5099	MOVQ R14, AX
5100	ORQ  R10, AX
5101	XORQ R13, AX
5102	MOVQ AX, 104(SP)
5103	ANDQ R11, R10
5104	XORQ R14, R10
5105	MOVQ R10, 112(SP)
5106	XORQ R10, R15
5107
5108	// Result m
5109	MOVQ 40(DI), R11
5110	XORQ BX, R11
5111	MOVQ 88(DI), R12
5112	ROLQ $0x24, R11
5113	XORQ CX, R12
5114	MOVQ 32(DI), R10
5115	ROLQ $0x0a, R12
5116	MOVQ R11, AX
5117	MOVQ 136(DI), R13
5118	ANDQ R12, AX
5119	XORQ R9, R10
5120	MOVQ 184(DI), R14
5121	ROLQ $0x1b, R10
5122	XORQ R10, AX
5123	MOVQ AX, 120(SP)
5124	XORQ AX, SI
5125	XORQ DX, R13
5126	ROLQ $0x0f, R13
5127	MOVQ R12, AX
5128	ORQ  R13, AX
5129	XORQ R11, AX
5130	MOVQ AX, 128(SP)
5131	XORQ AX, BP
5132	XORQ R8, R14
5133	ROLQ $0x38, R14
5134	NOTQ R13
5135	MOVQ R13, AX
5136	ORQ  R14, AX
5137	XORQ R12, AX
5138	MOVQ AX, 136(SP)
5139	ORQ  R10, R11
5140	XORQ R14, R11
5141	MOVQ R11, 152(SP)
5142	ANDQ R10, R14
5143	XORQ R13, R14
5144	MOVQ R14, 144(SP)
5145	XORQ R11, R15
5146
5147	// Result s
5148	MOVQ 16(DI), R10
5149	MOVQ 64(DI), R11
5150	MOVQ 112(DI), R12
5151	XORQ DX, R10
5152	MOVQ 120(DI), R13
5153	ROLQ $0x3e, R10
5154	XORQ R8, R11
5155	MOVQ 168(DI), R14
5156	ROLQ $0x37, R11
5157	XORQ R9, R12
5158	MOVQ R10, R9
5159	XORQ CX, R14
5160	ROLQ $0x02, R14
5161	ANDQ R11, R9
5162	XORQ R14, R9
5163	MOVQ R9, 192(SP)
5164	ROLQ $0x27, R12
5165	XORQ R9, R15
5166	NOTQ R11
5167	XORQ BX, R13
5168	MOVQ R11, BX
5169	ANDQ R12, BX
5170	XORQ R10, BX
5171	MOVQ BX, 160(SP)
5172	XORQ BX, SI
5173	ROLQ $0x29, R13
5174	MOVQ R12, CX
5175	ORQ  R13, CX
5176	XORQ R11, CX
5177	MOVQ CX, 168(SP)
5178	XORQ CX, BP
5179	MOVQ R13, DX
5180	MOVQ R14, R8
5181	ANDQ R14, DX
5182	ORQ  R10, R8
5183	XORQ R12, DX
5184	XORQ R13, R8
5185	MOVQ DX, 176(SP)
5186	MOVQ R8, 184(SP)
5187
5188	// Prepare round
5189	MOVQ BP, BX
5190	ROLQ $0x01, BX
5191	MOVQ 16(SP), R12
5192	XORQ 56(SP), DX
5193	XORQ R15, BX
5194	XORQ 96(SP), R12
5195	XORQ 136(SP), DX
5196	XORQ DX, R12
5197	MOVQ R12, CX
5198	ROLQ $0x01, CX
5199	MOVQ 24(SP), R13
5200	XORQ 64(SP), R8
5201	XORQ SI, CX
5202	XORQ 104(SP), R13
5203	XORQ 144(SP), R8
5204	XORQ R8, R13
5205	MOVQ R13, DX
5206	ROLQ $0x01, DX
5207	MOVQ R15, R8
5208	XORQ BP, DX
5209	ROLQ $0x01, R8
5210	MOVQ SI, R9
5211	XORQ R12, R8
5212	ROLQ $0x01, R9
5213
5214	// Result b
5215	MOVQ (SP), R10
5216	MOVQ 48(SP), R11
5217	XORQ R13, R9
5218	MOVQ 96(SP), R12
5219	MOVQ 144(SP), R13
5220	MOVQ 192(SP), R14
5221	XORQ CX, R11
5222	ROLQ $0x2c, R11
5223	XORQ DX, R12
5224	XORQ BX, R10
5225	ROLQ $0x2b, R12
5226	MOVQ R11, SI
5227	MOVQ $0x8000000080008008, AX
5228	ORQ  R12, SI
5229	XORQ R10, AX
5230	XORQ AX, SI
5231	MOVQ SI, (DI)
5232	XORQ R9, R14
5233	ROLQ $0x0e, R14
5234	MOVQ R10, R15
5235	ANDQ R11, R15
5236	XORQ R14, R15
5237	MOVQ R15, 32(DI)
5238	XORQ R8, R13
5239	ROLQ $0x15, R13
5240	MOVQ R13, AX
5241	ANDQ R14, AX
5242	XORQ R12, AX
5243	MOVQ AX, 16(DI)
5244	NOTQ R12
5245	ORQ  R10, R14
5246	ORQ  R13, R12
5247	XORQ R13, R14
5248	XORQ R11, R12
5249	MOVQ R14, 24(DI)
5250	MOVQ R12, 8(DI)
5251	NOP
5252
5253	// Result g
5254	MOVQ 72(SP), R11
5255	XORQ R9, R11
5256	MOVQ 80(SP), R12
5257	ROLQ $0x14, R11
5258	XORQ BX, R12
5259	ROLQ $0x03, R12
5260	MOVQ 24(SP), R10
5261	MOVQ R11, AX
5262	ORQ  R12, AX
5263	XORQ R8, R10
5264	MOVQ 128(SP), R13
5265	MOVQ 176(SP), R14
5266	ROLQ $0x1c, R10
5267	XORQ R10, AX
5268	MOVQ AX, 40(DI)
5269	NOP
5270	XORQ CX, R13
5271	ROLQ $0x2d, R13
5272	MOVQ R12, AX
5273	ANDQ R13, AX
5274	XORQ R11, AX
5275	MOVQ AX, 48(DI)
5276	NOP
5277	XORQ DX, R14
5278	ROLQ $0x3d, R14
5279	MOVQ R14, AX
5280	ORQ  R10, AX
5281	XORQ R13, AX
5282	MOVQ AX, 64(DI)
5283	ANDQ R11, R10
5284	XORQ R14, R10
5285	MOVQ R10, 72(DI)
5286	NOTQ R14
5287	NOP
5288	ORQ  R14, R13
5289	XORQ R12, R13
5290	MOVQ R13, 56(DI)
5291
5292	// Result k
5293	MOVQ 8(SP), R10
5294	MOVQ 56(SP), R11
5295	MOVQ 104(SP), R12
5296	MOVQ 152(SP), R13
5297	MOVQ 160(SP), R14
5298	XORQ DX, R11
5299	ROLQ $0x06, R11
5300	XORQ R8, R12
5301	ROLQ $0x19, R12
5302	MOVQ R11, AX
5303	ORQ  R12, AX
5304	XORQ CX, R10
5305	ROLQ $0x01, R10
5306	XORQ R10, AX
5307	MOVQ AX, 80(DI)
5308	NOP
5309	XORQ R9, R13
5310	ROLQ $0x08, R13
5311	MOVQ R12, AX
5312	ANDQ R13, AX
5313	XORQ R11, AX
5314	MOVQ AX, 88(DI)
5315	NOP
5316	XORQ BX, R14
5317	ROLQ $0x12, R14
5318	NOTQ R13
5319	MOVQ R13, AX
5320	ANDQ R14, AX
5321	XORQ R12, AX
5322	MOVQ AX, 96(DI)
5323	MOVQ R14, AX
5324	ORQ  R10, AX
5325	XORQ R13, AX
5326	MOVQ AX, 104(DI)
5327	ANDQ R11, R10
5328	XORQ R14, R10
5329	MOVQ R10, 112(DI)
5330	NOP
5331
5332	// Result m
5333	MOVQ 40(SP), R11
5334	XORQ BX, R11
5335	MOVQ 88(SP), R12
5336	ROLQ $0x24, R11
5337	XORQ CX, R12
5338	MOVQ 32(SP), R10
5339	ROLQ $0x0a, R12
5340	MOVQ R11, AX
5341	MOVQ 136(SP), R13
5342	ANDQ R12, AX
5343	XORQ R9, R10
5344	MOVQ 184(SP), R14
5345	ROLQ $0x1b, R10
5346	XORQ R10, AX
5347	MOVQ AX, 120(DI)
5348	NOP
5349	XORQ DX, R13
5350	ROLQ $0x0f, R13
5351	MOVQ R12, AX
5352	ORQ  R13, AX
5353	XORQ R11, AX
5354	MOVQ AX, 128(DI)
5355	NOP
5356	XORQ R8, R14
5357	ROLQ $0x38, R14
5358	NOTQ R13
5359	MOVQ R13, AX
5360	ORQ  R14, AX
5361	XORQ R12, AX
5362	MOVQ AX, 136(DI)
5363	ORQ  R10, R11
5364	XORQ R14, R11
5365	MOVQ R11, 152(DI)
5366	ANDQ R10, R14
5367	XORQ R13, R14
5368	MOVQ R14, 144(DI)
5369	NOP
5370
5371	// Result s
5372	MOVQ 16(SP), R10
5373	MOVQ 64(SP), R11
5374	MOVQ 112(SP), R12
5375	XORQ DX, R10
5376	MOVQ 120(SP), R13
5377	ROLQ $0x3e, R10
5378	XORQ R8, R11
5379	MOVQ 168(SP), R14
5380	ROLQ $0x37, R11
5381	XORQ R9, R12
5382	MOVQ R10, R9
5383	XORQ CX, R14
5384	ROLQ $0x02, R14
5385	ANDQ R11, R9
5386	XORQ R14, R9
5387	MOVQ R9, 192(DI)
5388	ROLQ $0x27, R12
5389	NOP
5390	NOTQ R11
5391	XORQ BX, R13
5392	MOVQ R11, BX
5393	ANDQ R12, BX
5394	XORQ R10, BX
5395	MOVQ BX, 160(DI)
5396	NOP
5397	ROLQ $0x29, R13
5398	MOVQ R12, CX
5399	ORQ  R13, CX
5400	XORQ R11, CX
5401	MOVQ CX, 168(DI)
5402	NOP
5403	MOVQ R13, DX
5404	MOVQ R14, R8
5405	ANDQ R14, DX
5406	ORQ  R10, R8
5407	XORQ R12, DX
5408	XORQ R13, R8
5409	MOVQ DX, 176(DI)
5410	MOVQ R8, 184(DI)
5411
5412	// Revert the internal state to the user state
5413	NOTQ 8(DI)
5414	NOTQ 16(DI)
5415	NOTQ 64(DI)
5416	NOTQ 96(DI)
5417	NOTQ 136(DI)
5418	NOTQ 160(DI)
5419	RET