use core::arch::asm;
use core::mem::MaybeUninit;
#[inline(never)]
pub unsafe fn double_adx(buf: &mut [MaybeUninit<u64>; 60]) {
unsafe {
asm!(
".p2align 6",
"mov rdx, qword ptr [{s} + 64]",
"mulx {t2}, {t1}, qword ptr [{s} + 72]",
"mulx {t3}, rax, qword ptr [{s} + 80]",
"add {t2}, rax",
"mulx {t4}, rax, qword ptr [{s} + 88]",
"adc {t3}, rax",
"adc {t4}, 0",
"mov rdx, qword ptr [{s} + 72]",
"xor {t5:e}, {t5:e}",
"mulx {c}, rax, qword ptr [{s} + 80]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 88]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mov eax, 0",
"adcx {t5}, rax",
"mov rdx, qword ptr [{s} + 80]",
"mulx {t6}, rax, qword ptr [{s} + 88]",
"add {t5}, rax",
"adc {t6}, 0",
"xor {t7:e}, {t7:e}",
"add {t1}, {t1}",
"adc {t2}, {t2}",
"adc {t3}, {t3}",
"adc {t4}, {t4}",
"adc {t5}, {t5}",
"adc {t6}, {t6}",
"adc {t7}, 0",
"mov rdx, qword ptr [{s} + 64]",
"mulx {c}, {t0}, rdx",
"add {t1}, {c}",
"mov rdx, qword ptr [{s} + 72]",
"mulx {c}, rax, rdx",
"adc {t2}, rax",
"adc {t3}, {c}",
"mov rdx, qword ptr [{s} + 80]",
"mulx {c}, rax, rdx",
"adc {t4}, rax",
"adc {t5}, {c}",
"mov rdx, qword ptr [{s} + 88]",
"mulx {c}, rax, rdx",
"adc {t6}, rax",
"adc {t7}, {c}",
"mov rax, {t0}",
"shl rax, 32",
"mov rdx, {t0}",
"shr rdx, 32",
"mov {c}, {t0}",
"sub {c}, rax",
"sbb {t0}, rdx",
"add {t1}, rax",
"adc {t2}, rdx",
"adc {t3}, {c}",
"adc {t0}, 0",
"mov rax, {t1}",
"shl rax, 32",
"mov rdx, {t1}",
"shr rdx, 32",
"mov {c}, {t1}",
"sub {c}, rax",
"sbb {t1}, rdx",
"add {t2}, rax",
"adc {t3}, rdx",
"adc {t0}, {c}",
"adc {t1}, 0",
"mov rax, {t2}",
"shl rax, 32",
"mov rdx, {t2}",
"shr rdx, 32",
"mov {c}, {t2}",
"sub {c}, rax",
"sbb {t2}, rdx",
"add {t3}, rax",
"adc {t0}, rdx",
"adc {t1}, {c}",
"adc {t2}, 0",
"mov rax, {t3}",
"shl rax, 32",
"mov rdx, {t3}",
"shr rdx, 32",
"mov {c}, {t3}",
"sub {c}, rax",
"sbb {t3}, rdx",
"add {t0}, rax",
"adc {t1}, rdx",
"adc {t2}, {c}",
"adc {t3}, 0",
"xor {c:e}, {c:e}",
"add {t4}, {t0}",
"adc {t5}, {t1}",
"adc {t6}, {t2}",
"adc {t7}, {t3}",
"adc {c}, 0",
"mov rax, {t4}",
"mov rdx, {t5}",
"mov {t2}, {t6}",
"mov {t3}, {t7}",
"mov {t0:e}, 0xffffffff",
"mov {t1}, 0xffffffff00000001",
"sub rax, -1",
"sbb rdx, {t0}",
"sbb {t2}, 0",
"sbb {t3}, {t1}",
"sbb {c}, 0",
"cmovc rax, {t4}",
"cmovc rdx, {t5}",
"cmovc {t2}, {t6}",
"cmovc {t3}, {t7}",
"mov qword ptr [{s} + 192], rax",
"mov qword ptr [{s} + 200], rdx",
"mov qword ptr [{s} + 208], {t2}",
"mov qword ptr [{s} + 216], {t3}",
"mov rdx, qword ptr [{s} + 32]",
"mulx {t2}, {t1}, qword ptr [{s} + 40]",
"mulx {t3}, rax, qword ptr [{s} + 48]",
"add {t2}, rax",
"mulx {t4}, rax, qword ptr [{s} + 56]",
"adc {t3}, rax",
"adc {t4}, 0",
"mov rdx, qword ptr [{s} + 40]",
"xor {t5:e}, {t5:e}",
"mulx {c}, rax, qword ptr [{s} + 48]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 56]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mov eax, 0",
"adcx {t5}, rax",
"mov rdx, qword ptr [{s} + 48]",
"mulx {t6}, rax, qword ptr [{s} + 56]",
"add {t5}, rax",
"adc {t6}, 0",
"xor {t7:e}, {t7:e}",
"add {t1}, {t1}",
"adc {t2}, {t2}",
"adc {t3}, {t3}",
"adc {t4}, {t4}",
"adc {t5}, {t5}",
"adc {t6}, {t6}",
"adc {t7}, 0",
"mov rdx, qword ptr [{s} + 32]",
"mulx {c}, {t0}, rdx",
"add {t1}, {c}",
"mov rdx, qword ptr [{s} + 40]",
"mulx {c}, rax, rdx",
"adc {t2}, rax",
"adc {t3}, {c}",
"mov rdx, qword ptr [{s} + 48]",
"mulx {c}, rax, rdx",
"adc {t4}, rax",
"adc {t5}, {c}",
"mov rdx, qword ptr [{s} + 56]",
"mulx {c}, rax, rdx",
"adc {t6}, rax",
"adc {t7}, {c}",
"mov rax, {t0}",
"shl rax, 32",
"mov rdx, {t0}",
"shr rdx, 32",
"mov {c}, {t0}",
"sub {c}, rax",
"sbb {t0}, rdx",
"add {t1}, rax",
"adc {t2}, rdx",
"adc {t3}, {c}",
"adc {t0}, 0",
"mov rax, {t1}",
"shl rax, 32",
"mov rdx, {t1}",
"shr rdx, 32",
"mov {c}, {t1}",
"sub {c}, rax",
"sbb {t1}, rdx",
"add {t2}, rax",
"adc {t3}, rdx",
"adc {t0}, {c}",
"adc {t1}, 0",
"mov rax, {t2}",
"shl rax, 32",
"mov rdx, {t2}",
"shr rdx, 32",
"mov {c}, {t2}",
"sub {c}, rax",
"sbb {t2}, rdx",
"add {t3}, rax",
"adc {t0}, rdx",
"adc {t1}, {c}",
"adc {t2}, 0",
"mov rax, {t3}",
"shl rax, 32",
"mov rdx, {t3}",
"shr rdx, 32",
"mov {c}, {t3}",
"sub {c}, rax",
"sbb {t3}, rdx",
"add {t0}, rax",
"adc {t1}, rdx",
"adc {t2}, {c}",
"adc {t3}, 0",
"xor {c:e}, {c:e}",
"add {t4}, {t0}",
"adc {t5}, {t1}",
"adc {t6}, {t2}",
"adc {t7}, {t3}",
"adc {c}, 0",
"mov rax, {t4}",
"mov rdx, {t5}",
"mov {t2}, {t6}",
"mov {t3}, {t7}",
"mov {t0:e}, 0xffffffff",
"mov {t1}, 0xffffffff00000001",
"sub rax, -1",
"sbb rdx, {t0}",
"sbb {t2}, 0",
"sbb {t3}, {t1}",
"sbb {c}, 0",
"cmovc rax, {t4}",
"cmovc rdx, {t5}",
"cmovc {t2}, {t6}",
"cmovc {t3}, {t7}",
"mov qword ptr [{s} + 224], rax",
"mov qword ptr [{s} + 232], rdx",
"mov qword ptr [{s} + 240], {t2}",
"mov qword ptr [{s} + 248], {t3}",
"mov {t0}, qword ptr [{s}]",
"mov {t1}, qword ptr [{s} + 8]",
"mov {t2}, qword ptr [{s} + 16]",
"mov {t3}, qword ptr [{s} + 24]",
"sub {t0}, qword ptr [{s} + 192]",
"sbb {t1}, qword ptr [{s} + 200]",
"sbb {t2}, qword ptr [{s} + 208]",
"sbb {t3}, qword ptr [{s} + 216]",
"sbb {c}, {c}",
"mov rax, {c}",
"shr rax, 32",
"mov rdx, 0xffffffff00000001",
"and rdx, {c}",
"add {t0}, {c}",
"adc {t1}, rax",
"adc {t2}, 0",
"adc {t3}, rdx",
"mov qword ptr [{s} + 288], {t0}",
"mov qword ptr [{s} + 296], {t1}",
"mov qword ptr [{s} + 304], {t2}",
"mov qword ptr [{s} + 312], {t3}",
"mov {t0}, qword ptr [{s}]",
"mov {t1}, qword ptr [{s} + 8]",
"mov {t2}, qword ptr [{s} + 16]",
"mov {t3}, qword ptr [{s} + 24]",
"xor {c:e}, {c:e}",
"add {t0}, qword ptr [{s} + 192]",
"adc {t1}, qword ptr [{s} + 200]",
"adc {t2}, qword ptr [{s} + 208]",
"adc {t3}, qword ptr [{s} + 216]",
"adc {c}, 0",
"mov {t4}, {t0}",
"mov {t5}, {t1}",
"mov {t6}, {t2}",
"mov {t7}, {t3}",
"mov eax, 0xffffffff",
"mov rdx, 0xffffffff00000001",
"sub {t4}, -1",
"sbb {t5}, rax",
"sbb {t6}, 0",
"sbb {t7}, rdx",
"sbb {c}, 0",
"cmovc {t4}, {t0}",
"cmovc {t5}, {t1}",
"cmovc {t6}, {t2}",
"cmovc {t7}, {t3}",
"mov qword ptr [{s} + 320], {t4}",
"mov qword ptr [{s} + 328], {t5}",
"mov qword ptr [{s} + 336], {t6}",
"mov qword ptr [{s} + 344], {t7}",
"mov rdx, qword ptr [{s} + 320]",
"mulx {t1}, {t0}, qword ptr [{s} + 288]",
"mulx {t2}, rax, qword ptr [{s} + 296]",
"add {t1}, rax",
"mulx {t3}, rax, qword ptr [{s} + 304]",
"adc {t2}, rax",
"mulx {t4}, rax, qword ptr [{s} + 312]",
"adc {t3}, rax",
"adc {t4}, 0",
"xor {t5:e}, {t5:e}",
"mov rax, {t0}",
"shl rax, 32",
"mov {c}, {t0}",
"shr {c}, 32",
"mov rdx, {t0}",
"sub rdx, rax",
"sbb {t0}, {c}",
"add {t1}, rax",
"adc {t2}, {c}",
"adc {t3}, rdx",
"adc {t4}, {t0}",
"adc {t5}, 0",
"mov rdx, qword ptr [{s} + 328]",
"xor {t0:e}, {t0:e}",
"mulx {c}, rax, qword ptr [{s} + 288]",
"adcx {t1}, rax",
"adox {t2}, {c}",
"mulx {c}, rax, qword ptr [{s} + 296]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx {c}, rax, qword ptr [{s} + 304]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 312]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mov eax, 0",
"adcx {t5}, rax",
"adox {t0}, rax",
"adcx {t0}, rax",
"mov rax, {t1}",
"shl rax, 32",
"mov {c}, {t1}",
"shr {c}, 32",
"mov rdx, {t1}",
"sub rdx, rax",
"sbb {t1}, {c}",
"add {t2}, rax",
"adc {t3}, {c}",
"adc {t4}, rdx",
"adc {t5}, {t1}",
"adc {t0}, 0",
"mov rdx, qword ptr [{s} + 336]",
"xor {t1:e}, {t1:e}",
"mulx {c}, rax, qword ptr [{s} + 288]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx {c}, rax, qword ptr [{s} + 296]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 304]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mulx {c}, rax, qword ptr [{s} + 312]",
"adcx {t5}, rax",
"adox {t0}, {c}",
"mov eax, 0",
"adcx {t0}, rax",
"adox {t1}, rax",
"adcx {t1}, rax",
"mov rax, {t2}",
"shl rax, 32",
"mov {c}, {t2}",
"shr {c}, 32",
"mov rdx, {t2}",
"sub rdx, rax",
"sbb {t2}, {c}",
"add {t3}, rax",
"adc {t4}, {c}",
"adc {t5}, rdx",
"adc {t0}, {t2}",
"adc {t1}, 0",
"mov rdx, qword ptr [{s} + 344]",
"xor {t2:e}, {t2:e}",
"mulx {c}, rax, qword ptr [{s} + 288]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 296]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mulx {c}, rax, qword ptr [{s} + 304]",
"adcx {t5}, rax",
"adox {t0}, {c}",
"mulx {c}, rax, qword ptr [{s} + 312]",
"adcx {t0}, rax",
"adox {t1}, {c}",
"mov eax, 0",
"adcx {t1}, rax",
"adox {t2}, rax",
"adcx {t2}, rax",
"mov rax, {t3}",
"shl rax, 32",
"mov {c}, {t3}",
"shr {c}, 32",
"mov rdx, {t3}",
"sub rdx, rax",
"sbb {t3}, {c}",
"add {t4}, rax",
"adc {t5}, {c}",
"adc {t0}, rdx",
"adc {t1}, {t3}",
"adc {t2}, 0",
"mov rax, {t4}",
"mov rdx, {t5}",
"mov {c}, {t0}",
"mov {t3}, {t1}",
"mov {t6:e}, 0xffffffff",
"mov {t7}, 0xffffffff00000001",
"sub rax, -1",
"sbb rdx, {t6}",
"sbb {c}, 0",
"sbb {t3}, {t7}",
"sbb {t2}, 0",
"cmovc rax, {t4}",
"cmovc rdx, {t5}",
"cmovc {c}, {t0}",
"cmovc {t3}, {t1}",
"mov qword ptr [{s} + 288], rax",
"mov qword ptr [{s} + 296], rdx",
"mov qword ptr [{s} + 304], {c}",
"mov qword ptr [{s} + 312], {t3}",
"mov rdx, qword ptr [{s} + 224]",
"mulx {t1}, {t0}, qword ptr [{s}]",
"mulx {t2}, rax, qword ptr [{s} + 8]",
"add {t1}, rax",
"mulx {t3}, rax, qword ptr [{s} + 16]",
"adc {t2}, rax",
"mulx {t4}, rax, qword ptr [{s} + 24]",
"adc {t3}, rax",
"adc {t4}, 0",
"xor {t5:e}, {t5:e}",
"mov rax, {t0}",
"shl rax, 32",
"mov {c}, {t0}",
"shr {c}, 32",
"mov rdx, {t0}",
"sub rdx, rax",
"sbb {t0}, {c}",
"add {t1}, rax",
"adc {t2}, {c}",
"adc {t3}, rdx",
"adc {t4}, {t0}",
"adc {t5}, 0",
"mov rdx, qword ptr [{s} + 232]",
"xor {t0:e}, {t0:e}",
"mulx {c}, rax, qword ptr [{s}]",
"adcx {t1}, rax",
"adox {t2}, {c}",
"mulx {c}, rax, qword ptr [{s} + 8]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx {c}, rax, qword ptr [{s} + 16]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 24]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mov eax, 0",
"adcx {t5}, rax",
"adox {t0}, rax",
"adcx {t0}, rax",
"mov rax, {t1}",
"shl rax, 32",
"mov {c}, {t1}",
"shr {c}, 32",
"mov rdx, {t1}",
"sub rdx, rax",
"sbb {t1}, {c}",
"add {t2}, rax",
"adc {t3}, {c}",
"adc {t4}, rdx",
"adc {t5}, {t1}",
"adc {t0}, 0",
"mov rdx, qword ptr [{s} + 240]",
"xor {t1:e}, {t1:e}",
"mulx {c}, rax, qword ptr [{s}]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx {c}, rax, qword ptr [{s} + 8]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 16]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mulx {c}, rax, qword ptr [{s} + 24]",
"adcx {t5}, rax",
"adox {t0}, {c}",
"mov eax, 0",
"adcx {t0}, rax",
"adox {t1}, rax",
"adcx {t1}, rax",
"mov rax, {t2}",
"shl rax, 32",
"mov {c}, {t2}",
"shr {c}, 32",
"mov rdx, {t2}",
"sub rdx, rax",
"sbb {t2}, {c}",
"add {t3}, rax",
"adc {t4}, {c}",
"adc {t5}, rdx",
"adc {t0}, {t2}",
"adc {t1}, 0",
"mov rdx, qword ptr [{s} + 248]",
"xor {t2:e}, {t2:e}",
"mulx {c}, rax, qword ptr [{s}]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 8]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mulx {c}, rax, qword ptr [{s} + 16]",
"adcx {t5}, rax",
"adox {t0}, {c}",
"mulx {c}, rax, qword ptr [{s} + 24]",
"adcx {t0}, rax",
"adox {t1}, {c}",
"mov eax, 0",
"adcx {t1}, rax",
"adox {t2}, rax",
"adcx {t2}, rax",
"mov rax, {t3}",
"shl rax, 32",
"mov {c}, {t3}",
"shr {c}, 32",
"mov rdx, {t3}",
"sub rdx, rax",
"sbb {t3}, {c}",
"add {t4}, rax",
"adc {t5}, {c}",
"adc {t0}, rdx",
"adc {t1}, {t3}",
"adc {t2}, 0",
"mov rax, {t4}",
"mov rdx, {t5}",
"mov {c}, {t0}",
"mov {t3}, {t1}",
"mov {t6:e}, 0xffffffff",
"mov {t7}, 0xffffffff00000001",
"sub rax, -1",
"sbb rdx, {t6}",
"sbb {c}, 0",
"sbb {t3}, {t7}",
"sbb {t2}, 0",
"cmovc rax, {t4}",
"cmovc rdx, {t5}",
"cmovc {c}, {t0}",
"cmovc {t3}, {t1}",
"mov qword ptr [{s} + 256], rax",
"mov qword ptr [{s} + 264], rdx",
"mov qword ptr [{s} + 272], {c}",
"mov qword ptr [{s} + 280], {t3}",
"mov rdx, qword ptr [{s} + 288]",
"mulx {t2}, {t1}, qword ptr [{s} + 296]",
"mulx {t3}, rax, qword ptr [{s} + 304]",
"add {t2}, rax",
"mulx {t4}, rax, qword ptr [{s} + 312]",
"adc {t3}, rax",
"adc {t4}, 0",
"mov rdx, qword ptr [{s} + 296]",
"xor {t5:e}, {t5:e}",
"mulx {c}, rax, qword ptr [{s} + 304]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 312]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mov eax, 0",
"adcx {t5}, rax",
"mov rdx, qword ptr [{s} + 304]",
"mulx {t6}, rax, qword ptr [{s} + 312]",
"add {t5}, rax",
"adc {t6}, 0",
"xor {t7:e}, {t7:e}",
"add {t1}, {t1}",
"adc {t2}, {t2}",
"adc {t3}, {t3}",
"adc {t4}, {t4}",
"adc {t5}, {t5}",
"adc {t6}, {t6}",
"adc {t7}, 0",
"mov rdx, qword ptr [{s} + 288]",
"mulx {c}, {t0}, rdx",
"add {t1}, {c}",
"mov rdx, qword ptr [{s} + 296]",
"mulx {c}, rax, rdx",
"adc {t2}, rax",
"adc {t3}, {c}",
"mov rdx, qword ptr [{s} + 304]",
"mulx {c}, rax, rdx",
"adc {t4}, rax",
"adc {t5}, {c}",
"mov rdx, qword ptr [{s} + 312]",
"mulx {c}, rax, rdx",
"adc {t6}, rax",
"adc {t7}, {c}",
"mov rax, {t0}",
"shl rax, 32",
"mov rdx, {t0}",
"shr rdx, 32",
"mov {c}, {t0}",
"sub {c}, rax",
"sbb {t0}, rdx",
"add {t1}, rax",
"adc {t2}, rdx",
"adc {t3}, {c}",
"adc {t0}, 0",
"mov rax, {t1}",
"shl rax, 32",
"mov rdx, {t1}",
"shr rdx, 32",
"mov {c}, {t1}",
"sub {c}, rax",
"sbb {t1}, rdx",
"add {t2}, rax",
"adc {t3}, rdx",
"adc {t0}, {c}",
"adc {t1}, 0",
"mov rax, {t2}",
"shl rax, 32",
"mov rdx, {t2}",
"shr rdx, 32",
"mov {c}, {t2}",
"sub {c}, rax",
"sbb {t2}, rdx",
"add {t3}, rax",
"adc {t0}, rdx",
"adc {t1}, {c}",
"adc {t2}, 0",
"mov rax, {t3}",
"shl rax, 32",
"mov rdx, {t3}",
"shr rdx, 32",
"mov {c}, {t3}",
"sub {c}, rax",
"sbb {t3}, rdx",
"add {t0}, rax",
"adc {t1}, rdx",
"adc {t2}, {c}",
"adc {t3}, 0",
"xor {c:e}, {c:e}",
"add {t4}, {t0}",
"adc {t5}, {t1}",
"adc {t6}, {t2}",
"adc {t7}, {t3}",
"adc {c}, 0",
"mov rax, {t4}",
"mov rdx, {t5}",
"mov {t2}, {t6}",
"mov {t3}, {t7}",
"mov {t0:e}, 0xffffffff",
"mov {t1}, 0xffffffff00000001",
"sub rax, -1",
"sbb rdx, {t0}",
"sbb {t2}, 0",
"sbb {t3}, {t1}",
"sbb {c}, 0",
"cmovc rax, {t4}",
"cmovc rdx, {t5}",
"cmovc {t2}, {t6}",
"cmovc {t3}, {t7}",
"mov qword ptr [{s} + 352], rax",
"mov qword ptr [{s} + 360], rdx",
"mov qword ptr [{s} + 368], {t2}",
"mov qword ptr [{s} + 376], {t3}",
"mov {t0}, qword ptr [{s} + 32]",
"mov {t1}, qword ptr [{s} + 40]",
"mov {t2}, qword ptr [{s} + 48]",
"mov {t3}, qword ptr [{s} + 56]",
"xor {c:e}, {c:e}",
"add {t0}, qword ptr [{s} + 64]",
"adc {t1}, qword ptr [{s} + 72]",
"adc {t2}, qword ptr [{s} + 80]",
"adc {t3}, qword ptr [{s} + 88]",
"adc {c}, 0",
"mov {t4}, {t0}",
"mov {t5}, {t1}",
"mov {t6}, {t2}",
"mov {t7}, {t3}",
"mov eax, 0xffffffff",
"mov rdx, 0xffffffff00000001",
"sub {t4}, -1",
"sbb {t5}, rax",
"sbb {t6}, 0",
"sbb {t7}, rdx",
"sbb {c}, 0",
"cmovc {t4}, {t0}",
"cmovc {t5}, {t1}",
"cmovc {t6}, {t2}",
"cmovc {t7}, {t3}",
"mov qword ptr [{s} + 416], {t4}",
"mov qword ptr [{s} + 424], {t5}",
"mov qword ptr [{s} + 432], {t6}",
"mov qword ptr [{s} + 440], {t7}",
"mov rdx, qword ptr [{s} + 416]",
"mulx {t2}, {t1}, qword ptr [{s} + 424]",
"mulx {t3}, rax, qword ptr [{s} + 432]",
"add {t2}, rax",
"mulx {t4}, rax, qword ptr [{s} + 440]",
"adc {t3}, rax",
"adc {t4}, 0",
"mov rdx, qword ptr [{s} + 424]",
"xor {t5:e}, {t5:e}",
"mulx {c}, rax, qword ptr [{s} + 432]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 440]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mov eax, 0",
"adcx {t5}, rax",
"mov rdx, qword ptr [{s} + 432]",
"mulx {t6}, rax, qword ptr [{s} + 440]",
"add {t5}, rax",
"adc {t6}, 0",
"xor {t7:e}, {t7:e}",
"add {t1}, {t1}",
"adc {t2}, {t2}",
"adc {t3}, {t3}",
"adc {t4}, {t4}",
"adc {t5}, {t5}",
"adc {t6}, {t6}",
"adc {t7}, 0",
"mov rdx, qword ptr [{s} + 416]",
"mulx {c}, {t0}, rdx",
"add {t1}, {c}",
"mov rdx, qword ptr [{s} + 424]",
"mulx {c}, rax, rdx",
"adc {t2}, rax",
"adc {t3}, {c}",
"mov rdx, qword ptr [{s} + 432]",
"mulx {c}, rax, rdx",
"adc {t4}, rax",
"adc {t5}, {c}",
"mov rdx, qword ptr [{s} + 440]",
"mulx {c}, rax, rdx",
"adc {t6}, rax",
"adc {t7}, {c}",
"mov rax, {t0}",
"shl rax, 32",
"mov rdx, {t0}",
"shr rdx, 32",
"mov {c}, {t0}",
"sub {c}, rax",
"sbb {t0}, rdx",
"add {t1}, rax",
"adc {t2}, rdx",
"adc {t3}, {c}",
"adc {t0}, 0",
"mov rax, {t1}",
"shl rax, 32",
"mov rdx, {t1}",
"shr rdx, 32",
"mov {c}, {t1}",
"sub {c}, rax",
"sbb {t1}, rdx",
"add {t2}, rax",
"adc {t3}, rdx",
"adc {t0}, {c}",
"adc {t1}, 0",
"mov rax, {t2}",
"shl rax, 32",
"mov rdx, {t2}",
"shr rdx, 32",
"mov {c}, {t2}",
"sub {c}, rax",
"sbb {t2}, rdx",
"add {t3}, rax",
"adc {t0}, rdx",
"adc {t1}, {c}",
"adc {t2}, 0",
"mov rax, {t3}",
"shl rax, 32",
"mov rdx, {t3}",
"shr rdx, 32",
"mov {c}, {t3}",
"sub {c}, rax",
"sbb {t3}, rdx",
"add {t0}, rax",
"adc {t1}, rdx",
"adc {t2}, {c}",
"adc {t3}, 0",
"xor {c:e}, {c:e}",
"add {t4}, {t0}",
"adc {t5}, {t1}",
"adc {t6}, {t2}",
"adc {t7}, {t3}",
"adc {c}, 0",
"mov rax, {t4}",
"mov rdx, {t5}",
"mov {t2}, {t6}",
"mov {t3}, {t7}",
"mov {t0:e}, 0xffffffff",
"mov {t1}, 0xffffffff00000001",
"sub rax, -1",
"sbb rdx, {t0}",
"sbb {t2}, 0",
"sbb {t3}, {t1}",
"sbb {c}, 0",
"cmovc rax, {t4}",
"cmovc rdx, {t5}",
"cmovc {t2}, {t6}",
"cmovc {t3}, {t7}",
"mov qword ptr [{s} + 416], rax",
"mov qword ptr [{s} + 424], rdx",
"mov qword ptr [{s} + 432], {t2}",
"mov qword ptr [{s} + 440], {t3}",
"mov {t0}, -1",
"sub {t0}, qword ptr [{s} + 352]",
"mov {t1:e}, 0xffffffff",
"sbb {t1}, qword ptr [{s} + 360]",
"mov {t2:e}, 0",
"sbb {t2}, qword ptr [{s} + 368]",
"mov {t3}, 0xffffffff00000001",
"sbb {t3}, qword ptr [{s} + 376]",
"mov edx, 9",
"mulx {c}, {t0}, {t0}",
"mulx {t5}, {t1}, {t1}",
"add {t1}, {c}",
"mulx {c}, {t2}, {t2}",
"adc {t2}, {t5}",
"mulx {t4}, {t3}, {t3}",
"adc {t3}, {c}",
"adc {t4}, 0",
"mov edx, 12",
"xor {t6:e}, {t6:e}",
"mulx {c}, rax, qword ptr [{s} + 256]",
"adcx {t0}, rax",
"adox {t1}, {c}",
"mulx {c}, rax, qword ptr [{s} + 264]",
"adcx {t1}, rax",
"adox {t2}, {c}",
"mulx {c}, rax, qword ptr [{s} + 272]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx rdx, rax, qword ptr [{s} + 280]",
"adcx {t3}, rax",
"adox rdx, {t4}",
"adcx rdx, {t6}",
"add rdx, 1",
"mov rax, rdx",
"shl rax, 32",
"mov {c}, rax",
"neg rax",
"sub {c}, rdx",
"sub {c}, 1",
"add {t0}, rdx",
"adc {t1}, rax",
"adc {t2}, -1",
"adc {t3}, {c}",
"cmc",
"sbb rax, rax",
"mov rdx, rax",
"shr rdx, 32",
"mov {c}, 0xffffffff00000001",
"and {c}, rax",
"add {t0}, rax",
"adc {t1}, rdx",
"adc {t2}, 0",
"adc {t3}, {c}",
"mov qword ptr [{s} + 384], {t0}",
"mov qword ptr [{s} + 392], {t1}",
"mov qword ptr [{s} + 400], {t2}",
"mov qword ptr [{s} + 408], {t3}",
"mov rdx, qword ptr [{s} + 224]",
"mulx {t2}, {t1}, qword ptr [{s} + 232]",
"mulx {t3}, rax, qword ptr [{s} + 240]",
"add {t2}, rax",
"mulx {t4}, rax, qword ptr [{s} + 248]",
"adc {t3}, rax",
"adc {t4}, 0",
"mov rdx, qword ptr [{s} + 232]",
"xor {t5:e}, {t5:e}",
"mulx {c}, rax, qword ptr [{s} + 240]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 248]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mov eax, 0",
"adcx {t5}, rax",
"mov rdx, qword ptr [{s} + 240]",
"mulx {t6}, rax, qword ptr [{s} + 248]",
"add {t5}, rax",
"adc {t6}, 0",
"xor {t7:e}, {t7:e}",
"add {t1}, {t1}",
"adc {t2}, {t2}",
"adc {t3}, {t3}",
"adc {t4}, {t4}",
"adc {t5}, {t5}",
"adc {t6}, {t6}",
"adc {t7}, 0",
"mov rdx, qword ptr [{s} + 224]",
"mulx {c}, {t0}, rdx",
"add {t1}, {c}",
"mov rdx, qword ptr [{s} + 232]",
"mulx {c}, rax, rdx",
"adc {t2}, rax",
"adc {t3}, {c}",
"mov rdx, qword ptr [{s} + 240]",
"mulx {c}, rax, rdx",
"adc {t4}, rax",
"adc {t5}, {c}",
"mov rdx, qword ptr [{s} + 248]",
"mulx {c}, rax, rdx",
"adc {t6}, rax",
"adc {t7}, {c}",
"mov rax, {t0}",
"shl rax, 32",
"mov rdx, {t0}",
"shr rdx, 32",
"mov {c}, {t0}",
"sub {c}, rax",
"sbb {t0}, rdx",
"add {t1}, rax",
"adc {t2}, rdx",
"adc {t3}, {c}",
"adc {t0}, 0",
"mov rax, {t1}",
"shl rax, 32",
"mov rdx, {t1}",
"shr rdx, 32",
"mov {c}, {t1}",
"sub {c}, rax",
"sbb {t1}, rdx",
"add {t2}, rax",
"adc {t3}, rdx",
"adc {t0}, {c}",
"adc {t1}, 0",
"mov rax, {t2}",
"shl rax, 32",
"mov rdx, {t2}",
"shr rdx, 32",
"mov {c}, {t2}",
"sub {c}, rax",
"sbb {t2}, rdx",
"add {t3}, rax",
"adc {t0}, rdx",
"adc {t1}, {c}",
"adc {t2}, 0",
"mov rax, {t3}",
"shl rax, 32",
"mov rdx, {t3}",
"shr rdx, 32",
"mov {c}, {t3}",
"sub {c}, rax",
"sbb {t3}, rdx",
"add {t0}, rax",
"adc {t1}, rdx",
"adc {t2}, {c}",
"adc {t3}, 0",
"xor {c:e}, {c:e}",
"add {t4}, {t0}",
"adc {t5}, {t1}",
"adc {t6}, {t2}",
"adc {t7}, {t3}",
"adc {c}, 0",
"mov rax, {t4}",
"mov rdx, {t5}",
"mov {t2}, {t6}",
"mov {t3}, {t7}",
"mov {t0:e}, 0xffffffff",
"mov {t1}, 0xffffffff00000001",
"sub rax, -1",
"sbb rdx, {t0}",
"sbb {t2}, 0",
"sbb {t3}, {t1}",
"sbb {c}, 0",
"cmovc rax, {t4}",
"cmovc rdx, {t5}",
"cmovc {t2}, {t6}",
"cmovc {t3}, {t7}",
"mov qword ptr [{s} + 448], rax",
"mov qword ptr [{s} + 456], rdx",
"mov qword ptr [{s} + 464], {t2}",
"mov qword ptr [{s} + 472], {t3}",
"mov rdx, qword ptr [{s} + 288]",
"mulx {t1}, {t0}, qword ptr [{s} + 384]",
"mulx {t2}, rax, qword ptr [{s} + 392]",
"add {t1}, rax",
"mulx {t3}, rax, qword ptr [{s} + 400]",
"adc {t2}, rax",
"mulx {t4}, rax, qword ptr [{s} + 408]",
"adc {t3}, rax",
"adc {t4}, 0",
"xor {t5:e}, {t5:e}",
"mov rax, {t0}",
"shl rax, 32",
"mov {c}, {t0}",
"shr {c}, 32",
"mov rdx, {t0}",
"sub rdx, rax",
"sbb {t0}, {c}",
"add {t1}, rax",
"adc {t2}, {c}",
"adc {t3}, rdx",
"adc {t4}, {t0}",
"adc {t5}, 0",
"mov rdx, qword ptr [{s} + 296]",
"xor {t0:e}, {t0:e}",
"mulx {c}, rax, qword ptr [{s} + 384]",
"adcx {t1}, rax",
"adox {t2}, {c}",
"mulx {c}, rax, qword ptr [{s} + 392]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx {c}, rax, qword ptr [{s} + 400]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 408]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mov eax, 0",
"adcx {t5}, rax",
"adox {t0}, rax",
"adcx {t0}, rax",
"mov rax, {t1}",
"shl rax, 32",
"mov {c}, {t1}",
"shr {c}, 32",
"mov rdx, {t1}",
"sub rdx, rax",
"sbb {t1}, {c}",
"add {t2}, rax",
"adc {t3}, {c}",
"adc {t4}, rdx",
"adc {t5}, {t1}",
"adc {t0}, 0",
"mov rdx, qword ptr [{s} + 304]",
"xor {t1:e}, {t1:e}",
"mulx {c}, rax, qword ptr [{s} + 384]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx {c}, rax, qword ptr [{s} + 392]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 400]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mulx {c}, rax, qword ptr [{s} + 408]",
"adcx {t5}, rax",
"adox {t0}, {c}",
"mov eax, 0",
"adcx {t0}, rax",
"adox {t1}, rax",
"adcx {t1}, rax",
"mov rax, {t2}",
"shl rax, 32",
"mov {c}, {t2}",
"shr {c}, 32",
"mov rdx, {t2}",
"sub rdx, rax",
"sbb {t2}, {c}",
"add {t3}, rax",
"adc {t4}, {c}",
"adc {t5}, rdx",
"adc {t0}, {t2}",
"adc {t1}, 0",
"mov rdx, qword ptr [{s} + 312]",
"xor {t2:e}, {t2:e}",
"mulx {c}, rax, qword ptr [{s} + 384]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 392]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mulx {c}, rax, qword ptr [{s} + 400]",
"adcx {t5}, rax",
"adox {t0}, {c}",
"mulx {c}, rax, qword ptr [{s} + 408]",
"adcx {t0}, rax",
"adox {t1}, {c}",
"mov eax, 0",
"adcx {t1}, rax",
"adox {t2}, rax",
"adcx {t2}, rax",
"mov rax, {t3}",
"shl rax, 32",
"mov {c}, {t3}",
"shr {c}, 32",
"mov rdx, {t3}",
"sub rdx, rax",
"sbb {t3}, {c}",
"add {t4}, rax",
"adc {t5}, {c}",
"adc {t0}, rdx",
"adc {t1}, {t3}",
"adc {t2}, 0",
"mov rax, {t4}",
"mov rdx, {t5}",
"mov {c}, {t0}",
"mov {t3}, {t1}",
"mov {t6:e}, 0xffffffff",
"mov {t7}, 0xffffffff00000001",
"sub rax, -1",
"sbb rdx, {t6}",
"sbb {c}, 0",
"sbb {t3}, {t7}",
"sbb {t2}, 0",
"cmovc rax, {t4}",
"cmovc rdx, {t5}",
"cmovc {c}, {t0}",
"cmovc {t3}, {t1}",
"mov qword ptr [{s} + 320], rax",
"mov qword ptr [{s} + 328], rdx",
"mov qword ptr [{s} + 336], {c}",
"mov qword ptr [{s} + 344], {t3}",
"xor {t4:e}, {t4:e}",
"mov {t0}, -1",
"sub {t0}, qword ptr [{s} + 384]",
"mov {t1:e}, 0xffffffff",
"sbb {t1}, qword ptr [{s} + 392]",
"mov {t2:e}, 0",
"sbb {t2}, qword ptr [{s} + 400]",
"mov {t3}, 0xffffffff00000001",
"sbb {t3}, qword ptr [{s} + 408]",
"mov edx, 4",
"xor {t6:e}, {t6:e}",
"mulx {c}, rax, qword ptr [{s} + 256]",
"adcx {t0}, rax",
"adox {t1}, {c}",
"mulx {c}, rax, qword ptr [{s} + 264]",
"adcx {t1}, rax",
"adox {t2}, {c}",
"mulx {c}, rax, qword ptr [{s} + 272]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx rdx, rax, qword ptr [{s} + 280]",
"adcx {t3}, rax",
"adox rdx, {t4}",
"adcx rdx, {t6}",
"add rdx, 1",
"mov rax, rdx",
"shl rax, 32",
"mov {c}, rax",
"neg rax",
"sub {c}, rdx",
"sub {c}, 1",
"add {t0}, rdx",
"adc {t1}, rax",
"adc {t2}, -1",
"adc {t3}, {c}",
"cmc",
"sbb rax, rax",
"mov rdx, rax",
"shr rdx, 32",
"mov {c}, 0xffffffff00000001",
"and {c}, rax",
"add {t0}, rax",
"adc {t1}, rdx",
"adc {t2}, 0",
"adc {t3}, {c}",
"mov qword ptr [{s} + 96], {t0}",
"mov qword ptr [{s} + 104], {t1}",
"mov qword ptr [{s} + 112], {t2}",
"mov qword ptr [{s} + 120], {t3}",
"mov {t0}, qword ptr [{s} + 416]",
"mov {t1}, qword ptr [{s} + 424]",
"mov {t2}, qword ptr [{s} + 432]",
"mov {t3}, qword ptr [{s} + 440]",
"sub {t0}, qword ptr [{s} + 224]",
"sbb {t1}, qword ptr [{s} + 232]",
"sbb {t2}, qword ptr [{s} + 240]",
"sbb {t3}, qword ptr [{s} + 248]",
"sbb {c}, {c}",
"mov rax, {c}",
"shr rax, 32",
"mov rdx, 0xffffffff00000001",
"and rdx, {c}",
"add {t0}, {c}",
"adc {t1}, rax",
"adc {t2}, 0",
"adc {t3}, rdx",
"mov qword ptr [{s} + 416], {t0}",
"mov qword ptr [{s} + 424], {t1}",
"mov qword ptr [{s} + 432], {t2}",
"mov qword ptr [{s} + 440], {t3}",
"mov {t0}, qword ptr [{s} + 416]",
"mov {t1}, qword ptr [{s} + 424]",
"mov {t2}, qword ptr [{s} + 432]",
"mov {t3}, qword ptr [{s} + 440]",
"sub {t0}, qword ptr [{s} + 192]",
"sbb {t1}, qword ptr [{s} + 200]",
"sbb {t2}, qword ptr [{s} + 208]",
"sbb {t3}, qword ptr [{s} + 216]",
"sbb {c}, {c}",
"mov rax, {c}",
"shr rax, 32",
"mov rdx, 0xffffffff00000001",
"and rdx, {c}",
"add {t0}, {c}",
"adc {t1}, rax",
"adc {t2}, 0",
"adc {t3}, rdx",
"mov qword ptr [{s} + 160], {t0}",
"mov qword ptr [{s} + 168], {t1}",
"mov qword ptr [{s} + 176], {t2}",
"mov qword ptr [{s} + 184], {t3}",
"mov {t0}, -1",
"sub {t0}, qword ptr [{s} + 448]",
"mov {t1:e}, 0xffffffff",
"sbb {t1}, qword ptr [{s} + 456]",
"mov {t2:e}, 0",
"sbb {t2}, qword ptr [{s} + 464]",
"mov {t3}, 0xffffffff00000001",
"sbb {t3}, qword ptr [{s} + 472]",
"mov {t4}, {t3}",
"shr {t4}, 61",
"shld {t3}, {t2}, 3",
"shld {t2}, {t1}, 3",
"shld {t1}, {t0}, 3",
"shl {t0}, 3",
"mov edx, 3",
"xor {t6:e}, {t6:e}",
"mulx {c}, rax, qword ptr [{s} + 320]",
"adcx {t0}, rax",
"adox {t1}, {c}",
"mulx {c}, rax, qword ptr [{s} + 328]",
"adcx {t1}, rax",
"adox {t2}, {c}",
"mulx {c}, rax, qword ptr [{s} + 336]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx rdx, rax, qword ptr [{s} + 344]",
"adcx {t3}, rax",
"adox rdx, {t4}",
"adcx rdx, {t6}",
"add rdx, 1",
"mov rax, rdx",
"shl rax, 32",
"mov {c}, rax",
"neg rax",
"sub {c}, rdx",
"sub {c}, 1",
"add {t0}, rdx",
"adc {t1}, rax",
"adc {t2}, -1",
"adc {t3}, {c}",
"cmc",
"sbb rax, rax",
"mov rdx, rax",
"shr rdx, 32",
"mov {c}, 0xffffffff00000001",
"and {c}, rax",
"add {t0}, rax",
"adc {t1}, rdx",
"adc {t2}, 0",
"adc {t3}, {c}",
"mov qword ptr [{s} + 128], {t0}",
"mov qword ptr [{s} + 136], {t1}",
"mov qword ptr [{s} + 144], {t2}",
"mov qword ptr [{s} + 152], {t3}",
s = in(reg) buf.as_mut_ptr(),
t0 = out(reg) _,
t1 = out(reg) _,
t2 = out(reg) _,
t3 = out(reg) _,
t4 = out(reg) _,
t5 = out(reg) _,
t6 = out(reg) _,
t7 = out(reg) _,
c = out(reg) _,
out("rax") _,
out("rdx") _,
options(nostack),
);
}
}
#[allow(dead_code)]
pub const DOUBLE_X3: usize = 3;
#[allow(dead_code)]
pub const DOUBLE_Y3: usize = 4;
#[allow(dead_code)]
pub const DOUBLE_Z3: usize = 5;
#[inline(never)]
pub unsafe fn double_in_place_adx(buf: &mut [MaybeUninit<u64>; 48]) {
unsafe {
asm!(
".p2align 6",
"mov rdx, qword ptr [{s} + 64]",
"mulx {t2}, {t1}, qword ptr [{s} + 72]",
"mulx {t3}, rax, qword ptr [{s} + 80]",
"add {t2}, rax",
"mulx {t4}, rax, qword ptr [{s} + 88]",
"adc {t3}, rax",
"adc {t4}, 0",
"mov rdx, qword ptr [{s} + 72]",
"xor {t5:e}, {t5:e}",
"mulx {c}, rax, qword ptr [{s} + 80]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 88]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mov eax, 0",
"adcx {t5}, rax",
"mov rdx, qword ptr [{s} + 80]",
"mulx {t6}, rax, qword ptr [{s} + 88]",
"add {t5}, rax",
"adc {t6}, 0",
"xor {t7:e}, {t7:e}",
"add {t1}, {t1}",
"adc {t2}, {t2}",
"adc {t3}, {t3}",
"adc {t4}, {t4}",
"adc {t5}, {t5}",
"adc {t6}, {t6}",
"adc {t7}, 0",
"mov rdx, qword ptr [{s} + 64]",
"mulx {c}, {t0}, rdx",
"add {t1}, {c}",
"mov rdx, qword ptr [{s} + 72]",
"mulx {c}, rax, rdx",
"adc {t2}, rax",
"adc {t3}, {c}",
"mov rdx, qword ptr [{s} + 80]",
"mulx {c}, rax, rdx",
"adc {t4}, rax",
"adc {t5}, {c}",
"mov rdx, qword ptr [{s} + 88]",
"mulx {c}, rax, rdx",
"adc {t6}, rax",
"adc {t7}, {c}",
"mov rax, {t0}",
"shl rax, 32",
"mov rdx, {t0}",
"shr rdx, 32",
"mov {c}, {t0}",
"sub {c}, rax",
"sbb {t0}, rdx",
"add {t1}, rax",
"adc {t2}, rdx",
"adc {t3}, {c}",
"adc {t0}, 0",
"mov rax, {t1}",
"shl rax, 32",
"mov rdx, {t1}",
"shr rdx, 32",
"mov {c}, {t1}",
"sub {c}, rax",
"sbb {t1}, rdx",
"add {t2}, rax",
"adc {t3}, rdx",
"adc {t0}, {c}",
"adc {t1}, 0",
"mov rax, {t2}",
"shl rax, 32",
"mov rdx, {t2}",
"shr rdx, 32",
"mov {c}, {t2}",
"sub {c}, rax",
"sbb {t2}, rdx",
"add {t3}, rax",
"adc {t0}, rdx",
"adc {t1}, {c}",
"adc {t2}, 0",
"mov rax, {t3}",
"shl rax, 32",
"mov rdx, {t3}",
"shr rdx, 32",
"mov {c}, {t3}",
"sub {c}, rax",
"sbb {t3}, rdx",
"add {t0}, rax",
"adc {t1}, rdx",
"adc {t2}, {c}",
"adc {t3}, 0",
"xor {c:e}, {c:e}",
"add {t4}, {t0}",
"adc {t5}, {t1}",
"adc {t6}, {t2}",
"adc {t7}, {t3}",
"adc {c}, 0",
"mov rax, {t4}",
"mov rdx, {t5}",
"mov {t2}, {t6}",
"mov {t3}, {t7}",
"mov {t0:e}, 0xffffffff",
"mov {t1}, 0xffffffff00000001",
"sub rax, -1",
"sbb rdx, {t0}",
"sbb {t2}, 0",
"sbb {t3}, {t1}",
"sbb {c}, 0",
"cmovc rax, {t4}",
"cmovc rdx, {t5}",
"cmovc {t2}, {t6}",
"cmovc {t3}, {t7}",
"mov qword ptr [{s} + 96], rax",
"mov qword ptr [{s} + 104], rdx",
"mov qword ptr [{s} + 112], {t2}",
"mov qword ptr [{s} + 120], {t3}",
"mov rdx, qword ptr [{s} + 32]",
"mulx {t2}, {t1}, qword ptr [{s} + 40]",
"mulx {t3}, rax, qword ptr [{s} + 48]",
"add {t2}, rax",
"mulx {t4}, rax, qword ptr [{s} + 56]",
"adc {t3}, rax",
"adc {t4}, 0",
"mov rdx, qword ptr [{s} + 40]",
"xor {t5:e}, {t5:e}",
"mulx {c}, rax, qword ptr [{s} + 48]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 56]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mov eax, 0",
"adcx {t5}, rax",
"mov rdx, qword ptr [{s} + 48]",
"mulx {t6}, rax, qword ptr [{s} + 56]",
"add {t5}, rax",
"adc {t6}, 0",
"xor {t7:e}, {t7:e}",
"add {t1}, {t1}",
"adc {t2}, {t2}",
"adc {t3}, {t3}",
"adc {t4}, {t4}",
"adc {t5}, {t5}",
"adc {t6}, {t6}",
"adc {t7}, 0",
"mov rdx, qword ptr [{s} + 32]",
"mulx {c}, {t0}, rdx",
"add {t1}, {c}",
"mov rdx, qword ptr [{s} + 40]",
"mulx {c}, rax, rdx",
"adc {t2}, rax",
"adc {t3}, {c}",
"mov rdx, qword ptr [{s} + 48]",
"mulx {c}, rax, rdx",
"adc {t4}, rax",
"adc {t5}, {c}",
"mov rdx, qword ptr [{s} + 56]",
"mulx {c}, rax, rdx",
"adc {t6}, rax",
"adc {t7}, {c}",
"mov rax, {t0}",
"shl rax, 32",
"mov rdx, {t0}",
"shr rdx, 32",
"mov {c}, {t0}",
"sub {c}, rax",
"sbb {t0}, rdx",
"add {t1}, rax",
"adc {t2}, rdx",
"adc {t3}, {c}",
"adc {t0}, 0",
"mov rax, {t1}",
"shl rax, 32",
"mov rdx, {t1}",
"shr rdx, 32",
"mov {c}, {t1}",
"sub {c}, rax",
"sbb {t1}, rdx",
"add {t2}, rax",
"adc {t3}, rdx",
"adc {t0}, {c}",
"adc {t1}, 0",
"mov rax, {t2}",
"shl rax, 32",
"mov rdx, {t2}",
"shr rdx, 32",
"mov {c}, {t2}",
"sub {c}, rax",
"sbb {t2}, rdx",
"add {t3}, rax",
"adc {t0}, rdx",
"adc {t1}, {c}",
"adc {t2}, 0",
"mov rax, {t3}",
"shl rax, 32",
"mov rdx, {t3}",
"shr rdx, 32",
"mov {c}, {t3}",
"sub {c}, rax",
"sbb {t3}, rdx",
"add {t0}, rax",
"adc {t1}, rdx",
"adc {t2}, {c}",
"adc {t3}, 0",
"xor {c:e}, {c:e}",
"add {t4}, {t0}",
"adc {t5}, {t1}",
"adc {t6}, {t2}",
"adc {t7}, {t3}",
"adc {c}, 0",
"mov rax, {t4}",
"mov rdx, {t5}",
"mov {t2}, {t6}",
"mov {t3}, {t7}",
"mov {t0:e}, 0xffffffff",
"mov {t1}, 0xffffffff00000001",
"sub rax, -1",
"sbb rdx, {t0}",
"sbb {t2}, 0",
"sbb {t3}, {t1}",
"sbb {c}, 0",
"cmovc rax, {t4}",
"cmovc rdx, {t5}",
"cmovc {t2}, {t6}",
"cmovc {t3}, {t7}",
"mov qword ptr [{s} + 128], rax",
"mov qword ptr [{s} + 136], rdx",
"mov qword ptr [{s} + 144], {t2}",
"mov qword ptr [{s} + 152], {t3}",
"mov {t0}, qword ptr [{s}]",
"mov {t1}, qword ptr [{s} + 8]",
"mov {t2}, qword ptr [{s} + 16]",
"mov {t3}, qword ptr [{s} + 24]",
"sub {t0}, qword ptr [{s} + 96]",
"sbb {t1}, qword ptr [{s} + 104]",
"sbb {t2}, qword ptr [{s} + 112]",
"sbb {t3}, qword ptr [{s} + 120]",
"sbb {c}, {c}",
"mov rax, {c}",
"shr rax, 32",
"mov rdx, 0xffffffff00000001",
"and rdx, {c}",
"add {t0}, {c}",
"adc {t1}, rax",
"adc {t2}, 0",
"adc {t3}, rdx",
"mov qword ptr [{s} + 192], {t0}",
"mov qword ptr [{s} + 200], {t1}",
"mov qword ptr [{s} + 208], {t2}",
"mov qword ptr [{s} + 216], {t3}",
"mov {t0}, qword ptr [{s}]",
"mov {t1}, qword ptr [{s} + 8]",
"mov {t2}, qword ptr [{s} + 16]",
"mov {t3}, qword ptr [{s} + 24]",
"xor {c:e}, {c:e}",
"add {t0}, qword ptr [{s} + 96]",
"adc {t1}, qword ptr [{s} + 104]",
"adc {t2}, qword ptr [{s} + 112]",
"adc {t3}, qword ptr [{s} + 120]",
"adc {c}, 0",
"mov {t4}, {t0}",
"mov {t5}, {t1}",
"mov {t6}, {t2}",
"mov {t7}, {t3}",
"mov eax, 0xffffffff",
"mov rdx, 0xffffffff00000001",
"sub {t4}, -1",
"sbb {t5}, rax",
"sbb {t6}, 0",
"sbb {t7}, rdx",
"sbb {c}, 0",
"cmovc {t4}, {t0}",
"cmovc {t5}, {t1}",
"cmovc {t6}, {t2}",
"cmovc {t7}, {t3}",
"mov qword ptr [{s} + 224], {t4}",
"mov qword ptr [{s} + 232], {t5}",
"mov qword ptr [{s} + 240], {t6}",
"mov qword ptr [{s} + 248], {t7}",
"mov rdx, qword ptr [{s} + 224]",
"mulx {t1}, {t0}, qword ptr [{s} + 192]",
"mulx {t2}, rax, qword ptr [{s} + 200]",
"add {t1}, rax",
"mulx {t3}, rax, qword ptr [{s} + 208]",
"adc {t2}, rax",
"mulx {t4}, rax, qword ptr [{s} + 216]",
"adc {t3}, rax",
"adc {t4}, 0",
"xor {t5:e}, {t5:e}",
"mov rax, {t0}",
"shl rax, 32",
"mov {c}, {t0}",
"shr {c}, 32",
"mov rdx, {t0}",
"sub rdx, rax",
"sbb {t0}, {c}",
"add {t1}, rax",
"adc {t2}, {c}",
"adc {t3}, rdx",
"adc {t4}, {t0}",
"adc {t5}, 0",
"mov rdx, qword ptr [{s} + 232]",
"xor {t0:e}, {t0:e}",
"mulx {c}, rax, qword ptr [{s} + 192]",
"adcx {t1}, rax",
"adox {t2}, {c}",
"mulx {c}, rax, qword ptr [{s} + 200]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx {c}, rax, qword ptr [{s} + 208]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 216]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mov eax, 0",
"adcx {t5}, rax",
"adox {t0}, rax",
"adcx {t0}, rax",
"mov rax, {t1}",
"shl rax, 32",
"mov {c}, {t1}",
"shr {c}, 32",
"mov rdx, {t1}",
"sub rdx, rax",
"sbb {t1}, {c}",
"add {t2}, rax",
"adc {t3}, {c}",
"adc {t4}, rdx",
"adc {t5}, {t1}",
"adc {t0}, 0",
"mov rdx, qword ptr [{s} + 240]",
"xor {t1:e}, {t1:e}",
"mulx {c}, rax, qword ptr [{s} + 192]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx {c}, rax, qword ptr [{s} + 200]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 208]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mulx {c}, rax, qword ptr [{s} + 216]",
"adcx {t5}, rax",
"adox {t0}, {c}",
"mov eax, 0",
"adcx {t0}, rax",
"adox {t1}, rax",
"adcx {t1}, rax",
"mov rax, {t2}",
"shl rax, 32",
"mov {c}, {t2}",
"shr {c}, 32",
"mov rdx, {t2}",
"sub rdx, rax",
"sbb {t2}, {c}",
"add {t3}, rax",
"adc {t4}, {c}",
"adc {t5}, rdx",
"adc {t0}, {t2}",
"adc {t1}, 0",
"mov rdx, qword ptr [{s} + 248]",
"xor {t2:e}, {t2:e}",
"mulx {c}, rax, qword ptr [{s} + 192]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 200]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mulx {c}, rax, qword ptr [{s} + 208]",
"adcx {t5}, rax",
"adox {t0}, {c}",
"mulx {c}, rax, qword ptr [{s} + 216]",
"adcx {t0}, rax",
"adox {t1}, {c}",
"mov eax, 0",
"adcx {t1}, rax",
"adox {t2}, rax",
"adcx {t2}, rax",
"mov rax, {t3}",
"shl rax, 32",
"mov {c}, {t3}",
"shr {c}, 32",
"mov rdx, {t3}",
"sub rdx, rax",
"sbb {t3}, {c}",
"add {t4}, rax",
"adc {t5}, {c}",
"adc {t0}, rdx",
"adc {t1}, {t3}",
"adc {t2}, 0",
"mov rax, {t4}",
"mov rdx, {t5}",
"mov {c}, {t0}",
"mov {t3}, {t1}",
"mov {t6:e}, 0xffffffff",
"mov {t7}, 0xffffffff00000001",
"sub rax, -1",
"sbb rdx, {t6}",
"sbb {c}, 0",
"sbb {t3}, {t7}",
"sbb {t2}, 0",
"cmovc rax, {t4}",
"cmovc rdx, {t5}",
"cmovc {c}, {t0}",
"cmovc {t3}, {t1}",
"mov qword ptr [{s} + 192], rax",
"mov qword ptr [{s} + 200], rdx",
"mov qword ptr [{s} + 208], {c}",
"mov qword ptr [{s} + 216], {t3}",
"mov rdx, qword ptr [{s} + 128]",
"mulx {t1}, {t0}, qword ptr [{s}]",
"mulx {t2}, rax, qword ptr [{s} + 8]",
"add {t1}, rax",
"mulx {t3}, rax, qword ptr [{s} + 16]",
"adc {t2}, rax",
"mulx {t4}, rax, qword ptr [{s} + 24]",
"adc {t3}, rax",
"adc {t4}, 0",
"xor {t5:e}, {t5:e}",
"mov rax, {t0}",
"shl rax, 32",
"mov {c}, {t0}",
"shr {c}, 32",
"mov rdx, {t0}",
"sub rdx, rax",
"sbb {t0}, {c}",
"add {t1}, rax",
"adc {t2}, {c}",
"adc {t3}, rdx",
"adc {t4}, {t0}",
"adc {t5}, 0",
"mov rdx, qword ptr [{s} + 136]",
"xor {t0:e}, {t0:e}",
"mulx {c}, rax, qword ptr [{s}]",
"adcx {t1}, rax",
"adox {t2}, {c}",
"mulx {c}, rax, qword ptr [{s} + 8]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx {c}, rax, qword ptr [{s} + 16]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 24]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mov eax, 0",
"adcx {t5}, rax",
"adox {t0}, rax",
"adcx {t0}, rax",
"mov rax, {t1}",
"shl rax, 32",
"mov {c}, {t1}",
"shr {c}, 32",
"mov rdx, {t1}",
"sub rdx, rax",
"sbb {t1}, {c}",
"add {t2}, rax",
"adc {t3}, {c}",
"adc {t4}, rdx",
"adc {t5}, {t1}",
"adc {t0}, 0",
"mov rdx, qword ptr [{s} + 144]",
"xor {t1:e}, {t1:e}",
"mulx {c}, rax, qword ptr [{s}]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx {c}, rax, qword ptr [{s} + 8]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 16]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mulx {c}, rax, qword ptr [{s} + 24]",
"adcx {t5}, rax",
"adox {t0}, {c}",
"mov eax, 0",
"adcx {t0}, rax",
"adox {t1}, rax",
"adcx {t1}, rax",
"mov rax, {t2}",
"shl rax, 32",
"mov {c}, {t2}",
"shr {c}, 32",
"mov rdx, {t2}",
"sub rdx, rax",
"sbb {t2}, {c}",
"add {t3}, rax",
"adc {t4}, {c}",
"adc {t5}, rdx",
"adc {t0}, {t2}",
"adc {t1}, 0",
"mov rdx, qword ptr [{s} + 152]",
"xor {t2:e}, {t2:e}",
"mulx {c}, rax, qword ptr [{s}]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 8]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mulx {c}, rax, qword ptr [{s} + 16]",
"adcx {t5}, rax",
"adox {t0}, {c}",
"mulx {c}, rax, qword ptr [{s} + 24]",
"adcx {t0}, rax",
"adox {t1}, {c}",
"mov eax, 0",
"adcx {t1}, rax",
"adox {t2}, rax",
"adcx {t2}, rax",
"mov rax, {t3}",
"shl rax, 32",
"mov {c}, {t3}",
"shr {c}, 32",
"mov rdx, {t3}",
"sub rdx, rax",
"sbb {t3}, {c}",
"add {t4}, rax",
"adc {t5}, {c}",
"adc {t0}, rdx",
"adc {t1}, {t3}",
"adc {t2}, 0",
"mov rax, {t4}",
"mov rdx, {t5}",
"mov {c}, {t0}",
"mov {t3}, {t1}",
"mov {t6:e}, 0xffffffff",
"mov {t7}, 0xffffffff00000001",
"sub rax, -1",
"sbb rdx, {t6}",
"sbb {c}, 0",
"sbb {t3}, {t7}",
"sbb {t2}, 0",
"cmovc rax, {t4}",
"cmovc rdx, {t5}",
"cmovc {c}, {t0}",
"cmovc {t3}, {t1}",
"mov qword ptr [{s} + 160], rax",
"mov qword ptr [{s} + 168], rdx",
"mov qword ptr [{s} + 176], {c}",
"mov qword ptr [{s} + 184], {t3}",
"mov rdx, qword ptr [{s} + 192]",
"mulx {t2}, {t1}, qword ptr [{s} + 200]",
"mulx {t3}, rax, qword ptr [{s} + 208]",
"add {t2}, rax",
"mulx {t4}, rax, qword ptr [{s} + 216]",
"adc {t3}, rax",
"adc {t4}, 0",
"mov rdx, qword ptr [{s} + 200]",
"xor {t5:e}, {t5:e}",
"mulx {c}, rax, qword ptr [{s} + 208]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 216]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mov eax, 0",
"adcx {t5}, rax",
"mov rdx, qword ptr [{s} + 208]",
"mulx {t6}, rax, qword ptr [{s} + 216]",
"add {t5}, rax",
"adc {t6}, 0",
"xor {t7:e}, {t7:e}",
"add {t1}, {t1}",
"adc {t2}, {t2}",
"adc {t3}, {t3}",
"adc {t4}, {t4}",
"adc {t5}, {t5}",
"adc {t6}, {t6}",
"adc {t7}, 0",
"mov rdx, qword ptr [{s} + 192]",
"mulx {c}, {t0}, rdx",
"add {t1}, {c}",
"mov rdx, qword ptr [{s} + 200]",
"mulx {c}, rax, rdx",
"adc {t2}, rax",
"adc {t3}, {c}",
"mov rdx, qword ptr [{s} + 208]",
"mulx {c}, rax, rdx",
"adc {t4}, rax",
"adc {t5}, {c}",
"mov rdx, qword ptr [{s} + 216]",
"mulx {c}, rax, rdx",
"adc {t6}, rax",
"adc {t7}, {c}",
"mov rax, {t0}",
"shl rax, 32",
"mov rdx, {t0}",
"shr rdx, 32",
"mov {c}, {t0}",
"sub {c}, rax",
"sbb {t0}, rdx",
"add {t1}, rax",
"adc {t2}, rdx",
"adc {t3}, {c}",
"adc {t0}, 0",
"mov rax, {t1}",
"shl rax, 32",
"mov rdx, {t1}",
"shr rdx, 32",
"mov {c}, {t1}",
"sub {c}, rax",
"sbb {t1}, rdx",
"add {t2}, rax",
"adc {t3}, rdx",
"adc {t0}, {c}",
"adc {t1}, 0",
"mov rax, {t2}",
"shl rax, 32",
"mov rdx, {t2}",
"shr rdx, 32",
"mov {c}, {t2}",
"sub {c}, rax",
"sbb {t2}, rdx",
"add {t3}, rax",
"adc {t0}, rdx",
"adc {t1}, {c}",
"adc {t2}, 0",
"mov rax, {t3}",
"shl rax, 32",
"mov rdx, {t3}",
"shr rdx, 32",
"mov {c}, {t3}",
"sub {c}, rax",
"sbb {t3}, rdx",
"add {t0}, rax",
"adc {t1}, rdx",
"adc {t2}, {c}",
"adc {t3}, 0",
"xor {c:e}, {c:e}",
"add {t4}, {t0}",
"adc {t5}, {t1}",
"adc {t6}, {t2}",
"adc {t7}, {t3}",
"adc {c}, 0",
"mov rax, {t4}",
"mov rdx, {t5}",
"mov {t2}, {t6}",
"mov {t3}, {t7}",
"mov {t0:e}, 0xffffffff",
"mov {t1}, 0xffffffff00000001",
"sub rax, -1",
"sbb rdx, {t0}",
"sbb {t2}, 0",
"sbb {t3}, {t1}",
"sbb {c}, 0",
"cmovc rax, {t4}",
"cmovc rdx, {t5}",
"cmovc {t2}, {t6}",
"cmovc {t3}, {t7}",
"mov qword ptr [{s} + 256], rax",
"mov qword ptr [{s} + 264], rdx",
"mov qword ptr [{s} + 272], {t2}",
"mov qword ptr [{s} + 280], {t3}",
"mov {t0}, qword ptr [{s} + 32]",
"mov {t1}, qword ptr [{s} + 40]",
"mov {t2}, qword ptr [{s} + 48]",
"mov {t3}, qword ptr [{s} + 56]",
"xor {c:e}, {c:e}",
"add {t0}, qword ptr [{s} + 64]",
"adc {t1}, qword ptr [{s} + 72]",
"adc {t2}, qword ptr [{s} + 80]",
"adc {t3}, qword ptr [{s} + 88]",
"adc {c}, 0",
"mov {t4}, {t0}",
"mov {t5}, {t1}",
"mov {t6}, {t2}",
"mov {t7}, {t3}",
"mov eax, 0xffffffff",
"mov rdx, 0xffffffff00000001",
"sub {t4}, -1",
"sbb {t5}, rax",
"sbb {t6}, 0",
"sbb {t7}, rdx",
"sbb {c}, 0",
"cmovc {t4}, {t0}",
"cmovc {t5}, {t1}",
"cmovc {t6}, {t2}",
"cmovc {t7}, {t3}",
"mov qword ptr [{s} + 320], {t4}",
"mov qword ptr [{s} + 328], {t5}",
"mov qword ptr [{s} + 336], {t6}",
"mov qword ptr [{s} + 344], {t7}",
"mov rdx, qword ptr [{s} + 320]",
"mulx {t2}, {t1}, qword ptr [{s} + 328]",
"mulx {t3}, rax, qword ptr [{s} + 336]",
"add {t2}, rax",
"mulx {t4}, rax, qword ptr [{s} + 344]",
"adc {t3}, rax",
"adc {t4}, 0",
"mov rdx, qword ptr [{s} + 328]",
"xor {t5:e}, {t5:e}",
"mulx {c}, rax, qword ptr [{s} + 336]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 344]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mov eax, 0",
"adcx {t5}, rax",
"mov rdx, qword ptr [{s} + 336]",
"mulx {t6}, rax, qword ptr [{s} + 344]",
"add {t5}, rax",
"adc {t6}, 0",
"xor {t7:e}, {t7:e}",
"add {t1}, {t1}",
"adc {t2}, {t2}",
"adc {t3}, {t3}",
"adc {t4}, {t4}",
"adc {t5}, {t5}",
"adc {t6}, {t6}",
"adc {t7}, 0",
"mov rdx, qword ptr [{s} + 320]",
"mulx {c}, {t0}, rdx",
"add {t1}, {c}",
"mov rdx, qword ptr [{s} + 328]",
"mulx {c}, rax, rdx",
"adc {t2}, rax",
"adc {t3}, {c}",
"mov rdx, qword ptr [{s} + 336]",
"mulx {c}, rax, rdx",
"adc {t4}, rax",
"adc {t5}, {c}",
"mov rdx, qword ptr [{s} + 344]",
"mulx {c}, rax, rdx",
"adc {t6}, rax",
"adc {t7}, {c}",
"mov rax, {t0}",
"shl rax, 32",
"mov rdx, {t0}",
"shr rdx, 32",
"mov {c}, {t0}",
"sub {c}, rax",
"sbb {t0}, rdx",
"add {t1}, rax",
"adc {t2}, rdx",
"adc {t3}, {c}",
"adc {t0}, 0",
"mov rax, {t1}",
"shl rax, 32",
"mov rdx, {t1}",
"shr rdx, 32",
"mov {c}, {t1}",
"sub {c}, rax",
"sbb {t1}, rdx",
"add {t2}, rax",
"adc {t3}, rdx",
"adc {t0}, {c}",
"adc {t1}, 0",
"mov rax, {t2}",
"shl rax, 32",
"mov rdx, {t2}",
"shr rdx, 32",
"mov {c}, {t2}",
"sub {c}, rax",
"sbb {t2}, rdx",
"add {t3}, rax",
"adc {t0}, rdx",
"adc {t1}, {c}",
"adc {t2}, 0",
"mov rax, {t3}",
"shl rax, 32",
"mov rdx, {t3}",
"shr rdx, 32",
"mov {c}, {t3}",
"sub {c}, rax",
"sbb {t3}, rdx",
"add {t0}, rax",
"adc {t1}, rdx",
"adc {t2}, {c}",
"adc {t3}, 0",
"xor {c:e}, {c:e}",
"add {t4}, {t0}",
"adc {t5}, {t1}",
"adc {t6}, {t2}",
"adc {t7}, {t3}",
"adc {c}, 0",
"mov rax, {t4}",
"mov rdx, {t5}",
"mov {t2}, {t6}",
"mov {t3}, {t7}",
"mov {t0:e}, 0xffffffff",
"mov {t1}, 0xffffffff00000001",
"sub rax, -1",
"sbb rdx, {t0}",
"sbb {t2}, 0",
"sbb {t3}, {t1}",
"sbb {c}, 0",
"cmovc rax, {t4}",
"cmovc rdx, {t5}",
"cmovc {t2}, {t6}",
"cmovc {t3}, {t7}",
"mov qword ptr [{s} + 320], rax",
"mov qword ptr [{s} + 328], rdx",
"mov qword ptr [{s} + 336], {t2}",
"mov qword ptr [{s} + 344], {t3}",
"mov {t0}, -1",
"sub {t0}, qword ptr [{s} + 256]",
"mov {t1:e}, 0xffffffff",
"sbb {t1}, qword ptr [{s} + 264]",
"mov {t2:e}, 0",
"sbb {t2}, qword ptr [{s} + 272]",
"mov {t3}, 0xffffffff00000001",
"sbb {t3}, qword ptr [{s} + 280]",
"mov edx, 9",
"mulx {c}, {t0}, {t0}",
"mulx {t5}, {t1}, {t1}",
"add {t1}, {c}",
"mulx {c}, {t2}, {t2}",
"adc {t2}, {t5}",
"mulx {t4}, {t3}, {t3}",
"adc {t3}, {c}",
"adc {t4}, 0",
"mov edx, 12",
"xor {t6:e}, {t6:e}",
"mulx {c}, rax, qword ptr [{s} + 160]",
"adcx {t0}, rax",
"adox {t1}, {c}",
"mulx {c}, rax, qword ptr [{s} + 168]",
"adcx {t1}, rax",
"adox {t2}, {c}",
"mulx {c}, rax, qword ptr [{s} + 176]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx rdx, rax, qword ptr [{s} + 184]",
"adcx {t3}, rax",
"adox rdx, {t4}",
"adcx rdx, {t6}",
"add rdx, 1",
"mov rax, rdx",
"shl rax, 32",
"mov {c}, rax",
"neg rax",
"sub {c}, rdx",
"sub {c}, 1",
"add {t0}, rdx",
"adc {t1}, rax",
"adc {t2}, -1",
"adc {t3}, {c}",
"cmc",
"sbb rax, rax",
"mov rdx, rax",
"shr rdx, 32",
"mov {c}, 0xffffffff00000001",
"and {c}, rax",
"add {t0}, rax",
"adc {t1}, rdx",
"adc {t2}, 0",
"adc {t3}, {c}",
"mov qword ptr [{s} + 288], {t0}",
"mov qword ptr [{s} + 296], {t1}",
"mov qword ptr [{s} + 304], {t2}",
"mov qword ptr [{s} + 312], {t3}",
"mov rdx, qword ptr [{s} + 128]",
"mulx {t2}, {t1}, qword ptr [{s} + 136]",
"mulx {t3}, rax, qword ptr [{s} + 144]",
"add {t2}, rax",
"mulx {t4}, rax, qword ptr [{s} + 152]",
"adc {t3}, rax",
"adc {t4}, 0",
"mov rdx, qword ptr [{s} + 136]",
"xor {t5:e}, {t5:e}",
"mulx {c}, rax, qword ptr [{s} + 144]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 152]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mov eax, 0",
"adcx {t5}, rax",
"mov rdx, qword ptr [{s} + 144]",
"mulx {t6}, rax, qword ptr [{s} + 152]",
"add {t5}, rax",
"adc {t6}, 0",
"xor {t7:e}, {t7:e}",
"add {t1}, {t1}",
"adc {t2}, {t2}",
"adc {t3}, {t3}",
"adc {t4}, {t4}",
"adc {t5}, {t5}",
"adc {t6}, {t6}",
"adc {t7}, 0",
"mov rdx, qword ptr [{s} + 128]",
"mulx {c}, {t0}, rdx",
"add {t1}, {c}",
"mov rdx, qword ptr [{s} + 136]",
"mulx {c}, rax, rdx",
"adc {t2}, rax",
"adc {t3}, {c}",
"mov rdx, qword ptr [{s} + 144]",
"mulx {c}, rax, rdx",
"adc {t4}, rax",
"adc {t5}, {c}",
"mov rdx, qword ptr [{s} + 152]",
"mulx {c}, rax, rdx",
"adc {t6}, rax",
"adc {t7}, {c}",
"mov rax, {t0}",
"shl rax, 32",
"mov rdx, {t0}",
"shr rdx, 32",
"mov {c}, {t0}",
"sub {c}, rax",
"sbb {t0}, rdx",
"add {t1}, rax",
"adc {t2}, rdx",
"adc {t3}, {c}",
"adc {t0}, 0",
"mov rax, {t1}",
"shl rax, 32",
"mov rdx, {t1}",
"shr rdx, 32",
"mov {c}, {t1}",
"sub {c}, rax",
"sbb {t1}, rdx",
"add {t2}, rax",
"adc {t3}, rdx",
"adc {t0}, {c}",
"adc {t1}, 0",
"mov rax, {t2}",
"shl rax, 32",
"mov rdx, {t2}",
"shr rdx, 32",
"mov {c}, {t2}",
"sub {c}, rax",
"sbb {t2}, rdx",
"add {t3}, rax",
"adc {t0}, rdx",
"adc {t1}, {c}",
"adc {t2}, 0",
"mov rax, {t3}",
"shl rax, 32",
"mov rdx, {t3}",
"shr rdx, 32",
"mov {c}, {t3}",
"sub {c}, rax",
"sbb {t3}, rdx",
"add {t0}, rax",
"adc {t1}, rdx",
"adc {t2}, {c}",
"adc {t3}, 0",
"xor {c:e}, {c:e}",
"add {t4}, {t0}",
"adc {t5}, {t1}",
"adc {t6}, {t2}",
"adc {t7}, {t3}",
"adc {c}, 0",
"mov rax, {t4}",
"mov rdx, {t5}",
"mov {t2}, {t6}",
"mov {t3}, {t7}",
"mov {t0:e}, 0xffffffff",
"mov {t1}, 0xffffffff00000001",
"sub rax, -1",
"sbb rdx, {t0}",
"sbb {t2}, 0",
"sbb {t3}, {t1}",
"sbb {c}, 0",
"cmovc rax, {t4}",
"cmovc rdx, {t5}",
"cmovc {t2}, {t6}",
"cmovc {t3}, {t7}",
"mov qword ptr [{s} + 352], rax",
"mov qword ptr [{s} + 360], rdx",
"mov qword ptr [{s} + 368], {t2}",
"mov qword ptr [{s} + 376], {t3}",
"mov rdx, qword ptr [{s} + 192]",
"mulx {t1}, {t0}, qword ptr [{s} + 288]",
"mulx {t2}, rax, qword ptr [{s} + 296]",
"add {t1}, rax",
"mulx {t3}, rax, qword ptr [{s} + 304]",
"adc {t2}, rax",
"mulx {t4}, rax, qword ptr [{s} + 312]",
"adc {t3}, rax",
"adc {t4}, 0",
"xor {t5:e}, {t5:e}",
"mov rax, {t0}",
"shl rax, 32",
"mov {c}, {t0}",
"shr {c}, 32",
"mov rdx, {t0}",
"sub rdx, rax",
"sbb {t0}, {c}",
"add {t1}, rax",
"adc {t2}, {c}",
"adc {t3}, rdx",
"adc {t4}, {t0}",
"adc {t5}, 0",
"mov rdx, qword ptr [{s} + 200]",
"xor {t0:e}, {t0:e}",
"mulx {c}, rax, qword ptr [{s} + 288]",
"adcx {t1}, rax",
"adox {t2}, {c}",
"mulx {c}, rax, qword ptr [{s} + 296]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx {c}, rax, qword ptr [{s} + 304]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 312]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mov eax, 0",
"adcx {t5}, rax",
"adox {t0}, rax",
"adcx {t0}, rax",
"mov rax, {t1}",
"shl rax, 32",
"mov {c}, {t1}",
"shr {c}, 32",
"mov rdx, {t1}",
"sub rdx, rax",
"sbb {t1}, {c}",
"add {t2}, rax",
"adc {t3}, {c}",
"adc {t4}, rdx",
"adc {t5}, {t1}",
"adc {t0}, 0",
"mov rdx, qword ptr [{s} + 208]",
"xor {t1:e}, {t1:e}",
"mulx {c}, rax, qword ptr [{s} + 288]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx {c}, rax, qword ptr [{s} + 296]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 304]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mulx {c}, rax, qword ptr [{s} + 312]",
"adcx {t5}, rax",
"adox {t0}, {c}",
"mov eax, 0",
"adcx {t0}, rax",
"adox {t1}, rax",
"adcx {t1}, rax",
"mov rax, {t2}",
"shl rax, 32",
"mov {c}, {t2}",
"shr {c}, 32",
"mov rdx, {t2}",
"sub rdx, rax",
"sbb {t2}, {c}",
"add {t3}, rax",
"adc {t4}, {c}",
"adc {t5}, rdx",
"adc {t0}, {t2}",
"adc {t1}, 0",
"mov rdx, qword ptr [{s} + 216]",
"xor {t2:e}, {t2:e}",
"mulx {c}, rax, qword ptr [{s} + 288]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 296]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mulx {c}, rax, qword ptr [{s} + 304]",
"adcx {t5}, rax",
"adox {t0}, {c}",
"mulx {c}, rax, qword ptr [{s} + 312]",
"adcx {t0}, rax",
"adox {t1}, {c}",
"mov eax, 0",
"adcx {t1}, rax",
"adox {t2}, rax",
"adcx {t2}, rax",
"mov rax, {t3}",
"shl rax, 32",
"mov {c}, {t3}",
"shr {c}, 32",
"mov rdx, {t3}",
"sub rdx, rax",
"sbb {t3}, {c}",
"add {t4}, rax",
"adc {t5}, {c}",
"adc {t0}, rdx",
"adc {t1}, {t3}",
"adc {t2}, 0",
"mov rax, {t4}",
"mov rdx, {t5}",
"mov {c}, {t0}",
"mov {t3}, {t1}",
"mov {t6:e}, 0xffffffff",
"mov {t7}, 0xffffffff00000001",
"sub rax, -1",
"sbb rdx, {t6}",
"sbb {c}, 0",
"sbb {t3}, {t7}",
"sbb {t2}, 0",
"cmovc rax, {t4}",
"cmovc rdx, {t5}",
"cmovc {c}, {t0}",
"cmovc {t3}, {t1}",
"mov qword ptr [{s} + 224], rax",
"mov qword ptr [{s} + 232], rdx",
"mov qword ptr [{s} + 240], {c}",
"mov qword ptr [{s} + 248], {t3}",
"xor {t4:e}, {t4:e}",
"mov {t0}, -1",
"sub {t0}, qword ptr [{s} + 288]",
"mov {t1:e}, 0xffffffff",
"sbb {t1}, qword ptr [{s} + 296]",
"mov {t2:e}, 0",
"sbb {t2}, qword ptr [{s} + 304]",
"mov {t3}, 0xffffffff00000001",
"sbb {t3}, qword ptr [{s} + 312]",
"mov edx, 4",
"xor {t6:e}, {t6:e}",
"mulx {c}, rax, qword ptr [{s} + 160]",
"adcx {t0}, rax",
"adox {t1}, {c}",
"mulx {c}, rax, qword ptr [{s} + 168]",
"adcx {t1}, rax",
"adox {t2}, {c}",
"mulx {c}, rax, qword ptr [{s} + 176]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx rdx, rax, qword ptr [{s} + 184]",
"adcx {t3}, rax",
"adox rdx, {t4}",
"adcx rdx, {t6}",
"add rdx, 1",
"mov rax, rdx",
"shl rax, 32",
"mov {c}, rax",
"neg rax",
"sub {c}, rdx",
"sub {c}, 1",
"add {t0}, rdx",
"adc {t1}, rax",
"adc {t2}, -1",
"adc {t3}, {c}",
"cmc",
"sbb rax, rax",
"mov rdx, rax",
"shr rdx, 32",
"mov {c}, 0xffffffff00000001",
"and {c}, rax",
"add {t0}, rax",
"adc {t1}, rdx",
"adc {t2}, 0",
"adc {t3}, {c}",
"mov qword ptr [{s}], {t0}",
"mov qword ptr [{s} + 8], {t1}",
"mov qword ptr [{s} + 16], {t2}",
"mov qword ptr [{s} + 24], {t3}",
"mov {t0}, qword ptr [{s} + 320]",
"mov {t1}, qword ptr [{s} + 328]",
"mov {t2}, qword ptr [{s} + 336]",
"mov {t3}, qword ptr [{s} + 344]",
"sub {t0}, qword ptr [{s} + 128]",
"sbb {t1}, qword ptr [{s} + 136]",
"sbb {t2}, qword ptr [{s} + 144]",
"sbb {t3}, qword ptr [{s} + 152]",
"sbb {c}, {c}",
"mov rax, {c}",
"shr rax, 32",
"mov rdx, 0xffffffff00000001",
"and rdx, {c}",
"add {t0}, {c}",
"adc {t1}, rax",
"adc {t2}, 0",
"adc {t3}, rdx",
"mov qword ptr [{s} + 320], {t0}",
"mov qword ptr [{s} + 328], {t1}",
"mov qword ptr [{s} + 336], {t2}",
"mov qword ptr [{s} + 344], {t3}",
"mov {t0}, qword ptr [{s} + 320]",
"mov {t1}, qword ptr [{s} + 328]",
"mov {t2}, qword ptr [{s} + 336]",
"mov {t3}, qword ptr [{s} + 344]",
"sub {t0}, qword ptr [{s} + 96]",
"sbb {t1}, qword ptr [{s} + 104]",
"sbb {t2}, qword ptr [{s} + 112]",
"sbb {t3}, qword ptr [{s} + 120]",
"sbb {c}, {c}",
"mov rax, {c}",
"shr rax, 32",
"mov rdx, 0xffffffff00000001",
"and rdx, {c}",
"add {t0}, {c}",
"adc {t1}, rax",
"adc {t2}, 0",
"adc {t3}, rdx",
"mov qword ptr [{s} + 64], {t0}",
"mov qword ptr [{s} + 72], {t1}",
"mov qword ptr [{s} + 80], {t2}",
"mov qword ptr [{s} + 88], {t3}",
"mov {t0}, -1",
"sub {t0}, qword ptr [{s} + 352]",
"mov {t1:e}, 0xffffffff",
"sbb {t1}, qword ptr [{s} + 360]",
"mov {t2:e}, 0",
"sbb {t2}, qword ptr [{s} + 368]",
"mov {t3}, 0xffffffff00000001",
"sbb {t3}, qword ptr [{s} + 376]",
"mov {t4}, {t3}",
"shr {t4}, 61",
"shld {t3}, {t2}, 3",
"shld {t2}, {t1}, 3",
"shld {t1}, {t0}, 3",
"shl {t0}, 3",
"mov edx, 3",
"xor {t6:e}, {t6:e}",
"mulx {c}, rax, qword ptr [{s} + 224]",
"adcx {t0}, rax",
"adox {t1}, {c}",
"mulx {c}, rax, qword ptr [{s} + 232]",
"adcx {t1}, rax",
"adox {t2}, {c}",
"mulx {c}, rax, qword ptr [{s} + 240]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx rdx, rax, qword ptr [{s} + 248]",
"adcx {t3}, rax",
"adox rdx, {t4}",
"adcx rdx, {t6}",
"add rdx, 1",
"mov rax, rdx",
"shl rax, 32",
"mov {c}, rax",
"neg rax",
"sub {c}, rdx",
"sub {c}, 1",
"add {t0}, rdx",
"adc {t1}, rax",
"adc {t2}, -1",
"adc {t3}, {c}",
"cmc",
"sbb rax, rax",
"mov rdx, rax",
"shr rdx, 32",
"mov {c}, 0xffffffff00000001",
"and {c}, rax",
"add {t0}, rax",
"adc {t1}, rdx",
"adc {t2}, 0",
"adc {t3}, {c}",
"mov qword ptr [{s} + 32], {t0}",
"mov qword ptr [{s} + 40], {t1}",
"mov qword ptr [{s} + 48], {t2}",
"mov qword ptr [{s} + 56], {t3}",
s = in(reg) buf.as_mut_ptr(),
t0 = out(reg) _,
t1 = out(reg) _,
t2 = out(reg) _,
t3 = out(reg) _,
t4 = out(reg) _,
t5 = out(reg) _,
t6 = out(reg) _,
t7 = out(reg) _,
c = out(reg) _,
out("rax") _,
out("rdx") _,
options(nostack),
);
}
}
#[allow(dead_code)]
pub const DOUBLE_IN_PLACE_X: usize = 0;
#[allow(dead_code)]
pub const DOUBLE_IN_PLACE_Y: usize = 1;
#[allow(dead_code)]
pub const DOUBLE_IN_PLACE_Z: usize = 2;
#[inline(never)]
pub unsafe fn add_adx(buf: &mut [MaybeUninit<u64>; 96]) {
unsafe {
asm!(
".p2align 6",
"mov rdx, qword ptr [{s} + 64]",
"mulx {t2}, {t1}, qword ptr [{s} + 72]",
"mulx {t3}, rax, qword ptr [{s} + 80]",
"add {t2}, rax",
"mulx {t4}, rax, qword ptr [{s} + 88]",
"adc {t3}, rax",
"adc {t4}, 0",
"mov rdx, qword ptr [{s} + 72]",
"xor {t5:e}, {t5:e}",
"mulx {c}, rax, qword ptr [{s} + 80]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 88]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mov eax, 0",
"adcx {t5}, rax",
"mov rdx, qword ptr [{s} + 80]",
"mulx {t6}, rax, qword ptr [{s} + 88]",
"add {t5}, rax",
"adc {t6}, 0",
"xor {t7:e}, {t7:e}",
"add {t1}, {t1}",
"adc {t2}, {t2}",
"adc {t3}, {t3}",
"adc {t4}, {t4}",
"adc {t5}, {t5}",
"adc {t6}, {t6}",
"adc {t7}, 0",
"mov rdx, qword ptr [{s} + 64]",
"mulx {c}, {t0}, rdx",
"add {t1}, {c}",
"mov rdx, qword ptr [{s} + 72]",
"mulx {c}, rax, rdx",
"adc {t2}, rax",
"adc {t3}, {c}",
"mov rdx, qword ptr [{s} + 80]",
"mulx {c}, rax, rdx",
"adc {t4}, rax",
"adc {t5}, {c}",
"mov rdx, qword ptr [{s} + 88]",
"mulx {c}, rax, rdx",
"adc {t6}, rax",
"adc {t7}, {c}",
"mov rax, {t0}",
"shl rax, 32",
"mov rdx, {t0}",
"shr rdx, 32",
"mov {c}, {t0}",
"sub {c}, rax",
"sbb {t0}, rdx",
"add {t1}, rax",
"adc {t2}, rdx",
"adc {t3}, {c}",
"adc {t0}, 0",
"mov rax, {t1}",
"shl rax, 32",
"mov rdx, {t1}",
"shr rdx, 32",
"mov {c}, {t1}",
"sub {c}, rax",
"sbb {t1}, rdx",
"add {t2}, rax",
"adc {t3}, rdx",
"adc {t0}, {c}",
"adc {t1}, 0",
"mov rax, {t2}",
"shl rax, 32",
"mov rdx, {t2}",
"shr rdx, 32",
"mov {c}, {t2}",
"sub {c}, rax",
"sbb {t2}, rdx",
"add {t3}, rax",
"adc {t0}, rdx",
"adc {t1}, {c}",
"adc {t2}, 0",
"mov rax, {t3}",
"shl rax, 32",
"mov rdx, {t3}",
"shr rdx, 32",
"mov {c}, {t3}",
"sub {c}, rax",
"sbb {t3}, rdx",
"add {t0}, rax",
"adc {t1}, rdx",
"adc {t2}, {c}",
"adc {t3}, 0",
"xor {c:e}, {c:e}",
"add {t4}, {t0}",
"adc {t5}, {t1}",
"adc {t6}, {t2}",
"adc {t7}, {t3}",
"adc {c}, 0",
"mov rax, {t4}",
"mov rdx, {t5}",
"mov {t2}, {t6}",
"mov {t3}, {t7}",
"mov {t0:e}, 0xffffffff",
"mov {t1}, 0xffffffff00000001",
"sub rax, -1",
"sbb rdx, {t0}",
"sbb {t2}, 0",
"sbb {t3}, {t1}",
"sbb {c}, 0",
"cmovc rax, {t4}",
"cmovc rdx, {t5}",
"cmovc {t2}, {t6}",
"cmovc {t3}, {t7}",
"mov qword ptr [{s} + 352], rax",
"mov qword ptr [{s} + 360], rdx",
"mov qword ptr [{s} + 368], {t2}",
"mov qword ptr [{s} + 376], {t3}",
"mov rdx, qword ptr [{s} + 160]",
"mulx {t2}, {t1}, qword ptr [{s} + 168]",
"mulx {t3}, rax, qword ptr [{s} + 176]",
"add {t2}, rax",
"mulx {t4}, rax, qword ptr [{s} + 184]",
"adc {t3}, rax",
"adc {t4}, 0",
"mov rdx, qword ptr [{s} + 168]",
"xor {t5:e}, {t5:e}",
"mulx {c}, rax, qword ptr [{s} + 176]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 184]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mov eax, 0",
"adcx {t5}, rax",
"mov rdx, qword ptr [{s} + 176]",
"mulx {t6}, rax, qword ptr [{s} + 184]",
"add {t5}, rax",
"adc {t6}, 0",
"xor {t7:e}, {t7:e}",
"add {t1}, {t1}",
"adc {t2}, {t2}",
"adc {t3}, {t3}",
"adc {t4}, {t4}",
"adc {t5}, {t5}",
"adc {t6}, {t6}",
"adc {t7}, 0",
"mov rdx, qword ptr [{s} + 160]",
"mulx {c}, {t0}, rdx",
"add {t1}, {c}",
"mov rdx, qword ptr [{s} + 168]",
"mulx {c}, rax, rdx",
"adc {t2}, rax",
"adc {t3}, {c}",
"mov rdx, qword ptr [{s} + 176]",
"mulx {c}, rax, rdx",
"adc {t4}, rax",
"adc {t5}, {c}",
"mov rdx, qword ptr [{s} + 184]",
"mulx {c}, rax, rdx",
"adc {t6}, rax",
"adc {t7}, {c}",
"mov rax, {t0}",
"shl rax, 32",
"mov rdx, {t0}",
"shr rdx, 32",
"mov {c}, {t0}",
"sub {c}, rax",
"sbb {t0}, rdx",
"add {t1}, rax",
"adc {t2}, rdx",
"adc {t3}, {c}",
"adc {t0}, 0",
"mov rax, {t1}",
"shl rax, 32",
"mov rdx, {t1}",
"shr rdx, 32",
"mov {c}, {t1}",
"sub {c}, rax",
"sbb {t1}, rdx",
"add {t2}, rax",
"adc {t3}, rdx",
"adc {t0}, {c}",
"adc {t1}, 0",
"mov rax, {t2}",
"shl rax, 32",
"mov rdx, {t2}",
"shr rdx, 32",
"mov {c}, {t2}",
"sub {c}, rax",
"sbb {t2}, rdx",
"add {t3}, rax",
"adc {t0}, rdx",
"adc {t1}, {c}",
"adc {t2}, 0",
"mov rax, {t3}",
"shl rax, 32",
"mov rdx, {t3}",
"shr rdx, 32",
"mov {c}, {t3}",
"sub {c}, rax",
"sbb {t3}, rdx",
"add {t0}, rax",
"adc {t1}, rdx",
"adc {t2}, {c}",
"adc {t3}, 0",
"xor {c:e}, {c:e}",
"add {t4}, {t0}",
"adc {t5}, {t1}",
"adc {t6}, {t2}",
"adc {t7}, {t3}",
"adc {c}, 0",
"mov rax, {t4}",
"mov rdx, {t5}",
"mov {t2}, {t6}",
"mov {t3}, {t7}",
"mov {t0:e}, 0xffffffff",
"mov {t1}, 0xffffffff00000001",
"sub rax, -1",
"sbb rdx, {t0}",
"sbb {t2}, 0",
"sbb {t3}, {t1}",
"sbb {c}, 0",
"cmovc rax, {t4}",
"cmovc rdx, {t5}",
"cmovc {t2}, {t6}",
"cmovc {t3}, {t7}",
"mov qword ptr [{s} + 384], rax",
"mov qword ptr [{s} + 392], rdx",
"mov qword ptr [{s} + 400], {t2}",
"mov qword ptr [{s} + 408], {t3}",
"mov rdx, qword ptr [{s} + 160]",
"mulx {t1}, {t0}, qword ptr [{s} + 32]",
"mulx {t2}, rax, qword ptr [{s} + 40]",
"add {t1}, rax",
"mulx {t3}, rax, qword ptr [{s} + 48]",
"adc {t2}, rax",
"mulx {t4}, rax, qword ptr [{s} + 56]",
"adc {t3}, rax",
"adc {t4}, 0",
"xor {t5:e}, {t5:e}",
"mov rax, {t0}",
"shl rax, 32",
"mov {c}, {t0}",
"shr {c}, 32",
"mov rdx, {t0}",
"sub rdx, rax",
"sbb {t0}, {c}",
"add {t1}, rax",
"adc {t2}, {c}",
"adc {t3}, rdx",
"adc {t4}, {t0}",
"adc {t5}, 0",
"mov rdx, qword ptr [{s} + 168]",
"xor {t0:e}, {t0:e}",
"mulx {c}, rax, qword ptr [{s} + 32]",
"adcx {t1}, rax",
"adox {t2}, {c}",
"mulx {c}, rax, qword ptr [{s} + 40]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx {c}, rax, qword ptr [{s} + 48]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 56]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mov eax, 0",
"adcx {t5}, rax",
"adox {t0}, rax",
"adcx {t0}, rax",
"mov rax, {t1}",
"shl rax, 32",
"mov {c}, {t1}",
"shr {c}, 32",
"mov rdx, {t1}",
"sub rdx, rax",
"sbb {t1}, {c}",
"add {t2}, rax",
"adc {t3}, {c}",
"adc {t4}, rdx",
"adc {t5}, {t1}",
"adc {t0}, 0",
"mov rdx, qword ptr [{s} + 176]",
"xor {t1:e}, {t1:e}",
"mulx {c}, rax, qword ptr [{s} + 32]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx {c}, rax, qword ptr [{s} + 40]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 48]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mulx {c}, rax, qword ptr [{s} + 56]",
"adcx {t5}, rax",
"adox {t0}, {c}",
"mov eax, 0",
"adcx {t0}, rax",
"adox {t1}, rax",
"adcx {t1}, rax",
"mov rax, {t2}",
"shl rax, 32",
"mov {c}, {t2}",
"shr {c}, 32",
"mov rdx, {t2}",
"sub rdx, rax",
"sbb {t2}, {c}",
"add {t3}, rax",
"adc {t4}, {c}",
"adc {t5}, rdx",
"adc {t0}, {t2}",
"adc {t1}, 0",
"mov rdx, qword ptr [{s} + 184]",
"xor {t2:e}, {t2:e}",
"mulx {c}, rax, qword ptr [{s} + 32]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 40]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mulx {c}, rax, qword ptr [{s} + 48]",
"adcx {t5}, rax",
"adox {t0}, {c}",
"mulx {c}, rax, qword ptr [{s} + 56]",
"adcx {t0}, rax",
"adox {t1}, {c}",
"mov eax, 0",
"adcx {t1}, rax",
"adox {t2}, rax",
"adcx {t2}, rax",
"mov rax, {t3}",
"shl rax, 32",
"mov {c}, {t3}",
"shr {c}, 32",
"mov rdx, {t3}",
"sub rdx, rax",
"sbb {t3}, {c}",
"add {t4}, rax",
"adc {t5}, {c}",
"adc {t0}, rdx",
"adc {t1}, {t3}",
"adc {t2}, 0",
"mov rax, {t4}",
"mov rdx, {t5}",
"mov {c}, {t0}",
"mov {t3}, {t1}",
"mov {t6:e}, 0xffffffff",
"mov {t7}, 0xffffffff00000001",
"sub rax, -1",
"sbb rdx, {t6}",
"sbb {c}, 0",
"sbb {t3}, {t7}",
"sbb {t2}, 0",
"cmovc rax, {t4}",
"cmovc rdx, {t5}",
"cmovc {c}, {t0}",
"cmovc {t3}, {t1}",
"mov qword ptr [{s} + 640], rax",
"mov qword ptr [{s} + 648], rdx",
"mov qword ptr [{s} + 656], {c}",
"mov qword ptr [{s} + 664], {t3}",
"mov rdx, qword ptr [{s} + 352]",
"mulx {t1}, {t0}, qword ptr [{s} + 96]",
"mulx {t2}, rax, qword ptr [{s} + 104]",
"add {t1}, rax",
"mulx {t3}, rax, qword ptr [{s} + 112]",
"adc {t2}, rax",
"mulx {t4}, rax, qword ptr [{s} + 120]",
"adc {t3}, rax",
"adc {t4}, 0",
"xor {t5:e}, {t5:e}",
"mov rax, {t0}",
"shl rax, 32",
"mov {c}, {t0}",
"shr {c}, 32",
"mov rdx, {t0}",
"sub rdx, rax",
"sbb {t0}, {c}",
"add {t1}, rax",
"adc {t2}, {c}",
"adc {t3}, rdx",
"adc {t4}, {t0}",
"adc {t5}, 0",
"mov rdx, qword ptr [{s} + 360]",
"xor {t0:e}, {t0:e}",
"mulx {c}, rax, qword ptr [{s} + 96]",
"adcx {t1}, rax",
"adox {t2}, {c}",
"mulx {c}, rax, qword ptr [{s} + 104]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx {c}, rax, qword ptr [{s} + 112]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 120]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mov eax, 0",
"adcx {t5}, rax",
"adox {t0}, rax",
"adcx {t0}, rax",
"mov rax, {t1}",
"shl rax, 32",
"mov {c}, {t1}",
"shr {c}, 32",
"mov rdx, {t1}",
"sub rdx, rax",
"sbb {t1}, {c}",
"add {t2}, rax",
"adc {t3}, {c}",
"adc {t4}, rdx",
"adc {t5}, {t1}",
"adc {t0}, 0",
"mov rdx, qword ptr [{s} + 368]",
"xor {t1:e}, {t1:e}",
"mulx {c}, rax, qword ptr [{s} + 96]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx {c}, rax, qword ptr [{s} + 104]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 112]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mulx {c}, rax, qword ptr [{s} + 120]",
"adcx {t5}, rax",
"adox {t0}, {c}",
"mov eax, 0",
"adcx {t0}, rax",
"adox {t1}, rax",
"adcx {t1}, rax",
"mov rax, {t2}",
"shl rax, 32",
"mov {c}, {t2}",
"shr {c}, 32",
"mov rdx, {t2}",
"sub rdx, rax",
"sbb {t2}, {c}",
"add {t3}, rax",
"adc {t4}, {c}",
"adc {t5}, rdx",
"adc {t0}, {t2}",
"adc {t1}, 0",
"mov rdx, qword ptr [{s} + 376]",
"xor {t2:e}, {t2:e}",
"mulx {c}, rax, qword ptr [{s} + 96]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 104]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mulx {c}, rax, qword ptr [{s} + 112]",
"adcx {t5}, rax",
"adox {t0}, {c}",
"mulx {c}, rax, qword ptr [{s} + 120]",
"adcx {t0}, rax",
"adox {t1}, {c}",
"mov eax, 0",
"adcx {t1}, rax",
"adox {t2}, rax",
"adcx {t2}, rax",
"mov rax, {t3}",
"shl rax, 32",
"mov {c}, {t3}",
"shr {c}, 32",
"mov rdx, {t3}",
"sub rdx, rax",
"sbb {t3}, {c}",
"add {t4}, rax",
"adc {t5}, {c}",
"adc {t0}, rdx",
"adc {t1}, {t3}",
"adc {t2}, 0",
"mov rax, {t4}",
"mov rdx, {t5}",
"mov {c}, {t0}",
"mov {t3}, {t1}",
"mov {t6:e}, 0xffffffff",
"mov {t7}, 0xffffffff00000001",
"sub rax, -1",
"sbb rdx, {t6}",
"sbb {c}, 0",
"sbb {t3}, {t7}",
"sbb {t2}, 0",
"cmovc rax, {t4}",
"cmovc rdx, {t5}",
"cmovc {c}, {t0}",
"cmovc {t3}, {t1}",
"mov qword ptr [{s} + 448], rax",
"mov qword ptr [{s} + 456], rdx",
"mov qword ptr [{s} + 464], {c}",
"mov qword ptr [{s} + 472], {t3}",
"mov rdx, qword ptr [{s} + 384]",
"mulx {t1}, {t0}, qword ptr [{s}]",
"mulx {t2}, rax, qword ptr [{s} + 8]",
"add {t1}, rax",
"mulx {t3}, rax, qword ptr [{s} + 16]",
"adc {t2}, rax",
"mulx {t4}, rax, qword ptr [{s} + 24]",
"adc {t3}, rax",
"adc {t4}, 0",
"xor {t5:e}, {t5:e}",
"mov rax, {t0}",
"shl rax, 32",
"mov {c}, {t0}",
"shr {c}, 32",
"mov rdx, {t0}",
"sub rdx, rax",
"sbb {t0}, {c}",
"add {t1}, rax",
"adc {t2}, {c}",
"adc {t3}, rdx",
"adc {t4}, {t0}",
"adc {t5}, 0",
"mov rdx, qword ptr [{s} + 392]",
"xor {t0:e}, {t0:e}",
"mulx {c}, rax, qword ptr [{s}]",
"adcx {t1}, rax",
"adox {t2}, {c}",
"mulx {c}, rax, qword ptr [{s} + 8]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx {c}, rax, qword ptr [{s} + 16]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 24]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mov eax, 0",
"adcx {t5}, rax",
"adox {t0}, rax",
"adcx {t0}, rax",
"mov rax, {t1}",
"shl rax, 32",
"mov {c}, {t1}",
"shr {c}, 32",
"mov rdx, {t1}",
"sub rdx, rax",
"sbb {t1}, {c}",
"add {t2}, rax",
"adc {t3}, {c}",
"adc {t4}, rdx",
"adc {t5}, {t1}",
"adc {t0}, 0",
"mov rdx, qword ptr [{s} + 400]",
"xor {t1:e}, {t1:e}",
"mulx {c}, rax, qword ptr [{s}]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx {c}, rax, qword ptr [{s} + 8]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 16]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mulx {c}, rax, qword ptr [{s} + 24]",
"adcx {t5}, rax",
"adox {t0}, {c}",
"mov eax, 0",
"adcx {t0}, rax",
"adox {t1}, rax",
"adcx {t1}, rax",
"mov rax, {t2}",
"shl rax, 32",
"mov {c}, {t2}",
"shr {c}, 32",
"mov rdx, {t2}",
"sub rdx, rax",
"sbb {t2}, {c}",
"add {t3}, rax",
"adc {t4}, {c}",
"adc {t5}, rdx",
"adc {t0}, {t2}",
"adc {t1}, 0",
"mov rdx, qword ptr [{s} + 408]",
"xor {t2:e}, {t2:e}",
"mulx {c}, rax, qword ptr [{s}]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 8]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mulx {c}, rax, qword ptr [{s} + 16]",
"adcx {t5}, rax",
"adox {t0}, {c}",
"mulx {c}, rax, qword ptr [{s} + 24]",
"adcx {t0}, rax",
"adox {t1}, {c}",
"mov eax, 0",
"adcx {t1}, rax",
"adox {t2}, rax",
"adcx {t2}, rax",
"mov rax, {t3}",
"shl rax, 32",
"mov {c}, {t3}",
"shr {c}, 32",
"mov rdx, {t3}",
"sub rdx, rax",
"sbb {t3}, {c}",
"add {t4}, rax",
"adc {t5}, {c}",
"adc {t0}, rdx",
"adc {t1}, {t3}",
"adc {t2}, 0",
"mov rax, {t4}",
"mov rdx, {t5}",
"mov {c}, {t0}",
"mov {t3}, {t1}",
"mov {t6:e}, 0xffffffff",
"mov {t7}, 0xffffffff00000001",
"sub rax, -1",
"sbb rdx, {t6}",
"sbb {c}, 0",
"sbb {t3}, {t7}",
"sbb {t2}, 0",
"cmovc rax, {t4}",
"cmovc rdx, {t5}",
"cmovc {c}, {t0}",
"cmovc {t3}, {t1}",
"mov qword ptr [{s} + 416], rax",
"mov qword ptr [{s} + 424], rdx",
"mov qword ptr [{s} + 432], {c}",
"mov qword ptr [{s} + 440], {t3}",
"mov rdx, qword ptr [{s} + 64]",
"mulx {t1}, {t0}, qword ptr [{s} + 128]",
"mulx {t2}, rax, qword ptr [{s} + 136]",
"add {t1}, rax",
"mulx {t3}, rax, qword ptr [{s} + 144]",
"adc {t2}, rax",
"mulx {t4}, rax, qword ptr [{s} + 152]",
"adc {t3}, rax",
"adc {t4}, 0",
"xor {t5:e}, {t5:e}",
"mov rax, {t0}",
"shl rax, 32",
"mov {c}, {t0}",
"shr {c}, 32",
"mov rdx, {t0}",
"sub rdx, rax",
"sbb {t0}, {c}",
"add {t1}, rax",
"adc {t2}, {c}",
"adc {t3}, rdx",
"adc {t4}, {t0}",
"adc {t5}, 0",
"mov rdx, qword ptr [{s} + 72]",
"xor {t0:e}, {t0:e}",
"mulx {c}, rax, qword ptr [{s} + 128]",
"adcx {t1}, rax",
"adox {t2}, {c}",
"mulx {c}, rax, qword ptr [{s} + 136]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx {c}, rax, qword ptr [{s} + 144]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 152]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mov eax, 0",
"adcx {t5}, rax",
"adox {t0}, rax",
"adcx {t0}, rax",
"mov rax, {t1}",
"shl rax, 32",
"mov {c}, {t1}",
"shr {c}, 32",
"mov rdx, {t1}",
"sub rdx, rax",
"sbb {t1}, {c}",
"add {t2}, rax",
"adc {t3}, {c}",
"adc {t4}, rdx",
"adc {t5}, {t1}",
"adc {t0}, 0",
"mov rdx, qword ptr [{s} + 80]",
"xor {t1:e}, {t1:e}",
"mulx {c}, rax, qword ptr [{s} + 128]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx {c}, rax, qword ptr [{s} + 136]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 144]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mulx {c}, rax, qword ptr [{s} + 152]",
"adcx {t5}, rax",
"adox {t0}, {c}",
"mov eax, 0",
"adcx {t0}, rax",
"adox {t1}, rax",
"adcx {t1}, rax",
"mov rax, {t2}",
"shl rax, 32",
"mov {c}, {t2}",
"shr {c}, 32",
"mov rdx, {t2}",
"sub rdx, rax",
"sbb {t2}, {c}",
"add {t3}, rax",
"adc {t4}, {c}",
"adc {t5}, rdx",
"adc {t0}, {t2}",
"adc {t1}, 0",
"mov rdx, qword ptr [{s} + 88]",
"xor {t2:e}, {t2:e}",
"mulx {c}, rax, qword ptr [{s} + 128]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 136]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mulx {c}, rax, qword ptr [{s} + 144]",
"adcx {t5}, rax",
"adox {t0}, {c}",
"mulx {c}, rax, qword ptr [{s} + 152]",
"adcx {t0}, rax",
"adox {t1}, {c}",
"mov eax, 0",
"adcx {t1}, rax",
"adox {t2}, rax",
"adcx {t2}, rax",
"mov rax, {t3}",
"shl rax, 32",
"mov {c}, {t3}",
"shr {c}, 32",
"mov rdx, {t3}",
"sub rdx, rax",
"sbb {t3}, {c}",
"add {t4}, rax",
"adc {t5}, {c}",
"adc {t0}, rdx",
"adc {t1}, {t3}",
"adc {t2}, 0",
"mov rax, {t4}",
"mov rdx, {t5}",
"mov {c}, {t0}",
"mov {t3}, {t1}",
"mov {t6:e}, 0xffffffff",
"mov {t7}, 0xffffffff00000001",
"sub rax, -1",
"sbb rdx, {t6}",
"sbb {c}, 0",
"sbb {t3}, {t7}",
"sbb {t2}, 0",
"cmovc rax, {t4}",
"cmovc rdx, {t5}",
"cmovc {c}, {t0}",
"cmovc {t3}, {t1}",
"mov qword ptr [{s} + 672], rax",
"mov qword ptr [{s} + 680], rdx",
"mov qword ptr [{s} + 688], {c}",
"mov qword ptr [{s} + 696], {t3}",
"mov {t0}, qword ptr [{s} + 448]",
"mov {t1}, qword ptr [{s} + 456]",
"mov {t2}, qword ptr [{s} + 464]",
"mov {t3}, qword ptr [{s} + 472]",
"sub {t0}, qword ptr [{s} + 416]",
"sbb {t1}, qword ptr [{s} + 424]",
"sbb {t2}, qword ptr [{s} + 432]",
"sbb {t3}, qword ptr [{s} + 440]",
"sbb {c}, {c}",
"mov rax, {c}",
"shr rax, 32",
"mov rdx, 0xffffffff00000001",
"and rdx, {c}",
"add {t0}, {c}",
"adc {t1}, rax",
"adc {t2}, 0",
"adc {t3}, rdx",
"mov qword ptr [{s} + 288], {t0}",
"mov qword ptr [{s} + 296], {t1}",
"mov qword ptr [{s} + 304], {t2}",
"mov qword ptr [{s} + 312], {t3}",
"mov {t0}, qword ptr [{s} + 288]",
"mov {t1}, qword ptr [{s} + 296]",
"mov {t2}, qword ptr [{s} + 304]",
"mov {t3}, qword ptr [{s} + 312]",
"xor {c:e}, {c:e}",
"add {t0}, qword ptr [{s} + 288]",
"adc {t1}, qword ptr [{s} + 296]",
"adc {t2}, qword ptr [{s} + 304]",
"adc {t3}, qword ptr [{s} + 312]",
"adc {c}, 0",
"mov {t4}, {t0}",
"mov {t5}, {t1}",
"mov {t6}, {t2}",
"mov {t7}, {t3}",
"mov eax, 0xffffffff",
"mov rdx, 0xffffffff00000001",
"sub {t4}, -1",
"sbb {t5}, rax",
"sbb {t6}, 0",
"sbb {t7}, rdx",
"sbb {c}, 0",
"cmovc {t4}, {t0}",
"cmovc {t5}, {t1}",
"cmovc {t6}, {t2}",
"cmovc {t7}, {t3}",
"mov qword ptr [{s} + 544], {t4}",
"mov qword ptr [{s} + 552], {t5}",
"mov qword ptr [{s} + 560], {t6}",
"mov qword ptr [{s} + 568], {t7}",
"mov rdx, qword ptr [{s} + 544]",
"mulx {t2}, {t1}, qword ptr [{s} + 552]",
"mulx {t3}, rax, qword ptr [{s} + 560]",
"add {t2}, rax",
"mulx {t4}, rax, qword ptr [{s} + 568]",
"adc {t3}, rax",
"adc {t4}, 0",
"mov rdx, qword ptr [{s} + 552]",
"xor {t5:e}, {t5:e}",
"mulx {c}, rax, qword ptr [{s} + 560]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 568]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mov eax, 0",
"adcx {t5}, rax",
"mov rdx, qword ptr [{s} + 560]",
"mulx {t6}, rax, qword ptr [{s} + 568]",
"add {t5}, rax",
"adc {t6}, 0",
"xor {t7:e}, {t7:e}",
"add {t1}, {t1}",
"adc {t2}, {t2}",
"adc {t3}, {t3}",
"adc {t4}, {t4}",
"adc {t5}, {t5}",
"adc {t6}, {t6}",
"adc {t7}, 0",
"mov rdx, qword ptr [{s} + 544]",
"mulx {c}, {t0}, rdx",
"add {t1}, {c}",
"mov rdx, qword ptr [{s} + 552]",
"mulx {c}, rax, rdx",
"adc {t2}, rax",
"adc {t3}, {c}",
"mov rdx, qword ptr [{s} + 560]",
"mulx {c}, rax, rdx",
"adc {t4}, rax",
"adc {t5}, {c}",
"mov rdx, qword ptr [{s} + 568]",
"mulx {c}, rax, rdx",
"adc {t6}, rax",
"adc {t7}, {c}",
"mov rax, {t0}",
"shl rax, 32",
"mov rdx, {t0}",
"shr rdx, 32",
"mov {c}, {t0}",
"sub {c}, rax",
"sbb {t0}, rdx",
"add {t1}, rax",
"adc {t2}, rdx",
"adc {t3}, {c}",
"adc {t0}, 0",
"mov rax, {t1}",
"shl rax, 32",
"mov rdx, {t1}",
"shr rdx, 32",
"mov {c}, {t1}",
"sub {c}, rax",
"sbb {t1}, rdx",
"add {t2}, rax",
"adc {t3}, rdx",
"adc {t0}, {c}",
"adc {t1}, 0",
"mov rax, {t2}",
"shl rax, 32",
"mov rdx, {t2}",
"shr rdx, 32",
"mov {c}, {t2}",
"sub {c}, rax",
"sbb {t2}, rdx",
"add {t3}, rax",
"adc {t0}, rdx",
"adc {t1}, {c}",
"adc {t2}, 0",
"mov rax, {t3}",
"shl rax, 32",
"mov rdx, {t3}",
"shr rdx, 32",
"mov {c}, {t3}",
"sub {c}, rax",
"sbb {t3}, rdx",
"add {t0}, rax",
"adc {t1}, rdx",
"adc {t2}, {c}",
"adc {t3}, 0",
"xor {c:e}, {c:e}",
"add {t4}, {t0}",
"adc {t5}, {t1}",
"adc {t6}, {t2}",
"adc {t7}, {t3}",
"adc {c}, 0",
"mov rax, {t4}",
"mov rdx, {t5}",
"mov {t2}, {t6}",
"mov {t3}, {t7}",
"mov {t0:e}, 0xffffffff",
"mov {t1}, 0xffffffff00000001",
"sub rax, -1",
"sbb rdx, {t0}",
"sbb {t2}, 0",
"sbb {t3}, {t1}",
"sbb {c}, 0",
"cmovc rax, {t4}",
"cmovc rdx, {t5}",
"cmovc {t2}, {t6}",
"cmovc {t3}, {t7}",
"mov qword ptr [{s} + 544], rax",
"mov qword ptr [{s} + 552], rdx",
"mov qword ptr [{s} + 560], {t2}",
"mov qword ptr [{s} + 568], {t3}",
"mov rdx, qword ptr [{s} + 384]",
"mulx {t1}, {t0}, qword ptr [{s} + 640]",
"mulx {t2}, rax, qword ptr [{s} + 648]",
"add {t1}, rax",
"mulx {t3}, rax, qword ptr [{s} + 656]",
"adc {t2}, rax",
"mulx {t4}, rax, qword ptr [{s} + 664]",
"adc {t3}, rax",
"adc {t4}, 0",
"xor {t5:e}, {t5:e}",
"mov rax, {t0}",
"shl rax, 32",
"mov {c}, {t0}",
"shr {c}, 32",
"mov rdx, {t0}",
"sub rdx, rax",
"sbb {t0}, {c}",
"add {t1}, rax",
"adc {t2}, {c}",
"adc {t3}, rdx",
"adc {t4}, {t0}",
"adc {t5}, 0",
"mov rdx, qword ptr [{s} + 392]",
"xor {t0:e}, {t0:e}",
"mulx {c}, rax, qword ptr [{s} + 640]",
"adcx {t1}, rax",
"adox {t2}, {c}",
"mulx {c}, rax, qword ptr [{s} + 648]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx {c}, rax, qword ptr [{s} + 656]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 664]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mov eax, 0",
"adcx {t5}, rax",
"adox {t0}, rax",
"adcx {t0}, rax",
"mov rax, {t1}",
"shl rax, 32",
"mov {c}, {t1}",
"shr {c}, 32",
"mov rdx, {t1}",
"sub rdx, rax",
"sbb {t1}, {c}",
"add {t2}, rax",
"adc {t3}, {c}",
"adc {t4}, rdx",
"adc {t5}, {t1}",
"adc {t0}, 0",
"mov rdx, qword ptr [{s} + 400]",
"xor {t1:e}, {t1:e}",
"mulx {c}, rax, qword ptr [{s} + 640]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx {c}, rax, qword ptr [{s} + 648]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 656]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mulx {c}, rax, qword ptr [{s} + 664]",
"adcx {t5}, rax",
"adox {t0}, {c}",
"mov eax, 0",
"adcx {t0}, rax",
"adox {t1}, rax",
"adcx {t1}, rax",
"mov rax, {t2}",
"shl rax, 32",
"mov {c}, {t2}",
"shr {c}, 32",
"mov rdx, {t2}",
"sub rdx, rax",
"sbb {t2}, {c}",
"add {t3}, rax",
"adc {t4}, {c}",
"adc {t5}, rdx",
"adc {t0}, {t2}",
"adc {t1}, 0",
"mov rdx, qword ptr [{s} + 408]",
"xor {t2:e}, {t2:e}",
"mulx {c}, rax, qword ptr [{s} + 640]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 648]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mulx {c}, rax, qword ptr [{s} + 656]",
"adcx {t5}, rax",
"adox {t0}, {c}",
"mulx {c}, rax, qword ptr [{s} + 664]",
"adcx {t0}, rax",
"adox {t1}, {c}",
"mov eax, 0",
"adcx {t1}, rax",
"adox {t2}, rax",
"adcx {t2}, rax",
"mov rax, {t3}",
"shl rax, 32",
"mov {c}, {t3}",
"shr {c}, 32",
"mov rdx, {t3}",
"sub rdx, rax",
"sbb {t3}, {c}",
"add {t4}, rax",
"adc {t5}, {c}",
"adc {t0}, rdx",
"adc {t1}, {t3}",
"adc {t2}, 0",
"mov rax, {t4}",
"mov rdx, {t5}",
"mov {c}, {t0}",
"mov {t3}, {t1}",
"mov {t6:e}, 0xffffffff",
"mov {t7}, 0xffffffff00000001",
"sub rax, -1",
"sbb rdx, {t6}",
"sbb {c}, 0",
"sbb {t3}, {t7}",
"sbb {t2}, 0",
"cmovc rax, {t4}",
"cmovc rdx, {t5}",
"cmovc {c}, {t0}",
"cmovc {t3}, {t1}",
"mov qword ptr [{s} + 480], rax",
"mov qword ptr [{s} + 488], rdx",
"mov qword ptr [{s} + 496], {c}",
"mov qword ptr [{s} + 504], {t3}",
"mov rdx, qword ptr [{s} + 544]",
"mulx {t1}, {t0}, qword ptr [{s} + 416]",
"mulx {t2}, rax, qword ptr [{s} + 424]",
"add {t1}, rax",
"mulx {t3}, rax, qword ptr [{s} + 432]",
"adc {t2}, rax",
"mulx {t4}, rax, qword ptr [{s} + 440]",
"adc {t3}, rax",
"adc {t4}, 0",
"xor {t5:e}, {t5:e}",
"mov rax, {t0}",
"shl rax, 32",
"mov {c}, {t0}",
"shr {c}, 32",
"mov rdx, {t0}",
"sub rdx, rax",
"sbb {t0}, {c}",
"add {t1}, rax",
"adc {t2}, {c}",
"adc {t3}, rdx",
"adc {t4}, {t0}",
"adc {t5}, 0",
"mov rdx, qword ptr [{s} + 552]",
"xor {t0:e}, {t0:e}",
"mulx {c}, rax, qword ptr [{s} + 416]",
"adcx {t1}, rax",
"adox {t2}, {c}",
"mulx {c}, rax, qword ptr [{s} + 424]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx {c}, rax, qword ptr [{s} + 432]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 440]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mov eax, 0",
"adcx {t5}, rax",
"adox {t0}, rax",
"adcx {t0}, rax",
"mov rax, {t1}",
"shl rax, 32",
"mov {c}, {t1}",
"shr {c}, 32",
"mov rdx, {t1}",
"sub rdx, rax",
"sbb {t1}, {c}",
"add {t2}, rax",
"adc {t3}, {c}",
"adc {t4}, rdx",
"adc {t5}, {t1}",
"adc {t0}, 0",
"mov rdx, qword ptr [{s} + 560]",
"xor {t1:e}, {t1:e}",
"mulx {c}, rax, qword ptr [{s} + 416]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx {c}, rax, qword ptr [{s} + 424]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 432]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mulx {c}, rax, qword ptr [{s} + 440]",
"adcx {t5}, rax",
"adox {t0}, {c}",
"mov eax, 0",
"adcx {t0}, rax",
"adox {t1}, rax",
"adcx {t1}, rax",
"mov rax, {t2}",
"shl rax, 32",
"mov {c}, {t2}",
"shr {c}, 32",
"mov rdx, {t2}",
"sub rdx, rax",
"sbb {t2}, {c}",
"add {t3}, rax",
"adc {t4}, {c}",
"adc {t5}, rdx",
"adc {t0}, {t2}",
"adc {t1}, 0",
"mov rdx, qword ptr [{s} + 568]",
"xor {t2:e}, {t2:e}",
"mulx {c}, rax, qword ptr [{s} + 416]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 424]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mulx {c}, rax, qword ptr [{s} + 432]",
"adcx {t5}, rax",
"adox {t0}, {c}",
"mulx {c}, rax, qword ptr [{s} + 440]",
"adcx {t0}, rax",
"adox {t1}, {c}",
"mov eax, 0",
"adcx {t1}, rax",
"adox {t2}, rax",
"adcx {t2}, rax",
"mov rax, {t3}",
"shl rax, 32",
"mov {c}, {t3}",
"shr {c}, 32",
"mov rdx, {t3}",
"sub rdx, rax",
"sbb {t3}, {c}",
"add {t4}, rax",
"adc {t5}, {c}",
"adc {t0}, rdx",
"adc {t1}, {t3}",
"adc {t2}, 0",
"mov rax, {t4}",
"mov rdx, {t5}",
"mov {c}, {t0}",
"mov {t3}, {t1}",
"mov {t6:e}, 0xffffffff",
"mov {t7}, 0xffffffff00000001",
"sub rax, -1",
"sbb rdx, {t6}",
"sbb {c}, 0",
"sbb {t3}, {t7}",
"sbb {t2}, 0",
"cmovc rax, {t4}",
"cmovc rdx, {t5}",
"cmovc {c}, {t0}",
"cmovc {t3}, {t1}",
"mov qword ptr [{s} + 608], rax",
"mov qword ptr [{s} + 616], rdx",
"mov qword ptr [{s} + 624], {c}",
"mov qword ptr [{s} + 632], {t3}",
"mov rdx, qword ptr [{s} + 352]",
"mulx {t1}, {t0}, qword ptr [{s} + 672]",
"mulx {t2}, rax, qword ptr [{s} + 680]",
"add {t1}, rax",
"mulx {t3}, rax, qword ptr [{s} + 688]",
"adc {t2}, rax",
"mulx {t4}, rax, qword ptr [{s} + 696]",
"adc {t3}, rax",
"adc {t4}, 0",
"xor {t5:e}, {t5:e}",
"mov rax, {t0}",
"shl rax, 32",
"mov {c}, {t0}",
"shr {c}, 32",
"mov rdx, {t0}",
"sub rdx, rax",
"sbb {t0}, {c}",
"add {t1}, rax",
"adc {t2}, {c}",
"adc {t3}, rdx",
"adc {t4}, {t0}",
"adc {t5}, 0",
"mov rdx, qword ptr [{s} + 360]",
"xor {t0:e}, {t0:e}",
"mulx {c}, rax, qword ptr [{s} + 672]",
"adcx {t1}, rax",
"adox {t2}, {c}",
"mulx {c}, rax, qword ptr [{s} + 680]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx {c}, rax, qword ptr [{s} + 688]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 696]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mov eax, 0",
"adcx {t5}, rax",
"adox {t0}, rax",
"adcx {t0}, rax",
"mov rax, {t1}",
"shl rax, 32",
"mov {c}, {t1}",
"shr {c}, 32",
"mov rdx, {t1}",
"sub rdx, rax",
"sbb {t1}, {c}",
"add {t2}, rax",
"adc {t3}, {c}",
"adc {t4}, rdx",
"adc {t5}, {t1}",
"adc {t0}, 0",
"mov rdx, qword ptr [{s} + 368]",
"xor {t1:e}, {t1:e}",
"mulx {c}, rax, qword ptr [{s} + 672]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx {c}, rax, qword ptr [{s} + 680]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 688]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mulx {c}, rax, qword ptr [{s} + 696]",
"adcx {t5}, rax",
"adox {t0}, {c}",
"mov eax, 0",
"adcx {t0}, rax",
"adox {t1}, rax",
"adcx {t1}, rax",
"mov rax, {t2}",
"shl rax, 32",
"mov {c}, {t2}",
"shr {c}, 32",
"mov rdx, {t2}",
"sub rdx, rax",
"sbb {t2}, {c}",
"add {t3}, rax",
"adc {t4}, {c}",
"adc {t5}, rdx",
"adc {t0}, {t2}",
"adc {t1}, 0",
"mov rdx, qword ptr [{s} + 376]",
"xor {t2:e}, {t2:e}",
"mulx {c}, rax, qword ptr [{s} + 672]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 680]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mulx {c}, rax, qword ptr [{s} + 688]",
"adcx {t5}, rax",
"adox {t0}, {c}",
"mulx {c}, rax, qword ptr [{s} + 696]",
"adcx {t0}, rax",
"adox {t1}, {c}",
"mov eax, 0",
"adcx {t1}, rax",
"adox {t2}, rax",
"adcx {t2}, rax",
"mov rax, {t3}",
"shl rax, 32",
"mov {c}, {t3}",
"shr {c}, 32",
"mov rdx, {t3}",
"sub rdx, rax",
"sbb {t3}, {c}",
"add {t4}, rax",
"adc {t5}, {c}",
"adc {t0}, rdx",
"adc {t1}, {t3}",
"adc {t2}, 0",
"mov rax, {t4}",
"mov rdx, {t5}",
"mov {c}, {t0}",
"mov {t3}, {t1}",
"mov {t6:e}, 0xffffffff",
"mov {t7}, 0xffffffff00000001",
"sub rax, -1",
"sbb rdx, {t6}",
"sbb {c}, 0",
"sbb {t3}, {t7}",
"sbb {t2}, 0",
"cmovc rax, {t4}",
"cmovc rdx, {t5}",
"cmovc {c}, {t0}",
"cmovc {t3}, {t1}",
"mov qword ptr [{s} + 512], rax",
"mov qword ptr [{s} + 520], rdx",
"mov qword ptr [{s} + 528], {c}",
"mov qword ptr [{s} + 536], {t3}",
"mov rdx, qword ptr [{s} + 544]",
"mulx {t1}, {t0}, qword ptr [{s} + 288]",
"mulx {t2}, rax, qword ptr [{s} + 296]",
"add {t1}, rax",
"mulx {t3}, rax, qword ptr [{s} + 304]",
"adc {t2}, rax",
"mulx {t4}, rax, qword ptr [{s} + 312]",
"adc {t3}, rax",
"adc {t4}, 0",
"xor {t5:e}, {t5:e}",
"mov rax, {t0}",
"shl rax, 32",
"mov {c}, {t0}",
"shr {c}, 32",
"mov rdx, {t0}",
"sub rdx, rax",
"sbb {t0}, {c}",
"add {t1}, rax",
"adc {t2}, {c}",
"adc {t3}, rdx",
"adc {t4}, {t0}",
"adc {t5}, 0",
"mov rdx, qword ptr [{s} + 552]",
"xor {t0:e}, {t0:e}",
"mulx {c}, rax, qword ptr [{s} + 288]",
"adcx {t1}, rax",
"adox {t2}, {c}",
"mulx {c}, rax, qword ptr [{s} + 296]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx {c}, rax, qword ptr [{s} + 304]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 312]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mov eax, 0",
"adcx {t5}, rax",
"adox {t0}, rax",
"adcx {t0}, rax",
"mov rax, {t1}",
"shl rax, 32",
"mov {c}, {t1}",
"shr {c}, 32",
"mov rdx, {t1}",
"sub rdx, rax",
"sbb {t1}, {c}",
"add {t2}, rax",
"adc {t3}, {c}",
"adc {t4}, rdx",
"adc {t5}, {t1}",
"adc {t0}, 0",
"mov rdx, qword ptr [{s} + 560]",
"xor {t1:e}, {t1:e}",
"mulx {c}, rax, qword ptr [{s} + 288]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx {c}, rax, qword ptr [{s} + 296]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 304]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mulx {c}, rax, qword ptr [{s} + 312]",
"adcx {t5}, rax",
"adox {t0}, {c}",
"mov eax, 0",
"adcx {t0}, rax",
"adox {t1}, rax",
"adcx {t1}, rax",
"mov rax, {t2}",
"shl rax, 32",
"mov {c}, {t2}",
"shr {c}, 32",
"mov rdx, {t2}",
"sub rdx, rax",
"sbb {t2}, {c}",
"add {t3}, rax",
"adc {t4}, {c}",
"adc {t5}, rdx",
"adc {t0}, {t2}",
"adc {t1}, 0",
"mov rdx, qword ptr [{s} + 568]",
"xor {t2:e}, {t2:e}",
"mulx {c}, rax, qword ptr [{s} + 288]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 296]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mulx {c}, rax, qword ptr [{s} + 304]",
"adcx {t5}, rax",
"adox {t0}, {c}",
"mulx {c}, rax, qword ptr [{s} + 312]",
"adcx {t0}, rax",
"adox {t1}, {c}",
"mov eax, 0",
"adcx {t1}, rax",
"adox {t2}, rax",
"adcx {t2}, rax",
"mov rax, {t3}",
"shl rax, 32",
"mov {c}, {t3}",
"shr {c}, 32",
"mov rdx, {t3}",
"sub rdx, rax",
"sbb {t3}, {c}",
"add {t4}, rax",
"adc {t5}, {c}",
"adc {t0}, rdx",
"adc {t1}, {t3}",
"adc {t2}, 0",
"mov rax, {t4}",
"mov rdx, {t5}",
"mov {c}, {t0}",
"mov {t3}, {t1}",
"mov {t6:e}, 0xffffffff",
"mov {t7}, 0xffffffff00000001",
"sub rax, -1",
"sbb rdx, {t6}",
"sbb {c}, 0",
"sbb {t3}, {t7}",
"sbb {t2}, 0",
"cmovc rax, {t4}",
"cmovc rdx, {t5}",
"cmovc {c}, {t0}",
"cmovc {t3}, {t1}",
"mov qword ptr [{s} + 576], rax",
"mov qword ptr [{s} + 584], rdx",
"mov qword ptr [{s} + 592], {c}",
"mov qword ptr [{s} + 600], {t3}",
"mov {t0}, qword ptr [{s} + 512]",
"mov {t1}, qword ptr [{s} + 520]",
"mov {t2}, qword ptr [{s} + 528]",
"mov {t3}, qword ptr [{s} + 536]",
"sub {t0}, qword ptr [{s} + 480]",
"sbb {t1}, qword ptr [{s} + 488]",
"sbb {t2}, qword ptr [{s} + 496]",
"sbb {t3}, qword ptr [{s} + 504]",
"sbb {c}, {c}",
"mov rax, {c}",
"shr rax, 32",
"mov rdx, 0xffffffff00000001",
"and rdx, {c}",
"add {t0}, {c}",
"adc {t1}, rax",
"adc {t2}, 0",
"adc {t3}, rdx",
"mov qword ptr [{s} + 320], {t0}",
"mov qword ptr [{s} + 328], {t1}",
"mov qword ptr [{s} + 336], {t2}",
"mov qword ptr [{s} + 344], {t3}",
"mov {t0}, qword ptr [{s} + 320]",
"mov {t1}, qword ptr [{s} + 328]",
"mov {t2}, qword ptr [{s} + 336]",
"mov {t3}, qword ptr [{s} + 344]",
"xor {c:e}, {c:e}",
"add {t0}, qword ptr [{s} + 320]",
"adc {t1}, qword ptr [{s} + 328]",
"adc {t2}, qword ptr [{s} + 336]",
"adc {t3}, qword ptr [{s} + 344]",
"adc {c}, 0",
"mov {t4}, {t0}",
"mov {t5}, {t1}",
"mov {t6}, {t2}",
"mov {t7}, {t3}",
"mov eax, 0xffffffff",
"mov rdx, 0xffffffff00000001",
"sub {t4}, -1",
"sbb {t5}, rax",
"sbb {t6}, 0",
"sbb {t7}, rdx",
"sbb {c}, 0",
"cmovc {t4}, {t0}",
"cmovc {t5}, {t1}",
"cmovc {t6}, {t2}",
"cmovc {t7}, {t3}",
"mov qword ptr [{s} + 320], {t4}",
"mov qword ptr [{s} + 328], {t5}",
"mov qword ptr [{s} + 336], {t6}",
"mov qword ptr [{s} + 344], {t7}",
"mov rdx, qword ptr [{s} + 320]",
"mulx {t2}, {t1}, qword ptr [{s} + 328]",
"mulx {t3}, rax, qword ptr [{s} + 336]",
"add {t2}, rax",
"mulx {t4}, rax, qword ptr [{s} + 344]",
"adc {t3}, rax",
"adc {t4}, 0",
"mov rdx, qword ptr [{s} + 328]",
"xor {t5:e}, {t5:e}",
"mulx {c}, rax, qword ptr [{s} + 336]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 344]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mov eax, 0",
"adcx {t5}, rax",
"mov rdx, qword ptr [{s} + 336]",
"mulx {t6}, rax, qword ptr [{s} + 344]",
"add {t5}, rax",
"adc {t6}, 0",
"xor {t7:e}, {t7:e}",
"add {t1}, {t1}",
"adc {t2}, {t2}",
"adc {t3}, {t3}",
"adc {t4}, {t4}",
"adc {t5}, {t5}",
"adc {t6}, {t6}",
"adc {t7}, 0",
"mov rdx, qword ptr [{s} + 320]",
"mulx {c}, {t0}, rdx",
"add {t1}, {c}",
"mov rdx, qword ptr [{s} + 328]",
"mulx {c}, rax, rdx",
"adc {t2}, rax",
"adc {t3}, {c}",
"mov rdx, qword ptr [{s} + 336]",
"mulx {c}, rax, rdx",
"adc {t4}, rax",
"adc {t5}, {c}",
"mov rdx, qword ptr [{s} + 344]",
"mulx {c}, rax, rdx",
"adc {t6}, rax",
"adc {t7}, {c}",
"mov rax, {t0}",
"shl rax, 32",
"mov rdx, {t0}",
"shr rdx, 32",
"mov {c}, {t0}",
"sub {c}, rax",
"sbb {t0}, rdx",
"add {t1}, rax",
"adc {t2}, rdx",
"adc {t3}, {c}",
"adc {t0}, 0",
"mov rax, {t1}",
"shl rax, 32",
"mov rdx, {t1}",
"shr rdx, 32",
"mov {c}, {t1}",
"sub {c}, rax",
"sbb {t1}, rdx",
"add {t2}, rax",
"adc {t3}, rdx",
"adc {t0}, {c}",
"adc {t1}, 0",
"mov rax, {t2}",
"shl rax, 32",
"mov rdx, {t2}",
"shr rdx, 32",
"mov {c}, {t2}",
"sub {c}, rax",
"sbb {t2}, rdx",
"add {t3}, rax",
"adc {t0}, rdx",
"adc {t1}, {c}",
"adc {t2}, 0",
"mov rax, {t3}",
"shl rax, 32",
"mov rdx, {t3}",
"shr rdx, 32",
"mov {c}, {t3}",
"sub {c}, rax",
"sbb {t3}, rdx",
"add {t0}, rax",
"adc {t1}, rdx",
"adc {t2}, {c}",
"adc {t3}, 0",
"xor {c:e}, {c:e}",
"add {t4}, {t0}",
"adc {t5}, {t1}",
"adc {t6}, {t2}",
"adc {t7}, {t3}",
"adc {c}, 0",
"mov rax, {t4}",
"mov rdx, {t5}",
"mov {t2}, {t6}",
"mov {t3}, {t7}",
"mov {t0:e}, 0xffffffff",
"mov {t1}, 0xffffffff00000001",
"sub rax, -1",
"sbb rdx, {t0}",
"sbb {t2}, 0",
"sbb {t3}, {t1}",
"sbb {c}, 0",
"cmovc rax, {t4}",
"cmovc rdx, {t5}",
"cmovc {t2}, {t6}",
"cmovc {t3}, {t7}",
"mov qword ptr [{s} + 192], rax",
"mov qword ptr [{s} + 200], rdx",
"mov qword ptr [{s} + 208], {t2}",
"mov qword ptr [{s} + 216], {t3}",
"mov {t0}, qword ptr [{s} + 64]",
"mov {t1}, qword ptr [{s} + 72]",
"mov {t2}, qword ptr [{s} + 80]",
"mov {t3}, qword ptr [{s} + 88]",
"xor {c:e}, {c:e}",
"add {t0}, qword ptr [{s} + 160]",
"adc {t1}, qword ptr [{s} + 168]",
"adc {t2}, qword ptr [{s} + 176]",
"adc {t3}, qword ptr [{s} + 184]",
"adc {c}, 0",
"mov {t4}, {t0}",
"mov {t5}, {t1}",
"mov {t6}, {t2}",
"mov {t7}, {t3}",
"mov eax, 0xffffffff",
"mov rdx, 0xffffffff00000001",
"sub {t4}, -1",
"sbb {t5}, rax",
"sbb {t6}, 0",
"sbb {t7}, rdx",
"sbb {c}, 0",
"cmovc {t4}, {t0}",
"cmovc {t5}, {t1}",
"cmovc {t6}, {t2}",
"cmovc {t7}, {t3}",
"mov qword ptr [{s} + 256], {t4}",
"mov qword ptr [{s} + 264], {t5}",
"mov qword ptr [{s} + 272], {t6}",
"mov qword ptr [{s} + 280], {t7}",
"mov rdx, qword ptr [{s} + 256]",
"mulx {t2}, {t1}, qword ptr [{s} + 264]",
"mulx {t3}, rax, qword ptr [{s} + 272]",
"add {t2}, rax",
"mulx {t4}, rax, qword ptr [{s} + 280]",
"adc {t3}, rax",
"adc {t4}, 0",
"mov rdx, qword ptr [{s} + 264]",
"xor {t5:e}, {t5:e}",
"mulx {c}, rax, qword ptr [{s} + 272]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 280]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mov eax, 0",
"adcx {t5}, rax",
"mov rdx, qword ptr [{s} + 272]",
"mulx {t6}, rax, qword ptr [{s} + 280]",
"add {t5}, rax",
"adc {t6}, 0",
"xor {t7:e}, {t7:e}",
"add {t1}, {t1}",
"adc {t2}, {t2}",
"adc {t3}, {t3}",
"adc {t4}, {t4}",
"adc {t5}, {t5}",
"adc {t6}, {t6}",
"adc {t7}, 0",
"mov rdx, qword ptr [{s} + 256]",
"mulx {c}, {t0}, rdx",
"add {t1}, {c}",
"mov rdx, qword ptr [{s} + 264]",
"mulx {c}, rax, rdx",
"adc {t2}, rax",
"adc {t3}, {c}",
"mov rdx, qword ptr [{s} + 272]",
"mulx {c}, rax, rdx",
"adc {t4}, rax",
"adc {t5}, {c}",
"mov rdx, qword ptr [{s} + 280]",
"mulx {c}, rax, rdx",
"adc {t6}, rax",
"adc {t7}, {c}",
"mov rax, {t0}",
"shl rax, 32",
"mov rdx, {t0}",
"shr rdx, 32",
"mov {c}, {t0}",
"sub {c}, rax",
"sbb {t0}, rdx",
"add {t1}, rax",
"adc {t2}, rdx",
"adc {t3}, {c}",
"adc {t0}, 0",
"mov rax, {t1}",
"shl rax, 32",
"mov rdx, {t1}",
"shr rdx, 32",
"mov {c}, {t1}",
"sub {c}, rax",
"sbb {t1}, rdx",
"add {t2}, rax",
"adc {t3}, rdx",
"adc {t0}, {c}",
"adc {t1}, 0",
"mov rax, {t2}",
"shl rax, 32",
"mov rdx, {t2}",
"shr rdx, 32",
"mov {c}, {t2}",
"sub {c}, rax",
"sbb {t2}, rdx",
"add {t3}, rax",
"adc {t0}, rdx",
"adc {t1}, {c}",
"adc {t2}, 0",
"mov rax, {t3}",
"shl rax, 32",
"mov rdx, {t3}",
"shr rdx, 32",
"mov {c}, {t3}",
"sub {c}, rax",
"sbb {t3}, rdx",
"add {t0}, rax",
"adc {t1}, rdx",
"adc {t2}, {c}",
"adc {t3}, 0",
"xor {c:e}, {c:e}",
"add {t4}, {t0}",
"adc {t5}, {t1}",
"adc {t6}, {t2}",
"adc {t7}, {t3}",
"adc {c}, 0",
"mov rax, {t4}",
"mov rdx, {t5}",
"mov {t2}, {t6}",
"mov {t3}, {t7}",
"mov {t0:e}, 0xffffffff",
"mov {t1}, 0xffffffff00000001",
"sub rax, -1",
"sbb rdx, {t0}",
"sbb {t2}, 0",
"sbb {t3}, {t1}",
"sbb {c}, 0",
"cmovc rax, {t4}",
"cmovc rdx, {t5}",
"cmovc {t2}, {t6}",
"cmovc {t3}, {t7}",
"mov qword ptr [{s} + 256], rax",
"mov qword ptr [{s} + 264], rdx",
"mov qword ptr [{s} + 272], {t2}",
"mov qword ptr [{s} + 280], {t3}",
"mov rdx, qword ptr [{s} + 576]",
"mulx {t1}, {t0}, qword ptr [{s} + 480]",
"mulx {t2}, rax, qword ptr [{s} + 488]",
"add {t1}, rax",
"mulx {t3}, rax, qword ptr [{s} + 496]",
"adc {t2}, rax",
"mulx {t4}, rax, qword ptr [{s} + 504]",
"adc {t3}, rax",
"adc {t4}, 0",
"xor {t5:e}, {t5:e}",
"mov rax, {t0}",
"shl rax, 32",
"mov {c}, {t0}",
"shr {c}, 32",
"mov rdx, {t0}",
"sub rdx, rax",
"sbb {t0}, {c}",
"add {t1}, rax",
"adc {t2}, {c}",
"adc {t3}, rdx",
"adc {t4}, {t0}",
"adc {t5}, 0",
"mov rdx, qword ptr [{s} + 584]",
"xor {t0:e}, {t0:e}",
"mulx {c}, rax, qword ptr [{s} + 480]",
"adcx {t1}, rax",
"adox {t2}, {c}",
"mulx {c}, rax, qword ptr [{s} + 488]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx {c}, rax, qword ptr [{s} + 496]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 504]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mov eax, 0",
"adcx {t5}, rax",
"adox {t0}, rax",
"adcx {t0}, rax",
"mov rax, {t1}",
"shl rax, 32",
"mov {c}, {t1}",
"shr {c}, 32",
"mov rdx, {t1}",
"sub rdx, rax",
"sbb {t1}, {c}",
"add {t2}, rax",
"adc {t3}, {c}",
"adc {t4}, rdx",
"adc {t5}, {t1}",
"adc {t0}, 0",
"mov rdx, qword ptr [{s} + 592]",
"xor {t1:e}, {t1:e}",
"mulx {c}, rax, qword ptr [{s} + 480]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx {c}, rax, qword ptr [{s} + 488]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 496]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mulx {c}, rax, qword ptr [{s} + 504]",
"adcx {t5}, rax",
"adox {t0}, {c}",
"mov eax, 0",
"adcx {t0}, rax",
"adox {t1}, rax",
"adcx {t1}, rax",
"mov rax, {t2}",
"shl rax, 32",
"mov {c}, {t2}",
"shr {c}, 32",
"mov rdx, {t2}",
"sub rdx, rax",
"sbb {t2}, {c}",
"add {t3}, rax",
"adc {t4}, {c}",
"adc {t5}, rdx",
"adc {t0}, {t2}",
"adc {t1}, 0",
"mov rdx, qword ptr [{s} + 600]",
"xor {t2:e}, {t2:e}",
"mulx {c}, rax, qword ptr [{s} + 480]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 488]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mulx {c}, rax, qword ptr [{s} + 496]",
"adcx {t5}, rax",
"adox {t0}, {c}",
"mulx {c}, rax, qword ptr [{s} + 504]",
"adcx {t0}, rax",
"adox {t1}, {c}",
"mov eax, 0",
"adcx {t1}, rax",
"adox {t2}, rax",
"adcx {t2}, rax",
"mov rax, {t3}",
"shl rax, 32",
"mov {c}, {t3}",
"shr {c}, 32",
"mov rdx, {t3}",
"sub rdx, rax",
"sbb {t3}, {c}",
"add {t4}, rax",
"adc {t5}, {c}",
"adc {t0}, rdx",
"adc {t1}, {t3}",
"adc {t2}, 0",
"mov rax, {t4}",
"mov rdx, {t5}",
"mov {c}, {t0}",
"mov {t3}, {t1}",
"mov {t6:e}, 0xffffffff",
"mov {t7}, 0xffffffff00000001",
"sub rax, -1",
"sbb rdx, {t6}",
"sbb {c}, 0",
"sbb {t3}, {t7}",
"sbb {t2}, 0",
"cmovc rax, {t4}",
"cmovc rdx, {t5}",
"cmovc {c}, {t0}",
"cmovc {t3}, {t1}",
"mov qword ptr [{s} + 704], rax",
"mov qword ptr [{s} + 712], rdx",
"mov qword ptr [{s} + 720], {c}",
"mov qword ptr [{s} + 728], {t3}",
"mov {t0}, qword ptr [{s} + 608]",
"mov {t1}, qword ptr [{s} + 616]",
"mov {t2}, qword ptr [{s} + 624]",
"mov {t3}, qword ptr [{s} + 632]",
"xor {c:e}, {c:e}",
"add {t0}, qword ptr [{s} + 608]",
"adc {t1}, qword ptr [{s} + 616]",
"adc {t2}, qword ptr [{s} + 624]",
"adc {t3}, qword ptr [{s} + 632]",
"adc {c}, 0",
"mov {t4}, {t0}",
"mov {t5}, {t1}",
"mov {t6}, {t2}",
"mov {t7}, {t3}",
"mov eax, 0xffffffff",
"mov rdx, 0xffffffff00000001",
"sub {t4}, -1",
"sbb {t5}, rax",
"sbb {t6}, 0",
"sbb {t7}, rdx",
"sbb {c}, 0",
"cmovc {t4}, {t0}",
"cmovc {t5}, {t1}",
"cmovc {t6}, {t2}",
"cmovc {t7}, {t3}",
"mov qword ptr [{s} + 640], {t4}",
"mov qword ptr [{s} + 648], {t5}",
"mov qword ptr [{s} + 656], {t6}",
"mov qword ptr [{s} + 664], {t7}",
"mov {t0}, qword ptr [{s} + 192]",
"mov {t1}, qword ptr [{s} + 200]",
"mov {t2}, qword ptr [{s} + 208]",
"mov {t3}, qword ptr [{s} + 216]",
"sub {t0}, qword ptr [{s} + 576]",
"sbb {t1}, qword ptr [{s} + 584]",
"sbb {t2}, qword ptr [{s} + 592]",
"sbb {t3}, qword ptr [{s} + 600]",
"sbb {c}, {c}",
"mov rax, {c}",
"shr rax, 32",
"mov rdx, 0xffffffff00000001",
"and rdx, {c}",
"add {t0}, {c}",
"adc {t1}, rax",
"adc {t2}, 0",
"adc {t3}, rdx",
"mov qword ptr [{s} + 192], {t0}",
"mov qword ptr [{s} + 200], {t1}",
"mov qword ptr [{s} + 208], {t2}",
"mov qword ptr [{s} + 216], {t3}",
"mov {t0}, qword ptr [{s} + 192]",
"mov {t1}, qword ptr [{s} + 200]",
"mov {t2}, qword ptr [{s} + 208]",
"mov {t3}, qword ptr [{s} + 216]",
"sub {t0}, qword ptr [{s} + 640]",
"sbb {t1}, qword ptr [{s} + 648]",
"sbb {t2}, qword ptr [{s} + 656]",
"sbb {t3}, qword ptr [{s} + 664]",
"sbb {c}, {c}",
"mov rax, {c}",
"shr rax, 32",
"mov rdx, 0xffffffff00000001",
"and rdx, {c}",
"add {t0}, {c}",
"adc {t1}, rax",
"adc {t2}, 0",
"adc {t3}, rdx",
"mov qword ptr [{s} + 192], {t0}",
"mov qword ptr [{s} + 200], {t1}",
"mov qword ptr [{s} + 208], {t2}",
"mov qword ptr [{s} + 216], {t3}",
"mov {t0}, qword ptr [{s} + 608]",
"mov {t1}, qword ptr [{s} + 616]",
"mov {t2}, qword ptr [{s} + 624]",
"mov {t3}, qword ptr [{s} + 632]",
"sub {t0}, qword ptr [{s} + 192]",
"sbb {t1}, qword ptr [{s} + 200]",
"sbb {t2}, qword ptr [{s} + 208]",
"sbb {t3}, qword ptr [{s} + 216]",
"sbb {c}, {c}",
"mov rax, {c}",
"shr rax, 32",
"mov rdx, 0xffffffff00000001",
"and rdx, {c}",
"add {t0}, {c}",
"adc {t1}, rax",
"adc {t2}, 0",
"adc {t3}, rdx",
"mov qword ptr [{s} + 736], {t0}",
"mov qword ptr [{s} + 744], {t1}",
"mov qword ptr [{s} + 752], {t2}",
"mov qword ptr [{s} + 760], {t3}",
"mov {t0}, qword ptr [{s} + 256]",
"mov {t1}, qword ptr [{s} + 264]",
"mov {t2}, qword ptr [{s} + 272]",
"mov {t3}, qword ptr [{s} + 280]",
"sub {t0}, qword ptr [{s} + 352]",
"sbb {t1}, qword ptr [{s} + 360]",
"sbb {t2}, qword ptr [{s} + 368]",
"sbb {t3}, qword ptr [{s} + 376]",
"sbb {c}, {c}",
"mov rax, {c}",
"shr rax, 32",
"mov rdx, 0xffffffff00000001",
"and rdx, {c}",
"add {t0}, {c}",
"adc {t1}, rax",
"adc {t2}, 0",
"adc {t3}, rdx",
"mov qword ptr [{s} + 256], {t0}",
"mov qword ptr [{s} + 264], {t1}",
"mov qword ptr [{s} + 272], {t2}",
"mov qword ptr [{s} + 280], {t3}",
"mov rdx, qword ptr [{s} + 736]",
"mulx {t1}, {t0}, qword ptr [{s} + 320]",
"mulx {t2}, rax, qword ptr [{s} + 328]",
"add {t1}, rax",
"mulx {t3}, rax, qword ptr [{s} + 336]",
"adc {t2}, rax",
"mulx {t4}, rax, qword ptr [{s} + 344]",
"adc {t3}, rax",
"adc {t4}, 0",
"xor {t5:e}, {t5:e}",
"mov rax, {t0}",
"shl rax, 32",
"mov {c}, {t0}",
"shr {c}, 32",
"mov rdx, {t0}",
"sub rdx, rax",
"sbb {t0}, {c}",
"add {t1}, rax",
"adc {t2}, {c}",
"adc {t3}, rdx",
"adc {t4}, {t0}",
"adc {t5}, 0",
"mov rdx, qword ptr [{s} + 744]",
"xor {t0:e}, {t0:e}",
"mulx {c}, rax, qword ptr [{s} + 320]",
"adcx {t1}, rax",
"adox {t2}, {c}",
"mulx {c}, rax, qword ptr [{s} + 328]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx {c}, rax, qword ptr [{s} + 336]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 344]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mov eax, 0",
"adcx {t5}, rax",
"adox {t0}, rax",
"adcx {t0}, rax",
"mov rax, {t1}",
"shl rax, 32",
"mov {c}, {t1}",
"shr {c}, 32",
"mov rdx, {t1}",
"sub rdx, rax",
"sbb {t1}, {c}",
"add {t2}, rax",
"adc {t3}, {c}",
"adc {t4}, rdx",
"adc {t5}, {t1}",
"adc {t0}, 0",
"mov rdx, qword ptr [{s} + 752]",
"xor {t1:e}, {t1:e}",
"mulx {c}, rax, qword ptr [{s} + 320]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx {c}, rax, qword ptr [{s} + 328]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 336]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mulx {c}, rax, qword ptr [{s} + 344]",
"adcx {t5}, rax",
"adox {t0}, {c}",
"mov eax, 0",
"adcx {t0}, rax",
"adox {t1}, rax",
"adcx {t1}, rax",
"mov rax, {t2}",
"shl rax, 32",
"mov {c}, {t2}",
"shr {c}, 32",
"mov rdx, {t2}",
"sub rdx, rax",
"sbb {t2}, {c}",
"add {t3}, rax",
"adc {t4}, {c}",
"adc {t5}, rdx",
"adc {t0}, {t2}",
"adc {t1}, 0",
"mov rdx, qword ptr [{s} + 760]",
"xor {t2:e}, {t2:e}",
"mulx {c}, rax, qword ptr [{s} + 320]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 328]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mulx {c}, rax, qword ptr [{s} + 336]",
"adcx {t5}, rax",
"adox {t0}, {c}",
"mulx {c}, rax, qword ptr [{s} + 344]",
"adcx {t0}, rax",
"adox {t1}, {c}",
"mov eax, 0",
"adcx {t1}, rax",
"adox {t2}, rax",
"adcx {t2}, rax",
"mov rax, {t3}",
"shl rax, 32",
"mov {c}, {t3}",
"shr {c}, 32",
"mov rdx, {t3}",
"sub rdx, rax",
"sbb {t3}, {c}",
"add {t4}, rax",
"adc {t5}, {c}",
"adc {t0}, rdx",
"adc {t1}, {t3}",
"adc {t2}, 0",
"mov rax, {t4}",
"mov rdx, {t5}",
"mov {c}, {t0}",
"mov {t3}, {t1}",
"mov {t6:e}, 0xffffffff",
"mov {t7}, 0xffffffff00000001",
"sub rax, -1",
"sbb rdx, {t6}",
"sbb {c}, 0",
"sbb {t3}, {t7}",
"sbb {t2}, 0",
"cmovc rax, {t4}",
"cmovc rdx, {t5}",
"cmovc {c}, {t0}",
"cmovc {t3}, {t1}",
"mov qword ptr [{s} + 224], rax",
"mov qword ptr [{s} + 232], rdx",
"mov qword ptr [{s} + 240], {c}",
"mov qword ptr [{s} + 248], {t3}",
"mov {t0}, qword ptr [{s} + 256]",
"mov {t1}, qword ptr [{s} + 264]",
"mov {t2}, qword ptr [{s} + 272]",
"mov {t3}, qword ptr [{s} + 280]",
"sub {t0}, qword ptr [{s} + 384]",
"sbb {t1}, qword ptr [{s} + 392]",
"sbb {t2}, qword ptr [{s} + 400]",
"sbb {t3}, qword ptr [{s} + 408]",
"sbb {c}, {c}",
"mov rax, {c}",
"shr rax, 32",
"mov rdx, 0xffffffff00000001",
"and rdx, {c}",
"add {t0}, {c}",
"adc {t1}, rax",
"adc {t2}, 0",
"adc {t3}, rdx",
"mov qword ptr [{s} + 256], {t0}",
"mov qword ptr [{s} + 264], {t1}",
"mov qword ptr [{s} + 272], {t2}",
"mov qword ptr [{s} + 280], {t3}",
"mov rdx, qword ptr [{s} + 288]",
"mulx {t1}, {t0}, qword ptr [{s} + 256]",
"mulx {t2}, rax, qword ptr [{s} + 264]",
"add {t1}, rax",
"mulx {t3}, rax, qword ptr [{s} + 272]",
"adc {t2}, rax",
"mulx {t4}, rax, qword ptr [{s} + 280]",
"adc {t3}, rax",
"adc {t4}, 0",
"xor {t5:e}, {t5:e}",
"mov rax, {t0}",
"shl rax, 32",
"mov {c}, {t0}",
"shr {c}, 32",
"mov rdx, {t0}",
"sub rdx, rax",
"sbb {t0}, {c}",
"add {t1}, rax",
"adc {t2}, {c}",
"adc {t3}, rdx",
"adc {t4}, {t0}",
"adc {t5}, 0",
"mov rdx, qword ptr [{s} + 296]",
"xor {t0:e}, {t0:e}",
"mulx {c}, rax, qword ptr [{s} + 256]",
"adcx {t1}, rax",
"adox {t2}, {c}",
"mulx {c}, rax, qword ptr [{s} + 264]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx {c}, rax, qword ptr [{s} + 272]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 280]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mov eax, 0",
"adcx {t5}, rax",
"adox {t0}, rax",
"adcx {t0}, rax",
"mov rax, {t1}",
"shl rax, 32",
"mov {c}, {t1}",
"shr {c}, 32",
"mov rdx, {t1}",
"sub rdx, rax",
"sbb {t1}, {c}",
"add {t2}, rax",
"adc {t3}, {c}",
"adc {t4}, rdx",
"adc {t5}, {t1}",
"adc {t0}, 0",
"mov rdx, qword ptr [{s} + 304]",
"xor {t1:e}, {t1:e}",
"mulx {c}, rax, qword ptr [{s} + 256]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx {c}, rax, qword ptr [{s} + 264]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 272]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mulx {c}, rax, qword ptr [{s} + 280]",
"adcx {t5}, rax",
"adox {t0}, {c}",
"mov eax, 0",
"adcx {t0}, rax",
"adox {t1}, rax",
"adcx {t1}, rax",
"mov rax, {t2}",
"shl rax, 32",
"mov {c}, {t2}",
"shr {c}, 32",
"mov rdx, {t2}",
"sub rdx, rax",
"sbb {t2}, {c}",
"add {t3}, rax",
"adc {t4}, {c}",
"adc {t5}, rdx",
"adc {t0}, {t2}",
"adc {t1}, 0",
"mov rdx, qword ptr [{s} + 312]",
"xor {t2:e}, {t2:e}",
"mulx {c}, rax, qword ptr [{s} + 256]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 264]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mulx {c}, rax, qword ptr [{s} + 272]",
"adcx {t5}, rax",
"adox {t0}, {c}",
"mulx {c}, rax, qword ptr [{s} + 280]",
"adcx {t0}, rax",
"adox {t1}, {c}",
"mov eax, 0",
"adcx {t1}, rax",
"adox {t2}, rax",
"adcx {t2}, rax",
"mov rax, {t3}",
"shl rax, 32",
"mov {c}, {t3}",
"shr {c}, 32",
"mov rdx, {t3}",
"sub rdx, rax",
"sbb {t3}, {c}",
"add {t4}, rax",
"adc {t5}, {c}",
"adc {t0}, rdx",
"adc {t1}, {t3}",
"adc {t2}, 0",
"mov rax, {t4}",
"mov rdx, {t5}",
"mov {c}, {t0}",
"mov {t3}, {t1}",
"mov {t6:e}, 0xffffffff",
"mov {t7}, 0xffffffff00000001",
"sub rax, -1",
"sbb rdx, {t6}",
"sbb {c}, 0",
"sbb {t3}, {t7}",
"sbb {t2}, 0",
"cmovc rax, {t4}",
"cmovc rdx, {t5}",
"cmovc {c}, {t0}",
"cmovc {t3}, {t1}",
"mov qword ptr [{s} + 256], rax",
"mov qword ptr [{s} + 264], rdx",
"mov qword ptr [{s} + 272], {c}",
"mov qword ptr [{s} + 280], {t3}",
"mov {t0}, qword ptr [{s} + 704]",
"mov {t1}, qword ptr [{s} + 712]",
"mov {t2}, qword ptr [{s} + 720]",
"mov {t3}, qword ptr [{s} + 728]",
"xor {c:e}, {c:e}",
"add {t0}, qword ptr [{s} + 704]",
"adc {t1}, qword ptr [{s} + 712]",
"adc {t2}, qword ptr [{s} + 720]",
"adc {t3}, qword ptr [{s} + 728]",
"adc {c}, 0",
"mov {t4}, {t0}",
"mov {t5}, {t1}",
"mov {t6}, {t2}",
"mov {t7}, {t3}",
"mov eax, 0xffffffff",
"mov rdx, 0xffffffff00000001",
"sub {t4}, -1",
"sbb {t5}, rax",
"sbb {t6}, 0",
"sbb {t7}, rdx",
"sbb {c}, 0",
"cmovc {t4}, {t0}",
"cmovc {t5}, {t1}",
"cmovc {t6}, {t2}",
"cmovc {t7}, {t3}",
"mov qword ptr [{s} + 704], {t4}",
"mov qword ptr [{s} + 712], {t5}",
"mov qword ptr [{s} + 720], {t6}",
"mov qword ptr [{s} + 728], {t7}",
"mov {t0}, qword ptr [{s} + 224]",
"mov {t1}, qword ptr [{s} + 232]",
"mov {t2}, qword ptr [{s} + 240]",
"mov {t3}, qword ptr [{s} + 248]",
"sub {t0}, qword ptr [{s} + 704]",
"sbb {t1}, qword ptr [{s} + 712]",
"sbb {t2}, qword ptr [{s} + 720]",
"sbb {t3}, qword ptr [{s} + 728]",
"sbb {c}, {c}",
"mov rax, {c}",
"shr rax, 32",
"mov rdx, 0xffffffff00000001",
"and rdx, {c}",
"add {t0}, {c}",
"adc {t1}, rax",
"adc {t2}, 0",
"adc {t3}, rdx",
"mov qword ptr [{s} + 224], {t0}",
"mov qword ptr [{s} + 232], {t1}",
"mov qword ptr [{s} + 240], {t2}",
"mov qword ptr [{s} + 248], {t3}",
s = in(reg) buf.as_mut_ptr(),
t0 = out(reg) _,
t1 = out(reg) _,
t2 = out(reg) _,
t3 = out(reg) _,
t4 = out(reg) _,
t5 = out(reg) _,
t6 = out(reg) _,
t7 = out(reg) _,
c = out(reg) _,
out("rax") _,
out("rdx") _,
options(nostack),
);
}
}
#[allow(dead_code)]
pub const ADD_X3: usize = 6;
#[allow(dead_code)]
pub const ADD_Y3: usize = 7;
#[allow(dead_code)]
pub const ADD_Z3: usize = 8;
#[allow(dead_code)]
pub const ADD_H: usize = 9;
#[allow(dead_code)]
pub const ADD_R: usize = 10;
#[inline(never)]
pub unsafe fn add_affine_adx(buf: &mut [MaybeUninit<u64>; 80]) {
unsafe {
asm!(
".p2align 6",
"mov rdx, qword ptr [{s} + 64]",
"mulx {t2}, {t1}, qword ptr [{s} + 72]",
"mulx {t3}, rax, qword ptr [{s} + 80]",
"add {t2}, rax",
"mulx {t4}, rax, qword ptr [{s} + 88]",
"adc {t3}, rax",
"adc {t4}, 0",
"mov rdx, qword ptr [{s} + 72]",
"xor {t5:e}, {t5:e}",
"mulx {c}, rax, qword ptr [{s} + 80]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 88]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mov eax, 0",
"adcx {t5}, rax",
"mov rdx, qword ptr [{s} + 80]",
"mulx {t6}, rax, qword ptr [{s} + 88]",
"add {t5}, rax",
"adc {t6}, 0",
"xor {t7:e}, {t7:e}",
"add {t1}, {t1}",
"adc {t2}, {t2}",
"adc {t3}, {t3}",
"adc {t4}, {t4}",
"adc {t5}, {t5}",
"adc {t6}, {t6}",
"adc {t7}, 0",
"mov rdx, qword ptr [{s} + 64]",
"mulx {c}, {t0}, rdx",
"add {t1}, {c}",
"mov rdx, qword ptr [{s} + 72]",
"mulx {c}, rax, rdx",
"adc {t2}, rax",
"adc {t3}, {c}",
"mov rdx, qword ptr [{s} + 80]",
"mulx {c}, rax, rdx",
"adc {t4}, rax",
"adc {t5}, {c}",
"mov rdx, qword ptr [{s} + 88]",
"mulx {c}, rax, rdx",
"adc {t6}, rax",
"adc {t7}, {c}",
"mov rax, {t0}",
"shl rax, 32",
"mov rdx, {t0}",
"shr rdx, 32",
"mov {c}, {t0}",
"sub {c}, rax",
"sbb {t0}, rdx",
"add {t1}, rax",
"adc {t2}, rdx",
"adc {t3}, {c}",
"adc {t0}, 0",
"mov rax, {t1}",
"shl rax, 32",
"mov rdx, {t1}",
"shr rdx, 32",
"mov {c}, {t1}",
"sub {c}, rax",
"sbb {t1}, rdx",
"add {t2}, rax",
"adc {t3}, rdx",
"adc {t0}, {c}",
"adc {t1}, 0",
"mov rax, {t2}",
"shl rax, 32",
"mov rdx, {t2}",
"shr rdx, 32",
"mov {c}, {t2}",
"sub {c}, rax",
"sbb {t2}, rdx",
"add {t3}, rax",
"adc {t0}, rdx",
"adc {t1}, {c}",
"adc {t2}, 0",
"mov rax, {t3}",
"shl rax, 32",
"mov rdx, {t3}",
"shr rdx, 32",
"mov {c}, {t3}",
"sub {c}, rax",
"sbb {t3}, rdx",
"add {t0}, rax",
"adc {t1}, rdx",
"adc {t2}, {c}",
"adc {t3}, 0",
"xor {c:e}, {c:e}",
"add {t4}, {t0}",
"adc {t5}, {t1}",
"adc {t6}, {t2}",
"adc {t7}, {t3}",
"adc {c}, 0",
"mov rax, {t4}",
"mov rdx, {t5}",
"mov {t2}, {t6}",
"mov {t3}, {t7}",
"mov {t0:e}, 0xffffffff",
"mov {t1}, 0xffffffff00000001",
"sub rax, -1",
"sbb rdx, {t0}",
"sbb {t2}, 0",
"sbb {t3}, {t1}",
"sbb {c}, 0",
"cmovc rax, {t4}",
"cmovc rdx, {t5}",
"cmovc {t2}, {t6}",
"cmovc {t3}, {t7}",
"mov qword ptr [{s} + 320], rax",
"mov qword ptr [{s} + 328], rdx",
"mov qword ptr [{s} + 336], {t2}",
"mov qword ptr [{s} + 344], {t3}",
"mov rdx, qword ptr [{s} + 64]",
"mulx {t1}, {t0}, qword ptr [{s} + 128]",
"mulx {t2}, rax, qword ptr [{s} + 136]",
"add {t1}, rax",
"mulx {t3}, rax, qword ptr [{s} + 144]",
"adc {t2}, rax",
"mulx {t4}, rax, qword ptr [{s} + 152]",
"adc {t3}, rax",
"adc {t4}, 0",
"xor {t5:e}, {t5:e}",
"mov rax, {t0}",
"shl rax, 32",
"mov {c}, {t0}",
"shr {c}, 32",
"mov rdx, {t0}",
"sub rdx, rax",
"sbb {t0}, {c}",
"add {t1}, rax",
"adc {t2}, {c}",
"adc {t3}, rdx",
"adc {t4}, {t0}",
"adc {t5}, 0",
"mov rdx, qword ptr [{s} + 72]",
"xor {t0:e}, {t0:e}",
"mulx {c}, rax, qword ptr [{s} + 128]",
"adcx {t1}, rax",
"adox {t2}, {c}",
"mulx {c}, rax, qword ptr [{s} + 136]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx {c}, rax, qword ptr [{s} + 144]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 152]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mov eax, 0",
"adcx {t5}, rax",
"adox {t0}, rax",
"adcx {t0}, rax",
"mov rax, {t1}",
"shl rax, 32",
"mov {c}, {t1}",
"shr {c}, 32",
"mov rdx, {t1}",
"sub rdx, rax",
"sbb {t1}, {c}",
"add {t2}, rax",
"adc {t3}, {c}",
"adc {t4}, rdx",
"adc {t5}, {t1}",
"adc {t0}, 0",
"mov rdx, qword ptr [{s} + 80]",
"xor {t1:e}, {t1:e}",
"mulx {c}, rax, qword ptr [{s} + 128]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx {c}, rax, qword ptr [{s} + 136]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 144]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mulx {c}, rax, qword ptr [{s} + 152]",
"adcx {t5}, rax",
"adox {t0}, {c}",
"mov eax, 0",
"adcx {t0}, rax",
"adox {t1}, rax",
"adcx {t1}, rax",
"mov rax, {t2}",
"shl rax, 32",
"mov {c}, {t2}",
"shr {c}, 32",
"mov rdx, {t2}",
"sub rdx, rax",
"sbb {t2}, {c}",
"add {t3}, rax",
"adc {t4}, {c}",
"adc {t5}, rdx",
"adc {t0}, {t2}",
"adc {t1}, 0",
"mov rdx, qword ptr [{s} + 88]",
"xor {t2:e}, {t2:e}",
"mulx {c}, rax, qword ptr [{s} + 128]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 136]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mulx {c}, rax, qword ptr [{s} + 144]",
"adcx {t5}, rax",
"adox {t0}, {c}",
"mulx {c}, rax, qword ptr [{s} + 152]",
"adcx {t0}, rax",
"adox {t1}, {c}",
"mov eax, 0",
"adcx {t1}, rax",
"adox {t2}, rax",
"adcx {t2}, rax",
"mov rax, {t3}",
"shl rax, 32",
"mov {c}, {t3}",
"shr {c}, 32",
"mov rdx, {t3}",
"sub rdx, rax",
"sbb {t3}, {c}",
"add {t4}, rax",
"adc {t5}, {c}",
"adc {t0}, rdx",
"adc {t1}, {t3}",
"adc {t2}, 0",
"mov rax, {t4}",
"mov rdx, {t5}",
"mov {c}, {t0}",
"mov {t3}, {t1}",
"mov {t6:e}, 0xffffffff",
"mov {t7}, 0xffffffff00000001",
"sub rax, -1",
"sbb rdx, {t6}",
"sbb {c}, 0",
"sbb {t3}, {t7}",
"sbb {t2}, 0",
"cmovc rax, {t4}",
"cmovc rdx, {t5}",
"cmovc {c}, {t0}",
"cmovc {t3}, {t1}",
"mov qword ptr [{s} + 544], rax",
"mov qword ptr [{s} + 552], rdx",
"mov qword ptr [{s} + 560], {c}",
"mov qword ptr [{s} + 568], {t3}",
"mov rdx, qword ptr [{s} + 320]",
"mulx {t1}, {t0}, qword ptr [{s} + 96]",
"mulx {t2}, rax, qword ptr [{s} + 104]",
"add {t1}, rax",
"mulx {t3}, rax, qword ptr [{s} + 112]",
"adc {t2}, rax",
"mulx {t4}, rax, qword ptr [{s} + 120]",
"adc {t3}, rax",
"adc {t4}, 0",
"xor {t5:e}, {t5:e}",
"mov rax, {t0}",
"shl rax, 32",
"mov {c}, {t0}",
"shr {c}, 32",
"mov rdx, {t0}",
"sub rdx, rax",
"sbb {t0}, {c}",
"add {t1}, rax",
"adc {t2}, {c}",
"adc {t3}, rdx",
"adc {t4}, {t0}",
"adc {t5}, 0",
"mov rdx, qword ptr [{s} + 328]",
"xor {t0:e}, {t0:e}",
"mulx {c}, rax, qword ptr [{s} + 96]",
"adcx {t1}, rax",
"adox {t2}, {c}",
"mulx {c}, rax, qword ptr [{s} + 104]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx {c}, rax, qword ptr [{s} + 112]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 120]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mov eax, 0",
"adcx {t5}, rax",
"adox {t0}, rax",
"adcx {t0}, rax",
"mov rax, {t1}",
"shl rax, 32",
"mov {c}, {t1}",
"shr {c}, 32",
"mov rdx, {t1}",
"sub rdx, rax",
"sbb {t1}, {c}",
"add {t2}, rax",
"adc {t3}, {c}",
"adc {t4}, rdx",
"adc {t5}, {t1}",
"adc {t0}, 0",
"mov rdx, qword ptr [{s} + 336]",
"xor {t1:e}, {t1:e}",
"mulx {c}, rax, qword ptr [{s} + 96]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx {c}, rax, qword ptr [{s} + 104]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 112]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mulx {c}, rax, qword ptr [{s} + 120]",
"adcx {t5}, rax",
"adox {t0}, {c}",
"mov eax, 0",
"adcx {t0}, rax",
"adox {t1}, rax",
"adcx {t1}, rax",
"mov rax, {t2}",
"shl rax, 32",
"mov {c}, {t2}",
"shr {c}, 32",
"mov rdx, {t2}",
"sub rdx, rax",
"sbb {t2}, {c}",
"add {t3}, rax",
"adc {t4}, {c}",
"adc {t5}, rdx",
"adc {t0}, {t2}",
"adc {t1}, 0",
"mov rdx, qword ptr [{s} + 344]",
"xor {t2:e}, {t2:e}",
"mulx {c}, rax, qword ptr [{s} + 96]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 104]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mulx {c}, rax, qword ptr [{s} + 112]",
"adcx {t5}, rax",
"adox {t0}, {c}",
"mulx {c}, rax, qword ptr [{s} + 120]",
"adcx {t0}, rax",
"adox {t1}, {c}",
"mov eax, 0",
"adcx {t1}, rax",
"adox {t2}, rax",
"adcx {t2}, rax",
"mov rax, {t3}",
"shl rax, 32",
"mov {c}, {t3}",
"shr {c}, 32",
"mov rdx, {t3}",
"sub rdx, rax",
"sbb {t3}, {c}",
"add {t4}, rax",
"adc {t5}, {c}",
"adc {t0}, rdx",
"adc {t1}, {t3}",
"adc {t2}, 0",
"mov rax, {t4}",
"mov rdx, {t5}",
"mov {c}, {t0}",
"mov {t3}, {t1}",
"mov {t6:e}, 0xffffffff",
"mov {t7}, 0xffffffff00000001",
"sub rax, -1",
"sbb rdx, {t6}",
"sbb {c}, 0",
"sbb {t3}, {t7}",
"sbb {t2}, 0",
"cmovc rax, {t4}",
"cmovc rdx, {t5}",
"cmovc {c}, {t0}",
"cmovc {t3}, {t1}",
"mov qword ptr [{s} + 352], rax",
"mov qword ptr [{s} + 360], rdx",
"mov qword ptr [{s} + 368], {c}",
"mov qword ptr [{s} + 376], {t3}",
"mov rdx, qword ptr [{s} + 320]",
"mulx {t1}, {t0}, qword ptr [{s} + 544]",
"mulx {t2}, rax, qword ptr [{s} + 552]",
"add {t1}, rax",
"mulx {t3}, rax, qword ptr [{s} + 560]",
"adc {t2}, rax",
"mulx {t4}, rax, qword ptr [{s} + 568]",
"adc {t3}, rax",
"adc {t4}, 0",
"xor {t5:e}, {t5:e}",
"mov rax, {t0}",
"shl rax, 32",
"mov {c}, {t0}",
"shr {c}, 32",
"mov rdx, {t0}",
"sub rdx, rax",
"sbb {t0}, {c}",
"add {t1}, rax",
"adc {t2}, {c}",
"adc {t3}, rdx",
"adc {t4}, {t0}",
"adc {t5}, 0",
"mov rdx, qword ptr [{s} + 328]",
"xor {t0:e}, {t0:e}",
"mulx {c}, rax, qword ptr [{s} + 544]",
"adcx {t1}, rax",
"adox {t2}, {c}",
"mulx {c}, rax, qword ptr [{s} + 552]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx {c}, rax, qword ptr [{s} + 560]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 568]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mov eax, 0",
"adcx {t5}, rax",
"adox {t0}, rax",
"adcx {t0}, rax",
"mov rax, {t1}",
"shl rax, 32",
"mov {c}, {t1}",
"shr {c}, 32",
"mov rdx, {t1}",
"sub rdx, rax",
"sbb {t1}, {c}",
"add {t2}, rax",
"adc {t3}, {c}",
"adc {t4}, rdx",
"adc {t5}, {t1}",
"adc {t0}, 0",
"mov rdx, qword ptr [{s} + 336]",
"xor {t1:e}, {t1:e}",
"mulx {c}, rax, qword ptr [{s} + 544]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx {c}, rax, qword ptr [{s} + 552]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 560]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mulx {c}, rax, qword ptr [{s} + 568]",
"adcx {t5}, rax",
"adox {t0}, {c}",
"mov eax, 0",
"adcx {t0}, rax",
"adox {t1}, rax",
"adcx {t1}, rax",
"mov rax, {t2}",
"shl rax, 32",
"mov {c}, {t2}",
"shr {c}, 32",
"mov rdx, {t2}",
"sub rdx, rax",
"sbb {t2}, {c}",
"add {t3}, rax",
"adc {t4}, {c}",
"adc {t5}, rdx",
"adc {t0}, {t2}",
"adc {t1}, 0",
"mov rdx, qword ptr [{s} + 344]",
"xor {t2:e}, {t2:e}",
"mulx {c}, rax, qword ptr [{s} + 544]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 552]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mulx {c}, rax, qword ptr [{s} + 560]",
"adcx {t5}, rax",
"adox {t0}, {c}",
"mulx {c}, rax, qword ptr [{s} + 568]",
"adcx {t0}, rax",
"adox {t1}, {c}",
"mov eax, 0",
"adcx {t1}, rax",
"adox {t2}, rax",
"adcx {t2}, rax",
"mov rax, {t3}",
"shl rax, 32",
"mov {c}, {t3}",
"shr {c}, 32",
"mov rdx, {t3}",
"sub rdx, rax",
"sbb {t3}, {c}",
"add {t4}, rax",
"adc {t5}, {c}",
"adc {t0}, rdx",
"adc {t1}, {t3}",
"adc {t2}, 0",
"mov rax, {t4}",
"mov rdx, {t5}",
"mov {c}, {t0}",
"mov {t3}, {t1}",
"mov {t6:e}, 0xffffffff",
"mov {t7}, 0xffffffff00000001",
"sub rax, -1",
"sbb rdx, {t6}",
"sbb {c}, 0",
"sbb {t3}, {t7}",
"sbb {t2}, 0",
"cmovc rax, {t4}",
"cmovc rdx, {t5}",
"cmovc {c}, {t0}",
"cmovc {t3}, {t1}",
"mov qword ptr [{s} + 384], rax",
"mov qword ptr [{s} + 392], rdx",
"mov qword ptr [{s} + 400], {c}",
"mov qword ptr [{s} + 408], {t3}",
"mov {t0}, qword ptr [{s} + 352]",
"mov {t1}, qword ptr [{s} + 360]",
"mov {t2}, qword ptr [{s} + 368]",
"mov {t3}, qword ptr [{s} + 376]",
"sub {t0}, qword ptr [{s}]",
"sbb {t1}, qword ptr [{s} + 8]",
"sbb {t2}, qword ptr [{s} + 16]",
"sbb {t3}, qword ptr [{s} + 24]",
"sbb {c}, {c}",
"mov rax, {c}",
"shr rax, 32",
"mov rdx, 0xffffffff00000001",
"and rdx, {c}",
"add {t0}, {c}",
"adc {t1}, rax",
"adc {t2}, 0",
"adc {t3}, rdx",
"mov qword ptr [{s} + 256], {t0}",
"mov qword ptr [{s} + 264], {t1}",
"mov qword ptr [{s} + 272], {t2}",
"mov qword ptr [{s} + 280], {t3}",
"mov rdx, qword ptr [{s} + 256]",
"mulx {t2}, {t1}, qword ptr [{s} + 264]",
"mulx {t3}, rax, qword ptr [{s} + 272]",
"add {t2}, rax",
"mulx {t4}, rax, qword ptr [{s} + 280]",
"adc {t3}, rax",
"adc {t4}, 0",
"mov rdx, qword ptr [{s} + 264]",
"xor {t5:e}, {t5:e}",
"mulx {c}, rax, qword ptr [{s} + 272]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 280]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mov eax, 0",
"adcx {t5}, rax",
"mov rdx, qword ptr [{s} + 272]",
"mulx {t6}, rax, qword ptr [{s} + 280]",
"add {t5}, rax",
"adc {t6}, 0",
"xor {t7:e}, {t7:e}",
"add {t1}, {t1}",
"adc {t2}, {t2}",
"adc {t3}, {t3}",
"adc {t4}, {t4}",
"adc {t5}, {t5}",
"adc {t6}, {t6}",
"adc {t7}, 0",
"mov rdx, qword ptr [{s} + 256]",
"mulx {c}, {t0}, rdx",
"add {t1}, {c}",
"mov rdx, qword ptr [{s} + 264]",
"mulx {c}, rax, rdx",
"adc {t2}, rax",
"adc {t3}, {c}",
"mov rdx, qword ptr [{s} + 272]",
"mulx {c}, rax, rdx",
"adc {t4}, rax",
"adc {t5}, {c}",
"mov rdx, qword ptr [{s} + 280]",
"mulx {c}, rax, rdx",
"adc {t6}, rax",
"adc {t7}, {c}",
"mov rax, {t0}",
"shl rax, 32",
"mov rdx, {t0}",
"shr rdx, 32",
"mov {c}, {t0}",
"sub {c}, rax",
"sbb {t0}, rdx",
"add {t1}, rax",
"adc {t2}, rdx",
"adc {t3}, {c}",
"adc {t0}, 0",
"mov rax, {t1}",
"shl rax, 32",
"mov rdx, {t1}",
"shr rdx, 32",
"mov {c}, {t1}",
"sub {c}, rax",
"sbb {t1}, rdx",
"add {t2}, rax",
"adc {t3}, rdx",
"adc {t0}, {c}",
"adc {t1}, 0",
"mov rax, {t2}",
"shl rax, 32",
"mov rdx, {t2}",
"shr rdx, 32",
"mov {c}, {t2}",
"sub {c}, rax",
"sbb {t2}, rdx",
"add {t3}, rax",
"adc {t0}, rdx",
"adc {t1}, {c}",
"adc {t2}, 0",
"mov rax, {t3}",
"shl rax, 32",
"mov rdx, {t3}",
"shr rdx, 32",
"mov {c}, {t3}",
"sub {c}, rax",
"sbb {t3}, rdx",
"add {t0}, rax",
"adc {t1}, rdx",
"adc {t2}, {c}",
"adc {t3}, 0",
"xor {c:e}, {c:e}",
"add {t4}, {t0}",
"adc {t5}, {t1}",
"adc {t6}, {t2}",
"adc {t7}, {t3}",
"adc {c}, 0",
"mov rax, {t4}",
"mov rdx, {t5}",
"mov {t2}, {t6}",
"mov {t3}, {t7}",
"mov {t0:e}, 0xffffffff",
"mov {t1}, 0xffffffff00000001",
"sub rax, -1",
"sbb rdx, {t0}",
"sbb {t2}, 0",
"sbb {t3}, {t1}",
"sbb {c}, 0",
"cmovc rax, {t4}",
"cmovc rdx, {t5}",
"cmovc {t2}, {t6}",
"cmovc {t3}, {t7}",
"mov qword ptr [{s} + 416], rax",
"mov qword ptr [{s} + 424], rdx",
"mov qword ptr [{s} + 432], {t2}",
"mov qword ptr [{s} + 440], {t3}",
"mov {t0}, qword ptr [{s} + 384]",
"mov {t1}, qword ptr [{s} + 392]",
"mov {t2}, qword ptr [{s} + 400]",
"mov {t3}, qword ptr [{s} + 408]",
"sub {t0}, qword ptr [{s} + 32]",
"sbb {t1}, qword ptr [{s} + 40]",
"sbb {t2}, qword ptr [{s} + 48]",
"sbb {t3}, qword ptr [{s} + 56]",
"sbb {c}, {c}",
"mov rax, {c}",
"shr rax, 32",
"mov rdx, 0xffffffff00000001",
"and rdx, {c}",
"add {t0}, {c}",
"adc {t1}, rax",
"adc {t2}, 0",
"adc {t3}, rdx",
"mov qword ptr [{s} + 288], {t0}",
"mov qword ptr [{s} + 296], {t1}",
"mov qword ptr [{s} + 304], {t2}",
"mov qword ptr [{s} + 312], {t3}",
"mov {t0}, qword ptr [{s} + 288]",
"mov {t1}, qword ptr [{s} + 296]",
"mov {t2}, qword ptr [{s} + 304]",
"mov {t3}, qword ptr [{s} + 312]",
"xor {c:e}, {c:e}",
"add {t0}, qword ptr [{s} + 288]",
"adc {t1}, qword ptr [{s} + 296]",
"adc {t2}, qword ptr [{s} + 304]",
"adc {t3}, qword ptr [{s} + 312]",
"adc {c}, 0",
"mov {t4}, {t0}",
"mov {t5}, {t1}",
"mov {t6}, {t2}",
"mov {t7}, {t3}",
"mov eax, 0xffffffff",
"mov rdx, 0xffffffff00000001",
"sub {t4}, -1",
"sbb {t5}, rax",
"sbb {t6}, 0",
"sbb {t7}, rdx",
"sbb {c}, 0",
"cmovc {t4}, {t0}",
"cmovc {t5}, {t1}",
"cmovc {t6}, {t2}",
"cmovc {t7}, {t3}",
"mov qword ptr [{s} + 288], {t4}",
"mov qword ptr [{s} + 296], {t5}",
"mov qword ptr [{s} + 304], {t6}",
"mov qword ptr [{s} + 312], {t7}",
"mov rdx, qword ptr [{s} + 288]",
"mulx {t2}, {t1}, qword ptr [{s} + 296]",
"mulx {t3}, rax, qword ptr [{s} + 304]",
"add {t2}, rax",
"mulx {t4}, rax, qword ptr [{s} + 312]",
"adc {t3}, rax",
"adc {t4}, 0",
"mov rdx, qword ptr [{s} + 296]",
"xor {t5:e}, {t5:e}",
"mulx {c}, rax, qword ptr [{s} + 304]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 312]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mov eax, 0",
"adcx {t5}, rax",
"mov rdx, qword ptr [{s} + 304]",
"mulx {t6}, rax, qword ptr [{s} + 312]",
"add {t5}, rax",
"adc {t6}, 0",
"xor {t7:e}, {t7:e}",
"add {t1}, {t1}",
"adc {t2}, {t2}",
"adc {t3}, {t3}",
"adc {t4}, {t4}",
"adc {t5}, {t5}",
"adc {t6}, {t6}",
"adc {t7}, 0",
"mov rdx, qword ptr [{s} + 288]",
"mulx {c}, {t0}, rdx",
"add {t1}, {c}",
"mov rdx, qword ptr [{s} + 296]",
"mulx {c}, rax, rdx",
"adc {t2}, rax",
"adc {t3}, {c}",
"mov rdx, qword ptr [{s} + 304]",
"mulx {c}, rax, rdx",
"adc {t4}, rax",
"adc {t5}, {c}",
"mov rdx, qword ptr [{s} + 312]",
"mulx {c}, rax, rdx",
"adc {t6}, rax",
"adc {t7}, {c}",
"mov rax, {t0}",
"shl rax, 32",
"mov rdx, {t0}",
"shr rdx, 32",
"mov {c}, {t0}",
"sub {c}, rax",
"sbb {t0}, rdx",
"add {t1}, rax",
"adc {t2}, rdx",
"adc {t3}, {c}",
"adc {t0}, 0",
"mov rax, {t1}",
"shl rax, 32",
"mov rdx, {t1}",
"shr rdx, 32",
"mov {c}, {t1}",
"sub {c}, rax",
"sbb {t1}, rdx",
"add {t2}, rax",
"adc {t3}, rdx",
"adc {t0}, {c}",
"adc {t1}, 0",
"mov rax, {t2}",
"shl rax, 32",
"mov rdx, {t2}",
"shr rdx, 32",
"mov {c}, {t2}",
"sub {c}, rax",
"sbb {t2}, rdx",
"add {t3}, rax",
"adc {t0}, rdx",
"adc {t1}, {c}",
"adc {t2}, 0",
"mov rax, {t3}",
"shl rax, 32",
"mov rdx, {t3}",
"shr rdx, 32",
"mov {c}, {t3}",
"sub {c}, rax",
"sbb {t3}, rdx",
"add {t0}, rax",
"adc {t1}, rdx",
"adc {t2}, {c}",
"adc {t3}, 0",
"xor {c:e}, {c:e}",
"add {t4}, {t0}",
"adc {t5}, {t1}",
"adc {t6}, {t2}",
"adc {t7}, {t3}",
"adc {c}, 0",
"mov rax, {t4}",
"mov rdx, {t5}",
"mov {t2}, {t6}",
"mov {t3}, {t7}",
"mov {t0:e}, 0xffffffff",
"mov {t1}, 0xffffffff00000001",
"sub rax, -1",
"sbb rdx, {t0}",
"sbb {t2}, 0",
"sbb {t3}, {t1}",
"sbb {c}, 0",
"cmovc rax, {t4}",
"cmovc rdx, {t5}",
"cmovc {t2}, {t6}",
"cmovc {t3}, {t7}",
"mov qword ptr [{s} + 160], rax",
"mov qword ptr [{s} + 168], rdx",
"mov qword ptr [{s} + 176], {t2}",
"mov qword ptr [{s} + 184], {t3}",
"mov {t0}, qword ptr [{s} + 416]",
"mov {t1}, qword ptr [{s} + 424]",
"mov {t2}, qword ptr [{s} + 432]",
"mov {t3}, qword ptr [{s} + 440]",
"mov {t4}, {t3}",
"shr {t4}, 62",
"shld {t3}, {t2}, 2",
"shld {t2}, {t1}, 2",
"shld {t1}, {t0}, 2",
"shl {t0}, 2",
"mov rax, {t4}",
"shl rax, 32",
"xor {c:e}, {c:e}",
"add {t0}, {t4}",
"adc {t1}, 0",
"adc {t2}, 0",
"adc {t3}, rax",
"adc {c}, 0",
"sub {t1}, rax",
"sbb {t2}, 0",
"sbb {t3}, {t4}",
"sbb {c}, 0",
"mov {t4}, {t0}",
"mov {t5}, {t1}",
"mov {t6}, {t2}",
"mov {t7}, {t3}",
"mov eax, 0xffffffff",
"mov rdx, 0xffffffff00000001",
"sub {t4}, -1",
"sbb {t5}, rax",
"sbb {t6}, 0",
"sbb {t7}, rdx",
"sbb {c}, 0",
"cmovc {t4}, {t0}",
"cmovc {t5}, {t1}",
"cmovc {t6}, {t2}",
"cmovc {t7}, {t3}",
"mov qword ptr [{s} + 448], {t4}",
"mov qword ptr [{s} + 456], {t5}",
"mov qword ptr [{s} + 464], {t6}",
"mov qword ptr [{s} + 472], {t7}",
"mov rdx, qword ptr [{s} + 448]",
"mulx {t1}, {t0}, qword ptr [{s}]",
"mulx {t2}, rax, qword ptr [{s} + 8]",
"add {t1}, rax",
"mulx {t3}, rax, qword ptr [{s} + 16]",
"adc {t2}, rax",
"mulx {t4}, rax, qword ptr [{s} + 24]",
"adc {t3}, rax",
"adc {t4}, 0",
"xor {t5:e}, {t5:e}",
"mov rax, {t0}",
"shl rax, 32",
"mov {c}, {t0}",
"shr {c}, 32",
"mov rdx, {t0}",
"sub rdx, rax",
"sbb {t0}, {c}",
"add {t1}, rax",
"adc {t2}, {c}",
"adc {t3}, rdx",
"adc {t4}, {t0}",
"adc {t5}, 0",
"mov rdx, qword ptr [{s} + 456]",
"xor {t0:e}, {t0:e}",
"mulx {c}, rax, qword ptr [{s}]",
"adcx {t1}, rax",
"adox {t2}, {c}",
"mulx {c}, rax, qword ptr [{s} + 8]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx {c}, rax, qword ptr [{s} + 16]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 24]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mov eax, 0",
"adcx {t5}, rax",
"adox {t0}, rax",
"adcx {t0}, rax",
"mov rax, {t1}",
"shl rax, 32",
"mov {c}, {t1}",
"shr {c}, 32",
"mov rdx, {t1}",
"sub rdx, rax",
"sbb {t1}, {c}",
"add {t2}, rax",
"adc {t3}, {c}",
"adc {t4}, rdx",
"adc {t5}, {t1}",
"adc {t0}, 0",
"mov rdx, qword ptr [{s} + 464]",
"xor {t1:e}, {t1:e}",
"mulx {c}, rax, qword ptr [{s}]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx {c}, rax, qword ptr [{s} + 8]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 16]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mulx {c}, rax, qword ptr [{s} + 24]",
"adcx {t5}, rax",
"adox {t0}, {c}",
"mov eax, 0",
"adcx {t0}, rax",
"adox {t1}, rax",
"adcx {t1}, rax",
"mov rax, {t2}",
"shl rax, 32",
"mov {c}, {t2}",
"shr {c}, 32",
"mov rdx, {t2}",
"sub rdx, rax",
"sbb {t2}, {c}",
"add {t3}, rax",
"adc {t4}, {c}",
"adc {t5}, rdx",
"adc {t0}, {t2}",
"adc {t1}, 0",
"mov rdx, qword ptr [{s} + 472]",
"xor {t2:e}, {t2:e}",
"mulx {c}, rax, qword ptr [{s}]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 8]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mulx {c}, rax, qword ptr [{s} + 16]",
"adcx {t5}, rax",
"adox {t0}, {c}",
"mulx {c}, rax, qword ptr [{s} + 24]",
"adcx {t0}, rax",
"adox {t1}, {c}",
"mov eax, 0",
"adcx {t1}, rax",
"adox {t2}, rax",
"adcx {t2}, rax",
"mov rax, {t3}",
"shl rax, 32",
"mov {c}, {t3}",
"shr {c}, 32",
"mov rdx, {t3}",
"sub rdx, rax",
"sbb {t3}, {c}",
"add {t4}, rax",
"adc {t5}, {c}",
"adc {t0}, rdx",
"adc {t1}, {t3}",
"adc {t2}, 0",
"mov rax, {t4}",
"mov rdx, {t5}",
"mov {c}, {t0}",
"mov {t3}, {t1}",
"mov {t6:e}, 0xffffffff",
"mov {t7}, 0xffffffff00000001",
"sub rax, -1",
"sbb rdx, {t6}",
"sbb {c}, 0",
"sbb {t3}, {t7}",
"sbb {t2}, 0",
"cmovc rax, {t4}",
"cmovc rdx, {t5}",
"cmovc {c}, {t0}",
"cmovc {t3}, {t1}",
"mov qword ptr [{s} + 512], rax",
"mov qword ptr [{s} + 520], rdx",
"mov qword ptr [{s} + 528], {c}",
"mov qword ptr [{s} + 536], {t3}",
"mov rdx, qword ptr [{s} + 448]",
"mulx {t1}, {t0}, qword ptr [{s} + 256]",
"mulx {t2}, rax, qword ptr [{s} + 264]",
"add {t1}, rax",
"mulx {t3}, rax, qword ptr [{s} + 272]",
"adc {t2}, rax",
"mulx {t4}, rax, qword ptr [{s} + 280]",
"adc {t3}, rax",
"adc {t4}, 0",
"xor {t5:e}, {t5:e}",
"mov rax, {t0}",
"shl rax, 32",
"mov {c}, {t0}",
"shr {c}, 32",
"mov rdx, {t0}",
"sub rdx, rax",
"sbb {t0}, {c}",
"add {t1}, rax",
"adc {t2}, {c}",
"adc {t3}, rdx",
"adc {t4}, {t0}",
"adc {t5}, 0",
"mov rdx, qword ptr [{s} + 456]",
"xor {t0:e}, {t0:e}",
"mulx {c}, rax, qword ptr [{s} + 256]",
"adcx {t1}, rax",
"adox {t2}, {c}",
"mulx {c}, rax, qword ptr [{s} + 264]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx {c}, rax, qword ptr [{s} + 272]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 280]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mov eax, 0",
"adcx {t5}, rax",
"adox {t0}, rax",
"adcx {t0}, rax",
"mov rax, {t1}",
"shl rax, 32",
"mov {c}, {t1}",
"shr {c}, 32",
"mov rdx, {t1}",
"sub rdx, rax",
"sbb {t1}, {c}",
"add {t2}, rax",
"adc {t3}, {c}",
"adc {t4}, rdx",
"adc {t5}, {t1}",
"adc {t0}, 0",
"mov rdx, qword ptr [{s} + 464]",
"xor {t1:e}, {t1:e}",
"mulx {c}, rax, qword ptr [{s} + 256]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx {c}, rax, qword ptr [{s} + 264]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 272]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mulx {c}, rax, qword ptr [{s} + 280]",
"adcx {t5}, rax",
"adox {t0}, {c}",
"mov eax, 0",
"adcx {t0}, rax",
"adox {t1}, rax",
"adcx {t1}, rax",
"mov rax, {t2}",
"shl rax, 32",
"mov {c}, {t2}",
"shr {c}, 32",
"mov rdx, {t2}",
"sub rdx, rax",
"sbb {t2}, {c}",
"add {t3}, rax",
"adc {t4}, {c}",
"adc {t5}, rdx",
"adc {t0}, {t2}",
"adc {t1}, 0",
"mov rdx, qword ptr [{s} + 472]",
"xor {t2:e}, {t2:e}",
"mulx {c}, rax, qword ptr [{s} + 256]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 264]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mulx {c}, rax, qword ptr [{s} + 272]",
"adcx {t5}, rax",
"adox {t0}, {c}",
"mulx {c}, rax, qword ptr [{s} + 280]",
"adcx {t0}, rax",
"adox {t1}, {c}",
"mov eax, 0",
"adcx {t1}, rax",
"adox {t2}, rax",
"adcx {t2}, rax",
"mov rax, {t3}",
"shl rax, 32",
"mov {c}, {t3}",
"shr {c}, 32",
"mov rdx, {t3}",
"sub rdx, rax",
"sbb {t3}, {c}",
"add {t4}, rax",
"adc {t5}, {c}",
"adc {t0}, rdx",
"adc {t1}, {t3}",
"adc {t2}, 0",
"mov rax, {t4}",
"mov rdx, {t5}",
"mov {c}, {t0}",
"mov {t3}, {t1}",
"mov {t6:e}, 0xffffffff",
"mov {t7}, 0xffffffff00000001",
"sub rax, -1",
"sbb rdx, {t6}",
"sbb {c}, 0",
"sbb {t3}, {t7}",
"sbb {t2}, 0",
"cmovc rax, {t4}",
"cmovc rdx, {t5}",
"cmovc {c}, {t0}",
"cmovc {t3}, {t1}",
"mov qword ptr [{s} + 480], rax",
"mov qword ptr [{s} + 488], rdx",
"mov qword ptr [{s} + 496], {c}",
"mov qword ptr [{s} + 504], {t3}",
"mov {t0}, qword ptr [{s} + 64]",
"mov {t1}, qword ptr [{s} + 72]",
"mov {t2}, qword ptr [{s} + 80]",
"mov {t3}, qword ptr [{s} + 88]",
"xor {c:e}, {c:e}",
"add {t0}, qword ptr [{s} + 256]",
"adc {t1}, qword ptr [{s} + 264]",
"adc {t2}, qword ptr [{s} + 272]",
"adc {t3}, qword ptr [{s} + 280]",
"adc {c}, 0",
"mov {t4}, {t0}",
"mov {t5}, {t1}",
"mov {t6}, {t2}",
"mov {t7}, {t3}",
"mov eax, 0xffffffff",
"mov rdx, 0xffffffff00000001",
"sub {t4}, -1",
"sbb {t5}, rax",
"sbb {t6}, 0",
"sbb {t7}, rdx",
"sbb {c}, 0",
"cmovc {t4}, {t0}",
"cmovc {t5}, {t1}",
"cmovc {t6}, {t2}",
"cmovc {t7}, {t3}",
"mov qword ptr [{s} + 224], {t4}",
"mov qword ptr [{s} + 232], {t5}",
"mov qword ptr [{s} + 240], {t6}",
"mov qword ptr [{s} + 248], {t7}",
"mov rdx, qword ptr [{s} + 224]",
"mulx {t2}, {t1}, qword ptr [{s} + 232]",
"mulx {t3}, rax, qword ptr [{s} + 240]",
"add {t2}, rax",
"mulx {t4}, rax, qword ptr [{s} + 248]",
"adc {t3}, rax",
"adc {t4}, 0",
"mov rdx, qword ptr [{s} + 232]",
"xor {t5:e}, {t5:e}",
"mulx {c}, rax, qword ptr [{s} + 240]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 248]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mov eax, 0",
"adcx {t5}, rax",
"mov rdx, qword ptr [{s} + 240]",
"mulx {t6}, rax, qword ptr [{s} + 248]",
"add {t5}, rax",
"adc {t6}, 0",
"xor {t7:e}, {t7:e}",
"add {t1}, {t1}",
"adc {t2}, {t2}",
"adc {t3}, {t3}",
"adc {t4}, {t4}",
"adc {t5}, {t5}",
"adc {t6}, {t6}",
"adc {t7}, 0",
"mov rdx, qword ptr [{s} + 224]",
"mulx {c}, {t0}, rdx",
"add {t1}, {c}",
"mov rdx, qword ptr [{s} + 232]",
"mulx {c}, rax, rdx",
"adc {t2}, rax",
"adc {t3}, {c}",
"mov rdx, qword ptr [{s} + 240]",
"mulx {c}, rax, rdx",
"adc {t4}, rax",
"adc {t5}, {c}",
"mov rdx, qword ptr [{s} + 248]",
"mulx {c}, rax, rdx",
"adc {t6}, rax",
"adc {t7}, {c}",
"mov rax, {t0}",
"shl rax, 32",
"mov rdx, {t0}",
"shr rdx, 32",
"mov {c}, {t0}",
"sub {c}, rax",
"sbb {t0}, rdx",
"add {t1}, rax",
"adc {t2}, rdx",
"adc {t3}, {c}",
"adc {t0}, 0",
"mov rax, {t1}",
"shl rax, 32",
"mov rdx, {t1}",
"shr rdx, 32",
"mov {c}, {t1}",
"sub {c}, rax",
"sbb {t1}, rdx",
"add {t2}, rax",
"adc {t3}, rdx",
"adc {t0}, {c}",
"adc {t1}, 0",
"mov rax, {t2}",
"shl rax, 32",
"mov rdx, {t2}",
"shr rdx, 32",
"mov {c}, {t2}",
"sub {c}, rax",
"sbb {t2}, rdx",
"add {t3}, rax",
"adc {t0}, rdx",
"adc {t1}, {c}",
"adc {t2}, 0",
"mov rax, {t3}",
"shl rax, 32",
"mov rdx, {t3}",
"shr rdx, 32",
"mov {c}, {t3}",
"sub {c}, rax",
"sbb {t3}, rdx",
"add {t0}, rax",
"adc {t1}, rdx",
"adc {t2}, {c}",
"adc {t3}, 0",
"xor {c:e}, {c:e}",
"add {t4}, {t0}",
"adc {t5}, {t1}",
"adc {t6}, {t2}",
"adc {t7}, {t3}",
"adc {c}, 0",
"mov rax, {t4}",
"mov rdx, {t5}",
"mov {t2}, {t6}",
"mov {t3}, {t7}",
"mov {t0:e}, 0xffffffff",
"mov {t1}, 0xffffffff00000001",
"sub rax, -1",
"sbb rdx, {t0}",
"sbb {t2}, 0",
"sbb {t3}, {t1}",
"sbb {c}, 0",
"cmovc rax, {t4}",
"cmovc rdx, {t5}",
"cmovc {t2}, {t6}",
"cmovc {t3}, {t7}",
"mov qword ptr [{s} + 224], rax",
"mov qword ptr [{s} + 232], rdx",
"mov qword ptr [{s} + 240], {t2}",
"mov qword ptr [{s} + 248], {t3}",
"mov rdx, qword ptr [{s} + 480]",
"mulx {t1}, {t0}, qword ptr [{s} + 32]",
"mulx {t2}, rax, qword ptr [{s} + 40]",
"add {t1}, rax",
"mulx {t3}, rax, qword ptr [{s} + 48]",
"adc {t2}, rax",
"mulx {t4}, rax, qword ptr [{s} + 56]",
"adc {t3}, rax",
"adc {t4}, 0",
"xor {t5:e}, {t5:e}",
"mov rax, {t0}",
"shl rax, 32",
"mov {c}, {t0}",
"shr {c}, 32",
"mov rdx, {t0}",
"sub rdx, rax",
"sbb {t0}, {c}",
"add {t1}, rax",
"adc {t2}, {c}",
"adc {t3}, rdx",
"adc {t4}, {t0}",
"adc {t5}, 0",
"mov rdx, qword ptr [{s} + 488]",
"xor {t0:e}, {t0:e}",
"mulx {c}, rax, qword ptr [{s} + 32]",
"adcx {t1}, rax",
"adox {t2}, {c}",
"mulx {c}, rax, qword ptr [{s} + 40]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx {c}, rax, qword ptr [{s} + 48]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 56]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mov eax, 0",
"adcx {t5}, rax",
"adox {t0}, rax",
"adcx {t0}, rax",
"mov rax, {t1}",
"shl rax, 32",
"mov {c}, {t1}",
"shr {c}, 32",
"mov rdx, {t1}",
"sub rdx, rax",
"sbb {t1}, {c}",
"add {t2}, rax",
"adc {t3}, {c}",
"adc {t4}, rdx",
"adc {t5}, {t1}",
"adc {t0}, 0",
"mov rdx, qword ptr [{s} + 496]",
"xor {t1:e}, {t1:e}",
"mulx {c}, rax, qword ptr [{s} + 32]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx {c}, rax, qword ptr [{s} + 40]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 48]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mulx {c}, rax, qword ptr [{s} + 56]",
"adcx {t5}, rax",
"adox {t0}, {c}",
"mov eax, 0",
"adcx {t0}, rax",
"adox {t1}, rax",
"adcx {t1}, rax",
"mov rax, {t2}",
"shl rax, 32",
"mov {c}, {t2}",
"shr {c}, 32",
"mov rdx, {t2}",
"sub rdx, rax",
"sbb {t2}, {c}",
"add {t3}, rax",
"adc {t4}, {c}",
"adc {t5}, rdx",
"adc {t0}, {t2}",
"adc {t1}, 0",
"mov rdx, qword ptr [{s} + 504]",
"xor {t2:e}, {t2:e}",
"mulx {c}, rax, qword ptr [{s} + 32]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 40]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mulx {c}, rax, qword ptr [{s} + 48]",
"adcx {t5}, rax",
"adox {t0}, {c}",
"mulx {c}, rax, qword ptr [{s} + 56]",
"adcx {t0}, rax",
"adox {t1}, {c}",
"mov eax, 0",
"adcx {t1}, rax",
"adox {t2}, rax",
"adcx {t2}, rax",
"mov rax, {t3}",
"shl rax, 32",
"mov {c}, {t3}",
"shr {c}, 32",
"mov rdx, {t3}",
"sub rdx, rax",
"sbb {t3}, {c}",
"add {t4}, rax",
"adc {t5}, {c}",
"adc {t0}, rdx",
"adc {t1}, {t3}",
"adc {t2}, 0",
"mov rax, {t4}",
"mov rdx, {t5}",
"mov {c}, {t0}",
"mov {t3}, {t1}",
"mov {t6:e}, 0xffffffff",
"mov {t7}, 0xffffffff00000001",
"sub rax, -1",
"sbb rdx, {t6}",
"sbb {c}, 0",
"sbb {t3}, {t7}",
"sbb {t2}, 0",
"cmovc rax, {t4}",
"cmovc rdx, {t5}",
"cmovc {c}, {t0}",
"cmovc {t3}, {t1}",
"mov qword ptr [{s} + 576], rax",
"mov qword ptr [{s} + 584], rdx",
"mov qword ptr [{s} + 592], {c}",
"mov qword ptr [{s} + 600], {t3}",
"mov {t0}, qword ptr [{s} + 512]",
"mov {t1}, qword ptr [{s} + 520]",
"mov {t2}, qword ptr [{s} + 528]",
"mov {t3}, qword ptr [{s} + 536]",
"xor {c:e}, {c:e}",
"add {t0}, qword ptr [{s} + 512]",
"adc {t1}, qword ptr [{s} + 520]",
"adc {t2}, qword ptr [{s} + 528]",
"adc {t3}, qword ptr [{s} + 536]",
"adc {c}, 0",
"mov {t4}, {t0}",
"mov {t5}, {t1}",
"mov {t6}, {t2}",
"mov {t7}, {t3}",
"mov eax, 0xffffffff",
"mov rdx, 0xffffffff00000001",
"sub {t4}, -1",
"sbb {t5}, rax",
"sbb {t6}, 0",
"sbb {t7}, rdx",
"sbb {c}, 0",
"cmovc {t4}, {t0}",
"cmovc {t5}, {t1}",
"cmovc {t6}, {t2}",
"cmovc {t7}, {t3}",
"mov qword ptr [{s} + 544], {t4}",
"mov qword ptr [{s} + 552], {t5}",
"mov qword ptr [{s} + 560], {t6}",
"mov qword ptr [{s} + 568], {t7}",
"mov {t0}, qword ptr [{s} + 160]",
"mov {t1}, qword ptr [{s} + 168]",
"mov {t2}, qword ptr [{s} + 176]",
"mov {t3}, qword ptr [{s} + 184]",
"sub {t0}, qword ptr [{s} + 480]",
"sbb {t1}, qword ptr [{s} + 488]",
"sbb {t2}, qword ptr [{s} + 496]",
"sbb {t3}, qword ptr [{s} + 504]",
"sbb {c}, {c}",
"mov rax, {c}",
"shr rax, 32",
"mov rdx, 0xffffffff00000001",
"and rdx, {c}",
"add {t0}, {c}",
"adc {t1}, rax",
"adc {t2}, 0",
"adc {t3}, rdx",
"mov qword ptr [{s} + 160], {t0}",
"mov qword ptr [{s} + 168], {t1}",
"mov qword ptr [{s} + 176], {t2}",
"mov qword ptr [{s} + 184], {t3}",
"mov {t0}, qword ptr [{s} + 160]",
"mov {t1}, qword ptr [{s} + 168]",
"mov {t2}, qword ptr [{s} + 176]",
"mov {t3}, qword ptr [{s} + 184]",
"sub {t0}, qword ptr [{s} + 544]",
"sbb {t1}, qword ptr [{s} + 552]",
"sbb {t2}, qword ptr [{s} + 560]",
"sbb {t3}, qword ptr [{s} + 568]",
"sbb {c}, {c}",
"mov rax, {c}",
"shr rax, 32",
"mov rdx, 0xffffffff00000001",
"and rdx, {c}",
"add {t0}, {c}",
"adc {t1}, rax",
"adc {t2}, 0",
"adc {t3}, rdx",
"mov qword ptr [{s} + 160], {t0}",
"mov qword ptr [{s} + 168], {t1}",
"mov qword ptr [{s} + 176], {t2}",
"mov qword ptr [{s} + 184], {t3}",
"mov {t0}, qword ptr [{s} + 512]",
"mov {t1}, qword ptr [{s} + 520]",
"mov {t2}, qword ptr [{s} + 528]",
"mov {t3}, qword ptr [{s} + 536]",
"sub {t0}, qword ptr [{s} + 160]",
"sbb {t1}, qword ptr [{s} + 168]",
"sbb {t2}, qword ptr [{s} + 176]",
"sbb {t3}, qword ptr [{s} + 184]",
"sbb {c}, {c}",
"mov rax, {c}",
"shr rax, 32",
"mov rdx, 0xffffffff00000001",
"and rdx, {c}",
"add {t0}, {c}",
"adc {t1}, rax",
"adc {t2}, 0",
"adc {t3}, rdx",
"mov qword ptr [{s} + 608], {t0}",
"mov qword ptr [{s} + 616], {t1}",
"mov qword ptr [{s} + 624], {t2}",
"mov qword ptr [{s} + 632], {t3}",
"mov {t0}, qword ptr [{s} + 224]",
"mov {t1}, qword ptr [{s} + 232]",
"mov {t2}, qword ptr [{s} + 240]",
"mov {t3}, qword ptr [{s} + 248]",
"sub {t0}, qword ptr [{s} + 320]",
"sbb {t1}, qword ptr [{s} + 328]",
"sbb {t2}, qword ptr [{s} + 336]",
"sbb {t3}, qword ptr [{s} + 344]",
"sbb {c}, {c}",
"mov rax, {c}",
"shr rax, 32",
"mov rdx, 0xffffffff00000001",
"and rdx, {c}",
"add {t0}, {c}",
"adc {t1}, rax",
"adc {t2}, 0",
"adc {t3}, rdx",
"mov qword ptr [{s} + 224], {t0}",
"mov qword ptr [{s} + 232], {t1}",
"mov qword ptr [{s} + 240], {t2}",
"mov qword ptr [{s} + 248], {t3}",
"mov rdx, qword ptr [{s} + 608]",
"mulx {t1}, {t0}, qword ptr [{s} + 288]",
"mulx {t2}, rax, qword ptr [{s} + 296]",
"add {t1}, rax",
"mulx {t3}, rax, qword ptr [{s} + 304]",
"adc {t2}, rax",
"mulx {t4}, rax, qword ptr [{s} + 312]",
"adc {t3}, rax",
"adc {t4}, 0",
"xor {t5:e}, {t5:e}",
"mov rax, {t0}",
"shl rax, 32",
"mov {c}, {t0}",
"shr {c}, 32",
"mov rdx, {t0}",
"sub rdx, rax",
"sbb {t0}, {c}",
"add {t1}, rax",
"adc {t2}, {c}",
"adc {t3}, rdx",
"adc {t4}, {t0}",
"adc {t5}, 0",
"mov rdx, qword ptr [{s} + 616]",
"xor {t0:e}, {t0:e}",
"mulx {c}, rax, qword ptr [{s} + 288]",
"adcx {t1}, rax",
"adox {t2}, {c}",
"mulx {c}, rax, qword ptr [{s} + 296]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx {c}, rax, qword ptr [{s} + 304]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 312]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mov eax, 0",
"adcx {t5}, rax",
"adox {t0}, rax",
"adcx {t0}, rax",
"mov rax, {t1}",
"shl rax, 32",
"mov {c}, {t1}",
"shr {c}, 32",
"mov rdx, {t1}",
"sub rdx, rax",
"sbb {t1}, {c}",
"add {t2}, rax",
"adc {t3}, {c}",
"adc {t4}, rdx",
"adc {t5}, {t1}",
"adc {t0}, 0",
"mov rdx, qword ptr [{s} + 624]",
"xor {t1:e}, {t1:e}",
"mulx {c}, rax, qword ptr [{s} + 288]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx {c}, rax, qword ptr [{s} + 296]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 304]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mulx {c}, rax, qword ptr [{s} + 312]",
"adcx {t5}, rax",
"adox {t0}, {c}",
"mov eax, 0",
"adcx {t0}, rax",
"adox {t1}, rax",
"adcx {t1}, rax",
"mov rax, {t2}",
"shl rax, 32",
"mov {c}, {t2}",
"shr {c}, 32",
"mov rdx, {t2}",
"sub rdx, rax",
"sbb {t2}, {c}",
"add {t3}, rax",
"adc {t4}, {c}",
"adc {t5}, rdx",
"adc {t0}, {t2}",
"adc {t1}, 0",
"mov rdx, qword ptr [{s} + 632]",
"xor {t2:e}, {t2:e}",
"mulx {c}, rax, qword ptr [{s} + 288]",
"adcx {t3}, rax",
"adox {t4}, {c}",
"mulx {c}, rax, qword ptr [{s} + 296]",
"adcx {t4}, rax",
"adox {t5}, {c}",
"mulx {c}, rax, qword ptr [{s} + 304]",
"adcx {t5}, rax",
"adox {t0}, {c}",
"mulx {c}, rax, qword ptr [{s} + 312]",
"adcx {t0}, rax",
"adox {t1}, {c}",
"mov eax, 0",
"adcx {t1}, rax",
"adox {t2}, rax",
"adcx {t2}, rax",
"mov rax, {t3}",
"shl rax, 32",
"mov {c}, {t3}",
"shr {c}, 32",
"mov rdx, {t3}",
"sub rdx, rax",
"sbb {t3}, {c}",
"add {t4}, rax",
"adc {t5}, {c}",
"adc {t0}, rdx",
"adc {t1}, {t3}",
"adc {t2}, 0",
"mov rax, {t4}",
"mov rdx, {t5}",
"mov {c}, {t0}",
"mov {t3}, {t1}",
"mov {t6:e}, 0xffffffff",
"mov {t7}, 0xffffffff00000001",
"sub rax, -1",
"sbb rdx, {t6}",
"sbb {c}, 0",
"sbb {t3}, {t7}",
"sbb {t2}, 0",
"cmovc rax, {t4}",
"cmovc rdx, {t5}",
"cmovc {c}, {t0}",
"cmovc {t3}, {t1}",
"mov qword ptr [{s} + 192], rax",
"mov qword ptr [{s} + 200], rdx",
"mov qword ptr [{s} + 208], {c}",
"mov qword ptr [{s} + 216], {t3}",
"mov {t0}, qword ptr [{s} + 224]",
"mov {t1}, qword ptr [{s} + 232]",
"mov {t2}, qword ptr [{s} + 240]",
"mov {t3}, qword ptr [{s} + 248]",
"sub {t0}, qword ptr [{s} + 416]",
"sbb {t1}, qword ptr [{s} + 424]",
"sbb {t2}, qword ptr [{s} + 432]",
"sbb {t3}, qword ptr [{s} + 440]",
"sbb {c}, {c}",
"mov rax, {c}",
"shr rax, 32",
"mov rdx, 0xffffffff00000001",
"and rdx, {c}",
"add {t0}, {c}",
"adc {t1}, rax",
"adc {t2}, 0",
"adc {t3}, rdx",
"mov qword ptr [{s} + 224], {t0}",
"mov qword ptr [{s} + 232], {t1}",
"mov qword ptr [{s} + 240], {t2}",
"mov qword ptr [{s} + 248], {t3}",
"mov {t0}, qword ptr [{s} + 576]",
"mov {t1}, qword ptr [{s} + 584]",
"mov {t2}, qword ptr [{s} + 592]",
"mov {t3}, qword ptr [{s} + 600]",
"xor {c:e}, {c:e}",
"add {t0}, qword ptr [{s} + 576]",
"adc {t1}, qword ptr [{s} + 584]",
"adc {t2}, qword ptr [{s} + 592]",
"adc {t3}, qword ptr [{s} + 600]",
"adc {c}, 0",
"mov {t4}, {t0}",
"mov {t5}, {t1}",
"mov {t6}, {t2}",
"mov {t7}, {t3}",
"mov eax, 0xffffffff",
"mov rdx, 0xffffffff00000001",
"sub {t4}, -1",
"sbb {t5}, rax",
"sbb {t6}, 0",
"sbb {t7}, rdx",
"sbb {c}, 0",
"cmovc {t4}, {t0}",
"cmovc {t5}, {t1}",
"cmovc {t6}, {t2}",
"cmovc {t7}, {t3}",
"mov qword ptr [{s} + 576], {t4}",
"mov qword ptr [{s} + 584], {t5}",
"mov qword ptr [{s} + 592], {t6}",
"mov qword ptr [{s} + 600], {t7}",
"mov {t0}, qword ptr [{s} + 192]",
"mov {t1}, qword ptr [{s} + 200]",
"mov {t2}, qword ptr [{s} + 208]",
"mov {t3}, qword ptr [{s} + 216]",
"sub {t0}, qword ptr [{s} + 576]",
"sbb {t1}, qword ptr [{s} + 584]",
"sbb {t2}, qword ptr [{s} + 592]",
"sbb {t3}, qword ptr [{s} + 600]",
"sbb {c}, {c}",
"mov rax, {c}",
"shr rax, 32",
"mov rdx, 0xffffffff00000001",
"and rdx, {c}",
"add {t0}, {c}",
"adc {t1}, rax",
"adc {t2}, 0",
"adc {t3}, rdx",
"mov qword ptr [{s} + 192], {t0}",
"mov qword ptr [{s} + 200], {t1}",
"mov qword ptr [{s} + 208], {t2}",
"mov qword ptr [{s} + 216], {t3}",
s = in(reg) buf.as_mut_ptr(),
t0 = out(reg) _,
t1 = out(reg) _,
t2 = out(reg) _,
t3 = out(reg) _,
t4 = out(reg) _,
t5 = out(reg) _,
t6 = out(reg) _,
t7 = out(reg) _,
c = out(reg) _,
out("rax") _,
out("rdx") _,
options(nostack),
);
}
}
#[allow(dead_code)]
pub const ADD_AFFINE_X1: usize = 0;
#[allow(dead_code)]
pub const ADD_AFFINE_Y1: usize = 1;
#[allow(dead_code)]
pub const ADD_AFFINE_Z1: usize = 2;
#[allow(dead_code)]
pub const ADD_AFFINE_X2: usize = 3;
#[allow(dead_code)]
pub const ADD_AFFINE_Y2: usize = 4;
#[allow(dead_code)]
pub const ADD_AFFINE_X3: usize = 5;
#[allow(dead_code)]
pub const ADD_AFFINE_Y3: usize = 6;
#[allow(dead_code)]
pub const ADD_AFFINE_Z3: usize = 7;
#[allow(dead_code)]
pub const ADD_AFFINE_H: usize = 8;
#[allow(dead_code)]
pub const ADD_AFFINE_R: usize = 9;
#[cfg(test)]
#[inline(never)]
pub unsafe fn cms_3_8_adx(buf: &mut [MaybeUninit<u64>; 12]) {
unsafe {
asm!(
".p2align 6",
"mov {t0}, -1",
"sub {t0}, qword ptr [{s} + 32]",
"mov {t1:e}, 0xffffffff",
"sbb {t1}, qword ptr [{s} + 40]",
"mov {t2:e}, 0",
"sbb {t2}, qword ptr [{s} + 48]",
"mov {t3}, 0xffffffff00000001",
"sbb {t3}, qword ptr [{s} + 56]",
"mov {t4}, {t3}",
"shr {t4}, 61",
"shld {t3}, {t2}, 3",
"shld {t2}, {t1}, 3",
"shld {t1}, {t0}, 3",
"shl {t0}, 3",
"mov edx, 3",
"xor {t6:e}, {t6:e}",
"mulx {c}, rax, qword ptr [{s}]",
"adcx {t0}, rax",
"adox {t1}, {c}",
"mulx {c}, rax, qword ptr [{s} + 8]",
"adcx {t1}, rax",
"adox {t2}, {c}",
"mulx {c}, rax, qword ptr [{s} + 16]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx rdx, rax, qword ptr [{s} + 24]",
"adcx {t3}, rax",
"adox rdx, {t4}",
"adcx rdx, {t6}",
"add rdx, 1",
"mov rax, rdx",
"shl rax, 32",
"mov {c}, rax",
"neg rax",
"sub {c}, rdx",
"sub {c}, 1",
"add {t0}, rdx",
"adc {t1}, rax",
"adc {t2}, -1",
"adc {t3}, {c}",
"cmc",
"sbb rax, rax",
"mov rdx, rax",
"shr rdx, 32",
"mov {c}, 0xffffffff00000001",
"and {c}, rax",
"add {t0}, rax",
"adc {t1}, rdx",
"adc {t2}, 0",
"adc {t3}, {c}",
"mov qword ptr [{s} + 64], {t0}",
"mov qword ptr [{s} + 72], {t1}",
"mov qword ptr [{s} + 80], {t2}",
"mov qword ptr [{s} + 88], {t3}",
s = in(reg) buf.as_mut_ptr(),
t0 = out(reg) _,
t1 = out(reg) _,
t2 = out(reg) _,
t3 = out(reg) _,
t4 = out(reg) _,
t6 = out(reg) _,
c = out(reg) _,
out("rax") _,
out("rdx") _,
options(nostack),
);
}
}
#[cfg(test)]
#[allow(dead_code)]
pub const CMS_3_8_OUT: usize = 2;
#[cfg(test)]
#[inline(never)]
pub unsafe fn cms_4_1_adx(buf: &mut [MaybeUninit<u64>; 12]) {
unsafe {
asm!(
".p2align 6",
"xor {t4:e}, {t4:e}",
"mov {t0}, -1",
"sub {t0}, qword ptr [{s} + 32]",
"mov {t1:e}, 0xffffffff",
"sbb {t1}, qword ptr [{s} + 40]",
"mov {t2:e}, 0",
"sbb {t2}, qword ptr [{s} + 48]",
"mov {t3}, 0xffffffff00000001",
"sbb {t3}, qword ptr [{s} + 56]",
"mov edx, 4",
"xor {t6:e}, {t6:e}",
"mulx {c}, rax, qword ptr [{s}]",
"adcx {t0}, rax",
"adox {t1}, {c}",
"mulx {c}, rax, qword ptr [{s} + 8]",
"adcx {t1}, rax",
"adox {t2}, {c}",
"mulx {c}, rax, qword ptr [{s} + 16]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx rdx, rax, qword ptr [{s} + 24]",
"adcx {t3}, rax",
"adox rdx, {t4}",
"adcx rdx, {t6}",
"add rdx, 1",
"mov rax, rdx",
"shl rax, 32",
"mov {c}, rax",
"neg rax",
"sub {c}, rdx",
"sub {c}, 1",
"add {t0}, rdx",
"adc {t1}, rax",
"adc {t2}, -1",
"adc {t3}, {c}",
"cmc",
"sbb rax, rax",
"mov rdx, rax",
"shr rdx, 32",
"mov {c}, 0xffffffff00000001",
"and {c}, rax",
"add {t0}, rax",
"adc {t1}, rdx",
"adc {t2}, 0",
"adc {t3}, {c}",
"mov qword ptr [{s} + 64], {t0}",
"mov qword ptr [{s} + 72], {t1}",
"mov qword ptr [{s} + 80], {t2}",
"mov qword ptr [{s} + 88], {t3}",
s = in(reg) buf.as_mut_ptr(),
t0 = out(reg) _,
t1 = out(reg) _,
t2 = out(reg) _,
t3 = out(reg) _,
t4 = out(reg) _,
t6 = out(reg) _,
c = out(reg) _,
out("rax") _,
out("rdx") _,
options(nostack),
);
}
}
#[cfg(test)]
#[allow(dead_code)]
pub const CMS_4_1_OUT: usize = 2;
#[cfg(test)]
#[inline(never)]
pub unsafe fn cms_12_9_adx(buf: &mut [MaybeUninit<u64>; 12]) {
unsafe {
asm!(
".p2align 6",
"mov {t0}, -1",
"sub {t0}, qword ptr [{s} + 32]",
"mov {t1:e}, 0xffffffff",
"sbb {t1}, qword ptr [{s} + 40]",
"mov {t2:e}, 0",
"sbb {t2}, qword ptr [{s} + 48]",
"mov {t3}, 0xffffffff00000001",
"sbb {t3}, qword ptr [{s} + 56]",
"mov edx, 9",
"mulx {c}, {t0}, {t0}",
"mulx {t5}, {t1}, {t1}",
"add {t1}, {c}",
"mulx {c}, {t2}, {t2}",
"adc {t2}, {t5}",
"mulx {t4}, {t3}, {t3}",
"adc {t3}, {c}",
"adc {t4}, 0",
"mov edx, 12",
"xor {t6:e}, {t6:e}",
"mulx {c}, rax, qword ptr [{s}]",
"adcx {t0}, rax",
"adox {t1}, {c}",
"mulx {c}, rax, qword ptr [{s} + 8]",
"adcx {t1}, rax",
"adox {t2}, {c}",
"mulx {c}, rax, qword ptr [{s} + 16]",
"adcx {t2}, rax",
"adox {t3}, {c}",
"mulx rdx, rax, qword ptr [{s} + 24]",
"adcx {t3}, rax",
"adox rdx, {t4}",
"adcx rdx, {t6}",
"add rdx, 1",
"mov rax, rdx",
"shl rax, 32",
"mov {c}, rax",
"neg rax",
"sub {c}, rdx",
"sub {c}, 1",
"add {t0}, rdx",
"adc {t1}, rax",
"adc {t2}, -1",
"adc {t3}, {c}",
"cmc",
"sbb rax, rax",
"mov rdx, rax",
"shr rdx, 32",
"mov {c}, 0xffffffff00000001",
"and {c}, rax",
"add {t0}, rax",
"adc {t1}, rdx",
"adc {t2}, 0",
"adc {t3}, {c}",
"mov qword ptr [{s} + 64], {t0}",
"mov qword ptr [{s} + 72], {t1}",
"mov qword ptr [{s} + 80], {t2}",
"mov qword ptr [{s} + 88], {t3}",
s = in(reg) buf.as_mut_ptr(),
t0 = out(reg) _,
t1 = out(reg) _,
t2 = out(reg) _,
t3 = out(reg) _,
t4 = out(reg) _,
t5 = out(reg) _,
t6 = out(reg) _,
c = out(reg) _,
out("rax") _,
out("rdx") _,
options(nostack),
);
}
}
#[cfg(test)]
#[allow(dead_code)]
pub const CMS_12_9_OUT: usize = 2;
#[cfg(test)]
#[inline(never)]
pub unsafe fn times3_adx(buf: &mut [MaybeUninit<u64>; 8]) {
unsafe {
asm!(
".p2align 6",
"mov {t0}, qword ptr [{s}]",
"mov {t1}, qword ptr [{s} + 8]",
"mov {t2}, qword ptr [{s} + 16]",
"mov {t3}, qword ptr [{s} + 24]",
"mov {t4}, {t3}",
"shr {t4}, 63",
"shld {t3}, {t2}, 1",
"shld {t2}, {t1}, 1",
"shld {t1}, {t0}, 1",
"shl {t0}, 1",
"add {t0}, qword ptr [{s}]",
"adc {t1}, qword ptr [{s} + 8]",
"adc {t2}, qword ptr [{s} + 16]",
"adc {t3}, qword ptr [{s} + 24]",
"adc {t4}, 0",
"mov rax, {t4}",
"shl rax, 32",
"xor {c:e}, {c:e}",
"add {t0}, {t4}",
"adc {t1}, 0",
"adc {t2}, 0",
"adc {t3}, rax",
"adc {c}, 0",
"sub {t1}, rax",
"sbb {t2}, 0",
"sbb {t3}, {t4}",
"sbb {c}, 0",
"mov {t4}, {t0}",
"mov {t5}, {t1}",
"mov {t6}, {t2}",
"mov {t7}, {t3}",
"mov eax, 0xffffffff",
"mov rdx, 0xffffffff00000001",
"sub {t4}, -1",
"sbb {t5}, rax",
"sbb {t6}, 0",
"sbb {t7}, rdx",
"sbb {c}, 0",
"cmovc {t4}, {t0}",
"cmovc {t5}, {t1}",
"cmovc {t6}, {t2}",
"cmovc {t7}, {t3}",
"mov qword ptr [{s} + 32], {t4}",
"mov qword ptr [{s} + 40], {t5}",
"mov qword ptr [{s} + 48], {t6}",
"mov qword ptr [{s} + 56], {t7}",
s = in(reg) buf.as_mut_ptr(),
t0 = out(reg) _,
t1 = out(reg) _,
t2 = out(reg) _,
t3 = out(reg) _,
t4 = out(reg) _,
t5 = out(reg) _,
t6 = out(reg) _,
t7 = out(reg) _,
c = out(reg) _,
out("rax") _,
out("rdx") _,
options(nostack),
);
}
}
#[cfg(test)]
#[allow(dead_code)]
pub const TIMES3_OUT: usize = 1;
#[cfg(test)]
#[inline(never)]
pub unsafe fn times4_adx(buf: &mut [MaybeUninit<u64>; 8]) {
unsafe {
asm!(
".p2align 6",
"mov {t0}, qword ptr [{s}]",
"mov {t1}, qword ptr [{s} + 8]",
"mov {t2}, qword ptr [{s} + 16]",
"mov {t3}, qword ptr [{s} + 24]",
"mov {t4}, {t3}",
"shr {t4}, 62",
"shld {t3}, {t2}, 2",
"shld {t2}, {t1}, 2",
"shld {t1}, {t0}, 2",
"shl {t0}, 2",
"mov rax, {t4}",
"shl rax, 32",
"xor {c:e}, {c:e}",
"add {t0}, {t4}",
"adc {t1}, 0",
"adc {t2}, 0",
"adc {t3}, rax",
"adc {c}, 0",
"sub {t1}, rax",
"sbb {t2}, 0",
"sbb {t3}, {t4}",
"sbb {c}, 0",
"mov {t4}, {t0}",
"mov {t5}, {t1}",
"mov {t6}, {t2}",
"mov {t7}, {t3}",
"mov eax, 0xffffffff",
"mov rdx, 0xffffffff00000001",
"sub {t4}, -1",
"sbb {t5}, rax",
"sbb {t6}, 0",
"sbb {t7}, rdx",
"sbb {c}, 0",
"cmovc {t4}, {t0}",
"cmovc {t5}, {t1}",
"cmovc {t6}, {t2}",
"cmovc {t7}, {t3}",
"mov qword ptr [{s} + 32], {t4}",
"mov qword ptr [{s} + 40], {t5}",
"mov qword ptr [{s} + 48], {t6}",
"mov qword ptr [{s} + 56], {t7}",
s = in(reg) buf.as_mut_ptr(),
t0 = out(reg) _,
t1 = out(reg) _,
t2 = out(reg) _,
t3 = out(reg) _,
t4 = out(reg) _,
t5 = out(reg) _,
t6 = out(reg) _,
t7 = out(reg) _,
c = out(reg) _,
out("rax") _,
out("rdx") _,
options(nostack),
);
}
}
#[cfg(test)]
#[allow(dead_code)]
pub const TIMES4_OUT: usize = 1;
#[cfg(test)]
#[inline(never)]
pub unsafe fn times8_adx(buf: &mut [MaybeUninit<u64>; 8]) {
unsafe {
asm!(
".p2align 6",
"mov {t0}, qword ptr [{s}]",
"mov {t1}, qword ptr [{s} + 8]",
"mov {t2}, qword ptr [{s} + 16]",
"mov {t3}, qword ptr [{s} + 24]",
"mov {t4}, {t3}",
"shr {t4}, 61",
"shld {t3}, {t2}, 3",
"shld {t2}, {t1}, 3",
"shld {t1}, {t0}, 3",
"shl {t0}, 3",
"mov rax, {t4}",
"shl rax, 32",
"xor {c:e}, {c:e}",
"add {t0}, {t4}",
"adc {t1}, 0",
"adc {t2}, 0",
"adc {t3}, rax",
"adc {c}, 0",
"sub {t1}, rax",
"sbb {t2}, 0",
"sbb {t3}, {t4}",
"sbb {c}, 0",
"mov {t4}, {t0}",
"mov {t5}, {t1}",
"mov {t6}, {t2}",
"mov {t7}, {t3}",
"mov eax, 0xffffffff",
"mov rdx, 0xffffffff00000001",
"sub {t4}, -1",
"sbb {t5}, rax",
"sbb {t6}, 0",
"sbb {t7}, rdx",
"sbb {c}, 0",
"cmovc {t4}, {t0}",
"cmovc {t5}, {t1}",
"cmovc {t6}, {t2}",
"cmovc {t7}, {t3}",
"mov qword ptr [{s} + 32], {t4}",
"mov qword ptr [{s} + 40], {t5}",
"mov qword ptr [{s} + 48], {t6}",
"mov qword ptr [{s} + 56], {t7}",
s = in(reg) buf.as_mut_ptr(),
t0 = out(reg) _,
t1 = out(reg) _,
t2 = out(reg) _,
t3 = out(reg) _,
t4 = out(reg) _,
t5 = out(reg) _,
t6 = out(reg) _,
t7 = out(reg) _,
c = out(reg) _,
out("rax") _,
out("rdx") _,
options(nostack),
);
}
}
#[cfg(test)]
#[allow(dead_code)]
pub const TIMES8_OUT: usize = 1;