#![allow(non_upper_case_globals, unused_macros, unused_imports)]
use crate::low::macros::*;
macro_rules! NUMSIZE {
() => {
"72"
};
}
macro_rules! JACSIZE { () => { Q!("(3 * " NUMSIZE!() ")") } }
macro_rules! tabup {
() => {
"x15"
};
}
macro_rules! bf {
() => {
"x16"
};
}
macro_rules! sgn {
() => {
"x17"
};
}
macro_rules! j {
() => {
"x19"
};
}
macro_rules! res {
() => {
"x20"
};
}
macro_rules! scalarb { () => { Q!("sp, # (0 * " NUMSIZE!() ")") } }
macro_rules! acc { () => { Q!("sp, # (1 * " NUMSIZE!() ")") } }
macro_rules! tabent { () => { Q!("sp, # (4 * " NUMSIZE!() ")") } }
macro_rules! tab { () => { Q!("sp, # (7 * " NUMSIZE!() ")") } }
macro_rules! NSPACE {
() => {
"3968"
};
}
macro_rules! selectblock {
($I:expr) => { Q!(
"cmp " bf!() ", # (1 * " $I ");\n"
"ldp x10, x11, [" tabup!() "];\n"
"csel x0, x10, x0, eq;\n"
"csel x1, x11, x1, eq;\n"
"ldp x10, x11, [" tabup!() ", #16];\n"
"csel x2, x10, x2, eq;\n"
"csel x3, x11, x3, eq;\n"
"ldp x10, x11, [" tabup!() ", #32];\n"
"csel x4, x10, x4, eq;\n"
"csel x5, x11, x5, eq;\n"
"ldp x10, x11, [" tabup!() ", #48];\n"
"csel x6, x10, x6, eq;\n"
"csel x7, x11, x7, eq;\n"
"ldr x10, [" tabup!() ", #64];\n"
"csel x8, x10, x8, eq;\n"
"add " tabup!() ", " tabup!() ", # " JACSIZE!()
)}
}
macro_rules! movbig {
($nn:expr, $n3:expr, $n2:expr, $n1:expr, $n0:expr) => { Q!(
"movz " $nn ", " $n0 ";\n"
"movk " $nn ", " $n1 ", lsl #16;\n"
"movk " $nn ", " $n2 ", lsl #32;\n"
"movk " $nn ", " $n3 ", lsl #48"
)}
}
pub(crate) fn p521_jscalarmul(res: &mut [u64; 27], scalar: &[u64; 9], point: &[u64; 27]) {
unsafe {
core::arch::asm!(
Q!(" stp " "x19, x20, [sp, #-16] !"),
Q!(" stp " "x21, x30, [sp, #-16] !"),
Q!(" sub " "sp, sp, # (" NSPACE!() "+ 0)"),
Q!(" mov " res!() ", x0"),
Q!(" mov " "x19, x2"),
Q!(" add " "x0, " scalarb!()),
Q!(" bl " Label!("Lp521_jscalarmul_alt_bignum_mod_n521_9", 2, After)),
Q!(" mov " "x2, x19"),
Q!(" add " "x0, " tab!()),
Q!(" mov " "x1, x19"),
Q!(" bl " Label!("Lp521_jscalarmul_alt_bignum_mod_p521_9", 3, After)),
Q!(" add " "x0, " tab!() "+ " NUMSIZE!()),
Q!(" add " "x1, x19, # " NUMSIZE!()),
Q!(" bl " Label!("Lp521_jscalarmul_alt_bignum_mod_p521_9", 3, After)),
Q!(" add " "x0, " tab!() "+ 2 * " NUMSIZE!()),
Q!(" add " "x1, x19, # (2 * " NUMSIZE!() ")"),
Q!(" bl " Label!("Lp521_jscalarmul_alt_bignum_mod_p521_9", 3, After)),
Q!(" ldp " "x0, x1, [" scalarb!() "]"),
movbig!("x10", "#0xbb6f", "#0xb71e", "#0x9138", "#0x6409"),
Q!(" subs " "x10, x10, x0"),
movbig!("x11", "#0x3bb5", "#0xc9b8", "#0x899c", "#0x47ae"),
Q!(" sbcs " "x11, x11, x1"),
Q!(" ldp " "x2, x3, [" scalarb!() "+ 16]"),
movbig!("x12", "#0x7fcc", "#0x0148", "#0xf709", "#0xa5d0"),
Q!(" sbcs " "x12, x12, x2"),
movbig!("x13", "#0x5186", "#0x8783", "#0xbf2f", "#0x966b"),
Q!(" sbcs " "x13, x13, x3"),
Q!(" ldp " "x4, x5, [" scalarb!() "+ 32]"),
Q!(" mov " "x14, 0xfffffffffffffffa"),
Q!(" sbcs " "x14, x14, x4"),
Q!(" mov " "x15, 0xffffffffffffffff"),
Q!(" sbcs " "x15, x15, x5"),
Q!(" ldp " "x6, x7, [" scalarb!() "+ 48]"),
Q!(" mov " "x16, 0xffffffffffffffff"),
Q!(" sbcs " "x16, x16, x6"),
Q!(" mov " "x17, 0xffffffffffffffff"),
Q!(" sbcs " "x17, x17, x7"),
Q!(" ldr " "x8, [" scalarb!() "+ 64]"),
Q!(" mov " "x19, 0x00000000000001ff"),
Q!(" sbc " "x19, x19, x8"),
Q!(" tst " "x8, 0x100"),
Q!(" csetm " "x9, ne"),
Q!(" csel " "x0, x10, x0, ne"),
Q!(" csel " "x1, x11, x1, ne"),
Q!(" csel " "x2, x12, x2, ne"),
Q!(" csel " "x3, x13, x3, ne"),
Q!(" csel " "x4, x14, x4, ne"),
Q!(" csel " "x5, x15, x5, ne"),
Q!(" csel " "x6, x16, x6, ne"),
Q!(" csel " "x7, x17, x7, ne"),
Q!(" csel " "x8, x19, x8, ne"),
Q!(" stp " "x0, x1, [" scalarb!() "]"),
Q!(" stp " "x2, x3, [" scalarb!() "+ 16]"),
Q!(" stp " "x4, x5, [" scalarb!() "+ 32]"),
Q!(" stp " "x6, x7, [" scalarb!() "+ 48]"),
Q!(" str " "x8, [" scalarb!() "+ 64]"),
Q!(" add " tabup!() ", " tab!()),
Q!(" ldp " "x0, x1, [" tabup!() ", # " NUMSIZE!() "]"),
Q!(" ldp " "x2, x3, [" tabup!() ", # " NUMSIZE!() "+ 16]"),
Q!(" ldp " "x4, x5, [" tabup!() ", # " NUMSIZE!() "+ 32]"),
Q!(" ldp " "x6, x7, [" tabup!() ", # " NUMSIZE!() "+ 48]"),
Q!(" ldr " "x8, [" tabup!() ", # " NUMSIZE!() "+ 64]"),
Q!(" orr " "x10, x0, x1"),
Q!(" orr " "x11, x2, x3"),
Q!(" orr " "x12, x4, x5"),
Q!(" orr " "x13, x6, x7"),
Q!(" orr " "x10, x10, x11"),
Q!(" orr " "x12, x12, x13"),
Q!(" orr " "x12, x12, x8"),
Q!(" orr " "x10, x10, x12"),
Q!(" cmp " "x10, xzr"),
Q!(" csel " "x9, x9, xzr, ne"),
Q!(" eor " "x0, x0, x9"),
Q!(" eor " "x1, x1, x9"),
Q!(" eor " "x2, x2, x9"),
Q!(" eor " "x3, x3, x9"),
Q!(" eor " "x4, x4, x9"),
Q!(" eor " "x5, x5, x9"),
Q!(" eor " "x6, x6, x9"),
Q!(" eor " "x7, x7, x9"),
Q!(" and " "x9, x9, #0x1FF"),
Q!(" eor " "x8, x8, x9"),
Q!(" stp " "x0, x1, [" tabup!() ", # " NUMSIZE!() "]"),
Q!(" stp " "x2, x3, [" tabup!() ", # " NUMSIZE!() "+ 16]"),
Q!(" stp " "x4, x5, [" tabup!() ", # " NUMSIZE!() "+ 32]"),
Q!(" stp " "x6, x7, [" tabup!() ", # " NUMSIZE!() "+ 48]"),
Q!(" str " "x8, [" tabup!() ", # " NUMSIZE!() "+ 64]"),
Q!(" add " "x0, " tab!() "+ " JACSIZE!() "* 1"),
Q!(" add " "x1, " tab!()),
Q!(" bl " Label!("Lp521_jscalarmul_alt_jdouble", 4, After)),
Q!(" add " "x0, " tab!() "+ " JACSIZE!() "* 2"),
Q!(" add " "x1, " tab!() "+ " JACSIZE!() "* 1"),
Q!(" add " "x2, " tab!()),
Q!(" bl " Label!("Lp521_jscalarmul_alt_jadd", 5, After)),
Q!(" add " "x0, " tab!() "+ " JACSIZE!() "* 3"),
Q!(" add " "x1, " tab!() "+ " JACSIZE!() "* 1"),
Q!(" bl " Label!("Lp521_jscalarmul_alt_jdouble", 4, After)),
Q!(" add " "x0, " tab!() "+ " JACSIZE!() "* 4"),
Q!(" add " "x1, " tab!() "+ " JACSIZE!() "* 3"),
Q!(" add " "x2, " tab!()),
Q!(" bl " Label!("Lp521_jscalarmul_alt_jadd", 5, After)),
Q!(" add " "x0, " tab!() "+ " JACSIZE!() "* 5"),
Q!(" add " "x1, " tab!() "+ " JACSIZE!() "* 2"),
Q!(" bl " Label!("Lp521_jscalarmul_alt_jdouble", 4, After)),
Q!(" add " "x0, " tab!() "+ " JACSIZE!() "* 6"),
Q!(" add " "x1, " tab!() "+ " JACSIZE!() "* 5"),
Q!(" add " "x2, " tab!()),
Q!(" bl " Label!("Lp521_jscalarmul_alt_jadd", 5, After)),
Q!(" add " "x0, " tab!() "+ " JACSIZE!() "* 7"),
Q!(" add " "x1, " tab!() "+ " JACSIZE!() "* 3"),
Q!(" bl " Label!("Lp521_jscalarmul_alt_jdouble", 4, After)),
Q!(" add " "x0, " tab!() "+ " JACSIZE!() "* 8"),
Q!(" add " "x1, " tab!() "+ " JACSIZE!() "* 7"),
Q!(" add " "x2, " tab!()),
Q!(" bl " Label!("Lp521_jscalarmul_alt_jadd", 5, After)),
Q!(" add " "x0, " tab!() "+ " JACSIZE!() "* 9"),
Q!(" add " "x1, " tab!() "+ " JACSIZE!() "* 4"),
Q!(" bl " Label!("Lp521_jscalarmul_alt_jdouble", 4, After)),
Q!(" add " "x0, " tab!() "+ " JACSIZE!() "* 10"),
Q!(" add " "x1, " tab!() "+ " JACSIZE!() "* 9"),
Q!(" add " "x2, " tab!()),
Q!(" bl " Label!("Lp521_jscalarmul_alt_jadd", 5, After)),
Q!(" add " "x0, " tab!() "+ " JACSIZE!() "* 11"),
Q!(" add " "x1, " tab!() "+ " JACSIZE!() "* 5"),
Q!(" bl " Label!("Lp521_jscalarmul_alt_jdouble", 4, After)),
Q!(" add " "x0, " tab!() "+ " JACSIZE!() "* 12"),
Q!(" add " "x1, " tab!() "+ " JACSIZE!() "* 11"),
Q!(" add " "x2, " tab!()),
Q!(" bl " Label!("Lp521_jscalarmul_alt_jadd", 5, After)),
Q!(" add " "x0, " tab!() "+ " JACSIZE!() "* 13"),
Q!(" add " "x1, " tab!() "+ " JACSIZE!() "* 6"),
Q!(" bl " Label!("Lp521_jscalarmul_alt_jdouble", 4, After)),
Q!(" add " "x0, " tab!() "+ " JACSIZE!() "* 14"),
Q!(" add " "x1, " tab!() "+ " JACSIZE!() "* 13"),
Q!(" add " "x2, " tab!()),
Q!(" bl " Label!("Lp521_jscalarmul_alt_jadd", 5, After)),
Q!(" add " "x0, " tab!() "+ " JACSIZE!() "* 15"),
Q!(" add " "x1, " tab!() "+ " JACSIZE!() "* 7"),
Q!(" bl " Label!("Lp521_jscalarmul_alt_jdouble", 4, After)),
Q!(" ldp " "x0, x1, [" scalarb!() "]"),
Q!(" ldp " "x2, x3, [" scalarb!() "+ 16]"),
Q!(" ldp " "x4, x5, [" scalarb!() "+ 32]"),
Q!(" ldp " "x6, x7, [" scalarb!() "+ 48]"),
Q!(" ldr " "x8, [" scalarb!() "+ 64]"),
movbig!("x10", "#0x1084", "#0x2108", "#0x4210", "#0x8421"),
Q!(" adds " "x0, x0, x10, lsr #1"),
Q!(" adcs " "x1, x1, x10"),
Q!(" lsl " "x10, x10, #1"),
Q!(" adcs " "x2, x2, x10"),
Q!(" lsl " "x10, x10, #1"),
Q!(" adcs " "x3, x3, x10"),
Q!(" lsl " "x10, x10, #1"),
Q!(" adcs " "x4, x4, x10"),
Q!(" lsr " "x11, x10, #4"),
Q!(" adcs " "x5, x5, x11"),
Q!(" lsr " "x10, x10, #3"),
Q!(" adcs " "x6, x6, x10"),
Q!(" lsl " "x10, x10, #1"),
Q!(" adcs " "x7, x7, x10"),
Q!(" lsl " "x10, x10, #1"),
Q!(" and " "x10, x10, #0xFF"),
Q!(" adc " "x8, x8, x10"),
Q!(" lsr " bf!() ", x8, #8"),
Q!(" extr " "x8, x8, x7, #8"),
Q!(" extr " "x7, x7, x6, #8"),
Q!(" extr " "x6, x6, x5, #8"),
Q!(" extr " "x5, x5, x4, #8"),
Q!(" extr " "x4, x4, x3, #8"),
Q!(" extr " "x3, x3, x2, #8"),
Q!(" extr " "x2, x2, x1, #8"),
Q!(" extr " "x1, x1, x0, #8"),
Q!(" lsl " "x0, x0, #56"),
Q!(" stp " "x0, x1, [" scalarb!() "]"),
Q!(" stp " "x2, x3, [" scalarb!() "+ 16]"),
Q!(" stp " "x4, x5, [" scalarb!() "+ 32]"),
Q!(" stp " "x6, x7, [" scalarb!() "+ 48]"),
Q!(" str " "x8, [" scalarb!() "+ 64]"),
Q!(" add " tabup!() ", " tab!()),
Q!(" cmp " bf!() ", xzr"),
Q!(" ldp " "x0, x1, [" tabup!() "]"),
Q!(" csel " "x0, x0, xzr, ne"),
Q!(" csel " "x1, x1, xzr, ne"),
Q!(" stp " "x0, x1, [" acc!() "]"),
Q!(" ldp " "x0, x1, [" tabup!() ", #16]"),
Q!(" csel " "x0, x0, xzr, ne"),
Q!(" csel " "x1, x1, xzr, ne"),
Q!(" stp " "x0, x1, [" acc!() "+ 16]"),
Q!(" ldp " "x0, x1, [" tabup!() ", #32]"),
Q!(" csel " "x0, x0, xzr, ne"),
Q!(" csel " "x1, x1, xzr, ne"),
Q!(" stp " "x0, x1, [" acc!() "+ 32]"),
Q!(" ldp " "x0, x1, [" tabup!() ", #48]"),
Q!(" csel " "x0, x0, xzr, ne"),
Q!(" csel " "x1, x1, xzr, ne"),
Q!(" stp " "x0, x1, [" acc!() "+ 48]"),
Q!(" ldp " "x0, x1, [" tabup!() ", #64]"),
Q!(" csel " "x0, x0, xzr, ne"),
Q!(" csel " "x1, x1, xzr, ne"),
Q!(" stp " "x0, x1, [" acc!() "+ 64]"),
Q!(" ldp " "x0, x1, [" tabup!() ", #80]"),
Q!(" csel " "x0, x0, xzr, ne"),
Q!(" csel " "x1, x1, xzr, ne"),
Q!(" stp " "x0, x1, [" acc!() "+ 80]"),
Q!(" ldp " "x0, x1, [" tabup!() ", #96]"),
Q!(" csel " "x0, x0, xzr, ne"),
Q!(" csel " "x1, x1, xzr, ne"),
Q!(" stp " "x0, x1, [" acc!() "+ 96]"),
Q!(" ldp " "x0, x1, [" tabup!() ", #112]"),
Q!(" csel " "x0, x0, xzr, ne"),
Q!(" csel " "x1, x1, xzr, ne"),
Q!(" stp " "x0, x1, [" acc!() "+ 112]"),
Q!(" ldp " "x0, x1, [" tabup!() ", #128]"),
Q!(" csel " "x0, x0, xzr, ne"),
Q!(" csel " "x1, x1, xzr, ne"),
Q!(" stp " "x0, x1, [" acc!() "+ 128]"),
Q!(" ldp " "x0, x1, [" tabup!() ", #144]"),
Q!(" csel " "x0, x0, xzr, ne"),
Q!(" csel " "x1, x1, xzr, ne"),
Q!(" stp " "x0, x1, [" acc!() "+ 144]"),
Q!(" ldp " "x0, x1, [" tabup!() ", #160]"),
Q!(" csel " "x0, x0, xzr, ne"),
Q!(" csel " "x1, x1, xzr, ne"),
Q!(" stp " "x0, x1, [" acc!() "+ 160]"),
Q!(" ldp " "x0, x1, [" tabup!() ", #176]"),
Q!(" csel " "x0, x0, xzr, ne"),
Q!(" csel " "x1, x1, xzr, ne"),
Q!(" stp " "x0, x1, [" acc!() "+ 176]"),
Q!(" ldp " "x0, x1, [" tabup!() ", #192]"),
Q!(" csel " "x0, x0, xzr, ne"),
Q!(" csel " "x1, x1, xzr, ne"),
Q!(" stp " "x0, x1, [" acc!() "+ 192]"),
Q!(" ldr " "x0, [" tabup!() ", #208]"),
Q!(" csel " "x0, x0, xzr, ne"),
Q!(" str " "x0, [" acc!() "+ 208]"),
Q!(" mov " j!() ", #520"),
Q!(Label!("Lp521_jscalarmul_alt_mainloop", 6) ":"),
Q!(" sub " j!() ", " j!() ", #5"),
Q!(" add " "x0, " acc!()),
Q!(" add " "x1, " acc!()),
Q!(" bl " Label!("Lp521_jscalarmul_alt_jdouble", 4, After)),
Q!(" add " "x0, " acc!()),
Q!(" add " "x1, " acc!()),
Q!(" bl " Label!("Lp521_jscalarmul_alt_jdouble", 4, After)),
Q!(" add " "x0, " acc!()),
Q!(" add " "x1, " acc!()),
Q!(" bl " Label!("Lp521_jscalarmul_alt_jdouble", 4, After)),
Q!(" add " "x0, " acc!()),
Q!(" add " "x1, " acc!()),
Q!(" bl " Label!("Lp521_jscalarmul_alt_jdouble", 4, After)),
Q!(" add " "x0, " acc!()),
Q!(" add " "x1, " acc!()),
Q!(" bl " Label!("Lp521_jscalarmul_alt_jdouble", 4, After)),
Q!(" ldp " "x0, x1, [" scalarb!() "]"),
Q!(" ldp " "x2, x3, [" scalarb!() "+ 16]"),
Q!(" ldp " "x4, x5, [" scalarb!() "+ 32]"),
Q!(" ldp " "x6, x7, [" scalarb!() "+ 48]"),
Q!(" ldr " "x8, [" scalarb!() "+ 64]"),
Q!(" lsr " bf!() ", x8, #59"),
Q!(" extr " "x8, x8, x7, #59"),
Q!(" extr " "x7, x7, x6, #59"),
Q!(" extr " "x6, x6, x5, #59"),
Q!(" extr " "x5, x5, x4, #59"),
Q!(" extr " "x4, x4, x3, #59"),
Q!(" extr " "x3, x3, x2, #59"),
Q!(" extr " "x2, x2, x1, #59"),
Q!(" extr " "x1, x1, x0, #59"),
Q!(" lsl " "x0, x0, #5"),
Q!(" stp " "x0, x1, [" scalarb!() "]"),
Q!(" stp " "x2, x3, [" scalarb!() "+ 16]"),
Q!(" stp " "x4, x5, [" scalarb!() "+ 32]"),
Q!(" stp " "x6, x7, [" scalarb!() "+ 48]"),
Q!(" str " "x8, [" scalarb!() "+ 64]"),
Q!(" subs " bf!() ", " bf!() ", #16"),
Q!(" csetm " sgn!() ", lo"),
Q!(" cneg " bf!() ", " bf!() ", lo"),
Q!(" mov " "x0, xzr"),
Q!(" mov " "x1, xzr"),
Q!(" mov " "x2, xzr"),
Q!(" mov " "x3, xzr"),
Q!(" mov " "x4, xzr"),
Q!(" mov " "x5, xzr"),
Q!(" mov " "x6, xzr"),
Q!(" mov " "x7, xzr"),
Q!(" mov " "x8, xzr"),
Q!(" add " tabup!() ", " tab!()),
selectblock!("1"),
selectblock!("2"),
selectblock!("3"),
selectblock!("4"),
selectblock!("5"),
selectblock!("6"),
selectblock!("7"),
selectblock!("8"),
selectblock!("9"),
selectblock!("10"),
selectblock!("11"),
selectblock!("12"),
selectblock!("13"),
selectblock!("14"),
selectblock!("15"),
selectblock!("16"),
Q!(" stp " "x0, x1, [" tabent!() "]"),
Q!(" stp " "x2, x3, [" tabent!() "+ 16]"),
Q!(" stp " "x4, x5, [" tabent!() "+ 32]"),
Q!(" stp " "x6, x7, [" tabent!() "+ 48]"),
Q!(" str " "x8, [" tabent!() "+ 64]"),
Q!(" mov " "x0, xzr"),
Q!(" mov " "x1, xzr"),
Q!(" mov " "x2, xzr"),
Q!(" mov " "x3, xzr"),
Q!(" mov " "x4, xzr"),
Q!(" mov " "x5, xzr"),
Q!(" mov " "x6, xzr"),
Q!(" mov " "x7, xzr"),
Q!(" mov " "x8, xzr"),
Q!(" add " tabup!() ", " tab!() "+ 2 * " NUMSIZE!()),
selectblock!("1"),
selectblock!("2"),
selectblock!("3"),
selectblock!("4"),
selectblock!("5"),
selectblock!("6"),
selectblock!("7"),
selectblock!("8"),
selectblock!("9"),
selectblock!("10"),
selectblock!("11"),
selectblock!("12"),
selectblock!("13"),
selectblock!("14"),
selectblock!("15"),
selectblock!("16"),
Q!(" stp " "x0, x1, [" tabent!() "+ 2 * " NUMSIZE!() "]"),
Q!(" stp " "x2, x3, [" tabent!() "+ 2 * " NUMSIZE!() "+ 16]"),
Q!(" stp " "x4, x5, [" tabent!() "+ 2 * " NUMSIZE!() "+ 32]"),
Q!(" stp " "x6, x7, [" tabent!() "+ 2 * " NUMSIZE!() "+ 48]"),
Q!(" str " "x8, [" tabent!() "+ 2 * " NUMSIZE!() "+ 64]"),
Q!(" mov " "x0, xzr"),
Q!(" mov " "x1, xzr"),
Q!(" mov " "x2, xzr"),
Q!(" mov " "x3, xzr"),
Q!(" mov " "x4, xzr"),
Q!(" mov " "x5, xzr"),
Q!(" mov " "x6, xzr"),
Q!(" mov " "x7, xzr"),
Q!(" mov " "x8, xzr"),
Q!(" add " tabup!() ", " tab!() "+ " NUMSIZE!()),
selectblock!("1"),
selectblock!("2"),
selectblock!("3"),
selectblock!("4"),
selectblock!("5"),
selectblock!("6"),
selectblock!("7"),
selectblock!("8"),
selectblock!("9"),
selectblock!("10"),
selectblock!("11"),
selectblock!("12"),
selectblock!("13"),
selectblock!("14"),
selectblock!("15"),
selectblock!("16"),
Q!(" orr " "x10, x0, x1"),
Q!(" orr " "x11, x2, x3"),
Q!(" orr " "x12, x4, x5"),
Q!(" orr " "x13, x6, x7"),
Q!(" orr " "x10, x10, x11"),
Q!(" orr " "x12, x12, x13"),
Q!(" orr " "x12, x12, x8"),
Q!(" orr " "x10, x10, x12"),
Q!(" cmp " "x10, xzr"),
Q!(" csel " sgn!() ", " sgn!() ", xzr, ne"),
Q!(" eor " "x0, x0, " sgn!()),
Q!(" eor " "x1, x1, " sgn!()),
Q!(" eor " "x2, x2, " sgn!()),
Q!(" eor " "x3, x3, " sgn!()),
Q!(" eor " "x4, x4, " sgn!()),
Q!(" eor " "x5, x5, " sgn!()),
Q!(" eor " "x6, x6, " sgn!()),
Q!(" eor " "x7, x7, " sgn!()),
Q!(" and " sgn!() ", " sgn!() ", #0x1FF"),
Q!(" eor " "x8, x8, " sgn!()),
Q!(" stp " "x0, x1, [" tabent!() "+ " NUMSIZE!() "]"),
Q!(" stp " "x2, x3, [" tabent!() "+ " NUMSIZE!() "+ 16]"),
Q!(" stp " "x4, x5, [" tabent!() "+ " NUMSIZE!() "+ 32]"),
Q!(" stp " "x6, x7, [" tabent!() "+ " NUMSIZE!() "+ 48]"),
Q!(" str " "x8, [" tabent!() "+ " NUMSIZE!() "+ 64]"),
Q!(" add " "x0, " acc!()),
Q!(" add " "x1, " acc!()),
Q!(" add " "x2, " tabent!()),
Q!(" bl " Label!("Lp521_jscalarmul_alt_jadd", 5, After)),
Q!(" cbnz " j!() ", " Label!("Lp521_jscalarmul_alt_mainloop", 6, Before)),
Q!(" ldp " "x0, x1, [" acc!() "]"),
Q!(" stp " "x0, x1, [" res!() "]"),
Q!(" ldp " "x0, x1, [" acc!() "+ 16]"),
Q!(" stp " "x0, x1, [" res!() ", #16]"),
Q!(" ldp " "x0, x1, [" acc!() "+ 32]"),
Q!(" stp " "x0, x1, [" res!() ", #32]"),
Q!(" ldp " "x0, x1, [" acc!() "+ 48]"),
Q!(" stp " "x0, x1, [" res!() ", #48]"),
Q!(" ldp " "x0, x1, [" acc!() "+ 64]"),
Q!(" stp " "x0, x1, [" res!() ", #64]"),
Q!(" ldp " "x0, x1, [" acc!() "+ 80]"),
Q!(" stp " "x0, x1, [" res!() ", #80]"),
Q!(" ldp " "x0, x1, [" acc!() "+ 96]"),
Q!(" stp " "x0, x1, [" res!() ", #96]"),
Q!(" ldp " "x0, x1, [" acc!() "+ 112]"),
Q!(" stp " "x0, x1, [" res!() ", #112]"),
Q!(" ldp " "x0, x1, [" acc!() "+ 128]"),
Q!(" stp " "x0, x1, [" res!() ", #128]"),
Q!(" ldp " "x0, x1, [" acc!() "+ 144]"),
Q!(" stp " "x0, x1, [" res!() ", #144]"),
Q!(" ldp " "x0, x1, [" acc!() "+ 160]"),
Q!(" stp " "x0, x1, [" res!() ", #160]"),
Q!(" ldp " "x0, x1, [" acc!() "+ 176]"),
Q!(" stp " "x0, x1, [" res!() ", #176]"),
Q!(" ldp " "x0, x1, [" acc!() "+ 192]"),
Q!(" stp " "x0, x1, [" res!() ", #192]"),
Q!(" ldr " "x0, [" acc!() "+ 208]"),
Q!(" str " "x0, [" res!() ", #208]"),
Q!(" add " "sp, sp, # (" NSPACE!() "+ 0)"),
Q!(" ldp " "x21, x30, [sp], #16"),
Q!(" ldp " "x19, x20, [sp], #16"),
Q!(" b " Label!("hoist_finish", 7, After)),
Q!(Label!("Lp521_jscalarmul_alt_bignum_mod_p521_9", 3) ":"),
Q!(" ldr " "x12, [x1, #64]"),
Q!(" lsr " "x2, x12, #9"),
Q!(" cmp " "xzr, xzr"),
Q!(" ldp " "x4, x5, [x1]"),
Q!(" adcs " "xzr, x4, x2"),
Q!(" adcs " "xzr, x5, xzr"),
Q!(" ldp " "x6, x7, [x1, #16]"),
Q!(" and " "x3, x6, x7"),
Q!(" adcs " "xzr, x3, xzr"),
Q!(" ldp " "x8, x9, [x1, #32]"),
Q!(" and " "x3, x8, x9"),
Q!(" adcs " "xzr, x3, xzr"),
Q!(" ldp " "x10, x11, [x1, #48]"),
Q!(" and " "x3, x10, x11"),
Q!(" adcs " "xzr, x3, xzr"),
Q!(" orr " "x3, x12, #0xfffffffffffffe00"),
Q!(" adcs " "x3, x3, xzr"),
Q!(" adcs " "x4, x4, x2"),
Q!(" adcs " "x5, x5, xzr"),
Q!(" adcs " "x6, x6, xzr"),
Q!(" adcs " "x7, x7, xzr"),
Q!(" adcs " "x8, x8, xzr"),
Q!(" adcs " "x9, x9, xzr"),
Q!(" adcs " "x10, x10, xzr"),
Q!(" adcs " "x11, x11, xzr"),
Q!(" adc " "x12, x12, xzr"),
Q!(" and " "x12, x12, #0x1ff"),
Q!(" stp " "x4, x5, [x0]"),
Q!(" stp " "x6, x7, [x0, #16]"),
Q!(" stp " "x8, x9, [x0, #32]"),
Q!(" stp " "x10, x11, [x0, #48]"),
Q!(" str " "x12, [x0, #64]"),
Q!(" ret " ),
Q!(Label!("Lp521_jscalarmul_alt_bignum_mod_n521_9", 2) ":"),
Q!(" ldr " "x14, [x1, #64]"),
Q!(" lsr " "x15, x14, #9"),
Q!(" add " "x15, x15, #1"),
Q!(" mov " "x2, #39927"),
Q!(" movk " "x2, #28359, lsl #16"),
Q!(" movk " "x2, #18657, lsl #32"),
Q!(" movk " "x2, #17552, lsl #48"),
Q!(" mul " "x6, x2, x15"),
Q!(" mov " "x3, #47185"),
Q!(" movk " "x3, #30307, lsl #16"),
Q!(" movk " "x3, #13895, lsl #32"),
Q!(" movk " "x3, #50250, lsl #48"),
Q!(" mul " "x7, x3, x15"),
Q!(" mov " "x4, #23087"),
Q!(" movk " "x4, #2294, lsl #16"),
Q!(" movk " "x4, #65207, lsl #32"),
Q!(" movk " "x4, #32819, lsl #48"),
Q!(" mul " "x8, x4, x15"),
Q!(" mov " "x5, #27028"),
Q!(" movk " "x5, #16592, lsl #16"),
Q!(" movk " "x5, #30844, lsl #32"),
Q!(" movk " "x5, #44665, lsl #48"),
Q!(" mul " "x9, x5, x15"),
Q!(" lsl " "x10, x15, #2"),
Q!(" add " "x10, x10, x15"),
Q!(" umulh " "x13, x2, x15"),
Q!(" adds " "x7, x7, x13"),
Q!(" umulh " "x13, x3, x15"),
Q!(" adcs " "x8, x8, x13"),
Q!(" umulh " "x13, x4, x15"),
Q!(" adcs " "x9, x9, x13"),
Q!(" umulh " "x13, x5, x15"),
Q!(" adc " "x10, x10, x13"),
Q!(" ldp " "x12, x13, [x1]"),
Q!(" adds " "x6, x6, x12"),
Q!(" adcs " "x7, x7, x13"),
Q!(" ldp " "x12, x13, [x1, #16]"),
Q!(" adcs " "x8, x8, x12"),
Q!(" adcs " "x9, x9, x13"),
Q!(" ldp " "x13, x11, [x1, #32]"),
Q!(" adcs " "x10, x10, x13"),
Q!(" adcs " "x11, x11, xzr"),
Q!(" ldp " "x12, x13, [x1, #48]"),
Q!(" adcs " "x12, x12, xzr"),
Q!(" adcs " "x13, x13, xzr"),
Q!(" orr " "x14, x14, #0xfffffffffffffe00"),
Q!(" adcs " "x14, x14, xzr"),
Q!(" csetm " "x15, lo"),
Q!(" and " "x2, x2, x15"),
Q!(" subs " "x6, x6, x2"),
Q!(" and " "x3, x3, x15"),
Q!(" sbcs " "x7, x7, x3"),
Q!(" and " "x4, x4, x15"),
Q!(" sbcs " "x8, x8, x4"),
Q!(" and " "x5, x5, x15"),
Q!(" sbcs " "x9, x9, x5"),
Q!(" mov " "x2, #5"),
Q!(" and " "x2, x2, x15"),
Q!(" sbcs " "x10, x10, x2"),
Q!(" sbcs " "x11, x11, xzr"),
Q!(" sbcs " "x12, x12, xzr"),
Q!(" sbcs " "x13, x13, xzr"),
Q!(" sbc " "x14, x14, xzr"),
Q!(" and " "x14, x14, #0x1ff"),
Q!(" stp " "x6, x7, [x0]"),
Q!(" stp " "x8, x9, [x0, #16]"),
Q!(" stp " "x10, x11, [x0, #32]"),
Q!(" stp " "x12, x13, [x0, #48]"),
Q!(" str " "x14, [x0, #64]"),
Q!(" ret " ),
Q!(Label!("Lp521_jscalarmul_alt_jadd", 5) ":"),
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!(" stp " "x29, x30, [sp, #-16] !"),
Q!(" sub " "sp, sp, # (576 + 0)"),
Q!(" mov " "x27, x0"),
Q!(" mov " "x28, x1"),
Q!(" mov " "x29, x2"),
Q!(" mov " "x0, sp"),
Q!(" add " "x1, x28, #0x90"),
Q!(" bl " Label!("Lp521_jscalarmul_alt_sqr_p521", 8, After)),
Q!(" add " "x0, sp, #0x168"),
Q!(" add " "x1, x29, #0x90"),
Q!(" bl " Label!("Lp521_jscalarmul_alt_sqr_p521", 8, After)),
Q!(" add " "x0, sp, #0x1f8"),
Q!(" add " "x1, x29, #0x90"),
Q!(" add " "x2, x28, #0x48"),
Q!(" bl " Label!("Lp521_jscalarmul_alt_mul_p521", 9, After)),
Q!(" add " "x0, sp, #0x48"),
Q!(" add " "x1, x28, #0x90"),
Q!(" add " "x2, x29, #0x48"),
Q!(" bl " Label!("Lp521_jscalarmul_alt_mul_p521", 9, After)),
Q!(" add " "x0, sp, #0x90"),
Q!(" mov " "x1, sp"),
Q!(" add " "x2, x29, #0x0"),
Q!(" bl " Label!("Lp521_jscalarmul_alt_mul_p521", 9, After)),
Q!(" add " "x0, sp, #0x120"),
Q!(" add " "x1, sp, #0x168"),
Q!(" add " "x2, x28, #0x0"),
Q!(" bl " Label!("Lp521_jscalarmul_alt_mul_p521", 9, After)),
Q!(" add " "x0, sp, #0x48"),
Q!(" mov " "x1, sp"),
Q!(" add " "x2, sp, #0x48"),
Q!(" bl " Label!("Lp521_jscalarmul_alt_mul_p521", 9, After)),
Q!(" add " "x0, sp, #0x1f8"),
Q!(" add " "x1, sp, #0x168"),
Q!(" add " "x2, sp, #0x1f8"),
Q!(" bl " Label!("Lp521_jscalarmul_alt_mul_p521", 9, After)),
Q!(" add " "x0, sp, #0x168"),
Q!(" add " "x1, sp, #0x90"),
Q!(" add " "x2, sp, #0x120"),
Q!(" bl " Label!("Lp521_jscalarmul_alt_sub_p521", 12, After)),
Q!(" add " "x0, sp, #0x48"),
Q!(" add " "x1, sp, #0x48"),
Q!(" add " "x2, sp, #0x1f8"),
Q!(" bl " Label!("Lp521_jscalarmul_alt_sub_p521", 12, After)),
Q!(" add " "x0, sp, #0xd8"),
Q!(" add " "x1, sp, #0x168"),
Q!(" bl " Label!("Lp521_jscalarmul_alt_sqr_p521", 8, After)),
Q!(" mov " "x0, sp"),
Q!(" add " "x1, sp, #0x48"),
Q!(" bl " Label!("Lp521_jscalarmul_alt_sqr_p521", 8, After)),
Q!(" add " "x0, sp, #0x120"),
Q!(" add " "x1, sp, #0xd8"),
Q!(" add " "x2, sp, #0x120"),
Q!(" bl " Label!("Lp521_jscalarmul_alt_mul_p521", 9, After)),
Q!(" add " "x0, sp, #0x90"),
Q!(" add " "x1, sp, #0xd8"),
Q!(" add " "x2, sp, #0x90"),
Q!(" bl " Label!("Lp521_jscalarmul_alt_mul_p521", 9, After)),
Q!(" mov " "x0, sp"),
Q!(" mov " "x1, sp"),
Q!(" add " "x2, sp, #0x120"),
Q!(" bl " Label!("Lp521_jscalarmul_alt_sub_p521", 12, After)),
Q!(" add " "x0, sp, #0xd8"),
Q!(" add " "x1, sp, #0x90"),
Q!(" add " "x2, sp, #0x120"),
Q!(" bl " Label!("Lp521_jscalarmul_alt_sub_p521", 12, After)),
Q!(" add " "x0, sp, #0x168"),
Q!(" add " "x1, sp, #0x168"),
Q!(" add " "x2, x28, #0x90"),
Q!(" bl " Label!("Lp521_jscalarmul_alt_mul_p521", 9, After)),
Q!(" mov " "x0, sp"),
Q!(" mov " "x1, sp"),
Q!(" add " "x2, sp, #0x90"),
Q!(" bl " Label!("Lp521_jscalarmul_alt_sub_p521", 12, After)),
Q!(" add " "x0, sp, #0x120"),
Q!(" add " "x1, sp, #0x120"),
Q!(" mov " "x2, sp"),
Q!(" bl " Label!("Lp521_jscalarmul_alt_sub_p521", 12, After)),
Q!(" add " "x0, sp, #0xd8"),
Q!(" add " "x1, sp, #0xd8"),
Q!(" add " "x2, sp, #0x1f8"),
Q!(" bl " Label!("Lp521_jscalarmul_alt_mul_p521", 9, After)),
Q!(" add " "x0, sp, #0x168"),
Q!(" add " "x1, sp, #0x168"),
Q!(" add " "x2, x29, #0x90"),
Q!(" bl " Label!("Lp521_jscalarmul_alt_mul_p521", 9, After)),
Q!(" add " "x0, sp, #0x120"),
Q!(" add " "x1, sp, #0x48"),
Q!(" add " "x2, sp, #0x120"),
Q!(" bl " Label!("Lp521_jscalarmul_alt_mul_p521", 9, After)),
Q!(" add " "x0, sp, #0x120"),
Q!(" add " "x1, sp, #0x120"),
Q!(" add " "x2, sp, #0xd8"),
Q!(" bl " Label!("Lp521_jscalarmul_alt_sub_p521", 12, After)),
Q!(" ldp " "x0, x1, [x28, #144]"),
Q!(" ldp " "x2, x3, [x28, #160]"),
Q!(" ldp " "x4, x5, [x28, #176]"),
Q!(" ldp " "x6, x7, [x28, #192]"),
Q!(" ldr " "x8, [x28, #208]"),
Q!(" orr " "x20, x0, x1"),
Q!(" orr " "x21, x2, x3"),
Q!(" orr " "x22, x4, x5"),
Q!(" orr " "x23, x6, x7"),
Q!(" orr " "x20, x20, x21"),
Q!(" orr " "x22, x22, x23"),
Q!(" orr " "x20, x20, x8"),
Q!(" orr " "x20, x20, x22"),
Q!(" cmp " "x20, xzr"),
Q!(" cset " "x20, ne"),
Q!(" ldp " "x10, x11, [x29, #144]"),
Q!(" ldp " "x12, x13, [x29, #160]"),
Q!(" ldp " "x14, x15, [x29, #176]"),
Q!(" ldp " "x16, x17, [x29, #192]"),
Q!(" ldr " "x19, [x29, #208]"),
Q!(" orr " "x21, x10, x11"),
Q!(" orr " "x22, x12, x13"),
Q!(" orr " "x23, x14, x15"),
Q!(" orr " "x24, x16, x17"),
Q!(" orr " "x21, x21, x22"),
Q!(" orr " "x23, x23, x24"),
Q!(" orr " "x21, x21, x19"),
Q!(" orr " "x21, x21, x23"),
Q!(" csel " "x0, x0, x10, ne"),
Q!(" csel " "x1, x1, x11, ne"),
Q!(" csel " "x2, x2, x12, ne"),
Q!(" csel " "x3, x3, x13, ne"),
Q!(" csel " "x4, x4, x14, ne"),
Q!(" csel " "x5, x5, x15, ne"),
Q!(" csel " "x6, x6, x16, ne"),
Q!(" csel " "x7, x7, x17, ne"),
Q!(" csel " "x8, x8, x19, ne"),
Q!(" cmp " "x21, xzr"),
Q!(" cset " "x21, ne"),
Q!(" cmp " "x21, x20"),
Q!(" ldp " "x10, x11, [sp, #360]"),
Q!(" ldp " "x12, x13, [sp, #376]"),
Q!(" ldp " "x14, x15, [sp, #392]"),
Q!(" ldp " "x16, x17, [sp, #408]"),
Q!(" ldr " "x19, [sp, #424]"),
Q!(" csel " "x0, x0, x10, ne"),
Q!(" csel " "x1, x1, x11, ne"),
Q!(" csel " "x2, x2, x12, ne"),
Q!(" csel " "x3, x3, x13, ne"),
Q!(" csel " "x4, x4, x14, ne"),
Q!(" csel " "x5, x5, x15, ne"),
Q!(" csel " "x6, x6, x16, ne"),
Q!(" csel " "x7, x7, x17, ne"),
Q!(" csel " "x8, x8, x19, ne"),
Q!(" stp " "x0, x1, [sp, #360]"),
Q!(" stp " "x2, x3, [sp, #376]"),
Q!(" stp " "x4, x5, [sp, #392]"),
Q!(" stp " "x6, x7, [sp, #408]"),
Q!(" str " "x8, [sp, #424]"),
Q!(" ldp " "x20, x21, [x28]"),
Q!(" ldp " "x0, x1, [sp]"),
Q!(" csel " "x0, x20, x0, cc"),
Q!(" csel " "x1, x21, x1, cc"),
Q!(" ldp " "x20, x21, [x29]"),
Q!(" csel " "x0, x20, x0, hi"),
Q!(" csel " "x1, x21, x1, hi"),
Q!(" ldp " "x20, x21, [x28, #16]"),
Q!(" ldp " "x2, x3, [sp, #16]"),
Q!(" csel " "x2, x20, x2, cc"),
Q!(" csel " "x3, x21, x3, cc"),
Q!(" ldp " "x20, x21, [x29, #16]"),
Q!(" csel " "x2, x20, x2, hi"),
Q!(" csel " "x3, x21, x3, hi"),
Q!(" ldp " "x20, x21, [x28, #32]"),
Q!(" ldp " "x4, x5, [sp, #32]"),
Q!(" csel " "x4, x20, x4, cc"),
Q!(" csel " "x5, x21, x5, cc"),
Q!(" ldp " "x20, x21, [x29, #32]"),
Q!(" csel " "x4, x20, x4, hi"),
Q!(" csel " "x5, x21, x5, hi"),
Q!(" ldp " "x20, x21, [x28, #48]"),
Q!(" ldp " "x6, x7, [sp, #48]"),
Q!(" csel " "x6, x20, x6, cc"),
Q!(" csel " "x7, x21, x7, cc"),
Q!(" ldp " "x20, x21, [x29, #48]"),
Q!(" csel " "x6, x20, x6, hi"),
Q!(" csel " "x7, x21, x7, hi"),
Q!(" ldr " "x20, [x28, #64]"),
Q!(" ldr " "x8, [sp, #64]"),
Q!(" csel " "x8, x20, x8, cc"),
Q!(" ldr " "x21, [x29, #64]"),
Q!(" csel " "x8, x21, x8, hi"),
Q!(" ldp " "x20, x21, [x28, #72]"),
Q!(" ldp " "x10, x11, [sp, #288]"),
Q!(" csel " "x10, x20, x10, cc"),
Q!(" csel " "x11, x21, x11, cc"),
Q!(" ldp " "x20, x21, [x29, #72]"),
Q!(" csel " "x10, x20, x10, hi"),
Q!(" csel " "x11, x21, x11, hi"),
Q!(" ldp " "x20, x21, [x28, #88]"),
Q!(" ldp " "x12, x13, [sp, #304]"),
Q!(" csel " "x12, x20, x12, cc"),
Q!(" csel " "x13, x21, x13, cc"),
Q!(" ldp " "x20, x21, [x29, #88]"),
Q!(" csel " "x12, x20, x12, hi"),
Q!(" csel " "x13, x21, x13, hi"),
Q!(" ldp " "x20, x21, [x28, #104]"),
Q!(" ldp " "x14, x15, [sp, #320]"),
Q!(" csel " "x14, x20, x14, cc"),
Q!(" csel " "x15, x21, x15, cc"),
Q!(" ldp " "x20, x21, [x29, #104]"),
Q!(" csel " "x14, x20, x14, hi"),
Q!(" csel " "x15, x21, x15, hi"),
Q!(" ldp " "x20, x21, [x28, #120]"),
Q!(" ldp " "x16, x17, [sp, #336]"),
Q!(" csel " "x16, x20, x16, cc"),
Q!(" csel " "x17, x21, x17, cc"),
Q!(" ldp " "x20, x21, [x29, #120]"),
Q!(" csel " "x16, x20, x16, hi"),
Q!(" csel " "x17, x21, x17, hi"),
Q!(" ldr " "x20, [x28, #136]"),
Q!(" ldr " "x19, [sp, #352]"),
Q!(" csel " "x19, x20, x19, cc"),
Q!(" ldr " "x21, [x29, #136]"),
Q!(" csel " "x19, x21, x19, hi"),
Q!(" stp " "x0, x1, [x27]"),
Q!(" stp " "x2, x3, [x27, #16]"),
Q!(" stp " "x4, x5, [x27, #32]"),
Q!(" stp " "x6, x7, [x27, #48]"),
Q!(" str " "x8, [x27, #64]"),
Q!(" ldp " "x0, x1, [sp, #360]"),
Q!(" ldp " "x2, x3, [sp, #376]"),
Q!(" ldp " "x4, x5, [sp, #392]"),
Q!(" ldp " "x6, x7, [sp, #408]"),
Q!(" ldr " "x8, [sp, #424]"),
Q!(" stp " "x10, x11, [x27, #72]"),
Q!(" stp " "x12, x13, [x27, #88]"),
Q!(" stp " "x14, x15, [x27, #104]"),
Q!(" stp " "x16, x17, [x27, #120]"),
Q!(" str " "x19, [x27, #136]"),
Q!(" stp " "x0, x1, [x27, #144]"),
Q!(" stp " "x2, x3, [x27, #160]"),
Q!(" stp " "x4, x5, [x27, #176]"),
Q!(" stp " "x6, x7, [x27, #192]"),
Q!(" str " "x8, [x27, #208]"),
Q!(" add " "sp, sp, # (576 + 0)"),
Q!(" ldp " "x29, x30, [sp], #16"),
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"),
Q!(" ret " ),
Q!(Label!("Lp521_jscalarmul_alt_jdouble", 4) ":"),
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!(" stp " "x29, x30, [sp, #-16] !"),
Q!(" sub " "sp, sp, # (512 + 0)"),
Q!(" mov " "x27, x0"),
Q!(" mov " "x28, x1"),
Q!(" mov " "x0, sp"),
Q!(" add " "x1, x28, #0x90"),
Q!(" bl " Label!("Lp521_jscalarmul_alt_sqr_p521", 8, After)),
Q!(" add " "x0, sp, #0x48"),
Q!(" add " "x1, x28, #0x48"),
Q!(" bl " Label!("Lp521_jscalarmul_alt_sqr_p521", 8, After)),
Q!(" ldp " "x5, x6, [x28]"),
Q!(" ldp " "x4, x3, [sp]"),
Q!(" subs " "x5, x5, x4"),
Q!(" sbcs " "x6, x6, x3"),
Q!(" ldp " "x7, x8, [x28, #16]"),
Q!(" ldp " "x4, x3, [sp, #16]"),
Q!(" sbcs " "x7, x7, x4"),
Q!(" sbcs " "x8, x8, x3"),
Q!(" ldp " "x9, x10, [x28, #32]"),
Q!(" ldp " "x4, x3, [sp, #32]"),
Q!(" sbcs " "x9, x9, x4"),
Q!(" sbcs " "x10, x10, x3"),
Q!(" ldp " "x11, x12, [x28, #48]"),
Q!(" ldp " "x4, x3, [sp, #48]"),
Q!(" sbcs " "x11, x11, x4"),
Q!(" sbcs " "x12, x12, x3"),
Q!(" ldr " "x13, [x28, #64]"),
Q!(" ldr " "x4, [sp, #64]"),
Q!(" sbcs " "x13, x13, x4"),
Q!(" sbcs " "x5, x5, xzr"),
Q!(" sbcs " "x6, x6, xzr"),
Q!(" sbcs " "x7, x7, xzr"),
Q!(" sbcs " "x8, x8, xzr"),
Q!(" sbcs " "x9, x9, xzr"),
Q!(" sbcs " "x10, x10, xzr"),
Q!(" sbcs " "x11, x11, xzr"),
Q!(" sbcs " "x12, x12, xzr"),
Q!(" sbcs " "x13, x13, xzr"),
Q!(" and " "x13, x13, #0x1ff"),
Q!(" stp " "x5, x6, [sp, #216]"),
Q!(" stp " "x7, x8, [sp, #232]"),
Q!(" stp " "x9, x10, [sp, #248]"),
Q!(" stp " "x11, x12, [sp, #264]"),
Q!(" str " "x13, [sp, #280]"),
Q!(" cmp " "xzr, xzr"),
Q!(" ldp " "x5, x6, [x28]"),
Q!(" ldp " "x4, x3, [sp]"),
Q!(" adcs " "x5, x5, x4"),
Q!(" adcs " "x6, x6, x3"),
Q!(" ldp " "x7, x8, [x28, #16]"),
Q!(" ldp " "x4, x3, [sp, #16]"),
Q!(" adcs " "x7, x7, x4"),
Q!(" adcs " "x8, x8, x3"),
Q!(" ldp " "x9, x10, [x28, #32]"),
Q!(" ldp " "x4, x3, [sp, #32]"),
Q!(" adcs " "x9, x9, x4"),
Q!(" adcs " "x10, x10, x3"),
Q!(" ldp " "x11, x12, [x28, #48]"),
Q!(" ldp " "x4, x3, [sp, #48]"),
Q!(" adcs " "x11, x11, x4"),
Q!(" adcs " "x12, x12, x3"),
Q!(" ldr " "x13, [x28, #64]"),
Q!(" ldr " "x4, [sp, #64]"),
Q!(" adc " "x13, x13, x4"),
Q!(" subs " "x4, x13, #0x200"),
Q!(" csetm " "x4, cs"),
Q!(" sbcs " "x5, x5, xzr"),
Q!(" and " "x4, x4, #0x200"),
Q!(" sbcs " "x6, x6, xzr"),
Q!(" sbcs " "x7, x7, xzr"),
Q!(" sbcs " "x8, x8, xzr"),
Q!(" sbcs " "x9, x9, xzr"),
Q!(" sbcs " "x10, x10, xzr"),
Q!(" sbcs " "x11, x11, xzr"),
Q!(" sbcs " "x12, x12, xzr"),
Q!(" sbc " "x13, x13, x4"),
Q!(" stp " "x5, x6, [sp, #144]"),
Q!(" stp " "x7, x8, [sp, #160]"),
Q!(" stp " "x9, x10, [sp, #176]"),
Q!(" stp " "x11, x12, [sp, #192]"),
Q!(" str " "x13, [sp, #208]"),
Q!(" add " "x0, sp, #0xd8"),
Q!(" add " "x1, sp, #0x90"),
Q!(" add " "x2, sp, #0xd8"),
Q!(" bl " Label!("Lp521_jscalarmul_alt_mul_p521", 9, After)),
Q!(" cmp " "xzr, xzr"),
Q!(" ldp " "x5, x6, [x28, #72]"),
Q!(" ldp " "x4, x3, [x28, #144]"),
Q!(" adcs " "x5, x5, x4"),
Q!(" adcs " "x6, x6, x3"),
Q!(" ldp " "x7, x8, [x28, #88]"),
Q!(" ldp " "x4, x3, [x28, #160]"),
Q!(" adcs " "x7, x7, x4"),
Q!(" adcs " "x8, x8, x3"),
Q!(" ldp " "x9, x10, [x28, #104]"),
Q!(" ldp " "x4, x3, [x28, #176]"),
Q!(" adcs " "x9, x9, x4"),
Q!(" adcs " "x10, x10, x3"),
Q!(" ldp " "x11, x12, [x28, #120]"),
Q!(" ldp " "x4, x3, [x28, #192]"),
Q!(" adcs " "x11, x11, x4"),
Q!(" adcs " "x12, x12, x3"),
Q!(" ldr " "x13, [x28, #136]"),
Q!(" ldr " "x4, [x28, #208]"),
Q!(" adc " "x13, x13, x4"),
Q!(" subs " "x4, x13, #0x200"),
Q!(" csetm " "x4, cs"),
Q!(" sbcs " "x5, x5, xzr"),
Q!(" and " "x4, x4, #0x200"),
Q!(" sbcs " "x6, x6, xzr"),
Q!(" sbcs " "x7, x7, xzr"),
Q!(" sbcs " "x8, x8, xzr"),
Q!(" sbcs " "x9, x9, xzr"),
Q!(" sbcs " "x10, x10, xzr"),
Q!(" sbcs " "x11, x11, xzr"),
Q!(" sbcs " "x12, x12, xzr"),
Q!(" sbc " "x13, x13, x4"),
Q!(" stp " "x5, x6, [sp, #144]"),
Q!(" stp " "x7, x8, [sp, #160]"),
Q!(" stp " "x9, x10, [sp, #176]"),
Q!(" stp " "x11, x12, [sp, #192]"),
Q!(" str " "x13, [sp, #208]"),
Q!(" add " "x0, sp, #0x120"),
Q!(" add " "x1, x28, #0x0"),
Q!(" add " "x2, sp, #0x48"),
Q!(" bl " Label!("Lp521_jscalarmul_alt_mul_p521", 9, After)),
Q!(" add " "x0, sp, #0x168"),
Q!(" add " "x1, sp, #0xd8"),
Q!(" bl " Label!("Lp521_jscalarmul_alt_sqr_p521", 8, After)),
Q!(" add " "x0, sp, #0x90"),
Q!(" add " "x1, sp, #0x90"),
Q!(" bl " Label!("Lp521_jscalarmul_alt_sqr_p521", 8, After)),
Q!(" ldp " "x6, x7, [sp, #288]"),
Q!(" mov " "x1, #0xc"),
Q!(" mul " "x3, x1, x6"),
Q!(" mul " "x4, x1, x7"),
Q!(" umulh " "x6, x1, x6"),
Q!(" adds " "x4, x4, x6"),
Q!(" umulh " "x7, x1, x7"),
Q!(" ldp " "x8, x9, [sp, #304]"),
Q!(" mul " "x5, x1, x8"),
Q!(" mul " "x6, x1, x9"),
Q!(" umulh " "x8, x1, x8"),
Q!(" adcs " "x5, x5, x7"),
Q!(" umulh " "x9, x1, x9"),
Q!(" adcs " "x6, x6, x8"),
Q!(" ldp " "x10, x11, [sp, #320]"),
Q!(" mul " "x7, x1, x10"),
Q!(" mul " "x8, x1, x11"),
Q!(" umulh " "x10, x1, x10"),
Q!(" adcs " "x7, x7, x9"),
Q!(" umulh " "x11, x1, x11"),
Q!(" adcs " "x8, x8, x10"),
Q!(" ldp " "x12, x13, [sp, #336]"),
Q!(" mul " "x9, x1, x12"),
Q!(" mul " "x10, x1, x13"),
Q!(" umulh " "x12, x1, x12"),
Q!(" adcs " "x9, x9, x11"),
Q!(" umulh " "x13, x1, x13"),
Q!(" adcs " "x10, x10, x12"),
Q!(" ldr " "x14, [sp, #352]"),
Q!(" mul " "x11, x1, x14"),
Q!(" adc " "x11, x11, x13"),
Q!(" mov " "x1, #0x9"),
Q!(" ldp " "x20, x21, [sp, #360]"),
Q!(" mvn " "x20, x20"),
Q!(" mul " "x0, x1, x20"),
Q!(" umulh " "x20, x1, x20"),
Q!(" adds " "x3, x3, x0"),
Q!(" mvn " "x21, x21"),
Q!(" mul " "x0, x1, x21"),
Q!(" umulh " "x21, x1, x21"),
Q!(" adcs " "x4, x4, x0"),
Q!(" ldp " "x22, x23, [sp, #376]"),
Q!(" mvn " "x22, x22"),
Q!(" mul " "x0, x1, x22"),
Q!(" umulh " "x22, x1, x22"),
Q!(" adcs " "x5, x5, x0"),
Q!(" mvn " "x23, x23"),
Q!(" mul " "x0, x1, x23"),
Q!(" umulh " "x23, x1, x23"),
Q!(" adcs " "x6, x6, x0"),
Q!(" ldp " "x17, x19, [sp, #392]"),
Q!(" mvn " "x17, x17"),
Q!(" mul " "x0, x1, x17"),
Q!(" umulh " "x17, x1, x17"),
Q!(" adcs " "x7, x7, x0"),
Q!(" mvn " "x19, x19"),
Q!(" mul " "x0, x1, x19"),
Q!(" umulh " "x19, x1, x19"),
Q!(" adcs " "x8, x8, x0"),
Q!(" ldp " "x2, x16, [sp, #408]"),
Q!(" mvn " "x2, x2"),
Q!(" mul " "x0, x1, x2"),
Q!(" umulh " "x2, x1, x2"),
Q!(" adcs " "x9, x9, x0"),
Q!(" mvn " "x16, x16"),
Q!(" mul " "x0, x1, x16"),
Q!(" umulh " "x16, x1, x16"),
Q!(" adcs " "x10, x10, x0"),
Q!(" ldr " "x0, [sp, #424]"),
Q!(" eor " "x0, x0, #0x1ff"),
Q!(" mul " "x0, x1, x0"),
Q!(" adc " "x11, x11, x0"),
Q!(" adds " "x4, x4, x20"),
Q!(" adcs " "x5, x5, x21"),
Q!(" and " "x15, x4, x5"),
Q!(" adcs " "x6, x6, x22"),
Q!(" and " "x15, x15, x6"),
Q!(" adcs " "x7, x7, x23"),
Q!(" and " "x15, x15, x7"),
Q!(" adcs " "x8, x8, x17"),
Q!(" and " "x15, x15, x8"),
Q!(" adcs " "x9, x9, x19"),
Q!(" and " "x15, x15, x9"),
Q!(" adcs " "x10, x10, x2"),
Q!(" and " "x15, x15, x10"),
Q!(" adc " "x11, x11, x16"),
Q!(" lsr " "x12, x11, #9"),
Q!(" orr " "x11, x11, #0xfffffffffffffe00"),
Q!(" cmp " "xzr, xzr"),
Q!(" adcs " "xzr, x3, x12"),
Q!(" adcs " "xzr, x15, xzr"),
Q!(" adcs " "xzr, x11, xzr"),
Q!(" adcs " "x3, x3, x12"),
Q!(" adcs " "x4, x4, xzr"),
Q!(" adcs " "x5, x5, xzr"),
Q!(" adcs " "x6, x6, xzr"),
Q!(" adcs " "x7, x7, xzr"),
Q!(" adcs " "x8, x8, xzr"),
Q!(" adcs " "x9, x9, xzr"),
Q!(" adcs " "x10, x10, xzr"),
Q!(" adc " "x11, x11, xzr"),
Q!(" and " "x11, x11, #0x1ff"),
Q!(" stp " "x3, x4, [sp, #360]"),
Q!(" stp " "x5, x6, [sp, #376]"),
Q!(" stp " "x7, x8, [sp, #392]"),
Q!(" stp " "x9, x10, [sp, #408]"),
Q!(" str " "x11, [sp, #424]"),
Q!(" ldp " "x5, x6, [sp, #144]"),
Q!(" ldp " "x4, x3, [sp]"),
Q!(" subs " "x5, x5, x4"),
Q!(" sbcs " "x6, x6, x3"),
Q!(" ldp " "x7, x8, [sp, #160]"),
Q!(" ldp " "x4, x3, [sp, #16]"),
Q!(" sbcs " "x7, x7, x4"),
Q!(" sbcs " "x8, x8, x3"),
Q!(" ldp " "x9, x10, [sp, #176]"),
Q!(" ldp " "x4, x3, [sp, #32]"),
Q!(" sbcs " "x9, x9, x4"),
Q!(" sbcs " "x10, x10, x3"),
Q!(" ldp " "x11, x12, [sp, #192]"),
Q!(" ldp " "x4, x3, [sp, #48]"),
Q!(" sbcs " "x11, x11, x4"),
Q!(" sbcs " "x12, x12, x3"),
Q!(" ldr " "x13, [sp, #208]"),
Q!(" ldr " "x4, [sp, #64]"),
Q!(" sbcs " "x13, x13, x4"),
Q!(" sbcs " "x5, x5, xzr"),
Q!(" sbcs " "x6, x6, xzr"),
Q!(" sbcs " "x7, x7, xzr"),
Q!(" sbcs " "x8, x8, xzr"),
Q!(" sbcs " "x9, x9, xzr"),
Q!(" sbcs " "x10, x10, xzr"),
Q!(" sbcs " "x11, x11, xzr"),
Q!(" sbcs " "x12, x12, xzr"),
Q!(" sbcs " "x13, x13, xzr"),
Q!(" and " "x13, x13, #0x1ff"),
Q!(" stp " "x5, x6, [sp, #144]"),
Q!(" stp " "x7, x8, [sp, #160]"),
Q!(" stp " "x9, x10, [sp, #176]"),
Q!(" stp " "x11, x12, [sp, #192]"),
Q!(" str " "x13, [sp, #208]"),
Q!(" mov " "x0, sp"),
Q!(" add " "x1, sp, #0x48"),
Q!(" bl " Label!("Lp521_jscalarmul_alt_sqr_p521", 8, After)),
Q!(" add " "x0, sp, #0xd8"),
Q!(" add " "x1, sp, #0x168"),
Q!(" add " "x2, sp, #0xd8"),
Q!(" bl " Label!("Lp521_jscalarmul_alt_mul_p521", 9, After)),
Q!(" ldp " "x5, x6, [sp, #144]"),
Q!(" ldp " "x4, x3, [sp, #72]"),
Q!(" subs " "x5, x5, x4"),
Q!(" sbcs " "x6, x6, x3"),
Q!(" ldp " "x7, x8, [sp, #160]"),
Q!(" ldp " "x4, x3, [sp, #88]"),
Q!(" sbcs " "x7, x7, x4"),
Q!(" sbcs " "x8, x8, x3"),
Q!(" ldp " "x9, x10, [sp, #176]"),
Q!(" ldp " "x4, x3, [sp, #104]"),
Q!(" sbcs " "x9, x9, x4"),
Q!(" sbcs " "x10, x10, x3"),
Q!(" ldp " "x11, x12, [sp, #192]"),
Q!(" ldp " "x4, x3, [sp, #120]"),
Q!(" sbcs " "x11, x11, x4"),
Q!(" sbcs " "x12, x12, x3"),
Q!(" ldr " "x13, [sp, #208]"),
Q!(" ldr " "x4, [sp, #136]"),
Q!(" sbcs " "x13, x13, x4"),
Q!(" sbcs " "x5, x5, xzr"),
Q!(" sbcs " "x6, x6, xzr"),
Q!(" sbcs " "x7, x7, xzr"),
Q!(" sbcs " "x8, x8, xzr"),
Q!(" sbcs " "x9, x9, xzr"),
Q!(" sbcs " "x10, x10, xzr"),
Q!(" sbcs " "x11, x11, xzr"),
Q!(" sbcs " "x12, x12, xzr"),
Q!(" sbcs " "x13, x13, xzr"),
Q!(" and " "x13, x13, #0x1ff"),
Q!(" stp " "x5, x6, [x27, #144]"),
Q!(" stp " "x7, x8, [x27, #160]"),
Q!(" stp " "x9, x10, [x27, #176]"),
Q!(" stp " "x11, x12, [x27, #192]"),
Q!(" str " "x13, [x27, #208]"),
Q!(" ldp " "x6, x7, [sp, #288]"),
Q!(" lsl " "x3, x6, #2"),
Q!(" extr " "x4, x7, x6, #62"),
Q!(" ldp " "x8, x9, [sp, #304]"),
Q!(" extr " "x5, x8, x7, #62"),
Q!(" extr " "x6, x9, x8, #62"),
Q!(" ldp " "x10, x11, [sp, #320]"),
Q!(" extr " "x7, x10, x9, #62"),
Q!(" extr " "x8, x11, x10, #62"),
Q!(" ldp " "x12, x13, [sp, #336]"),
Q!(" extr " "x9, x12, x11, #62"),
Q!(" extr " "x10, x13, x12, #62"),
Q!(" ldr " "x14, [sp, #352]"),
Q!(" extr " "x11, x14, x13, #62"),
Q!(" ldp " "x0, x1, [sp, #360]"),
Q!(" mvn " "x0, x0"),
Q!(" adds " "x3, x3, x0"),
Q!(" sbcs " "x4, x4, x1"),
Q!(" ldp " "x0, x1, [sp, #376]"),
Q!(" sbcs " "x5, x5, x0"),
Q!(" and " "x15, x4, x5"),
Q!(" sbcs " "x6, x6, x1"),
Q!(" and " "x15, x15, x6"),
Q!(" ldp " "x0, x1, [sp, #392]"),
Q!(" sbcs " "x7, x7, x0"),
Q!(" and " "x15, x15, x7"),
Q!(" sbcs " "x8, x8, x1"),
Q!(" and " "x15, x15, x8"),
Q!(" ldp " "x0, x1, [sp, #408]"),
Q!(" sbcs " "x9, x9, x0"),
Q!(" and " "x15, x15, x9"),
Q!(" sbcs " "x10, x10, x1"),
Q!(" and " "x15, x15, x10"),
Q!(" ldr " "x0, [sp, #424]"),
Q!(" eor " "x0, x0, #0x1ff"),
Q!(" adc " "x11, x11, x0"),
Q!(" lsr " "x12, x11, #9"),
Q!(" orr " "x11, x11, #0xfffffffffffffe00"),
Q!(" cmp " "xzr, xzr"),
Q!(" adcs " "xzr, x3, x12"),
Q!(" adcs " "xzr, x15, xzr"),
Q!(" adcs " "xzr, x11, xzr"),
Q!(" adcs " "x3, x3, x12"),
Q!(" adcs " "x4, x4, xzr"),
Q!(" adcs " "x5, x5, xzr"),
Q!(" adcs " "x6, x6, xzr"),
Q!(" adcs " "x7, x7, xzr"),
Q!(" adcs " "x8, x8, xzr"),
Q!(" adcs " "x9, x9, xzr"),
Q!(" adcs " "x10, x10, xzr"),
Q!(" adc " "x11, x11, xzr"),
Q!(" and " "x11, x11, #0x1ff"),
Q!(" stp " "x3, x4, [x27]"),
Q!(" stp " "x5, x6, [x27, #16]"),
Q!(" stp " "x7, x8, [x27, #32]"),
Q!(" stp " "x9, x10, [x27, #48]"),
Q!(" str " "x11, [x27, #64]"),
Q!(" ldp " "x6, x7, [sp, #216]"),
Q!(" lsl " "x3, x6, #1"),
Q!(" adds " "x3, x3, x6"),
Q!(" extr " "x4, x7, x6, #63"),
Q!(" adcs " "x4, x4, x7"),
Q!(" ldp " "x8, x9, [sp, #232]"),
Q!(" extr " "x5, x8, x7, #63"),
Q!(" adcs " "x5, x5, x8"),
Q!(" extr " "x6, x9, x8, #63"),
Q!(" adcs " "x6, x6, x9"),
Q!(" ldp " "x10, x11, [sp, #248]"),
Q!(" extr " "x7, x10, x9, #63"),
Q!(" adcs " "x7, x7, x10"),
Q!(" extr " "x8, x11, x10, #63"),
Q!(" adcs " "x8, x8, x11"),
Q!(" ldp " "x12, x13, [sp, #264]"),
Q!(" extr " "x9, x12, x11, #63"),
Q!(" adcs " "x9, x9, x12"),
Q!(" extr " "x10, x13, x12, #63"),
Q!(" adcs " "x10, x10, x13"),
Q!(" ldr " "x14, [sp, #280]"),
Q!(" extr " "x11, x14, x13, #63"),
Q!(" adc " "x11, x11, x14"),
Q!(" ldp " "x20, x21, [sp]"),
Q!(" mvn " "x20, x20"),
Q!(" lsl " "x0, x20, #3"),
Q!(" adds " "x3, x3, x0"),
Q!(" mvn " "x21, x21"),
Q!(" extr " "x0, x21, x20, #61"),
Q!(" adcs " "x4, x4, x0"),
Q!(" ldp " "x22, x23, [sp, #16]"),
Q!(" mvn " "x22, x22"),
Q!(" extr " "x0, x22, x21, #61"),
Q!(" adcs " "x5, x5, x0"),
Q!(" and " "x15, x4, x5"),
Q!(" mvn " "x23, x23"),
Q!(" extr " "x0, x23, x22, #61"),
Q!(" adcs " "x6, x6, x0"),
Q!(" and " "x15, x15, x6"),
Q!(" ldp " "x20, x21, [sp, #32]"),
Q!(" mvn " "x20, x20"),
Q!(" extr " "x0, x20, x23, #61"),
Q!(" adcs " "x7, x7, x0"),
Q!(" and " "x15, x15, x7"),
Q!(" mvn " "x21, x21"),
Q!(" extr " "x0, x21, x20, #61"),
Q!(" adcs " "x8, x8, x0"),
Q!(" and " "x15, x15, x8"),
Q!(" ldp " "x22, x23, [sp, #48]"),
Q!(" mvn " "x22, x22"),
Q!(" extr " "x0, x22, x21, #61"),
Q!(" adcs " "x9, x9, x0"),
Q!(" and " "x15, x15, x9"),
Q!(" mvn " "x23, x23"),
Q!(" extr " "x0, x23, x22, #61"),
Q!(" adcs " "x10, x10, x0"),
Q!(" and " "x15, x15, x10"),
Q!(" ldr " "x0, [sp, #64]"),
Q!(" eor " "x0, x0, #0x1ff"),
Q!(" extr " "x0, x0, x23, #61"),
Q!(" adc " "x11, x11, x0"),
Q!(" lsr " "x12, x11, #9"),
Q!(" orr " "x11, x11, #0xfffffffffffffe00"),
Q!(" cmp " "xzr, xzr"),
Q!(" adcs " "xzr, x3, x12"),
Q!(" adcs " "xzr, x15, xzr"),
Q!(" adcs " "xzr, x11, xzr"),
Q!(" adcs " "x3, x3, x12"),
Q!(" adcs " "x4, x4, xzr"),
Q!(" adcs " "x5, x5, xzr"),
Q!(" adcs " "x6, x6, xzr"),
Q!(" adcs " "x7, x7, xzr"),
Q!(" adcs " "x8, x8, xzr"),
Q!(" adcs " "x9, x9, xzr"),
Q!(" adcs " "x10, x10, xzr"),
Q!(" adc " "x11, x11, xzr"),
Q!(" and " "x11, x11, #0x1ff"),
Q!(" stp " "x3, x4, [x27, #72]"),
Q!(" stp " "x5, x6, [x27, #88]"),
Q!(" stp " "x7, x8, [x27, #104]"),
Q!(" stp " "x9, x10, [x27, #120]"),
Q!(" str " "x11, [x27, #136]"),
Q!(" add " "sp, sp, # (512 + 0)"),
Q!(" ldp " "x29, x30, [sp], #16"),
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"),
Q!(" ret " ),
Q!(Label!("Lp521_jscalarmul_alt_mul_p521", 9) ":"),
Q!(" ldp " "x3, x4, [x1]"),
Q!(" ldp " "x5, x6, [x2]"),
Q!(" mul " "x15, x3, x5"),
Q!(" umulh " "x16, x3, x5"),
Q!(" mul " "x14, x3, x6"),
Q!(" umulh " "x17, x3, x6"),
Q!(" adds " "x16, x16, x14"),
Q!(" ldp " "x7, x8, [x2, #16]"),
Q!(" mul " "x14, x3, x7"),
Q!(" umulh " "x19, x3, x7"),
Q!(" adcs " "x17, x17, x14"),
Q!(" mul " "x14, x3, x8"),
Q!(" umulh " "x20, x3, x8"),
Q!(" adcs " "x19, x19, x14"),
Q!(" ldp " "x9, x10, [x2, #32]"),
Q!(" mul " "x14, x3, x9"),
Q!(" umulh " "x21, x3, x9"),
Q!(" adcs " "x20, x20, x14"),
Q!(" mul " "x14, x3, x10"),
Q!(" umulh " "x22, x3, x10"),
Q!(" adcs " "x21, x21, x14"),
Q!(" ldp " "x11, x12, [x2, #48]"),
Q!(" mul " "x14, x3, x11"),
Q!(" umulh " "x23, x3, x11"),
Q!(" adcs " "x22, x22, x14"),
Q!(" ldr " "x13, [x2, #64]"),
Q!(" mul " "x14, x3, x12"),
Q!(" umulh " "x24, x3, x12"),
Q!(" adcs " "x23, x23, x14"),
Q!(" mul " "x14, x3, x13"),
Q!(" umulh " "x25, x3, x13"),
Q!(" adcs " "x24, x24, x14"),
Q!(" adc " "x25, x25, xzr"),
Q!(" mul " "x14, x4, x5"),
Q!(" adds " "x16, x16, x14"),
Q!(" mul " "x14, x4, x6"),
Q!(" adcs " "x17, x17, x14"),
Q!(" mul " "x14, x4, x7"),
Q!(" adcs " "x19, x19, x14"),
Q!(" mul " "x14, x4, x8"),
Q!(" adcs " "x20, x20, x14"),
Q!(" mul " "x14, x4, x9"),
Q!(" adcs " "x21, x21, x14"),
Q!(" mul " "x14, x4, x10"),
Q!(" adcs " "x22, x22, x14"),
Q!(" mul " "x14, x4, x11"),
Q!(" adcs " "x23, x23, x14"),
Q!(" mul " "x14, x4, x12"),
Q!(" adcs " "x24, x24, x14"),
Q!(" mul " "x14, x4, x13"),
Q!(" adcs " "x25, x25, x14"),
Q!(" cset " "x26, cs"),
Q!(" umulh " "x14, x4, x5"),
Q!(" adds " "x17, x17, x14"),
Q!(" umulh " "x14, x4, x6"),
Q!(" adcs " "x19, x19, x14"),
Q!(" umulh " "x14, x4, x7"),
Q!(" adcs " "x20, x20, x14"),
Q!(" umulh " "x14, x4, x8"),
Q!(" adcs " "x21, x21, x14"),
Q!(" umulh " "x14, x4, x9"),
Q!(" adcs " "x22, x22, x14"),
Q!(" umulh " "x14, x4, x10"),
Q!(" adcs " "x23, x23, x14"),
Q!(" umulh " "x14, x4, x11"),
Q!(" adcs " "x24, x24, x14"),
Q!(" umulh " "x14, x4, x12"),
Q!(" adcs " "x25, x25, x14"),
Q!(" umulh " "x14, x4, x13"),
Q!(" adc " "x26, x26, x14"),
Q!(" stp " "x15, x16, [sp, #432]"),
Q!(" ldp " "x3, x4, [x1, #16]"),
Q!(" mul " "x14, x3, x5"),
Q!(" adds " "x17, x17, x14"),
Q!(" mul " "x14, x3, x6"),
Q!(" adcs " "x19, x19, x14"),
Q!(" mul " "x14, x3, x7"),
Q!(" adcs " "x20, x20, x14"),
Q!(" mul " "x14, x3, x8"),
Q!(" adcs " "x21, x21, x14"),
Q!(" mul " "x14, x3, x9"),
Q!(" adcs " "x22, x22, x14"),
Q!(" mul " "x14, x3, x10"),
Q!(" adcs " "x23, x23, x14"),
Q!(" mul " "x14, x3, x11"),
Q!(" adcs " "x24, x24, x14"),
Q!(" mul " "x14, x3, x12"),
Q!(" adcs " "x25, x25, x14"),
Q!(" mul " "x14, x3, x13"),
Q!(" adcs " "x26, x26, x14"),
Q!(" cset " "x15, cs"),
Q!(" umulh " "x14, x3, x5"),
Q!(" adds " "x19, x19, x14"),
Q!(" umulh " "x14, x3, x6"),
Q!(" adcs " "x20, x20, x14"),
Q!(" umulh " "x14, x3, x7"),
Q!(" adcs " "x21, x21, x14"),
Q!(" umulh " "x14, x3, x8"),
Q!(" adcs " "x22, x22, x14"),
Q!(" umulh " "x14, x3, x9"),
Q!(" adcs " "x23, x23, x14"),
Q!(" umulh " "x14, x3, x10"),
Q!(" adcs " "x24, x24, x14"),
Q!(" umulh " "x14, x3, x11"),
Q!(" adcs " "x25, x25, x14"),
Q!(" umulh " "x14, x3, x12"),
Q!(" adcs " "x26, x26, x14"),
Q!(" umulh " "x14, x3, x13"),
Q!(" adc " "x15, x15, x14"),
Q!(" mul " "x14, x4, x5"),
Q!(" adds " "x19, x19, x14"),
Q!(" mul " "x14, x4, x6"),
Q!(" adcs " "x20, x20, x14"),
Q!(" mul " "x14, x4, x7"),
Q!(" adcs " "x21, x21, x14"),
Q!(" mul " "x14, x4, x8"),
Q!(" adcs " "x22, x22, x14"),
Q!(" mul " "x14, x4, x9"),
Q!(" adcs " "x23, x23, x14"),
Q!(" mul " "x14, x4, x10"),
Q!(" adcs " "x24, x24, x14"),
Q!(" mul " "x14, x4, x11"),
Q!(" adcs " "x25, x25, x14"),
Q!(" mul " "x14, x4, x12"),
Q!(" adcs " "x26, x26, x14"),
Q!(" mul " "x14, x4, x13"),
Q!(" adcs " "x15, x15, x14"),
Q!(" cset " "x16, cs"),
Q!(" umulh " "x14, x4, x5"),
Q!(" adds " "x20, x20, x14"),
Q!(" umulh " "x14, x4, x6"),
Q!(" adcs " "x21, x21, x14"),
Q!(" umulh " "x14, x4, x7"),
Q!(" adcs " "x22, x22, x14"),
Q!(" umulh " "x14, x4, x8"),
Q!(" adcs " "x23, x23, x14"),
Q!(" umulh " "x14, x4, x9"),
Q!(" adcs " "x24, x24, x14"),
Q!(" umulh " "x14, x4, x10"),
Q!(" adcs " "x25, x25, x14"),
Q!(" umulh " "x14, x4, x11"),
Q!(" adcs " "x26, x26, x14"),
Q!(" umulh " "x14, x4, x12"),
Q!(" adcs " "x15, x15, x14"),
Q!(" umulh " "x14, x4, x13"),
Q!(" adc " "x16, x16, x14"),
Q!(" stp " "x17, x19, [sp, #448]"),
Q!(" ldp " "x3, x4, [x1, #32]"),
Q!(" mul " "x14, x3, x5"),
Q!(" adds " "x20, x20, x14"),
Q!(" mul " "x14, x3, x6"),
Q!(" adcs " "x21, x21, x14"),
Q!(" mul " "x14, x3, x7"),
Q!(" adcs " "x22, x22, x14"),
Q!(" mul " "x14, x3, x8"),
Q!(" adcs " "x23, x23, x14"),
Q!(" mul " "x14, x3, x9"),
Q!(" adcs " "x24, x24, x14"),
Q!(" mul " "x14, x3, x10"),
Q!(" adcs " "x25, x25, x14"),
Q!(" mul " "x14, x3, x11"),
Q!(" adcs " "x26, x26, x14"),
Q!(" mul " "x14, x3, x12"),
Q!(" adcs " "x15, x15, x14"),
Q!(" mul " "x14, x3, x13"),
Q!(" adcs " "x16, x16, x14"),
Q!(" cset " "x17, cs"),
Q!(" umulh " "x14, x3, x5"),
Q!(" adds " "x21, x21, x14"),
Q!(" umulh " "x14, x3, x6"),
Q!(" adcs " "x22, x22, x14"),
Q!(" umulh " "x14, x3, x7"),
Q!(" adcs " "x23, x23, x14"),
Q!(" umulh " "x14, x3, x8"),
Q!(" adcs " "x24, x24, x14"),
Q!(" umulh " "x14, x3, x9"),
Q!(" adcs " "x25, x25, x14"),
Q!(" umulh " "x14, x3, x10"),
Q!(" adcs " "x26, x26, x14"),
Q!(" umulh " "x14, x3, x11"),
Q!(" adcs " "x15, x15, x14"),
Q!(" umulh " "x14, x3, x12"),
Q!(" adcs " "x16, x16, x14"),
Q!(" umulh " "x14, x3, x13"),
Q!(" adc " "x17, x17, x14"),
Q!(" mul " "x14, x4, x5"),
Q!(" adds " "x21, x21, x14"),
Q!(" mul " "x14, x4, x6"),
Q!(" adcs " "x22, x22, x14"),
Q!(" mul " "x14, x4, x7"),
Q!(" adcs " "x23, x23, x14"),
Q!(" mul " "x14, x4, x8"),
Q!(" adcs " "x24, x24, x14"),
Q!(" mul " "x14, x4, x9"),
Q!(" adcs " "x25, x25, x14"),
Q!(" mul " "x14, x4, x10"),
Q!(" adcs " "x26, x26, x14"),
Q!(" mul " "x14, x4, x11"),
Q!(" adcs " "x15, x15, x14"),
Q!(" mul " "x14, x4, x12"),
Q!(" adcs " "x16, x16, x14"),
Q!(" mul " "x14, x4, x13"),
Q!(" adcs " "x17, x17, x14"),
Q!(" cset " "x19, cs"),
Q!(" umulh " "x14, x4, x5"),
Q!(" adds " "x22, x22, x14"),
Q!(" umulh " "x14, x4, x6"),
Q!(" adcs " "x23, x23, x14"),
Q!(" umulh " "x14, x4, x7"),
Q!(" adcs " "x24, x24, x14"),
Q!(" umulh " "x14, x4, x8"),
Q!(" adcs " "x25, x25, x14"),
Q!(" umulh " "x14, x4, x9"),
Q!(" adcs " "x26, x26, x14"),
Q!(" umulh " "x14, x4, x10"),
Q!(" adcs " "x15, x15, x14"),
Q!(" umulh " "x14, x4, x11"),
Q!(" adcs " "x16, x16, x14"),
Q!(" umulh " "x14, x4, x12"),
Q!(" adcs " "x17, x17, x14"),
Q!(" umulh " "x14, x4, x13"),
Q!(" adc " "x19, x19, x14"),
Q!(" stp " "x20, x21, [sp, #464]"),
Q!(" ldp " "x3, x4, [x1, #48]"),
Q!(" mul " "x14, x3, x5"),
Q!(" adds " "x22, x22, x14"),
Q!(" mul " "x14, x3, x6"),
Q!(" adcs " "x23, x23, x14"),
Q!(" mul " "x14, x3, x7"),
Q!(" adcs " "x24, x24, x14"),
Q!(" mul " "x14, x3, x8"),
Q!(" adcs " "x25, x25, x14"),
Q!(" mul " "x14, x3, x9"),
Q!(" adcs " "x26, x26, x14"),
Q!(" mul " "x14, x3, x10"),
Q!(" adcs " "x15, x15, x14"),
Q!(" mul " "x14, x3, x11"),
Q!(" adcs " "x16, x16, x14"),
Q!(" mul " "x14, x3, x12"),
Q!(" adcs " "x17, x17, x14"),
Q!(" mul " "x14, x3, x13"),
Q!(" adcs " "x19, x19, x14"),
Q!(" cset " "x20, cs"),
Q!(" umulh " "x14, x3, x5"),
Q!(" adds " "x23, x23, x14"),
Q!(" umulh " "x14, x3, x6"),
Q!(" adcs " "x24, x24, x14"),
Q!(" umulh " "x14, x3, x7"),
Q!(" adcs " "x25, x25, x14"),
Q!(" umulh " "x14, x3, x8"),
Q!(" adcs " "x26, x26, x14"),
Q!(" umulh " "x14, x3, x9"),
Q!(" adcs " "x15, x15, x14"),
Q!(" umulh " "x14, x3, x10"),
Q!(" adcs " "x16, x16, x14"),
Q!(" umulh " "x14, x3, x11"),
Q!(" adcs " "x17, x17, x14"),
Q!(" umulh " "x14, x3, x12"),
Q!(" adcs " "x19, x19, x14"),
Q!(" umulh " "x14, x3, x13"),
Q!(" adc " "x20, x20, x14"),
Q!(" mul " "x14, x4, x5"),
Q!(" adds " "x23, x23, x14"),
Q!(" mul " "x14, x4, x6"),
Q!(" adcs " "x24, x24, x14"),
Q!(" mul " "x14, x4, x7"),
Q!(" adcs " "x25, x25, x14"),
Q!(" mul " "x14, x4, x8"),
Q!(" adcs " "x26, x26, x14"),
Q!(" mul " "x14, x4, x9"),
Q!(" adcs " "x15, x15, x14"),
Q!(" mul " "x14, x4, x10"),
Q!(" adcs " "x16, x16, x14"),
Q!(" mul " "x14, x4, x11"),
Q!(" adcs " "x17, x17, x14"),
Q!(" mul " "x14, x4, x12"),
Q!(" adcs " "x19, x19, x14"),
Q!(" mul " "x14, x4, x13"),
Q!(" adcs " "x20, x20, x14"),
Q!(" cset " "x21, cs"),
Q!(" umulh " "x14, x4, x5"),
Q!(" adds " "x24, x24, x14"),
Q!(" umulh " "x14, x4, x6"),
Q!(" adcs " "x25, x25, x14"),
Q!(" umulh " "x14, x4, x7"),
Q!(" adcs " "x26, x26, x14"),
Q!(" umulh " "x14, x4, x8"),
Q!(" adcs " "x15, x15, x14"),
Q!(" umulh " "x14, x4, x9"),
Q!(" adcs " "x16, x16, x14"),
Q!(" umulh " "x14, x4, x10"),
Q!(" adcs " "x17, x17, x14"),
Q!(" umulh " "x14, x4, x11"),
Q!(" adcs " "x19, x19, x14"),
Q!(" umulh " "x14, x4, x12"),
Q!(" adcs " "x20, x20, x14"),
Q!(" umulh " "x14, x4, x13"),
Q!(" adc " "x21, x21, x14"),
Q!(" stp " "x22, x23, [sp, #480]"),
Q!(" ldr " "x3, [x1, #64]"),
Q!(" mul " "x14, x3, x5"),
Q!(" adds " "x24, x24, x14"),
Q!(" mul " "x14, x3, x6"),
Q!(" adcs " "x25, x25, x14"),
Q!(" mul " "x14, x3, x7"),
Q!(" adcs " "x26, x26, x14"),
Q!(" mul " "x14, x3, x8"),
Q!(" adcs " "x15, x15, x14"),
Q!(" mul " "x14, x3, x9"),
Q!(" adcs " "x16, x16, x14"),
Q!(" mul " "x14, x3, x10"),
Q!(" adcs " "x17, x17, x14"),
Q!(" mul " "x14, x3, x11"),
Q!(" adcs " "x19, x19, x14"),
Q!(" mul " "x14, x3, x12"),
Q!(" adcs " "x20, x20, x14"),
Q!(" mul " "x14, x3, x13"),
Q!(" adc " "x21, x21, x14"),
Q!(" umulh " "x14, x3, x5"),
Q!(" adds " "x25, x25, x14"),
Q!(" umulh " "x14, x3, x6"),
Q!(" adcs " "x26, x26, x14"),
Q!(" umulh " "x14, x3, x7"),
Q!(" adcs " "x15, x15, x14"),
Q!(" umulh " "x14, x3, x8"),
Q!(" adcs " "x16, x16, x14"),
Q!(" umulh " "x14, x3, x9"),
Q!(" adcs " "x17, x17, x14"),
Q!(" umulh " "x14, x3, x10"),
Q!(" adcs " "x19, x19, x14"),
Q!(" umulh " "x14, x3, x11"),
Q!(" adcs " "x20, x20, x14"),
Q!(" umulh " "x14, x3, x12"),
Q!(" adc " "x21, x21, x14"),
Q!(" cmp " "xzr, xzr"),
Q!(" ldp " "x5, x6, [sp, #432]"),
Q!(" extr " "x14, x25, x24, #9"),
Q!(" adcs " "x5, x5, x14"),
Q!(" extr " "x14, x26, x25, #9"),
Q!(" adcs " "x6, x6, x14"),
Q!(" ldp " "x7, x8, [sp, #448]"),
Q!(" extr " "x14, x15, x26, #9"),
Q!(" adcs " "x7, x7, x14"),
Q!(" extr " "x14, x16, x15, #9"),
Q!(" adcs " "x8, x8, x14"),
Q!(" ldp " "x9, x10, [sp, #464]"),
Q!(" extr " "x14, x17, x16, #9"),
Q!(" adcs " "x9, x9, x14"),
Q!(" extr " "x14, x19, x17, #9"),
Q!(" adcs " "x10, x10, x14"),
Q!(" ldp " "x11, x12, [sp, #480]"),
Q!(" extr " "x14, x20, x19, #9"),
Q!(" adcs " "x11, x11, x14"),
Q!(" extr " "x14, x21, x20, #9"),
Q!(" adcs " "x12, x12, x14"),
Q!(" orr " "x13, x24, #0xfffffffffffffe00"),
Q!(" lsr " "x14, x21, #9"),
Q!(" adcs " "x13, x13, x14"),
Q!(" sbcs " "x5, x5, xzr"),
Q!(" sbcs " "x6, x6, xzr"),
Q!(" sbcs " "x7, x7, xzr"),
Q!(" sbcs " "x8, x8, xzr"),
Q!(" sbcs " "x9, x9, xzr"),
Q!(" sbcs " "x10, x10, xzr"),
Q!(" sbcs " "x11, x11, xzr"),
Q!(" sbcs " "x12, x12, xzr"),
Q!(" sbc " "x13, x13, xzr"),
Q!(" and " "x13, x13, #0x1ff"),
Q!(" stp " "x5, x6, [x0]"),
Q!(" stp " "x7, x8, [x0, #16]"),
Q!(" stp " "x9, x10, [x0, #32]"),
Q!(" stp " "x11, x12, [x0, #48]"),
Q!(" str " "x13, [x0, #64]"),
Q!(" ret " ),
Q!(Label!("Lp521_jscalarmul_alt_sqr_p521", 8) ":"),
Q!(" ldp " "x2, x3, [x1]"),
Q!(" mul " "x11, x2, x3"),
Q!(" umulh " "x12, x2, x3"),
Q!(" ldp " "x4, x5, [x1, #16]"),
Q!(" mul " "x10, x2, x4"),
Q!(" umulh " "x13, x2, x4"),
Q!(" adds " "x12, x12, x10"),
Q!(" ldp " "x6, x7, [x1, #32]"),
Q!(" mul " "x10, x2, x5"),
Q!(" umulh " "x14, x2, x5"),
Q!(" adcs " "x13, x13, x10"),
Q!(" ldp " "x8, x9, [x1, #48]"),
Q!(" mul " "x10, x2, x6"),
Q!(" umulh " "x15, x2, x6"),
Q!(" adcs " "x14, x14, x10"),
Q!(" mul " "x10, x2, x7"),
Q!(" umulh " "x16, x2, x7"),
Q!(" adcs " "x15, x15, x10"),
Q!(" mul " "x10, x2, x8"),
Q!(" umulh " "x17, x2, x8"),
Q!(" adcs " "x16, x16, x10"),
Q!(" mul " "x10, x2, x9"),
Q!(" umulh " "x19, x2, x9"),
Q!(" adcs " "x17, x17, x10"),
Q!(" adc " "x19, x19, xzr"),
Q!(" mul " "x10, x3, x4"),
Q!(" adds " "x13, x13, x10"),
Q!(" mul " "x10, x3, x5"),
Q!(" adcs " "x14, x14, x10"),
Q!(" mul " "x10, x3, x6"),
Q!(" adcs " "x15, x15, x10"),
Q!(" mul " "x10, x3, x7"),
Q!(" adcs " "x16, x16, x10"),
Q!(" mul " "x10, x3, x8"),
Q!(" adcs " "x17, x17, x10"),
Q!(" mul " "x10, x3, x9"),
Q!(" adcs " "x19, x19, x10"),
Q!(" cset " "x20, cs"),
Q!(" umulh " "x10, x3, x4"),
Q!(" adds " "x14, x14, x10"),
Q!(" umulh " "x10, x3, x5"),
Q!(" adcs " "x15, x15, x10"),
Q!(" umulh " "x10, x3, x6"),
Q!(" adcs " "x16, x16, x10"),
Q!(" umulh " "x10, x3, x7"),
Q!(" adcs " "x17, x17, x10"),
Q!(" umulh " "x10, x3, x8"),
Q!(" adcs " "x19, x19, x10"),
Q!(" umulh " "x10, x3, x9"),
Q!(" adc " "x20, x20, x10"),
Q!(" mul " "x10, x6, x7"),
Q!(" umulh " "x21, x6, x7"),
Q!(" adds " "x20, x20, x10"),
Q!(" adc " "x21, x21, xzr"),
Q!(" mul " "x10, x4, x5"),
Q!(" adds " "x15, x15, x10"),
Q!(" mul " "x10, x4, x6"),
Q!(" adcs " "x16, x16, x10"),
Q!(" mul " "x10, x4, x7"),
Q!(" adcs " "x17, x17, x10"),
Q!(" mul " "x10, x4, x8"),
Q!(" adcs " "x19, x19, x10"),
Q!(" mul " "x10, x4, x9"),
Q!(" adcs " "x20, x20, x10"),
Q!(" mul " "x10, x6, x8"),
Q!(" adcs " "x21, x21, x10"),
Q!(" cset " "x22, cs"),
Q!(" umulh " "x10, x4, x5"),
Q!(" adds " "x16, x16, x10"),
Q!(" umulh " "x10, x4, x6"),
Q!(" adcs " "x17, x17, x10"),
Q!(" umulh " "x10, x4, x7"),
Q!(" adcs " "x19, x19, x10"),
Q!(" umulh " "x10, x4, x8"),
Q!(" adcs " "x20, x20, x10"),
Q!(" umulh " "x10, x4, x9"),
Q!(" adcs " "x21, x21, x10"),
Q!(" umulh " "x10, x6, x8"),
Q!(" adc " "x22, x22, x10"),
Q!(" mul " "x10, x7, x8"),
Q!(" umulh " "x23, x7, x8"),
Q!(" adds " "x22, x22, x10"),
Q!(" adc " "x23, x23, xzr"),
Q!(" mul " "x10, x5, x6"),
Q!(" adds " "x17, x17, x10"),
Q!(" mul " "x10, x5, x7"),
Q!(" adcs " "x19, x19, x10"),
Q!(" mul " "x10, x5, x8"),
Q!(" adcs " "x20, x20, x10"),
Q!(" mul " "x10, x5, x9"),
Q!(" adcs " "x21, x21, x10"),
Q!(" mul " "x10, x6, x9"),
Q!(" adcs " "x22, x22, x10"),
Q!(" mul " "x10, x7, x9"),
Q!(" adcs " "x23, x23, x10"),
Q!(" cset " "x24, cs"),
Q!(" umulh " "x10, x5, x6"),
Q!(" adds " "x19, x19, x10"),
Q!(" umulh " "x10, x5, x7"),
Q!(" adcs " "x20, x20, x10"),
Q!(" umulh " "x10, x5, x8"),
Q!(" adcs " "x21, x21, x10"),
Q!(" umulh " "x10, x5, x9"),
Q!(" adcs " "x22, x22, x10"),
Q!(" umulh " "x10, x6, x9"),
Q!(" adcs " "x23, x23, x10"),
Q!(" umulh " "x10, x7, x9"),
Q!(" adc " "x24, x24, x10"),
Q!(" mul " "x10, x8, x9"),
Q!(" umulh " "x25, x8, x9"),
Q!(" adds " "x24, x24, x10"),
Q!(" adc " "x25, x25, xzr"),
Q!(" adds " "x11, x11, x11"),
Q!(" adcs " "x12, x12, x12"),
Q!(" adcs " "x13, x13, x13"),
Q!(" adcs " "x14, x14, x14"),
Q!(" adcs " "x15, x15, x15"),
Q!(" adcs " "x16, x16, x16"),
Q!(" adcs " "x17, x17, x17"),
Q!(" adcs " "x19, x19, x19"),
Q!(" adcs " "x20, x20, x20"),
Q!(" adcs " "x21, x21, x21"),
Q!(" adcs " "x22, x22, x22"),
Q!(" adcs " "x23, x23, x23"),
Q!(" adcs " "x24, x24, x24"),
Q!(" adcs " "x25, x25, x25"),
Q!(" cset " "x26, cs"),
Q!(" umulh " "x10, x2, x2"),
Q!(" adds " "x11, x11, x10"),
Q!(" mul " "x10, x3, x3"),
Q!(" adcs " "x12, x12, x10"),
Q!(" umulh " "x10, x3, x3"),
Q!(" adcs " "x13, x13, x10"),
Q!(" mul " "x10, x4, x4"),
Q!(" adcs " "x14, x14, x10"),
Q!(" umulh " "x10, x4, x4"),
Q!(" adcs " "x15, x15, x10"),
Q!(" mul " "x10, x5, x5"),
Q!(" adcs " "x16, x16, x10"),
Q!(" umulh " "x10, x5, x5"),
Q!(" adcs " "x17, x17, x10"),
Q!(" mul " "x10, x6, x6"),
Q!(" adcs " "x19, x19, x10"),
Q!(" umulh " "x10, x6, x6"),
Q!(" adcs " "x20, x20, x10"),
Q!(" mul " "x10, x7, x7"),
Q!(" adcs " "x21, x21, x10"),
Q!(" umulh " "x10, x7, x7"),
Q!(" adcs " "x22, x22, x10"),
Q!(" mul " "x10, x8, x8"),
Q!(" adcs " "x23, x23, x10"),
Q!(" umulh " "x10, x8, x8"),
Q!(" adcs " "x24, x24, x10"),
Q!(" mul " "x10, x9, x9"),
Q!(" adcs " "x25, x25, x10"),
Q!(" umulh " "x10, x9, x9"),
Q!(" adc " "x26, x26, x10"),
Q!(" ldr " "x1, [x1, #64]"),
Q!(" add " "x1, x1, x1"),
Q!(" mul " "x10, x1, x2"),
Q!(" adds " "x19, x19, x10"),
Q!(" umulh " "x10, x1, x2"),
Q!(" adcs " "x20, x20, x10"),
Q!(" mul " "x10, x1, x4"),
Q!(" adcs " "x21, x21, x10"),
Q!(" umulh " "x10, x1, x4"),
Q!(" adcs " "x22, x22, x10"),
Q!(" mul " "x10, x1, x6"),
Q!(" adcs " "x23, x23, x10"),
Q!(" umulh " "x10, x1, x6"),
Q!(" adcs " "x24, x24, x10"),
Q!(" mul " "x10, x1, x8"),
Q!(" adcs " "x25, x25, x10"),
Q!(" umulh " "x10, x1, x8"),
Q!(" adcs " "x26, x26, x10"),
Q!(" lsr " "x4, x1, #1"),
Q!(" mul " "x4, x4, x4"),
Q!(" adc " "x4, x4, xzr"),
Q!(" mul " "x10, x1, x3"),
Q!(" adds " "x20, x20, x10"),
Q!(" umulh " "x10, x1, x3"),
Q!(" adcs " "x21, x21, x10"),
Q!(" mul " "x10, x1, x5"),
Q!(" adcs " "x22, x22, x10"),
Q!(" umulh " "x10, x1, x5"),
Q!(" adcs " "x23, x23, x10"),
Q!(" mul " "x10, x1, x7"),
Q!(" adcs " "x24, x24, x10"),
Q!(" umulh " "x10, x1, x7"),
Q!(" adcs " "x25, x25, x10"),
Q!(" mul " "x10, x1, x9"),
Q!(" adcs " "x26, x26, x10"),
Q!(" umulh " "x10, x1, x9"),
Q!(" adc " "x4, x4, x10"),
Q!(" mul " "x2, x2, x2"),
Q!(" cmp " "xzr, xzr"),
Q!(" extr " "x10, x20, x19, #9"),
Q!(" adcs " "x2, x2, x10"),
Q!(" extr " "x10, x21, x20, #9"),
Q!(" adcs " "x11, x11, x10"),
Q!(" extr " "x10, x22, x21, #9"),
Q!(" adcs " "x12, x12, x10"),
Q!(" extr " "x10, x23, x22, #9"),
Q!(" adcs " "x13, x13, x10"),
Q!(" extr " "x10, x24, x23, #9"),
Q!(" adcs " "x14, x14, x10"),
Q!(" extr " "x10, x25, x24, #9"),
Q!(" adcs " "x15, x15, x10"),
Q!(" extr " "x10, x26, x25, #9"),
Q!(" adcs " "x16, x16, x10"),
Q!(" extr " "x10, x4, x26, #9"),
Q!(" adcs " "x17, x17, x10"),
Q!(" orr " "x19, x19, #0xfffffffffffffe00"),
Q!(" lsr " "x10, x4, #9"),
Q!(" adcs " "x19, x19, x10"),
Q!(" sbcs " "x2, x2, xzr"),
Q!(" sbcs " "x11, x11, xzr"),
Q!(" sbcs " "x12, x12, xzr"),
Q!(" sbcs " "x13, x13, xzr"),
Q!(" sbcs " "x14, x14, xzr"),
Q!(" sbcs " "x15, x15, xzr"),
Q!(" sbcs " "x16, x16, xzr"),
Q!(" sbcs " "x17, x17, xzr"),
Q!(" sbc " "x19, x19, xzr"),
Q!(" and " "x19, x19, #0x1ff"),
Q!(" stp " "x2, x11, [x0]"),
Q!(" stp " "x12, x13, [x0, #16]"),
Q!(" stp " "x14, x15, [x0, #32]"),
Q!(" stp " "x16, x17, [x0, #48]"),
Q!(" str " "x19, [x0, #64]"),
Q!(" ret " ),
Q!(Label!("Lp521_jscalarmul_alt_sub_p521", 12) ":"),
Q!(" ldp " "x5, x6, [x1]"),
Q!(" ldp " "x4, x3, [x2]"),
Q!(" subs " "x5, x5, x4"),
Q!(" sbcs " "x6, x6, x3"),
Q!(" ldp " "x7, x8, [x1, #16]"),
Q!(" ldp " "x4, x3, [x2, #16]"),
Q!(" sbcs " "x7, x7, x4"),
Q!(" sbcs " "x8, x8, x3"),
Q!(" ldp " "x9, x10, [x1, #32]"),
Q!(" ldp " "x4, x3, [x2, #32]"),
Q!(" sbcs " "x9, x9, x4"),
Q!(" sbcs " "x10, x10, x3"),
Q!(" ldp " "x11, x12, [x1, #48]"),
Q!(" ldp " "x4, x3, [x2, #48]"),
Q!(" sbcs " "x11, x11, x4"),
Q!(" sbcs " "x12, x12, x3"),
Q!(" ldr " "x13, [x1, #64]"),
Q!(" ldr " "x4, [x2, #64]"),
Q!(" sbcs " "x13, x13, x4"),
Q!(" sbcs " "x5, x5, xzr"),
Q!(" sbcs " "x6, x6, xzr"),
Q!(" sbcs " "x7, x7, xzr"),
Q!(" sbcs " "x8, x8, xzr"),
Q!(" sbcs " "x9, x9, xzr"),
Q!(" sbcs " "x10, x10, xzr"),
Q!(" sbcs " "x11, x11, xzr"),
Q!(" sbcs " "x12, x12, xzr"),
Q!(" sbcs " "x13, x13, xzr"),
Q!(" and " "x13, x13, #0x1ff"),
Q!(" stp " "x5, x6, [x0]"),
Q!(" stp " "x7, x8, [x0, #16]"),
Q!(" stp " "x9, x10, [x0, #32]"),
Q!(" stp " "x11, x12, [x0, #48]"),
Q!(" str " "x13, [x0, #64]"),
Q!(" ret " ),
Q!(Label!("hoist_finish", 7) ":"),
inout("x0") res.as_mut_ptr() => _,
inout("x1") scalar.as_ptr() => _,
inout("x2") point.as_ptr() => _,
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("x3") _,
out("x30") _,
out("x4") _,
out("x5") _,
out("x6") _,
out("x7") _,
out("x8") _,
out("x9") _,
)
};
}