#![allow(non_upper_case_globals, unused_macros, unused_imports)]
use crate::low::macros::*;
pub(crate) fn bignum_emontredc_8n(z: &mut [u64], m: &[u64], w: u64) -> u64 {
let ret: u64;
debug_assert!(z.len() == m.len() * 2);
debug_assert!(z.len().is_multiple_of(8));
unsafe {
core::arch::asm!(
Q!(" stp " "x19, x20, [sp, #-16] !"),
Q!(" stp " "x21, x22, [sp, #-16] !"),
Q!(" stp " "x23, x24, [sp, #-16] !"),
Q!(" stp " "x25, x26, [sp, #-16] !"),
Q!(" stp " "x27, x28, [sp, #-16] !"),
Q!(" sub " "sp, sp, #0x20"),
Q!(" lsr " "x0, x0, #2"),
Q!(" mov " "x26, x0"),
Q!(" subs " "x12, x0, #0x1"),
Q!(" b.cc " Label!("Lbignum_emontredc_8n_end", 2, After)),
Q!(" stp " "x3, xzr, [sp]"),
Q!(" stp " "x26, xzr, [sp, #16]"),
Q!(" mov " "x28, xzr"),
Q!(" lsl " "x0, x12, #5"),
Q!(Label!("Lbignum_emontredc_8n_outerloop", 3) ":"),
Q!(" ldp " "x3, xzr, [sp]"),
Q!(" ldp " "x17, x19, [x1]"),
Q!(" ldp " "x20, x21, [x1, #16]"),
Q!(" ldp " "x8, x9, [x2]"),
Q!(" ldp " "x10, x11, [x2, #16]"),
Q!(" ldr " "q21, [x2, #16]"),
Q!(" mul " "x4, x17, x3"),
Q!(" dup " "v0.2d, x4"),
Q!(" uzp2 " "v3.4s, v21.4s, v0.4s"),
Q!(" xtn " "v4.2s, v0.2d"),
Q!(" xtn " "v5.2s, v21.2d"),
Q!(" mul " "x12, x4, x8"),
Q!(" adds " "x17, x17, x12"),
Q!(" umulh " "x12, x4, x8"),
Q!(" mul " "x13, x4, x9"),
Q!(" rev64 " "v1.4s, v21.4s"),
Q!(" umull " "v6.2d, v4.2s, v5.2s"),
Q!(" umull " "v7.2d, v4.2s, v3.2s"),
Q!(" uzp2 " "v16.4s, v0.4s, v0.4s"),
Q!(" mul " "v0.4s, v1.4s, v0.4s"),
Q!(" movi " "v2.2d, #0xffffffff"),
Q!(" usra " "v7.2d, v6.2d, #32"),
Q!(" umull " "v1.2d, v16.2s, v3.2s"),
Q!(" uaddlp " "v0.2d, v0.4s"),
Q!(" and " "v2.16b, v7.16b, v2.16b"),
Q!(" umlal " "v2.2d, v16.2s, v5.2s"),
Q!(" shl " "v0.2d, v0.2d, #32"),
Q!(" usra " "v1.2d, v7.2d, #32"),
Q!(" umlal " "v0.2d, v4.2s, v5.2s"),
Q!(" mov " "x14, v0.d[0]"),
Q!(" mov " "x15, v0.d[1]"),
Q!(" adcs " "x19, x19, x13"),
Q!(" umulh " "x13, x4, x9"),
Q!(" adcs " "x20, x20, x14"),
Q!(" usra " "v1.2d, v2.2d, #32"),
Q!(" mov " "x14, v1.d[0]"),
Q!(" adcs " "x21, x21, x15"),
Q!(" mov " "x15, v1.d[1]"),
Q!(" adc " "x22, xzr, xzr"),
Q!(" adds " "x19, x19, x12"),
Q!(" mul " "x5, x19, x3"),
Q!(" adcs " "x20, x20, x13"),
Q!(" adcs " "x21, x21, x14"),
Q!(" adc " "x22, x22, x15"),
Q!(" dup " "v0.2d, x5"),
Q!(" uzp2 " "v3.4s, v21.4s, v0.4s"),
Q!(" xtn " "v4.2s, v0.2d"),
Q!(" xtn " "v5.2s, v21.2d"),
Q!(" mul " "x12, x5, x8"),
Q!(" adds " "x19, x19, x12"),
Q!(" umulh " "x12, x5, x8"),
Q!(" mul " "x13, x5, x9"),
Q!(" rev64 " "v1.4s, v21.4s"),
Q!(" umull " "v6.2d, v4.2s, v5.2s"),
Q!(" umull " "v7.2d, v4.2s, v3.2s"),
Q!(" uzp2 " "v16.4s, v0.4s, v0.4s"),
Q!(" mul " "v0.4s, v1.4s, v0.4s"),
Q!(" movi " "v2.2d, #0xffffffff"),
Q!(" usra " "v7.2d, v6.2d, #32"),
Q!(" umull " "v1.2d, v16.2s, v3.2s"),
Q!(" uaddlp " "v0.2d, v0.4s"),
Q!(" and " "v2.16b, v7.16b, v2.16b"),
Q!(" umlal " "v2.2d, v16.2s, v5.2s"),
Q!(" shl " "v0.2d, v0.2d, #32"),
Q!(" usra " "v1.2d, v7.2d, #32"),
Q!(" umlal " "v0.2d, v4.2s, v5.2s"),
Q!(" mov " "x14, v0.d[0]"),
Q!(" mov " "x15, v0.d[1]"),
Q!(" adcs " "x20, x20, x13"),
Q!(" umulh " "x13, x5, x9"),
Q!(" adcs " "x21, x21, x14"),
Q!(" usra " "v1.2d, v2.2d, #32"),
Q!(" mov " "x14, v1.d[0]"),
Q!(" adcs " "x22, x22, x15"),
Q!(" mov " "x15, v1.d[1]"),
Q!(" adc " "x23, xzr, xzr"),
Q!(" adds " "x20, x20, x12"),
Q!(" mul " "x6, x20, x3"),
Q!(" dup " "v0.2d, x6"),
Q!(" uzp2 " "v3.4s, v0.4s, v21.4s"),
Q!(" xtn " "v4.2s, v21.2d"),
Q!(" xtn " "v5.2s, v0.2d"),
Q!(" adcs " "x21, x21, x13"),
Q!(" adcs " "x22, x22, x14"),
Q!(" adc " "x23, x23, x15"),
Q!(" stp " "x4, x5, [x1]"),
Q!(" ldr " "q20, [x1]"),
Q!(" ldr " "q22, [x2, #32]"),
Q!(" ldr " "q23, [x2, #48]"),
Q!(" rev64 " "v1.4s, v0.4s"),
Q!(" umull " "v6.2d, v4.2s, v5.2s"),
Q!(" umull " "v7.2d, v4.2s, v3.2s"),
Q!(" uzp2 " "v16.4s, v21.4s, v21.4s"),
Q!(" mul " "x12, x6, x8"),
Q!(" adds " "x20, x20, x12"),
Q!(" mul " "v0.4s, v1.4s, v21.4s"),
Q!(" movi " "v2.2d, #0xffffffff"),
Q!(" usra " "v7.2d, v6.2d, #32"),
Q!(" umull " "v1.2d, v16.2s, v3.2s"),
Q!(" umulh " "x12, x6, x8"),
Q!(" mul " "x13, x6, x9"),
Q!(" uaddlp " "v0.2d, v0.4s"),
Q!(" and " "v2.16b, v7.16b, v2.16b"),
Q!(" umlal " "v2.2d, v16.2s, v5.2s"),
Q!(" shl " "v0.2d, v0.2d, #32"),
Q!(" adcs " "x21, x21, x13"),
Q!(" umulh " "x13, x6, x9"),
Q!(" usra " "v1.2d, v7.2d, #32"),
Q!(" umlal " "v0.2d, v4.2s, v5.2s"),
Q!(" mov " "x14, v0.d[0]"),
Q!(" mov " "x15, v0.d[1]"),
Q!(" usra " "v1.2d, v2.2d, #32"),
Q!(" adcs " "x22, x22, x14"),
Q!(" adcs " "x23, x23, x15"),
Q!(" mov " "x14, v1.d[0]"),
Q!(" mov " "x15, v1.d[1]"),
Q!(" adc " "x24, xzr, xzr"),
Q!(" adds " "x21, x21, x12"),
Q!(" mul " "x7, x21, x3"),
Q!(" adcs " "x22, x22, x13"),
Q!(" adcs " "x23, x23, x14"),
Q!(" adc " "x24, x24, x15"),
Q!(" stp " "x6, x7, [x1, #16]"),
Q!(" ldr " "q21, [x1, #16]"),
Q!(" uzp2 " "v3.4s, v22.4s, v20.4s"),
Q!(" xtn " "v4.2s, v20.2d"),
Q!(" mul " "x12, x7, x8"),
Q!(" mul " "x13, x7, x9"),
Q!(" xtn " "v5.2s, v22.2d"),
Q!(" rev64 " "v1.4s, v22.4s"),
Q!(" umull " "v6.2d, v4.2s, v5.2s"),
Q!(" umull " "v7.2d, v4.2s, v3.2s"),
Q!(" mul " "x14, x7, x10"),
Q!(" mul " "x15, x7, x11"),
Q!(" uzp2 " "v16.4s, v20.4s, v20.4s"),
Q!(" mul " "v0.4s, v1.4s, v20.4s"),
Q!(" movi " "v2.2d, #0xffffffff"),
Q!(" usra " "v7.2d, v6.2d, #32"),
Q!(" umull " "v25.2d, v16.2s, v3.2s"),
Q!(" uaddlp " "v0.2d, v0.4s"),
Q!(" and " "v2.16b, v7.16b, v2.16b"),
Q!(" umlal " "v2.2d, v16.2s, v5.2s"),
Q!(" adds " "x21, x21, x12"),
Q!(" umulh " "x12, x7, x8"),
Q!(" adcs " "x22, x22, x13"),
Q!(" umulh " "x13, x7, x9"),
Q!(" shl " "v24.2d, v0.2d, #32"),
Q!(" usra " "v25.2d, v7.2d, #32"),
Q!(" umlal " "v24.2d, v4.2s, v5.2s"),
Q!(" usra " "v25.2d, v2.2d, #32"),
Q!(" adcs " "x23, x23, x14"),
Q!(" umulh " "x14, x7, x10"),
Q!(" adcs " "x24, x24, x15"),
Q!(" umulh " "x15, x7, x11"),
Q!(" uzp2 " "v3.4s, v23.4s, v21.4s"),
Q!(" xtn " "v4.2s, v21.2d"),
Q!(" xtn " "v5.2s, v23.2d"),
Q!(" rev64 " "v1.4s, v23.4s"),
Q!(" ldp " "x8, x9, [x2, #32]"),
Q!(" ldp " "x10, x11, [x2, #48]"),
Q!(" umull " "v6.2d, v4.2s, v5.2s"),
Q!(" umull " "v7.2d, v4.2s, v3.2s"),
Q!(" uzp2 " "v16.4s, v21.4s, v21.4s"),
Q!(" mul " "v0.4s, v1.4s, v21.4s"),
Q!(" adc " "x25, xzr, xzr"),
Q!(" adds " "x12, x22, x12"),
Q!(" adcs " "x13, x23, x13"),
Q!(" adcs " "x14, x24, x14"),
Q!(" adc " "x15, x25, x15"),
Q!(" movi " "v2.2d, #0xffffffff"),
Q!(" usra " "v7.2d, v6.2d, #32"),
Q!(" umull " "v27.2d, v16.2s, v3.2s"),
Q!(" uaddlp " "v0.2d, v0.4s"),
Q!(" and " "v2.16b, v7.16b, v2.16b"),
Q!(" umlal " "v2.2d, v16.2s, v5.2s"),
Q!(" shl " "v26.2d, v0.2d, #32"),
Q!(" usra " "v27.2d, v7.2d, #32"),
Q!(" umlal " "v26.2d, v4.2s, v5.2s"),
Q!(" usra " "v27.2d, v2.2d, #32"),
Q!(" cbz " "x0, " Label!("Lbignum_emontredc_8n_madddone", 4, After)),
Q!(" mov " "x27, x0"),
Q!(" cmp " "x0, #0x20"),
Q!(" b.ne " Label!("Lbignum_emontredc_8n_maddloop_firstitr", 5, After)),
Q!(Label!("Lbignum_emontredc_8n_maddloop_x0one", 6) ":"),
Q!(" add " "x2, x2, #0x20"),
Q!(" add " "x1, x1, #0x20"),
Q!(" mul " "x17, x4, x8"),
Q!(" mul " "x22, x5, x9"),
Q!(" mul " "x23, x6, x10"),
Q!(" mul " "x24, x7, x11"),
Q!(" umulh " "x16, x4, x8"),
Q!(" adds " "x22, x22, x16"),
Q!(" umulh " "x16, x5, x9"),
Q!(" adcs " "x23, x23, x16"),
Q!(" umulh " "x16, x6, x10"),
Q!(" adcs " "x24, x24, x16"),
Q!(" umulh " "x16, x7, x11"),
Q!(" adc " "x25, x16, xzr"),
Q!(" ldp " "x20, x21, [x1]"),
Q!(" adds " "x12, x12, x20"),
Q!(" adcs " "x13, x13, x21"),
Q!(" ldp " "x20, x21, [x1, #16]"),
Q!(" adcs " "x14, x14, x20"),
Q!(" adcs " "x15, x15, x21"),
Q!(" adc " "x16, xzr, xzr"),
Q!(" adds " "x19, x22, x17"),
Q!(" adcs " "x22, x23, x22"),
Q!(" adcs " "x23, x24, x23"),
Q!(" adcs " "x24, x25, x24"),
Q!(" adc " "x25, xzr, x25"),
Q!(" adds " "x20, x22, x17"),
Q!(" adcs " "x21, x23, x19"),
Q!(" adcs " "x22, x24, x22"),
Q!(" adcs " "x23, x25, x23"),
Q!(" adcs " "x24, xzr, x24"),
Q!(" adc " "x25, xzr, x25"),
Q!(" adds " "x17, x17, x12"),
Q!(" adcs " "x19, x19, x13"),
Q!(" adcs " "x20, x20, x14"),
Q!(" adcs " "x21, x21, x15"),
Q!(" adcs " "x22, x22, x16"),
Q!(" adcs " "x23, x23, xzr"),
Q!(" adcs " "x24, x24, xzr"),
Q!(" adc " "x25, x25, xzr"),
Q!(" subs " "x15, x6, x7"),
Q!(" cneg " "x15, x15, cc"),
Q!(" csetm " "x12, cc"),
Q!(" subs " "x13, x11, x10"),
Q!(" cneg " "x13, x13, cc"),
Q!(" mul " "x14, x15, x13"),
Q!(" umulh " "x13, x15, x13"),
Q!(" cinv " "x12, x12, cc"),
Q!(" cmn " "x12, #0x1"),
Q!(" eor " "x14, x14, x12"),
Q!(" adcs " "x23, x23, x14"),
Q!(" eor " "x13, x13, x12"),
Q!(" adcs " "x24, x24, x13"),
Q!(" adc " "x25, x25, x12"),
Q!(" subs " "x15, x4, x5"),
Q!(" cneg " "x15, x15, cc"),
Q!(" csetm " "x12, cc"),
Q!(" subs " "x13, x9, x8"),
Q!(" cneg " "x13, x13, cc"),
Q!(" mul " "x14, x15, x13"),
Q!(" umulh " "x13, x15, x13"),
Q!(" cinv " "x12, x12, cc"),
Q!(" cmn " "x12, #0x1"),
Q!(" eor " "x14, x14, x12"),
Q!(" adcs " "x19, x19, x14"),
Q!(" eor " "x13, x13, x12"),
Q!(" adcs " "x20, x20, x13"),
Q!(" adcs " "x21, x21, x12"),
Q!(" adcs " "x22, x22, x12"),
Q!(" adcs " "x23, x23, x12"),
Q!(" adcs " "x24, x24, x12"),
Q!(" adc " "x25, x25, x12"),
Q!(" subs " "x15, x5, x7"),
Q!(" cneg " "x15, x15, cc"),
Q!(" csetm " "x12, cc"),
Q!(" subs " "x13, x11, x9"),
Q!(" cneg " "x13, x13, cc"),
Q!(" mul " "x14, x15, x13"),
Q!(" umulh " "x13, x15, x13"),
Q!(" cinv " "x12, x12, cc"),
Q!(" cmn " "x12, #0x1"),
Q!(" eor " "x14, x14, x12"),
Q!(" adcs " "x22, x22, x14"),
Q!(" eor " "x13, x13, x12"),
Q!(" adcs " "x23, x23, x13"),
Q!(" adcs " "x24, x24, x12"),
Q!(" adc " "x25, x25, x12"),
Q!(" subs " "x15, x4, x6"),
Q!(" cneg " "x15, x15, cc"),
Q!(" csetm " "x12, cc"),
Q!(" subs " "x13, x10, x8"),
Q!(" cneg " "x13, x13, cc"),
Q!(" mul " "x14, x15, x13"),
Q!(" umulh " "x13, x15, x13"),
Q!(" cinv " "x12, x12, cc"),
Q!(" cmn " "x12, #0x1"),
Q!(" eor " "x14, x14, x12"),
Q!(" adcs " "x20, x20, x14"),
Q!(" eor " "x13, x13, x12"),
Q!(" adcs " "x21, x21, x13"),
Q!(" adcs " "x22, x22, x12"),
Q!(" adcs " "x23, x23, x12"),
Q!(" adcs " "x24, x24, x12"),
Q!(" adc " "x25, x25, x12"),
Q!(" subs " "x15, x4, x7"),
Q!(" cneg " "x15, x15, cc"),
Q!(" csetm " "x12, cc"),
Q!(" subs " "x13, x11, x8"),
Q!(" cneg " "x13, x13, cc"),
Q!(" mul " "x14, x15, x13"),
Q!(" umulh " "x13, x15, x13"),
Q!(" cinv " "x12, x12, cc"),
Q!(" cmn " "x12, #0x1"),
Q!(" eor " "x14, x14, x12"),
Q!(" adcs " "x21, x21, x14"),
Q!(" eor " "x13, x13, x12"),
Q!(" adcs " "x22, x22, x13"),
Q!(" adcs " "x23, x23, x12"),
Q!(" adcs " "x24, x24, x12"),
Q!(" adc " "x25, x25, x12"),
Q!(" subs " "x15, x5, x6"),
Q!(" cneg " "x15, x15, cc"),
Q!(" csetm " "x12, cc"),
Q!(" subs " "x13, x10, x9"),
Q!(" cneg " "x13, x13, cc"),
Q!(" mul " "x14, x15, x13"),
Q!(" umulh " "x13, x15, x13"),
Q!(" cinv " "x12, x12, cc"),
Q!(" cmn " "x12, #0x1"),
Q!(" eor " "x14, x14, x12"),
Q!(" adcs " "x21, x21, x14"),
Q!(" eor " "x13, x13, x12"),
Q!(" adcs " "x22, x22, x13"),
Q!(" adcs " "x13, x23, x12"),
Q!(" adcs " "x14, x24, x12"),
Q!(" adc " "x15, x25, x12"),
Q!(" mov " "x12, x22"),
Q!(" stp " "x17, x19, [x1]"),
Q!(" stp " "x20, x21, [x1, #16]"),
Q!(" sub " "x27, x27, #0x20"),
Q!(" b " Label!("Lbignum_emontredc_8n_madddone", 4, After)),
Q!(Label!("Lbignum_emontredc_8n_maddloop_firstitr", 5) ":"),
Q!(" mov " "x16, v25.d[0]"),
Q!(" mov " "x22, v24.d[1]"),
Q!(" mov " "x20, v25.d[1]"),
Q!(" mov " "x23, v26.d[0]"),
Q!(" mov " "x21, v27.d[0]"),
Q!(" mov " "x24, v26.d[1]"),
Q!(" mov " "x3, v27.d[1]"),
Q!(" mov " "x17, v24.d[0]"),
Q!(" adds " "x22, x22, x16"),
Q!(" adcs " "x23, x23, x20"),
Q!(" adcs " "x24, x24, x21"),
Q!(" adc " "x25, x3, xzr"),
Q!(" ldr " "q22, [x2, #64]"),
Q!(" ldr " "q23, [x2, #80]"),
Q!(" add " "x2, x2, #0x20"),
Q!(" add " "x1, x1, #0x20"),
Q!(" uzp2 " "v3.4s, v22.4s, v20.4s"),
Q!(" xtn " "v4.2s, v20.2d"),
Q!(" xtn " "v5.2s, v22.2d"),
Q!(" rev64 " "v1.4s, v22.4s"),
Q!(" ldp " "x20, x21, [x1]"),
Q!(" adds " "x12, x12, x20"),
Q!(" adcs " "x13, x13, x21"),
Q!(" ldp " "x20, x21, [x1, #16]"),
Q!(" umull " "v6.2d, v4.2s, v5.2s"),
Q!(" umull " "v7.2d, v4.2s, v3.2s"),
Q!(" uzp2 " "v16.4s, v20.4s, v20.4s"),
Q!(" mul " "v0.4s, v1.4s, v20.4s"),
Q!(" adcs " "x14, x14, x20"),
Q!(" adcs " "x15, x15, x21"),
Q!(" adc " "x16, xzr, xzr"),
Q!(" adds " "x19, x22, x17"),
Q!(" movi " "v2.2d, #0xffffffff"),
Q!(" usra " "v7.2d, v6.2d, #32"),
Q!(" umull " "v25.2d, v16.2s, v3.2s"),
Q!(" uaddlp " "v0.2d, v0.4s"),
Q!(" adcs " "x22, x23, x22"),
Q!(" adcs " "x23, x24, x23"),
Q!(" adcs " "x24, x25, x24"),
Q!(" adc " "x25, xzr, x25"),
Q!(" and " "v2.16b, v7.16b, v2.16b"),
Q!(" umlal " "v2.2d, v16.2s, v5.2s"),
Q!(" shl " "v24.2d, v0.2d, #32"),
Q!(" usra " "v25.2d, v7.2d, #32"),
Q!(" adds " "x20, x22, x17"),
Q!(" adcs " "x21, x23, x19"),
Q!(" adcs " "x22, x24, x22"),
Q!(" adcs " "x23, x25, x23"),
Q!(" umlal " "v24.2d, v4.2s, v5.2s"),
Q!(" usra " "v25.2d, v2.2d, #32"),
Q!(" adcs " "x24, xzr, x24"),
Q!(" adc " "x25, xzr, x25"),
Q!(" adds " "x17, x17, x12"),
Q!(" adcs " "x19, x19, x13"),
Q!(" uzp2 " "v3.4s, v23.4s, v21.4s"),
Q!(" xtn " "v4.2s, v21.2d"),
Q!(" xtn " "v5.2s, v23.2d"),
Q!(" rev64 " "v1.4s, v23.4s"),
Q!(" adcs " "x20, x20, x14"),
Q!(" adcs " "x21, x21, x15"),
Q!(" adcs " "x22, x22, x16"),
Q!(" adcs " "x23, x23, xzr"),
Q!(" umull " "v6.2d, v4.2s, v5.2s"),
Q!(" umull " "v7.2d, v4.2s, v3.2s"),
Q!(" uzp2 " "v16.4s, v21.4s, v21.4s"),
Q!(" mul " "v0.4s, v1.4s, v21.4s"),
Q!(" adcs " "x24, x24, xzr"),
Q!(" adc " "x25, x25, xzr"),
Q!(" subs " "x15, x6, x7"),
Q!(" cneg " "x15, x15, cc"),
Q!(" movi " "v2.2d, #0xffffffff"),
Q!(" usra " "v7.2d, v6.2d, #32"),
Q!(" umull " "v27.2d, v16.2s, v3.2s"),
Q!(" uaddlp " "v0.2d, v0.4s"),
Q!(" csetm " "x12, cc"),
Q!(" subs " "x13, x11, x10"),
Q!(" cneg " "x13, x13, cc"),
Q!(" mul " "x14, x15, x13"),
Q!(" and " "v2.16b, v7.16b, v2.16b"),
Q!(" umlal " "v2.2d, v16.2s, v5.2s"),
Q!(" shl " "v26.2d, v0.2d, #32"),
Q!(" usra " "v27.2d, v7.2d, #32"),
Q!(" umulh " "x13, x15, x13"),
Q!(" cinv " "x12, x12, cc"),
Q!(" cmn " "x12, #0x1"),
Q!(" eor " "x14, x14, x12"),
Q!(" umlal " "v26.2d, v4.2s, v5.2s"),
Q!(" usra " "v27.2d, v2.2d, #32"),
Q!(" adcs " "x23, x23, x14"),
Q!(" eor " "x13, x13, x12"),
Q!(" adcs " "x24, x24, x13"),
Q!(" adc " "x25, x25, x12"),
Q!(" subs " "x15, x4, x5"),
Q!(" cneg " "x15, x15, cc"),
Q!(" csetm " "x12, cc"),
Q!(" subs " "x13, x9, x8"),
Q!(" cneg " "x13, x13, cc"),
Q!(" mul " "x14, x15, x13"),
Q!(" umulh " "x13, x15, x13"),
Q!(" cinv " "x12, x12, cc"),
Q!(" cmn " "x12, #0x1"),
Q!(" eor " "x14, x14, x12"),
Q!(" adcs " "x19, x19, x14"),
Q!(" eor " "x13, x13, x12"),
Q!(" adcs " "x20, x20, x13"),
Q!(" adcs " "x21, x21, x12"),
Q!(" adcs " "x22, x22, x12"),
Q!(" adcs " "x23, x23, x12"),
Q!(" adcs " "x24, x24, x12"),
Q!(" adc " "x25, x25, x12"),
Q!(" stp " "x17, x19, [x1]"),
Q!(" mov " "x16, v25.d[0]"),
Q!(" mov " "x26, v27.d[0]"),
Q!(" mov " "x3, v25.d[1]"),
Q!(" mov " "x17, v27.d[1]"),
Q!(" subs " "x15, x5, x7"),
Q!(" cneg " "x15, x15, cc"),
Q!(" csetm " "x12, cc"),
Q!(" subs " "x13, x11, x9"),
Q!(" cneg " "x13, x13, cc"),
Q!(" mul " "x14, x15, x13"),
Q!(" umulh " "x13, x15, x13"),
Q!(" cinv " "x12, x12, cc"),
Q!(" cmn " "x12, #0x1"),
Q!(" eor " "x14, x14, x12"),
Q!(" adcs " "x22, x22, x14"),
Q!(" eor " "x13, x13, x12"),
Q!(" adcs " "x23, x23, x13"),
Q!(" adcs " "x24, x24, x12"),
Q!(" adc " "x25, x25, x12"),
Q!(" subs " "x15, x4, x6"),
Q!(" cneg " "x15, x15, cc"),
Q!(" csetm " "x12, cc"),
Q!(" subs " "x13, x10, x8"),
Q!(" cneg " "x13, x13, cc"),
Q!(" mul " "x14, x15, x13"),
Q!(" umulh " "x13, x15, x13"),
Q!(" cinv " "x12, x12, cc"),
Q!(" cmn " "x12, #0x1"),
Q!(" eor " "x14, x14, x12"),
Q!(" adcs " "x20, x20, x14"),
Q!(" eor " "x13, x13, x12"),
Q!(" adcs " "x21, x21, x13"),
Q!(" adcs " "x22, x22, x12"),
Q!(" adcs " "x23, x23, x12"),
Q!(" adcs " "x24, x24, x12"),
Q!(" adc " "x25, x25, x12"),
Q!(" subs " "x15, x4, x7"),
Q!(" cneg " "x15, x15, cc"),
Q!(" csetm " "x12, cc"),
Q!(" subs " "x13, x11, x8"),
Q!(" cneg " "x13, x13, cc"),
Q!(" mul " "x14, x15, x13"),
Q!(" umulh " "x13, x15, x13"),
Q!(" cinv " "x12, x12, cc"),
Q!(" cmn " "x12, #0x1"),
Q!(" eor " "x14, x14, x12"),
Q!(" adcs " "x21, x21, x14"),
Q!(" eor " "x13, x13, x12"),
Q!(" adcs " "x22, x22, x13"),
Q!(" adcs " "x23, x23, x12"),
Q!(" adcs " "x24, x24, x12"),
Q!(" adc " "x25, x25, x12"),
Q!(" subs " "x15, x5, x6"),
Q!(" cneg " "x15, x15, cc"),
Q!(" csetm " "x12, cc"),
Q!(" subs " "x13, x10, x9"),
Q!(" cneg " "x13, x13, cc"),
Q!(" mul " "x14, x15, x13"),
Q!(" umulh " "x13, x15, x13"),
Q!(" cinv " "x12, x12, cc"),
Q!(" cmn " "x12, #0x1"),
Q!(" eor " "x14, x14, x12"),
Q!(" adcs " "x21, x21, x14"),
Q!(" stp " "x20, x21, [x1, #16]"),
Q!(" mov " "x20, v24.d[1]"),
Q!(" mov " "x21, v26.d[0]"),
Q!(" eor " "x13, x13, x12"),
Q!(" adcs " "x22, x22, x13"),
Q!(" adcs " "x13, x23, x12"),
Q!(" adcs " "x14, x24, x12"),
Q!(" adc " "x15, x25, x12"),
Q!(" mov " "x12, x22"),
Q!(" mov " "x24, v26.d[1]"),
Q!(" sub " "x27, x27, #0x20"),
Q!(" cmp " "x27, #0x20"),
Q!(" b.eq " Label!("Lbignum_emontredc_8n_maddloop_last", 7, After)),
Q!(Label!("Lbignum_emontredc_8n_maddloop", 8) ":"),
Q!(" ldp " "x8, x9, [x2, #32]"),
Q!(" ldp " "x10, x11, [x2, #48]"),
Q!(" ldr " "q22, [x2, #64]"),
Q!(" ldr " "q23, [x2, #80]"),
Q!(" add " "x2, x2, #0x20"),
Q!(" add " "x1, x1, #0x20"),
Q!(" adds " "x22, x20, x16"),
Q!(" adcs " "x23, x21, x3"),
Q!(" adcs " "x24, x24, x26"),
Q!(" adc " "x25, x17, xzr"),
Q!(" mov " "x17, v24.d[0]"),
Q!(" uzp2 " "v3.4s, v22.4s, v20.4s"),
Q!(" xtn " "v4.2s, v20.2d"),
Q!(" xtn " "v5.2s, v22.2d"),
Q!(" rev64 " "v1.4s, v22.4s"),
Q!(" ldp " "x20, x21, [x1]"),
Q!(" adds " "x12, x12, x20"),
Q!(" adcs " "x13, x13, x21"),
Q!(" ldp " "x20, x21, [x1, #16]"),
Q!(" umull " "v6.2d, v4.2s, v5.2s"),
Q!(" umull " "v7.2d, v4.2s, v3.2s"),
Q!(" uzp2 " "v16.4s, v20.4s, v20.4s"),
Q!(" mul " "v0.4s, v1.4s, v20.4s"),
Q!(" adcs " "x14, x14, x20"),
Q!(" adcs " "x15, x15, x21"),
Q!(" adc " "x16, xzr, xzr"),
Q!(" adds " "x19, x22, x17"),
Q!(" movi " "v2.2d, #0xffffffff"),
Q!(" usra " "v7.2d, v6.2d, #32"),
Q!(" umull " "v25.2d, v16.2s, v3.2s"),
Q!(" uaddlp " "v0.2d, v0.4s"),
Q!(" adcs " "x22, x23, x22"),
Q!(" adcs " "x23, x24, x23"),
Q!(" adcs " "x24, x25, x24"),
Q!(" adc " "x25, xzr, x25"),
Q!(" and " "v2.16b, v7.16b, v2.16b"),
Q!(" umlal " "v2.2d, v16.2s, v5.2s"),
Q!(" shl " "v24.2d, v0.2d, #32"),
Q!(" usra " "v25.2d, v7.2d, #32"),
Q!(" adds " "x20, x22, x17"),
Q!(" adcs " "x21, x23, x19"),
Q!(" adcs " "x22, x24, x22"),
Q!(" adcs " "x23, x25, x23"),
Q!(" umlal " "v24.2d, v4.2s, v5.2s"),
Q!(" usra " "v25.2d, v2.2d, #32"),
Q!(" adcs " "x24, xzr, x24"),
Q!(" adc " "x25, xzr, x25"),
Q!(" adds " "x17, x17, x12"),
Q!(" adcs " "x19, x19, x13"),
Q!(" uzp2 " "v3.4s, v23.4s, v21.4s"),
Q!(" xtn " "v4.2s, v21.2d"),
Q!(" xtn " "v5.2s, v23.2d"),
Q!(" rev64 " "v1.4s, v23.4s"),
Q!(" adcs " "x20, x20, x14"),
Q!(" adcs " "x21, x21, x15"),
Q!(" adcs " "x22, x22, x16"),
Q!(" adcs " "x23, x23, xzr"),
Q!(" umull " "v6.2d, v4.2s, v5.2s"),
Q!(" umull " "v7.2d, v4.2s, v3.2s"),
Q!(" uzp2 " "v16.4s, v21.4s, v21.4s"),
Q!(" mul " "v0.4s, v1.4s, v21.4s"),
Q!(" adcs " "x24, x24, xzr"),
Q!(" adc " "x25, x25, xzr"),
Q!(" subs " "x15, x6, x7"),
Q!(" cneg " "x15, x15, cc"),
Q!(" movi " "v2.2d, #0xffffffff"),
Q!(" usra " "v7.2d, v6.2d, #32"),
Q!(" umull " "v27.2d, v16.2s, v3.2s"),
Q!(" uaddlp " "v0.2d, v0.4s"),
Q!(" csetm " "x12, cc"),
Q!(" subs " "x13, x11, x10"),
Q!(" cneg " "x13, x13, cc"),
Q!(" mul " "x14, x15, x13"),
Q!(" and " "v2.16b, v7.16b, v2.16b"),
Q!(" umlal " "v2.2d, v16.2s, v5.2s"),
Q!(" shl " "v26.2d, v0.2d, #32"),
Q!(" usra " "v27.2d, v7.2d, #32"),
Q!(" umulh " "x13, x15, x13"),
Q!(" cinv " "x12, x12, cc"),
Q!(" cmn " "x12, #0x1"),
Q!(" eor " "x14, x14, x12"),
Q!(" umlal " "v26.2d, v4.2s, v5.2s"),
Q!(" usra " "v27.2d, v2.2d, #32"),
Q!(" adcs " "x23, x23, x14"),
Q!(" eor " "x13, x13, x12"),
Q!(" adcs " "x24, x24, x13"),
Q!(" adc " "x25, x25, x12"),
Q!(" subs " "x15, x4, x5"),
Q!(" cneg " "x15, x15, cc"),
Q!(" csetm " "x12, cc"),
Q!(" subs " "x13, x9, x8"),
Q!(" cneg " "x13, x13, cc"),
Q!(" mul " "x14, x15, x13"),
Q!(" umulh " "x13, x15, x13"),
Q!(" cinv " "x12, x12, cc"),
Q!(" cmn " "x12, #0x1"),
Q!(" eor " "x14, x14, x12"),
Q!(" adcs " "x19, x19, x14"),
Q!(" eor " "x13, x13, x12"),
Q!(" adcs " "x20, x20, x13"),
Q!(" adcs " "x21, x21, x12"),
Q!(" adcs " "x22, x22, x12"),
Q!(" adcs " "x23, x23, x12"),
Q!(" adcs " "x24, x24, x12"),
Q!(" adc " "x25, x25, x12"),
Q!(" stp " "x17, x19, [x1]"),
Q!(" mov " "x16, v25.d[0]"),
Q!(" mov " "x26, v27.d[0]"),
Q!(" mov " "x3, v25.d[1]"),
Q!(" mov " "x17, v27.d[1]"),
Q!(" subs " "x15, x5, x7"),
Q!(" cneg " "x15, x15, cc"),
Q!(" csetm " "x12, cc"),
Q!(" subs " "x13, x11, x9"),
Q!(" cneg " "x13, x13, cc"),
Q!(" mul " "x14, x15, x13"),
Q!(" umulh " "x13, x15, x13"),
Q!(" cinv " "x12, x12, cc"),
Q!(" cmn " "x12, #0x1"),
Q!(" eor " "x14, x14, x12"),
Q!(" adcs " "x22, x22, x14"),
Q!(" eor " "x13, x13, x12"),
Q!(" adcs " "x23, x23, x13"),
Q!(" adcs " "x24, x24, x12"),
Q!(" adc " "x25, x25, x12"),
Q!(" subs " "x15, x4, x6"),
Q!(" cneg " "x15, x15, cc"),
Q!(" csetm " "x12, cc"),
Q!(" subs " "x13, x10, x8"),
Q!(" cneg " "x13, x13, cc"),
Q!(" mul " "x14, x15, x13"),
Q!(" umulh " "x13, x15, x13"),
Q!(" cinv " "x12, x12, cc"),
Q!(" cmn " "x12, #0x1"),
Q!(" eor " "x14, x14, x12"),
Q!(" adcs " "x20, x20, x14"),
Q!(" eor " "x13, x13, x12"),
Q!(" adcs " "x21, x21, x13"),
Q!(" adcs " "x22, x22, x12"),
Q!(" adcs " "x23, x23, x12"),
Q!(" adcs " "x24, x24, x12"),
Q!(" adc " "x25, x25, x12"),
Q!(" subs " "x15, x4, x7"),
Q!(" cneg " "x15, x15, cc"),
Q!(" csetm " "x12, cc"),
Q!(" subs " "x13, x11, x8"),
Q!(" cneg " "x13, x13, cc"),
Q!(" mul " "x14, x15, x13"),
Q!(" umulh " "x13, x15, x13"),
Q!(" cinv " "x12, x12, cc"),
Q!(" cmn " "x12, #0x1"),
Q!(" eor " "x14, x14, x12"),
Q!(" adcs " "x21, x21, x14"),
Q!(" eor " "x13, x13, x12"),
Q!(" adcs " "x22, x22, x13"),
Q!(" adcs " "x23, x23, x12"),
Q!(" adcs " "x24, x24, x12"),
Q!(" adc " "x25, x25, x12"),
Q!(" subs " "x15, x5, x6"),
Q!(" cneg " "x15, x15, cc"),
Q!(" csetm " "x12, cc"),
Q!(" subs " "x13, x10, x9"),
Q!(" cneg " "x13, x13, cc"),
Q!(" mul " "x14, x15, x13"),
Q!(" umulh " "x13, x15, x13"),
Q!(" cinv " "x12, x12, cc"),
Q!(" cmn " "x12, #0x1"),
Q!(" eor " "x14, x14, x12"),
Q!(" adcs " "x21, x21, x14"),
Q!(" stp " "x20, x21, [x1, #16]"),
Q!(" mov " "x20, v24.d[1]"),
Q!(" mov " "x21, v26.d[0]"),
Q!(" eor " "x13, x13, x12"),
Q!(" adcs " "x22, x22, x13"),
Q!(" adcs " "x13, x23, x12"),
Q!(" adcs " "x14, x24, x12"),
Q!(" adc " "x15, x25, x12"),
Q!(" mov " "x12, x22"),
Q!(" mov " "x24, v26.d[1]"),
Q!(" sub " "x27, x27, #0x20"),
Q!(" cmp " "x27, #0x20"),
Q!(" b.ne " Label!("Lbignum_emontredc_8n_maddloop", 8, Before)),
Q!(Label!("Lbignum_emontredc_8n_maddloop_last", 7) ":"),
Q!(" ldp " "x8, x9, [x2, #32]"),
Q!(" ldp " "x10, x11, [x2, #48]"),
Q!(" add " "x2, x2, #0x20"),
Q!(" add " "x1, x1, #0x20"),
Q!(" adds " "x22, x20, x16"),
Q!(" adcs " "x23, x21, x3"),
Q!(" adcs " "x24, x24, x26"),
Q!(" adc " "x25, x17, xzr"),
Q!(" mov " "x17, v24.d[0]"),
Q!(" ldp " "x20, x21, [x1]"),
Q!(" adds " "x12, x12, x20"),
Q!(" adcs " "x13, x13, x21"),
Q!(" ldp " "x20, x21, [x1, #16]"),
Q!(" adcs " "x14, x14, x20"),
Q!(" adcs " "x15, x15, x21"),
Q!(" adc " "x16, xzr, xzr"),
Q!(" adds " "x19, x22, x17"),
Q!(" adcs " "x22, x23, x22"),
Q!(" adcs " "x23, x24, x23"),
Q!(" adcs " "x24, x25, x24"),
Q!(" adc " "x25, xzr, x25"),
Q!(" adds " "x20, x22, x17"),
Q!(" adcs " "x21, x23, x19"),
Q!(" adcs " "x22, x24, x22"),
Q!(" adcs " "x23, x25, x23"),
Q!(" adcs " "x24, xzr, x24"),
Q!(" adc " "x25, xzr, x25"),
Q!(" adds " "x17, x17, x12"),
Q!(" adcs " "x19, x19, x13"),
Q!(" adcs " "x20, x20, x14"),
Q!(" adcs " "x21, x21, x15"),
Q!(" adcs " "x22, x22, x16"),
Q!(" adcs " "x23, x23, xzr"),
Q!(" adcs " "x24, x24, xzr"),
Q!(" adc " "x25, x25, xzr"),
Q!(" subs " "x15, x6, x7"),
Q!(" cneg " "x15, x15, cc"),
Q!(" csetm " "x12, cc"),
Q!(" subs " "x13, x11, x10"),
Q!(" cneg " "x13, x13, cc"),
Q!(" mul " "x14, x15, x13"),
Q!(" umulh " "x13, x15, x13"),
Q!(" cinv " "x12, x12, cc"),
Q!(" cmn " "x12, #0x1"),
Q!(" eor " "x14, x14, x12"),
Q!(" adcs " "x23, x23, x14"),
Q!(" eor " "x13, x13, x12"),
Q!(" adcs " "x24, x24, x13"),
Q!(" adc " "x25, x25, x12"),
Q!(" subs " "x15, x4, x5"),
Q!(" cneg " "x15, x15, cc"),
Q!(" csetm " "x12, cc"),
Q!(" subs " "x13, x9, x8"),
Q!(" cneg " "x13, x13, cc"),
Q!(" mul " "x14, x15, x13"),
Q!(" umulh " "x13, x15, x13"),
Q!(" cinv " "x12, x12, cc"),
Q!(" cmn " "x12, #0x1"),
Q!(" eor " "x14, x14, x12"),
Q!(" adcs " "x19, x19, x14"),
Q!(" eor " "x13, x13, x12"),
Q!(" adcs " "x20, x20, x13"),
Q!(" adcs " "x21, x21, x12"),
Q!(" adcs " "x22, x22, x12"),
Q!(" adcs " "x23, x23, x12"),
Q!(" adcs " "x24, x24, x12"),
Q!(" adc " "x25, x25, x12"),
Q!(" subs " "x15, x5, x7"),
Q!(" cneg " "x15, x15, cc"),
Q!(" csetm " "x12, cc"),
Q!(" subs " "x13, x11, x9"),
Q!(" cneg " "x13, x13, cc"),
Q!(" mul " "x14, x15, x13"),
Q!(" umulh " "x13, x15, x13"),
Q!(" cinv " "x12, x12, cc"),
Q!(" cmn " "x12, #0x1"),
Q!(" eor " "x14, x14, x12"),
Q!(" adcs " "x22, x22, x14"),
Q!(" eor " "x13, x13, x12"),
Q!(" adcs " "x23, x23, x13"),
Q!(" adcs " "x24, x24, x12"),
Q!(" adc " "x25, x25, x12"),
Q!(" subs " "x15, x4, x6"),
Q!(" cneg " "x15, x15, cc"),
Q!(" csetm " "x12, cc"),
Q!(" subs " "x13, x10, x8"),
Q!(" cneg " "x13, x13, cc"),
Q!(" mul " "x14, x15, x13"),
Q!(" umulh " "x13, x15, x13"),
Q!(" cinv " "x12, x12, cc"),
Q!(" cmn " "x12, #0x1"),
Q!(" eor " "x14, x14, x12"),
Q!(" adcs " "x20, x20, x14"),
Q!(" eor " "x13, x13, x12"),
Q!(" adcs " "x21, x21, x13"),
Q!(" adcs " "x22, x22, x12"),
Q!(" adcs " "x23, x23, x12"),
Q!(" adcs " "x24, x24, x12"),
Q!(" adc " "x25, x25, x12"),
Q!(" subs " "x15, x4, x7"),
Q!(" cneg " "x15, x15, cc"),
Q!(" csetm " "x12, cc"),
Q!(" subs " "x13, x11, x8"),
Q!(" cneg " "x13, x13, cc"),
Q!(" mul " "x14, x15, x13"),
Q!(" umulh " "x13, x15, x13"),
Q!(" cinv " "x12, x12, cc"),
Q!(" cmn " "x12, #0x1"),
Q!(" eor " "x14, x14, x12"),
Q!(" adcs " "x21, x21, x14"),
Q!(" eor " "x13, x13, x12"),
Q!(" adcs " "x22, x22, x13"),
Q!(" adcs " "x23, x23, x12"),
Q!(" adcs " "x24, x24, x12"),
Q!(" adc " "x25, x25, x12"),
Q!(" subs " "x15, x5, x6"),
Q!(" cneg " "x15, x15, cc"),
Q!(" csetm " "x12, cc"),
Q!(" subs " "x13, x10, x9"),
Q!(" cneg " "x13, x13, cc"),
Q!(" mul " "x14, x15, x13"),
Q!(" umulh " "x13, x15, x13"),
Q!(" cinv " "x12, x12, cc"),
Q!(" cmn " "x12, #0x1"),
Q!(" eor " "x14, x14, x12"),
Q!(" adcs " "x21, x21, x14"),
Q!(" eor " "x13, x13, x12"),
Q!(" adcs " "x22, x22, x13"),
Q!(" adcs " "x13, x23, x12"),
Q!(" adcs " "x14, x24, x12"),
Q!(" adc " "x15, x25, x12"),
Q!(" mov " "x12, x22"),
Q!(" stp " "x17, x19, [x1]"),
Q!(" stp " "x20, x21, [x1, #16]"),
Q!(" subs " "x27, x27, #0x40"),
Q!(Label!("Lbignum_emontredc_8n_madddone", 4) ":"),
Q!(" ldp " "x17, x19, [x1, #32]"),
Q!(" ldp " "x20, x21, [x1, #48]"),
Q!(" ldp " "x26, xzr, [sp, #16]"),
Q!(" cmn " "x28, x28"),
Q!(" adcs " "x17, x17, x12"),
Q!(" adcs " "x19, x19, x13"),
Q!(" adcs " "x20, x20, x14"),
Q!(" adcs " "x21, x21, x15"),
Q!(" csetm " "x28, cs"),
Q!(" stp " "x17, x19, [x1, #32]"),
Q!(" stp " "x20, x21, [x1, #48]"),
Q!(" sub " "x1, x1, x0"),
Q!(" sub " "x2, x2, x0"),
Q!(" add " "x1, x1, #0x20"),
Q!(" subs " "x26, x26, #0x1"),
Q!(" stp " "x26, xzr, [sp, #16]"),
Q!(" b.ne " Label!("Lbignum_emontredc_8n_outerloop", 3, Before)),
Q!(" neg " "x0, x28"),
Q!(Label!("Lbignum_emontredc_8n_end", 2) ":"),
Q!(" add " "sp, sp, #0x20"),
Q!(" ldp " "x27, x28, [sp], #16"),
Q!(" ldp " "x25, x26, [sp], #16"),
Q!(" ldp " "x23, x24, [sp], #16"),
Q!(" ldp " "x21, x22, [sp], #16"),
Q!(" ldp " "x19, x20, [sp], #16"),
inout("x0") m.len() => ret,
inout("x1") z.as_mut_ptr() => _,
inout("x2") m.as_ptr() => _,
inout("x3") w => _,
out("v0") _,
out("v1") _,
out("v16") _,
out("v2") _,
out("v20") _,
out("v21") _,
out("v22") _,
out("v23") _,
out("v24") _,
out("v25") _,
out("v26") _,
out("v27") _,
out("v3") _,
out("v4") _,
out("v5") _,
out("v6") _,
out("v7") _,
out("x10") _,
out("x11") _,
out("x12") _,
out("x13") _,
out("x14") _,
out("x15") _,
out("x16") _,
out("x17") _,
out("x20") _,
out("x21") _,
out("x22") _,
out("x23") _,
out("x24") _,
out("x25") _,
out("x26") _,
out("x27") _,
out("x28") _,
out("x4") _,
out("x5") _,
out("x6") _,
out("x7") _,
out("x8") _,
out("x9") _,
)
};
ret
}