From 1f16fdc6054de63b799cf0058ca6b907c3675e49 Mon Sep 17 00:00:00 2001 From: John Harrison Date: Mon, 27 Jun 2022 12:45:34 -0500 Subject: [PATCH 1/6] Make trivial tweaks to ARM P-256 functions This saves a few explicit constant load instructions, and so slightly reduces code size, but probably makes little or no efficiency difference. --- arm/p256/bignum_add_p256.S | 9 ++--- arm/p256/bignum_montsqr_p256_alt.S | 10 +++-- arm/p256/bignum_sub_p256.S | 6 +-- arm/proofs/bignum_add_p256.ml | 26 ++++++------- arm/proofs/bignum_montsqr_p256_alt.ml | 53 +++++++++++++-------------- arm/proofs/bignum_sub_p256.ml | 16 ++++---- common/ecencoding.ml | 2 +- common/misc.ml | 27 ++++++++++++++ 8 files changed, 84 insertions(+), 65 deletions(-) diff --git a/arm/p256/bignum_add_p256.S b/arm/p256/bignum_add_p256.S index f6889a771f..9b7ebed9b0 100644 --- a/arm/p256/bignum_add_p256.S +++ b/arm/p256/bignum_add_p256.S @@ -56,8 +56,7 @@ S2N_BN_SYMBOL(bignum_add_p256): // Now compare [d3; d2; d1; d0] with p_256 - mov l, #0xffffffffffffffff - subs xzr, d0, l + subs xzr, d0, #0xffffffffffffffff mov l, #0x00000000ffffffff sbcs xzr, d1, l sbcs xzr, d2, xzr @@ -73,12 +72,10 @@ S2N_BN_SYMBOL(bignum_add_p256): // Now correct by subtracting masked p_256 subs d0, d0, c - mov l, #0x00000000ffffffff - and l, l, c + and l, c, #0x00000000ffffffff sbcs d1, d1, l sbcs d2, d2, xzr - mov l, #0xffffffff00000001 - and l, l, c + and l, c, #0xffffffff00000001 sbc d3, d3, l // Store the result diff --git a/arm/p256/bignum_montsqr_p256_alt.S b/arm/p256/bignum_montsqr_p256_alt.S index f522b70046..5d18d6fe4d 100644 --- a/arm/p256/bignum_montsqr_p256_alt.S +++ b/arm/p256/bignum_montsqr_p256_alt.S @@ -44,9 +44,8 @@ adds d1, d1, d0, lsl #32; \ lsr t1, d0, #32; \ adcs d2, d2, t1; \ - mov t1, #0xFFFFFFFF00000001; \ - mul t0, d0, t1; \ - umulh d4, d0, t1; \ + mul t0, d0, mc; \ + umulh d4, d0, mc; \ adcs d3, d3, t0; \ adc d4, d4, xzr @@ -73,6 +72,10 @@ #define u7 h +// This one is the same as a3, and is used for the Montgomery constant 0xFFFFFFFF00000001 + +#define mc x5 + S2N_BN_SYMBOL(bignum_montsqr_p256_alt): // Load all the elements, set up an initial window [u6;...u1] = [23;03;01] @@ -144,6 +147,7 @@ S2N_BN_SYMBOL(bignum_montsqr_p256_alt): // Squaring complete. Perform 4 Montgomery steps to rotate the lower half + mov mc, #0xFFFFFFFF00000001 montreds(u0,u3,u2,u1,u0, a1,a0) montreds(u1,u0,u3,u2,u1, a1,a0) montreds(u2,u1,u0,u3,u2, a1,a0) diff --git a/arm/p256/bignum_sub_p256.S b/arm/p256/bignum_sub_p256.S index a417f3e723..687be1afee 100644 --- a/arm/p256/bignum_sub_p256.S +++ b/arm/p256/bignum_sub_p256.S @@ -61,12 +61,10 @@ S2N_BN_SYMBOL(bignum_sub_p256): // Now correct by adding masked p_256 adds d0, d0, c - mov l, #0x00000000ffffffff - and l, l, c + and l, c, #0x00000000ffffffff adcs d1, d1, l adcs d2, d2, xzr - mov l, #0xffffffff00000001 - and l, l, c + and l, c, #0xffffffff00000001 adc d3, d3, l // Store the result diff --git a/arm/proofs/bignum_add_p256.ml b/arm/proofs/bignum_add_p256.ml index 394700bb48..23695d6173 100644 --- a/arm/proofs/bignum_add_p256.ml +++ b/arm/proofs/bignum_add_p256.ml @@ -31,8 +31,7 @@ let bignum_add_p256_mc = define_assert_from_elf "bignum_add_p256_mc" "arm/p256/b 0xba0400e7; (* arm_ADCS X7 X7 X4 *) 0xba030108; (* arm_ADCS X8 X8 X3 *) 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) - 0x92800004; (* arm_MOVN X4 (word 0) 0 *) - 0xeb0400bf; (* arm_CMP X5 X4 *) + 0xb10004bf; (* arm_CMN X5 (rvalue (word 1)) *) 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) 0xfa0400df; (* arm_SBCS XZR X6 X4 *) 0xfa1f00ff; (* arm_SBCS XZR X7 XZR *) @@ -41,12 +40,10 @@ let bignum_add_p256_mc = define_assert_from_elf "bignum_add_p256_mc" "arm/p256/b 0xba1f0063; (* arm_ADCS X3 X3 XZR *) 0xda9f03e3; (* arm_CSETM X3 Condition_NE *) 0xeb0300a5; (* arm_SUBS X5 X5 X3 *) - 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) - 0x8a030084; (* arm_AND X4 X4 X3 *) + 0x92407c64; (* arm_AND X4 X3 (rvalue (word 4294967295)) *) 0xfa0400c6; (* arm_SBCS X6 X6 X4 *) 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) - 0xb26083e4; (* arm_MOV X4 (rvalue (word 18446744069414584321)) *) - 0x8a030084; (* arm_AND X4 X4 X3 *) + 0x92608064; (* arm_AND X4 X3 (rvalue (word 18446744069414584321)) *) 0xda040108; (* arm_SBC X8 X8 X4 *) 0xa9001805; (* arm_STP X5 X6 X0 (Immediate_Offset (iword (&0))) *) 0xa9012007; (* arm_STP X7 X8 X0 (Immediate_Offset (iword (&16))) *) @@ -63,14 +60,14 @@ let p_256 = new_definition `p_256 = 11579208921035624876269744694940757353008614 let BIGNUM_ADD_P256_CORRECT = time prove (`!z x y m n pc. - nonoverlapping (word pc,0x74) (z,8 * 4) + nonoverlapping (word pc,0x68) (z,8 * 4) ==> ensures arm (\s. aligned_bytes_loaded s (word pc) bignum_add_p256_mc /\ read PC s = word pc /\ C_ARGUMENTS [z; x; y] s /\ bignum_from_memory (x,4) s = m /\ bignum_from_memory (y,4) s = n) - (\s. read PC s = word (pc + 0x70) /\ + (\s. read PC s = word (pc + 0x64) /\ (m < p_256 /\ n < p_256 ==> bignum_from_memory (z,4) s = (m + n) MOD p_256)) (MAYCHANGE [PC; X3; X4; X5; X6; X7; X8] ,, @@ -99,10 +96,11 @@ let BIGNUM_ADD_P256_CORRECT = time prove DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_ARITH_TAC; ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN - ARM_ACCSTEPS_TAC BIGNUM_ADD_P256_EXEC (10--16) (10--16) THEN + ARM_ACCSTEPS_TAC BIGNUM_ADD_P256_EXEC (10--15) (10--15) THEN + RULE_ASSUM_TAC(REWRITE_RULE[REAL_BITVAL_NOT]) THEN SUBGOAL_THEN - `carry_s16 <=> + `carry_s15 <=> bignum_of_wordlist [sum_s3; sum_s4; sum_s7; sum_s8] < p_256` SUBST_ALL_TAC THENL [MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN EXISTS_TAC `256` THEN @@ -114,7 +112,7 @@ let BIGNUM_ADD_P256_CORRECT = time prove CONV_TAC(BINOP_CONV(BINOP_CONV REAL_POLY_CONV)) THEN BOUNDER_TAC[]; ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN - ARM_STEPS_TAC BIGNUM_ADD_P256_EXEC [17;18] THEN + ARM_STEPS_TAC BIGNUM_ADD_P256_EXEC [16;17] THEN FIRST_X_ASSUM(MP_TAC o SPEC `word_neg(word(bitval(p_256 <= m + n))):int64` o @@ -132,10 +130,10 @@ let BIGNUM_ADD_P256_CORRECT = time prove REWRITE_TAC[p_256] THEN ARITH_TAC; DISCH_TAC] THEN - ARM_ACCSTEPS_TAC BIGNUM_ADD_P256_EXEC (19--28) (19--28) THEN + ARM_ACCSTEPS_TAC BIGNUM_ADD_P256_EXEC (18--25) (18--25) THEN ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN STRIP_TAC THEN CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN - ASM_REWRITE_TAC[] THEN DISCARD_STATE_TAC "s28" THEN + ASM_REWRITE_TAC[] THEN DISCARD_STATE_TAC "s25" THEN ASM_SIMP_TAC[MOD_CASES; ARITH_RULE `m < p /\ n < p ==> m + n < 2 * p`] THEN REWRITE_TAC[GSYM REAL_OF_NUM_EQ] THEN ONCE_REWRITE_TAC[COND_RAND] THEN @@ -167,7 +165,7 @@ let BIGNUM_ADD_P256_CORRECT = time prove let BIGNUM_ADD_P256_SUBROUTINE_CORRECT = time prove (`!z x y m n pc returnaddress. - nonoverlapping (word pc,0x74) (z,8 * 4) + nonoverlapping (word pc,0x68) (z,8 * 4) ==> ensures arm (\s. aligned_bytes_loaded s (word pc) bignum_add_p256_mc /\ read PC s = word pc /\ diff --git a/arm/proofs/bignum_montsqr_p256_alt.ml b/arm/proofs/bignum_montsqr_p256_alt.ml index 8f70bf95f9..b8c0d1be41 100644 --- a/arm/proofs/bignum_montsqr_p256_alt.ml +++ b/arm/proofs/bignum_montsqr_p256_alt.ml @@ -68,36 +68,33 @@ let bignum_montsqr_p256_alt_mc = 0xba0601ce; (* arm_ADCS X14 X14 X6 *) 0x9bc57ca6; (* arm_UMULH X6 X5 X5 *) 0x9a0600e7; (* arm_ADC X7 X7 X6 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) 0xab088129; (* arm_ADDS X9 X9 (Shiftedreg X8 LSL 32) *) 0xd360fd03; (* arm_LSR X3 X8 32 *) 0xba03014a; (* arm_ADCS X10 X10 X3 *) - 0xb26083e3; (* arm_MOV X3 (rvalue (word 18446744069414584321)) *) - 0x9b037d02; (* arm_MUL X2 X8 X3 *) - 0x9bc37d08; (* arm_UMULH X8 X8 X3 *) + 0x9b057d02; (* arm_MUL X2 X8 X5 *) + 0x9bc57d08; (* arm_UMULH X8 X8 X5 *) 0xba02016b; (* arm_ADCS X11 X11 X2 *) 0x9a1f0108; (* arm_ADC X8 X8 XZR *) 0xab09814a; (* arm_ADDS X10 X10 (Shiftedreg X9 LSL 32) *) 0xd360fd23; (* arm_LSR X3 X9 32 *) 0xba03016b; (* arm_ADCS X11 X11 X3 *) - 0xb26083e3; (* arm_MOV X3 (rvalue (word 18446744069414584321)) *) - 0x9b037d22; (* arm_MUL X2 X9 X3 *) - 0x9bc37d29; (* arm_UMULH X9 X9 X3 *) + 0x9b057d22; (* arm_MUL X2 X9 X5 *) + 0x9bc57d29; (* arm_UMULH X9 X9 X5 *) 0xba020108; (* arm_ADCS X8 X8 X2 *) 0x9a1f0129; (* arm_ADC X9 X9 XZR *) 0xab0a816b; (* arm_ADDS X11 X11 (Shiftedreg X10 LSL 32) *) 0xd360fd43; (* arm_LSR X3 X10 32 *) 0xba030108; (* arm_ADCS X8 X8 X3 *) - 0xb26083e3; (* arm_MOV X3 (rvalue (word 18446744069414584321)) *) - 0x9b037d42; (* arm_MUL X2 X10 X3 *) - 0x9bc37d4a; (* arm_UMULH X10 X10 X3 *) + 0x9b057d42; (* arm_MUL X2 X10 X5 *) + 0x9bc57d4a; (* arm_UMULH X10 X10 X5 *) 0xba020129; (* arm_ADCS X9 X9 X2 *) 0x9a1f014a; (* arm_ADC X10 X10 XZR *) 0xab0b8108; (* arm_ADDS X8 X8 (Shiftedreg X11 LSL 32) *) 0xd360fd63; (* arm_LSR X3 X11 32 *) 0xba030129; (* arm_ADCS X9 X9 X3 *) - 0xb26083e3; (* arm_MOV X3 (rvalue (word 18446744069414584321)) *) - 0x9b037d62; (* arm_MUL X2 X11 X3 *) - 0x9bc37d6b; (* arm_UMULH X11 X11 X3 *) + 0x9b057d62; (* arm_MUL X2 X11 X5 *) + 0x9bc57d6b; (* arm_UMULH X11 X11 X5 *) 0xba02014a; (* arm_ADCS X10 X10 X2 *) 0x9a1f016b; (* arm_ADC X11 X11 XZR *) 0xab0c0108; (* arm_ADDS X8 X8 X12 *) @@ -131,13 +128,13 @@ let p_256 = new_definition `p_256 = 11579208921035624876269744694940757353008614 let BIGNUM_MONTSQR_P256_ALT_CORRECT = time prove (`!z x a pc. - nonoverlapping (word pc,0x180) (z,8 * 4) + nonoverlapping (word pc,0x174) (z,8 * 4) ==> ensures arm (\s. aligned_bytes_loaded s (word pc) bignum_montsqr_p256_alt_mc /\ read PC s = word pc /\ C_ARGUMENTS [z; x] s /\ bignum_from_memory (x,4) s = a) - (\s. read PC s = word (pc + 0x17c) /\ + (\s. read PC s = word (pc + 0x170) /\ (a EXP 2 <= 2 EXP 256 * p_256 ==> bignum_from_memory (z,4) s = (inverse_mod p_256 (2 EXP 256) * a EXP 2) MOD p_256)) @@ -152,17 +149,17 @@ let BIGNUM_MONTSQR_P256_ALT_CORRECT = time prove (*** Globalize the a EXP 2 <= 2 EXP 256 * p_256 assumption ***) ASM_CASES_TAC `a EXP 2 <= 2 EXP 256 * p_256` THENL - [ASM_REWRITE_TAC[]; ARM_SIM_TAC BIGNUM_MONTSQR_P256_ALT_EXEC (1--95)] THEN + [ASM_REWRITE_TAC[]; ARM_SIM_TAC BIGNUM_MONTSQR_P256_ALT_EXEC (1--92)] THEN ENSURES_INIT_TAC "s0" THEN BIGNUM_DIGITIZE_TAC "x_" `bignum_from_memory (x,4) s0` THEN (*** Simulate the core pre-reduced result accumulation ***) - ARM_ACCSTEPS_TAC BIGNUM_MONTSQR_P256_ALT_EXEC (1--82) (1--82) THEN + ARM_ACCSTEPS_TAC BIGNUM_MONTSQR_P256_ALT_EXEC (1--79) (1--79) THEN RULE_ASSUM_TAC(REWRITE_RULE[COND_SWAP; GSYM WORD_BITVAL]) THEN ABBREV_TAC `t = bignum_of_wordlist - [sum_s78; sum_s79; sum_s80; sum_s81; word(bitval carry_s81)]` THEN + [sum_s75; sum_s76; sum_s77; sum_s78; word(bitval carry_s78)]` THEN SUBGOAL_THEN `t < 2 * p_256 /\ (2 EXP 256 * t == a EXP 2) (mod p_256)` STRIP_ASSUME_TAC THENL @@ -184,7 +181,7 @@ let BIGNUM_MONTSQR_P256_ALT_CORRECT = time prove (*** Final correction stage ***) - ARM_ACCSTEPS_TAC BIGNUM_MONTSQR_P256_ALT_EXEC (85--89) (83--95) THEN + ARM_ACCSTEPS_TAC BIGNUM_MONTSQR_P256_ALT_EXEC (82--86) (80--92) THEN RULE_ASSUM_TAC(REWRITE_RULE [GSYM WORD_BITVAL; COND_SWAP; REAL_BITVAL_NOT]) THEN ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN @@ -208,7 +205,7 @@ let BIGNUM_MONTSQR_P256_ALT_CORRECT = time prove ASM_SIMP_TAC[MOD_CASES] THEN GEN_REWRITE_TAC LAND_CONV [COND_RAND] THEN SIMP_TAC[REAL_OF_NUM_SUB; GSYM NOT_LT]] THEN - SUBGOAL_THEN `carry_s89 <=> t < p_256` SUBST_ALL_TAC THENL + SUBGOAL_THEN `carry_s86 <=> t < p_256` SUBST_ALL_TAC THENL [MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN EXISTS_TAC `320` THEN EXPAND_TAC "t" THEN REWRITE_TAC[p_256; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN @@ -224,7 +221,7 @@ let BIGNUM_MONTSQR_P256_ALT_CORRECT = time prove let BIGNUM_MONTSQR_P256_ALT_SUBROUTINE_CORRECT = time prove (`!z x a pc returnaddress. - nonoverlapping (word pc,0x180) (z,8 * 4) + nonoverlapping (word pc,0x174) (z,8 * 4) ==> ensures arm (\s. aligned_bytes_loaded s (word pc) bignum_montsqr_p256_alt_mc /\ read PC s = word pc /\ @@ -250,13 +247,13 @@ let BIGNUM_MONTSQR_P256_ALT_SUBROUTINE_CORRECT = time prove let BIGNUM_AMONTSQR_P256_ALT_CORRECT = time prove (`!z x a pc. - nonoverlapping (word pc,0x180) (z,8 * 4) + nonoverlapping (word pc,0x174) (z,8 * 4) ==> ensures arm (\s. aligned_bytes_loaded s (word pc) bignum_montsqr_p256_alt_mc /\ read PC s = word pc /\ C_ARGUMENTS [z; x] s /\ bignum_from_memory (x,4) s = a) - (\s. read PC s = word (pc + 0x17c) /\ + (\s. read PC s = word (pc + 0x170) /\ (bignum_from_memory (z,4) s == inverse_mod p_256 (2 EXP 256) * a EXP 2) (mod p_256)) (MAYCHANGE [PC; X2; X3; X4; X5; X6; X7; X8; X9; X10; X11; X12; @@ -271,12 +268,12 @@ let BIGNUM_AMONTSQR_P256_ALT_CORRECT = time prove (*** Simulate the core pre-reduced result accumulation ***) - ARM_ACCSTEPS_TAC BIGNUM_MONTSQR_P256_ALT_EXEC (1--82) (1--82) THEN + ARM_ACCSTEPS_TAC BIGNUM_MONTSQR_P256_ALT_EXEC (1--79) (1--79) THEN RULE_ASSUM_TAC(REWRITE_RULE[COND_SWAP; GSYM WORD_BITVAL]) THEN ABBREV_TAC `t = bignum_of_wordlist - [sum_s78; sum_s79; sum_s80; sum_s81; - word(bitval carry_s81)]` THEN + [sum_s75; sum_s76; sum_s77; sum_s78; + word(bitval carry_s78)]` THEN SUBGOAL_THEN `t < 2 EXP 256 + p_256 /\ (2 EXP 256 * t == a EXP 2) (mod p_256)` STRIP_ASSUME_TAC THENL @@ -299,7 +296,7 @@ let BIGNUM_AMONTSQR_P256_ALT_CORRECT = time prove (*** Final correction stage ***) - ARM_ACCSTEPS_TAC BIGNUM_MONTSQR_P256_ALT_EXEC (85--89) (83--95) THEN + ARM_ACCSTEPS_TAC BIGNUM_MONTSQR_P256_ALT_EXEC (82--86) (80--92) THEN RULE_ASSUM_TAC(REWRITE_RULE [GSYM WORD_BITVAL; COND_SWAP; REAL_BITVAL_NOT]) THEN ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN @@ -311,7 +308,7 @@ let BIGNUM_AMONTSQR_P256_ALT_CORRECT = time prove REWRITE_TAC[INVERSE_MOD_RMUL_EQ; COPRIME_REXP; COPRIME_2] THEN CONJ_TAC THENL [REWRITE_TAC[p_256] THEN CONV_TAC NUM_REDUCE_CONV; ALL_TAC] THEN - SUBGOAL_THEN `carry_s89 <=> t < p_256` SUBST_ALL_TAC THENL + SUBGOAL_THEN `carry_s86 <=> t < p_256` SUBST_ALL_TAC THENL [MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN EXISTS_TAC `320` THEN EXPAND_TAC "t" THEN REWRITE_TAC[p_256; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN @@ -343,7 +340,7 @@ let BIGNUM_AMONTSQR_P256_ALT_CORRECT = time prove let BIGNUM_AMONTSQR_P256_ALT_SUBROUTINE_CORRECT = time prove (`!z x a pc returnaddress. - nonoverlapping (word pc,0x180) (z,8 * 4) + nonoverlapping (word pc,0x174) (z,8 * 4) ==> ensures arm (\s. aligned_bytes_loaded s (word pc) bignum_montsqr_p256_alt_mc /\ read PC s = word pc /\ diff --git a/arm/proofs/bignum_sub_p256.ml b/arm/proofs/bignum_sub_p256.ml index a8d5f6feae..97f00db381 100644 --- a/arm/proofs/bignum_sub_p256.ml +++ b/arm/proofs/bignum_sub_p256.ml @@ -32,12 +32,10 @@ let bignum_sub_p256_mc = define_assert_from_elf "bignum_sub_p256_mc" "arm/p256/b 0xfa030108; (* arm_SBCS X8 X8 X3 *) 0xda9f23e3; (* arm_CSETM X3 Condition_CC *) 0xab0300a5; (* arm_ADDS X5 X5 X3 *) - 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) - 0x8a030084; (* arm_AND X4 X4 X3 *) + 0x92407c64; (* arm_AND X4 X3 (rvalue (word 4294967295)) *) 0xba0400c6; (* arm_ADCS X6 X6 X4 *) 0xba1f00e7; (* arm_ADCS X7 X7 XZR *) - 0xb26083e4; (* arm_MOV X4 (rvalue (word 18446744069414584321)) *) - 0x8a030084; (* arm_AND X4 X4 X3 *) + 0x92608064; (* arm_AND X4 X3 (rvalue (word 18446744069414584321)) *) 0x9a040108; (* arm_ADC X8 X8 X4 *) 0xa9001805; (* arm_STP X5 X6 X0 (Immediate_Offset (iword (&0))) *) 0xa9012007; (* arm_STP X7 X8 X0 (Immediate_Offset (iword (&16))) *) @@ -54,14 +52,14 @@ let p_256 = new_definition `p_256 = 11579208921035624876269744694940757353008614 let BIGNUM_SUB_P256_CORRECT = time prove (`!z x y m n pc. - nonoverlapping (word pc,0x50) (z,8 * 4) + nonoverlapping (word pc,0x48) (z,8 * 4) ==> ensures arm (\s. aligned_bytes_loaded s (word pc) bignum_sub_p256_mc /\ read PC s = word pc /\ C_ARGUMENTS [z; x; y] s /\ bignum_from_memory (x,4) s = m /\ bignum_from_memory (y,4) s = n) - (\s. read PC s = word (pc + 0x4c) /\ + (\s. read PC s = word (pc + 0x44) /\ (m < p_256 /\ n < p_256 ==> &(bignum_from_memory (z,4) s) = (&m - &n) rem &p_256)) (MAYCHANGE [PC; X3; X4; X5; X6; X7; X8] ,, @@ -88,11 +86,11 @@ let BIGNUM_SUB_P256_CORRECT = time prove ARM_STEPS_TAC BIGNUM_SUB_P256_EXEC [9] THEN RULE_ASSUM_TAC(REWRITE_RULE[WORD_UNMASK_64; NOT_LE]) THEN - ARM_ACCSTEPS_TAC BIGNUM_SUB_P256_EXEC (10--19) (10--19) THEN + ARM_ACCSTEPS_TAC BIGNUM_SUB_P256_EXEC (10--17) (10--17) THEN ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN STRIP_TAC THEN CONV_TAC(LAND_CONV(RAND_CONV BIGNUM_EXPAND_CONV)) THEN - ASM_REWRITE_TAC[] THEN DISCARD_STATE_TAC "s19" THEN + ASM_REWRITE_TAC[] THEN DISCARD_STATE_TAC "s17" THEN CONV_TAC SYM_CONV THEN MATCH_MP_TAC INT_REM_UNIQ THEN EXISTS_TAC `--(&(bitval(m < n))):int` THEN REWRITE_TAC[INT_ABS_NUM] THEN @@ -133,7 +131,7 @@ let BIGNUM_SUB_P256_CORRECT = time prove let BIGNUM_SUB_P256_SUBROUTINE_CORRECT = time prove (`!z x y m n pc returnaddress. - nonoverlapping (word pc,0x50) (z,8 * 4) + nonoverlapping (word pc,0x48) (z,8 * 4) ==> ensures arm (\s. aligned_bytes_loaded s (word pc) bignum_sub_p256_mc /\ read PC s = word pc /\ diff --git a/common/ecencoding.ml b/common/ecencoding.ml index 6d746cca1e..5d4ab1417a 100644 --- a/common/ecencoding.ml +++ b/common/ecencoding.ml @@ -44,7 +44,7 @@ let reduced_quadruple = new_definition m < p /\ n < p /\ r < p /\ s < p`;; simulation_precanon_thms := - union [bignum_quadruple_from_memory; bignum_pair_from_memory] + union [bignum_quadruple_from_memory; bignum_triple_from_memory; bignum_pair_from_memory] (!simulation_precanon_thms);; (* ------------------------------------------------------------------------- *) diff --git a/common/misc.ml b/common/misc.ml index f67bec8ecf..58e5d15b56 100644 --- a/common/misc.ml +++ b/common/misc.ml @@ -324,6 +324,33 @@ let MOD_UNIQ_BALANCED_REAL = prove REWRITE_TAC[bitval] THEN COND_CASES_TAC THEN ASM_REWRITE_TAC[] THEN ASM_REAL_ARITH_TAC);; +let INT_REM_UNIQ_BALANCED = prove + (`!n p z q. + q * p <= n + p /\ n < q * p + p /\ + q * p + z = &(bitval(n < q * p)) * p + n + ==> n rem p = z`, + REPEAT GEN_TAC THEN REWRITE_TAC[bitval] THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[ADD_CLAUSES; MULT_CLAUSES] THEN + REPEAT STRIP_TAC THEN MATCH_MP_TAC INT_REM_UNIQ THENL + [EXISTS_TAC `q - &1:int`; EXISTS_TAC `q:int`] THEN + ASM_INT_ARITH_TAC);; + +let INT_REM_UNIQ_BALANCED_MOD = prove + (`!n p z q k. + &0 <= p /\ p < &2 pow k /\ + &0 <= z /\ z < &2 pow k /\ + q * p <= n + p /\ n < q * p + p /\ + (q * p + z == &(bitval(n < q * p)) * p + n) (mod (&2 pow k)) + ==> n rem p = z`, + REPEAT STRIP_TAC THEN MATCH_MP_TAC INT_REM_UNIQ_BALANCED THEN + EXISTS_TAC `q:int` THEN ASM_REWRITE_TAC[] THEN + ONCE_REWRITE_TAC[INT_ARITH `a + b:int = c <=> b = c - a`] THEN + MATCH_MP_TAC INT_CONG_IMP_EQ THEN EXISTS_TAC `(&2:int) pow k` THEN + ASM_REWRITE_TAC[INTEGER_RULE + `(b:int == c - a) (mod p) <=> (a + b == c) (mod p)`] THEN + REWRITE_TAC[bitval] THEN COND_CASES_TAC THEN ASM_REWRITE_TAC[] THEN + ASM_INT_ARITH_TAC);; + let VAL_WORD_SUBWORD_JOIN_64 = prove (`!(h:int64) (l:int64) k. k <= 64 From 270ad9778c1f7588b338e6fad742d79103da5d69 Mon Sep 17 00:00:00 2001 From: John Harrison Date: Tue, 28 Jun 2022 21:23:53 -0500 Subject: [PATCH 2/6] Add basic secp256k1 point operations A point doubling function, point addition function, and point mixed addition function for the secp256k1 curve, all using Jacobian coordinates with input nondegeneracy assumed. The addition and mixed addition functions offer only marginal efficiency gains over just calling a sequence of basic field operations, but the doubling has some beneficial mathematically equivalent short-cutting of the intermediate modular reductions. --- arm/Makefile | 5 +- arm/proofs/secp256k1_jadd.ml | 2253 ++++++++++++++++++ arm/proofs/secp256k1_jdouble.ml | 2110 ++++++++++++++++ arm/proofs/secp256k1_jmixadd.ml | 1771 ++++++++++++++ arm/secp256k1/Makefile | 5 +- arm/secp256k1/secp256k1_jadd.S | 351 +++ arm/secp256k1/secp256k1_jdouble.S | 672 ++++++ arm/secp256k1/secp256k1_jmixadd.S | 343 +++ benchmarks/benchmark.c | 7 + include/s2n-bignum-c89.h | 12 + include/s2n-bignum.h | 12 + tests/test.c | 304 +++ x86/Makefile | 5 +- x86/proofs/secp256k1_jadd.ml | 3167 +++++++++++++++++++++++++ x86/proofs/secp256k1_jdouble.ml | 2468 +++++++++++++++++++ x86/proofs/secp256k1_jmixadd.ml | 2425 +++++++++++++++++++ x86/secp256k1/Makefile | 5 +- x86/secp256k1/secp256k1_jadd.S | 353 +++ x86/secp256k1/secp256k1_jdouble.S | 630 +++++ x86/secp256k1/secp256k1_jmixadd.S | 346 +++ x86/yesbmi_functions | 3 + x86_att/Makefile | 5 +- x86_att/secp256k1/secp256k1_jadd.S | 353 +++ x86_att/secp256k1/secp256k1_jdouble.S | 630 +++++ x86_att/secp256k1/secp256k1_jmixadd.S | 346 +++ 25 files changed, 18576 insertions(+), 5 deletions(-) create mode 100644 arm/proofs/secp256k1_jadd.ml create mode 100644 arm/proofs/secp256k1_jdouble.ml create mode 100644 arm/proofs/secp256k1_jmixadd.ml create mode 100644 arm/secp256k1/secp256k1_jadd.S create mode 100644 arm/secp256k1/secp256k1_jdouble.S create mode 100644 arm/secp256k1/secp256k1_jmixadd.S create mode 100644 x86/proofs/secp256k1_jadd.ml create mode 100644 x86/proofs/secp256k1_jdouble.ml create mode 100644 x86/proofs/secp256k1_jmixadd.ml create mode 100644 x86/secp256k1/secp256k1_jadd.S create mode 100644 x86/secp256k1/secp256k1_jdouble.S create mode 100644 x86/secp256k1/secp256k1_jmixadd.S create mode 100644 x86_att/secp256k1/secp256k1_jadd.S create mode 100644 x86_att/secp256k1/secp256k1_jdouble.S create mode 100644 x86_att/secp256k1/secp256k1_jmixadd.S diff --git a/arm/Makefile b/arm/Makefile index 7e9cc98ad4..4431189e4f 100644 --- a/arm/Makefile +++ b/arm/Makefile @@ -257,7 +257,10 @@ OBJ = curve25519/bignum_add_p25519.o \ secp256k1/bignum_sqr_p256k1_alt.o \ secp256k1/bignum_sub_p256k1.o \ secp256k1/bignum_tomont_p256k1.o \ - secp256k1/bignum_triple_p256k1.o + secp256k1/bignum_triple_p256k1.o \ + secp256k1/secp256k1_jadd.o \ + secp256k1/secp256k1_jdouble.o \ + secp256k1/secp256k1_jmixadd.o %.o : %.S ; cat $< | $(PREPROCESS) | $(SPLIT) | $(ASSEMBLE) -o $@ - diff --git a/arm/proofs/secp256k1_jadd.ml b/arm/proofs/secp256k1_jadd.ml new file mode 100644 index 0000000000..6ff8dda6fa --- /dev/null +++ b/arm/proofs/secp256k1_jadd.ml @@ -0,0 +1,2253 @@ +(* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + *) + +(* ========================================================================= *) +(* Point addition in Jacobian coordinates for SECG secp256k1 curve. *) +(* ========================================================================= *) + +needs "arm/proofs/base.ml";; +needs "common/ecencoding.ml";; +needs "EC/jacobian.ml";; +needs "EC/secp256k1.ml";; + +prioritize_int();; +prioritize_real();; +prioritize_num();; + +(**** print_literal_from_elf "arm/secp256k1/secp256k1_jadd.o";; + ****) + +let secp256k1_jadd_mc = define_assert_from_elf + "secp256k1_jadd_mc" "arm/secp256k1/secp256k1_jadd.o" +[ + 0xd10383ff; (* arm_SUB SP SP (rvalue (word 224)) *) + 0xaa0003ef; (* arm_MOV X15 X0 *) + 0xaa0103f0; (* arm_MOV X16 X1 *) + 0xaa0203f1; (* arm_MOV X17 X2 *) + 0xa9440e02; (* arm_LDP X2 X3 X16 (Immediate_Offset (iword (&64))) *) + 0x9b037c49; (* arm_MUL X9 X2 X3 *) + 0x9bc37c4a; (* arm_UMULH X10 X2 X3 *) + 0xa9451604; (* arm_LDP X4 X5 X16 (Immediate_Offset (iword (&80))) *) + 0x9b057c4b; (* arm_MUL X11 X2 X5 *) + 0x9bc57c4c; (* arm_UMULH X12 X2 X5 *) + 0x9b047c47; (* arm_MUL X7 X2 X4 *) + 0x9bc47c46; (* arm_UMULH X6 X2 X4 *) + 0xab07014a; (* arm_ADDS X10 X10 X7 *) + 0xba06016b; (* arm_ADCS X11 X11 X6 *) + 0x9b047c67; (* arm_MUL X7 X3 X4 *) + 0x9bc47c66; (* arm_UMULH X6 X3 X4 *) + 0x9a1f00c6; (* arm_ADC X6 X6 XZR *) + 0xab07016b; (* arm_ADDS X11 X11 X7 *) + 0x9b057c8d; (* arm_MUL X13 X4 X5 *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xba06018c; (* arm_ADCS X12 X12 X6 *) + 0x9b057c67; (* arm_MUL X7 X3 X5 *) + 0x9bc57c66; (* arm_UMULH X6 X3 X5 *) + 0x9a1f00c6; (* arm_ADC X6 X6 XZR *) + 0xab07018c; (* arm_ADDS X12 X12 X7 *) + 0xba0601ad; (* arm_ADCS X13 X13 X6 *) + 0x9a1f01ce; (* arm_ADC X14 X14 XZR *) + 0xab090129; (* arm_ADDS X9 X9 X9 *) + 0xba0a014a; (* arm_ADCS X10 X10 X10 *) + 0xba0b016b; (* arm_ADCS X11 X11 X11 *) + 0xba0c018c; (* arm_ADCS X12 X12 X12 *) + 0xba0d01ad; (* arm_ADCS X13 X13 X13 *) + 0xba0e01ce; (* arm_ADCS X14 X14 X14 *) + 0x9a9f37e6; (* arm_CSET X6 Condition_CS *) + 0x9bc27c47; (* arm_UMULH X7 X2 X2 *) + 0x9b027c48; (* arm_MUL X8 X2 X2 *) + 0xab070129; (* arm_ADDS X9 X9 X7 *) + 0x9b037c67; (* arm_MUL X7 X3 X3 *) + 0xba07014a; (* arm_ADCS X10 X10 X7 *) + 0x9bc37c67; (* arm_UMULH X7 X3 X3 *) + 0xba07016b; (* arm_ADCS X11 X11 X7 *) + 0x9b047c87; (* arm_MUL X7 X4 X4 *) + 0xba07018c; (* arm_ADCS X12 X12 X7 *) + 0x9bc47c87; (* arm_UMULH X7 X4 X4 *) + 0xba0701ad; (* arm_ADCS X13 X13 X7 *) + 0x9b057ca7; (* arm_MUL X7 X5 X5 *) + 0xba0701ce; (* arm_ADCS X14 X14 X7 *) + 0x9bc57ca7; (* arm_UMULH X7 X5 X5 *) + 0x9a0700c6; (* arm_ADC X6 X6 X7 *) + 0xd2807a23; (* arm_MOV X3 (rvalue (word 977)) *) + 0xb2600063; (* arm_ORR X3 X3 (rvalue (word 4294967296)) *) + 0x9b0c7c67; (* arm_MUL X7 X3 X12 *) + 0x9bcc7c64; (* arm_UMULH X4 X3 X12 *) + 0xab070108; (* arm_ADDS X8 X8 X7 *) + 0x9b0d7c67; (* arm_MUL X7 X3 X13 *) + 0x9bcd7c6d; (* arm_UMULH X13 X3 X13 *) + 0xba070129; (* arm_ADCS X9 X9 X7 *) + 0x9b0e7c67; (* arm_MUL X7 X3 X14 *) + 0x9bce7c6e; (* arm_UMULH X14 X3 X14 *) + 0xba07014a; (* arm_ADCS X10 X10 X7 *) + 0x9b067c67; (* arm_MUL X7 X3 X6 *) + 0x9bc67c66; (* arm_UMULH X6 X3 X6 *) + 0xba07016b; (* arm_ADCS X11 X11 X7 *) + 0x9a9f37ec; (* arm_CSET X12 Condition_CS *) + 0xab040129; (* arm_ADDS X9 X9 X4 *) + 0xba0d014a; (* arm_ADCS X10 X10 X13 *) + 0xba0e016b; (* arm_ADCS X11 X11 X14 *) + 0x9a06018c; (* arm_ADC X12 X12 X6 *) + 0x91000582; (* arm_ADD X2 X12 (rvalue (word 1)) *) + 0x9b027c67; (* arm_MUL X7 X3 X2 *) + 0x9bc27c66; (* arm_UMULH X6 X3 X2 *) + 0xab070108; (* arm_ADDS X8 X8 X7 *) + 0xba060129; (* arm_ADCS X9 X9 X6 *) + 0xba1f014a; (* arm_ADCS X10 X10 XZR *) + 0xba1f016b; (* arm_ADCS X11 X11 XZR *) + 0x9a9f3063; (* arm_CSEL X3 X3 XZR Condition_CC *) + 0xeb030108; (* arm_SUBS X8 X8 X3 *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xda1f016b; (* arm_SBC X11 X11 XZR *) + 0xa90027e8; (* arm_STP X8 X9 SP (Immediate_Offset (iword (&0))) *) + 0xa9012fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&16))) *) + 0xa9440e22; (* arm_LDP X2 X3 X17 (Immediate_Offset (iword (&64))) *) + 0x9b037c49; (* arm_MUL X9 X2 X3 *) + 0x9bc37c4a; (* arm_UMULH X10 X2 X3 *) + 0xa9451624; (* arm_LDP X4 X5 X17 (Immediate_Offset (iword (&80))) *) + 0x9b057c4b; (* arm_MUL X11 X2 X5 *) + 0x9bc57c4c; (* arm_UMULH X12 X2 X5 *) + 0x9b047c47; (* arm_MUL X7 X2 X4 *) + 0x9bc47c46; (* arm_UMULH X6 X2 X4 *) + 0xab07014a; (* arm_ADDS X10 X10 X7 *) + 0xba06016b; (* arm_ADCS X11 X11 X6 *) + 0x9b047c67; (* arm_MUL X7 X3 X4 *) + 0x9bc47c66; (* arm_UMULH X6 X3 X4 *) + 0x9a1f00c6; (* arm_ADC X6 X6 XZR *) + 0xab07016b; (* arm_ADDS X11 X11 X7 *) + 0x9b057c8d; (* arm_MUL X13 X4 X5 *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xba06018c; (* arm_ADCS X12 X12 X6 *) + 0x9b057c67; (* arm_MUL X7 X3 X5 *) + 0x9bc57c66; (* arm_UMULH X6 X3 X5 *) + 0x9a1f00c6; (* arm_ADC X6 X6 XZR *) + 0xab07018c; (* arm_ADDS X12 X12 X7 *) + 0xba0601ad; (* arm_ADCS X13 X13 X6 *) + 0x9a1f01ce; (* arm_ADC X14 X14 XZR *) + 0xab090129; (* arm_ADDS X9 X9 X9 *) + 0xba0a014a; (* arm_ADCS X10 X10 X10 *) + 0xba0b016b; (* arm_ADCS X11 X11 X11 *) + 0xba0c018c; (* arm_ADCS X12 X12 X12 *) + 0xba0d01ad; (* arm_ADCS X13 X13 X13 *) + 0xba0e01ce; (* arm_ADCS X14 X14 X14 *) + 0x9a9f37e6; (* arm_CSET X6 Condition_CS *) + 0x9bc27c47; (* arm_UMULH X7 X2 X2 *) + 0x9b027c48; (* arm_MUL X8 X2 X2 *) + 0xab070129; (* arm_ADDS X9 X9 X7 *) + 0x9b037c67; (* arm_MUL X7 X3 X3 *) + 0xba07014a; (* arm_ADCS X10 X10 X7 *) + 0x9bc37c67; (* arm_UMULH X7 X3 X3 *) + 0xba07016b; (* arm_ADCS X11 X11 X7 *) + 0x9b047c87; (* arm_MUL X7 X4 X4 *) + 0xba07018c; (* arm_ADCS X12 X12 X7 *) + 0x9bc47c87; (* arm_UMULH X7 X4 X4 *) + 0xba0701ad; (* arm_ADCS X13 X13 X7 *) + 0x9b057ca7; (* arm_MUL X7 X5 X5 *) + 0xba0701ce; (* arm_ADCS X14 X14 X7 *) + 0x9bc57ca7; (* arm_UMULH X7 X5 X5 *) + 0x9a0700c6; (* arm_ADC X6 X6 X7 *) + 0xd2807a23; (* arm_MOV X3 (rvalue (word 977)) *) + 0xb2600063; (* arm_ORR X3 X3 (rvalue (word 4294967296)) *) + 0x9b0c7c67; (* arm_MUL X7 X3 X12 *) + 0x9bcc7c64; (* arm_UMULH X4 X3 X12 *) + 0xab070108; (* arm_ADDS X8 X8 X7 *) + 0x9b0d7c67; (* arm_MUL X7 X3 X13 *) + 0x9bcd7c6d; (* arm_UMULH X13 X3 X13 *) + 0xba070129; (* arm_ADCS X9 X9 X7 *) + 0x9b0e7c67; (* arm_MUL X7 X3 X14 *) + 0x9bce7c6e; (* arm_UMULH X14 X3 X14 *) + 0xba07014a; (* arm_ADCS X10 X10 X7 *) + 0x9b067c67; (* arm_MUL X7 X3 X6 *) + 0x9bc67c66; (* arm_UMULH X6 X3 X6 *) + 0xba07016b; (* arm_ADCS X11 X11 X7 *) + 0x9a9f37ec; (* arm_CSET X12 Condition_CS *) + 0xab040129; (* arm_ADDS X9 X9 X4 *) + 0xba0d014a; (* arm_ADCS X10 X10 X13 *) + 0xba0e016b; (* arm_ADCS X11 X11 X14 *) + 0x9a06018c; (* arm_ADC X12 X12 X6 *) + 0x91000582; (* arm_ADD X2 X12 (rvalue (word 1)) *) + 0x9b027c67; (* arm_MUL X7 X3 X2 *) + 0x9bc27c66; (* arm_UMULH X6 X3 X2 *) + 0xab070108; (* arm_ADDS X8 X8 X7 *) + 0xba060129; (* arm_ADCS X9 X9 X6 *) + 0xba1f014a; (* arm_ADCS X10 X10 XZR *) + 0xba1f016b; (* arm_ADCS X11 X11 XZR *) + 0x9a9f3063; (* arm_CSEL X3 X3 XZR Condition_CC *) + 0xeb030108; (* arm_SUBS X8 X8 X3 *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xda1f016b; (* arm_SBC X11 X11 XZR *) + 0xa90a27e8; (* arm_STP X8 X9 SP (Immediate_Offset (iword (&160))) *) + 0xa90b2fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&176))) *) + 0xa9441223; (* arm_LDP X3 X4 X17 (Immediate_Offset (iword (&64))) *) + 0xa9422207; (* arm_LDP X7 X8 X16 (Immediate_Offset (iword (&32))) *) + 0x9b077c6c; (* arm_MUL X12 X3 X7 *) + 0x9bc77c6d; (* arm_UMULH X13 X3 X7 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa9432a09; (* arm_LDP X9 X10 X16 (Immediate_Offset (iword (&48))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c60; (* arm_UMULH X0 X3 X9 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c61; (* arm_UMULH X1 X3 X10 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0xa9451a25; (* arm_LDP X5 X6 X17 (Immediate_Offset (iword (&80))) *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bca7c83; (* arm_UMULH X3 X4 X10 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9b077cab; (* arm_MUL X11 X5 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b087cab; (* arm_MUL X11 X5 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b097cab; (* arm_MUL X11 X5 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b0a7cab; (* arm_MUL X11 X5 X10 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bca7ca4; (* arm_UMULH X4 X5 X10 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9bc77cab; (* arm_UMULH X11 X5 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9bc87cab; (* arm_UMULH X11 X5 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bc97cab; (* arm_UMULH X11 X5 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b077ccb; (* arm_MUL X11 X6 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9b087ccb; (* arm_MUL X11 X6 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b097ccb; (* arm_MUL X11 X6 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9b0a7ccb; (* arm_MUL X11 X6 X10 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9bca7cc5; (* arm_UMULH X5 X6 X10 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0x9bc77ccb; (* arm_UMULH X11 X6 X7 *) + 0xab0b0021; (* arm_ADDS X1 X1 X11 *) + 0x9bc87ccb; (* arm_UMULH X11 X6 X8 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bc97ccb; (* arm_UMULH X11 X6 X9 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0xd2807a27; (* arm_MOV X7 (rvalue (word 977)) *) + 0xb26000e7; (* arm_ORR X7 X7 (rvalue (word 4294967296)) *) + 0x9b017ceb; (* arm_MUL X11 X7 X1 *) + 0x9bc17ce9; (* arm_UMULH X9 X7 X1 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0x9b037ceb; (* arm_MUL X11 X7 X3 *) + 0x9bc37ce3; (* arm_UMULH X3 X7 X3 *) + 0xba0b01ad; (* arm_ADCS X13 X13 X11 *) + 0x9b047ceb; (* arm_MUL X11 X7 X4 *) + 0x9bc47ce4; (* arm_UMULH X4 X7 X4 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b057ceb; (* arm_MUL X11 X7 X5 *) + 0x9bc57ce5; (* arm_UMULH X5 X7 X5 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a9f37e1; (* arm_CSET X1 Condition_CS *) + 0xab0901ad; (* arm_ADDS X13 X13 X9 *) + 0xba0301ce; (* arm_ADCS X14 X14 X3 *) + 0xba040000; (* arm_ADCS X0 X0 X4 *) + 0x9a050021; (* arm_ADC X1 X1 X5 *) + 0x91000428; (* arm_ADD X8 X1 (rvalue (word 1)) *) + 0x9b087ceb; (* arm_MUL X11 X7 X8 *) + 0x9bc87ce9; (* arm_UMULH X9 X7 X8 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0xba0901ad; (* arm_ADCS X13 X13 X9 *) + 0xba1f01ce; (* arm_ADCS X14 X14 XZR *) + 0xba1f0000; (* arm_ADCS X0 X0 XZR *) + 0x9a9f30e7; (* arm_CSEL X7 X7 XZR Condition_CC *) + 0xeb07018c; (* arm_SUBS X12 X12 X7 *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xda1f0000; (* arm_SBC X0 X0 XZR *) + 0xa90c37ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&192))) *) + 0xa90d03ee; (* arm_STP X14 X0 SP (Immediate_Offset (iword (&208))) *) + 0xa9441203; (* arm_LDP X3 X4 X16 (Immediate_Offset (iword (&64))) *) + 0xa9422227; (* arm_LDP X7 X8 X17 (Immediate_Offset (iword (&32))) *) + 0x9b077c6c; (* arm_MUL X12 X3 X7 *) + 0x9bc77c6d; (* arm_UMULH X13 X3 X7 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa9432a29; (* arm_LDP X9 X10 X17 (Immediate_Offset (iword (&48))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c60; (* arm_UMULH X0 X3 X9 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c61; (* arm_UMULH X1 X3 X10 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0xa9451a05; (* arm_LDP X5 X6 X16 (Immediate_Offset (iword (&80))) *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bca7c83; (* arm_UMULH X3 X4 X10 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9b077cab; (* arm_MUL X11 X5 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b087cab; (* arm_MUL X11 X5 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b097cab; (* arm_MUL X11 X5 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b0a7cab; (* arm_MUL X11 X5 X10 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bca7ca4; (* arm_UMULH X4 X5 X10 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9bc77cab; (* arm_UMULH X11 X5 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9bc87cab; (* arm_UMULH X11 X5 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bc97cab; (* arm_UMULH X11 X5 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b077ccb; (* arm_MUL X11 X6 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9b087ccb; (* arm_MUL X11 X6 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b097ccb; (* arm_MUL X11 X6 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9b0a7ccb; (* arm_MUL X11 X6 X10 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9bca7cc5; (* arm_UMULH X5 X6 X10 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0x9bc77ccb; (* arm_UMULH X11 X6 X7 *) + 0xab0b0021; (* arm_ADDS X1 X1 X11 *) + 0x9bc87ccb; (* arm_UMULH X11 X6 X8 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bc97ccb; (* arm_UMULH X11 X6 X9 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0xd2807a27; (* arm_MOV X7 (rvalue (word 977)) *) + 0xb26000e7; (* arm_ORR X7 X7 (rvalue (word 4294967296)) *) + 0x9b017ceb; (* arm_MUL X11 X7 X1 *) + 0x9bc17ce9; (* arm_UMULH X9 X7 X1 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0x9b037ceb; (* arm_MUL X11 X7 X3 *) + 0x9bc37ce3; (* arm_UMULH X3 X7 X3 *) + 0xba0b01ad; (* arm_ADCS X13 X13 X11 *) + 0x9b047ceb; (* arm_MUL X11 X7 X4 *) + 0x9bc47ce4; (* arm_UMULH X4 X7 X4 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b057ceb; (* arm_MUL X11 X7 X5 *) + 0x9bc57ce5; (* arm_UMULH X5 X7 X5 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a9f37e1; (* arm_CSET X1 Condition_CS *) + 0xab0901ad; (* arm_ADDS X13 X13 X9 *) + 0xba0301ce; (* arm_ADCS X14 X14 X3 *) + 0xba040000; (* arm_ADCS X0 X0 X4 *) + 0x9a050021; (* arm_ADC X1 X1 X5 *) + 0x91000428; (* arm_ADD X8 X1 (rvalue (word 1)) *) + 0x9b087ceb; (* arm_MUL X11 X7 X8 *) + 0x9bc87ce9; (* arm_UMULH X9 X7 X8 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0xba0901ad; (* arm_ADCS X13 X13 X9 *) + 0xba1f01ce; (* arm_ADCS X14 X14 XZR *) + 0xba1f0000; (* arm_ADCS X0 X0 XZR *) + 0x9a9f30e7; (* arm_CSEL X7 X7 XZR Condition_CC *) + 0xeb07018c; (* arm_SUBS X12 X12 X7 *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xda1f0000; (* arm_SBC X0 X0 XZR *) + 0xa90237ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&32))) *) + 0xa90303ee; (* arm_STP X14 X0 SP (Immediate_Offset (iword (&48))) *) + 0xa94013e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&0))) *) + 0xa9402227; (* arm_LDP X7 X8 X17 (Immediate_Offset (iword (&0))) *) + 0x9b077c6c; (* arm_MUL X12 X3 X7 *) + 0x9bc77c6d; (* arm_UMULH X13 X3 X7 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa9412a29; (* arm_LDP X9 X10 X17 (Immediate_Offset (iword (&16))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c60; (* arm_UMULH X0 X3 X9 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c61; (* arm_UMULH X1 X3 X10 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0xa9411be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&16))) *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bca7c83; (* arm_UMULH X3 X4 X10 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9b077cab; (* arm_MUL X11 X5 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b087cab; (* arm_MUL X11 X5 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b097cab; (* arm_MUL X11 X5 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b0a7cab; (* arm_MUL X11 X5 X10 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bca7ca4; (* arm_UMULH X4 X5 X10 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9bc77cab; (* arm_UMULH X11 X5 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9bc87cab; (* arm_UMULH X11 X5 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bc97cab; (* arm_UMULH X11 X5 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b077ccb; (* arm_MUL X11 X6 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9b087ccb; (* arm_MUL X11 X6 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b097ccb; (* arm_MUL X11 X6 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9b0a7ccb; (* arm_MUL X11 X6 X10 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9bca7cc5; (* arm_UMULH X5 X6 X10 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0x9bc77ccb; (* arm_UMULH X11 X6 X7 *) + 0xab0b0021; (* arm_ADDS X1 X1 X11 *) + 0x9bc87ccb; (* arm_UMULH X11 X6 X8 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bc97ccb; (* arm_UMULH X11 X6 X9 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0xd2807a27; (* arm_MOV X7 (rvalue (word 977)) *) + 0xb26000e7; (* arm_ORR X7 X7 (rvalue (word 4294967296)) *) + 0x9b017ceb; (* arm_MUL X11 X7 X1 *) + 0x9bc17ce9; (* arm_UMULH X9 X7 X1 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0x9b037ceb; (* arm_MUL X11 X7 X3 *) + 0x9bc37ce3; (* arm_UMULH X3 X7 X3 *) + 0xba0b01ad; (* arm_ADCS X13 X13 X11 *) + 0x9b047ceb; (* arm_MUL X11 X7 X4 *) + 0x9bc47ce4; (* arm_UMULH X4 X7 X4 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b057ceb; (* arm_MUL X11 X7 X5 *) + 0x9bc57ce5; (* arm_UMULH X5 X7 X5 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a9f37e1; (* arm_CSET X1 Condition_CS *) + 0xab0901ad; (* arm_ADDS X13 X13 X9 *) + 0xba0301ce; (* arm_ADCS X14 X14 X3 *) + 0xba040000; (* arm_ADCS X0 X0 X4 *) + 0x9a050021; (* arm_ADC X1 X1 X5 *) + 0x91000428; (* arm_ADD X8 X1 (rvalue (word 1)) *) + 0x9b087ceb; (* arm_MUL X11 X7 X8 *) + 0x9bc87ce9; (* arm_UMULH X9 X7 X8 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0xba0901ad; (* arm_ADCS X13 X13 X9 *) + 0xba1f01ce; (* arm_ADCS X14 X14 XZR *) + 0xba1f0000; (* arm_ADCS X0 X0 XZR *) + 0x9a9f30e7; (* arm_CSEL X7 X7 XZR Condition_CC *) + 0xeb07018c; (* arm_SUBS X12 X12 X7 *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xda1f0000; (* arm_SBC X0 X0 XZR *) + 0xa90437ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&64))) *) + 0xa90503ee; (* arm_STP X14 X0 SP (Immediate_Offset (iword (&80))) *) + 0xa94a13e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&160))) *) + 0xa9402207; (* arm_LDP X7 X8 X16 (Immediate_Offset (iword (&0))) *) + 0x9b077c6c; (* arm_MUL X12 X3 X7 *) + 0x9bc77c6d; (* arm_UMULH X13 X3 X7 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa9412a09; (* arm_LDP X9 X10 X16 (Immediate_Offset (iword (&16))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c60; (* arm_UMULH X0 X3 X9 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c61; (* arm_UMULH X1 X3 X10 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0xa94b1be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&176))) *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bca7c83; (* arm_UMULH X3 X4 X10 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9b077cab; (* arm_MUL X11 X5 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b087cab; (* arm_MUL X11 X5 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b097cab; (* arm_MUL X11 X5 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b0a7cab; (* arm_MUL X11 X5 X10 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bca7ca4; (* arm_UMULH X4 X5 X10 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9bc77cab; (* arm_UMULH X11 X5 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9bc87cab; (* arm_UMULH X11 X5 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bc97cab; (* arm_UMULH X11 X5 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b077ccb; (* arm_MUL X11 X6 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9b087ccb; (* arm_MUL X11 X6 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b097ccb; (* arm_MUL X11 X6 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9b0a7ccb; (* arm_MUL X11 X6 X10 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9bca7cc5; (* arm_UMULH X5 X6 X10 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0x9bc77ccb; (* arm_UMULH X11 X6 X7 *) + 0xab0b0021; (* arm_ADDS X1 X1 X11 *) + 0x9bc87ccb; (* arm_UMULH X11 X6 X8 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bc97ccb; (* arm_UMULH X11 X6 X9 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0xd2807a27; (* arm_MOV X7 (rvalue (word 977)) *) + 0xb26000e7; (* arm_ORR X7 X7 (rvalue (word 4294967296)) *) + 0x9b017ceb; (* arm_MUL X11 X7 X1 *) + 0x9bc17ce9; (* arm_UMULH X9 X7 X1 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0x9b037ceb; (* arm_MUL X11 X7 X3 *) + 0x9bc37ce3; (* arm_UMULH X3 X7 X3 *) + 0xba0b01ad; (* arm_ADCS X13 X13 X11 *) + 0x9b047ceb; (* arm_MUL X11 X7 X4 *) + 0x9bc47ce4; (* arm_UMULH X4 X7 X4 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b057ceb; (* arm_MUL X11 X7 X5 *) + 0x9bc57ce5; (* arm_UMULH X5 X7 X5 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a9f37e1; (* arm_CSET X1 Condition_CS *) + 0xab0901ad; (* arm_ADDS X13 X13 X9 *) + 0xba0301ce; (* arm_ADCS X14 X14 X3 *) + 0xba040000; (* arm_ADCS X0 X0 X4 *) + 0x9a050021; (* arm_ADC X1 X1 X5 *) + 0x91000428; (* arm_ADD X8 X1 (rvalue (word 1)) *) + 0x9b087ceb; (* arm_MUL X11 X7 X8 *) + 0x9bc87ce9; (* arm_UMULH X9 X7 X8 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0xba0901ad; (* arm_ADCS X13 X13 X9 *) + 0xba1f01ce; (* arm_ADCS X14 X14 XZR *) + 0xba1f0000; (* arm_ADCS X0 X0 XZR *) + 0x9a9f30e7; (* arm_CSEL X7 X7 XZR Condition_CC *) + 0xeb07018c; (* arm_SUBS X12 X12 X7 *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xda1f0000; (* arm_SBC X0 X0 XZR *) + 0xa90837ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&128))) *) + 0xa90903ee; (* arm_STP X14 X0 SP (Immediate_Offset (iword (&144))) *) + 0xa94013e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&0))) *) + 0xa94223e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&32))) *) + 0x9b077c6c; (* arm_MUL X12 X3 X7 *) + 0x9bc77c6d; (* arm_UMULH X13 X3 X7 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa9432be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&48))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c60; (* arm_UMULH X0 X3 X9 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c61; (* arm_UMULH X1 X3 X10 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0xa9411be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&16))) *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bca7c83; (* arm_UMULH X3 X4 X10 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9b077cab; (* arm_MUL X11 X5 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b087cab; (* arm_MUL X11 X5 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b097cab; (* arm_MUL X11 X5 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b0a7cab; (* arm_MUL X11 X5 X10 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bca7ca4; (* arm_UMULH X4 X5 X10 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9bc77cab; (* arm_UMULH X11 X5 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9bc87cab; (* arm_UMULH X11 X5 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bc97cab; (* arm_UMULH X11 X5 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b077ccb; (* arm_MUL X11 X6 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9b087ccb; (* arm_MUL X11 X6 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b097ccb; (* arm_MUL X11 X6 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9b0a7ccb; (* arm_MUL X11 X6 X10 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9bca7cc5; (* arm_UMULH X5 X6 X10 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0x9bc77ccb; (* arm_UMULH X11 X6 X7 *) + 0xab0b0021; (* arm_ADDS X1 X1 X11 *) + 0x9bc87ccb; (* arm_UMULH X11 X6 X8 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bc97ccb; (* arm_UMULH X11 X6 X9 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0xd2807a27; (* arm_MOV X7 (rvalue (word 977)) *) + 0xb26000e7; (* arm_ORR X7 X7 (rvalue (word 4294967296)) *) + 0x9b017ceb; (* arm_MUL X11 X7 X1 *) + 0x9bc17ce9; (* arm_UMULH X9 X7 X1 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0x9b037ceb; (* arm_MUL X11 X7 X3 *) + 0x9bc37ce3; (* arm_UMULH X3 X7 X3 *) + 0xba0b01ad; (* arm_ADCS X13 X13 X11 *) + 0x9b047ceb; (* arm_MUL X11 X7 X4 *) + 0x9bc47ce4; (* arm_UMULH X4 X7 X4 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b057ceb; (* arm_MUL X11 X7 X5 *) + 0x9bc57ce5; (* arm_UMULH X5 X7 X5 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a9f37e1; (* arm_CSET X1 Condition_CS *) + 0xab0901ad; (* arm_ADDS X13 X13 X9 *) + 0xba0301ce; (* arm_ADCS X14 X14 X3 *) + 0xba040000; (* arm_ADCS X0 X0 X4 *) + 0x9a050021; (* arm_ADC X1 X1 X5 *) + 0x91000428; (* arm_ADD X8 X1 (rvalue (word 1)) *) + 0x9b087ceb; (* arm_MUL X11 X7 X8 *) + 0x9bc87ce9; (* arm_UMULH X9 X7 X8 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0xba0901ad; (* arm_ADCS X13 X13 X9 *) + 0xba1f01ce; (* arm_ADCS X14 X14 XZR *) + 0xba1f0000; (* arm_ADCS X0 X0 XZR *) + 0x9a9f30e7; (* arm_CSEL X7 X7 XZR Condition_CC *) + 0xeb07018c; (* arm_SUBS X12 X12 X7 *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xda1f0000; (* arm_SBC X0 X0 XZR *) + 0xa90237ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&32))) *) + 0xa90303ee; (* arm_STP X14 X0 SP (Immediate_Offset (iword (&48))) *) + 0xa94a13e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&160))) *) + 0xa94c23e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&192))) *) + 0x9b077c6c; (* arm_MUL X12 X3 X7 *) + 0x9bc77c6d; (* arm_UMULH X13 X3 X7 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa94d2be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&208))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c60; (* arm_UMULH X0 X3 X9 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c61; (* arm_UMULH X1 X3 X10 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0xa94b1be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&176))) *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bca7c83; (* arm_UMULH X3 X4 X10 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9b077cab; (* arm_MUL X11 X5 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b087cab; (* arm_MUL X11 X5 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b097cab; (* arm_MUL X11 X5 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b0a7cab; (* arm_MUL X11 X5 X10 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bca7ca4; (* arm_UMULH X4 X5 X10 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9bc77cab; (* arm_UMULH X11 X5 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9bc87cab; (* arm_UMULH X11 X5 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bc97cab; (* arm_UMULH X11 X5 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b077ccb; (* arm_MUL X11 X6 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9b087ccb; (* arm_MUL X11 X6 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b097ccb; (* arm_MUL X11 X6 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9b0a7ccb; (* arm_MUL X11 X6 X10 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9bca7cc5; (* arm_UMULH X5 X6 X10 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0x9bc77ccb; (* arm_UMULH X11 X6 X7 *) + 0xab0b0021; (* arm_ADDS X1 X1 X11 *) + 0x9bc87ccb; (* arm_UMULH X11 X6 X8 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bc97ccb; (* arm_UMULH X11 X6 X9 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0xd2807a27; (* arm_MOV X7 (rvalue (word 977)) *) + 0xb26000e7; (* arm_ORR X7 X7 (rvalue (word 4294967296)) *) + 0x9b017ceb; (* arm_MUL X11 X7 X1 *) + 0x9bc17ce9; (* arm_UMULH X9 X7 X1 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0x9b037ceb; (* arm_MUL X11 X7 X3 *) + 0x9bc37ce3; (* arm_UMULH X3 X7 X3 *) + 0xba0b01ad; (* arm_ADCS X13 X13 X11 *) + 0x9b047ceb; (* arm_MUL X11 X7 X4 *) + 0x9bc47ce4; (* arm_UMULH X4 X7 X4 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b057ceb; (* arm_MUL X11 X7 X5 *) + 0x9bc57ce5; (* arm_UMULH X5 X7 X5 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a9f37e1; (* arm_CSET X1 Condition_CS *) + 0xab0901ad; (* arm_ADDS X13 X13 X9 *) + 0xba0301ce; (* arm_ADCS X14 X14 X3 *) + 0xba040000; (* arm_ADCS X0 X0 X4 *) + 0x9a050021; (* arm_ADC X1 X1 X5 *) + 0x91000428; (* arm_ADD X8 X1 (rvalue (word 1)) *) + 0x9b087ceb; (* arm_MUL X11 X7 X8 *) + 0x9bc87ce9; (* arm_UMULH X9 X7 X8 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0xba0901ad; (* arm_ADCS X13 X13 X9 *) + 0xba1f01ce; (* arm_ADCS X14 X14 XZR *) + 0xba1f0000; (* arm_ADCS X0 X0 XZR *) + 0x9a9f30e7; (* arm_CSEL X7 X7 XZR Condition_CC *) + 0xeb07018c; (* arm_SUBS X12 X12 X7 *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xda1f0000; (* arm_SBC X0 X0 XZR *) + 0xa90c37ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&192))) *) + 0xa90d03ee; (* arm_STP X14 X0 SP (Immediate_Offset (iword (&208))) *) + 0xa9441be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&64))) *) + 0xa9480fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&128))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa94523e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&80))) *) + 0xa9490fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&144))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xd2807a24; (* arm_MOV X4 (rvalue (word 977)) *) + 0xb2600083; (* arm_ORR X3 X4 (rvalue (word 4294967296)) *) + 0x9a9f3063; (* arm_CSEL X3 X3 XZR Condition_CC *) + 0xeb0300a5; (* arm_SUBS X5 X5 X3 *) + 0xfa1f00c6; (* arm_SBCS X6 X6 XZR *) + 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) + 0xda1f0108; (* arm_SBC X8 X8 XZR *) + 0xa90a1be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&160))) *) + 0xa90b23e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&176))) *) + 0xa9421be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&32))) *) + 0xa94c0fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&192))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa94323e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&48))) *) + 0xa94d0fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&208))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xd2807a24; (* arm_MOV X4 (rvalue (word 977)) *) + 0xb2600083; (* arm_ORR X3 X4 (rvalue (word 4294967296)) *) + 0x9a9f3063; (* arm_CSEL X3 X3 XZR Condition_CC *) + 0xeb0300a5; (* arm_SUBS X5 X5 X3 *) + 0xfa1f00c6; (* arm_SBCS X6 X6 XZR *) + 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) + 0xda1f0108; (* arm_SBC X8 X8 XZR *) + 0xa9021be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&32))) *) + 0xa90323e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&48))) *) + 0xa94a0fe2; (* arm_LDP X2 X3 SP (Immediate_Offset (iword (&160))) *) + 0x9b037c49; (* arm_MUL X9 X2 X3 *) + 0x9bc37c4a; (* arm_UMULH X10 X2 X3 *) + 0xa94b17e4; (* arm_LDP X4 X5 SP (Immediate_Offset (iword (&176))) *) + 0x9b057c4b; (* arm_MUL X11 X2 X5 *) + 0x9bc57c4c; (* arm_UMULH X12 X2 X5 *) + 0x9b047c47; (* arm_MUL X7 X2 X4 *) + 0x9bc47c46; (* arm_UMULH X6 X2 X4 *) + 0xab07014a; (* arm_ADDS X10 X10 X7 *) + 0xba06016b; (* arm_ADCS X11 X11 X6 *) + 0x9b047c67; (* arm_MUL X7 X3 X4 *) + 0x9bc47c66; (* arm_UMULH X6 X3 X4 *) + 0x9a1f00c6; (* arm_ADC X6 X6 XZR *) + 0xab07016b; (* arm_ADDS X11 X11 X7 *) + 0x9b057c8d; (* arm_MUL X13 X4 X5 *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xba06018c; (* arm_ADCS X12 X12 X6 *) + 0x9b057c67; (* arm_MUL X7 X3 X5 *) + 0x9bc57c66; (* arm_UMULH X6 X3 X5 *) + 0x9a1f00c6; (* arm_ADC X6 X6 XZR *) + 0xab07018c; (* arm_ADDS X12 X12 X7 *) + 0xba0601ad; (* arm_ADCS X13 X13 X6 *) + 0x9a1f01ce; (* arm_ADC X14 X14 XZR *) + 0xab090129; (* arm_ADDS X9 X9 X9 *) + 0xba0a014a; (* arm_ADCS X10 X10 X10 *) + 0xba0b016b; (* arm_ADCS X11 X11 X11 *) + 0xba0c018c; (* arm_ADCS X12 X12 X12 *) + 0xba0d01ad; (* arm_ADCS X13 X13 X13 *) + 0xba0e01ce; (* arm_ADCS X14 X14 X14 *) + 0x9a9f37e6; (* arm_CSET X6 Condition_CS *) + 0x9bc27c47; (* arm_UMULH X7 X2 X2 *) + 0x9b027c48; (* arm_MUL X8 X2 X2 *) + 0xab070129; (* arm_ADDS X9 X9 X7 *) + 0x9b037c67; (* arm_MUL X7 X3 X3 *) + 0xba07014a; (* arm_ADCS X10 X10 X7 *) + 0x9bc37c67; (* arm_UMULH X7 X3 X3 *) + 0xba07016b; (* arm_ADCS X11 X11 X7 *) + 0x9b047c87; (* arm_MUL X7 X4 X4 *) + 0xba07018c; (* arm_ADCS X12 X12 X7 *) + 0x9bc47c87; (* arm_UMULH X7 X4 X4 *) + 0xba0701ad; (* arm_ADCS X13 X13 X7 *) + 0x9b057ca7; (* arm_MUL X7 X5 X5 *) + 0xba0701ce; (* arm_ADCS X14 X14 X7 *) + 0x9bc57ca7; (* arm_UMULH X7 X5 X5 *) + 0x9a0700c6; (* arm_ADC X6 X6 X7 *) + 0xd2807a23; (* arm_MOV X3 (rvalue (word 977)) *) + 0xb2600063; (* arm_ORR X3 X3 (rvalue (word 4294967296)) *) + 0x9b0c7c67; (* arm_MUL X7 X3 X12 *) + 0x9bcc7c64; (* arm_UMULH X4 X3 X12 *) + 0xab070108; (* arm_ADDS X8 X8 X7 *) + 0x9b0d7c67; (* arm_MUL X7 X3 X13 *) + 0x9bcd7c6d; (* arm_UMULH X13 X3 X13 *) + 0xba070129; (* arm_ADCS X9 X9 X7 *) + 0x9b0e7c67; (* arm_MUL X7 X3 X14 *) + 0x9bce7c6e; (* arm_UMULH X14 X3 X14 *) + 0xba07014a; (* arm_ADCS X10 X10 X7 *) + 0x9b067c67; (* arm_MUL X7 X3 X6 *) + 0x9bc67c66; (* arm_UMULH X6 X3 X6 *) + 0xba07016b; (* arm_ADCS X11 X11 X7 *) + 0x9a9f37ec; (* arm_CSET X12 Condition_CS *) + 0xab040129; (* arm_ADDS X9 X9 X4 *) + 0xba0d014a; (* arm_ADCS X10 X10 X13 *) + 0xba0e016b; (* arm_ADCS X11 X11 X14 *) + 0x9a06018c; (* arm_ADC X12 X12 X6 *) + 0x91000582; (* arm_ADD X2 X12 (rvalue (word 1)) *) + 0x9b027c67; (* arm_MUL X7 X3 X2 *) + 0x9bc27c66; (* arm_UMULH X6 X3 X2 *) + 0xab070108; (* arm_ADDS X8 X8 X7 *) + 0xba060129; (* arm_ADCS X9 X9 X6 *) + 0xba1f014a; (* arm_ADCS X10 X10 XZR *) + 0xba1f016b; (* arm_ADCS X11 X11 XZR *) + 0x9a9f3063; (* arm_CSEL X3 X3 XZR Condition_CC *) + 0xeb030108; (* arm_SUBS X8 X8 X3 *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xda1f016b; (* arm_SBC X11 X11 XZR *) + 0xa90627e8; (* arm_STP X8 X9 SP (Immediate_Offset (iword (&96))) *) + 0xa9072fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&112))) *) + 0xa9420fe2; (* arm_LDP X2 X3 SP (Immediate_Offset (iword (&32))) *) + 0x9b037c49; (* arm_MUL X9 X2 X3 *) + 0x9bc37c4a; (* arm_UMULH X10 X2 X3 *) + 0xa94317e4; (* arm_LDP X4 X5 SP (Immediate_Offset (iword (&48))) *) + 0x9b057c4b; (* arm_MUL X11 X2 X5 *) + 0x9bc57c4c; (* arm_UMULH X12 X2 X5 *) + 0x9b047c47; (* arm_MUL X7 X2 X4 *) + 0x9bc47c46; (* arm_UMULH X6 X2 X4 *) + 0xab07014a; (* arm_ADDS X10 X10 X7 *) + 0xba06016b; (* arm_ADCS X11 X11 X6 *) + 0x9b047c67; (* arm_MUL X7 X3 X4 *) + 0x9bc47c66; (* arm_UMULH X6 X3 X4 *) + 0x9a1f00c6; (* arm_ADC X6 X6 XZR *) + 0xab07016b; (* arm_ADDS X11 X11 X7 *) + 0x9b057c8d; (* arm_MUL X13 X4 X5 *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xba06018c; (* arm_ADCS X12 X12 X6 *) + 0x9b057c67; (* arm_MUL X7 X3 X5 *) + 0x9bc57c66; (* arm_UMULH X6 X3 X5 *) + 0x9a1f00c6; (* arm_ADC X6 X6 XZR *) + 0xab07018c; (* arm_ADDS X12 X12 X7 *) + 0xba0601ad; (* arm_ADCS X13 X13 X6 *) + 0x9a1f01ce; (* arm_ADC X14 X14 XZR *) + 0xab090129; (* arm_ADDS X9 X9 X9 *) + 0xba0a014a; (* arm_ADCS X10 X10 X10 *) + 0xba0b016b; (* arm_ADCS X11 X11 X11 *) + 0xba0c018c; (* arm_ADCS X12 X12 X12 *) + 0xba0d01ad; (* arm_ADCS X13 X13 X13 *) + 0xba0e01ce; (* arm_ADCS X14 X14 X14 *) + 0x9a9f37e6; (* arm_CSET X6 Condition_CS *) + 0x9bc27c47; (* arm_UMULH X7 X2 X2 *) + 0x9b027c48; (* arm_MUL X8 X2 X2 *) + 0xab070129; (* arm_ADDS X9 X9 X7 *) + 0x9b037c67; (* arm_MUL X7 X3 X3 *) + 0xba07014a; (* arm_ADCS X10 X10 X7 *) + 0x9bc37c67; (* arm_UMULH X7 X3 X3 *) + 0xba07016b; (* arm_ADCS X11 X11 X7 *) + 0x9b047c87; (* arm_MUL X7 X4 X4 *) + 0xba07018c; (* arm_ADCS X12 X12 X7 *) + 0x9bc47c87; (* arm_UMULH X7 X4 X4 *) + 0xba0701ad; (* arm_ADCS X13 X13 X7 *) + 0x9b057ca7; (* arm_MUL X7 X5 X5 *) + 0xba0701ce; (* arm_ADCS X14 X14 X7 *) + 0x9bc57ca7; (* arm_UMULH X7 X5 X5 *) + 0x9a0700c6; (* arm_ADC X6 X6 X7 *) + 0xd2807a23; (* arm_MOV X3 (rvalue (word 977)) *) + 0xb2600063; (* arm_ORR X3 X3 (rvalue (word 4294967296)) *) + 0x9b0c7c67; (* arm_MUL X7 X3 X12 *) + 0x9bcc7c64; (* arm_UMULH X4 X3 X12 *) + 0xab070108; (* arm_ADDS X8 X8 X7 *) + 0x9b0d7c67; (* arm_MUL X7 X3 X13 *) + 0x9bcd7c6d; (* arm_UMULH X13 X3 X13 *) + 0xba070129; (* arm_ADCS X9 X9 X7 *) + 0x9b0e7c67; (* arm_MUL X7 X3 X14 *) + 0x9bce7c6e; (* arm_UMULH X14 X3 X14 *) + 0xba07014a; (* arm_ADCS X10 X10 X7 *) + 0x9b067c67; (* arm_MUL X7 X3 X6 *) + 0x9bc67c66; (* arm_UMULH X6 X3 X6 *) + 0xba07016b; (* arm_ADCS X11 X11 X7 *) + 0x9a9f37ec; (* arm_CSET X12 Condition_CS *) + 0xab040129; (* arm_ADDS X9 X9 X4 *) + 0xba0d014a; (* arm_ADCS X10 X10 X13 *) + 0xba0e016b; (* arm_ADCS X11 X11 X14 *) + 0x9a06018c; (* arm_ADC X12 X12 X6 *) + 0x91000582; (* arm_ADD X2 X12 (rvalue (word 1)) *) + 0x9b027c67; (* arm_MUL X7 X3 X2 *) + 0x9bc27c66; (* arm_UMULH X6 X3 X2 *) + 0xab070108; (* arm_ADDS X8 X8 X7 *) + 0xba060129; (* arm_ADCS X9 X9 X6 *) + 0xba1f014a; (* arm_ADCS X10 X10 XZR *) + 0xba1f016b; (* arm_ADCS X11 X11 XZR *) + 0x9a9f3063; (* arm_CSEL X3 X3 XZR Condition_CC *) + 0xeb030108; (* arm_SUBS X8 X8 X3 *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xda1f016b; (* arm_SBC X11 X11 XZR *) + 0xa90027e8; (* arm_STP X8 X9 SP (Immediate_Offset (iword (&0))) *) + 0xa9012fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&16))) *) + 0xa94613e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&96))) *) + 0xa94823e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&128))) *) + 0x9b077c6c; (* arm_MUL X12 X3 X7 *) + 0x9bc77c6d; (* arm_UMULH X13 X3 X7 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa9492be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&144))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c60; (* arm_UMULH X0 X3 X9 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c61; (* arm_UMULH X1 X3 X10 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0xa9471be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&112))) *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bca7c83; (* arm_UMULH X3 X4 X10 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9b077cab; (* arm_MUL X11 X5 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b087cab; (* arm_MUL X11 X5 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b097cab; (* arm_MUL X11 X5 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b0a7cab; (* arm_MUL X11 X5 X10 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bca7ca4; (* arm_UMULH X4 X5 X10 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9bc77cab; (* arm_UMULH X11 X5 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9bc87cab; (* arm_UMULH X11 X5 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bc97cab; (* arm_UMULH X11 X5 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b077ccb; (* arm_MUL X11 X6 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9b087ccb; (* arm_MUL X11 X6 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b097ccb; (* arm_MUL X11 X6 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9b0a7ccb; (* arm_MUL X11 X6 X10 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9bca7cc5; (* arm_UMULH X5 X6 X10 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0x9bc77ccb; (* arm_UMULH X11 X6 X7 *) + 0xab0b0021; (* arm_ADDS X1 X1 X11 *) + 0x9bc87ccb; (* arm_UMULH X11 X6 X8 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bc97ccb; (* arm_UMULH X11 X6 X9 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0xd2807a27; (* arm_MOV X7 (rvalue (word 977)) *) + 0xb26000e7; (* arm_ORR X7 X7 (rvalue (word 4294967296)) *) + 0x9b017ceb; (* arm_MUL X11 X7 X1 *) + 0x9bc17ce9; (* arm_UMULH X9 X7 X1 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0x9b037ceb; (* arm_MUL X11 X7 X3 *) + 0x9bc37ce3; (* arm_UMULH X3 X7 X3 *) + 0xba0b01ad; (* arm_ADCS X13 X13 X11 *) + 0x9b047ceb; (* arm_MUL X11 X7 X4 *) + 0x9bc47ce4; (* arm_UMULH X4 X7 X4 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b057ceb; (* arm_MUL X11 X7 X5 *) + 0x9bc57ce5; (* arm_UMULH X5 X7 X5 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a9f37e1; (* arm_CSET X1 Condition_CS *) + 0xab0901ad; (* arm_ADDS X13 X13 X9 *) + 0xba0301ce; (* arm_ADCS X14 X14 X3 *) + 0xba040000; (* arm_ADCS X0 X0 X4 *) + 0x9a050021; (* arm_ADC X1 X1 X5 *) + 0x91000428; (* arm_ADD X8 X1 (rvalue (word 1)) *) + 0x9b087ceb; (* arm_MUL X11 X7 X8 *) + 0x9bc87ce9; (* arm_UMULH X9 X7 X8 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0xba0901ad; (* arm_ADCS X13 X13 X9 *) + 0xba1f01ce; (* arm_ADCS X14 X14 XZR *) + 0xba1f0000; (* arm_ADCS X0 X0 XZR *) + 0x9a9f30e7; (* arm_CSEL X7 X7 XZR Condition_CC *) + 0xeb07018c; (* arm_SUBS X12 X12 X7 *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xda1f0000; (* arm_SBC X0 X0 XZR *) + 0xa90837ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&128))) *) + 0xa90903ee; (* arm_STP X14 X0 SP (Immediate_Offset (iword (&144))) *) + 0xa94613e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&96))) *) + 0xa94423e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&64))) *) + 0x9b077c6c; (* arm_MUL X12 X3 X7 *) + 0x9bc77c6d; (* arm_UMULH X13 X3 X7 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa9452be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&80))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c60; (* arm_UMULH X0 X3 X9 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c61; (* arm_UMULH X1 X3 X10 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0xa9471be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&112))) *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bca7c83; (* arm_UMULH X3 X4 X10 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9b077cab; (* arm_MUL X11 X5 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b087cab; (* arm_MUL X11 X5 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b097cab; (* arm_MUL X11 X5 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b0a7cab; (* arm_MUL X11 X5 X10 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bca7ca4; (* arm_UMULH X4 X5 X10 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9bc77cab; (* arm_UMULH X11 X5 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9bc87cab; (* arm_UMULH X11 X5 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bc97cab; (* arm_UMULH X11 X5 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b077ccb; (* arm_MUL X11 X6 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9b087ccb; (* arm_MUL X11 X6 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b097ccb; (* arm_MUL X11 X6 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9b0a7ccb; (* arm_MUL X11 X6 X10 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9bca7cc5; (* arm_UMULH X5 X6 X10 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0x9bc77ccb; (* arm_UMULH X11 X6 X7 *) + 0xab0b0021; (* arm_ADDS X1 X1 X11 *) + 0x9bc87ccb; (* arm_UMULH X11 X6 X8 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bc97ccb; (* arm_UMULH X11 X6 X9 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0xd2807a27; (* arm_MOV X7 (rvalue (word 977)) *) + 0xb26000e7; (* arm_ORR X7 X7 (rvalue (word 4294967296)) *) + 0x9b017ceb; (* arm_MUL X11 X7 X1 *) + 0x9bc17ce9; (* arm_UMULH X9 X7 X1 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0x9b037ceb; (* arm_MUL X11 X7 X3 *) + 0x9bc37ce3; (* arm_UMULH X3 X7 X3 *) + 0xba0b01ad; (* arm_ADCS X13 X13 X11 *) + 0x9b047ceb; (* arm_MUL X11 X7 X4 *) + 0x9bc47ce4; (* arm_UMULH X4 X7 X4 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b057ceb; (* arm_MUL X11 X7 X5 *) + 0x9bc57ce5; (* arm_UMULH X5 X7 X5 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a9f37e1; (* arm_CSET X1 Condition_CS *) + 0xab0901ad; (* arm_ADDS X13 X13 X9 *) + 0xba0301ce; (* arm_ADCS X14 X14 X3 *) + 0xba040000; (* arm_ADCS X0 X0 X4 *) + 0x9a050021; (* arm_ADC X1 X1 X5 *) + 0x91000428; (* arm_ADD X8 X1 (rvalue (word 1)) *) + 0x9b087ceb; (* arm_MUL X11 X7 X8 *) + 0x9bc87ce9; (* arm_UMULH X9 X7 X8 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0xba0901ad; (* arm_ADCS X13 X13 X9 *) + 0xba1f01ce; (* arm_ADCS X14 X14 XZR *) + 0xba1f0000; (* arm_ADCS X0 X0 XZR *) + 0x9a9f30e7; (* arm_CSEL X7 X7 XZR Condition_CC *) + 0xeb07018c; (* arm_SUBS X12 X12 X7 *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xda1f0000; (* arm_SBC X0 X0 XZR *) + 0xa90437ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&64))) *) + 0xa90503ee; (* arm_STP X14 X0 SP (Immediate_Offset (iword (&80))) *) + 0xa9401be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&0))) *) + 0xa9480fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&128))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa94123e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&16))) *) + 0xa9490fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&144))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xd2807a24; (* arm_MOV X4 (rvalue (word 977)) *) + 0xb2600083; (* arm_ORR X3 X4 (rvalue (word 4294967296)) *) + 0x9a9f3063; (* arm_CSEL X3 X3 XZR Condition_CC *) + 0xeb0300a5; (* arm_SUBS X5 X5 X3 *) + 0xfa1f00c6; (* arm_SBCS X6 X6 XZR *) + 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) + 0xda1f0108; (* arm_SBC X8 X8 XZR *) + 0xa90019e5; (* arm_STP X5 X6 X15 (Immediate_Offset (iword (&0))) *) + 0xa90121e7; (* arm_STP X7 X8 X15 (Immediate_Offset (iword (&16))) *) + 0xa9441be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&64))) *) + 0xa9480fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&128))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa94523e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&80))) *) + 0xa9490fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&144))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xd2807a24; (* arm_MOV X4 (rvalue (word 977)) *) + 0xb2600083; (* arm_ORR X3 X4 (rvalue (word 4294967296)) *) + 0x9a9f3063; (* arm_CSEL X3 X3 XZR Condition_CC *) + 0xeb0300a5; (* arm_SUBS X5 X5 X3 *) + 0xfa1f00c6; (* arm_SBCS X6 X6 XZR *) + 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) + 0xda1f0108; (* arm_SBC X8 X8 XZR *) + 0xa9061be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&96))) *) + 0xa90723e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&112))) *) + 0xa94a13e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&160))) *) + 0xa9442207; (* arm_LDP X7 X8 X16 (Immediate_Offset (iword (&64))) *) + 0x9b077c6c; (* arm_MUL X12 X3 X7 *) + 0x9bc77c6d; (* arm_UMULH X13 X3 X7 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa9452a09; (* arm_LDP X9 X10 X16 (Immediate_Offset (iword (&80))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c60; (* arm_UMULH X0 X3 X9 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c61; (* arm_UMULH X1 X3 X10 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0xa94b1be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&176))) *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bca7c83; (* arm_UMULH X3 X4 X10 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9b077cab; (* arm_MUL X11 X5 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b087cab; (* arm_MUL X11 X5 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b097cab; (* arm_MUL X11 X5 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b0a7cab; (* arm_MUL X11 X5 X10 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bca7ca4; (* arm_UMULH X4 X5 X10 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9bc77cab; (* arm_UMULH X11 X5 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9bc87cab; (* arm_UMULH X11 X5 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bc97cab; (* arm_UMULH X11 X5 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b077ccb; (* arm_MUL X11 X6 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9b087ccb; (* arm_MUL X11 X6 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b097ccb; (* arm_MUL X11 X6 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9b0a7ccb; (* arm_MUL X11 X6 X10 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9bca7cc5; (* arm_UMULH X5 X6 X10 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0x9bc77ccb; (* arm_UMULH X11 X6 X7 *) + 0xab0b0021; (* arm_ADDS X1 X1 X11 *) + 0x9bc87ccb; (* arm_UMULH X11 X6 X8 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bc97ccb; (* arm_UMULH X11 X6 X9 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0xd2807a27; (* arm_MOV X7 (rvalue (word 977)) *) + 0xb26000e7; (* arm_ORR X7 X7 (rvalue (word 4294967296)) *) + 0x9b017ceb; (* arm_MUL X11 X7 X1 *) + 0x9bc17ce9; (* arm_UMULH X9 X7 X1 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0x9b037ceb; (* arm_MUL X11 X7 X3 *) + 0x9bc37ce3; (* arm_UMULH X3 X7 X3 *) + 0xba0b01ad; (* arm_ADCS X13 X13 X11 *) + 0x9b047ceb; (* arm_MUL X11 X7 X4 *) + 0x9bc47ce4; (* arm_UMULH X4 X7 X4 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b057ceb; (* arm_MUL X11 X7 X5 *) + 0x9bc57ce5; (* arm_UMULH X5 X7 X5 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a9f37e1; (* arm_CSET X1 Condition_CS *) + 0xab0901ad; (* arm_ADDS X13 X13 X9 *) + 0xba0301ce; (* arm_ADCS X14 X14 X3 *) + 0xba040000; (* arm_ADCS X0 X0 X4 *) + 0x9a050021; (* arm_ADC X1 X1 X5 *) + 0x91000428; (* arm_ADD X8 X1 (rvalue (word 1)) *) + 0x9b087ceb; (* arm_MUL X11 X7 X8 *) + 0x9bc87ce9; (* arm_UMULH X9 X7 X8 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0xba0901ad; (* arm_ADCS X13 X13 X9 *) + 0xba1f01ce; (* arm_ADCS X14 X14 XZR *) + 0xba1f0000; (* arm_ADCS X0 X0 XZR *) + 0x9a9f30e7; (* arm_CSEL X7 X7 XZR Condition_CC *) + 0xeb07018c; (* arm_SUBS X12 X12 X7 *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xda1f0000; (* arm_SBC X0 X0 XZR *) + 0xa90a37ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&160))) *) + 0xa90b03ee; (* arm_STP X14 X0 SP (Immediate_Offset (iword (&176))) *) + 0xa94019e5; (* arm_LDP X5 X6 X15 (Immediate_Offset (iword (&0))) *) + 0xa9440fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&64))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa94121e7; (* arm_LDP X7 X8 X15 (Immediate_Offset (iword (&16))) *) + 0xa9450fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&80))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xd2807a24; (* arm_MOV X4 (rvalue (word 977)) *) + 0xb2600083; (* arm_ORR X3 X4 (rvalue (word 4294967296)) *) + 0x9a9f3063; (* arm_CSEL X3 X3 XZR Condition_CC *) + 0xeb0300a5; (* arm_SUBS X5 X5 X3 *) + 0xfa1f00c6; (* arm_SBCS X6 X6 XZR *) + 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) + 0xda1f0108; (* arm_SBC X8 X8 XZR *) + 0xa90019e5; (* arm_STP X5 X6 X15 (Immediate_Offset (iword (&0))) *) + 0xa90121e7; (* arm_STP X7 X8 X15 (Immediate_Offset (iword (&16))) *) + 0xa9481be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&128))) *) + 0xa9400de4; (* arm_LDP X4 X3 X15 (Immediate_Offset (iword (&0))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa94923e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&144))) *) + 0xa9410de4; (* arm_LDP X4 X3 X15 (Immediate_Offset (iword (&16))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xd2807a24; (* arm_MOV X4 (rvalue (word 977)) *) + 0xb2600083; (* arm_ORR X3 X4 (rvalue (word 4294967296)) *) + 0x9a9f3063; (* arm_CSEL X3 X3 XZR Condition_CC *) + 0xeb0300a5; (* arm_SUBS X5 X5 X3 *) + 0xfa1f00c6; (* arm_SBCS X6 X6 XZR *) + 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) + 0xda1f0108; (* arm_SBC X8 X8 XZR *) + 0xa9081be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&128))) *) + 0xa90923e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&144))) *) + 0xa94613e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&96))) *) + 0xa94c23e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&192))) *) + 0x9b077c6c; (* arm_MUL X12 X3 X7 *) + 0x9bc77c6d; (* arm_UMULH X13 X3 X7 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa94d2be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&208))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c60; (* arm_UMULH X0 X3 X9 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c61; (* arm_UMULH X1 X3 X10 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0xa9471be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&112))) *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bca7c83; (* arm_UMULH X3 X4 X10 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9b077cab; (* arm_MUL X11 X5 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b087cab; (* arm_MUL X11 X5 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b097cab; (* arm_MUL X11 X5 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b0a7cab; (* arm_MUL X11 X5 X10 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bca7ca4; (* arm_UMULH X4 X5 X10 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9bc77cab; (* arm_UMULH X11 X5 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9bc87cab; (* arm_UMULH X11 X5 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bc97cab; (* arm_UMULH X11 X5 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b077ccb; (* arm_MUL X11 X6 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9b087ccb; (* arm_MUL X11 X6 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b097ccb; (* arm_MUL X11 X6 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9b0a7ccb; (* arm_MUL X11 X6 X10 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9bca7cc5; (* arm_UMULH X5 X6 X10 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0x9bc77ccb; (* arm_UMULH X11 X6 X7 *) + 0xab0b0021; (* arm_ADDS X1 X1 X11 *) + 0x9bc87ccb; (* arm_UMULH X11 X6 X8 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bc97ccb; (* arm_UMULH X11 X6 X9 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0xd2807a27; (* arm_MOV X7 (rvalue (word 977)) *) + 0xb26000e7; (* arm_ORR X7 X7 (rvalue (word 4294967296)) *) + 0x9b017ceb; (* arm_MUL X11 X7 X1 *) + 0x9bc17ce9; (* arm_UMULH X9 X7 X1 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0x9b037ceb; (* arm_MUL X11 X7 X3 *) + 0x9bc37ce3; (* arm_UMULH X3 X7 X3 *) + 0xba0b01ad; (* arm_ADCS X13 X13 X11 *) + 0x9b047ceb; (* arm_MUL X11 X7 X4 *) + 0x9bc47ce4; (* arm_UMULH X4 X7 X4 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b057ceb; (* arm_MUL X11 X7 X5 *) + 0x9bc57ce5; (* arm_UMULH X5 X7 X5 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a9f37e1; (* arm_CSET X1 Condition_CS *) + 0xab0901ad; (* arm_ADDS X13 X13 X9 *) + 0xba0301ce; (* arm_ADCS X14 X14 X3 *) + 0xba040000; (* arm_ADCS X0 X0 X4 *) + 0x9a050021; (* arm_ADC X1 X1 X5 *) + 0x91000428; (* arm_ADD X8 X1 (rvalue (word 1)) *) + 0x9b087ceb; (* arm_MUL X11 X7 X8 *) + 0x9bc87ce9; (* arm_UMULH X9 X7 X8 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0xba0901ad; (* arm_ADCS X13 X13 X9 *) + 0xba1f01ce; (* arm_ADCS X14 X14 XZR *) + 0xba1f0000; (* arm_ADCS X0 X0 XZR *) + 0x9a9f30e7; (* arm_CSEL X7 X7 XZR Condition_CC *) + 0xeb07018c; (* arm_SUBS X12 X12 X7 *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xda1f0000; (* arm_SBC X0 X0 XZR *) + 0xa90637ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&96))) *) + 0xa90703ee; (* arm_STP X14 X0 SP (Immediate_Offset (iword (&112))) *) + 0xa94a13e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&160))) *) + 0xa9442227; (* arm_LDP X7 X8 X17 (Immediate_Offset (iword (&64))) *) + 0x9b077c6c; (* arm_MUL X12 X3 X7 *) + 0x9bc77c6d; (* arm_UMULH X13 X3 X7 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa9452a29; (* arm_LDP X9 X10 X17 (Immediate_Offset (iword (&80))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c60; (* arm_UMULH X0 X3 X9 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c61; (* arm_UMULH X1 X3 X10 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0xa94b1be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&176))) *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bca7c83; (* arm_UMULH X3 X4 X10 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9b077cab; (* arm_MUL X11 X5 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b087cab; (* arm_MUL X11 X5 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b097cab; (* arm_MUL X11 X5 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b0a7cab; (* arm_MUL X11 X5 X10 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bca7ca4; (* arm_UMULH X4 X5 X10 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9bc77cab; (* arm_UMULH X11 X5 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9bc87cab; (* arm_UMULH X11 X5 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bc97cab; (* arm_UMULH X11 X5 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b077ccb; (* arm_MUL X11 X6 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9b087ccb; (* arm_MUL X11 X6 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b097ccb; (* arm_MUL X11 X6 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9b0a7ccb; (* arm_MUL X11 X6 X10 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9bca7cc5; (* arm_UMULH X5 X6 X10 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0x9bc77ccb; (* arm_UMULH X11 X6 X7 *) + 0xab0b0021; (* arm_ADDS X1 X1 X11 *) + 0x9bc87ccb; (* arm_UMULH X11 X6 X8 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bc97ccb; (* arm_UMULH X11 X6 X9 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0xd2807a27; (* arm_MOV X7 (rvalue (word 977)) *) + 0xb26000e7; (* arm_ORR X7 X7 (rvalue (word 4294967296)) *) + 0x9b017ceb; (* arm_MUL X11 X7 X1 *) + 0x9bc17ce9; (* arm_UMULH X9 X7 X1 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0x9b037ceb; (* arm_MUL X11 X7 X3 *) + 0x9bc37ce3; (* arm_UMULH X3 X7 X3 *) + 0xba0b01ad; (* arm_ADCS X13 X13 X11 *) + 0x9b047ceb; (* arm_MUL X11 X7 X4 *) + 0x9bc47ce4; (* arm_UMULH X4 X7 X4 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b057ceb; (* arm_MUL X11 X7 X5 *) + 0x9bc57ce5; (* arm_UMULH X5 X7 X5 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a9f37e1; (* arm_CSET X1 Condition_CS *) + 0xab0901ad; (* arm_ADDS X13 X13 X9 *) + 0xba0301ce; (* arm_ADCS X14 X14 X3 *) + 0xba040000; (* arm_ADCS X0 X0 X4 *) + 0x9a050021; (* arm_ADC X1 X1 X5 *) + 0x91000428; (* arm_ADD X8 X1 (rvalue (word 1)) *) + 0x9b087ceb; (* arm_MUL X11 X7 X8 *) + 0x9bc87ce9; (* arm_UMULH X9 X7 X8 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0xba0901ad; (* arm_ADCS X13 X13 X9 *) + 0xba1f01ce; (* arm_ADCS X14 X14 XZR *) + 0xba1f0000; (* arm_ADCS X0 X0 XZR *) + 0x9a9f30e7; (* arm_CSEL X7 X7 XZR Condition_CC *) + 0xeb07018c; (* arm_SUBS X12 X12 X7 *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xda1f0000; (* arm_SBC X0 X0 XZR *) + 0xa90435ec; (* arm_STP X12 X13 X15 (Immediate_Offset (iword (&64))) *) + 0xa90501ee; (* arm_STP X14 X0 X15 (Immediate_Offset (iword (&80))) *) + 0xa94213e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&32))) *) + 0xa94823e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&128))) *) + 0x9b077c6c; (* arm_MUL X12 X3 X7 *) + 0x9bc77c6d; (* arm_UMULH X13 X3 X7 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa9492be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&144))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c60; (* arm_UMULH X0 X3 X9 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c61; (* arm_UMULH X1 X3 X10 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0xa9431be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&48))) *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bca7c83; (* arm_UMULH X3 X4 X10 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9b077cab; (* arm_MUL X11 X5 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b087cab; (* arm_MUL X11 X5 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b097cab; (* arm_MUL X11 X5 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b0a7cab; (* arm_MUL X11 X5 X10 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bca7ca4; (* arm_UMULH X4 X5 X10 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9bc77cab; (* arm_UMULH X11 X5 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9bc87cab; (* arm_UMULH X11 X5 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bc97cab; (* arm_UMULH X11 X5 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b077ccb; (* arm_MUL X11 X6 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9b087ccb; (* arm_MUL X11 X6 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b097ccb; (* arm_MUL X11 X6 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9b0a7ccb; (* arm_MUL X11 X6 X10 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9bca7cc5; (* arm_UMULH X5 X6 X10 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0x9bc77ccb; (* arm_UMULH X11 X6 X7 *) + 0xab0b0021; (* arm_ADDS X1 X1 X11 *) + 0x9bc87ccb; (* arm_UMULH X11 X6 X8 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bc97ccb; (* arm_UMULH X11 X6 X9 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0xd2807a27; (* arm_MOV X7 (rvalue (word 977)) *) + 0xb26000e7; (* arm_ORR X7 X7 (rvalue (word 4294967296)) *) + 0x9b017ceb; (* arm_MUL X11 X7 X1 *) + 0x9bc17ce9; (* arm_UMULH X9 X7 X1 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0x9b037ceb; (* arm_MUL X11 X7 X3 *) + 0x9bc37ce3; (* arm_UMULH X3 X7 X3 *) + 0xba0b01ad; (* arm_ADCS X13 X13 X11 *) + 0x9b047ceb; (* arm_MUL X11 X7 X4 *) + 0x9bc47ce4; (* arm_UMULH X4 X7 X4 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b057ceb; (* arm_MUL X11 X7 X5 *) + 0x9bc57ce5; (* arm_UMULH X5 X7 X5 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a9f37e1; (* arm_CSET X1 Condition_CS *) + 0xab0901ad; (* arm_ADDS X13 X13 X9 *) + 0xba0301ce; (* arm_ADCS X14 X14 X3 *) + 0xba040000; (* arm_ADCS X0 X0 X4 *) + 0x9a050021; (* arm_ADC X1 X1 X5 *) + 0x91000428; (* arm_ADD X8 X1 (rvalue (word 1)) *) + 0x9b087ceb; (* arm_MUL X11 X7 X8 *) + 0x9bc87ce9; (* arm_UMULH X9 X7 X8 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0xba0901ad; (* arm_ADCS X13 X13 X9 *) + 0xba1f01ce; (* arm_ADCS X14 X14 XZR *) + 0xba1f0000; (* arm_ADCS X0 X0 XZR *) + 0x9a9f30e7; (* arm_CSEL X7 X7 XZR Condition_CC *) + 0xeb07018c; (* arm_SUBS X12 X12 X7 *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xda1f0000; (* arm_SBC X0 X0 XZR *) + 0xa90837ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&128))) *) + 0xa90903ee; (* arm_STP X14 X0 SP (Immediate_Offset (iword (&144))) *) + 0xa9481be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&128))) *) + 0xa9460fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&96))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa94923e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&144))) *) + 0xa9470fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&112))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xd2807a24; (* arm_MOV X4 (rvalue (word 977)) *) + 0xb2600083; (* arm_ORR X3 X4 (rvalue (word 4294967296)) *) + 0x9a9f3063; (* arm_CSEL X3 X3 XZR Condition_CC *) + 0xeb0300a5; (* arm_SUBS X5 X5 X3 *) + 0xfa1f00c6; (* arm_SBCS X6 X6 XZR *) + 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) + 0xda1f0108; (* arm_SBC X8 X8 XZR *) + 0xa90219e5; (* arm_STP X5 X6 X15 (Immediate_Offset (iword (&32))) *) + 0xa90321e7; (* arm_STP X7 X8 X15 (Immediate_Offset (iword (&48))) *) + 0x910383ff; (* arm_ADD SP SP (rvalue (word 224)) *) + 0xd65f03c0 (* arm_RET X30 *) +];; + +let SECP256K1_JADD_EXEC = ARM_MK_EXEC_RULE secp256k1_jadd_mc;; + +(* ------------------------------------------------------------------------- *) +(* Common supporting definitions and lemmas for component proofs. *) +(* ------------------------------------------------------------------------- *) + +let p_256k1 = new_definition `p_256k1 = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F`;; + +let p256k1redlemma = prove + (`!n. n <= (2 EXP 64 - 1) * (p_256k1 - 1) + ==> let q = n DIV 2 EXP 256 + 1 in + q < 2 EXP 64 /\ + q * p_256k1 <= n + p_256k1 /\ + n < q * p_256k1 + p_256k1`, + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN REWRITE_TAC[p_256k1] THEN ARITH_TAC);; + +let secp256k1 = define + `secp256k1 = (integer_mod_ring p_256k1,&0:int,&7:int)`;; + +let secp256k1_encode = new_definition + `secp256k1_encode = modular_encode(256,p_256k1)`;; + +let nintlemma = prove + (`&(num_of_int(x rem &p_256k1)) = x rem &p_256k1`, + MATCH_MP_TAC INT_OF_NUM_OF_INT THEN MATCH_MP_TAC INT_REM_POS THEN + REWRITE_TAC[INT_OF_NUM_EQ; p_256k1] THEN CONV_TAC NUM_REDUCE_CONV);; + +let unilemma0 = prove + (`x = a MOD p_256k1 ==> x < p_256k1 /\ &x = &a rem &p_256k1`, + REWRITE_TAC[INT_OF_NUM_REM; p_256k1] THEN ARITH_TAC);; + +let unilemma1 = prove + (`&x = a rem &p_256k1 ==> x < p_256k1 /\ &x = a rem &p_256k1`, + SIMP_TAC[GSYM INT_OF_NUM_LT; INT_LT_REM_EQ; p_256k1] THEN INT_ARITH_TAC);; + +let unilemma2 = prove + (`X = num_of_int(x rem &p_256k1) ==> X < p_256k1 /\ &X = x rem &p_256k1`, + DISCH_THEN SUBST1_TAC THEN + REWRITE_TAC[GSYM INT_OF_NUM_LT; nintlemma; INT_LT_REM_EQ] THEN + REWRITE_TAC[INT_OF_NUM_LT; p_256k1] THEN CONV_TAC NUM_REDUCE_CONV);; + +let lvs = + ["x_1",[`X16`;`0`]; + "y_1",[`X16`;`32`]; + "z_1",[`X16`;`64`]; + "x_2",[`X17`;`0`]; + "y_2",[`X17`;`32`]; + "z_2",[`X17`;`64`]; + "x_3",[`X15`;`0`]; + "y_3",[`X15`;`32`]; + "z_3",[`X15`;`64`]; + "z1sq",[`SP`;`0`]; + "ww",[`SP`;`0`]; + "yd",[`SP`;`32`]; + "y2a",[`SP`;`32`]; + "x2a",[`SP`;`64`]; + "zzx2",[`SP`;`64`]; + "zz",[`SP`;`96`]; + "t1",[`SP`;`96`]; + "t2",[`SP`;`128`]; + "x1a",[`SP`;`128`]; + "zzx1",[`SP`;`128`]; + "xd",[`SP`;`160`]; + "z2sq",[`SP`;`160`]; + "y1a",[`SP`;`192`]];; + +(* ------------------------------------------------------------------------- *) +(* Instances of sqr. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_SQR_P256K1_TAC = + ARM_MACRO_SIM_ABBREV_TAC secp256k1_jadd_mc 78 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1. + !n. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = n + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0x1994) (word_add (read p3 t) (word n3),32) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) secp256k1_jadd_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X15 s = read X15 t /\ + read X16 s = read X16 t /\ + read X17 s = read X17 t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) s = + n) + (\s. read PC s = pcout /\ + read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 4)) s = (n EXP 2) MOD p_256k1) + (MAYCHANGE [PC; X2; X3; X4; X5; X6; X7; X8; X9; + X10; X11; X12; X13; X14] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 4)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "n_" o lhand o concl) THEN + + (*** The initial squaring block, very similar to bignum_sqr_4_8 ***) + + ARM_ACCSTEPS_TAC SECP256K1_JADD_EXEC (1--45) (1--45) THEN + RULE_ASSUM_TAC(REWRITE_RULE[GSYM WORD_BITVAL; COND_SWAP]) THEN + MAP_EVERY ABBREV_TAC + [`l = bignum_of_wordlist[mullo_s31; sum_s33; sum_s35; sum_s37]`; + `h = bignum_of_wordlist[sum_s39; sum_s41; sum_s43; sum_s45]`] THEN + SUBGOAL_THEN `2 EXP 256 * h + l = n EXP 2` (SUBST1_TAC o SYM) THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"; "n"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_ARITH_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** The initial modular reduction of the high part ***) + + SUBGOAL_THEN + `(2 EXP 256 * h + l) MOD p_256k1 = (4294968273 * h + l) MOD p_256k1` + SUBST1_TAC THENL + [ONCE_REWRITE_TAC[GSYM MOD_ADD_MOD] THEN + ONCE_REWRITE_TAC[GSYM MOD_MULT_LMOD] THEN + REWRITE_TAC[p_256k1] THEN CONV_TAC NUM_REDUCE_CONV; + ALL_TAC] THEN + + (*** Instantiate the quotient approximation lemma ***) + + MP_TAC(SPEC `4294968273 * h + l` p256k1redlemma) THEN ANTS_TAC THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"] THEN REWRITE_TAC[p_256k1] THEN + CONV_TAC NUM_REDUCE_CONV THEN BOUNDER_TAC[]; + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN STRIP_TAC] THEN + + (*** Reduction from 8 digits to 5 digits ***) + + ARM_ACCSTEPS_TAC SECP256K1_JADD_EXEC (46--64) (46--64) THEN + RULE_ASSUM_TAC(REWRITE_RULE[COND_SWAP; GSYM WORD_BITVAL]) THEN + ABBREV_TAC + `ca = bignum_of_wordlist + [sum_s50; sum_s61; sum_s62; sum_s63; sum_s64]` THEN + SUBGOAL_THEN `(4294968273 * h + l) DIV 2 EXP 256 + 1 <= 2 EXP 33` + ASSUME_TAC THENL + [REWRITE_TAC[ARITH_RULE `a + 1 <= b <=> a < b`] THEN + SIMP_TAC[RDIV_LT_EQ; EXP_EQ_0; ARITH_EQ] THEN CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["h"; "l"] THEN BOUNDER_TAC[]; + ALL_TAC] THEN + SUBGOAL_THEN `4294968273 * h + l = ca` SUBST_ALL_TAC THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"; "ca"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_ARITH_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Quotient estimate computation ***) + + SUBGOAL_THEN `ca DIV 2 EXP 256 = val(sum_s64:int64)` SUBST_ALL_TAC THENL + [EXPAND_TAC "ca" THEN CONV_TAC(LAND_CONV BIGNUM_OF_WORDLIST_DIV_CONV) THEN + REFL_TAC; + FIRST_ASSUM(ASSUME_TAC o MATCH_MP (ARITH_RULE + `n + 1 < 2 EXP 64 ==> n < 2 EXP 64 - 1`))] THEN + ARM_STEPS_TAC SECP256K1_JADD_EXEC [93] THEN + ABBREV_TAC `q:int64 = word_add sum_s64 (word 1)` THEN + SUBGOAL_THEN `val(sum_s64:int64) + 1 = val(q:int64)` SUBST_ALL_TAC THENL + [EXPAND_TAC "q" THEN REWRITE_TAC[VAL_WORD_ADD; VAL_WORD_1] THEN + ASM_SIMP_TAC[DIMINDEX_64; MOD_LT]; + ALL_TAC] THEN + + (*** The rest of the computation ***) + + ARM_ACCSTEPS_TAC SECP256K1_JADD_EXEC (66--78) (66--78) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC MOD_UNIQ_BALANCED_REAL THEN + MAP_EVERY EXISTS_TAC [`val(q:int64)`; `256`] THEN ASM_REWRITE_TAC[] THEN + CONJ_TAC THENL [REWRITE_TAC[p_256k1] THEN ARITH_TAC; ALL_TAC] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN + + (*** Comparison computation and then the rest is easy ***) + + SUBGOAL_THEN `ca < val(q:int64) * p_256k1 <=> ~carry_s71` SUBST1_TAC THENL + [CONV_TAC SYM_CONV THEN MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN + EXISTS_TAC `256` THEN EXPAND_TAC "ca" THEN + REWRITE_TAC[p_256k1; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + REWRITE_TAC[REAL_BITVAL_NOT] THEN + SUBGOAL_THEN `&(val(sum_s64:int64)):real = &(val(q:int64)) - &1` + SUBST1_TAC THENL + [FIRST_X_ASSUM(MP_TAC o MATCH_MP (ARITH_RULE + `n < 2 EXP 64 - 1 ==> n + 1 < 2 EXP 64`)) THEN + UNDISCH_THEN + `word_add sum_s64 (word 1):int64 = q` (SUBST1_TAC o SYM) THEN + SIMP_TAC[VAL_WORD_ADD; VAL_WORD_1; DIMINDEX_64; MOD_LT] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN REAL_ARITH_TAC; + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]]; + EXPAND_TAC "ca" THEN + REWRITE_TAC[REAL_BITVAL_NOT] THEN + REWRITE_TAC[p_256k1; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + RULE_ASSUM_TAC(REWRITE_RULE[WORD_UNMASK_64]) THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + ASM_CASES_TAC `carry_s71:bool` THEN + ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN CONV_TAC WORD_REDUCE_CONV THEN + REAL_INTEGER_TAC]);; + +(* ------------------------------------------------------------------------- *) +(* Instances of mul. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_MUL_P256K1_TAC = + ARM_MACRO_SIM_ABBREV_TAC secp256k1_jadd_mc 100 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) t = n + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0x1994) (word_add (read p3 t) (word n3),32) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) secp256k1_jadd_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X15 s = read X15 t /\ + read X16 s = read X16 t /\ + read X17 s = read X17 t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) s = + n) + (\s. read PC s = pcout /\ + read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 4)) s = (m * n) MOD p_256k1) + (MAYCHANGE [PC; X0; X1; X3; X4; X5; X6; X7; X8; X9; + X10; X11; X12; X13; X14] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 4)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "m_" o lhand o concl) THEN + + (*** The initial multiply block, very similar to bignum_mul_4_8 ***) + + ARM_ACCSTEPS_TAC SECP256K1_JADD_EXEC (1--67) (1--67) THEN + MAP_EVERY ABBREV_TAC + [`l = bignum_of_wordlist[mullo_s3; sum_s18; sum_s35; sum_s52]`; + `h = bignum_of_wordlist[sum_s62; sum_s64; sum_s66; sum_s67]`] THEN + SUBGOAL_THEN `2 EXP 256 * h + l = m * n` (SUBST1_TAC o SYM) THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"; "m"; "n"] THEN + REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_ARITH_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** The initial modular reduction of the high part ***) + + SUBGOAL_THEN + `(2 EXP 256 * h + l) MOD p_256k1 = (4294968273 * h + l) MOD p_256k1` + SUBST1_TAC THENL + [ONCE_REWRITE_TAC[GSYM MOD_ADD_MOD] THEN + ONCE_REWRITE_TAC[GSYM MOD_MULT_LMOD] THEN + REWRITE_TAC[p_256k1] THEN CONV_TAC NUM_REDUCE_CONV; + ALL_TAC] THEN + + (*** Instantiate the quotient approximation lemma ***) + + MP_TAC(SPEC `4294968273 * h + l` p256k1redlemma) THEN ANTS_TAC THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"] THEN REWRITE_TAC[p_256k1] THEN + CONV_TAC NUM_REDUCE_CONV THEN BOUNDER_TAC[]; + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN STRIP_TAC] THEN + + (*** Reduction from 8 digits to 5 digits ***) + + ARM_ACCSTEPS_TAC SECP256K1_JADD_EXEC (68--86) (68--86) THEN + RULE_ASSUM_TAC(REWRITE_RULE[COND_SWAP; GSYM WORD_BITVAL]) THEN + ABBREV_TAC + `ca = bignum_of_wordlist + [sum_s72; sum_s83; sum_s84; sum_s85; sum_s86]` THEN + SUBGOAL_THEN `(4294968273 * h + l) DIV 2 EXP 256 + 1 <= 2 EXP 33` + ASSUME_TAC THENL + [REWRITE_TAC[ARITH_RULE `a + 1 <= b <=> a < b`] THEN + SIMP_TAC[RDIV_LT_EQ; EXP_EQ_0; ARITH_EQ] THEN CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["h"; "l"] THEN BOUNDER_TAC[]; + ALL_TAC] THEN + SUBGOAL_THEN `4294968273 * h + l = ca` SUBST_ALL_TAC THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"; "ca"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_ARITH_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Quotient estimate computation ***) + + SUBGOAL_THEN `ca DIV 2 EXP 256 = val(sum_s86:int64)` SUBST_ALL_TAC THENL + [EXPAND_TAC "ca" THEN CONV_TAC(LAND_CONV BIGNUM_OF_WORDLIST_DIV_CONV) THEN + REFL_TAC; + FIRST_ASSUM(ASSUME_TAC o MATCH_MP (ARITH_RULE + `n + 1 < 2 EXP 64 ==> n < 2 EXP 64 - 1`))] THEN + ARM_STEPS_TAC SECP256K1_JADD_EXEC [87] THEN + ABBREV_TAC `q:int64 = word_add sum_s86 (word 1)` THEN + SUBGOAL_THEN `val(sum_s86:int64) + 1 = val(q:int64)` SUBST_ALL_TAC THENL + [EXPAND_TAC "q" THEN REWRITE_TAC[VAL_WORD_ADD; VAL_WORD_1] THEN + ASM_SIMP_TAC[DIMINDEX_64; MOD_LT]; + ALL_TAC] THEN + + (*** The rest of the computation ***) + + ARM_ACCSTEPS_TAC SECP256K1_JADD_EXEC (88--100) (88--100) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC MOD_UNIQ_BALANCED_REAL THEN + MAP_EVERY EXISTS_TAC [`val(q:int64)`; `256`] THEN ASM_REWRITE_TAC[] THEN + CONJ_TAC THENL [REWRITE_TAC[p_256k1] THEN ARITH_TAC; ALL_TAC] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN + + (*** Comparison computation and then the rest is easy ***) + + SUBGOAL_THEN `ca < val(q:int64) * p_256k1 <=> ~carry_s93` SUBST1_TAC THENL + [CONV_TAC SYM_CONV THEN MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN + EXISTS_TAC `256` THEN EXPAND_TAC "ca" THEN + REWRITE_TAC[p_256k1; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + REWRITE_TAC[REAL_BITVAL_NOT] THEN + SUBGOAL_THEN `&(val(sum_s86:int64)):real = &(val(q:int64)) - &1` + SUBST1_TAC THENL + [FIRST_X_ASSUM(MP_TAC o MATCH_MP (ARITH_RULE + `n < 2 EXP 64 - 1 ==> n + 1 < 2 EXP 64`)) THEN + UNDISCH_THEN + `word_add sum_s86 (word 1):int64 = q` (SUBST1_TAC o SYM) THEN + SIMP_TAC[VAL_WORD_ADD; VAL_WORD_1; DIMINDEX_64; MOD_LT] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN REAL_ARITH_TAC; + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]]; + EXPAND_TAC "ca" THEN + REWRITE_TAC[REAL_BITVAL_NOT] THEN + REWRITE_TAC[p_256k1; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + RULE_ASSUM_TAC(REWRITE_RULE[WORD_UNMASK_64]) THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + ASM_CASES_TAC `carry_s93:bool` THEN + ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN CONV_TAC WORD_REDUCE_CONV THEN + REAL_INTEGER_TAC]);; + +(* ------------------------------------------------------------------------- *) +(* Instances of sub. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_SUB_P256K1_TAC = + ARM_MACRO_SIM_ABBREV_TAC secp256k1_jadd_mc 17 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) t = n + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0x1994) (word_add (read p3 t) (word n3),32) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) secp256k1_jadd_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X15 s = read X15 t /\ + read X16 s = read X16 t /\ + read X17 s = read X17 t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) s = + n) + (\s. read PC s = pcout /\ + (m < p_256k1 /\ n < p_256k1 + ==> &(read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 4)) s) = (&m - &n) rem &p_256k1)) + (MAYCHANGE [PC; X3; X4; X5; X6; X7; X8] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 4)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "m_" o lhand o concl) THEN + + ARM_ACCSTEPS_TAC SECP256K1_JADD_EXEC (1--8) (1--8) THEN + + SUBGOAL_THEN `carry_s8 <=> m < n` SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN EXISTS_TAC `256` THEN + MAP_EVERY EXPAND_TAC ["m"; "n"] THEN REWRITE_TAC[GSYM REAL_OF_NUM_ADD] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_MUL; GSYM REAL_OF_NUM_POW] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ALL_TAC] THEN + + ARM_ACCSTEPS_TAC SECP256K1_JADD_EXEC (12--17) (9--17) THEN + + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN STRIP_TAC THEN + CONV_TAC(LAND_CONV(RAND_CONV BIGNUM_EXPAND_CONV)) THEN + ASM_REWRITE_TAC[] THEN DISCARD_STATE_TAC "s17" THEN + + CONV_TAC SYM_CONV THEN MATCH_MP_TAC INT_REM_UNIQ THEN + EXISTS_TAC `--(&(bitval(m < n))):int` THEN REWRITE_TAC[INT_ABS_NUM] THEN + REWRITE_TAC[INT_ARITH `m - n:int = --b * p + z <=> z = b * p + m - n`] THEN + REWRITE_TAC[int_eq; int_le; int_lt] THEN + REWRITE_TAC[int_add_th; int_mul_th; int_of_num_th; int_sub_th] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_ADD; GSYM REAL_OF_NUM_MUL; + GSYM REAL_OF_NUM_POW] THEN + MATCH_MP_TAC(REAL_ARITH + `!t:real. p < t /\ + (&0 <= a /\ a < p) /\ + (&0 <= z /\ z < t) /\ + ((&0 <= z /\ z < t) /\ (&0 <= a /\ a < t) ==> z = a) + ==> z = a /\ &0 <= z /\ z < p`) THEN + EXISTS_TAC `(&2:real) pow 256` THEN + + CONJ_TAC THENL [REWRITE_TAC[p_256k1] THEN REAL_ARITH_TAC; ALL_TAC] THEN + CONJ_TAC THENL + [MAP_EVERY UNDISCH_TAC [`m < p_256k1`; `n < p_256k1`] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_LT] THEN + ASM_CASES_TAC `&m:real < &n` THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + POP_ASSUM MP_TAC THEN REWRITE_TAC[p_256k1] THEN REAL_ARITH_TAC; + ALL_TAC] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; STRIP_TAC] THEN + + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`256`; `&0:real`] THEN + ASM_REWRITE_TAC[] THEN + CONJ_TAC THENL [REAL_INTEGER_TAC; ALL_TAC] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC WORD_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["m"; "n"] THEN REWRITE_TAC[GSYM REAL_OF_NUM_ADD] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_MUL; GSYM REAL_OF_NUM_POW; p_256k1] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + CONV_TAC(RAND_CONV REAL_POLY_CONV) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Overall point operation proof. *) +(* ------------------------------------------------------------------------- *) + +let SECP256K1_JADD_CORRECT = time prove + (`!p3 p1 t1 p2 t2 pc stackpointer. + aligned 16 stackpointer /\ + ALLPAIRS nonoverlapping + [(p3,96); (stackpointer,224)] + [(word pc,0x1994); (p1,96); (p2,96)] /\ + nonoverlapping (p3,96) (stackpointer,224) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) secp256k1_jadd_mc /\ + read PC s = word(pc + 0x4) /\ + read SP s = stackpointer /\ + C_ARGUMENTS [p3; p1; p2] s /\ + bignum_triple_from_memory (p1,4) s = t1 /\ + bignum_triple_from_memory (p2,4) s = t2) + (\s. read PC s = word (pc + 0x198c) /\ + (!x1 y1 z1 x2 y2 z2. + ~(z1 = &0) /\ ~(z2 = &0) /\ + ~(jacobian_eq (integer_mod_ring p_256k1) + (x1,y1,z1) (x2,y2,z2)) /\ + ~(jacobian_eq (integer_mod_ring p_256k1) + (jacobian_neg secp256k1 (x1,y1,z1)) + (x2,y2,z2)) /\ + t1 = tripled secp256k1_encode (x1,y1,z1) /\ + t2 = tripled secp256k1_encode (x2,y2,z2) + ==> bignum_triple_from_memory(p3,4) s = + tripled secp256k1_encode + (jacobian_add secp256k1 (x1,y1,z1) (x2,y2,z2)))) + (MAYCHANGE [PC; X0; X1; X2; X3; X4; X5; X6; X7; X8; X9; X10; + X11; X12; X13; X14; X15; X16; X17] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,96); + memory :> bytes(stackpointer,224)])`, + REWRITE_TAC[FORALL_PAIR_THM] THEN + MAP_EVERY X_GEN_TAC + [`p3:int64`; `p1:int64`; `x1:num`; `y1:num`; `z1:num`; `p2:int64`; + `x2:num`; `y2:num`; `z2:num`; `pc:num`; `stackpointer:int64`] THEN + REWRITE_TAC[ALLPAIRS; ALL; NONOVERLAPPING_CLAUSES] THEN STRIP_TAC THEN + REWRITE_TAC[C_ARGUMENTS; SOME_FLAGS; PAIR_EQ; bignum_triple_from_memory] THEN + CONV_TAC(ONCE_DEPTH_CONV NUM_MULT_CONV) THEN + CONV_TAC(ONCE_DEPTH_CONV NORMALIZE_RELATIVE_ADDRESS_CONV) THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + + LOCAL_SQR_P256K1_TAC 3 ["z1sq";"z_1"] THEN + LOCAL_SQR_P256K1_TAC 0 ["z2sq";"z_2"] THEN + LOCAL_MUL_P256K1_TAC 0 ["y1a";"z_2";"y_1"] THEN + LOCAL_MUL_P256K1_TAC 0 ["y2a";"z_1";"y_2"] THEN + LOCAL_MUL_P256K1_TAC 0 ["x2a";"z1sq";"x_2"] THEN + LOCAL_MUL_P256K1_TAC 0 ["x1a";"z2sq";"x_1"] THEN + LOCAL_MUL_P256K1_TAC 0 ["y2a";"z1sq";"y2a"] THEN + LOCAL_MUL_P256K1_TAC 0 ["y1a";"z2sq";"y1a"] THEN + LOCAL_SUB_P256K1_TAC 0 ["xd";"x2a";"x1a"] THEN + LOCAL_SUB_P256K1_TAC 0 ["yd";"y2a";"y1a"] THEN + LOCAL_SQR_P256K1_TAC 0 ["zz";"xd"] THEN + LOCAL_SQR_P256K1_TAC 0 ["ww";"yd"] THEN + LOCAL_MUL_P256K1_TAC 0 ["zzx1";"zz";"x1a"] THEN + LOCAL_MUL_P256K1_TAC 0 ["zzx2";"zz";"x2a"] THEN + LOCAL_SUB_P256K1_TAC 0 ["x_3";"ww";"zzx1"] THEN + LOCAL_SUB_P256K1_TAC 0 ["t1";"zzx2";"zzx1"] THEN + LOCAL_MUL_P256K1_TAC 0 ["xd";"xd";"z_1"] THEN + LOCAL_SUB_P256K1_TAC 0 ["x_3";"x_3";"zzx2"] THEN + LOCAL_SUB_P256K1_TAC 0 ["t2";"zzx1";"x_3"] THEN + LOCAL_MUL_P256K1_TAC 0 ["t1";"t1";"y1a"] THEN + LOCAL_MUL_P256K1_TAC 0 ["z_3";"xd";"z_2"] THEN + LOCAL_MUL_P256K1_TAC 0 ["t2";"yd";"t2"] THEN + LOCAL_SUB_P256K1_TAC 0 ["y_3";"t2";"t1"] THEN + + (*** Remove some assumptions slowing down SUBSUMED_MAYCHANGE_TAC ***) + + FIRST_X_ASSUM(MP_TAC o + check (can (term_match [] `(MAYCHANGE a ,, b) s s'` o concl))) THEN + POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o rev) THEN + DISCH_THEN(fun th -> DISCH_TAC THEN ENSURES_FINAL_STATE_TAC THEN MP_TAC th) THEN + STRIP_TAC THEN ASM_REWRITE_TAC[] THEN + DISCARD_STATE_TAC "s26" THEN + DISCARD_MATCHING_ASSUMPTIONS [`nonoverlapping_modulo a b c`] THEN + MAP_EVERY X_GEN_TAC + [`x1':int`; `y1':int`; `z1':int`; `x2':int`; `y2':int`; `z2':int`] THEN + REPLICATE_TAC 4 (DISCH_THEN(CONJUNCTS_THEN2 ASSUME_TAC MP_TAC)) THEN + REWRITE_TAC[tripled; secp256k1_encode; PAIR_EQ; modular_encode] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN + (STRIP_ASSUME_TAC o MATCH_MP unilemma2)) THEN + + (*** Dispose of any range hypotheses ***) + + REPEAT(FIRST_X_ASSUM(MP_TAC o check (is_imp o concl))) THEN + REPEAT(ANTS_TAC THENL + [REWRITE_TAC[p_256k1] THEN RULE_ASSUM_TAC(REWRITE_RULE[p_256k1]) THEN + CONV_TAC NUM_REDUCE_CONV THEN ASM BOUNDER_TAC[]; + (DISCH_THEN(STRIP_ASSUME_TAC o MATCH_MP unilemma0) ORELSE + DISCH_THEN(STRIP_ASSUME_TAC o MATCH_MP unilemma1))]) THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o GEN_REWRITE_RULE I [GSYM NOT_LE])) THEN + + (*** Now push the moduli around then do the algebra ***) + + RULE_ASSUM_TAC(REWRITE_RULE + [num_congruent; GSYM INT_OF_NUM_CLAUSES; GSYM INT_OF_NUM_REM]) THEN + ASM_REWRITE_TAC[tripled; jacobian_add; secp256k1] THEN + ASM_REWRITE_TAC[GSYM secp256k1] THEN + REWRITE_TAC[INTEGER_MOD_RING_CLAUSES] THEN + CONV_TAC INT_REDUCE_CONV THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN + CONV_TAC INT_REM_DOWN_CONV THEN + REWRITE_TAC[tripled; modular_encode] THEN + REWRITE_TAC[PAIR_EQ; GSYM INT_OF_NUM_EQ; nintlemma] THEN + CONV_TAC INT_REM_DOWN_CONV THEN + REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES; GSYM INT_OF_NUM_REM] THEN + ASM_REWRITE_TAC[] THEN CONV_TAC INT_REM_DOWN_CONV THEN + REPEAT CONJ_TAC THEN AP_THM_TAC THEN AP_TERM_TAC THEN + INT_ARITH_TAC);; + +let SECP256K1_JADD_SUBROUTINE_CORRECT = time prove + (`!p3 p1 t1 p2 t2 pc stackpointer returnaddress. + aligned 16 stackpointer /\ + ALLPAIRS nonoverlapping + [(p3,96); (word_sub stackpointer (word 224),224)] + [(word pc,0x1994); (p1,96); (p2,96)] /\ + nonoverlapping (p3,96) (word_sub stackpointer (word 224),224) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) secp256k1_jadd_mc /\ + read PC s = word pc /\ + read SP s = stackpointer /\ + read X30 s = returnaddress /\ + C_ARGUMENTS [p3; p1; p2] s /\ + bignum_triple_from_memory (p1,4) s = t1 /\ + bignum_triple_from_memory (p2,4) s = t2) + (\s. read PC s = returnaddress /\ + (!x1 y1 z1 x2 y2 z2. + ~(z1 = &0) /\ ~(z2 = &0) /\ + ~(jacobian_eq (integer_mod_ring p_256k1) + (x1,y1,z1) (x2,y2,z2)) /\ + ~(jacobian_eq (integer_mod_ring p_256k1) + (jacobian_neg secp256k1 (x1,y1,z1)) + (x2,y2,z2)) /\ + t1 = tripled secp256k1_encode (x1,y1,z1) /\ + t2 = tripled secp256k1_encode (x2,y2,z2) + ==> bignum_triple_from_memory(p3,4) s = + tripled secp256k1_encode + (jacobian_add secp256k1 (x1,y1,z1) (x2,y2,z2)))) + (MAYCHANGE [PC; X0; X1; X2; X3; X4; X5; X6; X7; X8; X9; X10; + X11; X12; X13; X14; X15; X16; X17] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,96); + memory :> bytes(word_sub stackpointer (word 224),224)])`, + ARM_ADD_RETURN_STACK_TAC SECP256K1_JADD_EXEC + SECP256K1_JADD_CORRECT `[]` 224);; diff --git a/arm/proofs/secp256k1_jdouble.ml b/arm/proofs/secp256k1_jdouble.ml new file mode 100644 index 0000000000..398d4f0216 --- /dev/null +++ b/arm/proofs/secp256k1_jdouble.ml @@ -0,0 +1,2110 @@ +(* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + *) + +(* ========================================================================= *) +(* Point doubling in Jacobian coordinates for SECG secp256k1 curve. *) +(* ========================================================================= *) + +needs "arm/proofs/base.ml";; +needs "common/ecencoding.ml";; +needs "EC/jacobian.ml";; +needs "EC/secp256k1.ml";; + +prioritize_int();; +prioritize_real();; +prioritize_num();; + +(**** print_literal_from_elf "arm/secp256k1/secp256k1_jdouble.o";; + ****) + +let secp256k1_jdouble_mc = define_assert_from_elf + "secp256k1_jdouble_mc" "arm/secp256k1/secp256k1_jdouble.o" +[ + 0xd10603ff; (* arm_SUB SP SP (rvalue (word 384)) *) + 0xaa0003ef; (* arm_MOV X15 X0 *) + 0xaa0103f0; (* arm_MOV X16 X1 *) + 0xd2807a31; (* arm_MOV X17 (rvalue (word 977)) *) + 0xb2600231; (* arm_ORR X17 X17 (rvalue (word 4294967296)) *) + 0xa9420e02; (* arm_LDP X2 X3 X16 (Immediate_Offset (iword (&32))) *) + 0x9b037c49; (* arm_MUL X9 X2 X3 *) + 0x9bc37c4a; (* arm_UMULH X10 X2 X3 *) + 0xa9431604; (* arm_LDP X4 X5 X16 (Immediate_Offset (iword (&48))) *) + 0x9b057c4b; (* arm_MUL X11 X2 X5 *) + 0x9bc57c4c; (* arm_UMULH X12 X2 X5 *) + 0x9b047c47; (* arm_MUL X7 X2 X4 *) + 0x9bc47c46; (* arm_UMULH X6 X2 X4 *) + 0xab07014a; (* arm_ADDS X10 X10 X7 *) + 0xba06016b; (* arm_ADCS X11 X11 X6 *) + 0x9b047c67; (* arm_MUL X7 X3 X4 *) + 0x9bc47c66; (* arm_UMULH X6 X3 X4 *) + 0x9a1f00c6; (* arm_ADC X6 X6 XZR *) + 0xab07016b; (* arm_ADDS X11 X11 X7 *) + 0x9b057c8d; (* arm_MUL X13 X4 X5 *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xba06018c; (* arm_ADCS X12 X12 X6 *) + 0x9b057c67; (* arm_MUL X7 X3 X5 *) + 0x9bc57c66; (* arm_UMULH X6 X3 X5 *) + 0x9a1f00c6; (* arm_ADC X6 X6 XZR *) + 0xab07018c; (* arm_ADDS X12 X12 X7 *) + 0xba0601ad; (* arm_ADCS X13 X13 X6 *) + 0x9a1f01ce; (* arm_ADC X14 X14 XZR *) + 0xab090129; (* arm_ADDS X9 X9 X9 *) + 0xba0a014a; (* arm_ADCS X10 X10 X10 *) + 0xba0b016b; (* arm_ADCS X11 X11 X11 *) + 0xba0c018c; (* arm_ADCS X12 X12 X12 *) + 0xba0d01ad; (* arm_ADCS X13 X13 X13 *) + 0xba0e01ce; (* arm_ADCS X14 X14 X14 *) + 0x9a9f37e6; (* arm_CSET X6 Condition_CS *) + 0x9bc27c47; (* arm_UMULH X7 X2 X2 *) + 0x9b027c48; (* arm_MUL X8 X2 X2 *) + 0xab070129; (* arm_ADDS X9 X9 X7 *) + 0x9b037c67; (* arm_MUL X7 X3 X3 *) + 0xba07014a; (* arm_ADCS X10 X10 X7 *) + 0x9bc37c67; (* arm_UMULH X7 X3 X3 *) + 0xba07016b; (* arm_ADCS X11 X11 X7 *) + 0x9b047c87; (* arm_MUL X7 X4 X4 *) + 0xba07018c; (* arm_ADCS X12 X12 X7 *) + 0x9bc47c87; (* arm_UMULH X7 X4 X4 *) + 0xba0701ad; (* arm_ADCS X13 X13 X7 *) + 0x9b057ca7; (* arm_MUL X7 X5 X5 *) + 0xba0701ce; (* arm_ADCS X14 X14 X7 *) + 0x9bc57ca7; (* arm_UMULH X7 X5 X5 *) + 0x9a0700c6; (* arm_ADC X6 X6 X7 *) + 0x9b0c7e27; (* arm_MUL X7 X17 X12 *) + 0x9bcc7e24; (* arm_UMULH X4 X17 X12 *) + 0xab070108; (* arm_ADDS X8 X8 X7 *) + 0x9b0d7e27; (* arm_MUL X7 X17 X13 *) + 0x9bcd7e2d; (* arm_UMULH X13 X17 X13 *) + 0xba070129; (* arm_ADCS X9 X9 X7 *) + 0x9b0e7e27; (* arm_MUL X7 X17 X14 *) + 0x9bce7e2e; (* arm_UMULH X14 X17 X14 *) + 0xba07014a; (* arm_ADCS X10 X10 X7 *) + 0x9b067e27; (* arm_MUL X7 X17 X6 *) + 0x9bc67e26; (* arm_UMULH X6 X17 X6 *) + 0xba07016b; (* arm_ADCS X11 X11 X7 *) + 0x9a9f37ec; (* arm_CSET X12 Condition_CS *) + 0xab040129; (* arm_ADDS X9 X9 X4 *) + 0xba0d014a; (* arm_ADCS X10 X10 X13 *) + 0xba0e016b; (* arm_ADCS X11 X11 X14 *) + 0x9a06018c; (* arm_ADC X12 X12 X6 *) + 0x91000582; (* arm_ADD X2 X12 (rvalue (word 1)) *) + 0x9b027e27; (* arm_MUL X7 X17 X2 *) + 0x9bc27e26; (* arm_UMULH X6 X17 X2 *) + 0xab070108; (* arm_ADDS X8 X8 X7 *) + 0xba060129; (* arm_ADCS X9 X9 X6 *) + 0xba1f014a; (* arm_ADCS X10 X10 XZR *) + 0xba1f016b; (* arm_ADCS X11 X11 XZR *) + 0x9a9f3223; (* arm_CSEL X3 X17 XZR Condition_CC *) + 0xeb030108; (* arm_SUBS X8 X8 X3 *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xda1f016b; (* arm_SBC X11 X11 XZR *) + 0xa90227e8; (* arm_STP X8 X9 SP (Immediate_Offset (iword (&32))) *) + 0xa9032fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&48))) *) + 0xa9400e02; (* arm_LDP X2 X3 X16 (Immediate_Offset (iword (&0))) *) + 0x9b037c49; (* arm_MUL X9 X2 X3 *) + 0x9bc37c4a; (* arm_UMULH X10 X2 X3 *) + 0xa9411604; (* arm_LDP X4 X5 X16 (Immediate_Offset (iword (&16))) *) + 0x9b057c4b; (* arm_MUL X11 X2 X5 *) + 0x9bc57c4c; (* arm_UMULH X12 X2 X5 *) + 0x9b047c47; (* arm_MUL X7 X2 X4 *) + 0x9bc47c46; (* arm_UMULH X6 X2 X4 *) + 0xab07014a; (* arm_ADDS X10 X10 X7 *) + 0xba06016b; (* arm_ADCS X11 X11 X6 *) + 0x9b047c67; (* arm_MUL X7 X3 X4 *) + 0x9bc47c66; (* arm_UMULH X6 X3 X4 *) + 0x9a1f00c6; (* arm_ADC X6 X6 XZR *) + 0xab07016b; (* arm_ADDS X11 X11 X7 *) + 0x9b057c8d; (* arm_MUL X13 X4 X5 *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xba06018c; (* arm_ADCS X12 X12 X6 *) + 0x9b057c67; (* arm_MUL X7 X3 X5 *) + 0x9bc57c66; (* arm_UMULH X6 X3 X5 *) + 0x9a1f00c6; (* arm_ADC X6 X6 XZR *) + 0xab07018c; (* arm_ADDS X12 X12 X7 *) + 0xba0601ad; (* arm_ADCS X13 X13 X6 *) + 0x9a1f01ce; (* arm_ADC X14 X14 XZR *) + 0xab090129; (* arm_ADDS X9 X9 X9 *) + 0xba0a014a; (* arm_ADCS X10 X10 X10 *) + 0xba0b016b; (* arm_ADCS X11 X11 X11 *) + 0xba0c018c; (* arm_ADCS X12 X12 X12 *) + 0xba0d01ad; (* arm_ADCS X13 X13 X13 *) + 0xba0e01ce; (* arm_ADCS X14 X14 X14 *) + 0x9a9f37e6; (* arm_CSET X6 Condition_CS *) + 0x9bc27c47; (* arm_UMULH X7 X2 X2 *) + 0x9b027c48; (* arm_MUL X8 X2 X2 *) + 0xab070129; (* arm_ADDS X9 X9 X7 *) + 0x9b037c67; (* arm_MUL X7 X3 X3 *) + 0xba07014a; (* arm_ADCS X10 X10 X7 *) + 0x9bc37c67; (* arm_UMULH X7 X3 X3 *) + 0xba07016b; (* arm_ADCS X11 X11 X7 *) + 0x9b047c87; (* arm_MUL X7 X4 X4 *) + 0xba07018c; (* arm_ADCS X12 X12 X7 *) + 0x9bc47c87; (* arm_UMULH X7 X4 X4 *) + 0xba0701ad; (* arm_ADCS X13 X13 X7 *) + 0x9b057ca7; (* arm_MUL X7 X5 X5 *) + 0xba0701ce; (* arm_ADCS X14 X14 X7 *) + 0x9bc57ca7; (* arm_UMULH X7 X5 X5 *) + 0x9a0700c6; (* arm_ADC X6 X6 X7 *) + 0x9b0c7e27; (* arm_MUL X7 X17 X12 *) + 0x9bcc7e24; (* arm_UMULH X4 X17 X12 *) + 0xab070108; (* arm_ADDS X8 X8 X7 *) + 0x9b0d7e27; (* arm_MUL X7 X17 X13 *) + 0x9bcd7e2d; (* arm_UMULH X13 X17 X13 *) + 0xba070129; (* arm_ADCS X9 X9 X7 *) + 0x9b0e7e27; (* arm_MUL X7 X17 X14 *) + 0x9bce7e2e; (* arm_UMULH X14 X17 X14 *) + 0xba07014a; (* arm_ADCS X10 X10 X7 *) + 0x9b067e27; (* arm_MUL X7 X17 X6 *) + 0x9bc67e26; (* arm_UMULH X6 X17 X6 *) + 0xba07016b; (* arm_ADCS X11 X11 X7 *) + 0x9a9f37ec; (* arm_CSET X12 Condition_CS *) + 0xab040129; (* arm_ADDS X9 X9 X4 *) + 0xba0d014a; (* arm_ADCS X10 X10 X13 *) + 0xba0e016b; (* arm_ADCS X11 X11 X14 *) + 0x9a06018c; (* arm_ADC X12 X12 X6 *) + 0x91000582; (* arm_ADD X2 X12 (rvalue (word 1)) *) + 0x9b027e27; (* arm_MUL X7 X17 X2 *) + 0x9bc27e26; (* arm_UMULH X6 X17 X2 *) + 0xab070108; (* arm_ADDS X8 X8 X7 *) + 0xba060129; (* arm_ADCS X9 X9 X6 *) + 0xba1f014a; (* arm_ADCS X10 X10 XZR *) + 0xba1f016b; (* arm_ADCS X11 X11 XZR *) + 0x9a9f3223; (* arm_CSEL X3 X17 XZR Condition_CC *) + 0xeb030108; (* arm_SUBS X8 X8 X3 *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xda1f016b; (* arm_SBC X11 X11 XZR *) + 0xa90027e8; (* arm_STP X8 X9 SP (Immediate_Offset (iword (&0))) *) + 0xa9012fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&16))) *) + 0xa9420a01; (* arm_LDP X1 X2 X16 (Immediate_Offset (iword (&32))) *) + 0xd37ff820; (* arm_LSL X0 X1 1 *) + 0xa9431203; (* arm_LDP X3 X4 X16 (Immediate_Offset (iword (&48))) *) + 0xf241009f; (* arm_TST X4 (rvalue (word 9223372036854775808)) *) + 0x9a9f1225; (* arm_CSEL X5 X17 XZR Condition_NE *) + 0x93c1fc41; (* arm_EXTR X1 X2 X1 63 *) + 0xab050000; (* arm_ADDS X0 X0 X5 *) + 0x93c2fc62; (* arm_EXTR X2 X3 X2 63 *) + 0xba1f0021; (* arm_ADCS X1 X1 XZR *) + 0x93c3fc83; (* arm_EXTR X3 X4 X3 63 *) + 0xba1f0042; (* arm_ADCS X2 X2 XZR *) + 0xa90607e0; (* arm_STP X0 X1 SP (Immediate_Offset (iword (&96))) *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0xa9070fe2; (* arm_STP X2 X3 SP (Immediate_Offset (iword (&112))) *) + 0xa9401203; (* arm_LDP X3 X4 X16 (Immediate_Offset (iword (&0))) *) + 0xa94223e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&32))) *) + 0x9b077c6c; (* arm_MUL X12 X3 X7 *) + 0x9bc77c6d; (* arm_UMULH X13 X3 X7 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa9432be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&48))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c60; (* arm_UMULH X0 X3 X9 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c61; (* arm_UMULH X1 X3 X10 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0xa9411a05; (* arm_LDP X5 X6 X16 (Immediate_Offset (iword (&16))) *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bca7c83; (* arm_UMULH X3 X4 X10 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9b077cab; (* arm_MUL X11 X5 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b087cab; (* arm_MUL X11 X5 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b097cab; (* arm_MUL X11 X5 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b0a7cab; (* arm_MUL X11 X5 X10 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bca7ca4; (* arm_UMULH X4 X5 X10 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9bc77cab; (* arm_UMULH X11 X5 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9bc87cab; (* arm_UMULH X11 X5 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bc97cab; (* arm_UMULH X11 X5 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b077ccb; (* arm_MUL X11 X6 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9b087ccb; (* arm_MUL X11 X6 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b097ccb; (* arm_MUL X11 X6 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9b0a7ccb; (* arm_MUL X11 X6 X10 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9bca7cc5; (* arm_UMULH X5 X6 X10 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0x9bc77ccb; (* arm_UMULH X11 X6 X7 *) + 0xab0b0021; (* arm_ADDS X1 X1 X11 *) + 0x9bc87ccb; (* arm_UMULH X11 X6 X8 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bc97ccb; (* arm_UMULH X11 X6 X9 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0x9b017e2b; (* arm_MUL X11 X17 X1 *) + 0x9bc17e29; (* arm_UMULH X9 X17 X1 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0x9b037e2b; (* arm_MUL X11 X17 X3 *) + 0x9bc37e23; (* arm_UMULH X3 X17 X3 *) + 0xba0b01ad; (* arm_ADCS X13 X13 X11 *) + 0x9b047e2b; (* arm_MUL X11 X17 X4 *) + 0x9bc47e24; (* arm_UMULH X4 X17 X4 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b057e2b; (* arm_MUL X11 X17 X5 *) + 0x9bc57e25; (* arm_UMULH X5 X17 X5 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a9f37e1; (* arm_CSET X1 Condition_CS *) + 0xab0901ad; (* arm_ADDS X13 X13 X9 *) + 0xba0301ce; (* arm_ADCS X14 X14 X3 *) + 0xba040000; (* arm_ADCS X0 X0 X4 *) + 0x9a050021; (* arm_ADC X1 X1 X5 *) + 0xa91437ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&320))) *) + 0xa91503ee; (* arm_STP X14 X0 SP (Immediate_Offset (iword (&336))) *) + 0xf900b3e1; (* arm_STR X1 SP (Immediate_Offset (word 352)) *) + 0xa9400fe2; (* arm_LDP X2 X3 SP (Immediate_Offset (iword (&0))) *) + 0x9b037c49; (* arm_MUL X9 X2 X3 *) + 0x9bc37c4a; (* arm_UMULH X10 X2 X3 *) + 0xa94117e4; (* arm_LDP X4 X5 SP (Immediate_Offset (iword (&16))) *) + 0x9b057c4b; (* arm_MUL X11 X2 X5 *) + 0x9bc57c4c; (* arm_UMULH X12 X2 X5 *) + 0x9b047c47; (* arm_MUL X7 X2 X4 *) + 0x9bc47c46; (* arm_UMULH X6 X2 X4 *) + 0xab07014a; (* arm_ADDS X10 X10 X7 *) + 0xba06016b; (* arm_ADCS X11 X11 X6 *) + 0x9b047c67; (* arm_MUL X7 X3 X4 *) + 0x9bc47c66; (* arm_UMULH X6 X3 X4 *) + 0x9a1f00c6; (* arm_ADC X6 X6 XZR *) + 0xab07016b; (* arm_ADDS X11 X11 X7 *) + 0x9b057c8d; (* arm_MUL X13 X4 X5 *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xba06018c; (* arm_ADCS X12 X12 X6 *) + 0x9b057c67; (* arm_MUL X7 X3 X5 *) + 0x9bc57c66; (* arm_UMULH X6 X3 X5 *) + 0x9a1f00c6; (* arm_ADC X6 X6 XZR *) + 0xab07018c; (* arm_ADDS X12 X12 X7 *) + 0xba0601ad; (* arm_ADCS X13 X13 X6 *) + 0x9a1f01ce; (* arm_ADC X14 X14 XZR *) + 0xab090129; (* arm_ADDS X9 X9 X9 *) + 0xba0a014a; (* arm_ADCS X10 X10 X10 *) + 0xba0b016b; (* arm_ADCS X11 X11 X11 *) + 0xba0c018c; (* arm_ADCS X12 X12 X12 *) + 0xba0d01ad; (* arm_ADCS X13 X13 X13 *) + 0xba0e01ce; (* arm_ADCS X14 X14 X14 *) + 0x9a9f37e6; (* arm_CSET X6 Condition_CS *) + 0x9bc27c47; (* arm_UMULH X7 X2 X2 *) + 0x9b027c48; (* arm_MUL X8 X2 X2 *) + 0xab070129; (* arm_ADDS X9 X9 X7 *) + 0x9b037c67; (* arm_MUL X7 X3 X3 *) + 0xba07014a; (* arm_ADCS X10 X10 X7 *) + 0x9bc37c67; (* arm_UMULH X7 X3 X3 *) + 0xba07016b; (* arm_ADCS X11 X11 X7 *) + 0x9b047c87; (* arm_MUL X7 X4 X4 *) + 0xba07018c; (* arm_ADCS X12 X12 X7 *) + 0x9bc47c87; (* arm_UMULH X7 X4 X4 *) + 0xba0701ad; (* arm_ADCS X13 X13 X7 *) + 0x9b057ca7; (* arm_MUL X7 X5 X5 *) + 0xba0701ce; (* arm_ADCS X14 X14 X7 *) + 0x9bc57ca7; (* arm_UMULH X7 X5 X5 *) + 0x9a0700c6; (* arm_ADC X6 X6 X7 *) + 0x9b0c7e27; (* arm_MUL X7 X17 X12 *) + 0x9bcc7e24; (* arm_UMULH X4 X17 X12 *) + 0xab070108; (* arm_ADDS X8 X8 X7 *) + 0x9b0d7e27; (* arm_MUL X7 X17 X13 *) + 0x9bcd7e2d; (* arm_UMULH X13 X17 X13 *) + 0xba070129; (* arm_ADCS X9 X9 X7 *) + 0x9b0e7e27; (* arm_MUL X7 X17 X14 *) + 0x9bce7e2e; (* arm_UMULH X14 X17 X14 *) + 0xba07014a; (* arm_ADCS X10 X10 X7 *) + 0x9b067e27; (* arm_MUL X7 X17 X6 *) + 0x9bc67e26; (* arm_UMULH X6 X17 X6 *) + 0xba07016b; (* arm_ADCS X11 X11 X7 *) + 0x9a9f37ec; (* arm_CSET X12 Condition_CS *) + 0xab040129; (* arm_ADDS X9 X9 X4 *) + 0xba0d014a; (* arm_ADCS X10 X10 X13 *) + 0xba0e016b; (* arm_ADCS X11 X11 X14 *) + 0x9a06018c; (* arm_ADC X12 X12 X6 *) + 0xa90827e8; (* arm_STP X8 X9 SP (Immediate_Offset (iword (&128))) *) + 0xa9092fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&144))) *) + 0xf90053ec; (* arm_STR X12 SP (Immediate_Offset (word 160)) *) + 0xa9441203; (* arm_LDP X3 X4 X16 (Immediate_Offset (iword (&64))) *) + 0xa94623e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&96))) *) + 0x9b077c6c; (* arm_MUL X12 X3 X7 *) + 0x9bc77c6d; (* arm_UMULH X13 X3 X7 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa9472be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&112))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c60; (* arm_UMULH X0 X3 X9 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c61; (* arm_UMULH X1 X3 X10 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0xa9451a05; (* arm_LDP X5 X6 X16 (Immediate_Offset (iword (&80))) *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bca7c83; (* arm_UMULH X3 X4 X10 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9b077cab; (* arm_MUL X11 X5 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b087cab; (* arm_MUL X11 X5 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b097cab; (* arm_MUL X11 X5 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b0a7cab; (* arm_MUL X11 X5 X10 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bca7ca4; (* arm_UMULH X4 X5 X10 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9bc77cab; (* arm_UMULH X11 X5 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9bc87cab; (* arm_UMULH X11 X5 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bc97cab; (* arm_UMULH X11 X5 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b077ccb; (* arm_MUL X11 X6 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9b087ccb; (* arm_MUL X11 X6 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b097ccb; (* arm_MUL X11 X6 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9b0a7ccb; (* arm_MUL X11 X6 X10 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9bca7cc5; (* arm_UMULH X5 X6 X10 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0x9bc77ccb; (* arm_UMULH X11 X6 X7 *) + 0xab0b0021; (* arm_ADDS X1 X1 X11 *) + 0x9bc87ccb; (* arm_UMULH X11 X6 X8 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bc97ccb; (* arm_UMULH X11 X6 X9 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0x9b017e2b; (* arm_MUL X11 X17 X1 *) + 0x9bc17e29; (* arm_UMULH X9 X17 X1 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0x9b037e2b; (* arm_MUL X11 X17 X3 *) + 0x9bc37e23; (* arm_UMULH X3 X17 X3 *) + 0xba0b01ad; (* arm_ADCS X13 X13 X11 *) + 0x9b047e2b; (* arm_MUL X11 X17 X4 *) + 0x9bc47e24; (* arm_UMULH X4 X17 X4 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b057e2b; (* arm_MUL X11 X17 X5 *) + 0x9bc57e25; (* arm_UMULH X5 X17 X5 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a9f37e1; (* arm_CSET X1 Condition_CS *) + 0xab0901ad; (* arm_ADDS X13 X13 X9 *) + 0xba0301ce; (* arm_ADCS X14 X14 X3 *) + 0xba040000; (* arm_ADCS X0 X0 X4 *) + 0x9a050021; (* arm_ADC X1 X1 X5 *) + 0x91000428; (* arm_ADD X8 X1 (rvalue (word 1)) *) + 0x9b087e2b; (* arm_MUL X11 X17 X8 *) + 0x9bc87e29; (* arm_UMULH X9 X17 X8 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0xba0901ad; (* arm_ADCS X13 X13 X9 *) + 0xba1f01ce; (* arm_ADCS X14 X14 XZR *) + 0xba1f0000; (* arm_ADCS X0 X0 XZR *) + 0x9a9f3227; (* arm_CSEL X7 X17 XZR Condition_CC *) + 0xeb07018c; (* arm_SUBS X12 X12 X7 *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xda1f0000; (* arm_SBC X0 X0 XZR *) + 0xa90435ec; (* arm_STP X12 X13 X15 (Immediate_Offset (iword (&64))) *) + 0xa90501ee; (* arm_STP X14 X0 X15 (Immediate_Offset (iword (&80))) *) + 0xd280018a; (* arm_MOV X10 (rvalue (word 12)) *) + 0xa95417e4; (* arm_LDP X4 X5 SP (Immediate_Offset (iword (&320))) *) + 0x9b0a7c80; (* arm_MUL X0 X4 X10 *) + 0x9b0a7ca1; (* arm_MUL X1 X5 X10 *) + 0xa9551fe6; (* arm_LDP X6 X7 SP (Immediate_Offset (iword (&336))) *) + 0x9b0a7cc2; (* arm_MUL X2 X6 X10 *) + 0x9b0a7ce3; (* arm_MUL X3 X7 X10 *) + 0xf940b3ed; (* arm_LDR X13 SP (Immediate_Offset (word 352)) *) + 0x9bca7c84; (* arm_UMULH X4 X4 X10 *) + 0xab040021; (* arm_ADDS X1 X1 X4 *) + 0x9bca7ca5; (* arm_UMULH X5 X5 X10 *) + 0xba050042; (* arm_ADCS X2 X2 X5 *) + 0x9bca7cc6; (* arm_UMULH X6 X6 X10 *) + 0xba060063; (* arm_ADCS X3 X3 X6 *) + 0x9bca7ce4; (* arm_UMULH X4 X7 X10 *) + 0x9b0a7dad; (* arm_MUL X13 X13 X10 *) + 0x9a0d0089; (* arm_ADC X9 X4 X13 *) + 0xb2580129; (* arm_ORR X9 X9 (rvalue (word 1099511627776)) *) + 0xd280012a; (* arm_MOV X10 (rvalue (word 9)) *) + 0xa9483bed; (* arm_LDP X13 X14 SP (Immediate_Offset (iword (&128))) *) + 0x9b0a7dc5; (* arm_MUL X5 X14 X10 *) + 0x9bca7dc6; (* arm_UMULH X6 X14 X10 *) + 0xab5160a5; (* arm_ADDS X5 X5 (Shiftedreg X17 LSR 24) *) + 0x9a1f00c6; (* arm_ADC X6 X6 XZR *) + 0x9b0a7da4; (* arm_MUL X4 X13 X10 *) + 0xab11a084; (* arm_ADDS X4 X4 (Shiftedreg X17 LSL 40) *) + 0x9bca7dad; (* arm_UMULH X13 X13 X10 *) + 0xba0d00a5; (* arm_ADCS X5 X5 X13 *) + 0xa9493bed; (* arm_LDP X13 X14 SP (Immediate_Offset (iword (&144))) *) + 0x9b0a7dac; (* arm_MUL X12 X13 X10 *) + 0x9bca7da7; (* arm_UMULH X7 X13 X10 *) + 0xf94053ed; (* arm_LDR X13 SP (Immediate_Offset (word 160)) *) + 0xba0c00c6; (* arm_ADCS X6 X6 X12 *) + 0x9b0a7dcc; (* arm_MUL X12 X14 X10 *) + 0x9bca7dc8; (* arm_UMULH X8 X14 X10 *) + 0x9b0a7dad; (* arm_MUL X13 X13 X10 *) + 0xba0c00e7; (* arm_ADCS X7 X7 X12 *) + 0x9a0d0108; (* arm_ADC X8 X8 X13 *) + 0xeb040000; (* arm_SUBS X0 X0 X4 *) + 0xfa050021; (* arm_SBCS X1 X1 X5 *) + 0xfa060042; (* arm_SBCS X2 X2 X6 *) + 0xfa070063; (* arm_SBCS X3 X3 X7 *) + 0xda080124; (* arm_SBC X4 X9 X8 *) + 0x9100048a; (* arm_ADD X10 X4 (rvalue (word 1)) *) + 0x9b0a7e24; (* arm_MUL X4 X17 X10 *) + 0x9bca7e25; (* arm_UMULH X5 X17 X10 *) + 0xab040000; (* arm_ADDS X0 X0 X4 *) + 0xba050021; (* arm_ADCS X1 X1 X5 *) + 0xba1f0042; (* arm_ADCS X2 X2 XZR *) + 0xba1f0063; (* arm_ADCS X3 X3 XZR *) + 0x9a9f322b; (* arm_CSEL X11 X17 XZR Condition_CC *) + 0xeb0b0000; (* arm_SUBS X0 X0 X11 *) + 0xfa1f0021; (* arm_SBCS X1 X1 XZR *) + 0xa90407e0; (* arm_STP X0 X1 SP (Immediate_Offset (iword (&64))) *) + 0xfa1f0042; (* arm_SBCS X2 X2 XZR *) + 0xda1f0063; (* arm_SBC X3 X3 XZR *) + 0xa9050fe2; (* arm_STP X2 X3 SP (Immediate_Offset (iword (&80))) *) + 0xa9420fe2; (* arm_LDP X2 X3 SP (Immediate_Offset (iword (&32))) *) + 0x9b037c49; (* arm_MUL X9 X2 X3 *) + 0x9bc37c4a; (* arm_UMULH X10 X2 X3 *) + 0xa94317e4; (* arm_LDP X4 X5 SP (Immediate_Offset (iword (&48))) *) + 0x9b057c4b; (* arm_MUL X11 X2 X5 *) + 0x9bc57c4c; (* arm_UMULH X12 X2 X5 *) + 0x9b047c47; (* arm_MUL X7 X2 X4 *) + 0x9bc47c46; (* arm_UMULH X6 X2 X4 *) + 0xab07014a; (* arm_ADDS X10 X10 X7 *) + 0xba06016b; (* arm_ADCS X11 X11 X6 *) + 0x9b047c67; (* arm_MUL X7 X3 X4 *) + 0x9bc47c66; (* arm_UMULH X6 X3 X4 *) + 0x9a1f00c6; (* arm_ADC X6 X6 XZR *) + 0xab07016b; (* arm_ADDS X11 X11 X7 *) + 0x9b057c8d; (* arm_MUL X13 X4 X5 *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xba06018c; (* arm_ADCS X12 X12 X6 *) + 0x9b057c67; (* arm_MUL X7 X3 X5 *) + 0x9bc57c66; (* arm_UMULH X6 X3 X5 *) + 0x9a1f00c6; (* arm_ADC X6 X6 XZR *) + 0xab07018c; (* arm_ADDS X12 X12 X7 *) + 0xba0601ad; (* arm_ADCS X13 X13 X6 *) + 0x9a1f01ce; (* arm_ADC X14 X14 XZR *) + 0xab090129; (* arm_ADDS X9 X9 X9 *) + 0xba0a014a; (* arm_ADCS X10 X10 X10 *) + 0xba0b016b; (* arm_ADCS X11 X11 X11 *) + 0xba0c018c; (* arm_ADCS X12 X12 X12 *) + 0xba0d01ad; (* arm_ADCS X13 X13 X13 *) + 0xba0e01ce; (* arm_ADCS X14 X14 X14 *) + 0x9a9f37e6; (* arm_CSET X6 Condition_CS *) + 0x9bc27c47; (* arm_UMULH X7 X2 X2 *) + 0x9b027c48; (* arm_MUL X8 X2 X2 *) + 0xab070129; (* arm_ADDS X9 X9 X7 *) + 0x9b037c67; (* arm_MUL X7 X3 X3 *) + 0xba07014a; (* arm_ADCS X10 X10 X7 *) + 0x9bc37c67; (* arm_UMULH X7 X3 X3 *) + 0xba07016b; (* arm_ADCS X11 X11 X7 *) + 0x9b047c87; (* arm_MUL X7 X4 X4 *) + 0xba07018c; (* arm_ADCS X12 X12 X7 *) + 0x9bc47c87; (* arm_UMULH X7 X4 X4 *) + 0xba0701ad; (* arm_ADCS X13 X13 X7 *) + 0x9b057ca7; (* arm_MUL X7 X5 X5 *) + 0xba0701ce; (* arm_ADCS X14 X14 X7 *) + 0x9bc57ca7; (* arm_UMULH X7 X5 X5 *) + 0x9a0700c6; (* arm_ADC X6 X6 X7 *) + 0x9b0c7e27; (* arm_MUL X7 X17 X12 *) + 0x9bcc7e24; (* arm_UMULH X4 X17 X12 *) + 0xab070108; (* arm_ADDS X8 X8 X7 *) + 0x9b0d7e27; (* arm_MUL X7 X17 X13 *) + 0x9bcd7e2d; (* arm_UMULH X13 X17 X13 *) + 0xba070129; (* arm_ADCS X9 X9 X7 *) + 0x9b0e7e27; (* arm_MUL X7 X17 X14 *) + 0x9bce7e2e; (* arm_UMULH X14 X17 X14 *) + 0xba07014a; (* arm_ADCS X10 X10 X7 *) + 0x9b067e27; (* arm_MUL X7 X17 X6 *) + 0x9bc67e26; (* arm_UMULH X6 X17 X6 *) + 0xba07016b; (* arm_ADCS X11 X11 X7 *) + 0x9a9f37ec; (* arm_CSET X12 Condition_CS *) + 0xab040129; (* arm_ADDS X9 X9 X4 *) + 0xba0d014a; (* arm_ADCS X10 X10 X13 *) + 0xba0e016b; (* arm_ADCS X11 X11 X14 *) + 0x9a06018c; (* arm_ADC X12 X12 X6 *) + 0xa90c27e8; (* arm_STP X8 X9 SP (Immediate_Offset (iword (&192))) *) + 0xa90d2fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&208))) *) + 0xf90073ec; (* arm_STR X12 SP (Immediate_Offset (word 224)) *) + 0xa94013e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&0))) *) + 0xa94423e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&64))) *) + 0x9b077c6c; (* arm_MUL X12 X3 X7 *) + 0x9bc77c6d; (* arm_UMULH X13 X3 X7 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa9452be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&80))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c60; (* arm_UMULH X0 X3 X9 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c61; (* arm_UMULH X1 X3 X10 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0xa9411be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&16))) *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bca7c83; (* arm_UMULH X3 X4 X10 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9b077cab; (* arm_MUL X11 X5 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b087cab; (* arm_MUL X11 X5 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b097cab; (* arm_MUL X11 X5 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b0a7cab; (* arm_MUL X11 X5 X10 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bca7ca4; (* arm_UMULH X4 X5 X10 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9bc77cab; (* arm_UMULH X11 X5 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9bc87cab; (* arm_UMULH X11 X5 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bc97cab; (* arm_UMULH X11 X5 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b077ccb; (* arm_MUL X11 X6 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9b087ccb; (* arm_MUL X11 X6 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b097ccb; (* arm_MUL X11 X6 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9b0a7ccb; (* arm_MUL X11 X6 X10 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9bca7cc5; (* arm_UMULH X5 X6 X10 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0x9bc77ccb; (* arm_UMULH X11 X6 X7 *) + 0xab0b0021; (* arm_ADDS X1 X1 X11 *) + 0x9bc87ccb; (* arm_UMULH X11 X6 X8 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bc97ccb; (* arm_UMULH X11 X6 X9 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0x9b017e2b; (* arm_MUL X11 X17 X1 *) + 0x9bc17e29; (* arm_UMULH X9 X17 X1 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0x9b037e2b; (* arm_MUL X11 X17 X3 *) + 0x9bc37e23; (* arm_UMULH X3 X17 X3 *) + 0xba0b01ad; (* arm_ADCS X13 X13 X11 *) + 0x9b047e2b; (* arm_MUL X11 X17 X4 *) + 0x9bc47e24; (* arm_UMULH X4 X17 X4 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b057e2b; (* arm_MUL X11 X17 X5 *) + 0x9bc57e25; (* arm_UMULH X5 X17 X5 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a9f37e1; (* arm_CSET X1 Condition_CS *) + 0xab0901ad; (* arm_ADDS X13 X13 X9 *) + 0xba0301ce; (* arm_ADCS X14 X14 X3 *) + 0xba040000; (* arm_ADCS X0 X0 X4 *) + 0x9a050021; (* arm_ADC X1 X1 X5 *) + 0xa91037ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&256))) *) + 0xa91103ee; (* arm_STP X14 X0 SP (Immediate_Offset (iword (&272))) *) + 0xf90093e1; (* arm_STR X1 SP (Immediate_Offset (word 288)) *) + 0xa9540be1; (* arm_LDP X1 X2 SP (Immediate_Offset (iword (&320))) *) + 0xd37ef420; (* arm_LSL X0 X1 2 *) + 0xa9441fe6; (* arm_LDP X6 X7 SP (Immediate_Offset (iword (&64))) *) + 0xeb060000; (* arm_SUBS X0 X0 X6 *) + 0x93c1f841; (* arm_EXTR X1 X2 X1 62 *) + 0xfa070021; (* arm_SBCS X1 X1 X7 *) + 0xa95513e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&336))) *) + 0x93c2f862; (* arm_EXTR X2 X3 X2 62 *) + 0xa9451fe6; (* arm_LDP X6 X7 SP (Immediate_Offset (iword (&80))) *) + 0xfa060042; (* arm_SBCS X2 X2 X6 *) + 0x93c3f883; (* arm_EXTR X3 X4 X3 62 *) + 0xfa070063; (* arm_SBCS X3 X3 X7 *) + 0xf940b3e5; (* arm_LDR X5 SP (Immediate_Offset (word 352)) *) + 0x93c4f8a4; (* arm_EXTR X4 X5 X4 62 *) + 0xda1f0084; (* arm_SBC X4 X4 XZR *) + 0x91000485; (* arm_ADD X5 X4 (rvalue (word 1)) *) + 0x9b057e24; (* arm_MUL X4 X17 X5 *) + 0xab040000; (* arm_ADDS X0 X0 X4 *) + 0x9bc57e25; (* arm_UMULH X5 X17 X5 *) + 0xba050021; (* arm_ADCS X1 X1 X5 *) + 0xba1f0042; (* arm_ADCS X2 X2 XZR *) + 0xba1f0063; (* arm_ADCS X3 X3 XZR *) + 0x9a9f3224; (* arm_CSEL X4 X17 XZR Condition_CC *) + 0xeb040000; (* arm_SUBS X0 X0 X4 *) + 0xfa1f0021; (* arm_SBCS X1 X1 XZR *) + 0xa90005e0; (* arm_STP X0 X1 X15 (Immediate_Offset (iword (&0))) *) + 0xfa1f0042; (* arm_SBCS X2 X2 XZR *) + 0xda1f0063; (* arm_SBC X3 X3 XZR *) + 0xa9010de2; (* arm_STP X2 X3 X15 (Immediate_Offset (iword (&16))) *) + 0xd280006a; (* arm_MOV X10 (rvalue (word 3)) *) + 0xa95017e4; (* arm_LDP X4 X5 SP (Immediate_Offset (iword (&256))) *) + 0x9b0a7c80; (* arm_MUL X0 X4 X10 *) + 0x9b0a7ca1; (* arm_MUL X1 X5 X10 *) + 0xa9511fe6; (* arm_LDP X6 X7 SP (Immediate_Offset (iword (&272))) *) + 0x9b0a7cc2; (* arm_MUL X2 X6 X10 *) + 0x9b0a7ce3; (* arm_MUL X3 X7 X10 *) + 0xf94093ed; (* arm_LDR X13 SP (Immediate_Offset (word 288)) *) + 0x9bca7c84; (* arm_UMULH X4 X4 X10 *) + 0xab040021; (* arm_ADDS X1 X1 X4 *) + 0x9bca7ca5; (* arm_UMULH X5 X5 X10 *) + 0xba050042; (* arm_ADCS X2 X2 X5 *) + 0x9bca7cc6; (* arm_UMULH X6 X6 X10 *) + 0xba060063; (* arm_ADCS X3 X3 X6 *) + 0x9bca7ce4; (* arm_UMULH X4 X7 X10 *) + 0x9b0a7dad; (* arm_MUL X13 X13 X10 *) + 0x9a0d0089; (* arm_ADC X9 X4 X13 *) + 0xb2580129; (* arm_ORR X9 X9 (rvalue (word 1099511627776)) *) + 0xd3585e2c; (* arm_LSL X12 X17 40 *) + 0xa94c3bed; (* arm_LDP X13 X14 SP (Immediate_Offset (iword (&192))) *) + 0xd37df1a4; (* arm_LSL X4 X13 3 *) + 0xab0c0084; (* arm_ADDS X4 X4 X12 *) + 0x93cdf5c5; (* arm_EXTR X5 X14 X13 61 *) + 0xd358fe2c; (* arm_LSR X12 X17 24 *) + 0xba0c00a5; (* arm_ADCS X5 X5 X12 *) + 0xa94d33eb; (* arm_LDP X11 X12 SP (Immediate_Offset (iword (&208))) *) + 0x93cef566; (* arm_EXTR X6 X11 X14 61 *) + 0xba1f00c6; (* arm_ADCS X6 X6 XZR *) + 0xf94073ed; (* arm_LDR X13 SP (Immediate_Offset (word 224)) *) + 0x93cbf587; (* arm_EXTR X7 X12 X11 61 *) + 0xba1f00e7; (* arm_ADCS X7 X7 XZR *) + 0x93ccf5a8; (* arm_EXTR X8 X13 X12 61 *) + 0x9a1f0108; (* arm_ADC X8 X8 XZR *) + 0xeb040000; (* arm_SUBS X0 X0 X4 *) + 0xfa050021; (* arm_SBCS X1 X1 X5 *) + 0xfa060042; (* arm_SBCS X2 X2 X6 *) + 0xfa070063; (* arm_SBCS X3 X3 X7 *) + 0xda080124; (* arm_SBC X4 X9 X8 *) + 0x9100048a; (* arm_ADD X10 X4 (rvalue (word 1)) *) + 0x9b0a7e24; (* arm_MUL X4 X17 X10 *) + 0x9bca7e25; (* arm_UMULH X5 X17 X10 *) + 0xab040000; (* arm_ADDS X0 X0 X4 *) + 0xba050021; (* arm_ADCS X1 X1 X5 *) + 0xba1f0042; (* arm_ADCS X2 X2 XZR *) + 0xba1f0063; (* arm_ADCS X3 X3 XZR *) + 0x9a9f322b; (* arm_CSEL X11 X17 XZR Condition_CC *) + 0xeb0b0000; (* arm_SUBS X0 X0 X11 *) + 0xfa1f0021; (* arm_SBCS X1 X1 XZR *) + 0xa90205e0; (* arm_STP X0 X1 X15 (Immediate_Offset (iword (&32))) *) + 0xfa1f0042; (* arm_SBCS X2 X2 XZR *) + 0xda1f0063; (* arm_SBC X3 X3 XZR *) + 0xa9030de2; (* arm_STP X2 X3 X15 (Immediate_Offset (iword (&48))) *) + 0x910603ff; (* arm_ADD SP SP (rvalue (word 384)) *) + 0xd65f03c0 (* arm_RET X30 *) +];; + +let SECP256K1_JDOUBLE_EXEC = ARM_MK_EXEC_RULE secp256k1_jdouble_mc;; + +(* ------------------------------------------------------------------------- *) +(* Common supporting definitions and lemmas for component proofs. *) +(* ------------------------------------------------------------------------- *) + +let p_256k1 = new_definition `p_256k1 = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F`;; + +let p256k1redlemma = prove + (`!n. n <= (2 EXP 64 - 1) * (p_256k1 - 1) + ==> let q = n DIV 2 EXP 256 + 1 in + q < 2 EXP 64 /\ + q * p_256k1 <= n + p_256k1 /\ + n < q * p_256k1 + p_256k1`, + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN REWRITE_TAC[p_256k1] THEN ARITH_TAC);; + +let FORALL_INT_CASES' = prove + (`!P. (!x:int. P x) <=> (!n. P(&n)) /\ (!n. ~(n = 0) ==> P(-- &n))`, + GEN_TAC THEN GEN_REWRITE_TAC LAND_CONV [FORALL_INT_CASES] THEN + MESON_TAC[INT_NEG_EQ_0; INT_OF_NUM_EQ]);; + +let p256k1shortintredlemma = prove + (`!n. --(&p_256k1) <= n /\ n <= &17179873097 * &p_256k1 + ==> let q = (&2 pow 256 + n) div &2 pow 256 in + &0 <= q /\ q < &2 pow 35 /\ + q < &2 pow 64 /\ + q * &p_256k1 <= n + &p_256k1 /\ + n < q * &p_256k1 + &p_256k1`, + ONCE_REWRITE_TAC[INT_ARITH `&2 pow 256 + n:int = &1 * &2 pow 256 + n`] THEN + SIMP_TAC[INT_DIV_MUL_ADD; INT_POW_EQ_0; INT_OF_NUM_EQ; ARITH_EQ] THEN + REWRITE_TAC[FORALL_INT_CASES'; INT_DIV_LNEG] THEN + CONV_TAC(ONCE_DEPTH_CONV let_CONV) THEN + REWRITE_TAC[INT_OF_NUM_CLAUSES; INT_OF_NUM_DIV; INT_OF_NUM_REM] THEN + CONJ_TAC THENL [REWRITE_TAC[p_256k1] THEN ARITH_TAC; ALL_TAC] THEN + X_GEN_TAC `n:num` THEN DISCH_TAC THEN + REWRITE_TAC[INT_LE_NEG2; INT_OF_NUM_CLAUSES] THEN + DISCH_THEN(ASSUME_TAC o CONJUNCT1) THEN + SUBGOAL_THEN `n < 2 EXP 256` ASSUME_TAC THENL + [UNDISCH_TAC `n <= p_256k1` THEN REWRITE_TAC[p_256k1] THEN ARITH_TAC; + ASM_SIMP_TAC[DIV_LT; MOD_LT]] THEN + UNDISCH_TAC `n <= p_256k1` THEN + REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES] THEN CONV_TAC INT_REDUCE_CONV THEN + REWRITE_TAC[p_256k1] THEN INT_ARITH_TAC);; + +let secp256k1 = define + `secp256k1 = (integer_mod_ring p_256k1,&0:int,&7:int)`;; + +let secp256k1_encode = new_definition + `secp256k1_encode = modular_encode(256,p_256k1)`;; + +let nintlemma = prove + (`&(num_of_int(x rem &p_256k1)) = x rem &p_256k1`, + MATCH_MP_TAC INT_OF_NUM_OF_INT THEN MATCH_MP_TAC INT_REM_POS THEN + REWRITE_TAC[INT_OF_NUM_EQ; p_256k1] THEN CONV_TAC NUM_REDUCE_CONV);; + +let unilemma1 = prove + (`&x = a rem &p_256k1 ==> x < p_256k1 /\ &x = a rem &p_256k1`, + SIMP_TAC[GSYM INT_OF_NUM_LT; INT_LT_REM_EQ; p_256k1] THEN INT_ARITH_TAC);; + +let unilemma2 = prove + (`X = num_of_int(x rem &p_256k1) ==> X < p_256k1 /\ &X = x rem &p_256k1`, + DISCH_THEN SUBST1_TAC THEN + REWRITE_TAC[GSYM INT_OF_NUM_LT; nintlemma; INT_LT_REM_EQ] THEN + REWRITE_TAC[INT_OF_NUM_LT; p_256k1] THEN CONV_TAC NUM_REDUCE_CONV);; + +let lvs = + ["x_1",[`X16`;`0`]; + "y_1",[`X16`;`32`]; + "z_1",[`X16`;`64`]; + "x_3",[`X15`;`0`]; + "y_3",[`X15`;`32`]; + "z_3",[`X15`;`64`]; + "x_2",[`SP`;`0`]; + "y_2",[`SP`;`32`]; + "d",[`SP`;`64`]; + "tmp",[`SP`;`96`]; + "x_4",[`SP`;`128`]; + "y_4",[`SP`;`192`]; + "dx2",[`SP`;`256`]; + "xy2",[`SP`;`320`]];; + +(* ------------------------------------------------------------------------- *) +(* Instances of sqr. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_SQR_P256K1_TAC = + ARM_MACRO_SIM_ABBREV_TAC secp256k1_jdouble_mc 76 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1. + !n. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = n + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0xb24) (word_add (read p3 t) (word n3),32) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) secp256k1_jdouble_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X15 s = read X15 t /\ + read X16 s = read X16 t /\ + read X17 s = word 4294968273 /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) s = + n) + (\s. read PC s = pcout /\ + read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 4)) s = (n EXP 2) MOD p_256k1) + (MAYCHANGE [PC; X2; X3; X4; X5; X6; X7; X8; X9; + X10; X11; X12; X13; X14] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 4)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "n_" o lhand o concl) THEN + + (*** The initial squaring block, very similar to bignum_sqr_4_8 ***) + + ARM_ACCSTEPS_TAC SECP256K1_JDOUBLE_EXEC (1--45) (1--45) THEN + RULE_ASSUM_TAC(REWRITE_RULE[GSYM WORD_BITVAL; COND_SWAP]) THEN + MAP_EVERY ABBREV_TAC + [`l = bignum_of_wordlist[mullo_s31; sum_s33; sum_s35; sum_s37]`; + `h = bignum_of_wordlist[sum_s39; sum_s41; sum_s43; sum_s45]`] THEN + SUBGOAL_THEN `2 EXP 256 * h + l = n EXP 2` (SUBST1_TAC o SYM) THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"; "n"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_ARITH_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** The initial modular reduction of the high part ***) + + SUBGOAL_THEN + `(2 EXP 256 * h + l) MOD p_256k1 = (4294968273 * h + l) MOD p_256k1` + SUBST1_TAC THENL + [ONCE_REWRITE_TAC[GSYM MOD_ADD_MOD] THEN + ONCE_REWRITE_TAC[GSYM MOD_MULT_LMOD] THEN + REWRITE_TAC[p_256k1] THEN CONV_TAC NUM_REDUCE_CONV; + ALL_TAC] THEN + + (*** Instantiate the quotient approximation lemma ***) + + MP_TAC(SPEC `4294968273 * h + l` p256k1redlemma) THEN ANTS_TAC THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"] THEN REWRITE_TAC[p_256k1] THEN + CONV_TAC NUM_REDUCE_CONV THEN BOUNDER_TAC[]; + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN STRIP_TAC] THEN + + (*** Reduction from 8 digits to 5 digits ***) + + ARM_ACCSTEPS_TAC SECP256K1_JDOUBLE_EXEC (46--62) (46--62) THEN + RULE_ASSUM_TAC(REWRITE_RULE[COND_SWAP; GSYM WORD_BITVAL]) THEN + ABBREV_TAC + `ca = bignum_of_wordlist + [sum_s48; sum_s59; sum_s60; sum_s61; sum_s62]` THEN + SUBGOAL_THEN `(4294968273 * h + l) DIV 2 EXP 256 + 1 <= 2 EXP 33` + ASSUME_TAC THENL + [REWRITE_TAC[ARITH_RULE `a + 1 <= b <=> a < b`] THEN + SIMP_TAC[RDIV_LT_EQ; EXP_EQ_0; ARITH_EQ] THEN CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["h"; "l"] THEN BOUNDER_TAC[]; + ALL_TAC] THEN + SUBGOAL_THEN `4294968273 * h + l = ca` SUBST_ALL_TAC THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"; "ca"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_ARITH_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Quotient estimate computation ***) + + SUBGOAL_THEN `ca DIV 2 EXP 256 = val(sum_s62:int64)` SUBST_ALL_TAC THENL + [EXPAND_TAC "ca" THEN CONV_TAC(LAND_CONV BIGNUM_OF_WORDLIST_DIV_CONV) THEN + REFL_TAC; + FIRST_ASSUM(ASSUME_TAC o MATCH_MP (ARITH_RULE + `n + 1 < 2 EXP 64 ==> n < 2 EXP 64 - 1`))] THEN + ARM_STEPS_TAC SECP256K1_JDOUBLE_EXEC [63] THEN + ABBREV_TAC `q:int64 = word_add sum_s62 (word 1)` THEN + SUBGOAL_THEN `val(sum_s62:int64) + 1 = val(q:int64)` SUBST_ALL_TAC THENL + [EXPAND_TAC "q" THEN REWRITE_TAC[VAL_WORD_ADD; VAL_WORD_1] THEN + ASM_SIMP_TAC[DIMINDEX_64; MOD_LT]; + ALL_TAC] THEN + + (*** The rest of the computation ***) + + ARM_ACCSTEPS_TAC SECP256K1_JDOUBLE_EXEC (64--76) (64--76) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC MOD_UNIQ_BALANCED_REAL THEN + MAP_EVERY EXISTS_TAC [`val(q:int64)`; `256`] THEN ASM_REWRITE_TAC[] THEN + CONJ_TAC THENL [REWRITE_TAC[p_256k1] THEN ARITH_TAC; ALL_TAC] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN + + (*** Comparison computation and then the rest is easy ***) + + SUBGOAL_THEN `ca < val(q:int64) * p_256k1 <=> ~carry_s69` SUBST1_TAC THENL + [CONV_TAC SYM_CONV THEN MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN + EXISTS_TAC `256` THEN EXPAND_TAC "ca" THEN + REWRITE_TAC[p_256k1; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + REWRITE_TAC[REAL_BITVAL_NOT] THEN + SUBGOAL_THEN `&(val(sum_s62:int64)):real = &(val(q:int64)) - &1` + SUBST1_TAC THENL + [FIRST_X_ASSUM(MP_TAC o MATCH_MP (ARITH_RULE + `n < 2 EXP 64 - 1 ==> n + 1 < 2 EXP 64`)) THEN + UNDISCH_THEN + `word_add sum_s62 (word 1):int64 = q` (SUBST1_TAC o SYM) THEN + SIMP_TAC[VAL_WORD_ADD; VAL_WORD_1; DIMINDEX_64; MOD_LT] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN REAL_ARITH_TAC; + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]]; + EXPAND_TAC "ca" THEN + REWRITE_TAC[REAL_BITVAL_NOT] THEN + REWRITE_TAC[p_256k1; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + RULE_ASSUM_TAC(REWRITE_RULE[WORD_UNMASK_64]) THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + ASM_CASES_TAC `carry_s69:bool` THEN + ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN CONV_TAC WORD_REDUCE_CONV THEN + REAL_INTEGER_TAC]);; + +(* ------------------------------------------------------------------------- *) +(* Instances of mul. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_MUL_P256K1_TAC = + ARM_MACRO_SIM_ABBREV_TAC secp256k1_jdouble_mc 98 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) t = n + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0xb24) (word_add (read p3 t) (word n3),32) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) secp256k1_jdouble_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X15 s = read X15 t /\ + read X16 s = read X16 t /\ + read X17 s = word 4294968273 /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) s = + n) + (\s. read PC s = pcout /\ + read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 4)) s = (m * n) MOD p_256k1) + (MAYCHANGE [PC; X0; X1; X3; X4; X5; X6; X7; X8; X9; + X10; X11; X12; X13; X14] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 4)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "m_" o lhand o concl) THEN + + (*** The initial multiply block, very similar to bignum_mul_4_8 ***) + + ARM_ACCSTEPS_TAC SECP256K1_JDOUBLE_EXEC (1--67) (1--67) THEN + MAP_EVERY ABBREV_TAC + [`l = bignum_of_wordlist[mullo_s3; sum_s18; sum_s35; sum_s52]`; + `h = bignum_of_wordlist[sum_s62; sum_s64; sum_s66; sum_s67]`] THEN + SUBGOAL_THEN `2 EXP 256 * h + l = m * n` (SUBST1_TAC o SYM) THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"; "m"; "n"] THEN + REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_ARITH_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** The initial modular reduction of the high part ***) + + SUBGOAL_THEN + `(2 EXP 256 * h + l) MOD p_256k1 = (4294968273 * h + l) MOD p_256k1` + SUBST1_TAC THENL + [ONCE_REWRITE_TAC[GSYM MOD_ADD_MOD] THEN + ONCE_REWRITE_TAC[GSYM MOD_MULT_LMOD] THEN + REWRITE_TAC[p_256k1] THEN CONV_TAC NUM_REDUCE_CONV; + ALL_TAC] THEN + + (*** Instantiate the quotient approximation lemma ***) + + MP_TAC(SPEC `4294968273 * h + l` p256k1redlemma) THEN ANTS_TAC THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"] THEN REWRITE_TAC[p_256k1] THEN + CONV_TAC NUM_REDUCE_CONV THEN BOUNDER_TAC[]; + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN STRIP_TAC] THEN + + (*** Reduction from 8 digits to 5 digits ***) + + ARM_ACCSTEPS_TAC SECP256K1_JDOUBLE_EXEC (68--84) (68--84) THEN + RULE_ASSUM_TAC(REWRITE_RULE[COND_SWAP; GSYM WORD_BITVAL]) THEN + ABBREV_TAC + `ca = bignum_of_wordlist + [sum_s70; sum_s81; sum_s82; sum_s83; sum_s84]` THEN + SUBGOAL_THEN `(4294968273 * h + l) DIV 2 EXP 256 + 1 <= 2 EXP 33` + ASSUME_TAC THENL + [REWRITE_TAC[ARITH_RULE `a + 1 <= b <=> a < b`] THEN + SIMP_TAC[RDIV_LT_EQ; EXP_EQ_0; ARITH_EQ] THEN CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["h"; "l"] THEN BOUNDER_TAC[]; + ALL_TAC] THEN + SUBGOAL_THEN `4294968273 * h + l = ca` SUBST_ALL_TAC THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"; "ca"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_ARITH_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Quotient estimate computation ***) + + SUBGOAL_THEN `ca DIV 2 EXP 256 = val(sum_s84:int64)` SUBST_ALL_TAC THENL + [EXPAND_TAC "ca" THEN CONV_TAC(LAND_CONV BIGNUM_OF_WORDLIST_DIV_CONV) THEN + REFL_TAC; + FIRST_ASSUM(ASSUME_TAC o MATCH_MP (ARITH_RULE + `n + 1 < 2 EXP 64 ==> n < 2 EXP 64 - 1`))] THEN + ARM_STEPS_TAC SECP256K1_JDOUBLE_EXEC [85] THEN + ABBREV_TAC `q:int64 = word_add sum_s84 (word 1)` THEN + SUBGOAL_THEN `val(sum_s84:int64) + 1 = val(q:int64)` SUBST_ALL_TAC THENL + [EXPAND_TAC "q" THEN REWRITE_TAC[VAL_WORD_ADD; VAL_WORD_1] THEN + ASM_SIMP_TAC[DIMINDEX_64; MOD_LT]; + ALL_TAC] THEN + + (*** The rest of the computation ***) + + ARM_ACCSTEPS_TAC SECP256K1_JDOUBLE_EXEC (86--98) (86--98) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC MOD_UNIQ_BALANCED_REAL THEN + MAP_EVERY EXISTS_TAC [`val(q:int64)`; `256`] THEN ASM_REWRITE_TAC[] THEN + CONJ_TAC THENL [REWRITE_TAC[p_256k1] THEN ARITH_TAC; ALL_TAC] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN + + (*** Comparison computation and then the rest is easy ***) + + SUBGOAL_THEN `ca < val(q:int64) * p_256k1 <=> ~carry_s91` SUBST1_TAC THENL + [CONV_TAC SYM_CONV THEN MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN + EXISTS_TAC `256` THEN EXPAND_TAC "ca" THEN + REWRITE_TAC[p_256k1; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + REWRITE_TAC[REAL_BITVAL_NOT] THEN + SUBGOAL_THEN `&(val(sum_s84:int64)):real = &(val(q:int64)) - &1` + SUBST1_TAC THENL + [FIRST_X_ASSUM(MP_TAC o MATCH_MP (ARITH_RULE + `n < 2 EXP 64 - 1 ==> n + 1 < 2 EXP 64`)) THEN + UNDISCH_THEN + `word_add sum_s84 (word 1):int64 = q` (SUBST1_TAC o SYM) THEN + SIMP_TAC[VAL_WORD_ADD; VAL_WORD_1; DIMINDEX_64; MOD_LT] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN REAL_ARITH_TAC; + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]]; + EXPAND_TAC "ca" THEN + REWRITE_TAC[REAL_BITVAL_NOT] THEN + REWRITE_TAC[p_256k1; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + RULE_ASSUM_TAC(REWRITE_RULE[WORD_UNMASK_64]) THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + ASM_CASES_TAC `carry_s91:bool` THEN + ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN CONV_TAC WORD_REDUCE_CONV THEN + REAL_INTEGER_TAC]);; + +(* ------------------------------------------------------------------------- *) +(* Instances of roughsqr. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_ROUGHSQR_P256K1_TAC = + ARM_MACRO_SIM_ABBREV_TAC secp256k1_jdouble_mc 65 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1. + !n. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = n + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0xb24) (word_add (read p3 t) (word n3),40) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) secp256k1_jdouble_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X15 s = read X15 t /\ + read X16 s = read X16 t /\ + read X17 s = word 4294968273 /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) s = + n) + (\s. read PC s = pcout /\ + read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 5)) s < 4294968274 * 2 EXP 256 /\ + (read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 5)) s == n EXP 2) (mod p_256k1)) + (MAYCHANGE [PC; X2; X3; X4; X5; X6; X7; X8; X9; + X10; X11; X12; X13; X14] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 5)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "n_" o lhand o concl) THEN + + (*** The initial squaring block, very similar to bignum_sqr_4_8 ***) + + ARM_ACCSTEPS_TAC SECP256K1_JDOUBLE_EXEC (1--45) (1--45) THEN + RULE_ASSUM_TAC(REWRITE_RULE[GSYM WORD_BITVAL; COND_SWAP]) THEN + MAP_EVERY ABBREV_TAC + [`l = bignum_of_wordlist[mullo_s31; sum_s33; sum_s35; sum_s37]`; + `h = bignum_of_wordlist[sum_s39; sum_s41; sum_s43; sum_s45]`] THEN + SUBGOAL_THEN `2 EXP 256 * h + l = n EXP 2` (SUBST1_TAC o SYM) THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"; "n"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_ARITH_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Reduction from 8 digits to 5 digits ***) + + REWRITE_TAC[CONG] THEN + SUBGOAL_THEN + `(2 EXP 256 * h + l) MOD p_256k1 = (4294968273 * h + l) MOD p_256k1` + SUBST1_TAC THENL + [ONCE_REWRITE_TAC[GSYM MOD_ADD_MOD] THEN + ONCE_REWRITE_TAC[GSYM MOD_MULT_LMOD] THEN + REWRITE_TAC[p_256k1] THEN CONV_TAC NUM_REDUCE_CONV; + ALL_TAC] THEN + ARM_ACCSTEPS_TAC SECP256K1_JDOUBLE_EXEC (46--62) (46--65) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + + MATCH_MP_TAC(MESON[] `y < n /\ x = y ==> x < n /\ x MOD p = y MOD p`) THEN + ASM_REWRITE_TAC[] THEN CONJ_TAC THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"] THEN CONV_TAC NUM_REDUCE_CONV THEN + BOUNDER_TAC[]; + ALL_TAC] THEN + RULE_ASSUM_TAC(REWRITE_RULE[COND_SWAP; GSYM WORD_BITVAL]) THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + MAP_EVERY EXPAND_TAC ["h"; "l"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_ARITH_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instances of roughmul. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_ROUGHMUL_P256K1_TAC = + ARM_MACRO_SIM_ABBREV_TAC secp256k1_jdouble_mc 87 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) t = n + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0xb24) (word_add (read p3 t) (word n3),40) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) secp256k1_jdouble_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X15 s = read X15 t /\ + read X16 s = read X16 t /\ + read X17 s = word 4294968273 /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) s = + n) + (\s. read PC s = pcout /\ + read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 5)) s < 4294968274 * 2 EXP 256 /\ + (read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 5)) s == m * n) (mod p_256k1)) + (MAYCHANGE [PC; X0; X1; X3; X4; X5; X6; X7; X8; X9; + X10; X11; X12; X13; X14] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 5)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "m_" o lhand o concl) THEN + + (*** The initial multiply block, very similar to bignum_mul_4_8 ***) + + ARM_ACCSTEPS_TAC SECP256K1_JDOUBLE_EXEC (1--67) (1--67) THEN + MAP_EVERY ABBREV_TAC + [`l = bignum_of_wordlist[mullo_s3; sum_s18; sum_s35; sum_s52]`; + `h = bignum_of_wordlist[sum_s62; sum_s64; sum_s66; sum_s67]`] THEN + SUBGOAL_THEN `2 EXP 256 * h + l = m * n` (SUBST1_TAC o SYM) THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"; "m"; "n"] THEN + REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_ARITH_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Reduction from 8 digits to 5 digits ***) + + REWRITE_TAC[CONG] THEN + SUBGOAL_THEN + `(2 EXP 256 * h + l) MOD p_256k1 = (4294968273 * h + l) MOD p_256k1` + SUBST1_TAC THENL + [ONCE_REWRITE_TAC[GSYM MOD_ADD_MOD] THEN + ONCE_REWRITE_TAC[GSYM MOD_MULT_LMOD] THEN + REWRITE_TAC[p_256k1] THEN CONV_TAC NUM_REDUCE_CONV; + ALL_TAC] THEN + ARM_ACCSTEPS_TAC SECP256K1_JDOUBLE_EXEC (68--84) (68--87) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + + MATCH_MP_TAC(MESON[] `y < n /\ x = y ==> x < n /\ x MOD p = y MOD p`) THEN + ASM_REWRITE_TAC[] THEN CONJ_TAC THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"] THEN CONV_TAC NUM_REDUCE_CONV THEN + BOUNDER_TAC[]; + ALL_TAC] THEN + RULE_ASSUM_TAC(REWRITE_RULE[COND_SWAP; GSYM WORD_BITVAL]) THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + MAP_EVERY EXPAND_TAC ["h"; "l"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_ARITH_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instances of weakdouble. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_WEAKDOUBLE_P256K1_TAC = + ARM_MACRO_SIM_ABBREV_TAC secp256k1_jdouble_mc 14 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1. + !n. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = n + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0xb24) (word_add (read p3 t) (word n3),32) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) secp256k1_jdouble_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X15 s = read X15 t /\ + read X16 s = read X16 t /\ + read X17 s = word 4294968273 /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) s = + n) + (\s. read PC s = pcout /\ + read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 4)) s < 2 EXP 256 /\ + (n < p_256k1 + ==> (read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 4)) s == 2 * n) (mod p_256k1))) + (MAYCHANGE [PC; X0; X1; X2; X3; X4; X5] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 4)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "n_" o lhand o concl) THEN + + ARM_ACCSTEPS_TAC SECP256K1_JDOUBLE_EXEC [7;9;11;13] (1--14) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(ONCE_DEPTH_CONV BIGNUM_LEXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; DISCH_TAC] THEN + + REWRITE_TAC[num_congruent; GSYM INT_OF_NUM_CLAUSES] THEN + MATCH_MP_TAC(MESON[] + `!x':int. x = x' /\ (x' == &2 * n) (mod p) + ==> (x == &2 * n) (mod p)`) THEN + EXISTS_TAC + `if &2 pow 255 <= (&n:int) then &2 * &n - &p_256k1 else &2 * (&n:int)` THEN + CONJ_TAC THENL [ALL_TAC; COND_CASES_TAC THEN CONV_TAC INTEGER_RULE] THEN + MATCH_MP_TAC INT_CONG_IMP_EQ THEN EXISTS_TAC `(&2:int) pow 256` THEN + CONJ_TAC THENL + [MATCH_MP_TAC(INT_ARITH + `(&0 <= x /\ x < e) /\ &0 <= y /\ y < e ==> abs(x - y:int) < e`) THEN + CONJ_TAC THENL + [REWRITE_TAC[INT_OF_NUM_CLAUSES] THEN BOUNDER_TAC[]; ALL_TAC] THEN + FIRST_X_ASSUM(MP_TAC o GEN_REWRITE_RULE I [GSYM INT_OF_NUM_LT]) THEN + REWRITE_TAC[p_256k1] THEN INT_ARITH_TAC; + ALL_TAC] THEN + REWRITE_TAC[REAL_INT_CONGRUENCE; int_of_num_th] THEN + ONCE_REWRITE_TAC[COND_RAND] THEN + REWRITE_TAC[int_sub_th; int_mul_th; int_of_num_th; int_pow_th; + int_eq; int_le] THEN + REWRITE_TAC[REAL_OF_NUM_CLAUSES; EXP_EQ_0; ARITH_EQ] THEN + + SUBGOAL_THEN + `~(val (word_and n_3 (word 9223372036854775808):int64) = 0) <=> + 2 EXP 255 <= n` + SUBST_ALL_TAC THENL + [EXPAND_TAC "n" THEN + REWRITE_TAC[ARITH_RULE + `2 EXP 255 <= n <=> 2 EXP 63 <= n DIV 2 EXP 192`] THEN + CONV_TAC(ONCE_DEPTH_CONV BIGNUM_OF_WORDLIST_DIV_CONV) THEN + REWRITE_TAC[ARITH_RULE `63 = 64 - 1`; GSYM DIMINDEX_64; GSYM MSB_VAL] THEN + REWRITE_TAC[GSYM(NUM_REDUCE_CONV `2 EXP 63`); DIMINDEX_64] THEN + REWRITE_TAC[VAL_WORD_AND_POW2; NUM_REDUCE_CONV `64 - 1`] THEN + REWRITE_TAC[MULT_EQ_0; EXP_EQ_0; BITVAL_EQ_0; ARITH_EQ]; + ALL_TAC] THEN + + SUBGOAL_THEN + `2 * n = + bignum_of_wordlist + [word_shl n_0 1; + word_subword ((word_join:int64->int64->int128) n_1 n_0) (63,64); + word_subword ((word_join:int64->int64->int128) n_2 n_1) (63,64); + word_subword ((word_join:int64->int64->int128) n_3 n_2) (63,64); + word_ushr n_3 63]` + SUBST1_TAC THENL + [EXPAND_TAC "n" THEN + REWRITE_TAC[val_def; DIMINDEX_64; bignum_of_wordlist] THEN + REWRITE_TAC[ARITH_RULE `i < 64 <=> 0 <= i /\ i <= 63`] THEN + REWRITE_TAC[GSYM IN_NUMSEG; IN_GSPEC] THEN + REWRITE_TAC[BIT_WORD_SUBWORD; BIT_WORD_JOIN; BIT_WORD_USHR; + BIT_WORD_AND; BIT_WORD_SHL; DIMINDEX_64; DIMINDEX_128] THEN + CONV_TAC NUM_REDUCE_CONV THEN + CONV_TAC(ONCE_DEPTH_CONV EXPAND_NSUM_CONV) THEN + CONV_TAC NUM_REDUCE_CONV THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC WORD_REDUCE_CONV THEN REWRITE_TAC[BITVAL_CLAUSES] THEN + ONCE_REWRITE_TAC[BIT_GUARD] THEN REWRITE_TAC[DIMINDEX_64] THEN + CONV_TAC NUM_REDUCE_CONV THEN REWRITE_TAC[BITVAL_CLAUSES] THEN + ARITH_TAC; + ALL_TAC] THEN + ABBREV_TAC `bb <=> 2 EXP 255 <= n` THEN + REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[p_256k1] THEN + ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN CONV_TAC WORD_REDUCE_CONV THEN + REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instance (12,9) of cmsub (the only one used in this code). *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_CMSUBC9_P256K1_TAC = + ARM_MACRO_SIM_ABBREV_TAC secp256k1_jdouble_mc 57 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 5)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 5)) t = n + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0xb24) (word_add (read p3 t) (word n3),32) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) secp256k1_jdouble_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X15 s = read X15 t /\ + read X16 s = read X16 t /\ + read X17 s = word 4294968273 /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 5)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 5)) s = + n) + (\s. read PC s = pcout /\ + (m < 4294968274 * 2 EXP 256 /\ n < 4294968274 * 2 EXP 256 + ==> &(read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 4)) s) = (&12 * &m - &9 * &n) rem &p_256k1)) + (MAYCHANGE [PC; X0; X1; X2; X3; X4; X5; X6; X7; X8; X9; + X10; X11; X12; X13; X14] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 4)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + ASM_CASES_TAC + `m < 4294968274 * 2 EXP 256 /\ n < 4294968274 * 2 EXP 256` + THENL [ASM_REWRITE_TAC[]; ARM_SIM_TAC SECP256K1_JDOUBLE_EXEC (1--57)] THEN + FIRST_X_ASSUM(CONJUNCTS_THEN ASSUME_TAC) THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "m_" o lhand o concl) THEN + + (*** The accumulation of 12 * m, without the final 2^296 bump ***) + + ARM_ACCSTEPS_TAC SECP256K1_JDOUBLE_EXEC + [3;4;6;7;10;12;14;16;17] (1--18) THEN + ABBREV_TAC + `m12 = + bignum_of_wordlist[mullo_s3; sum_s10; sum_s12; sum_s14; sum_s17]` THEN + SUBGOAL_THEN `m12 = 12 * m` SUBST_ALL_TAC THENL + [MATCH_MP_TAC CONG_IMP_EQ THEN EXISTS_TAC `2 EXP 320` THEN + CONV_TAC NUM_REDUCE_CONV THEN + CONJ_TAC THENL [EXPAND_TAC "m12" THEN BOUNDER_TAC[]; ALL_TAC] THEN + CONJ_TAC THENL + [UNDISCH_TAC `m < 4294968274 * 2 EXP 256` THEN ARITH_TAC; ALL_TAC] THEN + REWRITE_TAC[REAL_CONGRUENCE] THEN CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["m"; "m12"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** The extra bump ***) + + ABBREV_TAC + `m12' = + bignum_of_wordlist[mullo_s3; sum_s10; sum_s12; sum_s14; + word_or sum_s17 (word 1099511627776)]` THEN + SUBGOAL_THEN `m12' = 2 EXP 40 * 2 EXP 256 + 12 * m` SUBST_ALL_TAC THENL + [FIRST_ASSUM(fun th -> + GEN_REWRITE_TAC (RAND_CONV o RAND_CONV) [SYM th]) THEN + EXPAND_TAC "m12'" THEN REWRITE_TAC[bignum_of_wordlist] THEN + MP_TAC(ISPECL [`sum_s17:int64`; `word 1099511627776:int64`] + VAL_WORD_OR_DISJOINT) THEN + CONV_TAC WORD_REDUCE_CONV THEN ANTS_TAC THENL [ALL_TAC; ARITH_TAC] THEN + REWRITE_TAC[WORD_AND_EQ_0] THEN CONV_TAC WORD_REDUCE_CONV THEN + REWRITE_TAC[DISJOINT_SING; IN_BITS_OF_WORD; BIT_VAL] THEN + MATCH_MP_TAC(MESON[ODD] `n = 0 ==> ~ODD n`) THEN + SIMP_TAC[DIV_EQ_0; EXP_EQ_0; ARITH_EQ] THEN + SUBGOAL_THEN `(12 * m) DIV 2 EXP 256 < 2 EXP 40` MP_TAC THENL + [UNDISCH_TAC `m < 4294968274 * 2 EXP 256` THEN ARITH_TAC; + ALL_TAC] THEN + FIRST_X_ASSUM(fun th -> GEN_REWRITE_TAC (funpow 3 LAND_CONV) [SYM th]) THEN + CONV_TAC(ONCE_DEPTH_CONV BIGNUM_OF_WORDLIST_DIV_CONV) THEN + REWRITE_TAC[]; + ALL_TAC] THEN + + (*** The accumulation of 9 * n + 2^40 * 4294968273 ***) + + ARM_ACCSTEPS_TAC SECP256K1_JDOUBLE_EXEC + [21;23;24;25;26;28;30;33;34;36;37;38] (19--38) THEN + ABBREV_TAC + `n9' = + bignum_of_wordlist[sum_s26; sum_s28; sum_s33; sum_s37; sum_s38]` THEN + SUBGOAL_THEN `n9' = 2 EXP 40 * 4294968273 + 9 * n` SUBST_ALL_TAC THENL + [MATCH_MP_TAC CONG_IMP_EQ THEN EXISTS_TAC `2 EXP 320` THEN + CONV_TAC NUM_REDUCE_CONV THEN + CONJ_TAC THENL [EXPAND_TAC "n9'" THEN BOUNDER_TAC[]; ALL_TAC] THEN + CONJ_TAC THENL + [UNDISCH_TAC `n < 4294968274 * 2 EXP 256` THEN ARITH_TAC; ALL_TAC] THEN + REWRITE_TAC[REAL_CONGRUENCE] THEN CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["n"; "n9'"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + CONV_TAC(RAND_CONV REAL_POLY_CONV) THEN + ACCUMULATOR_POP_ASSUM_LIST + (MP_TAC o end_itlist CONJ o filter (is_ratconst o rand o concl) o + DECARRY_RULE) THEN + DISCH_THEN SUBST1_TAC THEN REAL_INTEGER_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** The subtraction giving the nonnegative result to reduce modulo ***) + + ARM_ACCSTEPS_TAC SECP256K1_JDOUBLE_EXEC (39--43) (39--43) THEN + ABBREV_TAC + `ca = bignum_of_wordlist[sum_s39; sum_s40; sum_s41; sum_s42; sum_s43]` THEN + SUBGOAL_THEN + `(&12 * &m - &9 * &n) = &ca:int - &2 pow 40 * &p_256k1` + ASSUME_TAC THENL + [SUBGOAL_THEN `&p_256k1:int = &2 pow 256 - &4294968273` SUBST1_TAC THENL + [REWRITE_TAC[p_256k1] THEN CONV_TAC INT_REDUCE_CONV; ALL_TAC] THEN + REWRITE_TAC[INT_ARITH + `m - n:int = ca - &2 pow 40 * (e - k) <=> + (&2 pow 40 * e + m) - (&2 pow 40 * k + n) = ca`] THEN + MATCH_MP_TAC INT_CONG_IMP_EQ THEN EXISTS_TAC `(&2:int) pow 320` THEN + CONJ_TAC THENL + [MATCH_MP_TAC(INT_ARITH + `(&0 <= x /\ x < e) /\ &0 <= y /\ y < e ==> abs(x - y:int) < e`) THEN + CONJ_TAC THENL + [MAP_EVERY UNDISCH_TAC + [`m < 4294968274 * 2 EXP 256`; `n < 4294968274 * 2 EXP 256`] THEN + REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES] THEN INT_ARITH_TAC; + EXPAND_TAC "ca" THEN REWRITE_TAC[INT_OF_NUM_CLAUSES] THEN + BOUNDER_TAC[]]; + REWRITE_TAC[INT_OF_NUM_CLAUSES] THEN + FIRST_X_ASSUM(fun th -> + GEN_REWRITE_TAC (RATOR_CONV o LAND_CONV o LAND_CONV o RAND_CONV) + [SYM th]) THEN + FIRST_X_ASSUM(fun th -> + GEN_REWRITE_TAC (RATOR_CONV o LAND_CONV o RAND_CONV o RAND_CONV) + [SYM th])] THEN + REWRITE_TAC[REAL_INT_CONGRUENCE] THEN + REWRITE_TAC[int_sub_th; int_mul_th; int_of_num_th; int_pow_th; + int_eq; int_le] THEN + REWRITE_TAC[REAL_OF_NUM_CLAUSES; EXP_EQ_0; ARITH_EQ] THEN + EXPAND_TAC "ca" THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + ASM_REWRITE_TAC[INT_REM_MUL_ADD; INT_ARITH + `x - k * p:int = x + (--k) * p`] THEN + REWRITE_TAC[INT_OF_NUM_CLAUSES; INT_OF_NUM_REM] THEN + + (*** Instantiate the quotient approximation lemma ***) + + MP_TAC(SPEC `ca:num` p256k1redlemma) THEN ANTS_TAC THENL + [REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES] THEN + FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP (INT_ARITH + `mnt:int = ca - ep ==> mnt + ep <= b ==> ca <= b`)) THEN + MAP_EVERY UNDISCH_TAC + [`m < 4294968274 * 2 EXP 256`; `n < 4294968274 * 2 EXP 256`] THEN + REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES] THEN + REWRITE_TAC[p_256k1] THEN CONV_TAC NUM_REDUCE_CONV THEN + CONV_TAC INT_ARITH; + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN STRIP_TAC] THEN + + SUBGOAL_THEN `ca DIV 2 EXP 256 = val(sum_s43:int64)` SUBST_ALL_TAC THENL + [EXPAND_TAC "ca" THEN CONV_TAC(LAND_CONV BIGNUM_OF_WORDLIST_DIV_CONV) THEN + REFL_TAC; + FIRST_ASSUM(ASSUME_TAC o MATCH_MP (ARITH_RULE + `n + 1 < 2 EXP 64 ==> n < 2 EXP 64 - 1`))] THEN + ARM_STEPS_TAC SECP256K1_JDOUBLE_EXEC [44] THEN + ABBREV_TAC `q:int64 = word_add sum_s43 (word 1)` THEN + SUBGOAL_THEN `val(sum_s43:int64) + 1 = val(q:int64)` SUBST_ALL_TAC THENL + [EXPAND_TAC "q" THEN REWRITE_TAC[VAL_WORD_ADD; VAL_WORD_1] THEN + ASM_SIMP_TAC[DIMINDEX_64; MOD_LT]; + ALL_TAC] THEN + + (*** The rest of the computation ***) + + ARM_ACCSTEPS_TAC SECP256K1_JDOUBLE_EXEC + [45;47;48;49;50;52;53;55;56] (45--57) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC MOD_UNIQ_BALANCED_REAL THEN + MAP_EVERY EXISTS_TAC [`val(q:int64)`; `256`] THEN ASM_REWRITE_TAC[] THEN + CONJ_TAC THENL [REWRITE_TAC[p_256k1] THEN ARITH_TAC; ALL_TAC] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN + + (*** Comparison computation and then the rest is easy ***) + + SUBGOAL_THEN `ca < val(q:int64) * p_256k1 <=> ~carry_s50` SUBST1_TAC THENL + [CONV_TAC SYM_CONV THEN MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN + EXISTS_TAC `256` THEN EXPAND_TAC "ca" THEN + REWRITE_TAC[p_256k1; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + REWRITE_TAC[REAL_BITVAL_NOT] THEN + SUBGOAL_THEN `&(val(sum_s43:int64)):real = &(val(q:int64)) - &1` + SUBST1_TAC THENL + [FIRST_X_ASSUM(MP_TAC o MATCH_MP (ARITH_RULE + `n < 2 EXP 64 - 1 ==> n + 1 < 2 EXP 64`)) THEN + UNDISCH_THEN `word_add sum_s43 (word 1):int64 = q` (SUBST1_TAC o SYM) THEN + SIMP_TAC[VAL_WORD_ADD; VAL_WORD_1; DIMINDEX_64; MOD_LT] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN REAL_ARITH_TAC; + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]]; + EXPAND_TAC "ca" THEN + REWRITE_TAC[REAL_BITVAL_NOT] THEN + REWRITE_TAC[p_256k1; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + RULE_ASSUM_TAC(REWRITE_RULE[WORD_UNMASK_64]) THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + ASM_CASES_TAC `carry_s50:bool` THEN + ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN CONV_TAC WORD_REDUCE_CONV THEN + REAL_INTEGER_TAC]);; + +(* ------------------------------------------------------------------------- *) +(* Instances of cmsub38. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_CMSUB38_P256K1_TAC = + ARM_MACRO_SIM_ABBREV_TAC secp256k1_jdouble_mc 52 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 5)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 5)) t = n + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0xb24) (word_add (read p3 t) (word n3),32) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) secp256k1_jdouble_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X15 s = read X15 t /\ + read X16 s = read X16 t /\ + read X17 s = word 4294968273 /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 5)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 5)) s = + n) + (\s. read PC s = pcout /\ + (m < 4294968274 * 2 EXP 256 /\ n < 4294968274 * 2 EXP 256 + ==> &(read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 4)) s) = (&3 * &m - &8 * &n) rem &p_256k1)) + (MAYCHANGE [PC; X0; X1; X2; X3; X4; X5; X6; X7; X8; X9; + X10; X11; X12; X13; X14] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 4)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + ASM_CASES_TAC + `m < 4294968274 * 2 EXP 256 /\ n < 4294968274 * 2 EXP 256` + THENL [ASM_REWRITE_TAC[]; ARM_SIM_TAC SECP256K1_JDOUBLE_EXEC (1--52)] THEN + FIRST_X_ASSUM(CONJUNCTS_THEN ASSUME_TAC) THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "m_" o lhand o concl) THEN + + (*** The accumulation of 3 * m, without the final 2^296 bump ***) + + ARM_ACCSTEPS_TAC SECP256K1_JDOUBLE_EXEC + [3;4;6;7;10;12;14;16;17] (1--18) THEN + ABBREV_TAC + `m3 = + bignum_of_wordlist[mullo_s3; sum_s10; sum_s12; sum_s14; sum_s17]` THEN + SUBGOAL_THEN `m3 = 3 * m` SUBST_ALL_TAC THENL + [MATCH_MP_TAC CONG_IMP_EQ THEN EXISTS_TAC `2 EXP 320` THEN + CONV_TAC NUM_REDUCE_CONV THEN + CONJ_TAC THENL [EXPAND_TAC "m3" THEN BOUNDER_TAC[]; ALL_TAC] THEN + CONJ_TAC THENL + [UNDISCH_TAC `m < 4294968274 * 2 EXP 256` THEN ARITH_TAC; ALL_TAC] THEN + REWRITE_TAC[REAL_CONGRUENCE] THEN CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["m"; "m3"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** The extra bump ***) + + ABBREV_TAC + `m3' = + bignum_of_wordlist[mullo_s3; sum_s10; sum_s12; sum_s14; + word_or sum_s17 (word 1099511627776)]` THEN + SUBGOAL_THEN `m3' = 2 EXP 40 * 2 EXP 256 + 3 * m` SUBST_ALL_TAC THENL + [FIRST_ASSUM(fun th -> + GEN_REWRITE_TAC (RAND_CONV o RAND_CONV) [SYM th]) THEN + EXPAND_TAC "m3'" THEN REWRITE_TAC[bignum_of_wordlist] THEN + MP_TAC(ISPECL [`sum_s17:int64`; `word 1099511627776:int64`] + VAL_WORD_OR_DISJOINT) THEN + CONV_TAC WORD_REDUCE_CONV THEN ANTS_TAC THENL [ALL_TAC; ARITH_TAC] THEN + REWRITE_TAC[WORD_AND_EQ_0] THEN CONV_TAC WORD_REDUCE_CONV THEN + REWRITE_TAC[DISJOINT_SING; IN_BITS_OF_WORD; BIT_VAL] THEN + MATCH_MP_TAC(MESON[ODD] `n = 0 ==> ~ODD n`) THEN + SIMP_TAC[DIV_EQ_0; EXP_EQ_0; ARITH_EQ] THEN + SUBGOAL_THEN `(3 * m) DIV 2 EXP 256 < 2 EXP 40` MP_TAC THENL + [UNDISCH_TAC `m < 4294968274 * 2 EXP 256` THEN ARITH_TAC; + ALL_TAC] THEN + FIRST_X_ASSUM(fun th -> GEN_REWRITE_TAC (funpow 3 LAND_CONV) [SYM th]) THEN + CONV_TAC(ONCE_DEPTH_CONV BIGNUM_OF_WORDLIST_DIV_CONV) THEN + REWRITE_TAC[]; + ALL_TAC] THEN + + (*** The accumulation of 8 * n + 2^40 * 4294968273 ***) + + ARM_ACCSTEPS_TAC SECP256K1_JDOUBLE_EXEC [22;25;28;31;33] (19--33) THEN + ABBREV_TAC + `n8' = + bignum_of_wordlist[sum_s22; sum_s25; sum_s28; sum_s31; sum_s33]` THEN + SUBGOAL_THEN `n8' = 2 EXP 40 * 4294968273 + 8 * n` SUBST_ALL_TAC THENL + [MATCH_MP_TAC CONG_IMP_EQ THEN EXISTS_TAC `2 EXP 320` THEN + CONV_TAC NUM_REDUCE_CONV THEN + CONJ_TAC THENL [EXPAND_TAC "n8'" THEN BOUNDER_TAC[]; ALL_TAC] THEN + CONJ_TAC THENL + [UNDISCH_TAC `n < 4294968274 * 2 EXP 256` THEN ARITH_TAC; ALL_TAC] THEN + REWRITE_TAC[REAL_CONGRUENCE] THEN CONV_TAC NUM_REDUCE_CONV THEN + SUBGOAL_THEN + `8 * n = + bignum_of_wordlist + [word_shl n_0 3; + word_subword ((word_join:int64->int64->int128) n_1 n_0) (61,64); + word_subword ((word_join:int64->int64->int128) n_2 n_1) (61,64); + word_subword ((word_join:int64->int64->int128) n_3 n_2) (61,64); + word_subword ((word_join:int64->int64->int128) n_4 n_3) (61,64); + word_ushr n_4 61]` + SUBST1_TAC THENL + [EXPAND_TAC "n" THEN REWRITE_TAC[bignum_of_wordlist] THEN + REWRITE_TAC[val_def; DIMINDEX_64; bignum_of_wordlist] THEN + REWRITE_TAC[ARITH_RULE `i < 64 <=> 0 <= i /\ i <= 63`] THEN + REWRITE_TAC[GSYM IN_NUMSEG; IN_GSPEC] THEN + REWRITE_TAC[BIT_WORD_SUBWORD; BIT_WORD_JOIN; BIT_WORD_USHR; + BIT_WORD_SHL; DIMINDEX_64; DIMINDEX_128] THEN + CONV_TAC NUM_REDUCE_CONV THEN + CONV_TAC(ONCE_DEPTH_CONV EXPAND_NSUM_CONV) THEN + CONV_TAC NUM_REDUCE_CONV THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC WORD_REDUCE_CONV THEN REWRITE_TAC[BITVAL_CLAUSES] THEN + ONCE_REWRITE_TAC[BIT_GUARD] THEN REWRITE_TAC[DIMINDEX_64] THEN + CONV_TAC NUM_REDUCE_CONV THEN REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC NUM_RING; + MAP_EVERY EXPAND_TAC ["n"; "n8'"] THEN + REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC]; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** The subtraction giving the nonnegative result to reduce modulo ***) + + ARM_ACCSTEPS_TAC SECP256K1_JDOUBLE_EXEC (34--38) (34--38) THEN + ABBREV_TAC + `ca = bignum_of_wordlist[sum_s34; sum_s35; sum_s36; sum_s37; sum_s38]` THEN + SUBGOAL_THEN + `(&3 * &m - &8 * &n) = &ca:int - &2 pow 40 * &p_256k1` + ASSUME_TAC THENL + [SUBGOAL_THEN `&p_256k1:int = &2 pow 256 - &4294968273` SUBST1_TAC THENL + [REWRITE_TAC[p_256k1] THEN CONV_TAC INT_REDUCE_CONV; ALL_TAC] THEN + REWRITE_TAC[INT_ARITH + `m - n:int = ca - &2 pow 40 * (e - k) <=> + (&2 pow 40 * e + m) - (&2 pow 40 * k + n) = ca`] THEN + MATCH_MP_TAC INT_CONG_IMP_EQ THEN EXISTS_TAC `(&2:int) pow 320` THEN + CONJ_TAC THENL + [MATCH_MP_TAC(INT_ARITH + `(&0 <= x /\ x < e) /\ &0 <= y /\ y < e ==> abs(x - y:int) < e`) THEN + CONJ_TAC THENL + [MAP_EVERY UNDISCH_TAC + [`m < 4294968274 * 2 EXP 256`; `n < 4294968274 * 2 EXP 256`] THEN + REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES] THEN INT_ARITH_TAC; + EXPAND_TAC "ca" THEN REWRITE_TAC[INT_OF_NUM_CLAUSES] THEN + BOUNDER_TAC[]]; + REWRITE_TAC[INT_OF_NUM_CLAUSES] THEN + FIRST_X_ASSUM(fun th -> + GEN_REWRITE_TAC (RATOR_CONV o LAND_CONV o LAND_CONV o RAND_CONV) + [SYM th]) THEN + FIRST_X_ASSUM(fun th -> + GEN_REWRITE_TAC (RATOR_CONV o LAND_CONV o RAND_CONV o RAND_CONV) + [SYM th])] THEN + REWRITE_TAC[REAL_INT_CONGRUENCE] THEN + REWRITE_TAC[int_sub_th; int_mul_th; int_of_num_th; int_pow_th; + int_eq; int_le] THEN + REWRITE_TAC[REAL_OF_NUM_CLAUSES; EXP_EQ_0; ARITH_EQ] THEN + EXPAND_TAC "ca" THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + ASM_REWRITE_TAC[INT_REM_MUL_ADD; INT_ARITH + `x - k * p:int = x + (--k) * p`] THEN + REWRITE_TAC[INT_OF_NUM_CLAUSES; INT_OF_NUM_REM] THEN + + (*** Instantiate the quotient approximation lemma ***) + + MP_TAC(SPEC `ca:num` p256k1redlemma) THEN ANTS_TAC THENL + [REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES] THEN + FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP (INT_ARITH + `mnt:int = ca - ep ==> mnt + ep <= b ==> ca <= b`)) THEN + MAP_EVERY UNDISCH_TAC + [`m < 4294968274 * 2 EXP 256`; `n < 4294968274 * 2 EXP 256`] THEN + REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES] THEN + REWRITE_TAC[p_256k1] THEN CONV_TAC NUM_REDUCE_CONV THEN + CONV_TAC INT_ARITH; + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN STRIP_TAC] THEN + + SUBGOAL_THEN `ca DIV 2 EXP 256 = val(sum_s38:int64)` SUBST_ALL_TAC THENL + [EXPAND_TAC "ca" THEN CONV_TAC(LAND_CONV BIGNUM_OF_WORDLIST_DIV_CONV) THEN + REFL_TAC; + FIRST_ASSUM(ASSUME_TAC o MATCH_MP (ARITH_RULE + `n + 1 < 2 EXP 64 ==> n < 2 EXP 64 - 1`))] THEN + ARM_STEPS_TAC SECP256K1_JDOUBLE_EXEC [39] THEN + ABBREV_TAC `q:int64 = word_add sum_s38 (word 1)` THEN + SUBGOAL_THEN `val(sum_s38:int64) + 1 = val(q:int64)` SUBST_ALL_TAC THENL + [EXPAND_TAC "q" THEN REWRITE_TAC[VAL_WORD_ADD; VAL_WORD_1] THEN + ASM_SIMP_TAC[DIMINDEX_64; MOD_LT]; + ALL_TAC] THEN + + (*** The rest of the computation ***) + + ARM_ACCSTEPS_TAC SECP256K1_JDOUBLE_EXEC + [40;42;43;44;45;47;48;50;51] (40--52) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC MOD_UNIQ_BALANCED_REAL THEN + MAP_EVERY EXISTS_TAC [`val(q:int64)`; `256`] THEN ASM_REWRITE_TAC[] THEN + CONJ_TAC THENL [REWRITE_TAC[p_256k1] THEN ARITH_TAC; ALL_TAC] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN + + (*** Comparison computation and then the rest is easy ***) + + SUBGOAL_THEN `ca < val(q:int64) * p_256k1 <=> ~carry_s45` SUBST1_TAC THENL + [CONV_TAC SYM_CONV THEN MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN + EXISTS_TAC `256` THEN EXPAND_TAC "ca" THEN + REWRITE_TAC[p_256k1; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + REWRITE_TAC[REAL_BITVAL_NOT] THEN + SUBGOAL_THEN `&(val(sum_s38:int64)):real = &(val(q:int64)) - &1` + SUBST1_TAC THENL + [FIRST_X_ASSUM(MP_TAC o MATCH_MP (ARITH_RULE + `n < 2 EXP 64 - 1 ==> n + 1 < 2 EXP 64`)) THEN + UNDISCH_THEN `word_add sum_s38 (word 1):int64 = q` (SUBST1_TAC o SYM) THEN + SIMP_TAC[VAL_WORD_ADD; VAL_WORD_1; DIMINDEX_64; MOD_LT] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN REAL_ARITH_TAC; + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]]; + EXPAND_TAC "ca" THEN + REWRITE_TAC[REAL_BITVAL_NOT] THEN + REWRITE_TAC[p_256k1; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + RULE_ASSUM_TAC(REWRITE_RULE[WORD_UNMASK_64]) THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + ASM_CASES_TAC `carry_s45:bool` THEN + ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN CONV_TAC WORD_REDUCE_CONV THEN + REAL_INTEGER_TAC]);; + +(* ------------------------------------------------------------------------- *) +(* Instances of cmsub41. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_CMSUB41_P256K1_TAC = + ARM_MACRO_SIM_ABBREV_TAC secp256k1_jdouble_mc 29 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 5)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) t = n + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0xb24) (word_add (read p3 t) (word n3),32) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) secp256k1_jdouble_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X15 s = read X15 t /\ + read X16 s = read X16 t /\ + read X17 s = word 4294968273 /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 5)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) s = + n) + (\s. read PC s = pcout /\ + (m < 4294968274 * 2 EXP 256 /\ n < p_256k1 + ==> &(read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 4)) s) = (&4 * &m - &n) rem &p_256k1)) + (MAYCHANGE [PC; X0; X1; X2; X3; X4; X5; X6; X7] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 4)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + ASM_CASES_TAC `m < 4294968274 * 2 EXP 256 /\ n < p_256k1` THENL + [ASM_REWRITE_TAC[]; ARM_SIM_TAC SECP256K1_JDOUBLE_EXEC (1--29)] THEN + FIRST_X_ASSUM(CONJUNCTS_THEN ASSUME_TAC) THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "m_" o lhand o concl) THEN + + (*** Instantiate the (integer) quotient approximation lemma ***) + + MP_TAC(SPEC `&4 * &m - &n:int` p256k1shortintredlemma) THEN ANTS_TAC THENL + [ASM_SIMP_TAC[INT_OF_NUM_LT; INT_ARITH + `n:int < p ==> --p <= &4 * &m - n`] THEN + UNDISCH_TAC `m < 4294968274 * 2 EXP 256` THEN + REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES; p_256k1] THEN INT_ARITH_TAC; + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN STRIP_TAC] THEN + + (*** Main shift-subtract block ***) + + ARM_ACCSTEPS_TAC SECP256K1_JDOUBLE_EXEC [4;6;10;12;15;16] (1--16) THEN + ABBREV_TAC `ca = bignum_of_wordlist + [sum_s4; sum_s6; sum_s10; sum_s12; sum_s16]` THEN + SUBGOAL_THEN `&2 pow 256 + &4 * &m - &n:int = &ca` + (fun th -> SUBST_ALL_TAC th THEN ASSUME_TAC th) + THENL + [REWRITE_TAC[int_eq; int_add_th; int_sub_th; int_pow_th; + int_mul_th; int_of_num_th] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`320`; `&0:real`] THEN CONJ_TAC THENL + [CONJ_TAC THENL + [MAP_EVERY EXPAND_TAC ["m"; "n"] THEN BOUNDER_TAC[]; + UNDISCH_TAC `m < 4294968274 * 2 EXP 256` THEN + REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES; p_256k1] THEN INT_ARITH_TAC]; + ALL_TAC] THEN + CONJ_TAC THENL [EXPAND_TAC "ca" THEN BOUNDER_TAC[]; ALL_TAC] THEN + REWRITE_TAC[INTEGER_CLOSED] THEN + SUBGOAL_THEN + `&4 * &m:real = + &(bignum_of_wordlist + [word_shl m_0 2; + word_subword ((word_join:int64->int64->int128) m_1 m_0) (62,64); + word_subword ((word_join:int64->int64->int128) m_2 m_1) (62,64); + word_subword ((word_join:int64->int64->int128) m_3 m_2) (62,64); + word_subword ((word_join:int64->int64->int128) m_4 m_3) (62,64); + word_ushr m_4 62])` + SUBST1_TAC THENL + [EXPAND_TAC "m" THEN + REWRITE_TAC[bignum_of_wordlist; REAL_OF_NUM_CLAUSES] THEN + REWRITE_TAC[val_def; DIMINDEX_64; bignum_of_wordlist] THEN + REWRITE_TAC[ARITH_RULE `i < 64 <=> 0 <= i /\ i <= 63`] THEN + REWRITE_TAC[GSYM IN_NUMSEG; IN_GSPEC] THEN + REWRITE_TAC[BIT_WORD_SUBWORD; BIT_WORD_JOIN; BIT_WORD_USHR; + BIT_WORD_SHL; DIMINDEX_64; DIMINDEX_128] THEN + CONV_TAC NUM_REDUCE_CONV THEN + CONV_TAC(ONCE_DEPTH_CONV EXPAND_NSUM_CONV) THEN + CONV_TAC NUM_REDUCE_CONV THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC WORD_REDUCE_CONV THEN REWRITE_TAC[BITVAL_CLAUSES] THEN + ONCE_REWRITE_TAC[BIT_GUARD] THEN REWRITE_TAC[DIMINDEX_64] THEN + CONV_TAC NUM_REDUCE_CONV THEN REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC NUM_RING; + MAP_EVERY EXPAND_TAC ["n"; "ca"] THEN + REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + REWRITE_TAC[REAL_BITVAL_NOT] THEN REAL_INTEGER_TAC]; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Quotient estimate is just the top word after the +1 ***) + + ABBREV_TAC `q:int64 = sum_s16` THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o + check (free_in `sum_s16:int64` o concl))) THEN + SUBGOAL_THEN `&ca div &2 pow 256 = &(val(q:int64))` SUBST_ALL_TAC THENL + [REWRITE_TAC[INT_OF_NUM_CLAUSES; INT_OF_NUM_DIV] THEN + EXPAND_TAC "ca" THEN CONV_TAC(LAND_CONV BIGNUM_OF_WORDLIST_DIV_CONV) THEN + REFL_TAC; + ALL_TAC] THEN + + (*** The rest of the computation ***) + + ARM_ACCSTEPS_TAC SECP256K1_JDOUBLE_EXEC + [17;18;20;21;22; 24;25;27;28] (17--29) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(ONCE_DEPTH_CONV BIGNUM_LEXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + + CONV_TAC SYM_CONV THEN MATCH_MP_TAC INT_REM_UNIQ_BALANCED_MOD THEN + MAP_EVERY EXISTS_TAC [`&(val(q:int64)):int`; `256`] THEN + ASM_REWRITE_TAC[] THEN + REPEAT(CONJ_TAC THENL + [REWRITE_TAC[INT_OF_NUM_CLAUSES; p_256k1] THEN BOUNDER_TAC[]; ALL_TAC]) THEN + ONCE_REWRITE_TAC[INT_ARITH + `&4 * m - n:int = (&2 pow 256 + &4 * m - n) - &2 pow 256`] THEN + ASM_REWRITE_TAC[] THEN + + (*** Comparison computation and then the rest is easy ***) + + SUBGOAL_THEN + `(&ca - &2 pow 256):int < &(val(q:int64)) * &p_256k1 <=> ~carry_s22` + SUBST1_TAC THENL + [REWRITE_TAC[INT_LT_SUB_RADD; INT_OF_NUM_CLAUSES] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN + EXISTS_TAC `256` THEN EXPAND_TAC "ca" THEN + REWRITE_TAC[p_256k1; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + REWRITE_TAC[REAL_BITVAL_NOT] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + REWRITE_TAC[INTEGER_RULE + `(a:int == b + c - p) (mod p) <=> (a == b + c) (mod p)`] THEN + REWRITE_TAC[INT_OF_NUM_CLAUSES; GSYM num_congruent] THEN + REWRITE_TAC[REAL_CONGRUENCE; EXP_EQ_0; ARITH_EQ] THEN + EXPAND_TAC "ca" THEN REWRITE_TAC[REAL_BITVAL_NOT] THEN + REWRITE_TAC[p_256k1; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + RULE_ASSUM_TAC(REWRITE_RULE[WORD_UNMASK_64]) THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + REWRITE_TAC[WORD_AND_MASK; WORD_XOR_MASK] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + ASM_CASES_TAC `carry_s22:bool` THEN + ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN CONV_TAC WORD_REDUCE_CONV THEN + REAL_INTEGER_TAC]);; + +(* ------------------------------------------------------------------------- *) +(* Overall point operation proof. *) +(* ------------------------------------------------------------------------- *) + +let SECP256K1_JDOUBLE_CORRECT = time prove + (`!p3 p1 t1 pc stackpointer. + aligned 16 stackpointer /\ + ALLPAIRS nonoverlapping + [(p3,96); (stackpointer,384)] + [(word pc,0xb24); (p1,96)] /\ + nonoverlapping (p3,96) (stackpointer,384) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) secp256k1_jdouble_mc /\ + read PC s = word(pc + 0x4) /\ + read SP s = stackpointer /\ + C_ARGUMENTS [p3; p1] s /\ + bignum_triple_from_memory (p1,4) s = t1) + (\s. read PC s = word (pc + 0xb1c) /\ + (!x y z. + ~(z = &0) /\ + t1 = tripled secp256k1_encode (x,y,z) + ==> bignum_triple_from_memory(p3,4) s = + tripled secp256k1_encode + (jacobian_add secp256k1 (x,y,z) (x,y,z)))) + (MAYCHANGE [PC; X0; X1; X2; X3; X4; X5; X6; X7; X8; X9; X10; + X11; X12; X13; X14; X15; X16; X17] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,96); + memory :> bytes(stackpointer,384)])`, + REWRITE_TAC[FORALL_PAIR_THM] THEN + MAP_EVERY X_GEN_TAC + [`p3:int64`; `p1:int64`; `x:num`; `y:num`; `z:num`; + `pc:num`; `stackpointer:int64`] THEN + REWRITE_TAC[ALLPAIRS; ALL; NONOVERLAPPING_CLAUSES] THEN STRIP_TAC THEN + REWRITE_TAC[C_ARGUMENTS; SOME_FLAGS; PAIR_EQ; bignum_triple_from_memory] THEN + CONV_TAC(ONCE_DEPTH_CONV NUM_MULT_CONV) THEN + CONV_TAC(ONCE_DEPTH_CONV NORMALIZE_RELATIVE_ADDRESS_CONV) THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + + LOCAL_SQR_P256K1_TAC 4 ["y_2";"y_1"] THEN + LOCAL_SQR_P256K1_TAC 0 ["x_2";"x_1"] THEN + LOCAL_WEAKDOUBLE_P256K1_TAC 0 ["tmp";"y_1"] THEN + LOCAL_ROUGHMUL_P256K1_TAC 0 ["xy2";"x_1";"y_2"] THEN + LOCAL_ROUGHSQR_P256K1_TAC 0 ["x_4";"x_2"] THEN + LOCAL_MUL_P256K1_TAC 0 ["z_3";"z_1";"tmp"] THEN + LOCAL_CMSUBC9_P256K1_TAC 0 ["d";"xy2";"x_4"] THEN + LOCAL_ROUGHSQR_P256K1_TAC 0 ["y_4";"y_2"] THEN + LOCAL_ROUGHMUL_P256K1_TAC 0 ["dx2";"x_2";"d"] THEN + LOCAL_CMSUB41_P256K1_TAC 0 ["x_3";"xy2";"d"] THEN + LOCAL_CMSUB38_P256K1_TAC 0 ["y_3";"dx2";"y_4"] THEN + + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + DISCARD_STATE_TAC "s15" THEN + DISCARD_MATCHING_ASSUMPTIONS [`nonoverlapping_modulo a b c`] THEN + MAP_EVERY X_GEN_TAC [`x':int`; `y':int`; `z':int`] THEN + DISCH_THEN(CONJUNCTS_THEN2 ASSUME_TAC MP_TAC) THEN + REWRITE_TAC[tripled; secp256k1_encode; PAIR_EQ; modular_encode] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN + (STRIP_ASSUME_TAC o MATCH_MP unilemma2)) THEN + + (*** Dispose of any range hypotheses ***) + + REPEAT(FIRST_X_ASSUM(MP_TAC o check (is_imp o concl))) THEN + ANTS_TAC THENL [FIRST_ASSUM ACCEPT_TAC; DISCH_TAC] THEN ANTS_TAC THENL + [ASM_REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES] THEN + MATCH_MP_TAC INT_LT_REM THEN REWRITE_TAC[p_256k1; INT_OF_NUM_CLAUSES] THEN + CONV_TAC NUM_REDUCE_CONV; + DISCH_THEN(STRIP_ASSUME_TAC o MATCH_MP unilemma1)] THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o GEN_REWRITE_RULE I [GSYM NOT_LE])) THEN + + (*** Manually push around a few moduli to avoid fuss later ***) + + SUBGOAL_THEN + `!a b x y p. (a * x - b * y) rem p = (a * x rem p - b * y rem p) rem p` + (fun th -> RULE_ASSUM_TAC(ONCE_REWRITE_RULE[th])) + THENL + [CONV_TAC INT_REM_DOWN_CONV THEN REPEAT GEN_TAC THEN REFL_TAC; + ALL_TAC] THEN + SUBGOAL_THEN + `!a x y p. (a * x - y) rem p = (a * x rem p - y) rem p` + (fun th -> RULE_ASSUM_TAC(ONCE_REWRITE_RULE[th])) + THENL + [CONV_TAC INT_REM_DOWN_CONV THEN REPEAT GEN_TAC THEN REFL_TAC; + ALL_TAC] THEN + SUBGOAL_THEN `(z * tmp) MOD p_256k1 = (z * tmp MOD p_256k1) MOD p_256k1` + SUBST_ALL_TAC THENL [CONV_TAC MOD_DOWN_CONV THEN REFL_TAC; ALL_TAC] THEN + + (*** Now do the algebra ***) + + RULE_ASSUM_TAC(REWRITE_RULE + [num_congruent; GSYM INT_OF_NUM_CLAUSES; GSYM INT_OF_NUM_REM]) THEN + RULE_ASSUM_TAC(REWRITE_RULE[GSYM INT_REM_EQ]) THEN + RULE_ASSUM_TAC(ONCE_REWRITE_RULE[GSYM INT_SUB_REM; GSYM INT_ADD_REM]) THEN + RULE_ASSUM_TAC(REWRITE_RULE[INT_POW_2]) THEN + ASM_REWRITE_TAC[tripled; jacobian_add; jacobian_eq; secp256k1] THEN + ASM_REWRITE_TAC[GSYM secp256k1] THEN + REWRITE_TAC[INTEGER_MOD_RING_CLAUSES] THEN + CONV_TAC INT_REDUCE_CONV THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN + CONV_TAC INT_REM_DOWN_CONV THEN + REWRITE_TAC[tripled; modular_encode] THEN + REWRITE_TAC[PAIR_EQ; GSYM INT_OF_NUM_EQ; nintlemma] THEN + CONV_TAC INT_REM_DOWN_CONV THEN + REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES; GSYM INT_OF_NUM_REM] THEN + ASM_REWRITE_TAC[] THEN CONV_TAC INT_REM_DOWN_CONV THEN + REPEAT CONJ_TAC THEN AP_THM_TAC THEN AP_TERM_TAC THEN + INT_ARITH_TAC);; + +let SECP256K1_JDOUBLE_SUBROUTINE_CORRECT = time prove + (`!p3 p1 t1 pc stackpointer returnaddress. + aligned 16 stackpointer /\ + ALLPAIRS nonoverlapping + [(p3,96); (word_sub stackpointer (word 384),384)] + [(word pc,0xb24); (p1,96)] /\ + nonoverlapping (p3,96) (word_sub stackpointer (word 384),384) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) secp256k1_jdouble_mc /\ + read PC s = word pc /\ + read SP s = stackpointer /\ + read X30 s = returnaddress /\ + C_ARGUMENTS [p3; p1] s /\ + bignum_triple_from_memory (p1,4) s = t1) + (\s. read PC s = returnaddress /\ + (!x y z. + ~(z = &0) /\ + t1 = tripled secp256k1_encode (x,y,z) + ==> bignum_triple_from_memory(p3,4) s = + tripled secp256k1_encode + (jacobian_add secp256k1 (x,y,z) (x,y,z)))) + (MAYCHANGE [PC; X0; X1; X2; X3; X4; X5; X6; X7; X8; X9; X10; + X11; X12; X13; X14; X15; X16; X17] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,96); + memory :> bytes(word_sub stackpointer (word 384),384)])`, + ARM_ADD_RETURN_STACK_TAC SECP256K1_JDOUBLE_EXEC + SECP256K1_JDOUBLE_CORRECT `[]` 384);; diff --git a/arm/proofs/secp256k1_jmixadd.ml b/arm/proofs/secp256k1_jmixadd.ml new file mode 100644 index 0000000000..9cffd222ef --- /dev/null +++ b/arm/proofs/secp256k1_jmixadd.ml @@ -0,0 +1,1771 @@ +(* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + *) + +(* ========================================================================= *) +(* Mixed addition in Jacobian coordinates for SECG secp256k1 curve. *) +(* ========================================================================= *) + +needs "arm/proofs/base.ml";; +needs "common/ecencoding.ml";; +needs "EC/jacobian.ml";; +needs "EC/secp256k1.ml";; + +prioritize_int();; +prioritize_real();; +prioritize_num();; + +(**** print_literal_from_elf "arm/secp256k1/secp256k1_jmixadd.o";; + ****) + +let secp256k1_jmixadd_mc = define_assert_from_elf + "secp256k1_jmixadd_mc" "arm/secp256k1/secp256k1_jmixadd.o" +[ + 0xd10303ff; (* arm_SUB SP SP (rvalue (word 192)) *) + 0xaa0003ef; (* arm_MOV X15 X0 *) + 0xaa0103f0; (* arm_MOV X16 X1 *) + 0xaa0203f1; (* arm_MOV X17 X2 *) + 0xa9440e02; (* arm_LDP X2 X3 X16 (Immediate_Offset (iword (&64))) *) + 0x9b037c49; (* arm_MUL X9 X2 X3 *) + 0x9bc37c4a; (* arm_UMULH X10 X2 X3 *) + 0xa9451604; (* arm_LDP X4 X5 X16 (Immediate_Offset (iword (&80))) *) + 0x9b057c4b; (* arm_MUL X11 X2 X5 *) + 0x9bc57c4c; (* arm_UMULH X12 X2 X5 *) + 0x9b047c47; (* arm_MUL X7 X2 X4 *) + 0x9bc47c46; (* arm_UMULH X6 X2 X4 *) + 0xab07014a; (* arm_ADDS X10 X10 X7 *) + 0xba06016b; (* arm_ADCS X11 X11 X6 *) + 0x9b047c67; (* arm_MUL X7 X3 X4 *) + 0x9bc47c66; (* arm_UMULH X6 X3 X4 *) + 0x9a1f00c6; (* arm_ADC X6 X6 XZR *) + 0xab07016b; (* arm_ADDS X11 X11 X7 *) + 0x9b057c8d; (* arm_MUL X13 X4 X5 *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xba06018c; (* arm_ADCS X12 X12 X6 *) + 0x9b057c67; (* arm_MUL X7 X3 X5 *) + 0x9bc57c66; (* arm_UMULH X6 X3 X5 *) + 0x9a1f00c6; (* arm_ADC X6 X6 XZR *) + 0xab07018c; (* arm_ADDS X12 X12 X7 *) + 0xba0601ad; (* arm_ADCS X13 X13 X6 *) + 0x9a1f01ce; (* arm_ADC X14 X14 XZR *) + 0xab090129; (* arm_ADDS X9 X9 X9 *) + 0xba0a014a; (* arm_ADCS X10 X10 X10 *) + 0xba0b016b; (* arm_ADCS X11 X11 X11 *) + 0xba0c018c; (* arm_ADCS X12 X12 X12 *) + 0xba0d01ad; (* arm_ADCS X13 X13 X13 *) + 0xba0e01ce; (* arm_ADCS X14 X14 X14 *) + 0x9a9f37e6; (* arm_CSET X6 Condition_CS *) + 0x9bc27c47; (* arm_UMULH X7 X2 X2 *) + 0x9b027c48; (* arm_MUL X8 X2 X2 *) + 0xab070129; (* arm_ADDS X9 X9 X7 *) + 0x9b037c67; (* arm_MUL X7 X3 X3 *) + 0xba07014a; (* arm_ADCS X10 X10 X7 *) + 0x9bc37c67; (* arm_UMULH X7 X3 X3 *) + 0xba07016b; (* arm_ADCS X11 X11 X7 *) + 0x9b047c87; (* arm_MUL X7 X4 X4 *) + 0xba07018c; (* arm_ADCS X12 X12 X7 *) + 0x9bc47c87; (* arm_UMULH X7 X4 X4 *) + 0xba0701ad; (* arm_ADCS X13 X13 X7 *) + 0x9b057ca7; (* arm_MUL X7 X5 X5 *) + 0xba0701ce; (* arm_ADCS X14 X14 X7 *) + 0x9bc57ca7; (* arm_UMULH X7 X5 X5 *) + 0x9a0700c6; (* arm_ADC X6 X6 X7 *) + 0xd2807a23; (* arm_MOV X3 (rvalue (word 977)) *) + 0xb2600063; (* arm_ORR X3 X3 (rvalue (word 4294967296)) *) + 0x9b0c7c67; (* arm_MUL X7 X3 X12 *) + 0x9bcc7c64; (* arm_UMULH X4 X3 X12 *) + 0xab070108; (* arm_ADDS X8 X8 X7 *) + 0x9b0d7c67; (* arm_MUL X7 X3 X13 *) + 0x9bcd7c6d; (* arm_UMULH X13 X3 X13 *) + 0xba070129; (* arm_ADCS X9 X9 X7 *) + 0x9b0e7c67; (* arm_MUL X7 X3 X14 *) + 0x9bce7c6e; (* arm_UMULH X14 X3 X14 *) + 0xba07014a; (* arm_ADCS X10 X10 X7 *) + 0x9b067c67; (* arm_MUL X7 X3 X6 *) + 0x9bc67c66; (* arm_UMULH X6 X3 X6 *) + 0xba07016b; (* arm_ADCS X11 X11 X7 *) + 0x9a9f37ec; (* arm_CSET X12 Condition_CS *) + 0xab040129; (* arm_ADDS X9 X9 X4 *) + 0xba0d014a; (* arm_ADCS X10 X10 X13 *) + 0xba0e016b; (* arm_ADCS X11 X11 X14 *) + 0x9a06018c; (* arm_ADC X12 X12 X6 *) + 0x91000582; (* arm_ADD X2 X12 (rvalue (word 1)) *) + 0x9b027c67; (* arm_MUL X7 X3 X2 *) + 0x9bc27c66; (* arm_UMULH X6 X3 X2 *) + 0xab070108; (* arm_ADDS X8 X8 X7 *) + 0xba060129; (* arm_ADCS X9 X9 X6 *) + 0xba1f014a; (* arm_ADCS X10 X10 XZR *) + 0xba1f016b; (* arm_ADCS X11 X11 XZR *) + 0x9a9f3063; (* arm_CSEL X3 X3 XZR Condition_CC *) + 0xeb030108; (* arm_SUBS X8 X8 X3 *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xda1f016b; (* arm_SBC X11 X11 XZR *) + 0xa90027e8; (* arm_STP X8 X9 SP (Immediate_Offset (iword (&0))) *) + 0xa9012fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&16))) *) + 0xa9441203; (* arm_LDP X3 X4 X16 (Immediate_Offset (iword (&64))) *) + 0xa9422227; (* arm_LDP X7 X8 X17 (Immediate_Offset (iword (&32))) *) + 0x9b077c6c; (* arm_MUL X12 X3 X7 *) + 0x9bc77c6d; (* arm_UMULH X13 X3 X7 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa9432a29; (* arm_LDP X9 X10 X17 (Immediate_Offset (iword (&48))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c60; (* arm_UMULH X0 X3 X9 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c61; (* arm_UMULH X1 X3 X10 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0xa9451a05; (* arm_LDP X5 X6 X16 (Immediate_Offset (iword (&80))) *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bca7c83; (* arm_UMULH X3 X4 X10 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9b077cab; (* arm_MUL X11 X5 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b087cab; (* arm_MUL X11 X5 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b097cab; (* arm_MUL X11 X5 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b0a7cab; (* arm_MUL X11 X5 X10 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bca7ca4; (* arm_UMULH X4 X5 X10 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9bc77cab; (* arm_UMULH X11 X5 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9bc87cab; (* arm_UMULH X11 X5 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bc97cab; (* arm_UMULH X11 X5 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b077ccb; (* arm_MUL X11 X6 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9b087ccb; (* arm_MUL X11 X6 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b097ccb; (* arm_MUL X11 X6 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9b0a7ccb; (* arm_MUL X11 X6 X10 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9bca7cc5; (* arm_UMULH X5 X6 X10 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0x9bc77ccb; (* arm_UMULH X11 X6 X7 *) + 0xab0b0021; (* arm_ADDS X1 X1 X11 *) + 0x9bc87ccb; (* arm_UMULH X11 X6 X8 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bc97ccb; (* arm_UMULH X11 X6 X9 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0xd2807a27; (* arm_MOV X7 (rvalue (word 977)) *) + 0xb26000e7; (* arm_ORR X7 X7 (rvalue (word 4294967296)) *) + 0x9b017ceb; (* arm_MUL X11 X7 X1 *) + 0x9bc17ce9; (* arm_UMULH X9 X7 X1 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0x9b037ceb; (* arm_MUL X11 X7 X3 *) + 0x9bc37ce3; (* arm_UMULH X3 X7 X3 *) + 0xba0b01ad; (* arm_ADCS X13 X13 X11 *) + 0x9b047ceb; (* arm_MUL X11 X7 X4 *) + 0x9bc47ce4; (* arm_UMULH X4 X7 X4 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b057ceb; (* arm_MUL X11 X7 X5 *) + 0x9bc57ce5; (* arm_UMULH X5 X7 X5 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a9f37e1; (* arm_CSET X1 Condition_CS *) + 0xab0901ad; (* arm_ADDS X13 X13 X9 *) + 0xba0301ce; (* arm_ADCS X14 X14 X3 *) + 0xba040000; (* arm_ADCS X0 X0 X4 *) + 0x9a050021; (* arm_ADC X1 X1 X5 *) + 0x91000428; (* arm_ADD X8 X1 (rvalue (word 1)) *) + 0x9b087ceb; (* arm_MUL X11 X7 X8 *) + 0x9bc87ce9; (* arm_UMULH X9 X7 X8 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0xba0901ad; (* arm_ADCS X13 X13 X9 *) + 0xba1f01ce; (* arm_ADCS X14 X14 XZR *) + 0xba1f0000; (* arm_ADCS X0 X0 XZR *) + 0x9a9f30e7; (* arm_CSEL X7 X7 XZR Condition_CC *) + 0xeb07018c; (* arm_SUBS X12 X12 X7 *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xda1f0000; (* arm_SBC X0 X0 XZR *) + 0xa90237ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&32))) *) + 0xa90303ee; (* arm_STP X14 X0 SP (Immediate_Offset (iword (&48))) *) + 0xa94013e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&0))) *) + 0xa9402227; (* arm_LDP X7 X8 X17 (Immediate_Offset (iword (&0))) *) + 0x9b077c6c; (* arm_MUL X12 X3 X7 *) + 0x9bc77c6d; (* arm_UMULH X13 X3 X7 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa9412a29; (* arm_LDP X9 X10 X17 (Immediate_Offset (iword (&16))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c60; (* arm_UMULH X0 X3 X9 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c61; (* arm_UMULH X1 X3 X10 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0xa9411be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&16))) *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bca7c83; (* arm_UMULH X3 X4 X10 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9b077cab; (* arm_MUL X11 X5 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b087cab; (* arm_MUL X11 X5 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b097cab; (* arm_MUL X11 X5 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b0a7cab; (* arm_MUL X11 X5 X10 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bca7ca4; (* arm_UMULH X4 X5 X10 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9bc77cab; (* arm_UMULH X11 X5 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9bc87cab; (* arm_UMULH X11 X5 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bc97cab; (* arm_UMULH X11 X5 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b077ccb; (* arm_MUL X11 X6 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9b087ccb; (* arm_MUL X11 X6 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b097ccb; (* arm_MUL X11 X6 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9b0a7ccb; (* arm_MUL X11 X6 X10 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9bca7cc5; (* arm_UMULH X5 X6 X10 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0x9bc77ccb; (* arm_UMULH X11 X6 X7 *) + 0xab0b0021; (* arm_ADDS X1 X1 X11 *) + 0x9bc87ccb; (* arm_UMULH X11 X6 X8 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bc97ccb; (* arm_UMULH X11 X6 X9 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0xd2807a27; (* arm_MOV X7 (rvalue (word 977)) *) + 0xb26000e7; (* arm_ORR X7 X7 (rvalue (word 4294967296)) *) + 0x9b017ceb; (* arm_MUL X11 X7 X1 *) + 0x9bc17ce9; (* arm_UMULH X9 X7 X1 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0x9b037ceb; (* arm_MUL X11 X7 X3 *) + 0x9bc37ce3; (* arm_UMULH X3 X7 X3 *) + 0xba0b01ad; (* arm_ADCS X13 X13 X11 *) + 0x9b047ceb; (* arm_MUL X11 X7 X4 *) + 0x9bc47ce4; (* arm_UMULH X4 X7 X4 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b057ceb; (* arm_MUL X11 X7 X5 *) + 0x9bc57ce5; (* arm_UMULH X5 X7 X5 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a9f37e1; (* arm_CSET X1 Condition_CS *) + 0xab0901ad; (* arm_ADDS X13 X13 X9 *) + 0xba0301ce; (* arm_ADCS X14 X14 X3 *) + 0xba040000; (* arm_ADCS X0 X0 X4 *) + 0x9a050021; (* arm_ADC X1 X1 X5 *) + 0x91000428; (* arm_ADD X8 X1 (rvalue (word 1)) *) + 0x9b087ceb; (* arm_MUL X11 X7 X8 *) + 0x9bc87ce9; (* arm_UMULH X9 X7 X8 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0xba0901ad; (* arm_ADCS X13 X13 X9 *) + 0xba1f01ce; (* arm_ADCS X14 X14 XZR *) + 0xba1f0000; (* arm_ADCS X0 X0 XZR *) + 0x9a9f30e7; (* arm_CSEL X7 X7 XZR Condition_CC *) + 0xeb07018c; (* arm_SUBS X12 X12 X7 *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xda1f0000; (* arm_SBC X0 X0 XZR *) + 0xa90437ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&64))) *) + 0xa90503ee; (* arm_STP X14 X0 SP (Immediate_Offset (iword (&80))) *) + 0xa94013e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&0))) *) + 0xa94223e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&32))) *) + 0x9b077c6c; (* arm_MUL X12 X3 X7 *) + 0x9bc77c6d; (* arm_UMULH X13 X3 X7 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa9432be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&48))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c60; (* arm_UMULH X0 X3 X9 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c61; (* arm_UMULH X1 X3 X10 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0xa9411be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&16))) *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bca7c83; (* arm_UMULH X3 X4 X10 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9b077cab; (* arm_MUL X11 X5 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b087cab; (* arm_MUL X11 X5 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b097cab; (* arm_MUL X11 X5 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b0a7cab; (* arm_MUL X11 X5 X10 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bca7ca4; (* arm_UMULH X4 X5 X10 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9bc77cab; (* arm_UMULH X11 X5 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9bc87cab; (* arm_UMULH X11 X5 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bc97cab; (* arm_UMULH X11 X5 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b077ccb; (* arm_MUL X11 X6 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9b087ccb; (* arm_MUL X11 X6 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b097ccb; (* arm_MUL X11 X6 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9b0a7ccb; (* arm_MUL X11 X6 X10 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9bca7cc5; (* arm_UMULH X5 X6 X10 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0x9bc77ccb; (* arm_UMULH X11 X6 X7 *) + 0xab0b0021; (* arm_ADDS X1 X1 X11 *) + 0x9bc87ccb; (* arm_UMULH X11 X6 X8 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bc97ccb; (* arm_UMULH X11 X6 X9 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0xd2807a27; (* arm_MOV X7 (rvalue (word 977)) *) + 0xb26000e7; (* arm_ORR X7 X7 (rvalue (word 4294967296)) *) + 0x9b017ceb; (* arm_MUL X11 X7 X1 *) + 0x9bc17ce9; (* arm_UMULH X9 X7 X1 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0x9b037ceb; (* arm_MUL X11 X7 X3 *) + 0x9bc37ce3; (* arm_UMULH X3 X7 X3 *) + 0xba0b01ad; (* arm_ADCS X13 X13 X11 *) + 0x9b047ceb; (* arm_MUL X11 X7 X4 *) + 0x9bc47ce4; (* arm_UMULH X4 X7 X4 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b057ceb; (* arm_MUL X11 X7 X5 *) + 0x9bc57ce5; (* arm_UMULH X5 X7 X5 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a9f37e1; (* arm_CSET X1 Condition_CS *) + 0xab0901ad; (* arm_ADDS X13 X13 X9 *) + 0xba0301ce; (* arm_ADCS X14 X14 X3 *) + 0xba040000; (* arm_ADCS X0 X0 X4 *) + 0x9a050021; (* arm_ADC X1 X1 X5 *) + 0x91000428; (* arm_ADD X8 X1 (rvalue (word 1)) *) + 0x9b087ceb; (* arm_MUL X11 X7 X8 *) + 0x9bc87ce9; (* arm_UMULH X9 X7 X8 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0xba0901ad; (* arm_ADCS X13 X13 X9 *) + 0xba1f01ce; (* arm_ADCS X14 X14 XZR *) + 0xba1f0000; (* arm_ADCS X0 X0 XZR *) + 0x9a9f30e7; (* arm_CSEL X7 X7 XZR Condition_CC *) + 0xeb07018c; (* arm_SUBS X12 X12 X7 *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xda1f0000; (* arm_SBC X0 X0 XZR *) + 0xa90237ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&32))) *) + 0xa90303ee; (* arm_STP X14 X0 SP (Immediate_Offset (iword (&48))) *) + 0xa9441be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&64))) *) + 0xa9400e04; (* arm_LDP X4 X3 X16 (Immediate_Offset (iword (&0))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa94523e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&80))) *) + 0xa9410e04; (* arm_LDP X4 X3 X16 (Immediate_Offset (iword (&16))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xd2807a24; (* arm_MOV X4 (rvalue (word 977)) *) + 0xb2600083; (* arm_ORR X3 X4 (rvalue (word 4294967296)) *) + 0x9a9f3063; (* arm_CSEL X3 X3 XZR Condition_CC *) + 0xeb0300a5; (* arm_SUBS X5 X5 X3 *) + 0xfa1f00c6; (* arm_SBCS X6 X6 XZR *) + 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) + 0xda1f0108; (* arm_SBC X8 X8 XZR *) + 0xa90a1be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&160))) *) + 0xa90b23e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&176))) *) + 0xa9421be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&32))) *) + 0xa9420e04; (* arm_LDP X4 X3 X16 (Immediate_Offset (iword (&32))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa94323e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&48))) *) + 0xa9430e04; (* arm_LDP X4 X3 X16 (Immediate_Offset (iword (&48))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xd2807a24; (* arm_MOV X4 (rvalue (word 977)) *) + 0xb2600083; (* arm_ORR X3 X4 (rvalue (word 4294967296)) *) + 0x9a9f3063; (* arm_CSEL X3 X3 XZR Condition_CC *) + 0xeb0300a5; (* arm_SUBS X5 X5 X3 *) + 0xfa1f00c6; (* arm_SBCS X6 X6 XZR *) + 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) + 0xda1f0108; (* arm_SBC X8 X8 XZR *) + 0xa9021be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&32))) *) + 0xa90323e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&48))) *) + 0xa94a0fe2; (* arm_LDP X2 X3 SP (Immediate_Offset (iword (&160))) *) + 0x9b037c49; (* arm_MUL X9 X2 X3 *) + 0x9bc37c4a; (* arm_UMULH X10 X2 X3 *) + 0xa94b17e4; (* arm_LDP X4 X5 SP (Immediate_Offset (iword (&176))) *) + 0x9b057c4b; (* arm_MUL X11 X2 X5 *) + 0x9bc57c4c; (* arm_UMULH X12 X2 X5 *) + 0x9b047c47; (* arm_MUL X7 X2 X4 *) + 0x9bc47c46; (* arm_UMULH X6 X2 X4 *) + 0xab07014a; (* arm_ADDS X10 X10 X7 *) + 0xba06016b; (* arm_ADCS X11 X11 X6 *) + 0x9b047c67; (* arm_MUL X7 X3 X4 *) + 0x9bc47c66; (* arm_UMULH X6 X3 X4 *) + 0x9a1f00c6; (* arm_ADC X6 X6 XZR *) + 0xab07016b; (* arm_ADDS X11 X11 X7 *) + 0x9b057c8d; (* arm_MUL X13 X4 X5 *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xba06018c; (* arm_ADCS X12 X12 X6 *) + 0x9b057c67; (* arm_MUL X7 X3 X5 *) + 0x9bc57c66; (* arm_UMULH X6 X3 X5 *) + 0x9a1f00c6; (* arm_ADC X6 X6 XZR *) + 0xab07018c; (* arm_ADDS X12 X12 X7 *) + 0xba0601ad; (* arm_ADCS X13 X13 X6 *) + 0x9a1f01ce; (* arm_ADC X14 X14 XZR *) + 0xab090129; (* arm_ADDS X9 X9 X9 *) + 0xba0a014a; (* arm_ADCS X10 X10 X10 *) + 0xba0b016b; (* arm_ADCS X11 X11 X11 *) + 0xba0c018c; (* arm_ADCS X12 X12 X12 *) + 0xba0d01ad; (* arm_ADCS X13 X13 X13 *) + 0xba0e01ce; (* arm_ADCS X14 X14 X14 *) + 0x9a9f37e6; (* arm_CSET X6 Condition_CS *) + 0x9bc27c47; (* arm_UMULH X7 X2 X2 *) + 0x9b027c48; (* arm_MUL X8 X2 X2 *) + 0xab070129; (* arm_ADDS X9 X9 X7 *) + 0x9b037c67; (* arm_MUL X7 X3 X3 *) + 0xba07014a; (* arm_ADCS X10 X10 X7 *) + 0x9bc37c67; (* arm_UMULH X7 X3 X3 *) + 0xba07016b; (* arm_ADCS X11 X11 X7 *) + 0x9b047c87; (* arm_MUL X7 X4 X4 *) + 0xba07018c; (* arm_ADCS X12 X12 X7 *) + 0x9bc47c87; (* arm_UMULH X7 X4 X4 *) + 0xba0701ad; (* arm_ADCS X13 X13 X7 *) + 0x9b057ca7; (* arm_MUL X7 X5 X5 *) + 0xba0701ce; (* arm_ADCS X14 X14 X7 *) + 0x9bc57ca7; (* arm_UMULH X7 X5 X5 *) + 0x9a0700c6; (* arm_ADC X6 X6 X7 *) + 0xd2807a23; (* arm_MOV X3 (rvalue (word 977)) *) + 0xb2600063; (* arm_ORR X3 X3 (rvalue (word 4294967296)) *) + 0x9b0c7c67; (* arm_MUL X7 X3 X12 *) + 0x9bcc7c64; (* arm_UMULH X4 X3 X12 *) + 0xab070108; (* arm_ADDS X8 X8 X7 *) + 0x9b0d7c67; (* arm_MUL X7 X3 X13 *) + 0x9bcd7c6d; (* arm_UMULH X13 X3 X13 *) + 0xba070129; (* arm_ADCS X9 X9 X7 *) + 0x9b0e7c67; (* arm_MUL X7 X3 X14 *) + 0x9bce7c6e; (* arm_UMULH X14 X3 X14 *) + 0xba07014a; (* arm_ADCS X10 X10 X7 *) + 0x9b067c67; (* arm_MUL X7 X3 X6 *) + 0x9bc67c66; (* arm_UMULH X6 X3 X6 *) + 0xba07016b; (* arm_ADCS X11 X11 X7 *) + 0x9a9f37ec; (* arm_CSET X12 Condition_CS *) + 0xab040129; (* arm_ADDS X9 X9 X4 *) + 0xba0d014a; (* arm_ADCS X10 X10 X13 *) + 0xba0e016b; (* arm_ADCS X11 X11 X14 *) + 0x9a06018c; (* arm_ADC X12 X12 X6 *) + 0x91000582; (* arm_ADD X2 X12 (rvalue (word 1)) *) + 0x9b027c67; (* arm_MUL X7 X3 X2 *) + 0x9bc27c66; (* arm_UMULH X6 X3 X2 *) + 0xab070108; (* arm_ADDS X8 X8 X7 *) + 0xba060129; (* arm_ADCS X9 X9 X6 *) + 0xba1f014a; (* arm_ADCS X10 X10 XZR *) + 0xba1f016b; (* arm_ADCS X11 X11 XZR *) + 0x9a9f3063; (* arm_CSEL X3 X3 XZR Condition_CC *) + 0xeb030108; (* arm_SUBS X8 X8 X3 *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xda1f016b; (* arm_SBC X11 X11 XZR *) + 0xa90627e8; (* arm_STP X8 X9 SP (Immediate_Offset (iword (&96))) *) + 0xa9072fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&112))) *) + 0xa9420fe2; (* arm_LDP X2 X3 SP (Immediate_Offset (iword (&32))) *) + 0x9b037c49; (* arm_MUL X9 X2 X3 *) + 0x9bc37c4a; (* arm_UMULH X10 X2 X3 *) + 0xa94317e4; (* arm_LDP X4 X5 SP (Immediate_Offset (iword (&48))) *) + 0x9b057c4b; (* arm_MUL X11 X2 X5 *) + 0x9bc57c4c; (* arm_UMULH X12 X2 X5 *) + 0x9b047c47; (* arm_MUL X7 X2 X4 *) + 0x9bc47c46; (* arm_UMULH X6 X2 X4 *) + 0xab07014a; (* arm_ADDS X10 X10 X7 *) + 0xba06016b; (* arm_ADCS X11 X11 X6 *) + 0x9b047c67; (* arm_MUL X7 X3 X4 *) + 0x9bc47c66; (* arm_UMULH X6 X3 X4 *) + 0x9a1f00c6; (* arm_ADC X6 X6 XZR *) + 0xab07016b; (* arm_ADDS X11 X11 X7 *) + 0x9b057c8d; (* arm_MUL X13 X4 X5 *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xba06018c; (* arm_ADCS X12 X12 X6 *) + 0x9b057c67; (* arm_MUL X7 X3 X5 *) + 0x9bc57c66; (* arm_UMULH X6 X3 X5 *) + 0x9a1f00c6; (* arm_ADC X6 X6 XZR *) + 0xab07018c; (* arm_ADDS X12 X12 X7 *) + 0xba0601ad; (* arm_ADCS X13 X13 X6 *) + 0x9a1f01ce; (* arm_ADC X14 X14 XZR *) + 0xab090129; (* arm_ADDS X9 X9 X9 *) + 0xba0a014a; (* arm_ADCS X10 X10 X10 *) + 0xba0b016b; (* arm_ADCS X11 X11 X11 *) + 0xba0c018c; (* arm_ADCS X12 X12 X12 *) + 0xba0d01ad; (* arm_ADCS X13 X13 X13 *) + 0xba0e01ce; (* arm_ADCS X14 X14 X14 *) + 0x9a9f37e6; (* arm_CSET X6 Condition_CS *) + 0x9bc27c47; (* arm_UMULH X7 X2 X2 *) + 0x9b027c48; (* arm_MUL X8 X2 X2 *) + 0xab070129; (* arm_ADDS X9 X9 X7 *) + 0x9b037c67; (* arm_MUL X7 X3 X3 *) + 0xba07014a; (* arm_ADCS X10 X10 X7 *) + 0x9bc37c67; (* arm_UMULH X7 X3 X3 *) + 0xba07016b; (* arm_ADCS X11 X11 X7 *) + 0x9b047c87; (* arm_MUL X7 X4 X4 *) + 0xba07018c; (* arm_ADCS X12 X12 X7 *) + 0x9bc47c87; (* arm_UMULH X7 X4 X4 *) + 0xba0701ad; (* arm_ADCS X13 X13 X7 *) + 0x9b057ca7; (* arm_MUL X7 X5 X5 *) + 0xba0701ce; (* arm_ADCS X14 X14 X7 *) + 0x9bc57ca7; (* arm_UMULH X7 X5 X5 *) + 0x9a0700c6; (* arm_ADC X6 X6 X7 *) + 0xd2807a23; (* arm_MOV X3 (rvalue (word 977)) *) + 0xb2600063; (* arm_ORR X3 X3 (rvalue (word 4294967296)) *) + 0x9b0c7c67; (* arm_MUL X7 X3 X12 *) + 0x9bcc7c64; (* arm_UMULH X4 X3 X12 *) + 0xab070108; (* arm_ADDS X8 X8 X7 *) + 0x9b0d7c67; (* arm_MUL X7 X3 X13 *) + 0x9bcd7c6d; (* arm_UMULH X13 X3 X13 *) + 0xba070129; (* arm_ADCS X9 X9 X7 *) + 0x9b0e7c67; (* arm_MUL X7 X3 X14 *) + 0x9bce7c6e; (* arm_UMULH X14 X3 X14 *) + 0xba07014a; (* arm_ADCS X10 X10 X7 *) + 0x9b067c67; (* arm_MUL X7 X3 X6 *) + 0x9bc67c66; (* arm_UMULH X6 X3 X6 *) + 0xba07016b; (* arm_ADCS X11 X11 X7 *) + 0x9a9f37ec; (* arm_CSET X12 Condition_CS *) + 0xab040129; (* arm_ADDS X9 X9 X4 *) + 0xba0d014a; (* arm_ADCS X10 X10 X13 *) + 0xba0e016b; (* arm_ADCS X11 X11 X14 *) + 0x9a06018c; (* arm_ADC X12 X12 X6 *) + 0x91000582; (* arm_ADD X2 X12 (rvalue (word 1)) *) + 0x9b027c67; (* arm_MUL X7 X3 X2 *) + 0x9bc27c66; (* arm_UMULH X6 X3 X2 *) + 0xab070108; (* arm_ADDS X8 X8 X7 *) + 0xba060129; (* arm_ADCS X9 X9 X6 *) + 0xba1f014a; (* arm_ADCS X10 X10 XZR *) + 0xba1f016b; (* arm_ADCS X11 X11 XZR *) + 0x9a9f3063; (* arm_CSEL X3 X3 XZR Condition_CC *) + 0xeb030108; (* arm_SUBS X8 X8 X3 *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xda1f016b; (* arm_SBC X11 X11 XZR *) + 0xa90027e8; (* arm_STP X8 X9 SP (Immediate_Offset (iword (&0))) *) + 0xa9012fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&16))) *) + 0xa94613e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&96))) *) + 0xa9402207; (* arm_LDP X7 X8 X16 (Immediate_Offset (iword (&0))) *) + 0x9b077c6c; (* arm_MUL X12 X3 X7 *) + 0x9bc77c6d; (* arm_UMULH X13 X3 X7 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa9412a09; (* arm_LDP X9 X10 X16 (Immediate_Offset (iword (&16))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c60; (* arm_UMULH X0 X3 X9 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c61; (* arm_UMULH X1 X3 X10 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0xa9471be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&112))) *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bca7c83; (* arm_UMULH X3 X4 X10 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9b077cab; (* arm_MUL X11 X5 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b087cab; (* arm_MUL X11 X5 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b097cab; (* arm_MUL X11 X5 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b0a7cab; (* arm_MUL X11 X5 X10 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bca7ca4; (* arm_UMULH X4 X5 X10 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9bc77cab; (* arm_UMULH X11 X5 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9bc87cab; (* arm_UMULH X11 X5 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bc97cab; (* arm_UMULH X11 X5 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b077ccb; (* arm_MUL X11 X6 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9b087ccb; (* arm_MUL X11 X6 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b097ccb; (* arm_MUL X11 X6 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9b0a7ccb; (* arm_MUL X11 X6 X10 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9bca7cc5; (* arm_UMULH X5 X6 X10 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0x9bc77ccb; (* arm_UMULH X11 X6 X7 *) + 0xab0b0021; (* arm_ADDS X1 X1 X11 *) + 0x9bc87ccb; (* arm_UMULH X11 X6 X8 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bc97ccb; (* arm_UMULH X11 X6 X9 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0xd2807a27; (* arm_MOV X7 (rvalue (word 977)) *) + 0xb26000e7; (* arm_ORR X7 X7 (rvalue (word 4294967296)) *) + 0x9b017ceb; (* arm_MUL X11 X7 X1 *) + 0x9bc17ce9; (* arm_UMULH X9 X7 X1 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0x9b037ceb; (* arm_MUL X11 X7 X3 *) + 0x9bc37ce3; (* arm_UMULH X3 X7 X3 *) + 0xba0b01ad; (* arm_ADCS X13 X13 X11 *) + 0x9b047ceb; (* arm_MUL X11 X7 X4 *) + 0x9bc47ce4; (* arm_UMULH X4 X7 X4 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b057ceb; (* arm_MUL X11 X7 X5 *) + 0x9bc57ce5; (* arm_UMULH X5 X7 X5 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a9f37e1; (* arm_CSET X1 Condition_CS *) + 0xab0901ad; (* arm_ADDS X13 X13 X9 *) + 0xba0301ce; (* arm_ADCS X14 X14 X3 *) + 0xba040000; (* arm_ADCS X0 X0 X4 *) + 0x9a050021; (* arm_ADC X1 X1 X5 *) + 0x91000428; (* arm_ADD X8 X1 (rvalue (word 1)) *) + 0x9b087ceb; (* arm_MUL X11 X7 X8 *) + 0x9bc87ce9; (* arm_UMULH X9 X7 X8 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0xba0901ad; (* arm_ADCS X13 X13 X9 *) + 0xba1f01ce; (* arm_ADCS X14 X14 XZR *) + 0xba1f0000; (* arm_ADCS X0 X0 XZR *) + 0x9a9f30e7; (* arm_CSEL X7 X7 XZR Condition_CC *) + 0xeb07018c; (* arm_SUBS X12 X12 X7 *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xda1f0000; (* arm_SBC X0 X0 XZR *) + 0xa90837ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&128))) *) + 0xa90903ee; (* arm_STP X14 X0 SP (Immediate_Offset (iword (&144))) *) + 0xa94613e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&96))) *) + 0xa94423e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&64))) *) + 0x9b077c6c; (* arm_MUL X12 X3 X7 *) + 0x9bc77c6d; (* arm_UMULH X13 X3 X7 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa9452be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&80))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c60; (* arm_UMULH X0 X3 X9 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c61; (* arm_UMULH X1 X3 X10 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0xa9471be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&112))) *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bca7c83; (* arm_UMULH X3 X4 X10 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9b077cab; (* arm_MUL X11 X5 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b087cab; (* arm_MUL X11 X5 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b097cab; (* arm_MUL X11 X5 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b0a7cab; (* arm_MUL X11 X5 X10 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bca7ca4; (* arm_UMULH X4 X5 X10 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9bc77cab; (* arm_UMULH X11 X5 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9bc87cab; (* arm_UMULH X11 X5 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bc97cab; (* arm_UMULH X11 X5 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b077ccb; (* arm_MUL X11 X6 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9b087ccb; (* arm_MUL X11 X6 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b097ccb; (* arm_MUL X11 X6 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9b0a7ccb; (* arm_MUL X11 X6 X10 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9bca7cc5; (* arm_UMULH X5 X6 X10 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0x9bc77ccb; (* arm_UMULH X11 X6 X7 *) + 0xab0b0021; (* arm_ADDS X1 X1 X11 *) + 0x9bc87ccb; (* arm_UMULH X11 X6 X8 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bc97ccb; (* arm_UMULH X11 X6 X9 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0xd2807a27; (* arm_MOV X7 (rvalue (word 977)) *) + 0xb26000e7; (* arm_ORR X7 X7 (rvalue (word 4294967296)) *) + 0x9b017ceb; (* arm_MUL X11 X7 X1 *) + 0x9bc17ce9; (* arm_UMULH X9 X7 X1 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0x9b037ceb; (* arm_MUL X11 X7 X3 *) + 0x9bc37ce3; (* arm_UMULH X3 X7 X3 *) + 0xba0b01ad; (* arm_ADCS X13 X13 X11 *) + 0x9b047ceb; (* arm_MUL X11 X7 X4 *) + 0x9bc47ce4; (* arm_UMULH X4 X7 X4 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b057ceb; (* arm_MUL X11 X7 X5 *) + 0x9bc57ce5; (* arm_UMULH X5 X7 X5 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a9f37e1; (* arm_CSET X1 Condition_CS *) + 0xab0901ad; (* arm_ADDS X13 X13 X9 *) + 0xba0301ce; (* arm_ADCS X14 X14 X3 *) + 0xba040000; (* arm_ADCS X0 X0 X4 *) + 0x9a050021; (* arm_ADC X1 X1 X5 *) + 0x91000428; (* arm_ADD X8 X1 (rvalue (word 1)) *) + 0x9b087ceb; (* arm_MUL X11 X7 X8 *) + 0x9bc87ce9; (* arm_UMULH X9 X7 X8 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0xba0901ad; (* arm_ADCS X13 X13 X9 *) + 0xba1f01ce; (* arm_ADCS X14 X14 XZR *) + 0xba1f0000; (* arm_ADCS X0 X0 XZR *) + 0x9a9f30e7; (* arm_CSEL X7 X7 XZR Condition_CC *) + 0xeb07018c; (* arm_SUBS X12 X12 X7 *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xda1f0000; (* arm_SBC X0 X0 XZR *) + 0xa90437ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&64))) *) + 0xa90503ee; (* arm_STP X14 X0 SP (Immediate_Offset (iword (&80))) *) + 0xa9401be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&0))) *) + 0xa9480fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&128))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa94123e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&16))) *) + 0xa9490fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&144))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xd2807a24; (* arm_MOV X4 (rvalue (word 977)) *) + 0xb2600083; (* arm_ORR X3 X4 (rvalue (word 4294967296)) *) + 0x9a9f3063; (* arm_CSEL X3 X3 XZR Condition_CC *) + 0xeb0300a5; (* arm_SUBS X5 X5 X3 *) + 0xfa1f00c6; (* arm_SBCS X6 X6 XZR *) + 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) + 0xda1f0108; (* arm_SBC X8 X8 XZR *) + 0xa90019e5; (* arm_STP X5 X6 X15 (Immediate_Offset (iword (&0))) *) + 0xa90121e7; (* arm_STP X7 X8 X15 (Immediate_Offset (iword (&16))) *) + 0xa9441be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&64))) *) + 0xa9480fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&128))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa94523e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&80))) *) + 0xa9490fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&144))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xd2807a24; (* arm_MOV X4 (rvalue (word 977)) *) + 0xb2600083; (* arm_ORR X3 X4 (rvalue (word 4294967296)) *) + 0x9a9f3063; (* arm_CSEL X3 X3 XZR Condition_CC *) + 0xeb0300a5; (* arm_SUBS X5 X5 X3 *) + 0xfa1f00c6; (* arm_SBCS X6 X6 XZR *) + 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) + 0xda1f0108; (* arm_SBC X8 X8 XZR *) + 0xa9061be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&96))) *) + 0xa90723e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&112))) *) + 0xa94a13e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&160))) *) + 0xa9442207; (* arm_LDP X7 X8 X16 (Immediate_Offset (iword (&64))) *) + 0x9b077c6c; (* arm_MUL X12 X3 X7 *) + 0x9bc77c6d; (* arm_UMULH X13 X3 X7 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa9452a09; (* arm_LDP X9 X10 X16 (Immediate_Offset (iword (&80))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c60; (* arm_UMULH X0 X3 X9 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c61; (* arm_UMULH X1 X3 X10 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0xa94b1be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&176))) *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bca7c83; (* arm_UMULH X3 X4 X10 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9b077cab; (* arm_MUL X11 X5 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b087cab; (* arm_MUL X11 X5 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b097cab; (* arm_MUL X11 X5 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b0a7cab; (* arm_MUL X11 X5 X10 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bca7ca4; (* arm_UMULH X4 X5 X10 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9bc77cab; (* arm_UMULH X11 X5 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9bc87cab; (* arm_UMULH X11 X5 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bc97cab; (* arm_UMULH X11 X5 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b077ccb; (* arm_MUL X11 X6 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9b087ccb; (* arm_MUL X11 X6 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b097ccb; (* arm_MUL X11 X6 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9b0a7ccb; (* arm_MUL X11 X6 X10 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9bca7cc5; (* arm_UMULH X5 X6 X10 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0x9bc77ccb; (* arm_UMULH X11 X6 X7 *) + 0xab0b0021; (* arm_ADDS X1 X1 X11 *) + 0x9bc87ccb; (* arm_UMULH X11 X6 X8 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bc97ccb; (* arm_UMULH X11 X6 X9 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0xd2807a27; (* arm_MOV X7 (rvalue (word 977)) *) + 0xb26000e7; (* arm_ORR X7 X7 (rvalue (word 4294967296)) *) + 0x9b017ceb; (* arm_MUL X11 X7 X1 *) + 0x9bc17ce9; (* arm_UMULH X9 X7 X1 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0x9b037ceb; (* arm_MUL X11 X7 X3 *) + 0x9bc37ce3; (* arm_UMULH X3 X7 X3 *) + 0xba0b01ad; (* arm_ADCS X13 X13 X11 *) + 0x9b047ceb; (* arm_MUL X11 X7 X4 *) + 0x9bc47ce4; (* arm_UMULH X4 X7 X4 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b057ceb; (* arm_MUL X11 X7 X5 *) + 0x9bc57ce5; (* arm_UMULH X5 X7 X5 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a9f37e1; (* arm_CSET X1 Condition_CS *) + 0xab0901ad; (* arm_ADDS X13 X13 X9 *) + 0xba0301ce; (* arm_ADCS X14 X14 X3 *) + 0xba040000; (* arm_ADCS X0 X0 X4 *) + 0x9a050021; (* arm_ADC X1 X1 X5 *) + 0x91000428; (* arm_ADD X8 X1 (rvalue (word 1)) *) + 0x9b087ceb; (* arm_MUL X11 X7 X8 *) + 0x9bc87ce9; (* arm_UMULH X9 X7 X8 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0xba0901ad; (* arm_ADCS X13 X13 X9 *) + 0xba1f01ce; (* arm_ADCS X14 X14 XZR *) + 0xba1f0000; (* arm_ADCS X0 X0 XZR *) + 0x9a9f30e7; (* arm_CSEL X7 X7 XZR Condition_CC *) + 0xeb07018c; (* arm_SUBS X12 X12 X7 *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xda1f0000; (* arm_SBC X0 X0 XZR *) + 0xa90435ec; (* arm_STP X12 X13 X15 (Immediate_Offset (iword (&64))) *) + 0xa90501ee; (* arm_STP X14 X0 X15 (Immediate_Offset (iword (&80))) *) + 0xa94019e5; (* arm_LDP X5 X6 X15 (Immediate_Offset (iword (&0))) *) + 0xa9440fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&64))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa94121e7; (* arm_LDP X7 X8 X15 (Immediate_Offset (iword (&16))) *) + 0xa9450fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&80))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xd2807a24; (* arm_MOV X4 (rvalue (word 977)) *) + 0xb2600083; (* arm_ORR X3 X4 (rvalue (word 4294967296)) *) + 0x9a9f3063; (* arm_CSEL X3 X3 XZR Condition_CC *) + 0xeb0300a5; (* arm_SUBS X5 X5 X3 *) + 0xfa1f00c6; (* arm_SBCS X6 X6 XZR *) + 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) + 0xda1f0108; (* arm_SBC X8 X8 XZR *) + 0xa90019e5; (* arm_STP X5 X6 X15 (Immediate_Offset (iword (&0))) *) + 0xa90121e7; (* arm_STP X7 X8 X15 (Immediate_Offset (iword (&16))) *) + 0xa9481be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&128))) *) + 0xa9400de4; (* arm_LDP X4 X3 X15 (Immediate_Offset (iword (&0))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa94923e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&144))) *) + 0xa9410de4; (* arm_LDP X4 X3 X15 (Immediate_Offset (iword (&16))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xd2807a24; (* arm_MOV X4 (rvalue (word 977)) *) + 0xb2600083; (* arm_ORR X3 X4 (rvalue (word 4294967296)) *) + 0x9a9f3063; (* arm_CSEL X3 X3 XZR Condition_CC *) + 0xeb0300a5; (* arm_SUBS X5 X5 X3 *) + 0xfa1f00c6; (* arm_SBCS X6 X6 XZR *) + 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) + 0xda1f0108; (* arm_SBC X8 X8 XZR *) + 0xa9081be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&128))) *) + 0xa90923e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&144))) *) + 0xa94613e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&96))) *) + 0xa9422207; (* arm_LDP X7 X8 X16 (Immediate_Offset (iword (&32))) *) + 0x9b077c6c; (* arm_MUL X12 X3 X7 *) + 0x9bc77c6d; (* arm_UMULH X13 X3 X7 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa9432a09; (* arm_LDP X9 X10 X16 (Immediate_Offset (iword (&48))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c60; (* arm_UMULH X0 X3 X9 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c61; (* arm_UMULH X1 X3 X10 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0xa9471be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&112))) *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bca7c83; (* arm_UMULH X3 X4 X10 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9b077cab; (* arm_MUL X11 X5 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b087cab; (* arm_MUL X11 X5 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b097cab; (* arm_MUL X11 X5 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b0a7cab; (* arm_MUL X11 X5 X10 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bca7ca4; (* arm_UMULH X4 X5 X10 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9bc77cab; (* arm_UMULH X11 X5 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9bc87cab; (* arm_UMULH X11 X5 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bc97cab; (* arm_UMULH X11 X5 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b077ccb; (* arm_MUL X11 X6 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9b087ccb; (* arm_MUL X11 X6 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b097ccb; (* arm_MUL X11 X6 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9b0a7ccb; (* arm_MUL X11 X6 X10 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9bca7cc5; (* arm_UMULH X5 X6 X10 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0x9bc77ccb; (* arm_UMULH X11 X6 X7 *) + 0xab0b0021; (* arm_ADDS X1 X1 X11 *) + 0x9bc87ccb; (* arm_UMULH X11 X6 X8 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bc97ccb; (* arm_UMULH X11 X6 X9 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0xd2807a27; (* arm_MOV X7 (rvalue (word 977)) *) + 0xb26000e7; (* arm_ORR X7 X7 (rvalue (word 4294967296)) *) + 0x9b017ceb; (* arm_MUL X11 X7 X1 *) + 0x9bc17ce9; (* arm_UMULH X9 X7 X1 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0x9b037ceb; (* arm_MUL X11 X7 X3 *) + 0x9bc37ce3; (* arm_UMULH X3 X7 X3 *) + 0xba0b01ad; (* arm_ADCS X13 X13 X11 *) + 0x9b047ceb; (* arm_MUL X11 X7 X4 *) + 0x9bc47ce4; (* arm_UMULH X4 X7 X4 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b057ceb; (* arm_MUL X11 X7 X5 *) + 0x9bc57ce5; (* arm_UMULH X5 X7 X5 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a9f37e1; (* arm_CSET X1 Condition_CS *) + 0xab0901ad; (* arm_ADDS X13 X13 X9 *) + 0xba0301ce; (* arm_ADCS X14 X14 X3 *) + 0xba040000; (* arm_ADCS X0 X0 X4 *) + 0x9a050021; (* arm_ADC X1 X1 X5 *) + 0x91000428; (* arm_ADD X8 X1 (rvalue (word 1)) *) + 0x9b087ceb; (* arm_MUL X11 X7 X8 *) + 0x9bc87ce9; (* arm_UMULH X9 X7 X8 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0xba0901ad; (* arm_ADCS X13 X13 X9 *) + 0xba1f01ce; (* arm_ADCS X14 X14 XZR *) + 0xba1f0000; (* arm_ADCS X0 X0 XZR *) + 0x9a9f30e7; (* arm_CSEL X7 X7 XZR Condition_CC *) + 0xeb07018c; (* arm_SUBS X12 X12 X7 *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xda1f0000; (* arm_SBC X0 X0 XZR *) + 0xa90637ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&96))) *) + 0xa90703ee; (* arm_STP X14 X0 SP (Immediate_Offset (iword (&112))) *) + 0xa94213e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&32))) *) + 0xa94823e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&128))) *) + 0x9b077c6c; (* arm_MUL X12 X3 X7 *) + 0x9bc77c6d; (* arm_UMULH X13 X3 X7 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa9492be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&144))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c60; (* arm_UMULH X0 X3 X9 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c61; (* arm_UMULH X1 X3 X10 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0xa9431be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&48))) *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bca7c83; (* arm_UMULH X3 X4 X10 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9b077cab; (* arm_MUL X11 X5 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b087cab; (* arm_MUL X11 X5 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b097cab; (* arm_MUL X11 X5 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b0a7cab; (* arm_MUL X11 X5 X10 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bca7ca4; (* arm_UMULH X4 X5 X10 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9bc77cab; (* arm_UMULH X11 X5 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9bc87cab; (* arm_UMULH X11 X5 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bc97cab; (* arm_UMULH X11 X5 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b077ccb; (* arm_MUL X11 X6 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9b087ccb; (* arm_MUL X11 X6 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b097ccb; (* arm_MUL X11 X6 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9b0a7ccb; (* arm_MUL X11 X6 X10 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9bca7cc5; (* arm_UMULH X5 X6 X10 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0x9bc77ccb; (* arm_UMULH X11 X6 X7 *) + 0xab0b0021; (* arm_ADDS X1 X1 X11 *) + 0x9bc87ccb; (* arm_UMULH X11 X6 X8 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bc97ccb; (* arm_UMULH X11 X6 X9 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0xd2807a27; (* arm_MOV X7 (rvalue (word 977)) *) + 0xb26000e7; (* arm_ORR X7 X7 (rvalue (word 4294967296)) *) + 0x9b017ceb; (* arm_MUL X11 X7 X1 *) + 0x9bc17ce9; (* arm_UMULH X9 X7 X1 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0x9b037ceb; (* arm_MUL X11 X7 X3 *) + 0x9bc37ce3; (* arm_UMULH X3 X7 X3 *) + 0xba0b01ad; (* arm_ADCS X13 X13 X11 *) + 0x9b047ceb; (* arm_MUL X11 X7 X4 *) + 0x9bc47ce4; (* arm_UMULH X4 X7 X4 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b057ceb; (* arm_MUL X11 X7 X5 *) + 0x9bc57ce5; (* arm_UMULH X5 X7 X5 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a9f37e1; (* arm_CSET X1 Condition_CS *) + 0xab0901ad; (* arm_ADDS X13 X13 X9 *) + 0xba0301ce; (* arm_ADCS X14 X14 X3 *) + 0xba040000; (* arm_ADCS X0 X0 X4 *) + 0x9a050021; (* arm_ADC X1 X1 X5 *) + 0x91000428; (* arm_ADD X8 X1 (rvalue (word 1)) *) + 0x9b087ceb; (* arm_MUL X11 X7 X8 *) + 0x9bc87ce9; (* arm_UMULH X9 X7 X8 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0xba0901ad; (* arm_ADCS X13 X13 X9 *) + 0xba1f01ce; (* arm_ADCS X14 X14 XZR *) + 0xba1f0000; (* arm_ADCS X0 X0 XZR *) + 0x9a9f30e7; (* arm_CSEL X7 X7 XZR Condition_CC *) + 0xeb07018c; (* arm_SUBS X12 X12 X7 *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xda1f0000; (* arm_SBC X0 X0 XZR *) + 0xa90837ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&128))) *) + 0xa90903ee; (* arm_STP X14 X0 SP (Immediate_Offset (iword (&144))) *) + 0xa9481be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&128))) *) + 0xa9460fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&96))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa94923e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&144))) *) + 0xa9470fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&112))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xd2807a24; (* arm_MOV X4 (rvalue (word 977)) *) + 0xb2600083; (* arm_ORR X3 X4 (rvalue (word 4294967296)) *) + 0x9a9f3063; (* arm_CSEL X3 X3 XZR Condition_CC *) + 0xeb0300a5; (* arm_SUBS X5 X5 X3 *) + 0xfa1f00c6; (* arm_SBCS X6 X6 XZR *) + 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) + 0xda1f0108; (* arm_SBC X8 X8 XZR *) + 0xa90219e5; (* arm_STP X5 X6 X15 (Immediate_Offset (iword (&32))) *) + 0xa90321e7; (* arm_STP X7 X8 X15 (Immediate_Offset (iword (&48))) *) + 0x910303ff; (* arm_ADD SP SP (rvalue (word 192)) *) + 0xd65f03c0 (* arm_RET X30 *) +];; + +let SECP256K1_JMIXADD_EXEC = ARM_MK_EXEC_RULE secp256k1_jmixadd_mc;; + +(* ------------------------------------------------------------------------- *) +(* Common supporting definitions and lemmas for component proofs. *) +(* ------------------------------------------------------------------------- *) + +let p_256k1 = new_definition `p_256k1 = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F`;; + +let p256k1redlemma = prove + (`!n. n <= (2 EXP 64 - 1) * (p_256k1 - 1) + ==> let q = n DIV 2 EXP 256 + 1 in + q < 2 EXP 64 /\ + q * p_256k1 <= n + p_256k1 /\ + n < q * p_256k1 + p_256k1`, + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN REWRITE_TAC[p_256k1] THEN ARITH_TAC);; + +let secp256k1 = define + `secp256k1 = (integer_mod_ring p_256k1,&0:int,&7:int)`;; + +let secp256k1_encode = new_definition + `secp256k1_encode = modular_encode(256,p_256k1)`;; + +let nintlemma = prove + (`&(num_of_int(x rem &p_256k1)) = x rem &p_256k1`, + MATCH_MP_TAC INT_OF_NUM_OF_INT THEN MATCH_MP_TAC INT_REM_POS THEN + REWRITE_TAC[INT_OF_NUM_EQ; p_256k1] THEN CONV_TAC NUM_REDUCE_CONV);; + +let unilemma0 = prove + (`x = a MOD p_256k1 ==> x < p_256k1 /\ &x = &a rem &p_256k1`, + REWRITE_TAC[INT_OF_NUM_REM; p_256k1] THEN ARITH_TAC);; + +let unilemma1 = prove + (`&x = a rem &p_256k1 ==> x < p_256k1 /\ &x = a rem &p_256k1`, + SIMP_TAC[GSYM INT_OF_NUM_LT; INT_LT_REM_EQ; p_256k1] THEN INT_ARITH_TAC);; + +let unilemma2 = prove + (`X = num_of_int(x rem &p_256k1) ==> X < p_256k1 /\ &X = x rem &p_256k1`, + DISCH_THEN SUBST1_TAC THEN + REWRITE_TAC[GSYM INT_OF_NUM_LT; nintlemma; INT_LT_REM_EQ] THEN + REWRITE_TAC[INT_OF_NUM_LT; p_256k1] THEN CONV_TAC NUM_REDUCE_CONV);; + +let lvs = + ["x_1",[`X16`;`0`]; + "y_1",[`X16`;`32`]; + "z_1",[`X16`;`64`]; + "x_2",[`X17`;`0`]; + "y_2",[`X17`;`32`]; + "z_2",[`X17`;`64`]; + "x_3",[`X15`;`0`]; + "y_3",[`X15`;`32`]; + "z_3",[`X15`;`64`]; + "zp2",[`SP`;`0`]; + "ww",[`SP`;`0`]; + "yd",[`SP`;`32`]; + "y2a",[`SP`;`32`]; + "x2a",[`SP`;`64`]; + "zzx2",[`SP`;`64`]; + "zz",[`SP`;`96`]; + "t1",[`SP`;`96`]; + "t2",[`SP`;`128`]; + "zzx1",[`SP`;`128`]; + "xd",[`SP`;`160`]];; + +(* ------------------------------------------------------------------------- *) +(* Instances of sqr. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_SQR_P256K1_TAC = + ARM_MACRO_SIM_ABBREV_TAC secp256k1_jmixadd_mc 78 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1. + !n. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = n + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0x121c) (word_add (read p3 t) (word n3),32) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) secp256k1_jmixadd_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X15 s = read X15 t /\ + read X16 s = read X16 t /\ + read X17 s = read X17 t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) s = + n) + (\s. read PC s = pcout /\ + read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 4)) s = (n EXP 2) MOD p_256k1) + (MAYCHANGE [PC; X2; X3; X4; X5; X6; X7; X8; X9; + X10; X11; X12; X13; X14] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 4)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "n_" o lhand o concl) THEN + + (*** The initial squaring block, very similar to bignum_sqr_4_8 ***) + + ARM_ACCSTEPS_TAC SECP256K1_JMIXADD_EXEC (1--45) (1--45) THEN + RULE_ASSUM_TAC(REWRITE_RULE[GSYM WORD_BITVAL; COND_SWAP]) THEN + MAP_EVERY ABBREV_TAC + [`l = bignum_of_wordlist[mullo_s31; sum_s33; sum_s35; sum_s37]`; + `h = bignum_of_wordlist[sum_s39; sum_s41; sum_s43; sum_s45]`] THEN + SUBGOAL_THEN `2 EXP 256 * h + l = n EXP 2` (SUBST1_TAC o SYM) THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"; "n"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_ARITH_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** The initial modular reduction of the high part ***) + + SUBGOAL_THEN + `(2 EXP 256 * h + l) MOD p_256k1 = (4294968273 * h + l) MOD p_256k1` + SUBST1_TAC THENL + [ONCE_REWRITE_TAC[GSYM MOD_ADD_MOD] THEN + ONCE_REWRITE_TAC[GSYM MOD_MULT_LMOD] THEN + REWRITE_TAC[p_256k1] THEN CONV_TAC NUM_REDUCE_CONV; + ALL_TAC] THEN + + (*** Instantiate the quotient approximation lemma ***) + + MP_TAC(SPEC `4294968273 * h + l` p256k1redlemma) THEN ANTS_TAC THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"] THEN REWRITE_TAC[p_256k1] THEN + CONV_TAC NUM_REDUCE_CONV THEN BOUNDER_TAC[]; + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN STRIP_TAC] THEN + + (*** Reduction from 8 digits to 5 digits ***) + + ARM_ACCSTEPS_TAC SECP256K1_JMIXADD_EXEC (46--64) (46--64) THEN + RULE_ASSUM_TAC(REWRITE_RULE[COND_SWAP; GSYM WORD_BITVAL]) THEN + ABBREV_TAC + `ca = bignum_of_wordlist + [sum_s50; sum_s61; sum_s62; sum_s63; sum_s64]` THEN + SUBGOAL_THEN `(4294968273 * h + l) DIV 2 EXP 256 + 1 <= 2 EXP 33` + ASSUME_TAC THENL + [REWRITE_TAC[ARITH_RULE `a + 1 <= b <=> a < b`] THEN + SIMP_TAC[RDIV_LT_EQ; EXP_EQ_0; ARITH_EQ] THEN CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["h"; "l"] THEN BOUNDER_TAC[]; + ALL_TAC] THEN + SUBGOAL_THEN `4294968273 * h + l = ca` SUBST_ALL_TAC THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"; "ca"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_ARITH_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Quotient estimate computation ***) + + SUBGOAL_THEN `ca DIV 2 EXP 256 = val(sum_s64:int64)` SUBST_ALL_TAC THENL + [EXPAND_TAC "ca" THEN CONV_TAC(LAND_CONV BIGNUM_OF_WORDLIST_DIV_CONV) THEN + REFL_TAC; + FIRST_ASSUM(ASSUME_TAC o MATCH_MP (ARITH_RULE + `n + 1 < 2 EXP 64 ==> n < 2 EXP 64 - 1`))] THEN + ARM_STEPS_TAC SECP256K1_JMIXADD_EXEC [93] THEN + ABBREV_TAC `q:int64 = word_add sum_s64 (word 1)` THEN + SUBGOAL_THEN `val(sum_s64:int64) + 1 = val(q:int64)` SUBST_ALL_TAC THENL + [EXPAND_TAC "q" THEN REWRITE_TAC[VAL_WORD_ADD; VAL_WORD_1] THEN + ASM_SIMP_TAC[DIMINDEX_64; MOD_LT]; + ALL_TAC] THEN + + (*** The rest of the computation ***) + + ARM_ACCSTEPS_TAC SECP256K1_JMIXADD_EXEC (66--78) (66--78) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC MOD_UNIQ_BALANCED_REAL THEN + MAP_EVERY EXISTS_TAC [`val(q:int64)`; `256`] THEN ASM_REWRITE_TAC[] THEN + CONJ_TAC THENL [REWRITE_TAC[p_256k1] THEN ARITH_TAC; ALL_TAC] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN + + (*** Comparison computation and then the rest is easy ***) + + SUBGOAL_THEN `ca < val(q:int64) * p_256k1 <=> ~carry_s71` SUBST1_TAC THENL + [CONV_TAC SYM_CONV THEN MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN + EXISTS_TAC `256` THEN EXPAND_TAC "ca" THEN + REWRITE_TAC[p_256k1; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + REWRITE_TAC[REAL_BITVAL_NOT] THEN + SUBGOAL_THEN `&(val(sum_s64:int64)):real = &(val(q:int64)) - &1` + SUBST1_TAC THENL + [FIRST_X_ASSUM(MP_TAC o MATCH_MP (ARITH_RULE + `n < 2 EXP 64 - 1 ==> n + 1 < 2 EXP 64`)) THEN + UNDISCH_THEN + `word_add sum_s64 (word 1):int64 = q` (SUBST1_TAC o SYM) THEN + SIMP_TAC[VAL_WORD_ADD; VAL_WORD_1; DIMINDEX_64; MOD_LT] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN REAL_ARITH_TAC; + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]]; + EXPAND_TAC "ca" THEN + REWRITE_TAC[REAL_BITVAL_NOT] THEN + REWRITE_TAC[p_256k1; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + RULE_ASSUM_TAC(REWRITE_RULE[WORD_UNMASK_64]) THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + ASM_CASES_TAC `carry_s71:bool` THEN + ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN CONV_TAC WORD_REDUCE_CONV THEN + REAL_INTEGER_TAC]);; + +(* ------------------------------------------------------------------------- *) +(* Instances of mul. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_MUL_P256K1_TAC = + ARM_MACRO_SIM_ABBREV_TAC secp256k1_jmixadd_mc 100 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) t = n + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0x121c) (word_add (read p3 t) (word n3),32) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) secp256k1_jmixadd_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X15 s = read X15 t /\ + read X16 s = read X16 t /\ + read X17 s = read X17 t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) s = + n) + (\s. read PC s = pcout /\ + read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 4)) s = (m * n) MOD p_256k1) + (MAYCHANGE [PC; X0; X1; X3; X4; X5; X6; X7; X8; X9; + X10; X11; X12; X13; X14] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 4)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "m_" o lhand o concl) THEN + + (*** The initial multiply block, very similar to bignum_mul_4_8 ***) + + ARM_ACCSTEPS_TAC SECP256K1_JMIXADD_EXEC (1--67) (1--67) THEN + MAP_EVERY ABBREV_TAC + [`l = bignum_of_wordlist[mullo_s3; sum_s18; sum_s35; sum_s52]`; + `h = bignum_of_wordlist[sum_s62; sum_s64; sum_s66; sum_s67]`] THEN + SUBGOAL_THEN `2 EXP 256 * h + l = m * n` (SUBST1_TAC o SYM) THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"; "m"; "n"] THEN + REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_ARITH_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** The initial modular reduction of the high part ***) + + SUBGOAL_THEN + `(2 EXP 256 * h + l) MOD p_256k1 = (4294968273 * h + l) MOD p_256k1` + SUBST1_TAC THENL + [ONCE_REWRITE_TAC[GSYM MOD_ADD_MOD] THEN + ONCE_REWRITE_TAC[GSYM MOD_MULT_LMOD] THEN + REWRITE_TAC[p_256k1] THEN CONV_TAC NUM_REDUCE_CONV; + ALL_TAC] THEN + + (*** Instantiate the quotient approximation lemma ***) + + MP_TAC(SPEC `4294968273 * h + l` p256k1redlemma) THEN ANTS_TAC THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"] THEN REWRITE_TAC[p_256k1] THEN + CONV_TAC NUM_REDUCE_CONV THEN BOUNDER_TAC[]; + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN STRIP_TAC] THEN + + (*** Reduction from 8 digits to 5 digits ***) + + ARM_ACCSTEPS_TAC SECP256K1_JMIXADD_EXEC (68--86) (68--86) THEN + RULE_ASSUM_TAC(REWRITE_RULE[COND_SWAP; GSYM WORD_BITVAL]) THEN + ABBREV_TAC + `ca = bignum_of_wordlist + [sum_s72; sum_s83; sum_s84; sum_s85; sum_s86]` THEN + SUBGOAL_THEN `(4294968273 * h + l) DIV 2 EXP 256 + 1 <= 2 EXP 33` + ASSUME_TAC THENL + [REWRITE_TAC[ARITH_RULE `a + 1 <= b <=> a < b`] THEN + SIMP_TAC[RDIV_LT_EQ; EXP_EQ_0; ARITH_EQ] THEN CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["h"; "l"] THEN BOUNDER_TAC[]; + ALL_TAC] THEN + SUBGOAL_THEN `4294968273 * h + l = ca` SUBST_ALL_TAC THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"; "ca"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_ARITH_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Quotient estimate computation ***) + + SUBGOAL_THEN `ca DIV 2 EXP 256 = val(sum_s86:int64)` SUBST_ALL_TAC THENL + [EXPAND_TAC "ca" THEN CONV_TAC(LAND_CONV BIGNUM_OF_WORDLIST_DIV_CONV) THEN + REFL_TAC; + FIRST_ASSUM(ASSUME_TAC o MATCH_MP (ARITH_RULE + `n + 1 < 2 EXP 64 ==> n < 2 EXP 64 - 1`))] THEN + ARM_STEPS_TAC SECP256K1_JMIXADD_EXEC [87] THEN + ABBREV_TAC `q:int64 = word_add sum_s86 (word 1)` THEN + SUBGOAL_THEN `val(sum_s86:int64) + 1 = val(q:int64)` SUBST_ALL_TAC THENL + [EXPAND_TAC "q" THEN REWRITE_TAC[VAL_WORD_ADD; VAL_WORD_1] THEN + ASM_SIMP_TAC[DIMINDEX_64; MOD_LT]; + ALL_TAC] THEN + + (*** The rest of the computation ***) + + ARM_ACCSTEPS_TAC SECP256K1_JMIXADD_EXEC (88--100) (88--100) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC MOD_UNIQ_BALANCED_REAL THEN + MAP_EVERY EXISTS_TAC [`val(q:int64)`; `256`] THEN ASM_REWRITE_TAC[] THEN + CONJ_TAC THENL [REWRITE_TAC[p_256k1] THEN ARITH_TAC; ALL_TAC] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN + + (*** Comparison computation and then the rest is easy ***) + + SUBGOAL_THEN `ca < val(q:int64) * p_256k1 <=> ~carry_s93` SUBST1_TAC THENL + [CONV_TAC SYM_CONV THEN MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN + EXISTS_TAC `256` THEN EXPAND_TAC "ca" THEN + REWRITE_TAC[p_256k1; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + REWRITE_TAC[REAL_BITVAL_NOT] THEN + SUBGOAL_THEN `&(val(sum_s86:int64)):real = &(val(q:int64)) - &1` + SUBST1_TAC THENL + [FIRST_X_ASSUM(MP_TAC o MATCH_MP (ARITH_RULE + `n < 2 EXP 64 - 1 ==> n + 1 < 2 EXP 64`)) THEN + UNDISCH_THEN + `word_add sum_s86 (word 1):int64 = q` (SUBST1_TAC o SYM) THEN + SIMP_TAC[VAL_WORD_ADD; VAL_WORD_1; DIMINDEX_64; MOD_LT] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN REAL_ARITH_TAC; + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]]; + EXPAND_TAC "ca" THEN + REWRITE_TAC[REAL_BITVAL_NOT] THEN + REWRITE_TAC[p_256k1; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + RULE_ASSUM_TAC(REWRITE_RULE[WORD_UNMASK_64]) THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + ASM_CASES_TAC `carry_s93:bool` THEN + ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN CONV_TAC WORD_REDUCE_CONV THEN + REAL_INTEGER_TAC]);; + +(* ------------------------------------------------------------------------- *) +(* Instances of sub. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_SUB_P256K1_TAC = + ARM_MACRO_SIM_ABBREV_TAC secp256k1_jmixadd_mc 17 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) t = n + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0x121c) (word_add (read p3 t) (word n3),32) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) secp256k1_jmixadd_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X15 s = read X15 t /\ + read X16 s = read X16 t /\ + read X17 s = read X17 t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) s = + n) + (\s. read PC s = pcout /\ + (m < p_256k1 /\ n < p_256k1 + ==> &(read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 4)) s) = (&m - &n) rem &p_256k1)) + (MAYCHANGE [PC; X3; X4; X5; X6; X7; X8] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 4)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "m_" o lhand o concl) THEN + + ARM_ACCSTEPS_TAC SECP256K1_JMIXADD_EXEC (1--8) (1--8) THEN + + SUBGOAL_THEN `carry_s8 <=> m < n` SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN EXISTS_TAC `256` THEN + MAP_EVERY EXPAND_TAC ["m"; "n"] THEN REWRITE_TAC[GSYM REAL_OF_NUM_ADD] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_MUL; GSYM REAL_OF_NUM_POW] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ALL_TAC] THEN + + ARM_ACCSTEPS_TAC SECP256K1_JMIXADD_EXEC (12--17) (9--17) THEN + + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN STRIP_TAC THEN + CONV_TAC(LAND_CONV(RAND_CONV BIGNUM_EXPAND_CONV)) THEN + ASM_REWRITE_TAC[] THEN DISCARD_STATE_TAC "s17" THEN + + CONV_TAC SYM_CONV THEN MATCH_MP_TAC INT_REM_UNIQ THEN + EXISTS_TAC `--(&(bitval(m < n))):int` THEN REWRITE_TAC[INT_ABS_NUM] THEN + REWRITE_TAC[INT_ARITH `m - n:int = --b * p + z <=> z = b * p + m - n`] THEN + REWRITE_TAC[int_eq; int_le; int_lt] THEN + REWRITE_TAC[int_add_th; int_mul_th; int_of_num_th; int_sub_th] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_ADD; GSYM REAL_OF_NUM_MUL; + GSYM REAL_OF_NUM_POW] THEN + MATCH_MP_TAC(REAL_ARITH + `!t:real. p < t /\ + (&0 <= a /\ a < p) /\ + (&0 <= z /\ z < t) /\ + ((&0 <= z /\ z < t) /\ (&0 <= a /\ a < t) ==> z = a) + ==> z = a /\ &0 <= z /\ z < p`) THEN + EXISTS_TAC `(&2:real) pow 256` THEN + + CONJ_TAC THENL [REWRITE_TAC[p_256k1] THEN REAL_ARITH_TAC; ALL_TAC] THEN + CONJ_TAC THENL + [MAP_EVERY UNDISCH_TAC [`m < p_256k1`; `n < p_256k1`] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_LT] THEN + ASM_CASES_TAC `&m:real < &n` THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + POP_ASSUM MP_TAC THEN REWRITE_TAC[p_256k1] THEN REAL_ARITH_TAC; + ALL_TAC] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; STRIP_TAC] THEN + + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`256`; `&0:real`] THEN + ASM_REWRITE_TAC[] THEN + CONJ_TAC THENL [REAL_INTEGER_TAC; ALL_TAC] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC WORD_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["m"; "n"] THEN REWRITE_TAC[GSYM REAL_OF_NUM_ADD] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_MUL; GSYM REAL_OF_NUM_POW; p_256k1] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + CONV_TAC(RAND_CONV REAL_POLY_CONV) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Overall point operation proof. *) +(* ------------------------------------------------------------------------- *) + +let SECP256K1_JMIXADD_CORRECT = time prove + (`!p3 p1 t1 p2 t2 pc stackpointer. + aligned 16 stackpointer /\ + ALLPAIRS nonoverlapping + [(p3,96); (stackpointer,192)] + [(word pc,0x121c); (p1,96); (p2,96)] /\ + nonoverlapping (p3,96) (stackpointer,192) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) secp256k1_jmixadd_mc /\ + read PC s = word(pc + 0x4) /\ + read SP s = stackpointer /\ + C_ARGUMENTS [p3; p1; p2] s /\ + bignum_triple_from_memory (p1,4) s = t1 /\ + bignum_pair_from_memory (p2,4) s = t2) + (\s. read PC s = word (pc + 0x1214) /\ + (!x1 y1 z1 x2 y2 z2. + ~(z1 = &0) /\ z2 = &1 /\ + ~(jacobian_eq (integer_mod_ring p_256k1) + (x1,y1,z1) (x2,y2,z2)) /\ + ~(jacobian_eq (integer_mod_ring p_256k1) + (jacobian_neg secp256k1 (x1,y1,z1)) + (x2,y2,z2)) /\ + t1 = tripled secp256k1_encode (x1,y1,z1) /\ + t2 = paired secp256k1_encode (x2,y2) + ==> bignum_triple_from_memory(p3,4) s = + tripled secp256k1_encode + (jacobian_add secp256k1 (x1,y1,z1) (x2,y2,z2)))) + (MAYCHANGE [PC; X0; X1; X2; X3; X4; X5; X6; X7; X8; X9; X10; + X11; X12; X13; X14; X15; X16; X17] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,96); + memory :> bytes(stackpointer,192)])`, + REWRITE_TAC[FORALL_PAIR_THM] THEN + MAP_EVERY X_GEN_TAC + [`p3:int64`; `p1:int64`; `x1:num`; `y1:num`; `z1:num`; `p2:int64`; + `x2:num`; `y2:num`; `pc:num`; `stackpointer:int64`] THEN + REWRITE_TAC[ALLPAIRS; ALL; NONOVERLAPPING_CLAUSES] THEN STRIP_TAC THEN + REWRITE_TAC[C_ARGUMENTS; SOME_FLAGS; PAIR_EQ; + bignum_pair_from_memory; bignum_triple_from_memory] THEN + CONV_TAC(ONCE_DEPTH_CONV NUM_MULT_CONV) THEN + CONV_TAC(ONCE_DEPTH_CONV NORMALIZE_RELATIVE_ADDRESS_CONV) THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + + LOCAL_SQR_P256K1_TAC 3 ["zp2";"z_1"] THEN + LOCAL_MUL_P256K1_TAC 0 ["y2a";"z_1";"y_2"] THEN + LOCAL_MUL_P256K1_TAC 0 ["x2a";"zp2";"x_2"] THEN + LOCAL_MUL_P256K1_TAC 0 ["y2a";"zp2";"y2a"] THEN + LOCAL_SUB_P256K1_TAC 0 ["xd";"x2a";"x_1"] THEN + LOCAL_SUB_P256K1_TAC 0 ["yd";"y2a";"y_1"] THEN + LOCAL_SQR_P256K1_TAC 0 ["zz";"xd"] THEN + LOCAL_SQR_P256K1_TAC 0 ["ww";"yd"] THEN + LOCAL_MUL_P256K1_TAC 0 ["zzx1";"zz";"x_1"] THEN + LOCAL_MUL_P256K1_TAC 0 ["zzx2";"zz";"x2a"] THEN + LOCAL_SUB_P256K1_TAC 0 ["x_3";"ww";"zzx1"] THEN + LOCAL_SUB_P256K1_TAC 0 ["t1";"zzx2";"zzx1"] THEN + LOCAL_MUL_P256K1_TAC 0 ["z_3";"xd";"z_1"] THEN + LOCAL_SUB_P256K1_TAC 0 ["x_3";"x_3";"zzx2"] THEN + LOCAL_SUB_P256K1_TAC 0 ["t2";"zzx1";"x_3"] THEN + LOCAL_MUL_P256K1_TAC 0 ["t1";"t1";"y_1"] THEN + LOCAL_MUL_P256K1_TAC 0 ["t2";"yd";"t2"] THEN + LOCAL_SUB_P256K1_TAC 0 ["y_3";"t2";"t1"] THEN + + (*** Remove some assumptions slowing down SUBSUMED_MAYCHANGE_TAC ***) + + FIRST_X_ASSUM(MP_TAC o + check (can (term_match [] `(MAYCHANGE a ,, b) s s'` o concl))) THEN + POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o rev) THEN + DISCH_THEN(fun th -> + DISCH_TAC THEN ENSURES_FINAL_STATE_TAC THEN MP_TAC th) THEN + STRIP_TAC THEN ASM_REWRITE_TAC[] THEN + DISCARD_STATE_TAC "s21" THEN + DISCARD_MATCHING_ASSUMPTIONS [`nonoverlapping_modulo a b c`] THEN + MAP_EVERY X_GEN_TAC + [`x1':int`; `y1':int`; `z1':int`; `x2':int`; `y2':int`; `z2':int`] THEN + DISCH_THEN(CONJUNCTS_THEN2 ASSUME_TAC MP_TAC) THEN + GEN_REWRITE_TAC I [IMP_CONJ] THEN DISCH_THEN SUBST_ALL_TAC THEN + REPLICATE_TAC 2 (DISCH_THEN(CONJUNCTS_THEN2 ASSUME_TAC MP_TAC)) THEN + REWRITE_TAC[tripled; paired; secp256k1_encode; PAIR_EQ; modular_encode] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN + (STRIP_ASSUME_TAC o MATCH_MP unilemma2)) THEN + + (*** Dispose of any range hypotheses ***) + + REPEAT(FIRST_X_ASSUM(MP_TAC o check (is_imp o concl))) THEN + REPEAT(ANTS_TAC THENL + [REWRITE_TAC[p_256k1] THEN RULE_ASSUM_TAC(REWRITE_RULE[p_256k1]) THEN + CONV_TAC NUM_REDUCE_CONV THEN ASM BOUNDER_TAC[]; + (DISCH_THEN(STRIP_ASSUME_TAC o MATCH_MP unilemma0) ORELSE + DISCH_THEN(STRIP_ASSUME_TAC o MATCH_MP unilemma1))]) THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o GEN_REWRITE_RULE I [GSYM NOT_LE])) THEN + + (*** Now push the moduli around then do the algebra ***) + + RULE_ASSUM_TAC(REWRITE_RULE + [num_congruent; GSYM INT_OF_NUM_CLAUSES; GSYM INT_OF_NUM_REM]) THEN + ASM_REWRITE_TAC[tripled; paired; jacobian_add; secp256k1] THEN + ASM_REWRITE_TAC[GSYM secp256k1] THEN + REWRITE_TAC[INTEGER_MOD_RING_CLAUSES] THEN + CONV_TAC INT_REDUCE_CONV THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN + CONV_TAC INT_REM_DOWN_CONV THEN + REWRITE_TAC[tripled; paired; modular_encode] THEN + REWRITE_TAC[PAIR_EQ; GSYM INT_OF_NUM_EQ; nintlemma] THEN + CONV_TAC INT_REM_DOWN_CONV THEN + REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES; GSYM INT_OF_NUM_REM] THEN + ASM_REWRITE_TAC[] THEN CONV_TAC INT_REM_DOWN_CONV THEN + REPEAT CONJ_TAC THEN AP_THM_TAC THEN AP_TERM_TAC THEN + INT_ARITH_TAC);; + +let SECP256K1_JMIXADD_SUBROUTINE_CORRECT = time prove + (`!p3 p1 t1 p2 t2 pc stackpointer returnaddress. + aligned 16 stackpointer /\ + ALLPAIRS nonoverlapping + [(p3,96); (word_sub stackpointer (word 192),192)] + [(word pc,0x121c); (p1,96); (p2,96)] /\ + nonoverlapping (p3,96) (word_sub stackpointer (word 192),192) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) secp256k1_jmixadd_mc /\ + read PC s = word pc /\ + read SP s = stackpointer /\ + read X30 s = returnaddress /\ + C_ARGUMENTS [p3; p1; p2] s /\ + bignum_triple_from_memory (p1,4) s = t1 /\ + bignum_pair_from_memory (p2,4) s = t2) + (\s. read PC s = returnaddress /\ + (!x1 y1 z1 x2 y2 z2. + ~(z1 = &0) /\ z2 = &1 /\ + ~(jacobian_eq (integer_mod_ring p_256k1) + (x1,y1,z1) (x2,y2,z2)) /\ + ~(jacobian_eq (integer_mod_ring p_256k1) + (jacobian_neg secp256k1 (x1,y1,z1)) + (x2,y2,z2)) /\ + t1 = tripled secp256k1_encode (x1,y1,z1) /\ + t2 = paired secp256k1_encode (x2,y2) + ==> bignum_triple_from_memory(p3,4) s = + tripled secp256k1_encode + (jacobian_add secp256k1 (x1,y1,z1) (x2,y2,z2)))) + (MAYCHANGE [PC; X0; X1; X2; X3; X4; X5; X6; X7; X8; X9; X10; + X11; X12; X13; X14; X15; X16; X17] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,96); + memory :> bytes(word_sub stackpointer (word 192),192)])`, + ARM_ADD_RETURN_STACK_TAC SECP256K1_JMIXADD_EXEC + SECP256K1_JMIXADD_CORRECT `[]` 192);; diff --git a/arm/secp256k1/Makefile b/arm/secp256k1/Makefile index 1632fec8d1..b17a1435ce 100644 --- a/arm/secp256k1/Makefile +++ b/arm/secp256k1/Makefile @@ -51,7 +51,10 @@ OBJ = bignum_add_p256k1.o \ bignum_sqr_p256k1_alt.o \ bignum_sub_p256k1.o \ bignum_tomont_p256k1.o \ - bignum_triple_p256k1.o + bignum_triple_p256k1.o \ + secp256k1_jadd.o \ + secp256k1_jdouble.o \ + secp256k1_jmixadd.o %.o : %.S ; $(CC) -E -I../../include $< | $(GAS) -o $@ - diff --git a/arm/secp256k1/secp256k1_jadd.S b/arm/secp256k1/secp256k1_jadd.S new file mode 100644 index 0000000000..f566b7202c --- /dev/null +++ b/arm/secp256k1/secp256k1_jadd.S @@ -0,0 +1,351 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +// ---------------------------------------------------------------------------- +// Point addition on SECG curve secp256k1 in Jacobian coordinates +// +// extern void secp256k1_jadd +// (uint64_t p3[static 12],uint64_t p1[static 12],uint64_t p2[static 12]); +// +// Does p3 := p1 + p2 where all points are regarded as Jacobian triples. +// A Jacobian triple (x,y,z) represents affine point (x/z^2,y/z^3). +// It is assumed that all coordinates of the input points p1 and p2 are +// fully reduced mod p_256k1, that both z coordinates are nonzero and +// that neither p1 =~= p2 or p1 =~= -p2, where "=~=" means "represents +// the same affine point as". +// +// Standard ARM ABI: X0 = p3, X1 = p1, X2 = p2 +// ---------------------------------------------------------------------------- +#include "_internal_s2n_bignum.h" + + S2N_BN_SYM_VISIBILITY_DIRECTIVE(secp256k1_jadd) + S2N_BN_SYM_PRIVACY_DIRECTIVE(secp256k1_jadd) + + .text + .balign 4 + +// Size of individual field elements + +#define NUMSIZE 32 + +// Stable homes for input arguments during main code sequence + +#define input_z x15 +#define input_x x16 +#define input_y x17 + +// Pointer-offset pairs for inputs and outputs + +#define x_1 input_x, #0 +#define y_1 input_x, #NUMSIZE +#define z_1 input_x, #(2*NUMSIZE) + +#define x_2 input_y, #0 +#define y_2 input_y, #NUMSIZE +#define z_2 input_y, #(2*NUMSIZE) + +#define x_3 input_z, #0 +#define y_3 input_z, #NUMSIZE +#define z_3 input_z, #(2*NUMSIZE) + +// Pointer-offset pairs for temporaries, with some aliasing +// NSPACE is the total stack needed for these temporaries + +#define z1sq sp, #(NUMSIZE*0) +#define ww sp, #(NUMSIZE*0) + +#define yd sp, #(NUMSIZE*1) +#define y2a sp, #(NUMSIZE*1) + +#define x2a sp, #(NUMSIZE*2) +#define zzx2 sp, #(NUMSIZE*2) + +#define zz sp, #(NUMSIZE*3) +#define t1 sp, #(NUMSIZE*3) + +#define t2 sp, #(NUMSIZE*4) +#define x1a sp, #(NUMSIZE*4) +#define zzx1 sp, #(NUMSIZE*4) + +#define xd sp, #(NUMSIZE*5) +#define z2sq sp, #(NUMSIZE*5) + +#define y1a sp, #(NUMSIZE*6) + +#define NSPACE (NUMSIZE*7) + +// Corresponds exactly to bignum_mul_p256k1_alt + +#define mul_p256k1(P0,P1,P2) \ + ldp x3, x4, [P1]; \ + ldp x7, x8, [P2]; \ + mul x12, x3, x7; \ + umulh x13, x3, x7; \ + mul x11, x3, x8; \ + umulh x14, x3, x8; \ + adds x13, x13, x11; \ + ldp x9, x10, [P2+16]; \ + mul x11, x3, x9; \ + umulh x0, x3, x9; \ + adcs x14, x14, x11; \ + mul x11, x3, x10; \ + umulh x1, x3, x10; \ + adcs x0, x0, x11; \ + adc x1, x1, xzr; \ + ldp x5, x6, [P1+16]; \ + mul x11, x4, x7; \ + adds x13, x13, x11; \ + mul x11, x4, x8; \ + adcs x14, x14, x11; \ + mul x11, x4, x9; \ + adcs x0, x0, x11; \ + mul x11, x4, x10; \ + adcs x1, x1, x11; \ + umulh x3, x4, x10; \ + adc x3, x3, xzr; \ + umulh x11, x4, x7; \ + adds x14, x14, x11; \ + umulh x11, x4, x8; \ + adcs x0, x0, x11; \ + umulh x11, x4, x9; \ + adcs x1, x1, x11; \ + adc x3, x3, xzr; \ + mul x11, x5, x7; \ + adds x14, x14, x11; \ + mul x11, x5, x8; \ + adcs x0, x0, x11; \ + mul x11, x5, x9; \ + adcs x1, x1, x11; \ + mul x11, x5, x10; \ + adcs x3, x3, x11; \ + umulh x4, x5, x10; \ + adc x4, x4, xzr; \ + umulh x11, x5, x7; \ + adds x0, x0, x11; \ + umulh x11, x5, x8; \ + adcs x1, x1, x11; \ + umulh x11, x5, x9; \ + adcs x3, x3, x11; \ + adc x4, x4, xzr; \ + mul x11, x6, x7; \ + adds x0, x0, x11; \ + mul x11, x6, x8; \ + adcs x1, x1, x11; \ + mul x11, x6, x9; \ + adcs x3, x3, x11; \ + mul x11, x6, x10; \ + adcs x4, x4, x11; \ + umulh x5, x6, x10; \ + adc x5, x5, xzr; \ + umulh x11, x6, x7; \ + adds x1, x1, x11; \ + umulh x11, x6, x8; \ + adcs x3, x3, x11; \ + umulh x11, x6, x9; \ + adcs x4, x4, x11; \ + adc x5, x5, xzr; \ + mov x7, #0x3d1; \ + orr x7, x7, #0x100000000; \ + mul x11, x7, x1; \ + umulh x9, x7, x1; \ + adds x12, x12, x11; \ + mul x11, x7, x3; \ + umulh x3, x7, x3; \ + adcs x13, x13, x11; \ + mul x11, x7, x4; \ + umulh x4, x7, x4; \ + adcs x14, x14, x11; \ + mul x11, x7, x5; \ + umulh x5, x7, x5; \ + adcs x0, x0, x11; \ + cset x1, cs; \ + adds x13, x13, x9; \ + adcs x14, x14, x3; \ + adcs x0, x0, x4; \ + adc x1, x1, x5; \ + add x8, x1, #0x1; \ + mul x11, x7, x8; \ + umulh x9, x7, x8; \ + adds x12, x12, x11; \ + adcs x13, x13, x9; \ + adcs x14, x14, xzr; \ + adcs x0, x0, xzr; \ + csel x7, x7, xzr, cc; \ + subs x12, x12, x7; \ + sbcs x13, x13, xzr; \ + sbcs x14, x14, xzr; \ + sbc x0, x0, xzr; \ + stp x12, x13, [P0]; \ + stp x14, x0, [P0+16] + +// Corresponds exactly to bignum_sqr_p256k1_alt + +#define sqr_p256k1(P0,P1) \ + ldp x2, x3, [P1]; \ + mul x9, x2, x3; \ + umulh x10, x2, x3; \ + ldp x4, x5, [P1+16]; \ + mul x11, x2, x5; \ + umulh x12, x2, x5; \ + mul x7, x2, x4; \ + umulh x6, x2, x4; \ + adds x10, x10, x7; \ + adcs x11, x11, x6; \ + mul x7, x3, x4; \ + umulh x6, x3, x4; \ + adc x6, x6, xzr; \ + adds x11, x11, x7; \ + mul x13, x4, x5; \ + umulh x14, x4, x5; \ + adcs x12, x12, x6; \ + mul x7, x3, x5; \ + umulh x6, x3, x5; \ + adc x6, x6, xzr; \ + adds x12, x12, x7; \ + adcs x13, x13, x6; \ + adc x14, x14, xzr; \ + adds x9, x9, x9; \ + adcs x10, x10, x10; \ + adcs x11, x11, x11; \ + adcs x12, x12, x12; \ + adcs x13, x13, x13; \ + adcs x14, x14, x14; \ + cset x6, cs; \ + umulh x7, x2, x2; \ + mul x8, x2, x2; \ + adds x9, x9, x7; \ + mul x7, x3, x3; \ + adcs x10, x10, x7; \ + umulh x7, x3, x3; \ + adcs x11, x11, x7; \ + mul x7, x4, x4; \ + adcs x12, x12, x7; \ + umulh x7, x4, x4; \ + adcs x13, x13, x7; \ + mul x7, x5, x5; \ + adcs x14, x14, x7; \ + umulh x7, x5, x5; \ + adc x6, x6, x7; \ + mov x3, #0x3d1; \ + orr x3, x3, #0x100000000; \ + mul x7, x3, x12; \ + umulh x4, x3, x12; \ + adds x8, x8, x7; \ + mul x7, x3, x13; \ + umulh x13, x3, x13; \ + adcs x9, x9, x7; \ + mul x7, x3, x14; \ + umulh x14, x3, x14; \ + adcs x10, x10, x7; \ + mul x7, x3, x6; \ + umulh x6, x3, x6; \ + adcs x11, x11, x7; \ + cset x12, cs; \ + adds x9, x9, x4; \ + adcs x10, x10, x13; \ + adcs x11, x11, x14; \ + adc x12, x12, x6; \ + add x2, x12, #0x1; \ + mul x7, x3, x2; \ + umulh x6, x3, x2; \ + adds x8, x8, x7; \ + adcs x9, x9, x6; \ + adcs x10, x10, xzr; \ + adcs x11, x11, xzr; \ + csel x3, x3, xzr, cc; \ + subs x8, x8, x3; \ + sbcs x9, x9, xzr; \ + sbcs x10, x10, xzr; \ + sbc x11, x11, xzr; \ + stp x8, x9, [P0]; \ + stp x10, x11, [P0+16] + +// Corresponds exactly to bignum_sub_p256k1 + +#define sub_p256k1(P0,P1,P2) \ + ldp x5, x6, [P1]; \ + ldp x4, x3, [P2]; \ + subs x5, x5, x4; \ + sbcs x6, x6, x3; \ + ldp x7, x8, [P1+16]; \ + ldp x4, x3, [P2+16]; \ + sbcs x7, x7, x4; \ + sbcs x8, x8, x3; \ + mov x4, #0x3d1; \ + orr x3, x4, #0x100000000; \ + csel x3, x3, xzr, cc; \ + subs x5, x5, x3; \ + sbcs x6, x6, xzr; \ + sbcs x7, x7, xzr; \ + sbc x8, x8, xzr; \ + stp x5, x6, [P0]; \ + stp x7, x8, [P0+16] + +S2N_BN_SYMBOL(secp256k1_jadd): + +// Make room on stack for temporary variables +// Move the input arguments to stable places + + sub sp, sp, NSPACE + + mov input_z, x0 + mov input_x, x1 + mov input_y, x2 + +// Main code, just a sequence of basic field operations + + sqr_p256k1(z1sq,z_1) + sqr_p256k1(z2sq,z_2) + + mul_p256k1(y1a,z_2,y_1) + mul_p256k1(y2a,z_1,y_2) + + mul_p256k1(x2a,z1sq,x_2) + mul_p256k1(x1a,z2sq,x_1) + mul_p256k1(y2a,z1sq,y2a) + mul_p256k1(y1a,z2sq,y1a) + + sub_p256k1(xd,x2a,x1a) + sub_p256k1(yd,y2a,y1a) + + sqr_p256k1(zz,xd) + sqr_p256k1(ww,yd) + + mul_p256k1(zzx1,zz,x1a) + mul_p256k1(zzx2,zz,x2a) + + sub_p256k1(x_3,ww,zzx1) + sub_p256k1(t1,zzx2,zzx1) + + mul_p256k1(xd,xd,z_1) + + sub_p256k1(x_3,x_3,zzx2) + + sub_p256k1(t2,zzx1,x_3) + + mul_p256k1(t1,t1,y1a) + mul_p256k1(z_3,xd,z_2) + mul_p256k1(t2,yd,t2) + + sub_p256k1(y_3,t2,t1) + +// Restore stack and return + + add sp, sp, NSPACE + ret + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack, "", %progbits +#endif diff --git a/arm/secp256k1/secp256k1_jdouble.S b/arm/secp256k1/secp256k1_jdouble.S new file mode 100644 index 0000000000..a3e6f72911 --- /dev/null +++ b/arm/secp256k1/secp256k1_jdouble.S @@ -0,0 +1,672 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +// ---------------------------------------------------------------------------- +// Point doubling on SECG curve secp256k1 in Jacobian coordinates +// +// extern void secp256k1_jdouble +// (uint64_t p3[static 12],uint64_t p1[static 12]); +// +// Does p3 := 2 * p1 where all points are regarded as Jacobian triples. +// A Jacobian triple (x,y,z) represents affine point (x/z^2,y/z^3). +// It is assumed that all coordinates of the input point are fully +// reduced mod p_256k1 and that the z coordinate is not zero. +// +// Standard ARM ABI: X0 = p3, X1 = p1 +// ---------------------------------------------------------------------------- +#include "_internal_s2n_bignum.h" + + S2N_BN_SYM_VISIBILITY_DIRECTIVE(secp256k1_jdouble) + S2N_BN_SYM_PRIVACY_DIRECTIVE(secp256k1_jdouble) + + .text + .balign 4 + +// Size of individual field elements + +#define NUMSIZE 32 + +// Stable homes for input arguments during main code sequence + +#define input_z x15 +#define input_x x16 + +// The magic constant 2^256 - p_256k1 + +#define pconst x17 + +// Pointer-offset pairs for inputs and outputs + +#define x_1 input_x, #0 +#define y_1 input_x, #NUMSIZE +#define z_1 input_x, #(2*NUMSIZE) + +#define x_3 input_z, #0 +#define y_3 input_z, #NUMSIZE +#define z_3 input_z, #(2*NUMSIZE) + +// Pointer-offset pairs for temporaries + +#define x_2 sp, #(NUMSIZE*0) +#define y_2 sp, #(NUMSIZE*1) +#define d sp, #(NUMSIZE*2) +#define tmp sp, #(NUMSIZE*3) +#define x_4 sp, #(NUMSIZE*4) +#define y_4 sp, #(NUMSIZE*6) +#define dx2 sp, #(NUMSIZE*8) +#define xy2 sp, #(NUMSIZE*10) + +#define NSPACE #(NUMSIZE*12) + +// Corresponds exactly to bignum_mul_p256k1_alt except for +// re-use of the pconst register for the constant 4294968273 + +#define mul_p256k1(P0,P1,P2) \ + ldp x3, x4, [P1]; \ + ldp x7, x8, [P2]; \ + mul x12, x3, x7; \ + umulh x13, x3, x7; \ + mul x11, x3, x8; \ + umulh x14, x3, x8; \ + adds x13, x13, x11; \ + ldp x9, x10, [P2+16]; \ + mul x11, x3, x9; \ + umulh x0, x3, x9; \ + adcs x14, x14, x11; \ + mul x11, x3, x10; \ + umulh x1, x3, x10; \ + adcs x0, x0, x11; \ + adc x1, x1, xzr; \ + ldp x5, x6, [P1+16]; \ + mul x11, x4, x7; \ + adds x13, x13, x11; \ + mul x11, x4, x8; \ + adcs x14, x14, x11; \ + mul x11, x4, x9; \ + adcs x0, x0, x11; \ + mul x11, x4, x10; \ + adcs x1, x1, x11; \ + umulh x3, x4, x10; \ + adc x3, x3, xzr; \ + umulh x11, x4, x7; \ + adds x14, x14, x11; \ + umulh x11, x4, x8; \ + adcs x0, x0, x11; \ + umulh x11, x4, x9; \ + adcs x1, x1, x11; \ + adc x3, x3, xzr; \ + mul x11, x5, x7; \ + adds x14, x14, x11; \ + mul x11, x5, x8; \ + adcs x0, x0, x11; \ + mul x11, x5, x9; \ + adcs x1, x1, x11; \ + mul x11, x5, x10; \ + adcs x3, x3, x11; \ + umulh x4, x5, x10; \ + adc x4, x4, xzr; \ + umulh x11, x5, x7; \ + adds x0, x0, x11; \ + umulh x11, x5, x8; \ + adcs x1, x1, x11; \ + umulh x11, x5, x9; \ + adcs x3, x3, x11; \ + adc x4, x4, xzr; \ + mul x11, x6, x7; \ + adds x0, x0, x11; \ + mul x11, x6, x8; \ + adcs x1, x1, x11; \ + mul x11, x6, x9; \ + adcs x3, x3, x11; \ + mul x11, x6, x10; \ + adcs x4, x4, x11; \ + umulh x5, x6, x10; \ + adc x5, x5, xzr; \ + umulh x11, x6, x7; \ + adds x1, x1, x11; \ + umulh x11, x6, x8; \ + adcs x3, x3, x11; \ + umulh x11, x6, x9; \ + adcs x4, x4, x11; \ + adc x5, x5, xzr; \ + mul x11, pconst, x1; \ + umulh x9, pconst, x1; \ + adds x12, x12, x11; \ + mul x11, pconst, x3; \ + umulh x3, pconst, x3; \ + adcs x13, x13, x11; \ + mul x11, pconst, x4; \ + umulh x4, pconst, x4; \ + adcs x14, x14, x11; \ + mul x11, pconst, x5; \ + umulh x5, pconst, x5; \ + adcs x0, x0, x11; \ + cset x1, cs; \ + adds x13, x13, x9; \ + adcs x14, x14, x3; \ + adcs x0, x0, x4; \ + adc x1, x1, x5; \ + add x8, x1, #0x1; \ + mul x11, pconst, x8; \ + umulh x9, pconst, x8; \ + adds x12, x12, x11; \ + adcs x13, x13, x9; \ + adcs x14, x14, xzr; \ + adcs x0, x0, xzr; \ + csel x7, pconst, xzr, cc; \ + subs x12, x12, x7; \ + sbcs x13, x13, xzr; \ + sbcs x14, x14, xzr; \ + sbc x0, x0, xzr; \ + stp x12, x13, [P0]; \ + stp x14, x0, [P0+16] + +// Corresponds exactly to bignum_sqr_p256k1_alt except for +// re-use of the pconst register for the constant 4294968273 + +#define sqr_p256k1(P0,P1) \ + ldp x2, x3, [P1]; \ + mul x9, x2, x3; \ + umulh x10, x2, x3; \ + ldp x4, x5, [P1+16]; \ + mul x11, x2, x5; \ + umulh x12, x2, x5; \ + mul x7, x2, x4; \ + umulh x6, x2, x4; \ + adds x10, x10, x7; \ + adcs x11, x11, x6; \ + mul x7, x3, x4; \ + umulh x6, x3, x4; \ + adc x6, x6, xzr; \ + adds x11, x11, x7; \ + mul x13, x4, x5; \ + umulh x14, x4, x5; \ + adcs x12, x12, x6; \ + mul x7, x3, x5; \ + umulh x6, x3, x5; \ + adc x6, x6, xzr; \ + adds x12, x12, x7; \ + adcs x13, x13, x6; \ + adc x14, x14, xzr; \ + adds x9, x9, x9; \ + adcs x10, x10, x10; \ + adcs x11, x11, x11; \ + adcs x12, x12, x12; \ + adcs x13, x13, x13; \ + adcs x14, x14, x14; \ + cset x6, cs; \ + umulh x7, x2, x2; \ + mul x8, x2, x2; \ + adds x9, x9, x7; \ + mul x7, x3, x3; \ + adcs x10, x10, x7; \ + umulh x7, x3, x3; \ + adcs x11, x11, x7; \ + mul x7, x4, x4; \ + adcs x12, x12, x7; \ + umulh x7, x4, x4; \ + adcs x13, x13, x7; \ + mul x7, x5, x5; \ + adcs x14, x14, x7; \ + umulh x7, x5, x5; \ + adc x6, x6, x7; \ + mul x7, pconst, x12; \ + umulh x4, pconst, x12; \ + adds x8, x8, x7; \ + mul x7, pconst, x13; \ + umulh x13, pconst, x13; \ + adcs x9, x9, x7; \ + mul x7, pconst, x14; \ + umulh x14, pconst, x14; \ + adcs x10, x10, x7; \ + mul x7, pconst, x6; \ + umulh x6, pconst, x6; \ + adcs x11, x11, x7; \ + cset x12, cs; \ + adds x9, x9, x4; \ + adcs x10, x10, x13; \ + adcs x11, x11, x14; \ + adc x12, x12, x6; \ + add x2, x12, #0x1; \ + mul x7, pconst, x2; \ + umulh x6, pconst, x2; \ + adds x8, x8, x7; \ + adcs x9, x9, x6; \ + adcs x10, x10, xzr; \ + adcs x11, x11, xzr; \ + csel x3, pconst, xzr, cc; \ + subs x8, x8, x3; \ + sbcs x9, x9, xzr; \ + sbcs x10, x10, xzr; \ + sbc x11, x11, xzr; \ + stp x8, x9, [P0]; \ + stp x10, x11, [P0+16] + +// Rough versions producing 5-word results + +#define roughmul_p256k1(P0,P1,P2) \ + ldp x3, x4, [P1]; \ + ldp x7, x8, [P2]; \ + mul x12, x3, x7; \ + umulh x13, x3, x7; \ + mul x11, x3, x8; \ + umulh x14, x3, x8; \ + adds x13, x13, x11; \ + ldp x9, x10, [P2+16]; \ + mul x11, x3, x9; \ + umulh x0, x3, x9; \ + adcs x14, x14, x11; \ + mul x11, x3, x10; \ + umulh x1, x3, x10; \ + adcs x0, x0, x11; \ + adc x1, x1, xzr; \ + ldp x5, x6, [P1+16]; \ + mul x11, x4, x7; \ + adds x13, x13, x11; \ + mul x11, x4, x8; \ + adcs x14, x14, x11; \ + mul x11, x4, x9; \ + adcs x0, x0, x11; \ + mul x11, x4, x10; \ + adcs x1, x1, x11; \ + umulh x3, x4, x10; \ + adc x3, x3, xzr; \ + umulh x11, x4, x7; \ + adds x14, x14, x11; \ + umulh x11, x4, x8; \ + adcs x0, x0, x11; \ + umulh x11, x4, x9; \ + adcs x1, x1, x11; \ + adc x3, x3, xzr; \ + mul x11, x5, x7; \ + adds x14, x14, x11; \ + mul x11, x5, x8; \ + adcs x0, x0, x11; \ + mul x11, x5, x9; \ + adcs x1, x1, x11; \ + mul x11, x5, x10; \ + adcs x3, x3, x11; \ + umulh x4, x5, x10; \ + adc x4, x4, xzr; \ + umulh x11, x5, x7; \ + adds x0, x0, x11; \ + umulh x11, x5, x8; \ + adcs x1, x1, x11; \ + umulh x11, x5, x9; \ + adcs x3, x3, x11; \ + adc x4, x4, xzr; \ + mul x11, x6, x7; \ + adds x0, x0, x11; \ + mul x11, x6, x8; \ + adcs x1, x1, x11; \ + mul x11, x6, x9; \ + adcs x3, x3, x11; \ + mul x11, x6, x10; \ + adcs x4, x4, x11; \ + umulh x5, x6, x10; \ + adc x5, x5, xzr; \ + umulh x11, x6, x7; \ + adds x1, x1, x11; \ + umulh x11, x6, x8; \ + adcs x3, x3, x11; \ + umulh x11, x6, x9; \ + adcs x4, x4, x11; \ + adc x5, x5, xzr; \ + mul x11, pconst, x1; \ + umulh x9, pconst, x1; \ + adds x12, x12, x11; \ + mul x11, pconst, x3; \ + umulh x3, pconst, x3; \ + adcs x13, x13, x11; \ + mul x11, pconst, x4; \ + umulh x4, pconst, x4; \ + adcs x14, x14, x11; \ + mul x11, pconst, x5; \ + umulh x5, pconst, x5; \ + adcs x0, x0, x11; \ + cset x1, cs; \ + adds x13, x13, x9; \ + adcs x14, x14, x3; \ + adcs x0, x0, x4; \ + adc x1, x1, x5; \ + stp x12, x13, [P0]; \ + stp x14, x0, [P0+16]; \ + str x1, [P0+32] + +#define roughsqr_p256k1(P0,P1) \ + ldp x2, x3, [P1]; \ + mul x9, x2, x3; \ + umulh x10, x2, x3; \ + ldp x4, x5, [P1+16]; \ + mul x11, x2, x5; \ + umulh x12, x2, x5; \ + mul x7, x2, x4; \ + umulh x6, x2, x4; \ + adds x10, x10, x7; \ + adcs x11, x11, x6; \ + mul x7, x3, x4; \ + umulh x6, x3, x4; \ + adc x6, x6, xzr; \ + adds x11, x11, x7; \ + mul x13, x4, x5; \ + umulh x14, x4, x5; \ + adcs x12, x12, x6; \ + mul x7, x3, x5; \ + umulh x6, x3, x5; \ + adc x6, x6, xzr; \ + adds x12, x12, x7; \ + adcs x13, x13, x6; \ + adc x14, x14, xzr; \ + adds x9, x9, x9; \ + adcs x10, x10, x10; \ + adcs x11, x11, x11; \ + adcs x12, x12, x12; \ + adcs x13, x13, x13; \ + adcs x14, x14, x14; \ + cset x6, cs; \ + umulh x7, x2, x2; \ + mul x8, x2, x2; \ + adds x9, x9, x7; \ + mul x7, x3, x3; \ + adcs x10, x10, x7; \ + umulh x7, x3, x3; \ + adcs x11, x11, x7; \ + mul x7, x4, x4; \ + adcs x12, x12, x7; \ + umulh x7, x4, x4; \ + adcs x13, x13, x7; \ + mul x7, x5, x5; \ + adcs x14, x14, x7; \ + umulh x7, x5, x5; \ + adc x6, x6, x7; \ + mul x7, pconst, x12; \ + umulh x4, pconst, x12; \ + adds x8, x8, x7; \ + mul x7, pconst, x13; \ + umulh x13, pconst, x13; \ + adcs x9, x9, x7; \ + mul x7, pconst, x14; \ + umulh x14, pconst, x14; \ + adcs x10, x10, x7; \ + mul x7, pconst, x6; \ + umulh x6, pconst, x6; \ + adcs x11, x11, x7; \ + cset x12, cs; \ + adds x9, x9, x4; \ + adcs x10, x10, x13; \ + adcs x11, x11, x14; \ + adc x12, x12, x6; \ + stp x8, x9, [P0]; \ + stp x10, x11, [P0+16]; \ + str x12, [P0+32] + +// Weak doubling operation, staying in 4 digits but not in general +// fully normalizing modulo p_256k1 + +#define weakdouble_p256k1(P0,P1) \ + ldp x1, x2, [P1]; \ + lsl x0, x1, #1; \ + ldp x3, x4, [P1+16]; \ + ands xzr, x4, #0x8000000000000000; \ + csel x5, pconst, xzr, ne; \ + extr x1, x2, x1, #63; \ + adds x0, x0, x5; \ + extr x2, x3, x2, #63; \ + adcs x1, x1, xzr; \ + extr x3, x4, x3, #63; \ + adcs x2, x2, xzr; \ + stp x0, x1, [P0]; \ + adc x3, x3, xzr; \ + stp x2, x3, [P0+16] + +// P0 = C * P1 - D * P2 with 5-word inputs P1 and P2 +// Only used here with C = 12, D = 9, but could be used more generally. +// We start with (2^40 * 2^256 + C * P1) - (D * P2 + 2^40 * k) +// where p_256k1 = 2^256 - k (so k = 4294968273) + +#define cmsub_p256k1(P0,C,P1,D,P2) \ + mov x10, C; \ + ldp x4, x5, [P1]; \ + mul x0, x4, x10; \ + mul x1, x5, x10; \ + ldp x6, x7, [P1+16]; \ + mul x2, x6, x10; \ + mul x3, x7, x10; \ + ldr x13, [P1+32]; \ + umulh x4, x4, x10; \ + adds x1, x1, x4; \ + umulh x5, x5, x10; \ + adcs x2, x2, x5; \ + umulh x6, x6, x10; \ + adcs x3, x3, x6; \ + umulh x4, x7, x10; \ + mul x13, x13, x10; \ + adc x9, x4, x13; \ + orr x9, x9, #0x10000000000; \ + /* [x9; x3;x2;x1;x0] = 2^40 * 2^256 + C * P1 */ \ + mov x10, D; \ + ldp x13, x14, [P2]; \ + mul x5, x14, x10; \ + umulh x6, x14, x10; \ + adds x5, x5, pconst, lsr #24; \ + adc x6, x6, xzr; \ + mul x4, x13, x10; \ + adds x4, x4, pconst, lsl #40; \ + umulh x13, x13, x10; \ + adcs x5, x5, x13; \ + ldp x13, x14, [P2+16]; \ + mul x12, x13, x10; \ + umulh x7, x13, x10; \ + ldr x13, [P2+32]; \ + adcs x6, x6, x12; \ + mul x12, x14, x10; \ + umulh x8, x14, x10; \ + mul x13, x13, x10; \ + adcs x7, x7, x12; \ + adc x8, x8, x13; \ + /* [x8; x7;x6;x5;x4] = D * P2 + 2^40 * k */ \ + subs x0, x0, x4; \ + sbcs x1, x1, x5; \ + sbcs x2, x2, x6; \ + sbcs x3, x3, x7; \ + sbc x4, x9, x8; \ + /* [x4; x3;x2;x1;x0] = 2^40*p_256k1+result */ \ + add x10, x4, #1; \ + /* (h + 1) is quotient estimate */ \ + mul x4, pconst, x10; \ + umulh x5, pconst, x10; \ + adds x0, x0, x4; \ + adcs x1, x1, x5; \ + adcs x2, x2, xzr; \ + adcs x3, x3, xzr; \ + csel x11, pconst, xzr, cc; \ + /* If un-correction needed */ \ + subs x0, x0, x11; \ + sbcs x1, x1, xzr; \ + stp x0, x1, [P0]; \ + sbcs x2, x2, xzr; \ + sbc x3, x3, xzr; \ + stp x2, x3, [P0+16] + +// P0 = 3 * P1 - 8 * P2 with 5-digit P1 and P2 +// We start with (2^40 * 2^256 + 3 * P1) - (8 * P2 + 2^40 * k) +// where p_256k1 = 2^256 - k (so k = 4294968273) + +#define cmsub38_p256k1(P0,P1,P2) \ + mov x10, #3; \ + ldp x4, x5, [P1]; \ + mul x0, x4, x10; \ + mul x1, x5, x10; \ + ldp x6, x7, [P1+16]; \ + mul x2, x6, x10; \ + mul x3, x7, x10; \ + ldr x13, [P1+32]; \ + umulh x4, x4, x10; \ + adds x1, x1, x4; \ + umulh x5, x5, x10; \ + adcs x2, x2, x5; \ + umulh x6, x6, x10; \ + adcs x3, x3, x6; \ + umulh x4, x7, x10; \ + mul x13, x13, x10; \ + adc x9, x4, x13; \ + orr x9, x9, #0x10000000000; \ + /* [x9; x3;x2;x1;x0] = 2^40 * 2^256 + 3 * P1 */ \ + lsl x12, pconst, #40; \ + ldp x13, x14, [P2]; \ + lsl x4, x13, #3; \ + adds x4, x4, x12; \ + extr x5, x14, x13, #61; \ + lsr x12, pconst, #24; \ + adcs x5, x5, x12; \ + ldp x11, x12, [P2+16]; \ + extr x6, x11, x14, #61; \ + adcs x6, x6, xzr; \ + ldr x13, [P2+32]; \ + extr x7, x12, x11, #61; \ + adcs x7, x7, xzr; \ + extr x8, x13, x12, #61; \ + adc x8, x8, xzr; \ + /* [x8; x7;x6;x5;x4] = 8 * P2 + 2^40 * k */ \ + subs x0, x0, x4; \ + sbcs x1, x1, x5; \ + sbcs x2, x2, x6; \ + sbcs x3, x3, x7; \ + sbc x4, x9, x8; \ + /* [x4; x3;x2;x1;x0] = 2^40*p_256k1+result */ \ + add x10, x4, #1; \ + /* (h + 1) is quotient estimate */ \ + mul x4, pconst, x10; \ + umulh x5, pconst, x10; \ + adds x0, x0, x4; \ + adcs x1, x1, x5; \ + adcs x2, x2, xzr; \ + adcs x3, x3, xzr; \ + csel x11, pconst, xzr, cc; \ + /* If un-correction needed */ \ + subs x0, x0, x11; \ + sbcs x1, x1, xzr; \ + stp x0, x1, [P0]; \ + sbcs x2, x2, xzr; \ + sbc x3, x3, xzr; \ + stp x2, x3, [P0+16] + +// P0 = 4 * P1 - P2 with 5-digit P1, 4-digit P2 and result. +// This is done by direct subtraction of P2 since the method +// in bignum_cmul_p256k1 etc. for quotient estimation still +// works when the value to be reduced is negative, as +// long as it is > -p_256k1, which is the case here. + +#define cmsub41_p256k1(P0,P1,P2) \ + ldp x1, x2, [P1]; \ + lsl x0, x1, #2; \ + ldp x6, x7, [P2]; \ + subs x0, x0, x6; \ + extr x1, x2, x1, #62; \ + sbcs x1, x1, x7; \ + ldp x3, x4, [P1+16]; \ + extr x2, x3, x2, #62; \ + ldp x6, x7, [P2+16]; \ + sbcs x2, x2, x6; \ + extr x3, x4, x3, #62; \ + sbcs x3, x3, x7; \ + ldr x5, [P1+32]; \ + extr x4, x5, x4, #62; \ + sbc x4, x4, xzr; \ + add x5, x4, #1; \ + /* (h + 1) is quotient estimate */ \ + mul x4, pconst, x5; \ + adds x0, x0, x4; \ + umulh x5, pconst, x5; \ + adcs x1, x1, x5; \ + adcs x2, x2, xzr; \ + adcs x3, x3, xzr; \ + csel x4, pconst, xzr, cc; \ + /* If un-correction needed */ \ + subs x0, x0, x4; \ + sbcs x1, x1, xzr; \ + stp x0, x1, [P0]; \ + sbcs x2, x2, xzr; \ + sbc x3, x3, xzr; \ + stp x2, x3, [P0+16] + +S2N_BN_SYMBOL(secp256k1_jdouble): + +// Make room on stack for temp registers + + sub sp, sp, NSPACE + +// Move the input arguments to stable place + + mov input_z, x0 + mov input_x, x1 + +// Set up pconst = 4294968273, so p_256k1 = 2^256 - pconst + + mov pconst, #977 + orr pconst, pconst, #0x100000000 + +// Main sequence of operations + + // y_2 = y^2 + + sqr_p256k1(y_2,y_1) + + // x_2 = x^2 + + sqr_p256k1(x_2,x_1) + + // tmp = 2 * y_1 (in 4 words but not fully normalized) + + weakdouble_p256k1(tmp,y_1) + + // xy2 = x * y^2 (5-digit partially reduced) + // x_4 = x^4 (5-digit partially reduced) + + roughmul_p256k1(xy2,x_1,y_2) + roughsqr_p256k1(x_4,x_2) + + // z_3 = 2 * y_1 * z_1 + + mul_p256k1(z_3,z_1,tmp) + + // d = 12 * xy2 - 9 * x_4 + + cmsub_p256k1(d,12,xy2,9,x_4) + + // y4 = y2^2 (5-digit partially reduced) + + roughsqr_p256k1(y_4,y_2) + + // dx2 = d * x_2 (5-digit partially reduced) + + roughmul_p256k1(dx2,x_2,d) + + // x_3 = 4 * xy2 - d + + cmsub41_p256k1(x_3,xy2,d) + + // y_3 = 3 * dx2 - 8 * y_4 + + cmsub38_p256k1(y_3,dx2,y_4) + +// Restore stack and return + + add sp, sp, NSPACE + ret + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack, "", %progbits +#endif diff --git a/arm/secp256k1/secp256k1_jmixadd.S b/arm/secp256k1/secp256k1_jmixadd.S new file mode 100644 index 0000000000..4a4c7b7f33 --- /dev/null +++ b/arm/secp256k1/secp256k1_jmixadd.S @@ -0,0 +1,343 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +// ---------------------------------------------------------------------------- +// Point mixed addition on SECG curve secp256k1 in Jacobian coordinates +// +// extern void secp256k1_jmixadd +// (uint64_t p3[static 12],uint64_t p1[static 12],uint64_t p2[static 8]); +// +// Does p3 := p1 + p2 where all points are regarded as Jacobian triples. +// A Jacobian triple (x,y,z) represents affine point (x/z^2,y/z^3). +// The "mixed" part means that p2 only has x and y coordinates, with the +// implicit z coordinate assumed to be the identity. It is assumed that +// all the coordinates of the input points p1 and p2 are fully reduced +// mod p_256k1, that the z coordinate of p1 is nonzero and that neither +// p1 =~= p2 or p1 =~= -p2, where "=~=" means "represents the same affine +// point as". +// +// Standard ARM ABI: X0 = p3, X1 = p1, X2 = p2 +// ---------------------------------------------------------------------------- +#include "_internal_s2n_bignum.h" + + S2N_BN_SYM_VISIBILITY_DIRECTIVE(secp256k1_jmixadd) + S2N_BN_SYM_PRIVACY_DIRECTIVE(secp256k1_jmixadd) + + .text + .balign 4 + +// Size of individual field elements + +#define NUMSIZE 32 + +// Stable homes for input arguments during main code sequence + +#define input_z x15 +#define input_x x16 +#define input_y x17 + +// Pointer-offset pairs for inputs and outputs + +#define x_1 input_x, #0 +#define y_1 input_x, #NUMSIZE +#define z_1 input_x, #(2*NUMSIZE) + +#define x_2 input_y, #0 +#define y_2 input_y, #NUMSIZE + +#define x_3 input_z, #0 +#define y_3 input_z, #NUMSIZE +#define z_3 input_z, #(2*NUMSIZE) + +// Pointer-offset pairs for temporaries, with some aliasing +// NSPACE is the total stack needed for these temporaries + +#define zp2 sp, #(NUMSIZE*0) +#define ww sp, #(NUMSIZE*0) + +#define yd sp, #(NUMSIZE*1) +#define y2a sp, #(NUMSIZE*1) + +#define x2a sp, #(NUMSIZE*2) +#define zzx2 sp, #(NUMSIZE*2) + +#define zz sp, #(NUMSIZE*3) +#define t1 sp, #(NUMSIZE*3) + +#define t2 sp, #(NUMSIZE*4) +#define zzx1 sp, #(NUMSIZE*4) + +#define xd sp, #(NUMSIZE*5) + +#define NSPACE (NUMSIZE*6) + +// Corresponds exactly to bignum_mul_p256k1_alt + +#define mul_p256k1(P0,P1,P2) \ + ldp x3, x4, [P1]; \ + ldp x7, x8, [P2]; \ + mul x12, x3, x7; \ + umulh x13, x3, x7; \ + mul x11, x3, x8; \ + umulh x14, x3, x8; \ + adds x13, x13, x11; \ + ldp x9, x10, [P2+16]; \ + mul x11, x3, x9; \ + umulh x0, x3, x9; \ + adcs x14, x14, x11; \ + mul x11, x3, x10; \ + umulh x1, x3, x10; \ + adcs x0, x0, x11; \ + adc x1, x1, xzr; \ + ldp x5, x6, [P1+16]; \ + mul x11, x4, x7; \ + adds x13, x13, x11; \ + mul x11, x4, x8; \ + adcs x14, x14, x11; \ + mul x11, x4, x9; \ + adcs x0, x0, x11; \ + mul x11, x4, x10; \ + adcs x1, x1, x11; \ + umulh x3, x4, x10; \ + adc x3, x3, xzr; \ + umulh x11, x4, x7; \ + adds x14, x14, x11; \ + umulh x11, x4, x8; \ + adcs x0, x0, x11; \ + umulh x11, x4, x9; \ + adcs x1, x1, x11; \ + adc x3, x3, xzr; \ + mul x11, x5, x7; \ + adds x14, x14, x11; \ + mul x11, x5, x8; \ + adcs x0, x0, x11; \ + mul x11, x5, x9; \ + adcs x1, x1, x11; \ + mul x11, x5, x10; \ + adcs x3, x3, x11; \ + umulh x4, x5, x10; \ + adc x4, x4, xzr; \ + umulh x11, x5, x7; \ + adds x0, x0, x11; \ + umulh x11, x5, x8; \ + adcs x1, x1, x11; \ + umulh x11, x5, x9; \ + adcs x3, x3, x11; \ + adc x4, x4, xzr; \ + mul x11, x6, x7; \ + adds x0, x0, x11; \ + mul x11, x6, x8; \ + adcs x1, x1, x11; \ + mul x11, x6, x9; \ + adcs x3, x3, x11; \ + mul x11, x6, x10; \ + adcs x4, x4, x11; \ + umulh x5, x6, x10; \ + adc x5, x5, xzr; \ + umulh x11, x6, x7; \ + adds x1, x1, x11; \ + umulh x11, x6, x8; \ + adcs x3, x3, x11; \ + umulh x11, x6, x9; \ + adcs x4, x4, x11; \ + adc x5, x5, xzr; \ + mov x7, #0x3d1; \ + orr x7, x7, #0x100000000; \ + mul x11, x7, x1; \ + umulh x9, x7, x1; \ + adds x12, x12, x11; \ + mul x11, x7, x3; \ + umulh x3, x7, x3; \ + adcs x13, x13, x11; \ + mul x11, x7, x4; \ + umulh x4, x7, x4; \ + adcs x14, x14, x11; \ + mul x11, x7, x5; \ + umulh x5, x7, x5; \ + adcs x0, x0, x11; \ + cset x1, cs; \ + adds x13, x13, x9; \ + adcs x14, x14, x3; \ + adcs x0, x0, x4; \ + adc x1, x1, x5; \ + add x8, x1, #0x1; \ + mul x11, x7, x8; \ + umulh x9, x7, x8; \ + adds x12, x12, x11; \ + adcs x13, x13, x9; \ + adcs x14, x14, xzr; \ + adcs x0, x0, xzr; \ + csel x7, x7, xzr, cc; \ + subs x12, x12, x7; \ + sbcs x13, x13, xzr; \ + sbcs x14, x14, xzr; \ + sbc x0, x0, xzr; \ + stp x12, x13, [P0]; \ + stp x14, x0, [P0+16] + +// Corresponds exactly to bignum_sqr_p256k1_alt + +#define sqr_p256k1(P0,P1) \ + ldp x2, x3, [P1]; \ + mul x9, x2, x3; \ + umulh x10, x2, x3; \ + ldp x4, x5, [P1+16]; \ + mul x11, x2, x5; \ + umulh x12, x2, x5; \ + mul x7, x2, x4; \ + umulh x6, x2, x4; \ + adds x10, x10, x7; \ + adcs x11, x11, x6; \ + mul x7, x3, x4; \ + umulh x6, x3, x4; \ + adc x6, x6, xzr; \ + adds x11, x11, x7; \ + mul x13, x4, x5; \ + umulh x14, x4, x5; \ + adcs x12, x12, x6; \ + mul x7, x3, x5; \ + umulh x6, x3, x5; \ + adc x6, x6, xzr; \ + adds x12, x12, x7; \ + adcs x13, x13, x6; \ + adc x14, x14, xzr; \ + adds x9, x9, x9; \ + adcs x10, x10, x10; \ + adcs x11, x11, x11; \ + adcs x12, x12, x12; \ + adcs x13, x13, x13; \ + adcs x14, x14, x14; \ + cset x6, cs; \ + umulh x7, x2, x2; \ + mul x8, x2, x2; \ + adds x9, x9, x7; \ + mul x7, x3, x3; \ + adcs x10, x10, x7; \ + umulh x7, x3, x3; \ + adcs x11, x11, x7; \ + mul x7, x4, x4; \ + adcs x12, x12, x7; \ + umulh x7, x4, x4; \ + adcs x13, x13, x7; \ + mul x7, x5, x5; \ + adcs x14, x14, x7; \ + umulh x7, x5, x5; \ + adc x6, x6, x7; \ + mov x3, #0x3d1; \ + orr x3, x3, #0x100000000; \ + mul x7, x3, x12; \ + umulh x4, x3, x12; \ + adds x8, x8, x7; \ + mul x7, x3, x13; \ + umulh x13, x3, x13; \ + adcs x9, x9, x7; \ + mul x7, x3, x14; \ + umulh x14, x3, x14; \ + adcs x10, x10, x7; \ + mul x7, x3, x6; \ + umulh x6, x3, x6; \ + adcs x11, x11, x7; \ + cset x12, cs; \ + adds x9, x9, x4; \ + adcs x10, x10, x13; \ + adcs x11, x11, x14; \ + adc x12, x12, x6; \ + add x2, x12, #0x1; \ + mul x7, x3, x2; \ + umulh x6, x3, x2; \ + adds x8, x8, x7; \ + adcs x9, x9, x6; \ + adcs x10, x10, xzr; \ + adcs x11, x11, xzr; \ + csel x3, x3, xzr, cc; \ + subs x8, x8, x3; \ + sbcs x9, x9, xzr; \ + sbcs x10, x10, xzr; \ + sbc x11, x11, xzr; \ + stp x8, x9, [P0]; \ + stp x10, x11, [P0+16] + +// Corresponds exactly to bignum_sub_p256k1 + +#define sub_p256k1(P0,P1,P2) \ + ldp x5, x6, [P1]; \ + ldp x4, x3, [P2]; \ + subs x5, x5, x4; \ + sbcs x6, x6, x3; \ + ldp x7, x8, [P1+16]; \ + ldp x4, x3, [P2+16]; \ + sbcs x7, x7, x4; \ + sbcs x8, x8, x3; \ + mov x4, #0x3d1; \ + orr x3, x4, #0x100000000; \ + csel x3, x3, xzr, cc; \ + subs x5, x5, x3; \ + sbcs x6, x6, xzr; \ + sbcs x7, x7, xzr; \ + sbc x8, x8, xzr; \ + stp x5, x6, [P0]; \ + stp x7, x8, [P0+16] + +S2N_BN_SYMBOL(secp256k1_jmixadd): + +// Make room on stack for temporary variables +// Move the input arguments to stable places + + sub sp, sp, NSPACE + + mov input_z, x0 + mov input_x, x1 + mov input_y, x2 + +// Main code, just a sequence of basic field operations + + sqr_p256k1(zp2,z_1) + mul_p256k1(y2a,z_1,y_2) + + mul_p256k1(x2a,zp2,x_2) + mul_p256k1(y2a,zp2,y2a) + + sub_p256k1(xd,x2a,x_1) + sub_p256k1(yd,y2a,y_1) + + sqr_p256k1(zz,xd) + sqr_p256k1(ww,yd) + + mul_p256k1(zzx1,zz,x_1) + mul_p256k1(zzx2,zz,x2a) + + sub_p256k1(x_3,ww,zzx1) + sub_p256k1(t1,zzx2,zzx1) + + mul_p256k1(z_3,xd,z_1) + + sub_p256k1(x_3,x_3,zzx2) + + sub_p256k1(t2,zzx1,x_3) + + mul_p256k1(t1,t1,y_1) + mul_p256k1(t2,yd,t2) + + sub_p256k1(y_3,t2,t1) + +// Restore stack and return + + add sp, sp, NSPACE + + ret + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack, "", %progbits +#endif diff --git a/benchmarks/benchmark.c b/benchmarks/benchmark.c index 6c8fc0dc0a..af16776e14 100644 --- a/benchmarks/benchmark.c +++ b/benchmarks/benchmark.c @@ -645,6 +645,10 @@ void call_bignum_mux16__32() void call_curve25519_ladderstep(void) repeat(curve25519_ladderstep(b0,b1,b2,*b3)) void call_curve25519_ladderstep_alt(void) repeat(curve25519_ladderstep_alt(b0,b1,b2,*b3)) +void call_secp256k1_jadd(void) repeat(secp256k1_jadd(b1,b2,b3)) +void call_secp256k1_jdouble(void) repeat(secp256k1_jdouble(b1,b2)) +void call_secp256k1_jmixadd(void) repeat(secp256k1_jmixadd(b1,b2,b3)) + int main(void) { int bmi = full_isa_support(); @@ -916,6 +920,9 @@ int main(void) timingtest(all,"bignum_triple_p521_alt",call_bignum_triple_p521_alt); timingtest(bmi,"curve25519_ladderstep",call_curve25519_ladderstep); timingtest(all,"curve25519_ladderstep_alt",call_curve25519_ladderstep_alt); + timingtest(bmi,"secp256k1_jadd",call_secp256k1_jadd); + timingtest(bmi,"secp256k1_jdouble",call_secp256k1_jdouble); + timingtest(bmi,"secp256k1_jmixadd",call_secp256k1_jmixadd); timingtest(all,"word_bytereverse",call_word_bytereverse); timingtest(all,"word_clz",call_word_clz); timingtest(all,"word_ctz",call_word_ctz); diff --git a/include/s2n-bignum-c89.h b/include/s2n-bignum-c89.h index af2869780e..5887fce0cc 100644 --- a/include/s2n-bignum-c89.h +++ b/include/s2n-bignum-c89.h @@ -734,6 +734,18 @@ extern void bignum_triple_p521_alt (uint64_t z[9], uint64_t x[9]); extern void curve25519_ladderstep(uint64_t rr[16],uint64_t point[8],uint64_t pp[16],uint64_t b); extern void curve25519_ladderstep_alt(uint64_t rr[16],uint64_t point[8],uint64_t pp[16],uint64_t b); +/* Point addition on SECG curve secp256k1 in Jacobian coordinates */ +/* Inputs p1[12], p2[12]; output p3[12] */ +extern void secp256k1_jadd(uint64_t p3[12],uint64_t p1[12],uint64_t p2[12]); + +/* Point doubling on SECG curve secp256k1 in Jacobian coordinates */ +/* Input p1[12]; output p3[12] */ +extern void secp256k1_jdouble(uint64_t p3[12],uint64_t p1[12]); + +/* Point mixed addition on SECG curve secp256k1 in Jacobian coordinates */ +/* Inputs p1[12], p2[8]; output p3[12] */ +extern void secp256k1_jmixadd(uint64_t p3[12],uint64_t p1[12],uint64_t p2[8]); + /* Reverse the bytes in a single word */ /* Input a; output function return */ extern uint64_t word_bytereverse (uint64_t a); diff --git a/include/s2n-bignum.h b/include/s2n-bignum.h index 31bd2dc155..b9345acd4d 100644 --- a/include/s2n-bignum.h +++ b/include/s2n-bignum.h @@ -733,6 +733,18 @@ extern void bignum_triple_p521_alt (uint64_t z[static 9], uint64_t x[static 9]); extern void curve25519_ladderstep(uint64_t rr[16],uint64_t point[8],uint64_t pp[16],uint64_t b); extern void curve25519_ladderstep_alt(uint64_t rr[16],uint64_t point[8],uint64_t pp[16],uint64_t b); +// Point addition on SECG curve secp256k1 in Jacobian coordinates +// Inputs p1[12], p2[12]; output p3[12] +extern void secp256k1_jadd(uint64_t p3[static 12],uint64_t p1[static 12],uint64_t p2[static 12]); + +// Point doubling on SECG curve secp256k1 in Jacobian coordinates +// Input p1[12]; output p3[12] +extern void secp256k1_jdouble(uint64_t p3[static 12],uint64_t p1[static 12]); + +// Point mixed addition on SECG curve secp256k1 in Jacobian coordinates +// Inputs p1[12], p2[8]; output p3[12] +extern void secp256k1_jmixadd(uint64_t p3[static 12],uint64_t p1[static 12],uint64_t p2[static 8]); + // Reverse the bytes in a single word // Input a; output function return extern uint64_t word_bytereverse (uint64_t a); diff --git a/tests/test.c b/tests/test.c index 887270076e..f1e56a8df8 100644 --- a/tests/test.c +++ b/tests/test.c @@ -271,6 +271,9 @@ enum { TEST_BIGNUM_TRIPLE_P521_ALT, TEST_CURVE25519_LADDERSTEP, TEST_CURVE25519_LADDERSTEP_ALT, + TEST_SECP256K1_JADD, + TEST_SECP256K1_JDOUBLE, + TEST_SECP256K1_JMIXADD, TEST_WORD_BYTEREVERSE, TEST_WORD_CLZ, TEST_WORD_CTZ, @@ -997,6 +1000,197 @@ void reference_curve25519ladderstep } } +void reference_montjdouble + (uint64_t k,uint64_t *p3,uint64_t *p1,uint64_t *a,uint64_t *m) +{ uint64_t *xx = alloca(8 * k); + uint64_t *yy = alloca(8 * k); + uint64_t *yyyy = alloca(8 * k); + uint64_t *zz = alloca(8 * k); + uint64_t *s = alloca(8 * k); + uint64_t *mm = alloca(8 * k); + uint64_t *t0 = alloca(8 * k); + uint64_t *t1 = alloca(8 * k); + uint64_t *t2 = alloca(8 * k); + uint64_t *t3 = alloca(8 * k); + uint64_t *t4 = alloca(8 * k); + uint64_t *t5 = alloca(8 * k); + uint64_t *t6 = alloca(8 * k); + uint64_t *t7 = alloca(8 * k); + uint64_t *t8 = alloca(8 * k); + uint64_t *t9 = alloca(8 * k); + uint64_t *t10 = alloca(8 * k); + uint64_t *t11 = alloca(8 * k); + uint64_t *t12 = alloca(8 * k); + uint64_t *t13 = alloca(8 * k); + uint64_t *t14 = alloca(8 * k); + uint64_t *x1 = p1, *y1 = p1 + k, *z1 = p1 + 2*k; + uint64_t *x3 = p3, *y3 = p3 + k, *z3 = p3 + 2*k; + bignum_montsqr(k,xx,x1,m); + bignum_montsqr(k,yy,y1,m); + bignum_montsqr(k,yyyy,yy,m); + bignum_montsqr(k,zz,z1,m); + bignum_modadd(k,t0,x1,yy,m); + bignum_montsqr(k,t1,t0,m); + bignum_modsub(k,t2,t1,xx,m); + bignum_modsub(k,t3,t2,yyyy,m); + bignum_moddouble(k,s,t3,m); + bignum_montsqr(k,t4,zz,m); + bignum_montmul(k,t5,a,t4,m); + bignum_moddouble(k,t6,xx,m); + bignum_modadd(k,t6,t6,xx,m); + bignum_modadd(k,mm,t6,t5,m); + bignum_montsqr(k,t7,mm,m); + bignum_moddouble(k,t8,s,m); + bignum_modsub(k,x3,t7,t8,m); + bignum_modsub(k,t9,s,x3,m); + bignum_moddouble(k,t10,yyyy,m); + bignum_moddouble(k,t10,t10,m); bignum_moddouble(k,t10,t10,m); + bignum_montmul(k,t11,mm,t9,m); + bignum_modsub(k,y3,t11,t10,m); + bignum_modadd(k,t12,y1,z1,m); + bignum_montsqr(k,t13,t12,m); + bignum_modsub(k,t14,t13,yy,m); + bignum_modsub(k,z3,t14,zz,m); +} + +void reference_jdouble + (uint64_t k,uint64_t *p3,uint64_t *p1,uint64_t *a,uint64_t *m) +{ uint64_t *i = alloca(8 * k); + uint64_t *t = alloca(8 * k); + bignum_montifier(k,i,m,t); + bignum_montmul(k,t,i,p1,m); bignum_copy(k,p1,k,t); + bignum_montmul(k,t,i,p1+k,m); bignum_copy(k,p1+k,k,t); + bignum_montmul(k,t,i,p1+2*k,m); bignum_copy(k,p1+2*k,k,t); + bignum_montmul(k,t,i,a,m); bignum_copy(k,a,k,t); + reference_montjdouble(k,p3,p1,a,m); + bignum_montredc(k,t,k,p3,m,k); bignum_copy(k,p3,k,t); + bignum_montredc(k,t,k,p3+k,m,k); bignum_copy(k,p3+k,k,t); + bignum_montredc(k,t,k,p3+2*k,m,k); bignum_copy(k,p3+2*k,k,t); +} + +void reference_montjmixadd + (uint64_t k,uint64_t *p3,uint64_t *p1,uint64_t *p2,uint64_t *m) +{ uint64_t *z12 = alloca(8 * k); + uint64_t *y2z1 = alloca(8 * k); + uint64_t *s = alloca(8 * k); + uint64_t *u = alloca(8 * k); + uint64_t *v = alloca(8 * k); + uint64_t *w = alloca(8 * k); + uint64_t *v2 = alloca(8 * k); + uint64_t *w2 = alloca(8 * k); + uint64_t *v3 = alloca(8 * k); + uint64_t *rv2 = alloca(8 * k); + uint64_t *t0 = alloca(8 * k); + uint64_t *t1 = alloca(8 * k); + uint64_t *t2 = alloca(8 * k); + uint64_t *t3 = alloca(8 * k); + uint64_t *t4 = alloca(8 * k); + uint64_t *x1 = p1, *y1 = p1 + k, *z1 = p1 + 2*k; + uint64_t *x2 = p2, *y2 = p2 + k; + uint64_t *x3 = p3, *y3 = p3 + k, *z3 = p3 + 2*k; + bignum_montsqr(k,z12,z1,m); + bignum_montmul(k,y2z1,y2,z1,m); + bignum_montmul(k,s,x2,z12,m); + bignum_montmul(k,u,y2z1,z12,m); + bignum_modsub(k,v,s,x1,m); + bignum_modsub(k,w,u,y1,m); + bignum_montsqr(k,v2,v,m); + bignum_montsqr(k,w2,w,m); + bignum_montmul(k,v3,v,v2,m); + bignum_montmul(k,rv2,x1,v2,m); + bignum_modsub(k,t0,w2,v3,m); + bignum_modsub(k,t1,t0,rv2,m); + bignum_modsub(k,x3,t1,rv2,m); + bignum_modsub(k,t2,rv2,x3,m); + bignum_montmul(k,t3,v3,y1,m); + bignum_montmul(k,t4,w,t2,m); + bignum_modsub(k,y3,t4,t3,m); + bignum_montmul(k,z3,z1,v,m); +} + +void reference_jmixadd + (uint64_t k,uint64_t *p3,uint64_t *p1,uint64_t *p2,uint64_t *m) +{ uint64_t *i = alloca(8 * k); + uint64_t *t = alloca(8 * k); + bignum_montifier(k,i,m,t); + bignum_montmul(k,t,i,p1,m); bignum_copy(k,p1,k,t); + bignum_montmul(k,t,i,p1+k,m); bignum_copy(k,p1+k,k,t); + bignum_montmul(k,t,i,p1+2*k,m); bignum_copy(k,p1+2*k,k,t); + bignum_montmul(k,t,i,p2,m); bignum_copy(k,p2,k,t); + bignum_montmul(k,t,i,p2+k,m); bignum_copy(k,p2+k,k,t); + reference_montjmixadd(k,p3,p1,p2,m); + bignum_montredc(k,t,k,p3,m,k); bignum_copy(k,p3,k,t); + bignum_montredc(k,t,k,p3+k,m,k); bignum_copy(k,p3+k,k,t); + bignum_montredc(k,t,k,p3+2*k,m,k); bignum_copy(k,p3+2*k,k,t); +} + +void reference_montjadd + (uint64_t k,uint64_t *p3,uint64_t *p1,uint64_t *p2,uint64_t *m) +{ uint64_t *z22 = alloca(8 * k); + uint64_t *z12 = alloca(8 * k); + uint64_t *y1z2 = alloca(8 * k); + uint64_t *y2z1 = alloca(8 * k); + uint64_t *r = alloca(8 * k); + uint64_t *s = alloca(8 * k); + uint64_t *t = alloca(8 * k); + uint64_t *u = alloca(8 * k); + uint64_t *v = alloca(8 * k); + uint64_t *w = alloca(8 * k); + uint64_t *v2 = alloca(8 * k); + uint64_t *w2 = alloca(8 * k); + uint64_t *v3 = alloca(8 * k); + uint64_t *rv2 = alloca(8 * k); + uint64_t *t0 = alloca(8 * k); + uint64_t *t1 = alloca(8 * k); + uint64_t *t2 = alloca(8 * k); + uint64_t *t3 = alloca(8 * k); + uint64_t *t4 = alloca(8 * k); + uint64_t *t5 = alloca(8 * k); + uint64_t *x1 = p1, *y1 = p1 + k, *z1 = p1 + 2*k; + uint64_t *x2 = p2, *y2 = p2 + k, *z2 = p2 + 2*k; + uint64_t *x3 = p3, *y3 = p3 + k, *z3 = p3 + 2*k; + bignum_montsqr(k,z22,z2,m); + bignum_montsqr(k,z12,z1,m); + bignum_montmul(k,y1z2,y1,z2,m); + bignum_montmul(k,y2z1,y2,z1,m); + bignum_montmul(k,r,x1,z22,m); + bignum_montmul(k,s,x2,z12,m); + bignum_montmul(k,t,y1z2,z22,m); + bignum_montmul(k,u,y2z1,z12,m); + bignum_modsub(k,v,s,r,m); + bignum_modsub(k,w,u,t,m); + bignum_montsqr(k,v2,v,m); + bignum_montsqr(k,w2,w,m); + bignum_montmul(k,v3,v,v2,m); + bignum_montmul(k,rv2,r,v2,m); + bignum_modsub(k,t0,w2,v3,m); + bignum_modsub(k,t1,t0,rv2,m); + bignum_modsub(k,x3,t1,rv2,m); + bignum_modsub(k,t2,rv2,x3,m); + bignum_montmul(k,t3,v3,t,m); + bignum_montmul(k,t4,w,t2,m); + bignum_modsub(k,y3,t4,t3,m); + bignum_montmul(k,t5,z1,z2,m); + bignum_montmul(k,z3,t5,v,m); +} + +void reference_jadd + (uint64_t k,uint64_t *p3,uint64_t *p1,uint64_t *p2,uint64_t *m) +{ uint64_t *i = alloca(8 * k); + uint64_t *t = alloca(8 * k); + bignum_montifier(k,i,m,t); + bignum_montmul(k,t,i,p1,m); bignum_copy(k,p1,k,t); + bignum_montmul(k,t,i,p1+k,m); bignum_copy(k,p1+k,k,t); + bignum_montmul(k,t,i,p1+2*k,m); bignum_copy(k,p1+2*k,k,t); + bignum_montmul(k,t,i,p2,m); bignum_copy(k,p2,k,t); + bignum_montmul(k,t,i,p2+k,m); bignum_copy(k,p2+k,k,t); + bignum_montmul(k,t,i,p2+2*k,m); bignum_copy(k,p2+2*k,k,t); + reference_montjadd(k,p3,p1,p2,m); + bignum_montredc(k,t,k,p3,m,k); bignum_copy(k,p3,k,t); + bignum_montredc(k,t,k,p3+k,m,k); bignum_copy(k,p3+k,k,t); + bignum_montredc(k,t,k,p3+2*k,m,k); bignum_copy(k,p3+2*k,k,t); +} + // **************************************************************************** // Testing functions // **************************************************************************** @@ -7376,6 +7570,110 @@ int test_curve25519_ladderstep_alt(void) return 0; } +int test_secp256k1_jadd(void) +{ uint64_t t, k; + printf("Testing secp256k1_jadd with %d cases\n",tests); + k = 4; + + int c; + for (t = 0; t < tests; ++t) + { random_bignum(k,b0); reference_mod(k,b1,b0,p_256k1); + random_bignum(k,b0); reference_mod(k,b1+k,b0,p_256k1); + random_bignum(k,b0); reference_mod(k,b1+2*k,b0,p_256k1); + random_bignum(k,b0); reference_mod(k,b2,b0,p_256k1); + random_bignum(k,b0); reference_mod(k,b2+k,b0,p_256k1); + random_bignum(k,b0); reference_mod(k,b2+2*k,b0,p_256k1); + + secp256k1_jadd(b3,b1,b2); + reference_jadd(k,b4,b1,b2,p_256k1); + + c = reference_compare(3*k,b3,3*k,b4); + if (c != 0) + { printf("### Disparity: [size %4"PRIu64"] " + "<...0x%016"PRIx64"> + <...0x%016"PRIx64"> = " + "<...0x%016"PRIx64"> not <...0x%016"PRIx64">\n", + k,b1[0],b2[0],b3[0],b4[0]); + return 1; + } + else if (VERBOSE) + { printf("OK: [size %4"PRIu64"] " + "<...0x%016"PRIx64"> + <...0x%016"PRIx64"> = " + "<...0x%016"PRIx64">\n", + k,b1[0],b2[0],b3[0]); + } + } + printf("All OK\n"); + return 0; +} + +int test_secp256k1_jdouble(void) +{ uint64_t t, k; + printf("Testing secp256k1_jdouble with %d cases\n",tests); + k = 4; + + int c; + for (t = 0; t < tests; ++t) + { random_bignum(k,b0); reference_mod(k,b1,b0,p_256k1); + random_bignum(k,b0); reference_mod(k,b1+k,b0,p_256k1); + random_bignum(k,b0); reference_mod(k,b1+2*k,b0,p_256k1); + bignum_of_word(k,b2,0); + + secp256k1_jdouble(b3,b1); + reference_jdouble(k,b4,b1,b2,p_256k1); + + c = reference_compare(3*k,b3,3*k,b4); + if (c != 0) + { printf("### Disparity: [size %4"PRIu64"] " + "2 * <...0x%016"PRIx64"> = " + "<...0x%016"PRIx64"> not <...0x%016"PRIx64">\n", + k,b1[0],b3[0],b4[0]); + return 1; + } + else if (VERBOSE) + { printf("OK: [size %4"PRIu64"] " + "2 * <...0x%016"PRIx64"> = " + "<...0x%016"PRIx64">\n", + k,b1[0],b3[0]); + } + } + printf("All OK\n"); + return 0; +} + +int test_secp256k1_jmixadd(void) +{ uint64_t t, k; + printf("Testing secp256k1_jmixadd with %d cases\n",tests); + k = 4; + + int c; + for (t = 0; t < tests; ++t) + { random_bignum(k,b0); reference_mod(k,b1,b0,p_256k1); + random_bignum(k,b0); reference_mod(k,b1+k,b0,p_256k1); + random_bignum(k,b0); reference_mod(k,b1+2*k,b0,p_256k1); + random_bignum(k,b0); reference_mod(k,b2,b0,p_256k1); + random_bignum(k,b0); reference_mod(k,b2+k,b0,p_256k1); + secp256k1_jmixadd(b3,b1,b2); + reference_jmixadd(k,b4,b1,b2,p_256k1); + + c = reference_compare(3*k,b3,3*k,b4); + if (c != 0) + { printf("### Disparity: [size %4"PRIu64"] " + "<...0x%016"PRIx64"> + <...0x%016"PRIx64"> = " + "<...0x%016"PRIx64"> not <...0x%016"PRIx64">\n", + k,b1[0],b2[0],b3[0],b4[0]); + return 1; + } + else if (VERBOSE) + { printf("OK: [size %4"PRIu64"] " + "<...0x%016"PRIx64"> + <...0x%016"PRIx64"> = " + "<...0x%016"PRIx64">\n", + k,b1[0],b2[0],b3[0]); + } + } + printf("All OK\n"); + return 0; +} + int test_word_bytereverse(void) { uint64_t i, a, x, y; printf("Testing word_bytereverse with %d cases\n",tests); @@ -7761,6 +8059,9 @@ int test_all(void) dotest(test_bignum_triple_p521_alt); dotest(test_curve25519_ladderstep); dotest(test_curve25519_ladderstep_alt); + dotest(test_secp256k1_jadd); + dotest(test_secp256k1_jdouble); + dotest(test_secp256k1_jmixadd); dotest(test_word_bytereverse); dotest(test_word_clz); dotest(test_word_ctz); @@ -8242,6 +8543,9 @@ int main(int argc, char *argv[]) case TEST_BIGNUM_TRIPLE_P521_ALT: return test_bignum_triple_p521_alt(); case TEST_CURVE25519_LADDERSTEP: return test_curve25519_ladderstep(); case TEST_CURVE25519_LADDERSTEP_ALT: return test_curve25519_ladderstep_alt(); + case TEST_SECP256K1_JADD: return test_secp256k1_jadd(); + case TEST_SECP256K1_JDOUBLE: return test_secp256k1_jdouble(); + case TEST_SECP256K1_JMIXADD: return test_secp256k1_jmixadd(); case TEST_WORD_BYTEREVERSE: return test_word_bytereverse(); case TEST_WORD_CLZ: return test_word_clz(); case TEST_WORD_CTZ: return test_word_ctz(); diff --git a/x86/Makefile b/x86/Makefile index ab3c67f364..274311a532 100644 --- a/x86/Makefile +++ b/x86/Makefile @@ -287,7 +287,10 @@ OBJ = curve25519/bignum_add_p25519.o \ secp256k1/bignum_tomont_p256k1.o \ secp256k1/bignum_tomont_p256k1_alt.o \ secp256k1/bignum_triple_p256k1.o \ - secp256k1/bignum_triple_p256k1_alt.o + secp256k1/bignum_triple_p256k1_alt.o \ + secp256k1/secp256k1_jadd.o \ + secp256k1/secp256k1_jdouble.o \ + secp256k1/secp256k1_jmixadd.o .PHONY: bmi clean clobber diff --git a/x86/proofs/secp256k1_jadd.ml b/x86/proofs/secp256k1_jadd.ml new file mode 100644 index 0000000000..0e5cfa9cdf --- /dev/null +++ b/x86/proofs/secp256k1_jadd.ml @@ -0,0 +1,3167 @@ +(* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + *) + +(* ========================================================================= *) +(* Point addition in Jacobian coordinates for SECG secp256k1 curve. *) +(* ========================================================================= *) + +needs "x86/proofs/base.ml";; +needs "common/ecencoding.ml";; +needs "EC/jacobian.ml";; +needs "EC/secp256k1.ml";; + +prioritize_int();; +prioritize_real();; +prioritize_num();; + +(**** print_literal_from_elf "x86/secp256k1/secp256k1_jadd.o";; + ****) + +let secp256k1_jadd_mc = define_assert_from_elf + "secp256k1_jadd_mc" "x86/secp256k1/secp256k1_jadd.o" +[ + 0x53; (* PUSH (% rbx) *) + 0x55; (* PUSH (% rbp) *) + 0x41; 0x54; (* PUSH (% r12) *) + 0x41; 0x55; (* PUSH (% r13) *) + 0x41; 0x56; (* PUSH (% r14) *) + 0x41; 0x57; (* PUSH (% r15) *) + 0x48; 0x81; 0xec; 0xe0; 0x00; 0x00; 0x00; + (* SUB (% rsp) (Imm32 (word 224)) *) + 0x48; 0x89; 0xd5; (* MOV (% rbp) (% rdx) *) + 0x48; 0x8b; 0x56; 0x40; (* MOV (% rdx) (Memop Quadword (%% (rsi,64))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0xfa; + (* MULX4 (% r15,% r8) (% rdx,% rdx) *) + 0xc4; 0x62; 0xb3; 0xf6; 0x56; 0x48; + (* MULX4 (% r10,% r9) (% rdx,Memop Quadword (%% (rsi,72))) *) + 0xc4; 0x62; 0xa3; 0xf6; 0x66; 0x58; + (* MULX4 (% r12,% r11) (% rdx,Memop Quadword (%% (rsi,88))) *) + 0x48; 0x8b; 0x56; 0x50; (* MOV (% rdx) (Memop Quadword (%% (rsi,80))) *) + 0xc4; 0x62; 0x93; 0xf6; 0x76; 0x58; + (* MULX4 (% r14,% r13) (% rdx,Memop Quadword (%% (rsi,88))) *) + 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x4e; 0x40; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsi,64))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd9; + (* ADOX (% r11) (% rcx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x4e; 0x48; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsi,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADOX (% r12) (% rcx) *) + 0x48; 0x8b; 0x56; 0x58; (* MOV (% rdx) (Memop Quadword (%% (rsi,88))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x4e; 0x48; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsi,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADOX (% r13) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADCX (% r13) (% rbx) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% r9) (% r9) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xcf; + (* ADOX (% r9) (% r15) *) + 0x48; 0x8b; 0x56; 0x48; (* MOV (% rdx) (Memop Quadword (%% (rsi,72))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xd2; + (* ADCX (% r10) (% r10) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADOX (% r10) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% r11) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% r11) (% rdx) *) + 0x48; 0x8b; 0x56; 0x50; (* MOV (% rdx) (Memop Quadword (%% (rsi,80))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xe4; + (* ADCX (% r12) (% r12) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADOX (% r12) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% r13) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xea; + (* ADOX (% r13) (% rdx) *) + 0x48; 0x8b; 0x56; 0x58; (* MOV (% rdx) (Memop Quadword (%% (rsi,88))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xfa; + (* MULX4 (% r15,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf6; + (* ADCX (% r14) (% r14) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% rax) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADCX (% r15) (% rbx) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x48; 0xba; 0xd1; 0x03; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294968273)) *) + 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xcc; + (* MULX4 (% rcx,% rax) (% rdx,% r12) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc9; + (* ADOX (% r9) (% rcx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xcd; + (* MULX4 (% rcx,% rax) (% rdx,% r13) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd1; + (* ADOX (% r10) (% rcx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xce; + (* MULX4 (% rcx,% rax) (% rdx,% r14) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd9; + (* ADOX (% r11) (% rcx) *) + 0xc4; 0x42; 0xfb; 0xf6; 0xe7; + (* MULX4 (% r12,% rax) (% rdx,% r15) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADCX (% r12) (% rbx) *) + 0x49; 0x8d; 0x44; 0x24; 0x01; + (* LEA (% rax) (%% (r12,1)) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xc8; + (* MULX4 (% rcx,% rax) (% rdx,% rax) *) + 0x49; 0x01; 0xc0; (* ADD (% r8) (% rax) *) + 0x49; 0x11; 0xc9; (* ADC (% r9) (% rcx) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x48; 0x19; 0xc0; (* SBB (% rax) (% rax) *) + 0x48; 0xf7; 0xd0; (* NOT (% rax) *) + 0x48; 0x21; 0xd0; (* AND (% rax) (% rdx) *) + 0x49; 0x29; 0xc0; (* SUB (% r8) (% rax) *) + 0x49; 0x19; 0xd9; (* SBB (% r9) (% rbx) *) + 0x49; 0x19; 0xda; (* SBB (% r10) (% rbx) *) + 0x49; 0x19; 0xdb; (* SBB (% r11) (% rbx) *) + 0x4c; 0x89; 0x04; 0x24; (* MOV (Memop Quadword (%% (rsp,0))) (% r8) *) + 0x4c; 0x89; 0x4c; 0x24; 0x08; + (* MOV (Memop Quadword (%% (rsp,8))) (% r9) *) + 0x4c; 0x89; 0x54; 0x24; 0x10; + (* MOV (Memop Quadword (%% (rsp,16))) (% r10) *) + 0x4c; 0x89; 0x5c; 0x24; 0x18; + (* MOV (Memop Quadword (%% (rsp,24))) (% r11) *) + 0x48; 0x8b; 0x55; 0x40; (* MOV (% rdx) (Memop Quadword (%% (rbp,64))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0xfa; + (* MULX4 (% r15,% r8) (% rdx,% rdx) *) + 0xc4; 0x62; 0xb3; 0xf6; 0x55; 0x48; + (* MULX4 (% r10,% r9) (% rdx,Memop Quadword (%% (rbp,72))) *) + 0xc4; 0x62; 0xa3; 0xf6; 0x65; 0x58; + (* MULX4 (% r12,% r11) (% rdx,Memop Quadword (%% (rbp,88))) *) + 0x48; 0x8b; 0x55; 0x50; (* MOV (% rdx) (Memop Quadword (%% (rbp,80))) *) + 0xc4; 0x62; 0x93; 0xf6; 0x75; 0x58; + (* MULX4 (% r14,% r13) (% rdx,Memop Quadword (%% (rbp,88))) *) + 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x4d; 0x40; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rbp,64))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd9; + (* ADOX (% r11) (% rcx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x4d; 0x48; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rbp,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADOX (% r12) (% rcx) *) + 0x48; 0x8b; 0x55; 0x58; (* MOV (% rdx) (Memop Quadword (%% (rbp,88))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x4d; 0x48; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rbp,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADOX (% r13) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADCX (% r13) (% rbx) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% r9) (% r9) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xcf; + (* ADOX (% r9) (% r15) *) + 0x48; 0x8b; 0x55; 0x48; (* MOV (% rdx) (Memop Quadword (%% (rbp,72))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xd2; + (* ADCX (% r10) (% r10) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADOX (% r10) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% r11) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% r11) (% rdx) *) + 0x48; 0x8b; 0x55; 0x50; (* MOV (% rdx) (Memop Quadword (%% (rbp,80))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xe4; + (* ADCX (% r12) (% r12) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADOX (% r12) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% r13) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xea; + (* ADOX (% r13) (% rdx) *) + 0x48; 0x8b; 0x55; 0x58; (* MOV (% rdx) (Memop Quadword (%% (rbp,88))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xfa; + (* MULX4 (% r15,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf6; + (* ADCX (% r14) (% r14) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% rax) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADCX (% r15) (% rbx) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x48; 0xba; 0xd1; 0x03; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294968273)) *) + 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xcc; + (* MULX4 (% rcx,% rax) (% rdx,% r12) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc9; + (* ADOX (% r9) (% rcx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xcd; + (* MULX4 (% rcx,% rax) (% rdx,% r13) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd1; + (* ADOX (% r10) (% rcx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xce; + (* MULX4 (% rcx,% rax) (% rdx,% r14) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd9; + (* ADOX (% r11) (% rcx) *) + 0xc4; 0x42; 0xfb; 0xf6; 0xe7; + (* MULX4 (% r12,% rax) (% rdx,% r15) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADCX (% r12) (% rbx) *) + 0x49; 0x8d; 0x44; 0x24; 0x01; + (* LEA (% rax) (%% (r12,1)) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xc8; + (* MULX4 (% rcx,% rax) (% rdx,% rax) *) + 0x49; 0x01; 0xc0; (* ADD (% r8) (% rax) *) + 0x49; 0x11; 0xc9; (* ADC (% r9) (% rcx) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x48; 0x19; 0xc0; (* SBB (% rax) (% rax) *) + 0x48; 0xf7; 0xd0; (* NOT (% rax) *) + 0x48; 0x21; 0xd0; (* AND (% rax) (% rdx) *) + 0x49; 0x29; 0xc0; (* SUB (% r8) (% rax) *) + 0x49; 0x19; 0xd9; (* SBB (% r9) (% rbx) *) + 0x49; 0x19; 0xda; (* SBB (% r10) (% rbx) *) + 0x49; 0x19; 0xdb; (* SBB (% r11) (% rbx) *) + 0x4c; 0x89; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,160))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,168))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,176))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,184))) (% r11) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x56; 0x20; (* MOV (% rdx) (Memop Quadword (%% (rsi,32))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x4d; 0x40; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rbp,64))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x55; 0x48; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rbp,72))) *) + 0x49; 0x01; 0xc1; (* ADD (% r9) (% rax) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x5d; 0x50; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rbp,80))) *) + 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x65; 0x58; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rbp,88))) *) + 0x49; 0x11; 0xc3; (* ADC (% r11) (% rax) *) + 0x49; 0x11; 0xcc; (* ADC (% r12) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x56; 0x28; (* MOV (% rdx) (Memop Quadword (%% (rsi,40))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5d; 0x40; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rbp,64))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5d; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rbp,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5d; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rbp,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x6d; 0x58; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rbp,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADOX (% r13) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADCX (% r13) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x56; 0x30; (* MOV (% rdx) (Memop Quadword (%% (rsi,48))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5d; 0x40; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rbp,64))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5d; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rbp,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5d; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rbp,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x75; 0x58; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rbp,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADOX (% r14) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADCX (% r14) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x56; 0x38; (* MOV (% rdx) (Memop Quadword (%% (rsi,56))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5d; 0x40; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rbp,64))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5d; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rbp,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5d; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rbp,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x7d; 0x58; + (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rbp,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% rcx) *) + 0x48; 0xba; 0xd1; 0x03; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294968273)) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdc; + (* MULX4 (% rbx,% rax) (% rdx,% r12) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdd; + (* MULX4 (% rbx,% rax) (% rdx,% r13) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xde; + (* MULX4 (% rbx,% rax) (% rdx,% r14) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0x42; 0xfb; 0xf6; 0xe7; + (* MULX4 (% r12,% rax) (% rdx,% r15) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADOX (% r12) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADCX (% r12) (% rcx) *) + 0x49; 0x8d; 0x44; 0x24; 0x01; + (* LEA (% rax) (%% (r12,1)) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% rax) *) + 0x49; 0x01; 0xc0; (* ADD (% r8) (% rax) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) + 0x49; 0x11; 0xcb; (* ADC (% r11) (% rcx) *) + 0x48; 0x0f; 0x42; 0xd1; (* CMOVB (% rdx) (% rcx) *) + 0x49; 0x29; 0xd0; (* SUB (% r8) (% rdx) *) + 0x49; 0x19; 0xc9; (* SBB (% r9) (% rcx) *) + 0x49; 0x19; 0xca; (* SBB (% r10) (% rcx) *) + 0x49; 0x19; 0xcb; (* SBB (% r11) (% rcx) *) + 0x4c; 0x89; 0x84; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,192))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,200))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,208))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,216))) (% r11) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x55; 0x20; (* MOV (% rdx) (Memop Quadword (%% (rbp,32))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x4e; 0x40; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsi,64))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x56; 0x48; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsi,72))) *) + 0x49; 0x01; 0xc1; (* ADD (% r9) (% rax) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x5e; 0x50; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsi,80))) *) + 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x66; 0x58; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsi,88))) *) + 0x49; 0x11; 0xc3; (* ADC (% r11) (% rax) *) + 0x49; 0x11; 0xcc; (* ADC (% r12) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x55; 0x28; (* MOV (% rdx) (Memop Quadword (%% (rbp,40))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x40; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,64))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x6e; 0x58; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsi,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADOX (% r13) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADCX (% r13) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x55; 0x30; (* MOV (% rdx) (Memop Quadword (%% (rbp,48))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x40; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,64))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x76; 0x58; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsi,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADOX (% r14) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADCX (% r14) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x55; 0x38; (* MOV (% rdx) (Memop Quadword (%% (rbp,56))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x40; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,64))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x7e; 0x58; + (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsi,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% rcx) *) + 0x48; 0xba; 0xd1; 0x03; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294968273)) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdc; + (* MULX4 (% rbx,% rax) (% rdx,% r12) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdd; + (* MULX4 (% rbx,% rax) (% rdx,% r13) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xde; + (* MULX4 (% rbx,% rax) (% rdx,% r14) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0x42; 0xfb; 0xf6; 0xe7; + (* MULX4 (% r12,% rax) (% rdx,% r15) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADOX (% r12) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADCX (% r12) (% rcx) *) + 0x49; 0x8d; 0x44; 0x24; 0x01; + (* LEA (% rax) (%% (r12,1)) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% rax) *) + 0x49; 0x01; 0xc0; (* ADD (% r8) (% rax) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) + 0x49; 0x11; 0xcb; (* ADC (% r11) (% rcx) *) + 0x48; 0x0f; 0x42; 0xd1; (* CMOVB (% rdx) (% rcx) *) + 0x49; 0x29; 0xd0; (* SUB (% r8) (% rdx) *) + 0x49; 0x19; 0xc9; (* SBB (% r9) (% rcx) *) + 0x49; 0x19; 0xca; (* SBB (% r10) (% rcx) *) + 0x49; 0x19; 0xcb; (* SBB (% r11) (% rcx) *) + 0x4c; 0x89; 0x44; 0x24; 0x20; + (* MOV (Memop Quadword (%% (rsp,32))) (% r8) *) + 0x4c; 0x89; 0x4c; 0x24; 0x28; + (* MOV (Memop Quadword (%% (rsp,40))) (% r9) *) + 0x4c; 0x89; 0x54; 0x24; 0x30; + (* MOV (Memop Quadword (%% (rsp,48))) (% r10) *) + 0x4c; 0x89; 0x5c; 0x24; 0x38; + (* MOV (Memop Quadword (%% (rsp,56))) (% r11) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x55; 0x00; (* MOV (% rdx) (Memop Quadword (%% (rbp,0))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x0c; 0x24; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x54; 0x24; 0x08; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x49; 0x01; 0xc1; (* ADD (% r9) (% rax) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x64; 0x24; 0x18; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x49; 0x11; 0xc3; (* ADC (% r11) (% rax) *) + 0x49; 0x11; 0xcc; (* ADC (% r12) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x55; 0x08; (* MOV (% rdx) (Memop Quadword (%% (rbp,8))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x6c; 0x24; 0x18; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADOX (% r13) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADCX (% r13) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x55; 0x10; (* MOV (% rdx) (Memop Quadword (%% (rbp,16))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x74; 0x24; 0x18; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADOX (% r14) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADCX (% r14) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x55; 0x18; (* MOV (% rdx) (Memop Quadword (%% (rbp,24))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x7c; 0x24; 0x18; + (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% rcx) *) + 0x48; 0xba; 0xd1; 0x03; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294968273)) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdc; + (* MULX4 (% rbx,% rax) (% rdx,% r12) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdd; + (* MULX4 (% rbx,% rax) (% rdx,% r13) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xde; + (* MULX4 (% rbx,% rax) (% rdx,% r14) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0x42; 0xfb; 0xf6; 0xe7; + (* MULX4 (% r12,% rax) (% rdx,% r15) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADOX (% r12) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADCX (% r12) (% rcx) *) + 0x49; 0x8d; 0x44; 0x24; 0x01; + (* LEA (% rax) (%% (r12,1)) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% rax) *) + 0x49; 0x01; 0xc0; (* ADD (% r8) (% rax) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) + 0x49; 0x11; 0xcb; (* ADC (% r11) (% rcx) *) + 0x48; 0x0f; 0x42; 0xd1; (* CMOVB (% rdx) (% rcx) *) + 0x49; 0x29; 0xd0; (* SUB (% r8) (% rdx) *) + 0x49; 0x19; 0xc9; (* SBB (% r9) (% rcx) *) + 0x49; 0x19; 0xca; (* SBB (% r10) (% rcx) *) + 0x49; 0x19; 0xcb; (* SBB (% r11) (% rcx) *) + 0x4c; 0x89; 0x44; 0x24; 0x40; + (* MOV (Memop Quadword (%% (rsp,64))) (% r8) *) + 0x4c; 0x89; 0x4c; 0x24; 0x48; + (* MOV (Memop Quadword (%% (rsp,72))) (% r9) *) + 0x4c; 0x89; 0x54; 0x24; 0x50; + (* MOV (Memop Quadword (%% (rsp,80))) (% r10) *) + 0x4c; 0x89; 0x5c; 0x24; 0x58; + (* MOV (Memop Quadword (%% (rsp,88))) (% r11) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x16; (* MOV (% rdx) (Memop Quadword (%% (rsi,0))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x8c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x94; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x49; 0x01; 0xc1; (* ADD (% r9) (% rax) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xa4; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xc3; (* ADC (% r11) (% rax) *) + 0x49; 0x11; 0xcc; (* ADC (% r12) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x56; 0x08; (* MOV (% rdx) (Memop Quadword (%% (rsi,8))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xac; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADOX (% r13) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADCX (% r13) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x56; 0x10; (* MOV (% rdx) (Memop Quadword (%% (rsi,16))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xb4; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADOX (% r14) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADCX (% r14) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x56; 0x18; (* MOV (% rdx) (Memop Quadword (%% (rsi,24))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xbc; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% rcx) *) + 0x48; 0xba; 0xd1; 0x03; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294968273)) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdc; + (* MULX4 (% rbx,% rax) (% rdx,% r12) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdd; + (* MULX4 (% rbx,% rax) (% rdx,% r13) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xde; + (* MULX4 (% rbx,% rax) (% rdx,% r14) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0x42; 0xfb; 0xf6; 0xe7; + (* MULX4 (% r12,% rax) (% rdx,% r15) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADOX (% r12) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADCX (% r12) (% rcx) *) + 0x49; 0x8d; 0x44; 0x24; 0x01; + (* LEA (% rax) (%% (r12,1)) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% rax) *) + 0x49; 0x01; 0xc0; (* ADD (% r8) (% rax) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) + 0x49; 0x11; 0xcb; (* ADC (% r11) (% rcx) *) + 0x48; 0x0f; 0x42; 0xd1; (* CMOVB (% rdx) (% rcx) *) + 0x49; 0x29; 0xd0; (* SUB (% r8) (% rdx) *) + 0x49; 0x19; 0xc9; (* SBB (% r9) (% rcx) *) + 0x49; 0x19; 0xca; (* SBB (% r10) (% rcx) *) + 0x49; 0x19; 0xcb; (* SBB (% r11) (% rcx) *) + 0x4c; 0x89; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,128))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,136))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,144))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,152))) (% r11) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x54; 0x24; 0x20; + (* MOV (% rdx) (Memop Quadword (%% (rsp,32))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x0c; 0x24; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x54; 0x24; 0x08; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x49; 0x01; 0xc1; (* ADD (% r9) (% rax) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x64; 0x24; 0x18; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x49; 0x11; 0xc3; (* ADC (% r11) (% rax) *) + 0x49; 0x11; 0xcc; (* ADC (% r12) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x54; 0x24; 0x28; + (* MOV (% rdx) (Memop Quadword (%% (rsp,40))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x6c; 0x24; 0x18; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADOX (% r13) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADCX (% r13) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x54; 0x24; 0x30; + (* MOV (% rdx) (Memop Quadword (%% (rsp,48))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x74; 0x24; 0x18; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADOX (% r14) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADCX (% r14) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x54; 0x24; 0x38; + (* MOV (% rdx) (Memop Quadword (%% (rsp,56))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x7c; 0x24; 0x18; + (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% rcx) *) + 0x48; 0xba; 0xd1; 0x03; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294968273)) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdc; + (* MULX4 (% rbx,% rax) (% rdx,% r12) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdd; + (* MULX4 (% rbx,% rax) (% rdx,% r13) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xde; + (* MULX4 (% rbx,% rax) (% rdx,% r14) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0x42; 0xfb; 0xf6; 0xe7; + (* MULX4 (% r12,% rax) (% rdx,% r15) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADOX (% r12) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADCX (% r12) (% rcx) *) + 0x49; 0x8d; 0x44; 0x24; 0x01; + (* LEA (% rax) (%% (r12,1)) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% rax) *) + 0x49; 0x01; 0xc0; (* ADD (% r8) (% rax) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) + 0x49; 0x11; 0xcb; (* ADC (% r11) (% rcx) *) + 0x48; 0x0f; 0x42; 0xd1; (* CMOVB (% rdx) (% rcx) *) + 0x49; 0x29; 0xd0; (* SUB (% r8) (% rdx) *) + 0x49; 0x19; 0xc9; (* SBB (% r9) (% rcx) *) + 0x49; 0x19; 0xca; (* SBB (% r10) (% rcx) *) + 0x49; 0x19; 0xcb; (* SBB (% r11) (% rcx) *) + 0x4c; 0x89; 0x44; 0x24; 0x20; + (* MOV (Memop Quadword (%% (rsp,32))) (% r8) *) + 0x4c; 0x89; 0x4c; 0x24; 0x28; + (* MOV (Memop Quadword (%% (rsp,40))) (% r9) *) + 0x4c; 0x89; 0x54; 0x24; 0x30; + (* MOV (Memop Quadword (%% (rsp,48))) (% r10) *) + 0x4c; 0x89; 0x5c; 0x24; 0x38; + (* MOV (Memop Quadword (%% (rsp,56))) (% r11) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x94; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,192))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x8c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x94; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x49; 0x01; 0xc1; (* ADD (% r9) (% rax) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xa4; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xc3; (* ADC (% r11) (% rax) *) + 0x49; 0x11; 0xcc; (* ADC (% r12) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x94; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,200))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xac; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADOX (% r13) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADCX (% r13) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x94; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,208))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xb4; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADOX (% r14) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADCX (% r14) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x94; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,216))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xbc; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% rcx) *) + 0x48; 0xba; 0xd1; 0x03; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294968273)) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdc; + (* MULX4 (% rbx,% rax) (% rdx,% r12) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdd; + (* MULX4 (% rbx,% rax) (% rdx,% r13) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xde; + (* MULX4 (% rbx,% rax) (% rdx,% r14) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0x42; 0xfb; 0xf6; 0xe7; + (* MULX4 (% r12,% rax) (% rdx,% r15) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADOX (% r12) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADCX (% r12) (% rcx) *) + 0x49; 0x8d; 0x44; 0x24; 0x01; + (* LEA (% rax) (%% (r12,1)) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% rax) *) + 0x49; 0x01; 0xc0; (* ADD (% r8) (% rax) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) + 0x49; 0x11; 0xcb; (* ADC (% r11) (% rcx) *) + 0x48; 0x0f; 0x42; 0xd1; (* CMOVB (% rdx) (% rcx) *) + 0x49; 0x29; 0xd0; (* SUB (% r8) (% rdx) *) + 0x49; 0x19; 0xc9; (* SBB (% r9) (% rcx) *) + 0x49; 0x19; 0xca; (* SBB (% r10) (% rcx) *) + 0x49; 0x19; 0xcb; (* SBB (% r11) (% rcx) *) + 0x4c; 0x89; 0x84; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,192))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,200))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,208))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,216))) (% r11) *) + 0x31; 0xc0; (* XOR (% eax) (% eax) *) + 0x4c; 0x8b; 0x44; 0x24; 0x40; + (* MOV (% r8) (Memop Quadword (%% (rsp,64))) *) + 0x4c; 0x2b; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; + (* SUB (% r8) (Memop Quadword (%% (rsp,128))) *) + 0x4c; 0x8b; 0x4c; 0x24; 0x48; + (* MOV (% r9) (Memop Quadword (%% (rsp,72))) *) + 0x4c; 0x1b; 0x8c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* SBB (% r9) (Memop Quadword (%% (rsp,136))) *) + 0x4c; 0x8b; 0x54; 0x24; 0x50; + (* MOV (% r10) (Memop Quadword (%% (rsp,80))) *) + 0x4c; 0x1b; 0x94; 0x24; 0x90; 0x00; 0x00; 0x00; + (* SBB (% r10) (Memop Quadword (%% (rsp,144))) *) + 0x4c; 0x8b; 0x5c; 0x24; 0x58; + (* MOV (% r11) (Memop Quadword (%% (rsp,88))) *) + 0x4c; 0x1b; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* SBB (% r11) (Memop Quadword (%% (rsp,152))) *) + 0x48; 0xb9; 0xd1; 0x03; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rcx) (Imm64 (word 4294968273)) *) + 0x48; 0x0f; 0x43; 0xc8; (* CMOVAE (% rcx) (% rax) *) + 0x49; 0x29; 0xc8; (* SUB (% r8) (% rcx) *) + 0x4c; 0x89; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,160))) (% r8) *) + 0x49; 0x19; 0xc1; (* SBB (% r9) (% rax) *) + 0x4c; 0x89; 0x8c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,168))) (% r9) *) + 0x49; 0x19; 0xc2; (* SBB (% r10) (% rax) *) + 0x4c; 0x89; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,176))) (% r10) *) + 0x49; 0x19; 0xc3; (* SBB (% r11) (% rax) *) + 0x4c; 0x89; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,184))) (% r11) *) + 0x31; 0xc0; (* XOR (% eax) (% eax) *) + 0x4c; 0x8b; 0x44; 0x24; 0x20; + (* MOV (% r8) (Memop Quadword (%% (rsp,32))) *) + 0x4c; 0x2b; 0x84; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* SUB (% r8) (Memop Quadword (%% (rsp,192))) *) + 0x4c; 0x8b; 0x4c; 0x24; 0x28; + (* MOV (% r9) (Memop Quadword (%% (rsp,40))) *) + 0x4c; 0x1b; 0x8c; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* SBB (% r9) (Memop Quadword (%% (rsp,200))) *) + 0x4c; 0x8b; 0x54; 0x24; 0x30; + (* MOV (% r10) (Memop Quadword (%% (rsp,48))) *) + 0x4c; 0x1b; 0x94; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* SBB (% r10) (Memop Quadword (%% (rsp,208))) *) + 0x4c; 0x8b; 0x5c; 0x24; 0x38; + (* MOV (% r11) (Memop Quadword (%% (rsp,56))) *) + 0x4c; 0x1b; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* SBB (% r11) (Memop Quadword (%% (rsp,216))) *) + 0x48; 0xb9; 0xd1; 0x03; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rcx) (Imm64 (word 4294968273)) *) + 0x48; 0x0f; 0x43; 0xc8; (* CMOVAE (% rcx) (% rax) *) + 0x49; 0x29; 0xc8; (* SUB (% r8) (% rcx) *) + 0x4c; 0x89; 0x44; 0x24; 0x20; + (* MOV (Memop Quadword (%% (rsp,32))) (% r8) *) + 0x49; 0x19; 0xc1; (* SBB (% r9) (% rax) *) + 0x4c; 0x89; 0x4c; 0x24; 0x28; + (* MOV (Memop Quadword (%% (rsp,40))) (% r9) *) + 0x49; 0x19; 0xc2; (* SBB (% r10) (% rax) *) + 0x4c; 0x89; 0x54; 0x24; 0x30; + (* MOV (Memop Quadword (%% (rsp,48))) (% r10) *) + 0x49; 0x19; 0xc3; (* SBB (% r11) (% rax) *) + 0x4c; 0x89; 0x5c; 0x24; 0x38; + (* MOV (Memop Quadword (%% (rsp,56))) (% r11) *) + 0x48; 0x8b; 0x94; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,160))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0xfa; + (* MULX4 (% r15,% r8) (% rdx,% rdx) *) + 0xc4; 0x62; 0xb3; 0xf6; 0x94; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% r10,% r9) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0xc4; 0x62; 0xa3; 0xf6; 0xa4; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r12,% r11) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x48; 0x8b; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,176))) *) + 0xc4; 0x62; 0x93; 0xf6; 0xb4; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r14,% r13) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x8c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd9; + (* ADOX (% r11) (% rcx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x8c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADOX (% r12) (% rcx) *) + 0x48; 0x8b; 0x94; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,184))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x8c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADOX (% r13) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADCX (% r13) (% rbx) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% r9) (% r9) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xcf; + (* ADOX (% r9) (% r15) *) + 0x48; 0x8b; 0x94; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,168))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xd2; + (* ADCX (% r10) (% r10) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADOX (% r10) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% r11) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% r11) (% rdx) *) + 0x48; 0x8b; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,176))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xe4; + (* ADCX (% r12) (% r12) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADOX (% r12) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% r13) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xea; + (* ADOX (% r13) (% rdx) *) + 0x48; 0x8b; 0x94; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,184))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xfa; + (* MULX4 (% r15,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf6; + (* ADCX (% r14) (% r14) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% rax) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADCX (% r15) (% rbx) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x48; 0xba; 0xd1; 0x03; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294968273)) *) + 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xcc; + (* MULX4 (% rcx,% rax) (% rdx,% r12) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc9; + (* ADOX (% r9) (% rcx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xcd; + (* MULX4 (% rcx,% rax) (% rdx,% r13) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd1; + (* ADOX (% r10) (% rcx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xce; + (* MULX4 (% rcx,% rax) (% rdx,% r14) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd9; + (* ADOX (% r11) (% rcx) *) + 0xc4; 0x42; 0xfb; 0xf6; 0xe7; + (* MULX4 (% r12,% rax) (% rdx,% r15) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADCX (% r12) (% rbx) *) + 0x49; 0x8d; 0x44; 0x24; 0x01; + (* LEA (% rax) (%% (r12,1)) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xc8; + (* MULX4 (% rcx,% rax) (% rdx,% rax) *) + 0x49; 0x01; 0xc0; (* ADD (% r8) (% rax) *) + 0x49; 0x11; 0xc9; (* ADC (% r9) (% rcx) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x48; 0x19; 0xc0; (* SBB (% rax) (% rax) *) + 0x48; 0xf7; 0xd0; (* NOT (% rax) *) + 0x48; 0x21; 0xd0; (* AND (% rax) (% rdx) *) + 0x49; 0x29; 0xc0; (* SUB (% r8) (% rax) *) + 0x49; 0x19; 0xd9; (* SBB (% r9) (% rbx) *) + 0x49; 0x19; 0xda; (* SBB (% r10) (% rbx) *) + 0x49; 0x19; 0xdb; (* SBB (% r11) (% rbx) *) + 0x4c; 0x89; 0x44; 0x24; 0x60; + (* MOV (Memop Quadword (%% (rsp,96))) (% r8) *) + 0x4c; 0x89; 0x4c; 0x24; 0x68; + (* MOV (Memop Quadword (%% (rsp,104))) (% r9) *) + 0x4c; 0x89; 0x54; 0x24; 0x70; + (* MOV (Memop Quadword (%% (rsp,112))) (% r10) *) + 0x4c; 0x89; 0x5c; 0x24; 0x78; + (* MOV (Memop Quadword (%% (rsp,120))) (% r11) *) + 0x48; 0x8b; 0x54; 0x24; 0x20; + (* MOV (% rdx) (Memop Quadword (%% (rsp,32))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0xfa; + (* MULX4 (% r15,% r8) (% rdx,% rdx) *) + 0xc4; 0x62; 0xb3; 0xf6; 0x54; 0x24; 0x28; + (* MULX4 (% r10,% r9) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0xc4; 0x62; 0xa3; 0xf6; 0x64; 0x24; 0x38; + (* MULX4 (% r12,% r11) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x48; 0x8b; 0x54; 0x24; 0x30; + (* MOV (% rdx) (Memop Quadword (%% (rsp,48))) *) + 0xc4; 0x62; 0x93; 0xf6; 0x74; 0x24; 0x38; + (* MULX4 (% r14,% r13) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x4c; 0x24; 0x20; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd9; + (* ADOX (% r11) (% rcx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x4c; 0x24; 0x28; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADOX (% r12) (% rcx) *) + 0x48; 0x8b; 0x54; 0x24; 0x38; + (* MOV (% rdx) (Memop Quadword (%% (rsp,56))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x4c; 0x24; 0x28; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADOX (% r13) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADCX (% r13) (% rbx) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% r9) (% r9) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xcf; + (* ADOX (% r9) (% r15) *) + 0x48; 0x8b; 0x54; 0x24; 0x28; + (* MOV (% rdx) (Memop Quadword (%% (rsp,40))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xd2; + (* ADCX (% r10) (% r10) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADOX (% r10) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% r11) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% r11) (% rdx) *) + 0x48; 0x8b; 0x54; 0x24; 0x30; + (* MOV (% rdx) (Memop Quadword (%% (rsp,48))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xe4; + (* ADCX (% r12) (% r12) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADOX (% r12) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% r13) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xea; + (* ADOX (% r13) (% rdx) *) + 0x48; 0x8b; 0x54; 0x24; 0x38; + (* MOV (% rdx) (Memop Quadword (%% (rsp,56))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xfa; + (* MULX4 (% r15,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf6; + (* ADCX (% r14) (% r14) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% rax) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADCX (% r15) (% rbx) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x48; 0xba; 0xd1; 0x03; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294968273)) *) + 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xcc; + (* MULX4 (% rcx,% rax) (% rdx,% r12) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc9; + (* ADOX (% r9) (% rcx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xcd; + (* MULX4 (% rcx,% rax) (% rdx,% r13) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd1; + (* ADOX (% r10) (% rcx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xce; + (* MULX4 (% rcx,% rax) (% rdx,% r14) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd9; + (* ADOX (% r11) (% rcx) *) + 0xc4; 0x42; 0xfb; 0xf6; 0xe7; + (* MULX4 (% r12,% rax) (% rdx,% r15) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADCX (% r12) (% rbx) *) + 0x49; 0x8d; 0x44; 0x24; 0x01; + (* LEA (% rax) (%% (r12,1)) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xc8; + (* MULX4 (% rcx,% rax) (% rdx,% rax) *) + 0x49; 0x01; 0xc0; (* ADD (% r8) (% rax) *) + 0x49; 0x11; 0xc9; (* ADC (% r9) (% rcx) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x48; 0x19; 0xc0; (* SBB (% rax) (% rax) *) + 0x48; 0xf7; 0xd0; (* NOT (% rax) *) + 0x48; 0x21; 0xd0; (* AND (% rax) (% rdx) *) + 0x49; 0x29; 0xc0; (* SUB (% r8) (% rax) *) + 0x49; 0x19; 0xd9; (* SBB (% r9) (% rbx) *) + 0x49; 0x19; 0xda; (* SBB (% r10) (% rbx) *) + 0x49; 0x19; 0xdb; (* SBB (% r11) (% rbx) *) + 0x4c; 0x89; 0x04; 0x24; (* MOV (Memop Quadword (%% (rsp,0))) (% r8) *) + 0x4c; 0x89; 0x4c; 0x24; 0x08; + (* MOV (Memop Quadword (%% (rsp,8))) (% r9) *) + 0x4c; 0x89; 0x54; 0x24; 0x10; + (* MOV (Memop Quadword (%% (rsp,16))) (% r10) *) + 0x4c; 0x89; 0x5c; 0x24; 0x18; + (* MOV (Memop Quadword (%% (rsp,24))) (% r11) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x94; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,128))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x4c; 0x24; 0x60; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x54; 0x24; 0x68; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x49; 0x01; 0xc1; (* ADD (% r9) (% rax) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x64; 0x24; 0x78; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x49; 0x11; 0xc3; (* ADC (% r11) (% rax) *) + 0x49; 0x11; 0xcc; (* ADC (% r12) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x94; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,136))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x6c; 0x24; 0x78; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADOX (% r13) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADCX (% r13) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x94; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,144))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x74; 0x24; 0x78; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADOX (% r14) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADCX (% r14) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x94; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,152))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x7c; 0x24; 0x78; + (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% rcx) *) + 0x48; 0xba; 0xd1; 0x03; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294968273)) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdc; + (* MULX4 (% rbx,% rax) (% rdx,% r12) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdd; + (* MULX4 (% rbx,% rax) (% rdx,% r13) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xde; + (* MULX4 (% rbx,% rax) (% rdx,% r14) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0x42; 0xfb; 0xf6; 0xe7; + (* MULX4 (% r12,% rax) (% rdx,% r15) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADOX (% r12) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADCX (% r12) (% rcx) *) + 0x49; 0x8d; 0x44; 0x24; 0x01; + (* LEA (% rax) (%% (r12,1)) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% rax) *) + 0x49; 0x01; 0xc0; (* ADD (% r8) (% rax) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) + 0x49; 0x11; 0xcb; (* ADC (% r11) (% rcx) *) + 0x48; 0x0f; 0x42; 0xd1; (* CMOVB (% rdx) (% rcx) *) + 0x49; 0x29; 0xd0; (* SUB (% r8) (% rdx) *) + 0x49; 0x19; 0xc9; (* SBB (% r9) (% rcx) *) + 0x49; 0x19; 0xca; (* SBB (% r10) (% rcx) *) + 0x49; 0x19; 0xcb; (* SBB (% r11) (% rcx) *) + 0x4c; 0x89; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,128))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,136))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,144))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,152))) (% r11) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x54; 0x24; 0x40; + (* MOV (% rdx) (Memop Quadword (%% (rsp,64))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x4c; 0x24; 0x60; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x54; 0x24; 0x68; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x49; 0x01; 0xc1; (* ADD (% r9) (% rax) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x64; 0x24; 0x78; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x49; 0x11; 0xc3; (* ADC (% r11) (% rax) *) + 0x49; 0x11; 0xcc; (* ADC (% r12) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x54; 0x24; 0x48; + (* MOV (% rdx) (Memop Quadword (%% (rsp,72))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x6c; 0x24; 0x78; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADOX (% r13) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADCX (% r13) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x54; 0x24; 0x50; + (* MOV (% rdx) (Memop Quadword (%% (rsp,80))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x74; 0x24; 0x78; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADOX (% r14) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADCX (% r14) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x54; 0x24; 0x58; + (* MOV (% rdx) (Memop Quadword (%% (rsp,88))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x7c; 0x24; 0x78; + (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% rcx) *) + 0x48; 0xba; 0xd1; 0x03; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294968273)) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdc; + (* MULX4 (% rbx,% rax) (% rdx,% r12) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdd; + (* MULX4 (% rbx,% rax) (% rdx,% r13) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xde; + (* MULX4 (% rbx,% rax) (% rdx,% r14) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0x42; 0xfb; 0xf6; 0xe7; + (* MULX4 (% r12,% rax) (% rdx,% r15) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADOX (% r12) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADCX (% r12) (% rcx) *) + 0x49; 0x8d; 0x44; 0x24; 0x01; + (* LEA (% rax) (%% (r12,1)) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% rax) *) + 0x49; 0x01; 0xc0; (* ADD (% r8) (% rax) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) + 0x49; 0x11; 0xcb; (* ADC (% r11) (% rcx) *) + 0x48; 0x0f; 0x42; 0xd1; (* CMOVB (% rdx) (% rcx) *) + 0x49; 0x29; 0xd0; (* SUB (% r8) (% rdx) *) + 0x49; 0x19; 0xc9; (* SBB (% r9) (% rcx) *) + 0x49; 0x19; 0xca; (* SBB (% r10) (% rcx) *) + 0x49; 0x19; 0xcb; (* SBB (% r11) (% rcx) *) + 0x4c; 0x89; 0x44; 0x24; 0x40; + (* MOV (Memop Quadword (%% (rsp,64))) (% r8) *) + 0x4c; 0x89; 0x4c; 0x24; 0x48; + (* MOV (Memop Quadword (%% (rsp,72))) (% r9) *) + 0x4c; 0x89; 0x54; 0x24; 0x50; + (* MOV (Memop Quadword (%% (rsp,80))) (% r10) *) + 0x4c; 0x89; 0x5c; 0x24; 0x58; + (* MOV (Memop Quadword (%% (rsp,88))) (% r11) *) + 0x31; 0xc0; (* XOR (% eax) (% eax) *) + 0x4c; 0x8b; 0x04; 0x24; (* MOV (% r8) (Memop Quadword (%% (rsp,0))) *) + 0x4c; 0x2b; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; + (* SUB (% r8) (Memop Quadword (%% (rsp,128))) *) + 0x4c; 0x8b; 0x4c; 0x24; 0x08; + (* MOV (% r9) (Memop Quadword (%% (rsp,8))) *) + 0x4c; 0x1b; 0x8c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* SBB (% r9) (Memop Quadword (%% (rsp,136))) *) + 0x4c; 0x8b; 0x54; 0x24; 0x10; + (* MOV (% r10) (Memop Quadword (%% (rsp,16))) *) + 0x4c; 0x1b; 0x94; 0x24; 0x90; 0x00; 0x00; 0x00; + (* SBB (% r10) (Memop Quadword (%% (rsp,144))) *) + 0x4c; 0x8b; 0x5c; 0x24; 0x18; + (* MOV (% r11) (Memop Quadword (%% (rsp,24))) *) + 0x4c; 0x1b; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* SBB (% r11) (Memop Quadword (%% (rsp,152))) *) + 0x48; 0xb9; 0xd1; 0x03; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rcx) (Imm64 (word 4294968273)) *) + 0x48; 0x0f; 0x43; 0xc8; (* CMOVAE (% rcx) (% rax) *) + 0x49; 0x29; 0xc8; (* SUB (% r8) (% rcx) *) + 0x4c; 0x89; 0x07; (* MOV (Memop Quadword (%% (rdi,0))) (% r8) *) + 0x49; 0x19; 0xc1; (* SBB (% r9) (% rax) *) + 0x4c; 0x89; 0x4f; 0x08; (* MOV (Memop Quadword (%% (rdi,8))) (% r9) *) + 0x49; 0x19; 0xc2; (* SBB (% r10) (% rax) *) + 0x4c; 0x89; 0x57; 0x10; (* MOV (Memop Quadword (%% (rdi,16))) (% r10) *) + 0x49; 0x19; 0xc3; (* SBB (% r11) (% rax) *) + 0x4c; 0x89; 0x5f; 0x18; (* MOV (Memop Quadword (%% (rdi,24))) (% r11) *) + 0x31; 0xc0; (* XOR (% eax) (% eax) *) + 0x4c; 0x8b; 0x44; 0x24; 0x40; + (* MOV (% r8) (Memop Quadword (%% (rsp,64))) *) + 0x4c; 0x2b; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; + (* SUB (% r8) (Memop Quadword (%% (rsp,128))) *) + 0x4c; 0x8b; 0x4c; 0x24; 0x48; + (* MOV (% r9) (Memop Quadword (%% (rsp,72))) *) + 0x4c; 0x1b; 0x8c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* SBB (% r9) (Memop Quadword (%% (rsp,136))) *) + 0x4c; 0x8b; 0x54; 0x24; 0x50; + (* MOV (% r10) (Memop Quadword (%% (rsp,80))) *) + 0x4c; 0x1b; 0x94; 0x24; 0x90; 0x00; 0x00; 0x00; + (* SBB (% r10) (Memop Quadword (%% (rsp,144))) *) + 0x4c; 0x8b; 0x5c; 0x24; 0x58; + (* MOV (% r11) (Memop Quadword (%% (rsp,88))) *) + 0x4c; 0x1b; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* SBB (% r11) (Memop Quadword (%% (rsp,152))) *) + 0x48; 0xb9; 0xd1; 0x03; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rcx) (Imm64 (word 4294968273)) *) + 0x48; 0x0f; 0x43; 0xc8; (* CMOVAE (% rcx) (% rax) *) + 0x49; 0x29; 0xc8; (* SUB (% r8) (% rcx) *) + 0x4c; 0x89; 0x44; 0x24; 0x60; + (* MOV (Memop Quadword (%% (rsp,96))) (% r8) *) + 0x49; 0x19; 0xc1; (* SBB (% r9) (% rax) *) + 0x4c; 0x89; 0x4c; 0x24; 0x68; + (* MOV (Memop Quadword (%% (rsp,104))) (% r9) *) + 0x49; 0x19; 0xc2; (* SBB (% r10) (% rax) *) + 0x4c; 0x89; 0x54; 0x24; 0x70; + (* MOV (Memop Quadword (%% (rsp,112))) (% r10) *) + 0x49; 0x19; 0xc3; (* SBB (% r11) (% rax) *) + 0x4c; 0x89; 0x5c; 0x24; 0x78; + (* MOV (Memop Quadword (%% (rsp,120))) (% r11) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x56; 0x40; (* MOV (% rdx) (Memop Quadword (%% (rsi,64))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x8c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x94; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x49; 0x01; 0xc1; (* ADD (% r9) (% rax) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xa4; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xc3; (* ADC (% r11) (% rax) *) + 0x49; 0x11; 0xcc; (* ADC (% r12) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x56; 0x48; (* MOV (% rdx) (Memop Quadword (%% (rsi,72))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xac; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADOX (% r13) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADCX (% r13) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x56; 0x50; (* MOV (% rdx) (Memop Quadword (%% (rsi,80))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xb4; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADOX (% r14) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADCX (% r14) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x56; 0x58; (* MOV (% rdx) (Memop Quadword (%% (rsi,88))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xbc; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% rcx) *) + 0x48; 0xba; 0xd1; 0x03; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294968273)) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdc; + (* MULX4 (% rbx,% rax) (% rdx,% r12) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdd; + (* MULX4 (% rbx,% rax) (% rdx,% r13) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xde; + (* MULX4 (% rbx,% rax) (% rdx,% r14) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0x42; 0xfb; 0xf6; 0xe7; + (* MULX4 (% r12,% rax) (% rdx,% r15) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADOX (% r12) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADCX (% r12) (% rcx) *) + 0x49; 0x8d; 0x44; 0x24; 0x01; + (* LEA (% rax) (%% (r12,1)) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% rax) *) + 0x49; 0x01; 0xc0; (* ADD (% r8) (% rax) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) + 0x49; 0x11; 0xcb; (* ADC (% r11) (% rcx) *) + 0x48; 0x0f; 0x42; 0xd1; (* CMOVB (% rdx) (% rcx) *) + 0x49; 0x29; 0xd0; (* SUB (% r8) (% rdx) *) + 0x49; 0x19; 0xc9; (* SBB (% r9) (% rcx) *) + 0x49; 0x19; 0xca; (* SBB (% r10) (% rcx) *) + 0x49; 0x19; 0xcb; (* SBB (% r11) (% rcx) *) + 0x4c; 0x89; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,160))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,168))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,176))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,184))) (% r11) *) + 0x31; 0xc0; (* XOR (% eax) (% eax) *) + 0x4c; 0x8b; 0x07; (* MOV (% r8) (Memop Quadword (%% (rdi,0))) *) + 0x4c; 0x2b; 0x44; 0x24; 0x40; + (* SUB (% r8) (Memop Quadword (%% (rsp,64))) *) + 0x4c; 0x8b; 0x4f; 0x08; (* MOV (% r9) (Memop Quadword (%% (rdi,8))) *) + 0x4c; 0x1b; 0x4c; 0x24; 0x48; + (* SBB (% r9) (Memop Quadword (%% (rsp,72))) *) + 0x4c; 0x8b; 0x57; 0x10; (* MOV (% r10) (Memop Quadword (%% (rdi,16))) *) + 0x4c; 0x1b; 0x54; 0x24; 0x50; + (* SBB (% r10) (Memop Quadword (%% (rsp,80))) *) + 0x4c; 0x8b; 0x5f; 0x18; (* MOV (% r11) (Memop Quadword (%% (rdi,24))) *) + 0x4c; 0x1b; 0x5c; 0x24; 0x58; + (* SBB (% r11) (Memop Quadword (%% (rsp,88))) *) + 0x48; 0xb9; 0xd1; 0x03; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rcx) (Imm64 (word 4294968273)) *) + 0x48; 0x0f; 0x43; 0xc8; (* CMOVAE (% rcx) (% rax) *) + 0x49; 0x29; 0xc8; (* SUB (% r8) (% rcx) *) + 0x4c; 0x89; 0x07; (* MOV (Memop Quadword (%% (rdi,0))) (% r8) *) + 0x49; 0x19; 0xc1; (* SBB (% r9) (% rax) *) + 0x4c; 0x89; 0x4f; 0x08; (* MOV (Memop Quadword (%% (rdi,8))) (% r9) *) + 0x49; 0x19; 0xc2; (* SBB (% r10) (% rax) *) + 0x4c; 0x89; 0x57; 0x10; (* MOV (Memop Quadword (%% (rdi,16))) (% r10) *) + 0x49; 0x19; 0xc3; (* SBB (% r11) (% rax) *) + 0x4c; 0x89; 0x5f; 0x18; (* MOV (Memop Quadword (%% (rdi,24))) (% r11) *) + 0x31; 0xc0; (* XOR (% eax) (% eax) *) + 0x4c; 0x8b; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (% r8) (Memop Quadword (%% (rsp,128))) *) + 0x4c; 0x2b; 0x07; (* SUB (% r8) (Memop Quadword (%% (rdi,0))) *) + 0x4c; 0x8b; 0x8c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (% r9) (Memop Quadword (%% (rsp,136))) *) + 0x4c; 0x1b; 0x4f; 0x08; (* SBB (% r9) (Memop Quadword (%% (rdi,8))) *) + 0x4c; 0x8b; 0x94; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (% r10) (Memop Quadword (%% (rsp,144))) *) + 0x4c; 0x1b; 0x57; 0x10; (* SBB (% r10) (Memop Quadword (%% (rdi,16))) *) + 0x4c; 0x8b; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (% r11) (Memop Quadword (%% (rsp,152))) *) + 0x4c; 0x1b; 0x5f; 0x18; (* SBB (% r11) (Memop Quadword (%% (rdi,24))) *) + 0x48; 0xb9; 0xd1; 0x03; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rcx) (Imm64 (word 4294968273)) *) + 0x48; 0x0f; 0x43; 0xc8; (* CMOVAE (% rcx) (% rax) *) + 0x49; 0x29; 0xc8; (* SUB (% r8) (% rcx) *) + 0x4c; 0x89; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,128))) (% r8) *) + 0x49; 0x19; 0xc1; (* SBB (% r9) (% rax) *) + 0x4c; 0x89; 0x8c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,136))) (% r9) *) + 0x49; 0x19; 0xc2; (* SBB (% r10) (% rax) *) + 0x4c; 0x89; 0x94; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,144))) (% r10) *) + 0x49; 0x19; 0xc3; (* SBB (% r11) (% rax) *) + 0x4c; 0x89; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,152))) (% r11) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x94; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,192))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x4c; 0x24; 0x60; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x54; 0x24; 0x68; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x49; 0x01; 0xc1; (* ADD (% r9) (% rax) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x64; 0x24; 0x78; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x49; 0x11; 0xc3; (* ADC (% r11) (% rax) *) + 0x49; 0x11; 0xcc; (* ADC (% r12) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x94; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,200))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x6c; 0x24; 0x78; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADOX (% r13) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADCX (% r13) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x94; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,208))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x74; 0x24; 0x78; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADOX (% r14) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADCX (% r14) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x94; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,216))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x7c; 0x24; 0x78; + (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% rcx) *) + 0x48; 0xba; 0xd1; 0x03; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294968273)) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdc; + (* MULX4 (% rbx,% rax) (% rdx,% r12) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdd; + (* MULX4 (% rbx,% rax) (% rdx,% r13) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xde; + (* MULX4 (% rbx,% rax) (% rdx,% r14) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0x42; 0xfb; 0xf6; 0xe7; + (* MULX4 (% r12,% rax) (% rdx,% r15) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADOX (% r12) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADCX (% r12) (% rcx) *) + 0x49; 0x8d; 0x44; 0x24; 0x01; + (* LEA (% rax) (%% (r12,1)) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% rax) *) + 0x49; 0x01; 0xc0; (* ADD (% r8) (% rax) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) + 0x49; 0x11; 0xcb; (* ADC (% r11) (% rcx) *) + 0x48; 0x0f; 0x42; 0xd1; (* CMOVB (% rdx) (% rcx) *) + 0x49; 0x29; 0xd0; (* SUB (% r8) (% rdx) *) + 0x49; 0x19; 0xc9; (* SBB (% r9) (% rcx) *) + 0x49; 0x19; 0xca; (* SBB (% r10) (% rcx) *) + 0x49; 0x19; 0xcb; (* SBB (% r11) (% rcx) *) + 0x4c; 0x89; 0x44; 0x24; 0x60; + (* MOV (Memop Quadword (%% (rsp,96))) (% r8) *) + 0x4c; 0x89; 0x4c; 0x24; 0x68; + (* MOV (Memop Quadword (%% (rsp,104))) (% r9) *) + 0x4c; 0x89; 0x54; 0x24; 0x70; + (* MOV (Memop Quadword (%% (rsp,112))) (% r10) *) + 0x4c; 0x89; 0x5c; 0x24; 0x78; + (* MOV (Memop Quadword (%% (rsp,120))) (% r11) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x55; 0x40; (* MOV (% rdx) (Memop Quadword (%% (rbp,64))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x8c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x94; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x49; 0x01; 0xc1; (* ADD (% r9) (% rax) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xa4; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xc3; (* ADC (% r11) (% rax) *) + 0x49; 0x11; 0xcc; (* ADC (% r12) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x55; 0x48; (* MOV (% rdx) (Memop Quadword (%% (rbp,72))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xac; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADOX (% r13) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADCX (% r13) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x55; 0x50; (* MOV (% rdx) (Memop Quadword (%% (rbp,80))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xb4; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADOX (% r14) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADCX (% r14) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x55; 0x58; (* MOV (% rdx) (Memop Quadword (%% (rbp,88))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xbc; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% rcx) *) + 0x48; 0xba; 0xd1; 0x03; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294968273)) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdc; + (* MULX4 (% rbx,% rax) (% rdx,% r12) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdd; + (* MULX4 (% rbx,% rax) (% rdx,% r13) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xde; + (* MULX4 (% rbx,% rax) (% rdx,% r14) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0x42; 0xfb; 0xf6; 0xe7; + (* MULX4 (% r12,% rax) (% rdx,% r15) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADOX (% r12) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADCX (% r12) (% rcx) *) + 0x49; 0x8d; 0x44; 0x24; 0x01; + (* LEA (% rax) (%% (r12,1)) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% rax) *) + 0x49; 0x01; 0xc0; (* ADD (% r8) (% rax) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) + 0x49; 0x11; 0xcb; (* ADC (% r11) (% rcx) *) + 0x48; 0x0f; 0x42; 0xd1; (* CMOVB (% rdx) (% rcx) *) + 0x49; 0x29; 0xd0; (* SUB (% r8) (% rdx) *) + 0x49; 0x19; 0xc9; (* SBB (% r9) (% rcx) *) + 0x49; 0x19; 0xca; (* SBB (% r10) (% rcx) *) + 0x49; 0x19; 0xcb; (* SBB (% r11) (% rcx) *) + 0x4c; 0x89; 0x47; 0x40; (* MOV (Memop Quadword (%% (rdi,64))) (% r8) *) + 0x4c; 0x89; 0x4f; 0x48; (* MOV (Memop Quadword (%% (rdi,72))) (% r9) *) + 0x4c; 0x89; 0x57; 0x50; (* MOV (Memop Quadword (%% (rdi,80))) (% r10) *) + 0x4c; 0x89; 0x5f; 0x58; (* MOV (Memop Quadword (%% (rdi,88))) (% r11) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x94; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,128))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x4c; 0x24; 0x20; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x54; 0x24; 0x28; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x49; 0x01; 0xc1; (* ADD (% r9) (% rax) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x64; 0x24; 0x38; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x49; 0x11; 0xc3; (* ADC (% r11) (% rax) *) + 0x49; 0x11; 0xcc; (* ADC (% r12) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x94; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,136))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x6c; 0x24; 0x38; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADOX (% r13) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADCX (% r13) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x94; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,144))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x74; 0x24; 0x38; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADOX (% r14) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADCX (% r14) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x94; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,152))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x7c; 0x24; 0x38; + (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% rcx) *) + 0x48; 0xba; 0xd1; 0x03; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294968273)) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdc; + (* MULX4 (% rbx,% rax) (% rdx,% r12) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdd; + (* MULX4 (% rbx,% rax) (% rdx,% r13) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xde; + (* MULX4 (% rbx,% rax) (% rdx,% r14) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0x42; 0xfb; 0xf6; 0xe7; + (* MULX4 (% r12,% rax) (% rdx,% r15) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADOX (% r12) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADCX (% r12) (% rcx) *) + 0x49; 0x8d; 0x44; 0x24; 0x01; + (* LEA (% rax) (%% (r12,1)) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% rax) *) + 0x49; 0x01; 0xc0; (* ADD (% r8) (% rax) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) + 0x49; 0x11; 0xcb; (* ADC (% r11) (% rcx) *) + 0x48; 0x0f; 0x42; 0xd1; (* CMOVB (% rdx) (% rcx) *) + 0x49; 0x29; 0xd0; (* SUB (% r8) (% rdx) *) + 0x49; 0x19; 0xc9; (* SBB (% r9) (% rcx) *) + 0x49; 0x19; 0xca; (* SBB (% r10) (% rcx) *) + 0x49; 0x19; 0xcb; (* SBB (% r11) (% rcx) *) + 0x4c; 0x89; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,128))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,136))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,144))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,152))) (% r11) *) + 0x31; 0xc0; (* XOR (% eax) (% eax) *) + 0x4c; 0x8b; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (% r8) (Memop Quadword (%% (rsp,128))) *) + 0x4c; 0x2b; 0x44; 0x24; 0x60; + (* SUB (% r8) (Memop Quadword (%% (rsp,96))) *) + 0x4c; 0x8b; 0x8c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (% r9) (Memop Quadword (%% (rsp,136))) *) + 0x4c; 0x1b; 0x4c; 0x24; 0x68; + (* SBB (% r9) (Memop Quadword (%% (rsp,104))) *) + 0x4c; 0x8b; 0x94; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (% r10) (Memop Quadword (%% (rsp,144))) *) + 0x4c; 0x1b; 0x54; 0x24; 0x70; + (* SBB (% r10) (Memop Quadword (%% (rsp,112))) *) + 0x4c; 0x8b; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (% r11) (Memop Quadword (%% (rsp,152))) *) + 0x4c; 0x1b; 0x5c; 0x24; 0x78; + (* SBB (% r11) (Memop Quadword (%% (rsp,120))) *) + 0x48; 0xb9; 0xd1; 0x03; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rcx) (Imm64 (word 4294968273)) *) + 0x48; 0x0f; 0x43; 0xc8; (* CMOVAE (% rcx) (% rax) *) + 0x49; 0x29; 0xc8; (* SUB (% r8) (% rcx) *) + 0x4c; 0x89; 0x47; 0x20; (* MOV (Memop Quadword (%% (rdi,32))) (% r8) *) + 0x49; 0x19; 0xc1; (* SBB (% r9) (% rax) *) + 0x4c; 0x89; 0x4f; 0x28; (* MOV (Memop Quadword (%% (rdi,40))) (% r9) *) + 0x49; 0x19; 0xc2; (* SBB (% r10) (% rax) *) + 0x4c; 0x89; 0x57; 0x30; (* MOV (Memop Quadword (%% (rdi,48))) (% r10) *) + 0x49; 0x19; 0xc3; (* SBB (% r11) (% rax) *) + 0x4c; 0x89; 0x5f; 0x38; (* MOV (Memop Quadword (%% (rdi,56))) (% r11) *) + 0x48; 0x81; 0xc4; 0xe0; 0x00; 0x00; 0x00; + (* ADD (% rsp) (Imm32 (word 224)) *) + 0x41; 0x5f; (* POP (% r15) *) + 0x41; 0x5e; (* POP (% r14) *) + 0x41; 0x5d; (* POP (% r13) *) + 0x41; 0x5c; (* POP (% r12) *) + 0x5d; (* POP (% rbp) *) + 0x5b; (* POP (% rbx) *) + 0xc3 (* RET *) +];; + +let SECP256K1_JADD_EXEC = X86_MK_CORE_EXEC_RULE secp256k1_jadd_mc;; + +(* ------------------------------------------------------------------------- *) +(* Common supporting definitions and lemmas for component proofs. *) +(* ------------------------------------------------------------------------- *) + +let p_256k1 = new_definition `p_256k1 = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F`;; + +let p256k1redlemma = prove + (`!n. n <= (2 EXP 64 - 1) * (p_256k1 - 1) + ==> let q = n DIV 2 EXP 256 + 1 in + q < 2 EXP 64 /\ + q * p_256k1 <= n + p_256k1 /\ + n < q * p_256k1 + p_256k1`, + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN REWRITE_TAC[p_256k1] THEN ARITH_TAC);; + +let secp256k1 = define + `secp256k1 = (integer_mod_ring p_256k1,&0:int,&7:int)`;; + +let secp256k1_encode = new_definition + `secp256k1_encode = modular_encode(256,p_256k1)`;; + +let nintlemma = prove + (`&(num_of_int(x rem &p_256k1)) = x rem &p_256k1`, + MATCH_MP_TAC INT_OF_NUM_OF_INT THEN MATCH_MP_TAC INT_REM_POS THEN + REWRITE_TAC[INT_OF_NUM_EQ; p_256k1] THEN CONV_TAC NUM_REDUCE_CONV);; + +let unilemma0 = prove + (`x = a MOD p_256k1 ==> x < p_256k1 /\ &x = &a rem &p_256k1`, + REWRITE_TAC[INT_OF_NUM_REM; p_256k1] THEN ARITH_TAC);; + +let unilemma1 = prove + (`&x = a rem &p_256k1 ==> x < p_256k1 /\ &x = a rem &p_256k1`, + SIMP_TAC[GSYM INT_OF_NUM_LT; INT_LT_REM_EQ; p_256k1] THEN INT_ARITH_TAC);; + +let unilemma2 = prove + (`X = num_of_int(x rem &p_256k1) ==> X < p_256k1 /\ &X = x rem &p_256k1`, + DISCH_THEN SUBST1_TAC THEN + REWRITE_TAC[GSYM INT_OF_NUM_LT; nintlemma; INT_LT_REM_EQ] THEN + REWRITE_TAC[INT_OF_NUM_LT; p_256k1] THEN CONV_TAC NUM_REDUCE_CONV);; + +let lvs = + ["x_1",[`RSI`;`0`]; + "y_1",[`RSI`;`32`]; + "z_1",[`RSI`;`64`]; + "x_2",[`RBP`;`0`]; + "y_2",[`RBP`;`32`]; + "z_2",[`RBP`;`64`]; + "x_3",[`RDI`;`0`]; + "y_3",[`RDI`;`32`]; + "z_3",[`RDI`;`64`]; + "z1sq",[`RSP`;`0`]; + "ww",[`RSP`;`0`]; + "yd",[`RSP`;`32`]; + "y2a",[`RSP`;`32`]; + "x2a",[`RSP`;`64`]; + "zzx2",[`RSP`;`64`]; + "zz",[`RSP`;`96`]; + "t1",[`RSP`;`96`]; + "t2",[`RSP`;`128`]; + "x1a",[`RSP`;`128`]; + "zzx1",[`RSP`;`128`]; + "xd",[`RSP`;`160`]; + "z2sq",[`RSP`;`160`]; + "y1a",[`RSP`;`192`]];; + +(* ------------------------------------------------------------------------- *) +(* Instances of sqr. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_SQR_P256K1_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE secp256k1_jadd_mc) 73 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1. + !n. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = n + ==> + nonoverlapping (word pc,0x1f46) (word_add (read p3 t) (word n3),32) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST secp256k1_jadd_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read RBP s = read RBP t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) s = + n) + (\s. read RIP s = pcout /\ + read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 4)) s = (n EXP 2) MOD p_256k1) + (MAYCHANGE [RIP; RAX; RBX; RCX; RDX; + R8; R9; R10; R11; R12; R13; R14; R15] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 4)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "n_" o lhand o concl) THEN + + (*** The initial squaring block, very similar to bignum_sqr_4_8 ***) + + X86_ACCSTEPS_TAC SECP256K1_JADD_EXEC (1--41) (1--41) THEN + MAP_EVERY ABBREV_TAC + [`l = bignum_of_wordlist[mullo_s2; sum_s23; sum_s27; sum_s29]`; + `h = bignum_of_wordlist[sum_s33; sum_s35; sum_s39; sum_s41]`] THEN + SUBGOAL_THEN `2 EXP 256 * h + l = n EXP 2` (SUBST1_TAC o SYM) THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"; "n"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_ARITH_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** The initial modular reduction of the high part ***) + + SUBGOAL_THEN + `(2 EXP 256 * h + l) MOD p_256k1 = (4294968273 * h + l) MOD p_256k1` + SUBST1_TAC THENL + [ONCE_REWRITE_TAC[GSYM MOD_ADD_MOD] THEN + ONCE_REWRITE_TAC[GSYM MOD_MULT_LMOD] THEN + REWRITE_TAC[p_256k1] THEN CONV_TAC NUM_REDUCE_CONV; + ALL_TAC] THEN + + (*** Instantiate the quotient approximation lemma ***) + + MP_TAC(SPEC `4294968273 * h + l` p256k1redlemma) THEN ANTS_TAC THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"] THEN REWRITE_TAC[p_256k1] THEN + CONV_TAC NUM_REDUCE_CONV THEN BOUNDER_TAC[]; + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN STRIP_TAC] THEN + + (*** Reduction from 8 digits to 5 digits ***) + + X86_ACCSTEPS_TAC SECP256K1_JADD_EXEC (42--56) (42--56) THEN + ABBREV_TAC + `ca = bignum_of_wordlist[sum_s45; sum_s48; sum_s51; sum_s54; sum_s56]` THEN + SUBGOAL_THEN `4294968273 * h + l = ca` SUBST_ALL_TAC THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"; "ca"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_ARITH_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Quotient estimate computation ***) + + SUBGOAL_THEN `ca DIV 2 EXP 256 = val(sum_s56:int64)` SUBST_ALL_TAC THENL + [EXPAND_TAC "ca" THEN CONV_TAC(LAND_CONV BIGNUM_OF_WORDLIST_DIV_CONV) THEN + REFL_TAC; + FIRST_ASSUM(ASSUME_TAC o MATCH_MP (ARITH_RULE + `n + 1 < 2 EXP 64 ==> n < 2 EXP 64 - 1`))] THEN + + X86_STEPS_TAC SECP256K1_JADD_EXEC [57] THEN + ABBREV_TAC `q:int64 = word_add sum_s56 (word 1)` THEN + SUBGOAL_THEN `val(sum_s56:int64) + 1 = val(q:int64)` SUBST_ALL_TAC THENL + [EXPAND_TAC "q" THEN REWRITE_TAC[VAL_WORD_ADD; VAL_WORD_1] THEN + ASM_SIMP_TAC[DIMINDEX_64; MOD_LT]; + ALL_TAC] THEN + + (*** The rest of the computation ***) + + X86_ACCSTEPS_TAC SECP256K1_JADD_EXEC + [58;59;60;61;62;66;67;68;69] (58--73) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC MOD_UNIQ_BALANCED_REAL THEN + MAP_EVERY EXISTS_TAC [`val(q:int64)`; `256`] THEN ASM_REWRITE_TAC[] THEN + CONJ_TAC THENL [REWRITE_TAC[p_256k1] THEN ARITH_TAC; ALL_TAC] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN + + (*** Comparison computation and then the rest is easy ***) + + SUBGOAL_THEN `ca < val(q:int64) * p_256k1 <=> ~carry_s62` SUBST1_TAC THENL + [CONV_TAC SYM_CONV THEN MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN + EXISTS_TAC `256` THEN EXPAND_TAC "ca" THEN + REWRITE_TAC[p_256k1; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + REWRITE_TAC[REAL_BITVAL_NOT] THEN + SUBGOAL_THEN `&(val(sum_s56:int64)):real = &(val(q:int64)) - &1` + SUBST1_TAC THENL + [FIRST_X_ASSUM(MP_TAC o MATCH_MP (ARITH_RULE + `n < 2 EXP 64 - 1 ==> n + 1 < 2 EXP 64`)) THEN + UNDISCH_THEN `word_add sum_s56 (word 1):int64 = q` (SUBST1_TAC o SYM) THEN + SIMP_TAC[VAL_WORD_ADD; VAL_WORD_1; DIMINDEX_64; MOD_LT] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN REAL_ARITH_TAC; + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]]; + EXPAND_TAC "ca" THEN + REWRITE_TAC[REAL_BITVAL_NOT] THEN + REWRITE_TAC[p_256k1; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + RULE_ASSUM_TAC(REWRITE_RULE[WORD_UNMASK_64]) THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + ASM_CASES_TAC `carry_s62:bool` THEN + ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN CONV_TAC WORD_REDUCE_CONV THEN + REAL_INTEGER_TAC]);; + +(* ------------------------------------------------------------------------- *) +(* Instances of mul. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_MUL_P256K1_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE secp256k1_jadd_mc) 85 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) t = n + ==> + nonoverlapping (word pc,0x1f46) (word_add (read p3 t) (word n3),32) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST secp256k1_jadd_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read RBP s = read RBP t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) s = + n) + (\s. read RIP s = pcout /\ + read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 4)) s = (m * n) MOD p_256k1) + (MAYCHANGE [RIP; RAX; RBX; RCX; RDX; + R8; R9; R10; R11; R12; R13; R14; R15] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 4)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s1" THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "m_" o lhand o concl) THEN + + (*** The initial multiplication block, very similar to bignum_mul_4_8 ***) + + X86_ACCSTEPS_TAC SECP256K1_JADD_EXEC (2--56) (2--56) THEN + MAP_EVERY ABBREV_TAC + [`l = bignum_of_wordlist[mullo_s4; sum_s15; sum_s30; sum_s45]`; + `h = bignum_of_wordlist[sum_s48; sum_s51; sum_s54; sum_s56]`] THEN + SUBGOAL_THEN `2 EXP 256 * h + l = m * n` (SUBST1_TAC o SYM) THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"; "m"; "n"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_ARITH_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** The initial modular reduction of the high part ***) + + SUBGOAL_THEN + `(2 EXP 256 * h + l) MOD p_256k1 = (4294968273 * h + l) MOD p_256k1` + SUBST1_TAC THENL + [ONCE_REWRITE_TAC[GSYM MOD_ADD_MOD] THEN + ONCE_REWRITE_TAC[GSYM MOD_MULT_LMOD] THEN + REWRITE_TAC[p_256k1] THEN CONV_TAC NUM_REDUCE_CONV; + ALL_TAC] THEN + + (*** Instantiate the quotient approximation lemma ***) + + MP_TAC(SPEC `4294968273 * h + l` p256k1redlemma) THEN ANTS_TAC THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"] THEN REWRITE_TAC[p_256k1] THEN + CONV_TAC NUM_REDUCE_CONV THEN BOUNDER_TAC[]; + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN STRIP_TAC] THEN + + (*** Reduction from 8 digits to 5 digits ***) + + X86_ACCSTEPS_TAC SECP256K1_JADD_EXEC (57--71) (57--71) THEN + ABBREV_TAC + `ca = bignum_of_wordlist[sum_s60; sum_s63; sum_s66; sum_s69; sum_s71]` THEN + SUBGOAL_THEN `4294968273 * h + l = ca` SUBST_ALL_TAC THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"; "ca"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_ARITH_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Quotient estimate computation ***) + + SUBGOAL_THEN `ca DIV 2 EXP 256 = val(sum_s71:int64)` SUBST_ALL_TAC THENL + [EXPAND_TAC "ca" THEN CONV_TAC(LAND_CONV BIGNUM_OF_WORDLIST_DIV_CONV) THEN + REFL_TAC; + FIRST_ASSUM(ASSUME_TAC o MATCH_MP (ARITH_RULE + `n + 1 < 2 EXP 64 ==> n < 2 EXP 64 - 1`))] THEN + + X86_STEPS_TAC SECP256K1_JADD_EXEC [72] THEN + ABBREV_TAC `q:int64 = word_add sum_s71 (word 1)` THEN + SUBGOAL_THEN `val(sum_s71:int64) + 1 = val(q:int64)` SUBST_ALL_TAC THENL + [EXPAND_TAC "q" THEN REWRITE_TAC[VAL_WORD_ADD; VAL_WORD_1] THEN + ASM_SIMP_TAC[DIMINDEX_64; MOD_LT]; + ALL_TAC] THEN + + (*** The rest of the computation ***) + + X86_ACCSTEPS_TAC SECP256K1_JADD_EXEC + [73;74;75;76;77;79;80;81;82] (73--86) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC MOD_UNIQ_BALANCED_REAL THEN + MAP_EVERY EXISTS_TAC [`val(q:int64)`; `256`] THEN ASM_REWRITE_TAC[] THEN + CONJ_TAC THENL [REWRITE_TAC[p_256k1] THEN ARITH_TAC; ALL_TAC] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN + + (*** Comparison computation and then the rest is easy ***) + + SUBGOAL_THEN `ca < val(q:int64) * p_256k1 <=> ~carry_s77` SUBST1_TAC THENL + [CONV_TAC SYM_CONV THEN MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN + EXISTS_TAC `256` THEN EXPAND_TAC "ca" THEN + REWRITE_TAC[p_256k1; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + REWRITE_TAC[REAL_BITVAL_NOT] THEN + SUBGOAL_THEN `&(val(sum_s71:int64)):real = &(val(q:int64)) - &1` + SUBST1_TAC THENL + [FIRST_X_ASSUM(MP_TAC o MATCH_MP (ARITH_RULE + `n < 2 EXP 64 - 1 ==> n + 1 < 2 EXP 64`)) THEN + UNDISCH_THEN `word_add sum_s71 (word 1):int64 = q` (SUBST1_TAC o SYM) THEN + SIMP_TAC[VAL_WORD_ADD; VAL_WORD_1; DIMINDEX_64; MOD_LT] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN REAL_ARITH_TAC; + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]]; + EXPAND_TAC "ca" THEN + REWRITE_TAC[REAL_BITVAL_NOT] THEN + REWRITE_TAC[p_256k1; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + RULE_ASSUM_TAC(REWRITE_RULE[WORD_UNMASK_64]) THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + ASM_CASES_TAC `carry_s77:bool` THEN + ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN CONV_TAC WORD_REDUCE_CONV THEN + REAL_INTEGER_TAC]);; + +(* ------------------------------------------------------------------------- *) +(* Instances of sub. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_SUB_P256K1_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE secp256k1_jadd_mc) 19 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) t = n + ==> + nonoverlapping (word pc,0x1f46) (word_add (read p3 t) (word n3),32) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST secp256k1_jadd_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read RBP s = read RBP t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) s = + n) + (\s. read RIP s = pcout /\ + (m < p_256k1 /\ n < p_256k1 + ==> &(read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 4)) s) = (&m - &n) rem &p_256k1)) + (MAYCHANGE [RIP; RAX; RCX; R8; R9; R10; R11] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 4)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "m_" o lhand o concl) THEN + + X86_ACCSTEPS_TAC SECP256K1_JADD_EXEC [3;5;7;9] (1--9) THEN + + SUBGOAL_THEN `carry_s9 <=> m < n` SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN EXISTS_TAC `256` THEN + MAP_EVERY EXPAND_TAC ["m"; "n"] THEN REWRITE_TAC[GSYM REAL_OF_NUM_ADD] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_MUL; GSYM REAL_OF_NUM_POW] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ALL_TAC] THEN + + X86_ACCSTEPS_TAC SECP256K1_JADD_EXEC [12;14;16;18] (10--19) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN STRIP_TAC THEN + CONV_TAC(LAND_CONV(RAND_CONV BIGNUM_EXPAND_CONV)) THEN + ASM_REWRITE_TAC[] THEN DISCARD_STATE_TAC "s19" THEN + + CONV_TAC SYM_CONV THEN MATCH_MP_TAC INT_REM_UNIQ THEN + EXISTS_TAC `--(&(bitval(m < n))):int` THEN REWRITE_TAC[INT_ABS_NUM] THEN + REWRITE_TAC[INT_ARITH `m - n:int = --b * p + z <=> z = b * p + m - n`] THEN + REWRITE_TAC[int_eq; int_le; int_lt] THEN + REWRITE_TAC[int_add_th; int_mul_th; int_of_num_th; int_sub_th] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_ADD; GSYM REAL_OF_NUM_MUL; + GSYM REAL_OF_NUM_POW] THEN + MATCH_MP_TAC(REAL_ARITH + `!t:real. p < t /\ + (&0 <= a /\ a < p) /\ + (&0 <= z /\ z < t) /\ + ((&0 <= z /\ z < t) /\ (&0 <= a /\ a < t) ==> z = a) + ==> z = a /\ &0 <= z /\ z < p`) THEN + EXISTS_TAC `(&2:real) pow 256` THEN + + CONJ_TAC THENL [REWRITE_TAC[p_256k1] THEN REAL_ARITH_TAC; ALL_TAC] THEN + CONJ_TAC THENL + [MAP_EVERY UNDISCH_TAC [`m < p_256k1`; `n < p_256k1`] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_LT] THEN + ASM_CASES_TAC `&m:real < &n` THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + POP_ASSUM MP_TAC THEN REWRITE_TAC[p_256k1] THEN REAL_ARITH_TAC; + ALL_TAC] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; STRIP_TAC] THEN + + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`256`; `&0:real`] THEN + ASM_REWRITE_TAC[] THEN + CONJ_TAC THENL [REAL_INTEGER_TAC; ALL_TAC] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[GSYM NOT_LE; BITVAL_CLAUSES] THEN + CONV_TAC WORD_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["m"; "n"] THEN REWRITE_TAC[GSYM REAL_OF_NUM_ADD] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_MUL; GSYM REAL_OF_NUM_POW; p_256k1] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + CONV_TAC(RAND_CONV REAL_POLY_CONV) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Overall point operation proof. *) +(* ------------------------------------------------------------------------- *) + +let SECP256K1_JADD_CORRECT = time prove + (`!p3 p1 t1 p2 t2 pc stackpointer. + ALLPAIRS nonoverlapping + [(p3,96); (stackpointer,224)] + [(word pc,0x1f46); (p1,96); (p2,96)] /\ + nonoverlapping (p3,96) (stackpointer,224) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST secp256k1_jadd_mc) /\ + read RIP s = word(pc + 0x11) /\ + read RSP s = stackpointer /\ + C_ARGUMENTS [p3; p1; p2] s /\ + bignum_triple_from_memory (p1,4) s = t1 /\ + bignum_triple_from_memory (p2,4) s = t2) + (\s. read RIP s = word (pc + 0x1f34) /\ + (!x1 y1 z1 x2 y2 z2. + ~(z1 = &0) /\ ~(z2 = &0) /\ + ~(jacobian_eq (integer_mod_ring p_256k1) + (x1,y1,z1) (x2,y2,z2)) /\ + ~(jacobian_eq (integer_mod_ring p_256k1) + (jacobian_neg secp256k1 (x1,y1,z1)) + (x2,y2,z2)) /\ + t1 = tripled secp256k1_encode (x1,y1,z1) /\ + t2 = tripled secp256k1_encode (x2,y2,z2) + ==> bignum_triple_from_memory(p3,4) s = + tripled secp256k1_encode + (jacobian_add secp256k1 (x1,y1,z1) (x2,y2,z2)))) + (MAYCHANGE [RIP; RAX; RBX; RCX; RDX; RBP; R8; R9; + R10; R11; R12; R13; R14; R15] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,96); + memory :> bytes(stackpointer,224)])`, + REWRITE_TAC[FORALL_PAIR_THM] THEN + MAP_EVERY X_GEN_TAC + [`p3:int64`; `p1:int64`; `x1:num`; `y1:num`; `z1:num`; `p2:int64`; + `x2:num`; `y2:num`; `z2:num`; `pc:num`; `stackpointer:int64`] THEN + REWRITE_TAC[ALLPAIRS; ALL; NONOVERLAPPING_CLAUSES] THEN STRIP_TAC THEN + REWRITE_TAC[C_ARGUMENTS; SOME_FLAGS; PAIR_EQ; bignum_triple_from_memory] THEN + CONV_TAC(ONCE_DEPTH_CONV NUM_MULT_CONV) THEN + CONV_TAC(ONCE_DEPTH_CONV NORMALIZE_RELATIVE_ADDRESS_CONV) THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + + LOCAL_SQR_P256K1_TAC 1 ["z1sq";"z_1"] THEN + LOCAL_SQR_P256K1_TAC 0 ["z2sq";"z_2"] THEN + LOCAL_MUL_P256K1_TAC 0 ["y1a";"z_2";"y_1"] THEN + LOCAL_MUL_P256K1_TAC 0 ["y2a";"z_1";"y_2"] THEN + LOCAL_MUL_P256K1_TAC 0 ["x2a";"z1sq";"x_2"] THEN + LOCAL_MUL_P256K1_TAC 0 ["x1a";"z2sq";"x_1"] THEN + LOCAL_MUL_P256K1_TAC 0 ["y2a";"z1sq";"y2a"] THEN + LOCAL_MUL_P256K1_TAC 0 ["y1a";"z2sq";"y1a"] THEN + LOCAL_SUB_P256K1_TAC 0 ["xd";"x2a";"x1a"] THEN + LOCAL_SUB_P256K1_TAC 0 ["yd";"y2a";"y1a"] THEN + LOCAL_SQR_P256K1_TAC 0 ["zz";"xd"] THEN + LOCAL_SQR_P256K1_TAC 0 ["ww";"yd"] THEN + LOCAL_MUL_P256K1_TAC 0 ["zzx1";"zz";"x1a"] THEN + LOCAL_MUL_P256K1_TAC 0 ["zzx2";"zz";"x2a"] THEN + LOCAL_SUB_P256K1_TAC 0 ["x_3";"ww";"zzx1"] THEN + LOCAL_SUB_P256K1_TAC 0 ["t1";"zzx2";"zzx1"] THEN + LOCAL_MUL_P256K1_TAC 0 ["xd";"xd";"z_1"] THEN + LOCAL_SUB_P256K1_TAC 0 ["x_3";"x_3";"zzx2"] THEN + LOCAL_SUB_P256K1_TAC 0 ["t2";"zzx1";"x_3"] THEN + LOCAL_MUL_P256K1_TAC 0 ["t1";"t1";"y1a"] THEN + LOCAL_MUL_P256K1_TAC 0 ["z_3";"xd";"z_2"] THEN + LOCAL_MUL_P256K1_TAC 0 ["t2";"yd";"t2"] THEN + LOCAL_SUB_P256K1_TAC 0 ["y_3";"t2";"t1"] THEN + + (*** Remove some assumptions slowing down SUBSUMED_MAYCHANGE_TAC ***) + + FIRST_X_ASSUM(MP_TAC o + check (can (term_match [] `(MAYCHANGE a ,, b) s s'` o concl))) THEN + POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o rev) THEN + DISCH_THEN(fun th -> + DISCH_TAC THEN ENSURES_FINAL_STATE_TAC THEN MP_TAC th) THEN + STRIP_TAC THEN ASM_REWRITE_TAC[] THEN + DISCARD_STATE_TAC "s24" THEN + DISCARD_MATCHING_ASSUMPTIONS [`nonoverlapping_modulo a b c`] THEN + MAP_EVERY X_GEN_TAC + [`x1':int`; `y1':int`; `z1':int`; `x2':int`; `y2':int`; `z2':int`] THEN + REPLICATE_TAC 4 (DISCH_THEN(CONJUNCTS_THEN2 ASSUME_TAC MP_TAC)) THEN + REWRITE_TAC[tripled; secp256k1_encode; PAIR_EQ; modular_encode] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN + (STRIP_ASSUME_TAC o MATCH_MP unilemma2)) THEN + + (*** Dispose of any range hypotheses ***) + + REPEAT(FIRST_X_ASSUM(MP_TAC o check (is_imp o concl))) THEN + REPEAT(ANTS_TAC THENL + [REWRITE_TAC[p_256k1] THEN RULE_ASSUM_TAC(REWRITE_RULE[p_256k1]) THEN + CONV_TAC NUM_REDUCE_CONV THEN ASM BOUNDER_TAC[]; + (DISCH_THEN(STRIP_ASSUME_TAC o MATCH_MP unilemma0) ORELSE + DISCH_THEN(STRIP_ASSUME_TAC o MATCH_MP unilemma1))]) THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o GEN_REWRITE_RULE I [GSYM NOT_LE])) THEN + + (*** Now push the moduli around then do the algebra ***) + + RULE_ASSUM_TAC(REWRITE_RULE + [num_congruent; GSYM INT_OF_NUM_CLAUSES; GSYM INT_OF_NUM_REM]) THEN + ASM_REWRITE_TAC[tripled; jacobian_add; secp256k1] THEN + ASM_REWRITE_TAC[GSYM secp256k1] THEN + REWRITE_TAC[INTEGER_MOD_RING_CLAUSES] THEN + CONV_TAC INT_REDUCE_CONV THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN + CONV_TAC INT_REM_DOWN_CONV THEN + REWRITE_TAC[tripled; modular_encode] THEN + REWRITE_TAC[PAIR_EQ; GSYM INT_OF_NUM_EQ; nintlemma] THEN + CONV_TAC INT_REM_DOWN_CONV THEN + REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES; GSYM INT_OF_NUM_REM] THEN + ASM_REWRITE_TAC[] THEN CONV_TAC INT_REM_DOWN_CONV THEN + REPEAT CONJ_TAC THEN AP_THM_TAC THEN AP_TERM_TAC THEN + INT_ARITH_TAC);; + +let SECP256K1_JADD_SUBROUTINE_CORRECT = time prove + (`!p3 p1 t1 p2 t2 pc stackpointer returnaddress. + ALLPAIRS nonoverlapping + [(p3,96); (word_sub stackpointer (word 272),272)] + [(word pc,0x1f46); (p1,96); (p2,96)] /\ + nonoverlapping (p3,96) (word_sub stackpointer (word 272),280) + ==> ensures x86 + (\s. bytes_loaded s (word pc) secp256k1_jadd_mc /\ + read RIP s = word pc /\ + read RSP s = stackpointer /\ + read (memory :> bytes64 stackpointer) s = returnaddress /\ + C_ARGUMENTS [p3; p1; p2] s /\ + bignum_triple_from_memory (p1,4) s = t1 /\ + bignum_triple_from_memory (p2,4) s = t2) + (\s. read RIP s = returnaddress /\ + read RSP s = word_add stackpointer (word 8) /\ + (!x1 y1 z1 x2 y2 z2. + ~(z1 = &0) /\ ~(z2 = &0) /\ + ~(jacobian_eq (integer_mod_ring p_256k1) + (x1,y1,z1) (x2,y2,z2)) /\ + ~(jacobian_eq (integer_mod_ring p_256k1) + (jacobian_neg secp256k1 (x1,y1,z1)) + (x2,y2,z2)) /\ + t1 = tripled secp256k1_encode (x1,y1,z1) /\ + t2 = tripled secp256k1_encode (x2,y2,z2) + ==> bignum_triple_from_memory(p3,4) s = + tripled secp256k1_encode + (jacobian_add secp256k1 (x1,y1,z1) (x2,y2,z2)))) + (MAYCHANGE [RIP; RSP; RAX; RCX; RDX; R8; R9; R10; R11] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,96); + memory :> bytes(word_sub stackpointer (word 272),272)])`, + X86_PROMOTE_RETURN_STACK_TAC secp256k1_jadd_mc SECP256K1_JADD_CORRECT + `[RBX; RBP; R12; R13; R14; R15]` 272);; + +(* ------------------------------------------------------------------------- *) +(* Correctness of Windows ABI version. *) +(* ------------------------------------------------------------------------- *) + +let windows_secp256k1_jadd_mc = define_from_elf "windows_secp256k1_jadd_mc" + "x86/secp256k1/secp256k1_jadd.obj";; + +let WINDOWS_SECP256K1_JADD_SUBROUTINE_CORRECT = time prove + (`!p3 p1 t1 p2 t2 pc stackpointer returnaddress. + ALLPAIRS nonoverlapping + [(p3,96); (word_sub stackpointer (word 288),288)] + [(word pc,0x1f53); (p1,96); (p2,96)] /\ + nonoverlapping (p3,96) (word_sub stackpointer (word 288),296) + ==> ensures x86 + (\s. bytes_loaded s (word pc) windows_secp256k1_jadd_mc /\ + read RIP s = word pc /\ + read RSP s = stackpointer /\ + read (memory :> bytes64 stackpointer) s = returnaddress /\ + WINDOWS_C_ARGUMENTS [p3; p1; p2] s /\ + bignum_triple_from_memory (p1,4) s = t1 /\ + bignum_triple_from_memory (p2,4) s = t2) + (\s. read RIP s = returnaddress /\ + read RSP s = word_add stackpointer (word 8) /\ + (!x1 y1 z1 x2 y2 z2. + ~(z1 = &0) /\ ~(z2 = &0) /\ + ~(jacobian_eq (integer_mod_ring p_256k1) + (x1,y1,z1) (x2,y2,z2)) /\ + ~(jacobian_eq (integer_mod_ring p_256k1) + (jacobian_neg secp256k1 (x1,y1,z1)) + (x2,y2,z2)) /\ + t1 = tripled secp256k1_encode (x1,y1,z1) /\ + t2 = tripled secp256k1_encode (x2,y2,z2) + ==> bignum_triple_from_memory(p3,4) s = + tripled secp256k1_encode + (jacobian_add secp256k1 (x1,y1,z1) (x2,y2,z2)))) + (MAYCHANGE [RIP; RSP; RAX; RCX; RDX; R8; R9; R10; R11] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,96); + memory :> bytes(word_sub stackpointer (word 288),288)])`, + WINDOWS_X86_WRAP_STACK_TAC + windows_secp256k1_jadd_mc secp256k1_jadd_mc + SECP256K1_JADD_CORRECT + `[RBX; RBP; R12; R13; R14; R15]` 272);; diff --git a/x86/proofs/secp256k1_jdouble.ml b/x86/proofs/secp256k1_jdouble.ml new file mode 100644 index 0000000000..f6184ef144 --- /dev/null +++ b/x86/proofs/secp256k1_jdouble.ml @@ -0,0 +1,2468 @@ +(* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + *) + +(* ========================================================================= *) +(* Point doubling in Jacobian coordinates for SECG secp256k1 curve. *) +(* ========================================================================= *) + +needs "x86/proofs/base.ml";; +needs "common/ecencoding.ml";; +needs "EC/jacobian.ml";; +needs "EC/secp256k1.ml";; + +prioritize_int();; +prioritize_real();; +prioritize_num();; + +(**** print_literal_from_elf "x86/secp256k1/secp256k1_jdouble.o";; + ****) + +let secp256k1_jdouble_mc = define_assert_from_elf + "secp256k1_jdouble_mc" "x86/secp256k1/secp256k1_jdouble.o" +[ + 0x53; (* PUSH (% rbx) *) + 0x41; 0x54; (* PUSH (% r12) *) + 0x41; 0x55; (* PUSH (% r13) *) + 0x41; 0x56; (* PUSH (% r14) *) + 0x41; 0x57; (* PUSH (% r15) *) + 0x48; 0x81; 0xec; 0x80; 0x01; 0x00; 0x00; + (* SUB (% rsp) (Imm32 (word 384)) *) + 0x48; 0x8b; 0x56; 0x20; (* MOV (% rdx) (Memop Quadword (%% (rsi,32))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0xfa; + (* MULX4 (% r15,% r8) (% rdx,% rdx) *) + 0xc4; 0x62; 0xb3; 0xf6; 0x56; 0x28; + (* MULX4 (% r10,% r9) (% rdx,Memop Quadword (%% (rsi,40))) *) + 0xc4; 0x62; 0xa3; 0xf6; 0x66; 0x38; + (* MULX4 (% r12,% r11) (% rdx,Memop Quadword (%% (rsi,56))) *) + 0x48; 0x8b; 0x56; 0x30; (* MOV (% rdx) (Memop Quadword (%% (rsi,48))) *) + 0xc4; 0x62; 0x93; 0xf6; 0x76; 0x38; + (* MULX4 (% r14,% r13) (% rdx,Memop Quadword (%% (rsi,56))) *) + 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x4e; 0x20; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsi,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd9; + (* ADOX (% r11) (% rcx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x4e; 0x28; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsi,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADOX (% r12) (% rcx) *) + 0x48; 0x8b; 0x56; 0x38; (* MOV (% rdx) (Memop Quadword (%% (rsi,56))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x4e; 0x28; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsi,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADOX (% r13) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADCX (% r13) (% rbx) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% r9) (% r9) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xcf; + (* ADOX (% r9) (% r15) *) + 0x48; 0x8b; 0x56; 0x28; (* MOV (% rdx) (Memop Quadword (%% (rsi,40))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xd2; + (* ADCX (% r10) (% r10) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADOX (% r10) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% r11) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% r11) (% rdx) *) + 0x48; 0x8b; 0x56; 0x30; (* MOV (% rdx) (Memop Quadword (%% (rsi,48))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xe4; + (* ADCX (% r12) (% r12) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADOX (% r12) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% r13) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xea; + (* ADOX (% r13) (% rdx) *) + 0x48; 0x8b; 0x56; 0x38; (* MOV (% rdx) (Memop Quadword (%% (rsi,56))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xfa; + (* MULX4 (% r15,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf6; + (* ADCX (% r14) (% r14) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% rax) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADCX (% r15) (% rbx) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x48; 0xba; 0xd1; 0x03; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294968273)) *) + 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xcc; + (* MULX4 (% rcx,% rax) (% rdx,% r12) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc9; + (* ADOX (% r9) (% rcx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xcd; + (* MULX4 (% rcx,% rax) (% rdx,% r13) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd1; + (* ADOX (% r10) (% rcx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xce; + (* MULX4 (% rcx,% rax) (% rdx,% r14) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd9; + (* ADOX (% r11) (% rcx) *) + 0xc4; 0x42; 0xfb; 0xf6; 0xe7; + (* MULX4 (% r12,% rax) (% rdx,% r15) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADCX (% r12) (% rbx) *) + 0x49; 0x8d; 0x44; 0x24; 0x01; + (* LEA (% rax) (%% (r12,1)) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xc8; + (* MULX4 (% rcx,% rax) (% rdx,% rax) *) + 0x49; 0x01; 0xc0; (* ADD (% r8) (% rax) *) + 0x49; 0x11; 0xc9; (* ADC (% r9) (% rcx) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x48; 0x19; 0xc0; (* SBB (% rax) (% rax) *) + 0x48; 0xf7; 0xd0; (* NOT (% rax) *) + 0x48; 0x21; 0xd0; (* AND (% rax) (% rdx) *) + 0x49; 0x29; 0xc0; (* SUB (% r8) (% rax) *) + 0x49; 0x19; 0xd9; (* SBB (% r9) (% rbx) *) + 0x49; 0x19; 0xda; (* SBB (% r10) (% rbx) *) + 0x49; 0x19; 0xdb; (* SBB (% r11) (% rbx) *) + 0x4c; 0x89; 0x44; 0x24; 0x20; + (* MOV (Memop Quadword (%% (rsp,32))) (% r8) *) + 0x4c; 0x89; 0x4c; 0x24; 0x28; + (* MOV (Memop Quadword (%% (rsp,40))) (% r9) *) + 0x4c; 0x89; 0x54; 0x24; 0x30; + (* MOV (Memop Quadword (%% (rsp,48))) (% r10) *) + 0x4c; 0x89; 0x5c; 0x24; 0x38; + (* MOV (Memop Quadword (%% (rsp,56))) (% r11) *) + 0x48; 0x8b; 0x16; (* MOV (% rdx) (Memop Quadword (%% (rsi,0))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0xfa; + (* MULX4 (% r15,% r8) (% rdx,% rdx) *) + 0xc4; 0x62; 0xb3; 0xf6; 0x56; 0x08; + (* MULX4 (% r10,% r9) (% rdx,Memop Quadword (%% (rsi,8))) *) + 0xc4; 0x62; 0xa3; 0xf6; 0x66; 0x18; + (* MULX4 (% r12,% r11) (% rdx,Memop Quadword (%% (rsi,24))) *) + 0x48; 0x8b; 0x56; 0x10; (* MOV (% rdx) (Memop Quadword (%% (rsi,16))) *) + 0xc4; 0x62; 0x93; 0xf6; 0x76; 0x18; + (* MULX4 (% r14,% r13) (% rdx,Memop Quadword (%% (rsi,24))) *) + 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x0e; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsi,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd9; + (* ADOX (% r11) (% rcx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x4e; 0x08; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsi,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADOX (% r12) (% rcx) *) + 0x48; 0x8b; 0x56; 0x18; (* MOV (% rdx) (Memop Quadword (%% (rsi,24))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x4e; 0x08; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsi,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADOX (% r13) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADCX (% r13) (% rbx) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% r9) (% r9) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xcf; + (* ADOX (% r9) (% r15) *) + 0x48; 0x8b; 0x56; 0x08; (* MOV (% rdx) (Memop Quadword (%% (rsi,8))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xd2; + (* ADCX (% r10) (% r10) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADOX (% r10) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% r11) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% r11) (% rdx) *) + 0x48; 0x8b; 0x56; 0x10; (* MOV (% rdx) (Memop Quadword (%% (rsi,16))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xe4; + (* ADCX (% r12) (% r12) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADOX (% r12) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% r13) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xea; + (* ADOX (% r13) (% rdx) *) + 0x48; 0x8b; 0x56; 0x18; (* MOV (% rdx) (Memop Quadword (%% (rsi,24))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xfa; + (* MULX4 (% r15,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf6; + (* ADCX (% r14) (% r14) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% rax) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADCX (% r15) (% rbx) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x48; 0xba; 0xd1; 0x03; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294968273)) *) + 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xcc; + (* MULX4 (% rcx,% rax) (% rdx,% r12) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc9; + (* ADOX (% r9) (% rcx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xcd; + (* MULX4 (% rcx,% rax) (% rdx,% r13) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd1; + (* ADOX (% r10) (% rcx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xce; + (* MULX4 (% rcx,% rax) (% rdx,% r14) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd9; + (* ADOX (% r11) (% rcx) *) + 0xc4; 0x42; 0xfb; 0xf6; 0xe7; + (* MULX4 (% r12,% rax) (% rdx,% r15) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADCX (% r12) (% rbx) *) + 0x49; 0x8d; 0x44; 0x24; 0x01; + (* LEA (% rax) (%% (r12,1)) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xc8; + (* MULX4 (% rcx,% rax) (% rdx,% rax) *) + 0x49; 0x01; 0xc0; (* ADD (% r8) (% rax) *) + 0x49; 0x11; 0xc9; (* ADC (% r9) (% rcx) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x48; 0x19; 0xc0; (* SBB (% rax) (% rax) *) + 0x48; 0xf7; 0xd0; (* NOT (% rax) *) + 0x48; 0x21; 0xd0; (* AND (% rax) (% rdx) *) + 0x49; 0x29; 0xc0; (* SUB (% r8) (% rax) *) + 0x49; 0x19; 0xd9; (* SBB (% r9) (% rbx) *) + 0x49; 0x19; 0xda; (* SBB (% r10) (% rbx) *) + 0x49; 0x19; 0xdb; (* SBB (% r11) (% rbx) *) + 0x4c; 0x89; 0x04; 0x24; (* MOV (Memop Quadword (%% (rsp,0))) (% r8) *) + 0x4c; 0x89; 0x4c; 0x24; 0x08; + (* MOV (Memop Quadword (%% (rsp,8))) (% r9) *) + 0x4c; 0x89; 0x54; 0x24; 0x10; + (* MOV (Memop Quadword (%% (rsp,16))) (% r10) *) + 0x4c; 0x89; 0x5c; 0x24; 0x18; + (* MOV (Memop Quadword (%% (rsp,24))) (% r11) *) + 0x4c; 0x8b; 0x5e; 0x38; (* MOV (% r11) (Memop Quadword (%% (rsi,56))) *) + 0x4c; 0x8b; 0x56; 0x30; (* MOV (% r10) (Memop Quadword (%% (rsi,48))) *) + 0x48; 0xb8; 0xd1; 0x03; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rax) (Imm64 (word 4294968273)) *) + 0x48; 0x31; 0xd2; (* XOR (% rdx) (% rdx) *) + 0x4d; 0x0f; 0xa4; 0xd3; 0x01; + (* SHLD (% r11) (% r10) (Imm8 (word 1)) *) + 0x48; 0x0f; 0x43; 0xc2; (* CMOVAE (% rax) (% rdx) *) + 0x4c; 0x8b; 0x4e; 0x28; (* MOV (% r9) (Memop Quadword (%% (rsi,40))) *) + 0x4d; 0x0f; 0xa4; 0xca; 0x01; + (* SHLD (% r10) (% r9) (Imm8 (word 1)) *) + 0x4c; 0x8b; 0x46; 0x20; (* MOV (% r8) (Memop Quadword (%% (rsi,32))) *) + 0x4d; 0x0f; 0xa4; 0xc1; 0x01; + (* SHLD (% r9) (% r8) (Imm8 (word 1)) *) + 0x49; 0xd1; 0xe0; (* SHL (% r8) (Imm8 (word 1)) *) + 0x49; 0x01; 0xc0; (* ADD (% r8) (% rax) *) + 0x49; 0x11; 0xd1; (* ADC (% r9) (% rdx) *) + 0x49; 0x11; 0xd2; (* ADC (% r10) (% rdx) *) + 0x49; 0x11; 0xd3; (* ADC (% r11) (% rdx) *) + 0x4c; 0x89; 0x44; 0x24; 0x60; + (* MOV (Memop Quadword (%% (rsp,96))) (% r8) *) + 0x4c; 0x89; 0x4c; 0x24; 0x68; + (* MOV (Memop Quadword (%% (rsp,104))) (% r9) *) + 0x4c; 0x89; 0x54; 0x24; 0x70; + (* MOV (Memop Quadword (%% (rsp,112))) (% r10) *) + 0x4c; 0x89; 0x5c; 0x24; 0x78; + (* MOV (Memop Quadword (%% (rsp,120))) (% r11) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x54; 0x24; 0x20; + (* MOV (% rdx) (Memop Quadword (%% (rsp,32))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x0e; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsi,0))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x56; 0x08; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsi,8))) *) + 0x49; 0x01; 0xc1; (* ADD (% r9) (% rax) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x5e; 0x10; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsi,16))) *) + 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x66; 0x18; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsi,24))) *) + 0x49; 0x11; 0xc3; (* ADC (% r11) (% rax) *) + 0x49; 0x11; 0xcc; (* ADC (% r12) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x54; 0x24; 0x28; + (* MOV (% rdx) (Memop Quadword (%% (rsp,40))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1e; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x6e; 0x18; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsi,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADOX (% r13) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADCX (% r13) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x54; 0x24; 0x30; + (* MOV (% rdx) (Memop Quadword (%% (rsp,48))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1e; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x76; 0x18; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsi,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADOX (% r14) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADCX (% r14) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x54; 0x24; 0x38; + (* MOV (% rdx) (Memop Quadword (%% (rsp,56))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1e; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x7e; 0x18; + (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsi,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% rcx) *) + 0x48; 0xba; 0xd1; 0x03; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294968273)) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdc; + (* MULX4 (% rbx,% rax) (% rdx,% r12) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdd; + (* MULX4 (% rbx,% rax) (% rdx,% r13) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xde; + (* MULX4 (% rbx,% rax) (% rdx,% r14) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0x42; 0xfb; 0xf6; 0xe7; + (* MULX4 (% r12,% rax) (% rdx,% r15) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADOX (% r12) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADCX (% r12) (% rcx) *) + 0x4c; 0x89; 0x84; 0x24; 0x40; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,320))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0x48; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,328))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0x50; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,336))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0x58; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,344))) (% r11) *) + 0x4c; 0x89; 0xa4; 0x24; 0x60; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,352))) (% r12) *) + 0x48; 0x8b; 0x14; 0x24; (* MOV (% rdx) (Memop Quadword (%% (rsp,0))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0xfa; + (* MULX4 (% r15,% r8) (% rdx,% rdx) *) + 0xc4; 0x62; 0xb3; 0xf6; 0x54; 0x24; 0x08; + (* MULX4 (% r10,% r9) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0xc4; 0x62; 0xa3; 0xf6; 0x64; 0x24; 0x18; + (* MULX4 (% r12,% r11) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x48; 0x8b; 0x54; 0x24; 0x10; + (* MOV (% rdx) (Memop Quadword (%% (rsp,16))) *) + 0xc4; 0x62; 0x93; 0xf6; 0x74; 0x24; 0x18; + (* MULX4 (% r14,% r13) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x0c; 0x24; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd9; + (* ADOX (% r11) (% rcx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x4c; 0x24; 0x08; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADOX (% r12) (% rcx) *) + 0x48; 0x8b; 0x54; 0x24; 0x18; + (* MOV (% rdx) (Memop Quadword (%% (rsp,24))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x4c; 0x24; 0x08; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADOX (% r13) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADCX (% r13) (% rbx) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% r9) (% r9) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xcf; + (* ADOX (% r9) (% r15) *) + 0x48; 0x8b; 0x54; 0x24; 0x08; + (* MOV (% rdx) (Memop Quadword (%% (rsp,8))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xd2; + (* ADCX (% r10) (% r10) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADOX (% r10) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% r11) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% r11) (% rdx) *) + 0x48; 0x8b; 0x54; 0x24; 0x10; + (* MOV (% rdx) (Memop Quadword (%% (rsp,16))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xe4; + (* ADCX (% r12) (% r12) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADOX (% r12) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% r13) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xea; + (* ADOX (% r13) (% rdx) *) + 0x48; 0x8b; 0x54; 0x24; 0x18; + (* MOV (% rdx) (Memop Quadword (%% (rsp,24))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xfa; + (* MULX4 (% r15,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf6; + (* ADCX (% r14) (% r14) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% rax) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADCX (% r15) (% rbx) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x48; 0xba; 0xd1; 0x03; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294968273)) *) + 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xcc; + (* MULX4 (% rcx,% rax) (% rdx,% r12) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc9; + (* ADOX (% r9) (% rcx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xcd; + (* MULX4 (% rcx,% rax) (% rdx,% r13) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd1; + (* ADOX (% r10) (% rcx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xce; + (* MULX4 (% rcx,% rax) (% rdx,% r14) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd9; + (* ADOX (% r11) (% rcx) *) + 0xc4; 0x42; 0xfb; 0xf6; 0xe7; + (* MULX4 (% r12,% rax) (% rdx,% r15) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADCX (% r12) (% rbx) *) + 0x4c; 0x89; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,128))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,136))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,144))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,152))) (% r11) *) + 0x4c; 0x89; 0xa4; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,160))) (% r12) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x54; 0x24; 0x60; + (* MOV (% rdx) (Memop Quadword (%% (rsp,96))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x4e; 0x40; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsi,64))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x56; 0x48; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsi,72))) *) + 0x49; 0x01; 0xc1; (* ADD (% r9) (% rax) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x5e; 0x50; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsi,80))) *) + 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x66; 0x58; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsi,88))) *) + 0x49; 0x11; 0xc3; (* ADC (% r11) (% rax) *) + 0x49; 0x11; 0xcc; (* ADC (% r12) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x54; 0x24; 0x68; + (* MOV (% rdx) (Memop Quadword (%% (rsp,104))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x40; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,64))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x6e; 0x58; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsi,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADOX (% r13) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADCX (% r13) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x54; 0x24; 0x70; + (* MOV (% rdx) (Memop Quadword (%% (rsp,112))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x40; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,64))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x76; 0x58; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsi,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADOX (% r14) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADCX (% r14) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x54; 0x24; 0x78; + (* MOV (% rdx) (Memop Quadword (%% (rsp,120))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x40; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,64))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x7e; 0x58; + (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsi,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% rcx) *) + 0x48; 0xba; 0xd1; 0x03; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294968273)) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdc; + (* MULX4 (% rbx,% rax) (% rdx,% r12) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdd; + (* MULX4 (% rbx,% rax) (% rdx,% r13) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xde; + (* MULX4 (% rbx,% rax) (% rdx,% r14) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0x42; 0xfb; 0xf6; 0xe7; + (* MULX4 (% r12,% rax) (% rdx,% r15) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADOX (% r12) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADCX (% r12) (% rcx) *) + 0x49; 0x8d; 0x44; 0x24; 0x01; + (* LEA (% rax) (%% (r12,1)) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% rax) *) + 0x49; 0x01; 0xc0; (* ADD (% r8) (% rax) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) + 0x49; 0x11; 0xcb; (* ADC (% r11) (% rcx) *) + 0x48; 0x0f; 0x42; 0xd1; (* CMOVB (% rdx) (% rcx) *) + 0x49; 0x29; 0xd0; (* SUB (% r8) (% rdx) *) + 0x49; 0x19; 0xc9; (* SBB (% r9) (% rcx) *) + 0x49; 0x19; 0xca; (* SBB (% r10) (% rcx) *) + 0x49; 0x19; 0xcb; (* SBB (% r11) (% rcx) *) + 0x4c; 0x89; 0x47; 0x40; (* MOV (Memop Quadword (%% (rdi,64))) (% r8) *) + 0x4c; 0x89; 0x4f; 0x48; (* MOV (Memop Quadword (%% (rdi,72))) (% r9) *) + 0x4c; 0x89; 0x57; 0x50; (* MOV (Memop Quadword (%% (rdi,80))) (% r10) *) + 0x4c; 0x89; 0x5f; 0x58; (* MOV (Memop Quadword (%% (rdi,88))) (% r11) *) + 0x49; 0xb8; 0x00; 0x00; 0x00; 0x00; 0x5e; 0xf8; 0xff; 0xff; + (* MOV (% r8) (Imm64 (word 18446735681343455232)) *) + 0x4c; 0x2b; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; + (* SUB (% r8) (Memop Quadword (%% (rsp,128))) *) + 0x49; 0xc7; 0xc1; 0xfd; 0xff; 0xff; 0xff; + (* MOV (% r9) (Imm32 (word 4294967293)) *) + 0x4c; 0x1b; 0x8c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* SBB (% r9) (Memop Quadword (%% (rsp,136))) *) + 0x49; 0xc7; 0xc2; 0xff; 0xff; 0xff; 0xff; + (* MOV (% r10) (Imm32 (word 4294967295)) *) + 0x4c; 0x1b; 0x94; 0x24; 0x90; 0x00; 0x00; 0x00; + (* SBB (% r10) (Memop Quadword (%% (rsp,144))) *) + 0x49; 0xc7; 0xc3; 0xff; 0xff; 0xff; 0xff; + (* MOV (% r11) (Imm32 (word 4294967295)) *) + 0x4c; 0x1b; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* SBB (% r11) (Memop Quadword (%% (rsp,152))) *) + 0x49; 0xbc; 0xff; 0xff; 0xff; 0xff; 0x01; 0x00; 0x00; 0x00; + (* MOV (% r12) (Imm64 (word 8589934591)) *) + 0x4c; 0x1b; 0xa4; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* SBB (% r12) (Memop Quadword (%% (rsp,160))) *) + 0x48; 0xc7; 0xc2; 0x09; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm32 (word 9)) *) + 0xc4; 0xc2; 0xbb; 0xf6; 0xc0; + (* MULX4 (% rax,% r8) (% rdx,% r8) *) + 0xc4; 0xc2; 0xb3; 0xf6; 0xc9; + (* MULX4 (% rcx,% r9) (% rdx,% r9) *) + 0x49; 0x01; 0xc1; (* ADD (% r9) (% rax) *) + 0xc4; 0xc2; 0xab; 0xf6; 0xc2; + (* MULX4 (% rax,% r10) (% rdx,% r10) *) + 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) + 0xc4; 0xc2; 0xa3; 0xf6; 0xcb; + (* MULX4 (% rcx,% r11) (% rdx,% r11) *) + 0x49; 0x11; 0xc3; (* ADC (% r11) (% rax) *) + 0xc4; 0xc2; 0x9b; 0xf6; 0xc4; + (* MULX4 (% rax,% r12) (% rdx,% r12) *) + 0x49; 0x11; 0xcc; (* ADC (% r12) (% rcx) *) + 0x48; 0xc7; 0xc2; 0x0c; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm32 (word 12)) *) + 0x48; 0x31; 0xdb; (* XOR (% rbx) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x8c; 0x24; 0x40; 0x01; 0x00; 0x00; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsp,320))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc9; + (* ADOX (% r9) (% rcx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x8c; 0x24; 0x48; 0x01; 0x00; 0x00; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsp,328))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd1; + (* ADOX (% r10) (% rcx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x8c; 0x24; 0x50; 0x01; 0x00; 0x00; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsp,336))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd9; + (* ADOX (% r11) (% rcx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x8c; 0x24; 0x58; 0x01; 0x00; 0x00; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsp,344))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADOX (% r12) (% rcx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x8c; 0x24; 0x60; 0x01; 0x00; 0x00; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsp,352))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0x49; 0x8d; 0x44; 0x24; 0x01; + (* LEA (% rax) (%% (r12,1)) *) + 0x48; 0xb9; 0xd1; 0x03; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rcx) (Imm64 (word 4294968273)) *) + 0x48; 0xf7; 0xe1; (* MUL2 (% rdx,% rax) (% rcx) *) + 0x49; 0x01; 0xc0; (* ADD (% r8) (% rax) *) + 0x49; 0x11; 0xd1; (* ADC (% r9) (% rdx) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x48; 0x0f; 0x42; 0xcb; (* CMOVB (% rcx) (% rbx) *) + 0x49; 0x29; 0xc8; (* SUB (% r8) (% rcx) *) + 0x4c; 0x89; 0x44; 0x24; 0x40; + (* MOV (Memop Quadword (%% (rsp,64))) (% r8) *) + 0x49; 0x19; 0xd9; (* SBB (% r9) (% rbx) *) + 0x4c; 0x89; 0x4c; 0x24; 0x48; + (* MOV (Memop Quadword (%% (rsp,72))) (% r9) *) + 0x49; 0x19; 0xda; (* SBB (% r10) (% rbx) *) + 0x4c; 0x89; 0x54; 0x24; 0x50; + (* MOV (Memop Quadword (%% (rsp,80))) (% r10) *) + 0x49; 0x19; 0xdb; (* SBB (% r11) (% rbx) *) + 0x4c; 0x89; 0x5c; 0x24; 0x58; + (* MOV (Memop Quadword (%% (rsp,88))) (% r11) *) + 0x48; 0x8b; 0x54; 0x24; 0x20; + (* MOV (% rdx) (Memop Quadword (%% (rsp,32))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0xfa; + (* MULX4 (% r15,% r8) (% rdx,% rdx) *) + 0xc4; 0x62; 0xb3; 0xf6; 0x54; 0x24; 0x28; + (* MULX4 (% r10,% r9) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0xc4; 0x62; 0xa3; 0xf6; 0x64; 0x24; 0x38; + (* MULX4 (% r12,% r11) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x48; 0x8b; 0x54; 0x24; 0x30; + (* MOV (% rdx) (Memop Quadword (%% (rsp,48))) *) + 0xc4; 0x62; 0x93; 0xf6; 0x74; 0x24; 0x38; + (* MULX4 (% r14,% r13) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x4c; 0x24; 0x20; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd9; + (* ADOX (% r11) (% rcx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x4c; 0x24; 0x28; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADOX (% r12) (% rcx) *) + 0x48; 0x8b; 0x54; 0x24; 0x38; + (* MOV (% rdx) (Memop Quadword (%% (rsp,56))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x4c; 0x24; 0x28; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADOX (% r13) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADCX (% r13) (% rbx) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% r9) (% r9) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xcf; + (* ADOX (% r9) (% r15) *) + 0x48; 0x8b; 0x54; 0x24; 0x28; + (* MOV (% rdx) (Memop Quadword (%% (rsp,40))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xd2; + (* ADCX (% r10) (% r10) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADOX (% r10) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% r11) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% r11) (% rdx) *) + 0x48; 0x8b; 0x54; 0x24; 0x30; + (* MOV (% rdx) (Memop Quadword (%% (rsp,48))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xe4; + (* ADCX (% r12) (% r12) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADOX (% r12) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% r13) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xea; + (* ADOX (% r13) (% rdx) *) + 0x48; 0x8b; 0x54; 0x24; 0x38; + (* MOV (% rdx) (Memop Quadword (%% (rsp,56))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xfa; + (* MULX4 (% r15,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf6; + (* ADCX (% r14) (% r14) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% rax) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADCX (% r15) (% rbx) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x48; 0xba; 0xd1; 0x03; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294968273)) *) + 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xcc; + (* MULX4 (% rcx,% rax) (% rdx,% r12) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc9; + (* ADOX (% r9) (% rcx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xcd; + (* MULX4 (% rcx,% rax) (% rdx,% r13) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd1; + (* ADOX (% r10) (% rcx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xce; + (* MULX4 (% rcx,% rax) (% rdx,% r14) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd9; + (* ADOX (% r11) (% rcx) *) + 0xc4; 0x42; 0xfb; 0xf6; 0xe7; + (* MULX4 (% r12,% rax) (% rdx,% r15) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADCX (% r12) (% rbx) *) + 0x4c; 0x89; 0x84; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,192))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,200))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,208))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,216))) (% r11) *) + 0x4c; 0x89; 0xa4; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,224))) (% r12) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x54; 0x24; 0x40; + (* MOV (% rdx) (Memop Quadword (%% (rsp,64))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x0c; 0x24; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x54; 0x24; 0x08; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x49; 0x01; 0xc1; (* ADD (% r9) (% rax) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x64; 0x24; 0x18; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x49; 0x11; 0xc3; (* ADC (% r11) (% rax) *) + 0x49; 0x11; 0xcc; (* ADC (% r12) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x54; 0x24; 0x48; + (* MOV (% rdx) (Memop Quadword (%% (rsp,72))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x6c; 0x24; 0x18; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADOX (% r13) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADCX (% r13) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x54; 0x24; 0x50; + (* MOV (% rdx) (Memop Quadword (%% (rsp,80))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x74; 0x24; 0x18; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADOX (% r14) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADCX (% r14) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x54; 0x24; 0x58; + (* MOV (% rdx) (Memop Quadword (%% (rsp,88))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x7c; 0x24; 0x18; + (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% rcx) *) + 0x48; 0xba; 0xd1; 0x03; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294968273)) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdc; + (* MULX4 (% rbx,% rax) (% rdx,% r12) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdd; + (* MULX4 (% rbx,% rax) (% rdx,% r13) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xde; + (* MULX4 (% rbx,% rax) (% rdx,% r14) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0x42; 0xfb; 0xf6; 0xe7; + (* MULX4 (% r12,% rax) (% rdx,% r15) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADOX (% r12) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADCX (% r12) (% rcx) *) + 0x4c; 0x89; 0x84; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,256))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,264))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,272))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,280))) (% r11) *) + 0x4c; 0x89; 0xa4; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,288))) (% r12) *) + 0x4c; 0x8b; 0xa4; 0x24; 0x60; 0x01; 0x00; 0x00; + (* MOV (% r12) (Memop Quadword (%% (rsp,352))) *) + 0x4c; 0x8b; 0x9c; 0x24; 0x58; 0x01; 0x00; 0x00; + (* MOV (% r11) (Memop Quadword (%% (rsp,344))) *) + 0x4d; 0x0f; 0xa4; 0xdc; 0x02; + (* SHLD (% r12) (% r11) (Imm8 (word 2)) *) + 0x4c; 0x8b; 0x94; 0x24; 0x50; 0x01; 0x00; 0x00; + (* MOV (% r10) (Memop Quadword (%% (rsp,336))) *) + 0x4d; 0x0f; 0xa4; 0xd3; 0x02; + (* SHLD (% r11) (% r10) (Imm8 (word 2)) *) + 0x4c; 0x8b; 0x8c; 0x24; 0x48; 0x01; 0x00; 0x00; + (* MOV (% r9) (Memop Quadword (%% (rsp,328))) *) + 0x4d; 0x0f; 0xa4; 0xca; 0x02; + (* SHLD (% r10) (% r9) (Imm8 (word 2)) *) + 0x4c; 0x8b; 0x84; 0x24; 0x40; 0x01; 0x00; 0x00; + (* MOV (% r8) (Memop Quadword (%% (rsp,320))) *) + 0x4d; 0x0f; 0xa4; 0xc1; 0x02; + (* SHLD (% r9) (% r8) (Imm8 (word 2)) *) + 0x49; 0xc1; 0xe0; 0x02; (* SHL (% r8) (Imm8 (word 2)) *) + 0x4c; 0x2b; 0x44; 0x24; 0x40; + (* SUB (% r8) (Memop Quadword (%% (rsp,64))) *) + 0x4c; 0x1b; 0x4c; 0x24; 0x48; + (* SBB (% r9) (Memop Quadword (%% (rsp,72))) *) + 0x4c; 0x1b; 0x54; 0x24; 0x50; + (* SBB (% r10) (Memop Quadword (%% (rsp,80))) *) + 0x4c; 0x1b; 0x5c; 0x24; 0x58; + (* SBB (% r11) (Memop Quadword (%% (rsp,88))) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x49; 0x8d; 0x44; 0x24; 0x01; + (* LEA (% rax) (%% (r12,1)) *) + 0x48; 0xb9; 0xd1; 0x03; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rcx) (Imm64 (word 4294968273)) *) + 0x48; 0xf7; 0xe1; (* MUL2 (% rdx,% rax) (% rcx) *) + 0x48; 0x31; 0xdb; (* XOR (% rbx) (% rbx) *) + 0x49; 0x01; 0xc0; (* ADD (% r8) (% rax) *) + 0x49; 0x11; 0xd1; (* ADC (% r9) (% rdx) *) + 0x49; 0x83; 0xd2; 0x00; (* ADC (% r10) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd3; 0x00; (* ADC (% r11) (Imm8 (word 0)) *) + 0x48; 0x0f; 0x42; 0xcb; (* CMOVB (% rcx) (% rbx) *) + 0x49; 0x29; 0xc8; (* SUB (% r8) (% rcx) *) + 0x4c; 0x89; 0x07; (* MOV (Memop Quadword (%% (rdi,0))) (% r8) *) + 0x49; 0x19; 0xd9; (* SBB (% r9) (% rbx) *) + 0x4c; 0x89; 0x4f; 0x08; (* MOV (Memop Quadword (%% (rdi,8))) (% r9) *) + 0x49; 0x19; 0xda; (* SBB (% r10) (% rbx) *) + 0x4c; 0x89; 0x57; 0x10; (* MOV (Memop Quadword (%% (rdi,16))) (% r10) *) + 0x49; 0x19; 0xdb; (* SBB (% r11) (% rbx) *) + 0x4c; 0x89; 0x5f; 0x18; (* MOV (Memop Quadword (%% (rdi,24))) (% r11) *) + 0x49; 0xb8; 0x00; 0x00; 0x00; 0x00; 0x5e; 0xf8; 0xff; 0xff; + (* MOV (% r8) (Imm64 (word 18446735681343455232)) *) + 0x4c; 0x2b; 0x84; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* SUB (% r8) (Memop Quadword (%% (rsp,192))) *) + 0x49; 0xc7; 0xc1; 0xfd; 0xff; 0xff; 0xff; + (* MOV (% r9) (Imm32 (word 4294967293)) *) + 0x4c; 0x1b; 0x8c; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* SBB (% r9) (Memop Quadword (%% (rsp,200))) *) + 0x49; 0xc7; 0xc2; 0xff; 0xff; 0xff; 0xff; + (* MOV (% r10) (Imm32 (word 4294967295)) *) + 0x4c; 0x1b; 0x94; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* SBB (% r10) (Memop Quadword (%% (rsp,208))) *) + 0x49; 0xc7; 0xc3; 0xff; 0xff; 0xff; 0xff; + (* MOV (% r11) (Imm32 (word 4294967295)) *) + 0x4c; 0x1b; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* SBB (% r11) (Memop Quadword (%% (rsp,216))) *) + 0x49; 0xbc; 0xff; 0xff; 0xff; 0xff; 0x01; 0x00; 0x00; 0x00; + (* MOV (% r12) (Imm64 (word 8589934591)) *) + 0x4c; 0x1b; 0xa4; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* SBB (% r12) (Memop Quadword (%% (rsp,224))) *) + 0x4d; 0x0f; 0xa4; 0xdc; 0x03; + (* SHLD (% r12) (% r11) (Imm8 (word 3)) *) + 0x4d; 0x0f; 0xa4; 0xd3; 0x03; + (* SHLD (% r11) (% r10) (Imm8 (word 3)) *) + 0x4d; 0x0f; 0xa4; 0xca; 0x03; + (* SHLD (% r10) (% r9) (Imm8 (word 3)) *) + 0x4d; 0x0f; 0xa4; 0xc1; 0x03; + (* SHLD (% r9) (% r8) (Imm8 (word 3)) *) + 0x49; 0xc1; 0xe0; 0x03; (* SHL (% r8) (Imm8 (word 3)) *) + 0x48; 0xc7; 0xc2; 0x03; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm32 (word 3)) *) + 0x48; 0x31; 0xdb; (* XOR (% rbx) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x8c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc9; + (* ADOX (% r9) (% rcx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x8c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd1; + (* ADOX (% r10) (% rcx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x8c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd9; + (* ADOX (% r11) (% rcx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x8c; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADOX (% r12) (% rcx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x8c; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsp,288))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0x49; 0x8d; 0x44; 0x24; 0x01; + (* LEA (% rax) (%% (r12,1)) *) + 0x48; 0xb9; 0xd1; 0x03; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rcx) (Imm64 (word 4294968273)) *) + 0x48; 0xf7; 0xe1; (* MUL2 (% rdx,% rax) (% rcx) *) + 0x49; 0x01; 0xc0; (* ADD (% r8) (% rax) *) + 0x49; 0x11; 0xd1; (* ADC (% r9) (% rdx) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x48; 0x0f; 0x42; 0xcb; (* CMOVB (% rcx) (% rbx) *) + 0x49; 0x29; 0xc8; (* SUB (% r8) (% rcx) *) + 0x4c; 0x89; 0x47; 0x20; (* MOV (Memop Quadword (%% (rdi,32))) (% r8) *) + 0x49; 0x19; 0xd9; (* SBB (% r9) (% rbx) *) + 0x4c; 0x89; 0x4f; 0x28; (* MOV (Memop Quadword (%% (rdi,40))) (% r9) *) + 0x49; 0x19; 0xda; (* SBB (% r10) (% rbx) *) + 0x4c; 0x89; 0x57; 0x30; (* MOV (Memop Quadword (%% (rdi,48))) (% r10) *) + 0x49; 0x19; 0xdb; (* SBB (% r11) (% rbx) *) + 0x4c; 0x89; 0x5f; 0x38; (* MOV (Memop Quadword (%% (rdi,56))) (% r11) *) + 0x48; 0x81; 0xc4; 0x80; 0x01; 0x00; 0x00; + (* ADD (% rsp) (Imm32 (word 384)) *) + 0x41; 0x5f; (* POP (% r15) *) + 0x41; 0x5e; (* POP (% r14) *) + 0x41; 0x5d; (* POP (% r13) *) + 0x41; 0x5c; (* POP (% r12) *) + 0x5b; (* POP (% rbx) *) + 0xc3 (* RET *) +];; + +let SECP256K1_JDOUBLE_EXEC = X86_MK_CORE_EXEC_RULE secp256k1_jdouble_mc;; + +(* ------------------------------------------------------------------------- *) +(* Common supporting definitions and lemmas for component proofs. *) +(* ------------------------------------------------------------------------- *) + +let p_256k1 = new_definition `p_256k1 = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F`;; + +let p256k1redlemma = prove + (`!n. n <= (2 EXP 64 - 1) * (p_256k1 - 1) + ==> let q = n DIV 2 EXP 256 + 1 in + q < 2 EXP 64 /\ + q * p_256k1 <= n + p_256k1 /\ + n < q * p_256k1 + p_256k1`, + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN REWRITE_TAC[p_256k1] THEN ARITH_TAC);; + +let FORALL_INT_CASES' = prove + (`!P. (!x:int. P x) <=> (!n. P(&n)) /\ (!n. ~(n = 0) ==> P(-- &n))`, + GEN_TAC THEN GEN_REWRITE_TAC LAND_CONV [FORALL_INT_CASES] THEN + MESON_TAC[INT_NEG_EQ_0; INT_OF_NUM_EQ]);; + +let p256k1shortintredlemma = prove + (`!n. --(&p_256k1) <= n /\ n <= &17179873097 * &p_256k1 + ==> let q = (&2 pow 256 + n) div &2 pow 256 in + &0 <= q /\ q < &2 pow 35 /\ + q < &2 pow 64 /\ + q * &p_256k1 <= n + &p_256k1 /\ + n < q * &p_256k1 + &p_256k1`, + ONCE_REWRITE_TAC[INT_ARITH `&2 pow 256 + n:int = &1 * &2 pow 256 + n`] THEN + SIMP_TAC[INT_DIV_MUL_ADD; INT_POW_EQ_0; INT_OF_NUM_EQ; ARITH_EQ] THEN + REWRITE_TAC[FORALL_INT_CASES'; INT_DIV_LNEG] THEN + CONV_TAC(ONCE_DEPTH_CONV let_CONV) THEN + REWRITE_TAC[INT_OF_NUM_CLAUSES; INT_OF_NUM_DIV; INT_OF_NUM_REM] THEN + CONJ_TAC THENL [REWRITE_TAC[p_256k1] THEN ARITH_TAC; ALL_TAC] THEN + X_GEN_TAC `n:num` THEN DISCH_TAC THEN + REWRITE_TAC[INT_LE_NEG2; INT_OF_NUM_CLAUSES] THEN + DISCH_THEN(ASSUME_TAC o CONJUNCT1) THEN + SUBGOAL_THEN `n < 2 EXP 256` ASSUME_TAC THENL + [UNDISCH_TAC `n <= p_256k1` THEN REWRITE_TAC[p_256k1] THEN ARITH_TAC; + ASM_SIMP_TAC[DIV_LT; MOD_LT]] THEN + UNDISCH_TAC `n <= p_256k1` THEN + REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES] THEN CONV_TAC INT_REDUCE_CONV THEN + REWRITE_TAC[p_256k1] THEN INT_ARITH_TAC);; + +let secp256k1 = define + `secp256k1 = (integer_mod_ring p_256k1,&0:int,&7:int)`;; + +let secp256k1_encode = new_definition + `secp256k1_encode = modular_encode(256,p_256k1)`;; + +let nintlemma = prove + (`&(num_of_int(x rem &p_256k1)) = x rem &p_256k1`, + MATCH_MP_TAC INT_OF_NUM_OF_INT THEN MATCH_MP_TAC INT_REM_POS THEN + REWRITE_TAC[INT_OF_NUM_EQ; p_256k1] THEN CONV_TAC NUM_REDUCE_CONV);; + +let unilemma1 = prove + (`&x = a rem &p_256k1 ==> x < p_256k1 /\ &x = a rem &p_256k1`, + SIMP_TAC[GSYM INT_OF_NUM_LT; INT_LT_REM_EQ; p_256k1] THEN INT_ARITH_TAC);; + +let unilemma2 = prove + (`X = num_of_int(x rem &p_256k1) ==> X < p_256k1 /\ &X = x rem &p_256k1`, + DISCH_THEN SUBST1_TAC THEN + REWRITE_TAC[GSYM INT_OF_NUM_LT; nintlemma; INT_LT_REM_EQ] THEN + REWRITE_TAC[INT_OF_NUM_LT; p_256k1] THEN CONV_TAC NUM_REDUCE_CONV);; + +let lvs = + ["x_1",[`RSI`;`0`]; + "y_1",[`RSI`;`32`]; + "z_1",[`RSI`;`64`]; + "x_3",[`RDI`;`0`]; + "y_3",[`RDI`;`32`]; + "z_3",[`RDI`;`64`]; + "x_2",[`RSP`;`0`]; + "y_2",[`RSP`;`32`]; + "d",[`RSP`;`64`]; + "tmp",[`RSP`;`96`]; + "x_4",[`RSP`;`128`]; + "y_4",[`RSP`;`192`]; + "dx2",[`RSP`;`256`]; + "xy2",[`RSP`;`320`]];; + +(* ------------------------------------------------------------------------- *) +(* Instances of sqr. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_SQR_P256K1_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE secp256k1_jdouble_mc) 73 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1. + !n. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = n + ==> + nonoverlapping (word pc,0xe0b) (word_add (read p3 t) (word n3),32) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST secp256k1_jdouble_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) s = + n) + (\s. read RIP s = pcout /\ + read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 4)) s = (n EXP 2) MOD p_256k1) + (MAYCHANGE [RIP; RAX; RBX; RCX; RDX; + R8; R9; R10; R11; R12; R13; R14; R15] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 4)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "n_" o lhand o concl) THEN + + (*** The initial squaring block, very similar to bignum_sqr_4_8 ***) + + X86_ACCSTEPS_TAC SECP256K1_JDOUBLE_EXEC (1--41) (1--41) THEN + MAP_EVERY ABBREV_TAC + [`l = bignum_of_wordlist[mullo_s2; sum_s23; sum_s27; sum_s29]`; + `h = bignum_of_wordlist[sum_s33; sum_s35; sum_s39; sum_s41]`] THEN + SUBGOAL_THEN `2 EXP 256 * h + l = n EXP 2` (SUBST1_TAC o SYM) THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"; "n"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_ARITH_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** The initial modular reduction of the high part ***) + + SUBGOAL_THEN + `(2 EXP 256 * h + l) MOD p_256k1 = (4294968273 * h + l) MOD p_256k1` + SUBST1_TAC THENL + [ONCE_REWRITE_TAC[GSYM MOD_ADD_MOD] THEN + ONCE_REWRITE_TAC[GSYM MOD_MULT_LMOD] THEN + REWRITE_TAC[p_256k1] THEN CONV_TAC NUM_REDUCE_CONV; + ALL_TAC] THEN + + (*** Instantiate the quotient approximation lemma ***) + + MP_TAC(SPEC `4294968273 * h + l` p256k1redlemma) THEN ANTS_TAC THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"] THEN REWRITE_TAC[p_256k1] THEN + CONV_TAC NUM_REDUCE_CONV THEN BOUNDER_TAC[]; + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN STRIP_TAC] THEN + + (*** Reduction from 8 digits to 5 digits ***) + + X86_ACCSTEPS_TAC SECP256K1_JDOUBLE_EXEC (42--56) (42--56) THEN + ABBREV_TAC + `ca = bignum_of_wordlist[sum_s45; sum_s48; sum_s51; sum_s54; sum_s56]` THEN + SUBGOAL_THEN `4294968273 * h + l = ca` SUBST_ALL_TAC THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"; "ca"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_ARITH_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Quotient estimate computation ***) + + SUBGOAL_THEN `ca DIV 2 EXP 256 = val(sum_s56:int64)` SUBST_ALL_TAC THENL + [EXPAND_TAC "ca" THEN CONV_TAC(LAND_CONV BIGNUM_OF_WORDLIST_DIV_CONV) THEN + REFL_TAC; + FIRST_ASSUM(ASSUME_TAC o MATCH_MP (ARITH_RULE + `n + 1 < 2 EXP 64 ==> n < 2 EXP 64 - 1`))] THEN + + X86_STEPS_TAC SECP256K1_JDOUBLE_EXEC [57] THEN + ABBREV_TAC `q:int64 = word_add sum_s56 (word 1)` THEN + SUBGOAL_THEN `val(sum_s56:int64) + 1 = val(q:int64)` SUBST_ALL_TAC THENL + [EXPAND_TAC "q" THEN REWRITE_TAC[VAL_WORD_ADD; VAL_WORD_1] THEN + ASM_SIMP_TAC[DIMINDEX_64; MOD_LT]; + ALL_TAC] THEN + + (*** The rest of the computation ***) + + X86_ACCSTEPS_TAC SECP256K1_JDOUBLE_EXEC + [58;59;60;61;62;66;67;68;69] (58--73) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC MOD_UNIQ_BALANCED_REAL THEN + MAP_EVERY EXISTS_TAC [`val(q:int64)`; `256`] THEN ASM_REWRITE_TAC[] THEN + CONJ_TAC THENL [REWRITE_TAC[p_256k1] THEN ARITH_TAC; ALL_TAC] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN + + (*** Comparison computation and then the rest is easy ***) + + SUBGOAL_THEN `ca < val(q:int64) * p_256k1 <=> ~carry_s62` SUBST1_TAC THENL + [CONV_TAC SYM_CONV THEN MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN + EXISTS_TAC `256` THEN EXPAND_TAC "ca" THEN + REWRITE_TAC[p_256k1; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + REWRITE_TAC[REAL_BITVAL_NOT] THEN + SUBGOAL_THEN `&(val(sum_s56:int64)):real = &(val(q:int64)) - &1` + SUBST1_TAC THENL + [FIRST_X_ASSUM(MP_TAC o MATCH_MP (ARITH_RULE + `n < 2 EXP 64 - 1 ==> n + 1 < 2 EXP 64`)) THEN + UNDISCH_THEN `word_add sum_s56 (word 1):int64 = q` (SUBST1_TAC o SYM) THEN + SIMP_TAC[VAL_WORD_ADD; VAL_WORD_1; DIMINDEX_64; MOD_LT] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN REAL_ARITH_TAC; + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]]; + EXPAND_TAC "ca" THEN + REWRITE_TAC[REAL_BITVAL_NOT] THEN + REWRITE_TAC[p_256k1; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + RULE_ASSUM_TAC(REWRITE_RULE[WORD_UNMASK_64]) THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + ASM_CASES_TAC `carry_s62:bool` THEN + ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN CONV_TAC WORD_REDUCE_CONV THEN + REAL_INTEGER_TAC]);; + +(* ------------------------------------------------------------------------- *) +(* Instances of mul. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_MUL_P256K1_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE secp256k1_jdouble_mc) 85 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) t = n + ==> + nonoverlapping (word pc,0xe0b) (word_add (read p3 t) (word n3),32) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST secp256k1_jdouble_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) s = + n) + (\s. read RIP s = pcout /\ + read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 4)) s = (m * n) MOD p_256k1) + (MAYCHANGE [RIP; RAX; RBX; RCX; RDX; + R8; R9; R10; R11; R12; R13; R14; R15] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 4)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s1" THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "m_" o lhand o concl) THEN + + (*** The initial multiplication block, very similar to bignum_mul_4_8 ***) + + X86_ACCSTEPS_TAC SECP256K1_JDOUBLE_EXEC (2--56) (2--56) THEN + MAP_EVERY ABBREV_TAC + [`l = bignum_of_wordlist[mullo_s4; sum_s15; sum_s30; sum_s45]`; + `h = bignum_of_wordlist[sum_s48; sum_s51; sum_s54; sum_s56]`] THEN + SUBGOAL_THEN `2 EXP 256 * h + l = m * n` (SUBST1_TAC o SYM) THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"; "m"; "n"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_ARITH_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** The initial modular reduction of the high part ***) + + SUBGOAL_THEN + `(2 EXP 256 * h + l) MOD p_256k1 = (4294968273 * h + l) MOD p_256k1` + SUBST1_TAC THENL + [ONCE_REWRITE_TAC[GSYM MOD_ADD_MOD] THEN + ONCE_REWRITE_TAC[GSYM MOD_MULT_LMOD] THEN + REWRITE_TAC[p_256k1] THEN CONV_TAC NUM_REDUCE_CONV; + ALL_TAC] THEN + + (*** Instantiate the quotient approximation lemma ***) + + MP_TAC(SPEC `4294968273 * h + l` p256k1redlemma) THEN ANTS_TAC THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"] THEN REWRITE_TAC[p_256k1] THEN + CONV_TAC NUM_REDUCE_CONV THEN BOUNDER_TAC[]; + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN STRIP_TAC] THEN + + (*** Reduction from 8 digits to 5 digits ***) + + X86_ACCSTEPS_TAC SECP256K1_JDOUBLE_EXEC (57--71) (57--71) THEN + ABBREV_TAC + `ca = bignum_of_wordlist[sum_s60; sum_s63; sum_s66; sum_s69; sum_s71]` THEN + SUBGOAL_THEN `4294968273 * h + l = ca` SUBST_ALL_TAC THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"; "ca"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_ARITH_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Quotient estimate computation ***) + + SUBGOAL_THEN `ca DIV 2 EXP 256 = val(sum_s71:int64)` SUBST_ALL_TAC THENL + [EXPAND_TAC "ca" THEN CONV_TAC(LAND_CONV BIGNUM_OF_WORDLIST_DIV_CONV) THEN + REFL_TAC; + FIRST_ASSUM(ASSUME_TAC o MATCH_MP (ARITH_RULE + `n + 1 < 2 EXP 64 ==> n < 2 EXP 64 - 1`))] THEN + + X86_STEPS_TAC SECP256K1_JDOUBLE_EXEC [72] THEN + ABBREV_TAC `q:int64 = word_add sum_s71 (word 1)` THEN + SUBGOAL_THEN `val(sum_s71:int64) + 1 = val(q:int64)` SUBST_ALL_TAC THENL + [EXPAND_TAC "q" THEN REWRITE_TAC[VAL_WORD_ADD; VAL_WORD_1] THEN + ASM_SIMP_TAC[DIMINDEX_64; MOD_LT]; + ALL_TAC] THEN + + (*** The rest of the computation ***) + + X86_ACCSTEPS_TAC SECP256K1_JDOUBLE_EXEC + [73;74;75;76;77;79;80;81;82] (73--86) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC MOD_UNIQ_BALANCED_REAL THEN + MAP_EVERY EXISTS_TAC [`val(q:int64)`; `256`] THEN ASM_REWRITE_TAC[] THEN + CONJ_TAC THENL [REWRITE_TAC[p_256k1] THEN ARITH_TAC; ALL_TAC] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN + + (*** Comparison computation and then the rest is easy ***) + + SUBGOAL_THEN `ca < val(q:int64) * p_256k1 <=> ~carry_s77` SUBST1_TAC THENL + [CONV_TAC SYM_CONV THEN MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN + EXISTS_TAC `256` THEN EXPAND_TAC "ca" THEN + REWRITE_TAC[p_256k1; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + REWRITE_TAC[REAL_BITVAL_NOT] THEN + SUBGOAL_THEN `&(val(sum_s71:int64)):real = &(val(q:int64)) - &1` + SUBST1_TAC THENL + [FIRST_X_ASSUM(MP_TAC o MATCH_MP (ARITH_RULE + `n < 2 EXP 64 - 1 ==> n + 1 < 2 EXP 64`)) THEN + UNDISCH_THEN `word_add sum_s71 (word 1):int64 = q` (SUBST1_TAC o SYM) THEN + SIMP_TAC[VAL_WORD_ADD; VAL_WORD_1; DIMINDEX_64; MOD_LT] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN REAL_ARITH_TAC; + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]]; + EXPAND_TAC "ca" THEN + REWRITE_TAC[REAL_BITVAL_NOT] THEN + REWRITE_TAC[p_256k1; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + RULE_ASSUM_TAC(REWRITE_RULE[WORD_UNMASK_64]) THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + ASM_CASES_TAC `carry_s77:bool` THEN + ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN CONV_TAC WORD_REDUCE_CONV THEN + REAL_INTEGER_TAC]);; + +(* ------------------------------------------------------------------------- *) +(* Instances of roughsqr. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_ROUGHSQR_P256K1_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE secp256k1_jdouble_mc) 61 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1. + !n. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = n + ==> + nonoverlapping (word pc,0xe0b) (word_add (read p3 t) (word n3),40) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST secp256k1_jdouble_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) s = + n) + (\s. read RIP s = pcout /\ + read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 5)) s < 4294968274 * 2 EXP 256 /\ + (read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 5)) s == n EXP 2) (mod p_256k1)) + (MAYCHANGE [RIP; RAX; RBX; RCX; RDX; + R8; R9; R10; R11; R12; R13; R14; R15] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 5)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "n_" o lhand o concl) THEN + + (*** The initial squaring block, very similar to bignum_sqr_4_8 ***) + + X86_ACCSTEPS_TAC SECP256K1_JDOUBLE_EXEC (1--41) (1--41) THEN + MAP_EVERY ABBREV_TAC + [`l = bignum_of_wordlist[mullo_s2; sum_s23; sum_s27; sum_s29]`; + `h = bignum_of_wordlist[sum_s33; sum_s35; sum_s39; sum_s41]`] THEN + SUBGOAL_THEN `2 EXP 256 * h + l = n EXP 2` (SUBST1_TAC o SYM) THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"; "n"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_ARITH_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Reduction from 8 digits to 5 digits ***) + + REWRITE_TAC[CONG] THEN + SUBGOAL_THEN + `(2 EXP 256 * h + l) MOD p_256k1 = (4294968273 * h + l) MOD p_256k1` + SUBST1_TAC THENL + [ONCE_REWRITE_TAC[GSYM MOD_ADD_MOD] THEN + ONCE_REWRITE_TAC[GSYM MOD_MULT_LMOD] THEN + REWRITE_TAC[p_256k1] THEN CONV_TAC NUM_REDUCE_CONV; + ALL_TAC] THEN + X86_ACCSTEPS_TAC SECP256K1_JDOUBLE_EXEC (42--56) (42--61) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + + MATCH_MP_TAC(MESON[] `y < n /\ x = y ==> x < n /\ x MOD p = y MOD p`) THEN + ASM_REWRITE_TAC[] THEN CONJ_TAC THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"] THEN CONV_TAC NUM_REDUCE_CONV THEN + BOUNDER_TAC[]; + ALL_TAC] THEN + RULE_ASSUM_TAC(REWRITE_RULE[COND_SWAP; GSYM WORD_BITVAL]) THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + MAP_EVERY EXPAND_TAC ["h"; "l"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_ARITH_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instances of roughmul. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_ROUGHMUL_P256K1_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE secp256k1_jdouble_mc) 75 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) t = n + ==> + nonoverlapping (word pc,0xe0b) (word_add (read p3 t) (word n3),40) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST secp256k1_jdouble_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) s = + n) + (\s. read RIP s = pcout /\ + read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 5)) s < 4294968274 * 2 EXP 256 /\ + (read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 5)) s == m * n) (mod p_256k1)) + (MAYCHANGE [RIP; RAX; RBX; RCX; RDX; + R8; R9; R10; R11; R12; R13; R14; R15] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 5)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s1" THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "m_" o lhand o concl) THEN + + (*** The initial multiplication block, very similar to bignum_mul_4_8 ***) + + X86_ACCSTEPS_TAC SECP256K1_JDOUBLE_EXEC (2--56) (2--56) THEN + MAP_EVERY ABBREV_TAC + [`l = bignum_of_wordlist[mullo_s4; sum_s15; sum_s30; sum_s45]`; + `h = bignum_of_wordlist[sum_s48; sum_s51; sum_s54; sum_s56]`] THEN + SUBGOAL_THEN `2 EXP 256 * h + l = m * n` (SUBST1_TAC o SYM) THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"; "m"; "n"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_ARITH_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Reduction from 8 digits to 5 digits ***) + + REWRITE_TAC[CONG] THEN + SUBGOAL_THEN + `(2 EXP 256 * h + l) MOD p_256k1 = (4294968273 * h + l) MOD p_256k1` + SUBST1_TAC THENL + [ONCE_REWRITE_TAC[GSYM MOD_ADD_MOD] THEN + ONCE_REWRITE_TAC[GSYM MOD_MULT_LMOD] THEN + REWRITE_TAC[p_256k1] THEN CONV_TAC NUM_REDUCE_CONV; + ALL_TAC] THEN + X86_ACCSTEPS_TAC SECP256K1_JDOUBLE_EXEC (57--71) (57--76) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + + MATCH_MP_TAC(MESON[] `y < n /\ x = y ==> x < n /\ x MOD p = y MOD p`) THEN + ASM_REWRITE_TAC[] THEN CONJ_TAC THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"] THEN CONV_TAC NUM_REDUCE_CONV THEN + BOUNDER_TAC[]; + ALL_TAC] THEN + RULE_ASSUM_TAC(REWRITE_RULE[COND_SWAP; GSYM WORD_BITVAL]) THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + MAP_EVERY EXPAND_TAC ["h"; "l"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_ARITH_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instances of weakdouble. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_WEAKDOUBLE_P256K1_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE secp256k1_jdouble_mc) 19 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1. + !n. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = n + ==> + nonoverlapping (word pc,0xe0b) (word_add (read p3 t) (word n3),32) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST secp256k1_jdouble_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) s = + n) + (\s. read RIP s = pcout /\ + read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 4)) s < 2 EXP 256 /\ + (n < p_256k1 + ==> (read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 4)) s == 2 * n) (mod p_256k1))) + (MAYCHANGE [RIP; RAX; RDX; R8; R9; R10; R11] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 4)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "n_" o lhand o concl) THEN + + X86_ACCSTEPS_TAC SECP256K1_JDOUBLE_EXEC (12--15) (1--19) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(ONCE_DEPTH_CONV BIGNUM_LEXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; DISCH_TAC] THEN + + REWRITE_TAC[num_congruent; GSYM INT_OF_NUM_CLAUSES] THEN + MATCH_MP_TAC(MESON[] + `!x':int. x = x' /\ (x' == &2 * n) (mod p) + ==> (x == &2 * n) (mod p)`) THEN + EXISTS_TAC + `if &2 pow 255 <= (&n:int) then &2 * &n - &p_256k1 else &2 * (&n:int)` THEN + CONJ_TAC THENL [ALL_TAC; COND_CASES_TAC THEN CONV_TAC INTEGER_RULE] THEN + MATCH_MP_TAC INT_CONG_IMP_EQ THEN EXISTS_TAC `(&2:int) pow 256` THEN + CONJ_TAC THENL + [MATCH_MP_TAC(INT_ARITH + `(&0 <= x /\ x < e) /\ &0 <= y /\ y < e ==> abs(x - y:int) < e`) THEN + CONJ_TAC THENL + [REWRITE_TAC[INT_OF_NUM_CLAUSES] THEN BOUNDER_TAC[]; ALL_TAC] THEN + FIRST_X_ASSUM(MP_TAC o GEN_REWRITE_RULE I [GSYM INT_OF_NUM_LT]) THEN + REWRITE_TAC[p_256k1] THEN INT_ARITH_TAC; + ALL_TAC] THEN + REWRITE_TAC[REAL_INT_CONGRUENCE; int_of_num_th] THEN + ONCE_REWRITE_TAC[COND_RAND] THEN + REWRITE_TAC[int_sub_th; int_mul_th; int_of_num_th; int_pow_th; + int_eq; int_le] THEN + REWRITE_TAC[REAL_OF_NUM_CLAUSES; EXP_EQ_0; ARITH_EQ] THEN + + SUBGOAL_THEN `bit 63 (n_3:int64) <=> 2 EXP 255 <= n` + SUBST_ALL_TAC THENL + [EXPAND_TAC "n" THEN + REWRITE_TAC[ARITH_RULE + `2 EXP 255 <= n <=> 2 EXP 63 <= n DIV 2 EXP 192`] THEN + CONV_TAC(ONCE_DEPTH_CONV BIGNUM_OF_WORDLIST_DIV_CONV) THEN + REWRITE_TAC[ARITH_RULE `63 = 64 - 1`; GSYM DIMINDEX_64; GSYM MSB_VAL]; + ALL_TAC] THEN + + SUBGOAL_THEN + `2 * n = + bignum_of_wordlist + [word_shl n_0 1; + word_subword ((word_join:int64->int64->int128) n_1 n_0) (63,64); + word_subword ((word_join:int64->int64->int128) n_2 n_1) (63,64); + word_subword ((word_join:int64->int64->int128) n_3 n_2) (63,64); + word_ushr n_3 63]` + SUBST1_TAC THENL + [EXPAND_TAC "n" THEN + REWRITE_TAC[val_def; DIMINDEX_64; bignum_of_wordlist] THEN + REWRITE_TAC[ARITH_RULE `i < 64 <=> 0 <= i /\ i <= 63`] THEN + REWRITE_TAC[GSYM IN_NUMSEG; IN_GSPEC] THEN + REWRITE_TAC[BIT_WORD_SUBWORD; BIT_WORD_JOIN; BIT_WORD_USHR; + BIT_WORD_AND; BIT_WORD_SHL; DIMINDEX_64; DIMINDEX_128] THEN + CONV_TAC NUM_REDUCE_CONV THEN + CONV_TAC(ONCE_DEPTH_CONV EXPAND_NSUM_CONV) THEN + CONV_TAC NUM_REDUCE_CONV THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC WORD_REDUCE_CONV THEN REWRITE_TAC[BITVAL_CLAUSES] THEN + ONCE_REWRITE_TAC[BIT_GUARD] THEN REWRITE_TAC[DIMINDEX_64] THEN + CONV_TAC NUM_REDUCE_CONV THEN REWRITE_TAC[BITVAL_CLAUSES] THEN + ARITH_TAC; + ALL_TAC] THEN + ABBREV_TAC `bb <=> 2 EXP 255 <= n` THEN + REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[p_256k1] THEN + ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN CONV_TAC WORD_REDUCE_CONV THEN + REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instance (12,9) of cmsub (the only one used in this code). *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_CMSUBC9_P256K1_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE secp256k1_jdouble_mc) 52 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 5)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 5)) t = n + ==> + nonoverlapping (word pc,0xe0b) (word_add (read p3 t) (word n3),32) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST secp256k1_jdouble_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 5)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 5)) s = + n) + (\s. read RIP s = pcout /\ + (m < 4294968274 * 2 EXP 256 /\ n < 4294968274 * 2 EXP 256 + ==> &(read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 4)) s) = (&12 * &m - &9 * &n) rem &p_256k1)) + (MAYCHANGE [RIP; RAX; RBX; RCX; RDX; R8; R9; R10; R11; R12] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 4)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + ASM_CASES_TAC + `m < 4294968274 * 2 EXP 256 /\ n < 4294968274 * 2 EXP 256` + THENL [ASM_REWRITE_TAC[]; X86_SIM_TAC SECP256K1_JDOUBLE_EXEC (1--52)] THEN + FIRST_X_ASSUM(CONJUNCTS_THEN ASSUME_TAC) THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "m_" o lhand o concl) THEN + + (*** The computation of n' = 2^33 * p_256k1 - n ***) + + X86_ACCSTEPS_TAC SECP256K1_JDOUBLE_EXEC [2;4;6;8;10] (1--10) THEN + ABBREV_TAC + `n' = bignum_of_wordlist[sum_s2; sum_s4; sum_s6; sum_s8; sum_s10]` THEN + SUBGOAL_THEN `&2 pow 33 * &p_256k1 - &n:int = &n'` ASSUME_TAC THENL + [MATCH_MP_TAC INT_CONG_IMP_EQ THEN EXISTS_TAC `(&2:int) pow 320` THEN + CONJ_TAC THENL + [MATCH_MP_TAC(INT_ARITH + `(&0 <= y /\ y < e) /\ &0 <= x /\ x < e ==> abs(x - y:int) < e`) THEN + CONJ_TAC THENL + [REWRITE_TAC[INT_OF_NUM_CLAUSES] THEN EXPAND_TAC "n'" THEN + BOUNDER_TAC[]; + ALL_TAC] THEN + UNDISCH_TAC `n < 4294968274 * 2 EXP 256` THEN + REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES; p_256k1] THEN INT_ARITH_TAC; + ALL_TAC] THEN + REWRITE_TAC[REAL_INT_CONGRUENCE; int_of_num_th] THEN + ONCE_REWRITE_TAC[COND_RAND] THEN + REWRITE_TAC[int_sub_th; int_mul_th; int_of_num_th; int_pow_th; + int_eq; int_le] THEN + REWRITE_TAC[REAL_OF_NUM_CLAUSES; EXP_EQ_0; ARITH_EQ] THEN + MAP_EVERY EXPAND_TAC ["n'"; "n"] THEN + REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES; p_256k1] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** The rest of the initial accumulation ***) + + X86_ACCSTEPS_TAC SECP256K1_JDOUBLE_EXEC (11--36) (11--36) THEN + ABBREV_TAC + `ca = bignum_of_wordlist[sum_s24; sum_s27; sum_s30; sum_s33; sum_s36]` THEN + SUBGOAL_THEN + `(&12 * &m - &9 * &n) = &ca:int - &9 * &2 pow 33 * &p_256k1` + ASSUME_TAC THENL + [REWRITE_TAC[INT_ARITH + `a - n * b:int = c - n * d <=> a + n * (d - b) = c`] THEN + MATCH_MP_TAC INT_CONG_IMP_EQ THEN EXISTS_TAC `(&2:int) pow 320` THEN + CONJ_TAC THENL + [MATCH_MP_TAC(INT_ARITH + `(&0 <= y /\ y < e) /\ &0 <= x /\ x < e ==> abs(x - y:int) < e`) THEN + CONJ_TAC THENL + [REWRITE_TAC[INT_OF_NUM_CLAUSES] THEN EXPAND_TAC "ca" THEN + BOUNDER_TAC[]; + ALL_TAC] THEN + MAP_EVERY UNDISCH_TAC + [`m < 4294968274 * 2 EXP 256`; `n < 4294968274 * 2 EXP 256`] THEN + REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES; p_256k1] THEN INT_ARITH_TAC; + ASM_REWRITE_TAC[]] THEN + REWRITE_TAC[REAL_INT_CONGRUENCE; int_of_num_th] THEN + ONCE_REWRITE_TAC[COND_RAND] THEN + REWRITE_TAC[int_sub_th; int_mul_th; int_of_num_th; int_pow_th; + int_add_th; int_eq; int_le] THEN + REWRITE_TAC[REAL_OF_NUM_CLAUSES; EXP_EQ_0; ARITH_EQ] THEN + MAP_EVERY EXPAND_TAC ["n'"; "m"; "ca"] THEN + REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES; p_256k1] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + ASM_REWRITE_TAC[INT_REM_MUL_ADD; INT_ARITH + `x - &9 * k * p:int = x + (&9 * --k) * p`] THEN + REWRITE_TAC[INT_OF_NUM_CLAUSES; INT_OF_NUM_REM] THEN + + (*** Instantiate the quotient approximation lemma ***) + + MP_TAC(SPEC `ca:num` p256k1redlemma) THEN ANTS_TAC THENL + [REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES] THEN + FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP (INT_ARITH + `mnt:int = ca - ep ==> mnt + ep <= b ==> ca <= b`)) THEN + MAP_EVERY UNDISCH_TAC + [`m < 4294968274 * 2 EXP 256`; `n < 4294968274 * 2 EXP 256`] THEN + REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES] THEN + REWRITE_TAC[p_256k1] THEN CONV_TAC NUM_REDUCE_CONV THEN + CONV_TAC INT_ARITH; + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN STRIP_TAC] THEN + + SUBGOAL_THEN `ca DIV 2 EXP 256 = val(sum_s36:int64)` SUBST_ALL_TAC THENL + [EXPAND_TAC "ca" THEN CONV_TAC(LAND_CONV BIGNUM_OF_WORDLIST_DIV_CONV) THEN + REFL_TAC; + FIRST_ASSUM(ASSUME_TAC o MATCH_MP (ARITH_RULE + `n + 1 < 2 EXP 64 ==> n < 2 EXP 64 - 1`))] THEN + X86_STEPS_TAC SECP256K1_JDOUBLE_EXEC [37] THEN + ABBREV_TAC `q:int64 = word_add sum_s36 (word 1)` THEN + SUBGOAL_THEN `val(sum_s36:int64) + 1 = val(q:int64)` SUBST_ALL_TAC THENL + [EXPAND_TAC "q" THEN REWRITE_TAC[VAL_WORD_ADD; VAL_WORD_1] THEN + ASM_SIMP_TAC[DIMINDEX_64; MOD_LT]; + ALL_TAC] THEN + + (*** The rest of the computation ***) + + X86_ACCSTEPS_TAC SECP256K1_JDOUBLE_EXEC + [39;40;41;42;43;45;47;49;51] (38--52) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC MOD_UNIQ_BALANCED_REAL THEN + MAP_EVERY EXISTS_TAC [`val(q:int64)`; `256`] THEN ASM_REWRITE_TAC[] THEN + CONJ_TAC THENL [REWRITE_TAC[p_256k1] THEN ARITH_TAC; ALL_TAC] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN + + (*** Comparison computation and then the rest is easy ***) + + SUBGOAL_THEN `ca < val(q:int64) * p_256k1 <=> ~carry_s43` SUBST1_TAC THENL + [CONV_TAC SYM_CONV THEN MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN + EXISTS_TAC `256` THEN EXPAND_TAC "ca" THEN + REWRITE_TAC[p_256k1; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + REWRITE_TAC[REAL_BITVAL_NOT] THEN + SUBGOAL_THEN `&(val(sum_s36:int64)):real = &(val(q:int64)) - &1` + SUBST1_TAC THENL + [FIRST_X_ASSUM(MP_TAC o MATCH_MP (ARITH_RULE + `n < 2 EXP 64 - 1 ==> n + 1 < 2 EXP 64`)) THEN + UNDISCH_THEN `word_add sum_s36 (word 1):int64 = q` (SUBST1_TAC o SYM) THEN + SIMP_TAC[VAL_WORD_ADD; VAL_WORD_1; DIMINDEX_64; MOD_LT] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN REAL_ARITH_TAC; + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]]; + EXPAND_TAC "ca" THEN + REWRITE_TAC[REAL_BITVAL_NOT] THEN + REWRITE_TAC[p_256k1; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + RULE_ASSUM_TAC(REWRITE_RULE[WORD_UNMASK_64]) THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + ASM_CASES_TAC `carry_s43:bool` THEN + ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN CONV_TAC WORD_REDUCE_CONV THEN + REAL_INTEGER_TAC]);; + +(* ------------------------------------------------------------------------- *) +(* Instances of cmsub38. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_CMSUB38_P256K1_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE secp256k1_jdouble_mc) 47 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 5)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 5)) t = n + ==> + nonoverlapping (word pc,0xe0b) (word_add (read p3 t) (word n3),32) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST secp256k1_jdouble_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 5)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 5)) s = + n) + (\s. read RIP s = pcout /\ + (m < 4294968274 * 2 EXP 256 /\ n < 4294968274 * 2 EXP 256 + ==> &(read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 4)) s) = (&3 * &m - &8 * &n) rem &p_256k1)) + (MAYCHANGE [RIP; RAX; RBX; RCX; RDX; R8; R9; R10; R11; R12] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 4)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + ASM_CASES_TAC + `m < 4294968274 * 2 EXP 256 /\ n < 4294968274 * 2 EXP 256` + THENL [ASM_REWRITE_TAC[]; X86_SIM_TAC SECP256K1_JDOUBLE_EXEC (1--47)] THEN + FIRST_X_ASSUM(CONJUNCTS_THEN ASSUME_TAC) THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "m_" o lhand o concl) THEN + + (*** The computation of n' = 2^33 * p_256k1 - n ***) + + X86_ACCSTEPS_TAC SECP256K1_JDOUBLE_EXEC [2;4;6;8;10] (1--10) THEN + ABBREV_TAC + `n' = bignum_of_wordlist[sum_s2; sum_s4; sum_s6; sum_s8; sum_s10]` THEN + SUBGOAL_THEN `&2 pow 33 * &p_256k1 - &n:int = &n'` ASSUME_TAC THENL + [MATCH_MP_TAC INT_CONG_IMP_EQ THEN EXISTS_TAC `(&2:int) pow 320` THEN + CONJ_TAC THENL + [MATCH_MP_TAC(INT_ARITH + `(&0 <= y /\ y < e) /\ &0 <= x /\ x < e ==> abs(x - y:int) < e`) THEN + CONJ_TAC THENL + [REWRITE_TAC[INT_OF_NUM_CLAUSES] THEN EXPAND_TAC "n'" THEN + BOUNDER_TAC[]; + ALL_TAC] THEN + UNDISCH_TAC `n < 4294968274 * 2 EXP 256` THEN + REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES; p_256k1] THEN INT_ARITH_TAC; + ALL_TAC] THEN + REWRITE_TAC[REAL_INT_CONGRUENCE; int_of_num_th] THEN + ONCE_REWRITE_TAC[COND_RAND] THEN + REWRITE_TAC[int_sub_th; int_mul_th; int_of_num_th; int_pow_th; + int_eq; int_le] THEN + REWRITE_TAC[REAL_OF_NUM_CLAUSES; EXP_EQ_0; ARITH_EQ] THEN + MAP_EVERY EXPAND_TAC ["n'"; "n"] THEN + REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES; p_256k1] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** The rest of the initial accumulation ***) + + X86_ACCSTEPS_TAC SECP256K1_JDOUBLE_EXEC (18--31) (11--31) THEN + ABBREV_TAC + `ca = bignum_of_wordlist[sum_s19; sum_s22; sum_s25; sum_s28; sum_s31]` THEN + SUBGOAL_THEN + `(&3 * &m - &8 * &n) = &ca:int - &8 * &2 pow 33 * &p_256k1` + ASSUME_TAC THENL + [REWRITE_TAC[INT_ARITH + `a - n * b:int = c - n * d <=> a + n * (d - b) = c`] THEN + MATCH_MP_TAC INT_CONG_IMP_EQ THEN EXISTS_TAC `(&2:int) pow 320` THEN + CONJ_TAC THENL + [MATCH_MP_TAC(INT_ARITH + `(&0 <= y /\ y < e) /\ &0 <= x /\ x < e ==> abs(x - y:int) < e`) THEN + CONJ_TAC THENL + [REWRITE_TAC[INT_OF_NUM_CLAUSES] THEN EXPAND_TAC "ca" THEN + BOUNDER_TAC[]; + ALL_TAC] THEN + MAP_EVERY UNDISCH_TAC + [`m < 4294968274 * 2 EXP 256`; `n < 4294968274 * 2 EXP 256`] THEN + REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES; p_256k1] THEN INT_ARITH_TAC; + ASM_REWRITE_TAC[]] THEN + REWRITE_TAC[INT_OF_NUM_CLAUSES; GSYM num_congruent] THEN + SUBGOAL_THEN + `8 * n' = + bignum_of_wordlist + [word_shl sum_s2 3; + word_subword ((word_join:int64->int64->int128) sum_s4 sum_s2) (61,64); + word_subword ((word_join:int64->int64->int128) sum_s6 sum_s4) (61,64); + word_subword ((word_join:int64->int64->int128) sum_s8 sum_s6) (61,64); + word_subword ((word_join:int64->int64->int128) sum_s10 sum_s8) (61,64); + word_ushr sum_s10 61]` + SUBST1_TAC THENL + [EXPAND_TAC "n'" THEN REWRITE_TAC[bignum_of_wordlist] THEN + REWRITE_TAC[val_def; DIMINDEX_64; bignum_of_wordlist] THEN + REWRITE_TAC[ARITH_RULE `i < 64 <=> 0 <= i /\ i <= 63`] THEN + REWRITE_TAC[GSYM IN_NUMSEG; IN_GSPEC] THEN + REWRITE_TAC[BIT_WORD_SUBWORD; BIT_WORD_JOIN; BIT_WORD_USHR; + BIT_WORD_SHL; DIMINDEX_64; DIMINDEX_128] THEN + CONV_TAC NUM_REDUCE_CONV THEN + CONV_TAC(ONCE_DEPTH_CONV EXPAND_NSUM_CONV) THEN + CONV_TAC NUM_REDUCE_CONV THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC WORD_REDUCE_CONV THEN REWRITE_TAC[BITVAL_CLAUSES] THEN + ONCE_REWRITE_TAC[BIT_GUARD] THEN REWRITE_TAC[DIMINDEX_64] THEN + CONV_TAC NUM_REDUCE_CONV THEN REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC NUM_RING; + REWRITE_TAC[REAL_CONGRUENCE] THEN CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["m"; "ca"] THEN + REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC]; + ALL_TAC] THEN + + ASM_REWRITE_TAC[INT_REM_MUL_ADD; INT_ARITH + `x - &8 * k * p:int = x + (&8 * --k) * p`] THEN + REWRITE_TAC[INT_OF_NUM_CLAUSES; INT_OF_NUM_REM] THEN + + (*** Instantiate the quotient approximation lemma ***) + + MP_TAC(SPEC `ca:num` p256k1redlemma) THEN ANTS_TAC THENL + [REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES] THEN + FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP (INT_ARITH + `mnt:int = ca - ep ==> mnt + ep <= b ==> ca <= b`)) THEN + MAP_EVERY UNDISCH_TAC + [`m < 4294968274 * 2 EXP 256`; `n < 4294968274 * 2 EXP 256`] THEN + REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES] THEN + REWRITE_TAC[p_256k1] THEN CONV_TAC NUM_REDUCE_CONV THEN + CONV_TAC INT_ARITH; + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN STRIP_TAC] THEN + + SUBGOAL_THEN `ca DIV 2 EXP 256 = val(sum_s31:int64)` SUBST_ALL_TAC THENL + [EXPAND_TAC "ca" THEN CONV_TAC(LAND_CONV BIGNUM_OF_WORDLIST_DIV_CONV) THEN + REFL_TAC; + FIRST_ASSUM(ASSUME_TAC o MATCH_MP (ARITH_RULE + `n + 1 < 2 EXP 64 ==> n < 2 EXP 64 - 1`))] THEN + X86_STEPS_TAC SECP256K1_JDOUBLE_EXEC [32] THEN + ABBREV_TAC `q:int64 = word_add sum_s31 (word 1)` THEN + SUBGOAL_THEN `val(sum_s31:int64) + 1 = val(q:int64)` SUBST_ALL_TAC THENL + [EXPAND_TAC "q" THEN REWRITE_TAC[VAL_WORD_ADD; VAL_WORD_1] THEN + ASM_SIMP_TAC[DIMINDEX_64; MOD_LT]; + ALL_TAC] THEN + + (*** The rest of the computation ***) + + X86_ACCSTEPS_TAC SECP256K1_JDOUBLE_EXEC + [34; 35; 36; 37; 38; 40; 42; 44; 46] (33--47) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC MOD_UNIQ_BALANCED_REAL THEN + MAP_EVERY EXISTS_TAC [`val(q:int64)`; `256`] THEN ASM_REWRITE_TAC[] THEN + CONJ_TAC THENL [REWRITE_TAC[p_256k1] THEN ARITH_TAC; ALL_TAC] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN + + (*** Comparison computation and then the rest is easy ***) + + SUBGOAL_THEN `ca < val(q:int64) * p_256k1 <=> ~carry_s38` SUBST1_TAC THENL + [CONV_TAC SYM_CONV THEN MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN + EXISTS_TAC `256` THEN EXPAND_TAC "ca" THEN + REWRITE_TAC[p_256k1; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + REWRITE_TAC[REAL_BITVAL_NOT] THEN + SUBGOAL_THEN `&(val(sum_s31:int64)):real = &(val(q:int64)) - &1` + SUBST1_TAC THENL + [FIRST_X_ASSUM(MP_TAC o MATCH_MP (ARITH_RULE + `n < 2 EXP 64 - 1 ==> n + 1 < 2 EXP 64`)) THEN + UNDISCH_THEN `word_add sum_s31 (word 1):int64 = q` (SUBST1_TAC o SYM) THEN + SIMP_TAC[VAL_WORD_ADD; VAL_WORD_1; DIMINDEX_64; MOD_LT] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN REAL_ARITH_TAC; + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]]; + EXPAND_TAC "ca" THEN + REWRITE_TAC[REAL_BITVAL_NOT] THEN + REWRITE_TAC[p_256k1; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + RULE_ASSUM_TAC(REWRITE_RULE[WORD_UNMASK_64]) THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + ASM_CASES_TAC `carry_s38:bool` THEN + ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN CONV_TAC WORD_REDUCE_CONV THEN + REAL_INTEGER_TAC]);; + +(* ------------------------------------------------------------------------- *) +(* Instances of cmsub41. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_CMSUB41_P256K1_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE secp256k1_jdouble_mc) 32 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 5)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) t = n + ==> + nonoverlapping (word pc,0xe0b) (word_add (read p3 t) (word n3),32) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST secp256k1_jdouble_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 5)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) s = + n) + (\s. read RIP s = pcout /\ + (m < 4294968274 * 2 EXP 256 /\ n < p_256k1 + ==> &(read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 4)) s) = (&4 * &m - &n) rem &p_256k1)) + (MAYCHANGE [RIP; RAX; RBX; RCX; RDX; R8; R9; R10; R11; R12] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 4)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + ASM_CASES_TAC `m < 4294968274 * 2 EXP 256 /\ n < p_256k1` THENL + [ASM_REWRITE_TAC[]; X86_SIM_TAC SECP256K1_JDOUBLE_EXEC (1--32)] THEN + FIRST_X_ASSUM(CONJUNCTS_THEN ASSUME_TAC) THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "m_" o lhand o concl) THEN + + (*** Instantiate the (integer) quotient approximation lemma ***) + + MP_TAC(SPEC `&4 * &m - &n:int` p256k1shortintredlemma) THEN ANTS_TAC THENL + [ASM_SIMP_TAC[INT_OF_NUM_LT; INT_ARITH + `n:int < p ==> --p <= &4 * &m - n`] THEN + UNDISCH_TAC `m < 4294968274 * 2 EXP 256` THEN + REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES; p_256k1] THEN INT_ARITH_TAC; + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN STRIP_TAC] THEN + + (*** Main shift-subtract block ***) + + X86_ACCSTEPS_TAC SECP256K1_JDOUBLE_EXEC (11--16) (1--16) THEN + ABBREV_TAC `ca = bignum_of_wordlist + [sum_s11; sum_s12; sum_s13; sum_s14; sum_s16]` THEN + SUBGOAL_THEN `&2 pow 256 + &4 * &m - &n:int = &ca` + (fun th -> SUBST_ALL_TAC th THEN ASSUME_TAC th) + THENL + [REWRITE_TAC[int_eq; int_add_th; int_sub_th; int_pow_th; + int_mul_th; int_of_num_th] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`320`; `&0:real`] THEN CONJ_TAC THENL + [CONJ_TAC THENL + [MAP_EVERY EXPAND_TAC ["m"; "n"] THEN BOUNDER_TAC[]; + UNDISCH_TAC `m < 4294968274 * 2 EXP 256` THEN + REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES; p_256k1] THEN INT_ARITH_TAC]; + ALL_TAC] THEN + CONJ_TAC THENL [EXPAND_TAC "ca" THEN BOUNDER_TAC[]; ALL_TAC] THEN + REWRITE_TAC[INTEGER_CLOSED] THEN + SUBGOAL_THEN + `&4 * &m:real = + &(bignum_of_wordlist + [word_shl m_0 2; + word_subword ((word_join:int64->int64->int128) m_1 m_0) (62,64); + word_subword ((word_join:int64->int64->int128) m_2 m_1) (62,64); + word_subword ((word_join:int64->int64->int128) m_3 m_2) (62,64); + word_subword ((word_join:int64->int64->int128) m_4 m_3) (62,64); + word_ushr m_4 62])` + SUBST1_TAC THENL + [EXPAND_TAC "m" THEN + REWRITE_TAC[bignum_of_wordlist; REAL_OF_NUM_CLAUSES] THEN + REWRITE_TAC[val_def; DIMINDEX_64; bignum_of_wordlist] THEN + REWRITE_TAC[ARITH_RULE `i < 64 <=> 0 <= i /\ i <= 63`] THEN + REWRITE_TAC[GSYM IN_NUMSEG; IN_GSPEC] THEN + REWRITE_TAC[BIT_WORD_SUBWORD; BIT_WORD_JOIN; BIT_WORD_USHR; + BIT_WORD_SHL; DIMINDEX_64; DIMINDEX_128] THEN + CONV_TAC NUM_REDUCE_CONV THEN + CONV_TAC(ONCE_DEPTH_CONV EXPAND_NSUM_CONV) THEN + CONV_TAC NUM_REDUCE_CONV THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC WORD_REDUCE_CONV THEN REWRITE_TAC[BITVAL_CLAUSES] THEN + ONCE_REWRITE_TAC[BIT_GUARD] THEN REWRITE_TAC[DIMINDEX_64] THEN + CONV_TAC NUM_REDUCE_CONV THEN REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC NUM_RING; + MAP_EVERY EXPAND_TAC ["n"; "ca"] THEN + REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + REWRITE_TAC[REAL_BITVAL_NOT] THEN REAL_INTEGER_TAC]; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Quotient estimate is just the top word after the +1 ***) + + ABBREV_TAC `q:int64 = sum_s16` THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o + check (free_in `sum_s16:int64` o concl))) THEN + SUBGOAL_THEN `&ca div &2 pow 256 = &(val(q:int64))` SUBST_ALL_TAC THENL + [REWRITE_TAC[INT_OF_NUM_CLAUSES; INT_OF_NUM_DIV] THEN + EXPAND_TAC "ca" THEN CONV_TAC(LAND_CONV BIGNUM_OF_WORDLIST_DIV_CONV) THEN + REFL_TAC; + ALL_TAC] THEN + + (*** The rest of the computation ***) + + X86_ACCSTEPS_TAC SECP256K1_JDOUBLE_EXEC + [18;20;21;22;23; 25;27;29;31] (17--32) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(ONCE_DEPTH_CONV BIGNUM_LEXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + + CONV_TAC SYM_CONV THEN MATCH_MP_TAC INT_REM_UNIQ_BALANCED_MOD THEN + MAP_EVERY EXISTS_TAC [`&(val(q:int64)):int`; `256`] THEN + ASM_REWRITE_TAC[] THEN + REPEAT(CONJ_TAC THENL + [REWRITE_TAC[INT_OF_NUM_CLAUSES; p_256k1] THEN BOUNDER_TAC[]; ALL_TAC]) THEN + ONCE_REWRITE_TAC[INT_ARITH + `&4 * m - n:int = (&2 pow 256 + &4 * m - n) - &2 pow 256`] THEN + ASM_REWRITE_TAC[] THEN + + (*** Comparison computation and then the rest is easy ***) + + SUBGOAL_THEN + `(&ca - &2 pow 256):int < &(val(q:int64)) * &p_256k1 <=> ~carry_s23` + SUBST1_TAC THENL + [REWRITE_TAC[INT_LT_SUB_RADD; INT_OF_NUM_CLAUSES] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN + EXISTS_TAC `256` THEN EXPAND_TAC "ca" THEN + REWRITE_TAC[p_256k1; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + REWRITE_TAC[REAL_BITVAL_NOT] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + REWRITE_TAC[INTEGER_RULE + `(a:int == b + c - p) (mod p) <=> (a == b + c) (mod p)`] THEN + REWRITE_TAC[INT_OF_NUM_CLAUSES; GSYM num_congruent] THEN + REWRITE_TAC[REAL_CONGRUENCE; EXP_EQ_0; ARITH_EQ] THEN + EXPAND_TAC "ca" THEN REWRITE_TAC[REAL_BITVAL_NOT] THEN + REWRITE_TAC[p_256k1; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + RULE_ASSUM_TAC(REWRITE_RULE[WORD_UNMASK_64]) THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + REWRITE_TAC[WORD_AND_MASK; WORD_XOR_MASK] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + ASM_CASES_TAC `carry_s23:bool` THEN + ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN CONV_TAC WORD_REDUCE_CONV THEN + REAL_INTEGER_TAC]);; + +(* ------------------------------------------------------------------------- *) +(* Overall point operation proof. *) +(* ------------------------------------------------------------------------- *) + +let SECP256K1_JDOUBLE_CORRECT = time prove + (`!p3 p1 t1 pc stackpointer. + ALLPAIRS nonoverlapping + [(p3,96); (stackpointer,384)] + [(word pc,0xe0b); (p1,96)] /\ + nonoverlapping (p3,96) (stackpointer,384) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST secp256k1_jdouble_mc) /\ + read RIP s = word(pc + 0x10) /\ + read RSP s = stackpointer /\ + C_ARGUMENTS [p3; p1] s /\ + bignum_triple_from_memory (p1,4) s = t1) + (\s. read RIP s = word (pc + 0xdfa) /\ + (!x y z. + ~(z = &0) /\ + t1 = tripled secp256k1_encode (x,y,z) + ==> bignum_triple_from_memory(p3,4) s = + tripled secp256k1_encode + (jacobian_add secp256k1 (x,y,z) (x,y,z)))) + (MAYCHANGE [RIP; RAX; RBX; RCX; RDX; R8; R9; + R10; R11; R12; R13; R14; R15] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,96); + memory :> bytes(stackpointer,384)])`, + REWRITE_TAC[FORALL_PAIR_THM] THEN + MAP_EVERY X_GEN_TAC + [`p3:int64`; `p1:int64`; `x:num`; `y:num`; `z:num`; + `pc:num`; `stackpointer:int64`] THEN + REWRITE_TAC[ALLPAIRS; ALL; NONOVERLAPPING_CLAUSES] THEN STRIP_TAC THEN + REWRITE_TAC[C_ARGUMENTS; SOME_FLAGS; PAIR_EQ; bignum_triple_from_memory] THEN + CONV_TAC(ONCE_DEPTH_CONV NUM_MULT_CONV) THEN + CONV_TAC(ONCE_DEPTH_CONV NORMALIZE_RELATIVE_ADDRESS_CONV) THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + + LOCAL_SQR_P256K1_TAC 0 ["y_2";"y_1"] THEN + LOCAL_SQR_P256K1_TAC 0 ["x_2";"x_1"] THEN + LOCAL_WEAKDOUBLE_P256K1_TAC 0 ["tmp";"y_1"] THEN + LOCAL_ROUGHMUL_P256K1_TAC 0 ["xy2";"x_1";"y_2"] THEN + LOCAL_ROUGHSQR_P256K1_TAC 0 ["x_4";"x_2"] THEN + LOCAL_MUL_P256K1_TAC 0 ["z_3";"z_1";"tmp"] THEN + LOCAL_CMSUBC9_P256K1_TAC 0 ["d";"xy2";"x_4"] THEN + LOCAL_ROUGHSQR_P256K1_TAC 0 ["y_4";"y_2"] THEN + LOCAL_ROUGHMUL_P256K1_TAC 0 ["dx2";"x_2";"d"] THEN + LOCAL_CMSUB41_P256K1_TAC 0 ["x_3";"xy2";"d"] THEN + LOCAL_CMSUB38_P256K1_TAC 0 ["y_3";"dx2";"y_4"] THEN + + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + DISCARD_STATE_TAC "s11" THEN + DISCARD_MATCHING_ASSUMPTIONS [`nonoverlapping_modulo a b c`] THEN + MAP_EVERY X_GEN_TAC [`x':int`; `y':int`; `z':int`] THEN + DISCH_THEN(CONJUNCTS_THEN2 ASSUME_TAC MP_TAC) THEN + REWRITE_TAC[tripled; secp256k1_encode; PAIR_EQ; modular_encode] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN + (STRIP_ASSUME_TAC o MATCH_MP unilemma2)) THEN + + (*** Dispose of any range hypotheses ***) + + REPEAT(FIRST_X_ASSUM(MP_TAC o check (is_imp o concl))) THEN + ANTS_TAC THENL [FIRST_ASSUM ACCEPT_TAC; DISCH_TAC] THEN ANTS_TAC THENL + [ASM_REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES] THEN + MATCH_MP_TAC INT_LT_REM THEN REWRITE_TAC[p_256k1; INT_OF_NUM_CLAUSES] THEN + CONV_TAC NUM_REDUCE_CONV; + DISCH_THEN(STRIP_ASSUME_TAC o MATCH_MP unilemma1)] THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o GEN_REWRITE_RULE I [GSYM NOT_LE])) THEN + + (*** Manually push around a few moduli to avoid fuss later ***) + + SUBGOAL_THEN + `!a b x y p. (a * x - b * y) rem p = (a * x rem p - b * y rem p) rem p` + (fun th -> RULE_ASSUM_TAC(ONCE_REWRITE_RULE[th])) + THENL + [CONV_TAC INT_REM_DOWN_CONV THEN REPEAT GEN_TAC THEN REFL_TAC; + ALL_TAC] THEN + SUBGOAL_THEN + `!a x y p. (a * x - y) rem p = (a * x rem p - y) rem p` + (fun th -> RULE_ASSUM_TAC(ONCE_REWRITE_RULE[th])) + THENL + [CONV_TAC INT_REM_DOWN_CONV THEN REPEAT GEN_TAC THEN REFL_TAC; + ALL_TAC] THEN + SUBGOAL_THEN `(z * tmp) MOD p_256k1 = (z * tmp MOD p_256k1) MOD p_256k1` + SUBST_ALL_TAC THENL [CONV_TAC MOD_DOWN_CONV THEN REFL_TAC; ALL_TAC] THEN + + (*** Now do the algebra ***) + + RULE_ASSUM_TAC(REWRITE_RULE + [num_congruent; GSYM INT_OF_NUM_CLAUSES; GSYM INT_OF_NUM_REM]) THEN + RULE_ASSUM_TAC(REWRITE_RULE[GSYM INT_REM_EQ]) THEN + RULE_ASSUM_TAC(ONCE_REWRITE_RULE[GSYM INT_SUB_REM; GSYM INT_ADD_REM]) THEN + RULE_ASSUM_TAC(REWRITE_RULE[INT_POW_2]) THEN + ASM_REWRITE_TAC[tripled; jacobian_add; jacobian_eq; secp256k1] THEN + ASM_REWRITE_TAC[GSYM secp256k1] THEN + REWRITE_TAC[INTEGER_MOD_RING_CLAUSES] THEN + CONV_TAC INT_REDUCE_CONV THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN + CONV_TAC INT_REM_DOWN_CONV THEN + REWRITE_TAC[tripled; modular_encode] THEN + REWRITE_TAC[PAIR_EQ; GSYM INT_OF_NUM_EQ; nintlemma] THEN + CONV_TAC INT_REM_DOWN_CONV THEN + REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES; GSYM INT_OF_NUM_REM] THEN + ASM_REWRITE_TAC[] THEN CONV_TAC INT_REM_DOWN_CONV THEN + REPEAT CONJ_TAC THEN AP_THM_TAC THEN AP_TERM_TAC THEN + INT_ARITH_TAC);; + +let SECP256K1_JDOUBLE_SUBROUTINE_CORRECT = time prove + (`!p3 p1 t1 pc stackpointer returnaddress. + ALLPAIRS nonoverlapping + [(p3,96); (word_sub stackpointer (word 424),424)] + [(word pc,0xe0b); (p1,96)] /\ + nonoverlapping (p3,96) (word_sub stackpointer (word 424),432) + ==> ensures x86 + (\s. bytes_loaded s (word pc) secp256k1_jdouble_mc /\ + read RIP s = word pc /\ + read RSP s = stackpointer /\ + read (memory :> bytes64 stackpointer) s = returnaddress /\ + C_ARGUMENTS [p3; p1] s /\ + bignum_triple_from_memory (p1,4) s = t1) + (\s. read RIP s = returnaddress /\ + read RSP s = word_add stackpointer (word 8) /\ + (!x y z. + ~(z = &0) /\ + t1 = tripled secp256k1_encode (x,y,z) + ==> bignum_triple_from_memory(p3,4) s = + tripled secp256k1_encode + (jacobian_add secp256k1 (x,y,z) (x,y,z)))) + (MAYCHANGE [RIP; RSP; RAX; RCX; RDX; R8; R9; R10; R11] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,96); + memory :> bytes(word_sub stackpointer (word 424),424)])`, + X86_PROMOTE_RETURN_STACK_TAC secp256k1_jdouble_mc SECP256K1_JDOUBLE_CORRECT + `[RBX; R12; R13; R14; R15]` 424);; + +(* ------------------------------------------------------------------------- *) +(* Correctness of Windows ABI version. *) +(* ------------------------------------------------------------------------- *) + +let windows_secp256k1_jdouble_mc = define_from_elf + "windows_secp256k1_jdouble_mc" "x86/secp256k1/secp256k1_jdouble.obj";; + +let WINDOWS_SECP256K1_JDOUBLE_SUBROUTINE_CORRECT = time prove + (`!p3 p1 t1 pc stackpointer returnaddress. + ALLPAIRS nonoverlapping + [(p3,96); (word_sub stackpointer (word 440),440)] + [(word pc,0xe15); (p1,96)] /\ + nonoverlapping (p3,96) (word_sub stackpointer (word 440),448) + ==> ensures x86 + (\s. bytes_loaded s (word pc) windows_secp256k1_jdouble_mc /\ + read RIP s = word pc /\ + read RSP s = stackpointer /\ + read (memory :> bytes64 stackpointer) s = returnaddress /\ + WINDOWS_C_ARGUMENTS [p3; p1] s /\ + bignum_triple_from_memory (p1,4) s = t1) + (\s. read RIP s = returnaddress /\ + read RSP s = word_add stackpointer (word 8) /\ + (!x y z. + ~(z = &0) /\ + t1 = tripled secp256k1_encode (x,y,z) + ==> bignum_triple_from_memory(p3,4) s = + tripled secp256k1_encode + (jacobian_add secp256k1 (x,y,z) (x,y,z)))) + (MAYCHANGE [RIP; RSP; RAX; RCX; RDX; R8; R9; R10; R11] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,96); + memory :> bytes(word_sub stackpointer (word 440),440)])`, + WINDOWS_X86_WRAP_STACK_TAC + windows_secp256k1_jdouble_mc secp256k1_jdouble_mc + SECP256K1_JDOUBLE_CORRECT + `[RBX; R12; R13; R14; R15]` 424);; diff --git a/x86/proofs/secp256k1_jmixadd.ml b/x86/proofs/secp256k1_jmixadd.ml new file mode 100644 index 0000000000..b7ac5d06bc --- /dev/null +++ b/x86/proofs/secp256k1_jmixadd.ml @@ -0,0 +1,2425 @@ +(* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + *) + +(* ========================================================================= *) +(* Mixed addition in Jacobian coordinates for SECG secp256k1 curve. *) +(* ========================================================================= *) + +needs "x86/proofs/base.ml";; +needs "common/ecencoding.ml";; +needs "EC/jacobian.ml";; +needs "EC/secp256k1.ml";; + +prioritize_int();; +prioritize_real();; +prioritize_num();; + +(**** print_literal_from_elf "x86/secp256k1/secp256k1_jmixadd.o";; + ****) + +let secp256k1_jmixadd_mc = define_assert_from_elf + "secp256k1_jmixadd_mc" "x86/secp256k1/secp256k1_jmixadd.o" +[ + 0x53; (* PUSH (% rbx) *) + 0x55; (* PUSH (% rbp) *) + 0x41; 0x54; (* PUSH (% r12) *) + 0x41; 0x55; (* PUSH (% r13) *) + 0x41; 0x56; (* PUSH (% r14) *) + 0x41; 0x57; (* PUSH (% r15) *) + 0x48; 0x81; 0xec; 0xc0; 0x00; 0x00; 0x00; + (* SUB (% rsp) (Imm32 (word 192)) *) + 0x48; 0x89; 0xd5; (* MOV (% rbp) (% rdx) *) + 0x48; 0x8b; 0x56; 0x40; (* MOV (% rdx) (Memop Quadword (%% (rsi,64))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0xfa; + (* MULX4 (% r15,% r8) (% rdx,% rdx) *) + 0xc4; 0x62; 0xb3; 0xf6; 0x56; 0x48; + (* MULX4 (% r10,% r9) (% rdx,Memop Quadword (%% (rsi,72))) *) + 0xc4; 0x62; 0xa3; 0xf6; 0x66; 0x58; + (* MULX4 (% r12,% r11) (% rdx,Memop Quadword (%% (rsi,88))) *) + 0x48; 0x8b; 0x56; 0x50; (* MOV (% rdx) (Memop Quadword (%% (rsi,80))) *) + 0xc4; 0x62; 0x93; 0xf6; 0x76; 0x58; + (* MULX4 (% r14,% r13) (% rdx,Memop Quadword (%% (rsi,88))) *) + 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x4e; 0x40; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsi,64))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd9; + (* ADOX (% r11) (% rcx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x4e; 0x48; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsi,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADOX (% r12) (% rcx) *) + 0x48; 0x8b; 0x56; 0x58; (* MOV (% rdx) (Memop Quadword (%% (rsi,88))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x4e; 0x48; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsi,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADOX (% r13) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADCX (% r13) (% rbx) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% r9) (% r9) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xcf; + (* ADOX (% r9) (% r15) *) + 0x48; 0x8b; 0x56; 0x48; (* MOV (% rdx) (Memop Quadword (%% (rsi,72))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xd2; + (* ADCX (% r10) (% r10) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADOX (% r10) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% r11) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% r11) (% rdx) *) + 0x48; 0x8b; 0x56; 0x50; (* MOV (% rdx) (Memop Quadword (%% (rsi,80))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xe4; + (* ADCX (% r12) (% r12) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADOX (% r12) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% r13) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xea; + (* ADOX (% r13) (% rdx) *) + 0x48; 0x8b; 0x56; 0x58; (* MOV (% rdx) (Memop Quadword (%% (rsi,88))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xfa; + (* MULX4 (% r15,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf6; + (* ADCX (% r14) (% r14) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% rax) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADCX (% r15) (% rbx) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x48; 0xba; 0xd1; 0x03; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294968273)) *) + 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xcc; + (* MULX4 (% rcx,% rax) (% rdx,% r12) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc9; + (* ADOX (% r9) (% rcx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xcd; + (* MULX4 (% rcx,% rax) (% rdx,% r13) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd1; + (* ADOX (% r10) (% rcx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xce; + (* MULX4 (% rcx,% rax) (% rdx,% r14) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd9; + (* ADOX (% r11) (% rcx) *) + 0xc4; 0x42; 0xfb; 0xf6; 0xe7; + (* MULX4 (% r12,% rax) (% rdx,% r15) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADCX (% r12) (% rbx) *) + 0x49; 0x8d; 0x44; 0x24; 0x01; + (* LEA (% rax) (%% (r12,1)) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xc8; + (* MULX4 (% rcx,% rax) (% rdx,% rax) *) + 0x49; 0x01; 0xc0; (* ADD (% r8) (% rax) *) + 0x49; 0x11; 0xc9; (* ADC (% r9) (% rcx) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x48; 0x19; 0xc0; (* SBB (% rax) (% rax) *) + 0x48; 0xf7; 0xd0; (* NOT (% rax) *) + 0x48; 0x21; 0xd0; (* AND (% rax) (% rdx) *) + 0x49; 0x29; 0xc0; (* SUB (% r8) (% rax) *) + 0x49; 0x19; 0xd9; (* SBB (% r9) (% rbx) *) + 0x49; 0x19; 0xda; (* SBB (% r10) (% rbx) *) + 0x49; 0x19; 0xdb; (* SBB (% r11) (% rbx) *) + 0x4c; 0x89; 0x04; 0x24; (* MOV (Memop Quadword (%% (rsp,0))) (% r8) *) + 0x4c; 0x89; 0x4c; 0x24; 0x08; + (* MOV (Memop Quadword (%% (rsp,8))) (% r9) *) + 0x4c; 0x89; 0x54; 0x24; 0x10; + (* MOV (Memop Quadword (%% (rsp,16))) (% r10) *) + 0x4c; 0x89; 0x5c; 0x24; 0x18; + (* MOV (Memop Quadword (%% (rsp,24))) (% r11) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x55; 0x20; (* MOV (% rdx) (Memop Quadword (%% (rbp,32))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x4e; 0x40; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsi,64))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x56; 0x48; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsi,72))) *) + 0x49; 0x01; 0xc1; (* ADD (% r9) (% rax) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x5e; 0x50; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsi,80))) *) + 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x66; 0x58; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsi,88))) *) + 0x49; 0x11; 0xc3; (* ADC (% r11) (% rax) *) + 0x49; 0x11; 0xcc; (* ADC (% r12) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x55; 0x28; (* MOV (% rdx) (Memop Quadword (%% (rbp,40))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x40; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,64))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x6e; 0x58; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsi,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADOX (% r13) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADCX (% r13) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x55; 0x30; (* MOV (% rdx) (Memop Quadword (%% (rbp,48))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x40; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,64))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x76; 0x58; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsi,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADOX (% r14) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADCX (% r14) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x55; 0x38; (* MOV (% rdx) (Memop Quadword (%% (rbp,56))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x40; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,64))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x7e; 0x58; + (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsi,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% rcx) *) + 0x48; 0xba; 0xd1; 0x03; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294968273)) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdc; + (* MULX4 (% rbx,% rax) (% rdx,% r12) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdd; + (* MULX4 (% rbx,% rax) (% rdx,% r13) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xde; + (* MULX4 (% rbx,% rax) (% rdx,% r14) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0x42; 0xfb; 0xf6; 0xe7; + (* MULX4 (% r12,% rax) (% rdx,% r15) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADOX (% r12) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADCX (% r12) (% rcx) *) + 0x49; 0x8d; 0x44; 0x24; 0x01; + (* LEA (% rax) (%% (r12,1)) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% rax) *) + 0x49; 0x01; 0xc0; (* ADD (% r8) (% rax) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) + 0x49; 0x11; 0xcb; (* ADC (% r11) (% rcx) *) + 0x48; 0x0f; 0x42; 0xd1; (* CMOVB (% rdx) (% rcx) *) + 0x49; 0x29; 0xd0; (* SUB (% r8) (% rdx) *) + 0x49; 0x19; 0xc9; (* SBB (% r9) (% rcx) *) + 0x49; 0x19; 0xca; (* SBB (% r10) (% rcx) *) + 0x49; 0x19; 0xcb; (* SBB (% r11) (% rcx) *) + 0x4c; 0x89; 0x44; 0x24; 0x20; + (* MOV (Memop Quadword (%% (rsp,32))) (% r8) *) + 0x4c; 0x89; 0x4c; 0x24; 0x28; + (* MOV (Memop Quadword (%% (rsp,40))) (% r9) *) + 0x4c; 0x89; 0x54; 0x24; 0x30; + (* MOV (Memop Quadword (%% (rsp,48))) (% r10) *) + 0x4c; 0x89; 0x5c; 0x24; 0x38; + (* MOV (Memop Quadword (%% (rsp,56))) (% r11) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x55; 0x00; (* MOV (% rdx) (Memop Quadword (%% (rbp,0))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x0c; 0x24; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x54; 0x24; 0x08; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x49; 0x01; 0xc1; (* ADD (% r9) (% rax) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x64; 0x24; 0x18; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x49; 0x11; 0xc3; (* ADC (% r11) (% rax) *) + 0x49; 0x11; 0xcc; (* ADC (% r12) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x55; 0x08; (* MOV (% rdx) (Memop Quadword (%% (rbp,8))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x6c; 0x24; 0x18; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADOX (% r13) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADCX (% r13) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x55; 0x10; (* MOV (% rdx) (Memop Quadword (%% (rbp,16))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x74; 0x24; 0x18; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADOX (% r14) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADCX (% r14) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x55; 0x18; (* MOV (% rdx) (Memop Quadword (%% (rbp,24))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x7c; 0x24; 0x18; + (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% rcx) *) + 0x48; 0xba; 0xd1; 0x03; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294968273)) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdc; + (* MULX4 (% rbx,% rax) (% rdx,% r12) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdd; + (* MULX4 (% rbx,% rax) (% rdx,% r13) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xde; + (* MULX4 (% rbx,% rax) (% rdx,% r14) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0x42; 0xfb; 0xf6; 0xe7; + (* MULX4 (% r12,% rax) (% rdx,% r15) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADOX (% r12) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADCX (% r12) (% rcx) *) + 0x49; 0x8d; 0x44; 0x24; 0x01; + (* LEA (% rax) (%% (r12,1)) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% rax) *) + 0x49; 0x01; 0xc0; (* ADD (% r8) (% rax) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) + 0x49; 0x11; 0xcb; (* ADC (% r11) (% rcx) *) + 0x48; 0x0f; 0x42; 0xd1; (* CMOVB (% rdx) (% rcx) *) + 0x49; 0x29; 0xd0; (* SUB (% r8) (% rdx) *) + 0x49; 0x19; 0xc9; (* SBB (% r9) (% rcx) *) + 0x49; 0x19; 0xca; (* SBB (% r10) (% rcx) *) + 0x49; 0x19; 0xcb; (* SBB (% r11) (% rcx) *) + 0x4c; 0x89; 0x44; 0x24; 0x40; + (* MOV (Memop Quadword (%% (rsp,64))) (% r8) *) + 0x4c; 0x89; 0x4c; 0x24; 0x48; + (* MOV (Memop Quadword (%% (rsp,72))) (% r9) *) + 0x4c; 0x89; 0x54; 0x24; 0x50; + (* MOV (Memop Quadword (%% (rsp,80))) (% r10) *) + 0x4c; 0x89; 0x5c; 0x24; 0x58; + (* MOV (Memop Quadword (%% (rsp,88))) (% r11) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x54; 0x24; 0x20; + (* MOV (% rdx) (Memop Quadword (%% (rsp,32))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x0c; 0x24; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x54; 0x24; 0x08; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x49; 0x01; 0xc1; (* ADD (% r9) (% rax) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x64; 0x24; 0x18; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x49; 0x11; 0xc3; (* ADC (% r11) (% rax) *) + 0x49; 0x11; 0xcc; (* ADC (% r12) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x54; 0x24; 0x28; + (* MOV (% rdx) (Memop Quadword (%% (rsp,40))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x6c; 0x24; 0x18; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADOX (% r13) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADCX (% r13) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x54; 0x24; 0x30; + (* MOV (% rdx) (Memop Quadword (%% (rsp,48))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x74; 0x24; 0x18; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADOX (% r14) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADCX (% r14) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x54; 0x24; 0x38; + (* MOV (% rdx) (Memop Quadword (%% (rsp,56))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x7c; 0x24; 0x18; + (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% rcx) *) + 0x48; 0xba; 0xd1; 0x03; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294968273)) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdc; + (* MULX4 (% rbx,% rax) (% rdx,% r12) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdd; + (* MULX4 (% rbx,% rax) (% rdx,% r13) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xde; + (* MULX4 (% rbx,% rax) (% rdx,% r14) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0x42; 0xfb; 0xf6; 0xe7; + (* MULX4 (% r12,% rax) (% rdx,% r15) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADOX (% r12) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADCX (% r12) (% rcx) *) + 0x49; 0x8d; 0x44; 0x24; 0x01; + (* LEA (% rax) (%% (r12,1)) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% rax) *) + 0x49; 0x01; 0xc0; (* ADD (% r8) (% rax) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) + 0x49; 0x11; 0xcb; (* ADC (% r11) (% rcx) *) + 0x48; 0x0f; 0x42; 0xd1; (* CMOVB (% rdx) (% rcx) *) + 0x49; 0x29; 0xd0; (* SUB (% r8) (% rdx) *) + 0x49; 0x19; 0xc9; (* SBB (% r9) (% rcx) *) + 0x49; 0x19; 0xca; (* SBB (% r10) (% rcx) *) + 0x49; 0x19; 0xcb; (* SBB (% r11) (% rcx) *) + 0x4c; 0x89; 0x44; 0x24; 0x20; + (* MOV (Memop Quadword (%% (rsp,32))) (% r8) *) + 0x4c; 0x89; 0x4c; 0x24; 0x28; + (* MOV (Memop Quadword (%% (rsp,40))) (% r9) *) + 0x4c; 0x89; 0x54; 0x24; 0x30; + (* MOV (Memop Quadword (%% (rsp,48))) (% r10) *) + 0x4c; 0x89; 0x5c; 0x24; 0x38; + (* MOV (Memop Quadword (%% (rsp,56))) (% r11) *) + 0x31; 0xc0; (* XOR (% eax) (% eax) *) + 0x4c; 0x8b; 0x44; 0x24; 0x40; + (* MOV (% r8) (Memop Quadword (%% (rsp,64))) *) + 0x4c; 0x2b; 0x06; (* SUB (% r8) (Memop Quadword (%% (rsi,0))) *) + 0x4c; 0x8b; 0x4c; 0x24; 0x48; + (* MOV (% r9) (Memop Quadword (%% (rsp,72))) *) + 0x4c; 0x1b; 0x4e; 0x08; (* SBB (% r9) (Memop Quadword (%% (rsi,8))) *) + 0x4c; 0x8b; 0x54; 0x24; 0x50; + (* MOV (% r10) (Memop Quadword (%% (rsp,80))) *) + 0x4c; 0x1b; 0x56; 0x10; (* SBB (% r10) (Memop Quadword (%% (rsi,16))) *) + 0x4c; 0x8b; 0x5c; 0x24; 0x58; + (* MOV (% r11) (Memop Quadword (%% (rsp,88))) *) + 0x4c; 0x1b; 0x5e; 0x18; (* SBB (% r11) (Memop Quadword (%% (rsi,24))) *) + 0x48; 0xb9; 0xd1; 0x03; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rcx) (Imm64 (word 4294968273)) *) + 0x48; 0x0f; 0x43; 0xc8; (* CMOVAE (% rcx) (% rax) *) + 0x49; 0x29; 0xc8; (* SUB (% r8) (% rcx) *) + 0x4c; 0x89; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,160))) (% r8) *) + 0x49; 0x19; 0xc1; (* SBB (% r9) (% rax) *) + 0x4c; 0x89; 0x8c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,168))) (% r9) *) + 0x49; 0x19; 0xc2; (* SBB (% r10) (% rax) *) + 0x4c; 0x89; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,176))) (% r10) *) + 0x49; 0x19; 0xc3; (* SBB (% r11) (% rax) *) + 0x4c; 0x89; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,184))) (% r11) *) + 0x31; 0xc0; (* XOR (% eax) (% eax) *) + 0x4c; 0x8b; 0x44; 0x24; 0x20; + (* MOV (% r8) (Memop Quadword (%% (rsp,32))) *) + 0x4c; 0x2b; 0x46; 0x20; (* SUB (% r8) (Memop Quadword (%% (rsi,32))) *) + 0x4c; 0x8b; 0x4c; 0x24; 0x28; + (* MOV (% r9) (Memop Quadword (%% (rsp,40))) *) + 0x4c; 0x1b; 0x4e; 0x28; (* SBB (% r9) (Memop Quadword (%% (rsi,40))) *) + 0x4c; 0x8b; 0x54; 0x24; 0x30; + (* MOV (% r10) (Memop Quadword (%% (rsp,48))) *) + 0x4c; 0x1b; 0x56; 0x30; (* SBB (% r10) (Memop Quadword (%% (rsi,48))) *) + 0x4c; 0x8b; 0x5c; 0x24; 0x38; + (* MOV (% r11) (Memop Quadword (%% (rsp,56))) *) + 0x4c; 0x1b; 0x5e; 0x38; (* SBB (% r11) (Memop Quadword (%% (rsi,56))) *) + 0x48; 0xb9; 0xd1; 0x03; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rcx) (Imm64 (word 4294968273)) *) + 0x48; 0x0f; 0x43; 0xc8; (* CMOVAE (% rcx) (% rax) *) + 0x49; 0x29; 0xc8; (* SUB (% r8) (% rcx) *) + 0x4c; 0x89; 0x44; 0x24; 0x20; + (* MOV (Memop Quadword (%% (rsp,32))) (% r8) *) + 0x49; 0x19; 0xc1; (* SBB (% r9) (% rax) *) + 0x4c; 0x89; 0x4c; 0x24; 0x28; + (* MOV (Memop Quadword (%% (rsp,40))) (% r9) *) + 0x49; 0x19; 0xc2; (* SBB (% r10) (% rax) *) + 0x4c; 0x89; 0x54; 0x24; 0x30; + (* MOV (Memop Quadword (%% (rsp,48))) (% r10) *) + 0x49; 0x19; 0xc3; (* SBB (% r11) (% rax) *) + 0x4c; 0x89; 0x5c; 0x24; 0x38; + (* MOV (Memop Quadword (%% (rsp,56))) (% r11) *) + 0x48; 0x8b; 0x94; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,160))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0xfa; + (* MULX4 (% r15,% r8) (% rdx,% rdx) *) + 0xc4; 0x62; 0xb3; 0xf6; 0x94; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% r10,% r9) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0xc4; 0x62; 0xa3; 0xf6; 0xa4; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r12,% r11) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x48; 0x8b; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,176))) *) + 0xc4; 0x62; 0x93; 0xf6; 0xb4; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r14,% r13) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x8c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd9; + (* ADOX (% r11) (% rcx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x8c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADOX (% r12) (% rcx) *) + 0x48; 0x8b; 0x94; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,184))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x8c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADOX (% r13) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADCX (% r13) (% rbx) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% r9) (% r9) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xcf; + (* ADOX (% r9) (% r15) *) + 0x48; 0x8b; 0x94; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,168))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xd2; + (* ADCX (% r10) (% r10) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADOX (% r10) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% r11) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% r11) (% rdx) *) + 0x48; 0x8b; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,176))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xe4; + (* ADCX (% r12) (% r12) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADOX (% r12) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% r13) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xea; + (* ADOX (% r13) (% rdx) *) + 0x48; 0x8b; 0x94; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,184))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xfa; + (* MULX4 (% r15,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf6; + (* ADCX (% r14) (% r14) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% rax) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADCX (% r15) (% rbx) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x48; 0xba; 0xd1; 0x03; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294968273)) *) + 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xcc; + (* MULX4 (% rcx,% rax) (% rdx,% r12) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc9; + (* ADOX (% r9) (% rcx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xcd; + (* MULX4 (% rcx,% rax) (% rdx,% r13) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd1; + (* ADOX (% r10) (% rcx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xce; + (* MULX4 (% rcx,% rax) (% rdx,% r14) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd9; + (* ADOX (% r11) (% rcx) *) + 0xc4; 0x42; 0xfb; 0xf6; 0xe7; + (* MULX4 (% r12,% rax) (% rdx,% r15) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADCX (% r12) (% rbx) *) + 0x49; 0x8d; 0x44; 0x24; 0x01; + (* LEA (% rax) (%% (r12,1)) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xc8; + (* MULX4 (% rcx,% rax) (% rdx,% rax) *) + 0x49; 0x01; 0xc0; (* ADD (% r8) (% rax) *) + 0x49; 0x11; 0xc9; (* ADC (% r9) (% rcx) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x48; 0x19; 0xc0; (* SBB (% rax) (% rax) *) + 0x48; 0xf7; 0xd0; (* NOT (% rax) *) + 0x48; 0x21; 0xd0; (* AND (% rax) (% rdx) *) + 0x49; 0x29; 0xc0; (* SUB (% r8) (% rax) *) + 0x49; 0x19; 0xd9; (* SBB (% r9) (% rbx) *) + 0x49; 0x19; 0xda; (* SBB (% r10) (% rbx) *) + 0x49; 0x19; 0xdb; (* SBB (% r11) (% rbx) *) + 0x4c; 0x89; 0x44; 0x24; 0x60; + (* MOV (Memop Quadword (%% (rsp,96))) (% r8) *) + 0x4c; 0x89; 0x4c; 0x24; 0x68; + (* MOV (Memop Quadword (%% (rsp,104))) (% r9) *) + 0x4c; 0x89; 0x54; 0x24; 0x70; + (* MOV (Memop Quadword (%% (rsp,112))) (% r10) *) + 0x4c; 0x89; 0x5c; 0x24; 0x78; + (* MOV (Memop Quadword (%% (rsp,120))) (% r11) *) + 0x48; 0x8b; 0x54; 0x24; 0x20; + (* MOV (% rdx) (Memop Quadword (%% (rsp,32))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0xfa; + (* MULX4 (% r15,% r8) (% rdx,% rdx) *) + 0xc4; 0x62; 0xb3; 0xf6; 0x54; 0x24; 0x28; + (* MULX4 (% r10,% r9) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0xc4; 0x62; 0xa3; 0xf6; 0x64; 0x24; 0x38; + (* MULX4 (% r12,% r11) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x48; 0x8b; 0x54; 0x24; 0x30; + (* MOV (% rdx) (Memop Quadword (%% (rsp,48))) *) + 0xc4; 0x62; 0x93; 0xf6; 0x74; 0x24; 0x38; + (* MULX4 (% r14,% r13) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x4c; 0x24; 0x20; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd9; + (* ADOX (% r11) (% rcx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x4c; 0x24; 0x28; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADOX (% r12) (% rcx) *) + 0x48; 0x8b; 0x54; 0x24; 0x38; + (* MOV (% rdx) (Memop Quadword (%% (rsp,56))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x4c; 0x24; 0x28; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADOX (% r13) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADCX (% r13) (% rbx) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% r9) (% r9) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xcf; + (* ADOX (% r9) (% r15) *) + 0x48; 0x8b; 0x54; 0x24; 0x28; + (* MOV (% rdx) (Memop Quadword (%% (rsp,40))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xd2; + (* ADCX (% r10) (% r10) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADOX (% r10) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% r11) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% r11) (% rdx) *) + 0x48; 0x8b; 0x54; 0x24; 0x30; + (* MOV (% rdx) (Memop Quadword (%% (rsp,48))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xe4; + (* ADCX (% r12) (% r12) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADOX (% r12) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% r13) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xea; + (* ADOX (% r13) (% rdx) *) + 0x48; 0x8b; 0x54; 0x24; 0x38; + (* MOV (% rdx) (Memop Quadword (%% (rsp,56))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xfa; + (* MULX4 (% r15,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf6; + (* ADCX (% r14) (% r14) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% rax) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADCX (% r15) (% rbx) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x48; 0xba; 0xd1; 0x03; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294968273)) *) + 0x31; 0xdb; (* XOR (% ebx) (% ebx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xcc; + (* MULX4 (% rcx,% rax) (% rdx,% r12) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc9; + (* ADOX (% r9) (% rcx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xcd; + (* MULX4 (% rcx,% rax) (% rdx,% r13) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd1; + (* ADOX (% r10) (% rcx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xce; + (* MULX4 (% rcx,% rax) (% rdx,% r14) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd9; + (* ADOX (% r11) (% rcx) *) + 0xc4; 0x42; 0xfb; 0xf6; 0xe7; + (* MULX4 (% r12,% rax) (% rdx,% r15) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADCX (% r12) (% rbx) *) + 0x49; 0x8d; 0x44; 0x24; 0x01; + (* LEA (% rax) (%% (r12,1)) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xc8; + (* MULX4 (% rcx,% rax) (% rdx,% rax) *) + 0x49; 0x01; 0xc0; (* ADD (% r8) (% rax) *) + 0x49; 0x11; 0xc9; (* ADC (% r9) (% rcx) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x48; 0x19; 0xc0; (* SBB (% rax) (% rax) *) + 0x48; 0xf7; 0xd0; (* NOT (% rax) *) + 0x48; 0x21; 0xd0; (* AND (% rax) (% rdx) *) + 0x49; 0x29; 0xc0; (* SUB (% r8) (% rax) *) + 0x49; 0x19; 0xd9; (* SBB (% r9) (% rbx) *) + 0x49; 0x19; 0xda; (* SBB (% r10) (% rbx) *) + 0x49; 0x19; 0xdb; (* SBB (% r11) (% rbx) *) + 0x4c; 0x89; 0x04; 0x24; (* MOV (Memop Quadword (%% (rsp,0))) (% r8) *) + 0x4c; 0x89; 0x4c; 0x24; 0x08; + (* MOV (Memop Quadword (%% (rsp,8))) (% r9) *) + 0x4c; 0x89; 0x54; 0x24; 0x10; + (* MOV (Memop Quadword (%% (rsp,16))) (% r10) *) + 0x4c; 0x89; 0x5c; 0x24; 0x18; + (* MOV (Memop Quadword (%% (rsp,24))) (% r11) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x16; (* MOV (% rdx) (Memop Quadword (%% (rsi,0))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x4c; 0x24; 0x60; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x54; 0x24; 0x68; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x49; 0x01; 0xc1; (* ADD (% r9) (% rax) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x64; 0x24; 0x78; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x49; 0x11; 0xc3; (* ADC (% r11) (% rax) *) + 0x49; 0x11; 0xcc; (* ADC (% r12) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x56; 0x08; (* MOV (% rdx) (Memop Quadword (%% (rsi,8))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x6c; 0x24; 0x78; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADOX (% r13) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADCX (% r13) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x56; 0x10; (* MOV (% rdx) (Memop Quadword (%% (rsi,16))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x74; 0x24; 0x78; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADOX (% r14) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADCX (% r14) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x56; 0x18; (* MOV (% rdx) (Memop Quadword (%% (rsi,24))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x7c; 0x24; 0x78; + (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% rcx) *) + 0x48; 0xba; 0xd1; 0x03; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294968273)) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdc; + (* MULX4 (% rbx,% rax) (% rdx,% r12) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdd; + (* MULX4 (% rbx,% rax) (% rdx,% r13) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xde; + (* MULX4 (% rbx,% rax) (% rdx,% r14) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0x42; 0xfb; 0xf6; 0xe7; + (* MULX4 (% r12,% rax) (% rdx,% r15) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADOX (% r12) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADCX (% r12) (% rcx) *) + 0x49; 0x8d; 0x44; 0x24; 0x01; + (* LEA (% rax) (%% (r12,1)) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% rax) *) + 0x49; 0x01; 0xc0; (* ADD (% r8) (% rax) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) + 0x49; 0x11; 0xcb; (* ADC (% r11) (% rcx) *) + 0x48; 0x0f; 0x42; 0xd1; (* CMOVB (% rdx) (% rcx) *) + 0x49; 0x29; 0xd0; (* SUB (% r8) (% rdx) *) + 0x49; 0x19; 0xc9; (* SBB (% r9) (% rcx) *) + 0x49; 0x19; 0xca; (* SBB (% r10) (% rcx) *) + 0x49; 0x19; 0xcb; (* SBB (% r11) (% rcx) *) + 0x4c; 0x89; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,128))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,136))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,144))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,152))) (% r11) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x54; 0x24; 0x40; + (* MOV (% rdx) (Memop Quadword (%% (rsp,64))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x4c; 0x24; 0x60; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x54; 0x24; 0x68; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x49; 0x01; 0xc1; (* ADD (% r9) (% rax) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x64; 0x24; 0x78; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x49; 0x11; 0xc3; (* ADC (% r11) (% rax) *) + 0x49; 0x11; 0xcc; (* ADC (% r12) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x54; 0x24; 0x48; + (* MOV (% rdx) (Memop Quadword (%% (rsp,72))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x6c; 0x24; 0x78; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADOX (% r13) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADCX (% r13) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x54; 0x24; 0x50; + (* MOV (% rdx) (Memop Quadword (%% (rsp,80))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x74; 0x24; 0x78; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADOX (% r14) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADCX (% r14) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x54; 0x24; 0x58; + (* MOV (% rdx) (Memop Quadword (%% (rsp,88))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x7c; 0x24; 0x78; + (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% rcx) *) + 0x48; 0xba; 0xd1; 0x03; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294968273)) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdc; + (* MULX4 (% rbx,% rax) (% rdx,% r12) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdd; + (* MULX4 (% rbx,% rax) (% rdx,% r13) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xde; + (* MULX4 (% rbx,% rax) (% rdx,% r14) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0x42; 0xfb; 0xf6; 0xe7; + (* MULX4 (% r12,% rax) (% rdx,% r15) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADOX (% r12) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADCX (% r12) (% rcx) *) + 0x49; 0x8d; 0x44; 0x24; 0x01; + (* LEA (% rax) (%% (r12,1)) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% rax) *) + 0x49; 0x01; 0xc0; (* ADD (% r8) (% rax) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) + 0x49; 0x11; 0xcb; (* ADC (% r11) (% rcx) *) + 0x48; 0x0f; 0x42; 0xd1; (* CMOVB (% rdx) (% rcx) *) + 0x49; 0x29; 0xd0; (* SUB (% r8) (% rdx) *) + 0x49; 0x19; 0xc9; (* SBB (% r9) (% rcx) *) + 0x49; 0x19; 0xca; (* SBB (% r10) (% rcx) *) + 0x49; 0x19; 0xcb; (* SBB (% r11) (% rcx) *) + 0x4c; 0x89; 0x44; 0x24; 0x40; + (* MOV (Memop Quadword (%% (rsp,64))) (% r8) *) + 0x4c; 0x89; 0x4c; 0x24; 0x48; + (* MOV (Memop Quadword (%% (rsp,72))) (% r9) *) + 0x4c; 0x89; 0x54; 0x24; 0x50; + (* MOV (Memop Quadword (%% (rsp,80))) (% r10) *) + 0x4c; 0x89; 0x5c; 0x24; 0x58; + (* MOV (Memop Quadword (%% (rsp,88))) (% r11) *) + 0x31; 0xc0; (* XOR (% eax) (% eax) *) + 0x4c; 0x8b; 0x04; 0x24; (* MOV (% r8) (Memop Quadword (%% (rsp,0))) *) + 0x4c; 0x2b; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; + (* SUB (% r8) (Memop Quadword (%% (rsp,128))) *) + 0x4c; 0x8b; 0x4c; 0x24; 0x08; + (* MOV (% r9) (Memop Quadword (%% (rsp,8))) *) + 0x4c; 0x1b; 0x8c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* SBB (% r9) (Memop Quadword (%% (rsp,136))) *) + 0x4c; 0x8b; 0x54; 0x24; 0x10; + (* MOV (% r10) (Memop Quadword (%% (rsp,16))) *) + 0x4c; 0x1b; 0x94; 0x24; 0x90; 0x00; 0x00; 0x00; + (* SBB (% r10) (Memop Quadword (%% (rsp,144))) *) + 0x4c; 0x8b; 0x5c; 0x24; 0x18; + (* MOV (% r11) (Memop Quadword (%% (rsp,24))) *) + 0x4c; 0x1b; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* SBB (% r11) (Memop Quadword (%% (rsp,152))) *) + 0x48; 0xb9; 0xd1; 0x03; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rcx) (Imm64 (word 4294968273)) *) + 0x48; 0x0f; 0x43; 0xc8; (* CMOVAE (% rcx) (% rax) *) + 0x49; 0x29; 0xc8; (* SUB (% r8) (% rcx) *) + 0x4c; 0x89; 0x07; (* MOV (Memop Quadword (%% (rdi,0))) (% r8) *) + 0x49; 0x19; 0xc1; (* SBB (% r9) (% rax) *) + 0x4c; 0x89; 0x4f; 0x08; (* MOV (Memop Quadword (%% (rdi,8))) (% r9) *) + 0x49; 0x19; 0xc2; (* SBB (% r10) (% rax) *) + 0x4c; 0x89; 0x57; 0x10; (* MOV (Memop Quadword (%% (rdi,16))) (% r10) *) + 0x49; 0x19; 0xc3; (* SBB (% r11) (% rax) *) + 0x4c; 0x89; 0x5f; 0x18; (* MOV (Memop Quadword (%% (rdi,24))) (% r11) *) + 0x31; 0xc0; (* XOR (% eax) (% eax) *) + 0x4c; 0x8b; 0x44; 0x24; 0x40; + (* MOV (% r8) (Memop Quadword (%% (rsp,64))) *) + 0x4c; 0x2b; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; + (* SUB (% r8) (Memop Quadword (%% (rsp,128))) *) + 0x4c; 0x8b; 0x4c; 0x24; 0x48; + (* MOV (% r9) (Memop Quadword (%% (rsp,72))) *) + 0x4c; 0x1b; 0x8c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* SBB (% r9) (Memop Quadword (%% (rsp,136))) *) + 0x4c; 0x8b; 0x54; 0x24; 0x50; + (* MOV (% r10) (Memop Quadword (%% (rsp,80))) *) + 0x4c; 0x1b; 0x94; 0x24; 0x90; 0x00; 0x00; 0x00; + (* SBB (% r10) (Memop Quadword (%% (rsp,144))) *) + 0x4c; 0x8b; 0x5c; 0x24; 0x58; + (* MOV (% r11) (Memop Quadword (%% (rsp,88))) *) + 0x4c; 0x1b; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* SBB (% r11) (Memop Quadword (%% (rsp,152))) *) + 0x48; 0xb9; 0xd1; 0x03; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rcx) (Imm64 (word 4294968273)) *) + 0x48; 0x0f; 0x43; 0xc8; (* CMOVAE (% rcx) (% rax) *) + 0x49; 0x29; 0xc8; (* SUB (% r8) (% rcx) *) + 0x4c; 0x89; 0x44; 0x24; 0x60; + (* MOV (Memop Quadword (%% (rsp,96))) (% r8) *) + 0x49; 0x19; 0xc1; (* SBB (% r9) (% rax) *) + 0x4c; 0x89; 0x4c; 0x24; 0x68; + (* MOV (Memop Quadword (%% (rsp,104))) (% r9) *) + 0x49; 0x19; 0xc2; (* SBB (% r10) (% rax) *) + 0x4c; 0x89; 0x54; 0x24; 0x70; + (* MOV (Memop Quadword (%% (rsp,112))) (% r10) *) + 0x49; 0x19; 0xc3; (* SBB (% r11) (% rax) *) + 0x4c; 0x89; 0x5c; 0x24; 0x78; + (* MOV (Memop Quadword (%% (rsp,120))) (% r11) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x56; 0x40; (* MOV (% rdx) (Memop Quadword (%% (rsi,64))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x8c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x94; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x49; 0x01; 0xc1; (* ADD (% r9) (% rax) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xa4; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xc3; (* ADC (% r11) (% rax) *) + 0x49; 0x11; 0xcc; (* ADC (% r12) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x56; 0x48; (* MOV (% rdx) (Memop Quadword (%% (rsi,72))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xac; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADOX (% r13) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADCX (% r13) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x56; 0x50; (* MOV (% rdx) (Memop Quadword (%% (rsi,80))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xb4; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADOX (% r14) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADCX (% r14) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x56; 0x58; (* MOV (% rdx) (Memop Quadword (%% (rsi,88))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xbc; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% rcx) *) + 0x48; 0xba; 0xd1; 0x03; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294968273)) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdc; + (* MULX4 (% rbx,% rax) (% rdx,% r12) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdd; + (* MULX4 (% rbx,% rax) (% rdx,% r13) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xde; + (* MULX4 (% rbx,% rax) (% rdx,% r14) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0x42; 0xfb; 0xf6; 0xe7; + (* MULX4 (% r12,% rax) (% rdx,% r15) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADOX (% r12) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADCX (% r12) (% rcx) *) + 0x49; 0x8d; 0x44; 0x24; 0x01; + (* LEA (% rax) (%% (r12,1)) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% rax) *) + 0x49; 0x01; 0xc0; (* ADD (% r8) (% rax) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) + 0x49; 0x11; 0xcb; (* ADC (% r11) (% rcx) *) + 0x48; 0x0f; 0x42; 0xd1; (* CMOVB (% rdx) (% rcx) *) + 0x49; 0x29; 0xd0; (* SUB (% r8) (% rdx) *) + 0x49; 0x19; 0xc9; (* SBB (% r9) (% rcx) *) + 0x49; 0x19; 0xca; (* SBB (% r10) (% rcx) *) + 0x49; 0x19; 0xcb; (* SBB (% r11) (% rcx) *) + 0x4c; 0x89; 0x47; 0x40; (* MOV (Memop Quadword (%% (rdi,64))) (% r8) *) + 0x4c; 0x89; 0x4f; 0x48; (* MOV (Memop Quadword (%% (rdi,72))) (% r9) *) + 0x4c; 0x89; 0x57; 0x50; (* MOV (Memop Quadword (%% (rdi,80))) (% r10) *) + 0x4c; 0x89; 0x5f; 0x58; (* MOV (Memop Quadword (%% (rdi,88))) (% r11) *) + 0x31; 0xc0; (* XOR (% eax) (% eax) *) + 0x4c; 0x8b; 0x07; (* MOV (% r8) (Memop Quadword (%% (rdi,0))) *) + 0x4c; 0x2b; 0x44; 0x24; 0x40; + (* SUB (% r8) (Memop Quadword (%% (rsp,64))) *) + 0x4c; 0x8b; 0x4f; 0x08; (* MOV (% r9) (Memop Quadword (%% (rdi,8))) *) + 0x4c; 0x1b; 0x4c; 0x24; 0x48; + (* SBB (% r9) (Memop Quadword (%% (rsp,72))) *) + 0x4c; 0x8b; 0x57; 0x10; (* MOV (% r10) (Memop Quadword (%% (rdi,16))) *) + 0x4c; 0x1b; 0x54; 0x24; 0x50; + (* SBB (% r10) (Memop Quadword (%% (rsp,80))) *) + 0x4c; 0x8b; 0x5f; 0x18; (* MOV (% r11) (Memop Quadword (%% (rdi,24))) *) + 0x4c; 0x1b; 0x5c; 0x24; 0x58; + (* SBB (% r11) (Memop Quadword (%% (rsp,88))) *) + 0x48; 0xb9; 0xd1; 0x03; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rcx) (Imm64 (word 4294968273)) *) + 0x48; 0x0f; 0x43; 0xc8; (* CMOVAE (% rcx) (% rax) *) + 0x49; 0x29; 0xc8; (* SUB (% r8) (% rcx) *) + 0x4c; 0x89; 0x07; (* MOV (Memop Quadword (%% (rdi,0))) (% r8) *) + 0x49; 0x19; 0xc1; (* SBB (% r9) (% rax) *) + 0x4c; 0x89; 0x4f; 0x08; (* MOV (Memop Quadword (%% (rdi,8))) (% r9) *) + 0x49; 0x19; 0xc2; (* SBB (% r10) (% rax) *) + 0x4c; 0x89; 0x57; 0x10; (* MOV (Memop Quadword (%% (rdi,16))) (% r10) *) + 0x49; 0x19; 0xc3; (* SBB (% r11) (% rax) *) + 0x4c; 0x89; 0x5f; 0x18; (* MOV (Memop Quadword (%% (rdi,24))) (% r11) *) + 0x31; 0xc0; (* XOR (% eax) (% eax) *) + 0x4c; 0x8b; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (% r8) (Memop Quadword (%% (rsp,128))) *) + 0x4c; 0x2b; 0x07; (* SUB (% r8) (Memop Quadword (%% (rdi,0))) *) + 0x4c; 0x8b; 0x8c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (% r9) (Memop Quadword (%% (rsp,136))) *) + 0x4c; 0x1b; 0x4f; 0x08; (* SBB (% r9) (Memop Quadword (%% (rdi,8))) *) + 0x4c; 0x8b; 0x94; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (% r10) (Memop Quadword (%% (rsp,144))) *) + 0x4c; 0x1b; 0x57; 0x10; (* SBB (% r10) (Memop Quadword (%% (rdi,16))) *) + 0x4c; 0x8b; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (% r11) (Memop Quadword (%% (rsp,152))) *) + 0x4c; 0x1b; 0x5f; 0x18; (* SBB (% r11) (Memop Quadword (%% (rdi,24))) *) + 0x48; 0xb9; 0xd1; 0x03; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rcx) (Imm64 (word 4294968273)) *) + 0x48; 0x0f; 0x43; 0xc8; (* CMOVAE (% rcx) (% rax) *) + 0x49; 0x29; 0xc8; (* SUB (% r8) (% rcx) *) + 0x4c; 0x89; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,128))) (% r8) *) + 0x49; 0x19; 0xc1; (* SBB (% r9) (% rax) *) + 0x4c; 0x89; 0x8c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,136))) (% r9) *) + 0x49; 0x19; 0xc2; (* SBB (% r10) (% rax) *) + 0x4c; 0x89; 0x94; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,144))) (% r10) *) + 0x49; 0x19; 0xc3; (* SBB (% r11) (% rax) *) + 0x4c; 0x89; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,152))) (% r11) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x56; 0x20; (* MOV (% rdx) (Memop Quadword (%% (rsi,32))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x4c; 0x24; 0x60; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x54; 0x24; 0x68; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x49; 0x01; 0xc1; (* ADD (% r9) (% rax) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x64; 0x24; 0x78; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x49; 0x11; 0xc3; (* ADC (% r11) (% rax) *) + 0x49; 0x11; 0xcc; (* ADC (% r12) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x56; 0x28; (* MOV (% rdx) (Memop Quadword (%% (rsi,40))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x6c; 0x24; 0x78; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADOX (% r13) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADCX (% r13) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x56; 0x30; (* MOV (% rdx) (Memop Quadword (%% (rsi,48))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x74; 0x24; 0x78; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADOX (% r14) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADCX (% r14) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x56; 0x38; (* MOV (% rdx) (Memop Quadword (%% (rsi,56))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x7c; 0x24; 0x78; + (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% rcx) *) + 0x48; 0xba; 0xd1; 0x03; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294968273)) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdc; + (* MULX4 (% rbx,% rax) (% rdx,% r12) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdd; + (* MULX4 (% rbx,% rax) (% rdx,% r13) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xde; + (* MULX4 (% rbx,% rax) (% rdx,% r14) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0x42; 0xfb; 0xf6; 0xe7; + (* MULX4 (% r12,% rax) (% rdx,% r15) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADOX (% r12) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADCX (% r12) (% rcx) *) + 0x49; 0x8d; 0x44; 0x24; 0x01; + (* LEA (% rax) (%% (r12,1)) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% rax) *) + 0x49; 0x01; 0xc0; (* ADD (% r8) (% rax) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) + 0x49; 0x11; 0xcb; (* ADC (% r11) (% rcx) *) + 0x48; 0x0f; 0x42; 0xd1; (* CMOVB (% rdx) (% rcx) *) + 0x49; 0x29; 0xd0; (* SUB (% r8) (% rdx) *) + 0x49; 0x19; 0xc9; (* SBB (% r9) (% rcx) *) + 0x49; 0x19; 0xca; (* SBB (% r10) (% rcx) *) + 0x49; 0x19; 0xcb; (* SBB (% r11) (% rcx) *) + 0x4c; 0x89; 0x44; 0x24; 0x60; + (* MOV (Memop Quadword (%% (rsp,96))) (% r8) *) + 0x4c; 0x89; 0x4c; 0x24; 0x68; + (* MOV (Memop Quadword (%% (rsp,104))) (% r9) *) + 0x4c; 0x89; 0x54; 0x24; 0x70; + (* MOV (Memop Quadword (%% (rsp,112))) (% r10) *) + 0x4c; 0x89; 0x5c; 0x24; 0x78; + (* MOV (Memop Quadword (%% (rsp,120))) (% r11) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x94; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,128))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x4c; 0x24; 0x20; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x54; 0x24; 0x28; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x49; 0x01; 0xc1; (* ADD (% r9) (% rax) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x64; 0x24; 0x38; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x49; 0x11; 0xc3; (* ADC (% r11) (% rax) *) + 0x49; 0x11; 0xcc; (* ADC (% r12) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x94; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,136))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x6c; 0x24; 0x38; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADOX (% r13) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADCX (% r13) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x94; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,144))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x74; 0x24; 0x38; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADOX (% r14) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADCX (% r14) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x94; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,152))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x7c; 0x24; 0x38; + (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% rcx) *) + 0x48; 0xba; 0xd1; 0x03; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294968273)) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdc; + (* MULX4 (% rbx,% rax) (% rdx,% r12) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdd; + (* MULX4 (% rbx,% rax) (% rdx,% r13) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xde; + (* MULX4 (% rbx,% rax) (% rdx,% r14) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0x42; 0xfb; 0xf6; 0xe7; + (* MULX4 (% r12,% rax) (% rdx,% r15) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADOX (% r12) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADCX (% r12) (% rcx) *) + 0x49; 0x8d; 0x44; 0x24; 0x01; + (* LEA (% rax) (%% (r12,1)) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% rax) *) + 0x49; 0x01; 0xc0; (* ADD (% r8) (% rax) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) + 0x49; 0x11; 0xcb; (* ADC (% r11) (% rcx) *) + 0x48; 0x0f; 0x42; 0xd1; (* CMOVB (% rdx) (% rcx) *) + 0x49; 0x29; 0xd0; (* SUB (% r8) (% rdx) *) + 0x49; 0x19; 0xc9; (* SBB (% r9) (% rcx) *) + 0x49; 0x19; 0xca; (* SBB (% r10) (% rcx) *) + 0x49; 0x19; 0xcb; (* SBB (% r11) (% rcx) *) + 0x4c; 0x89; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,128))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,136))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,144))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,152))) (% r11) *) + 0x31; 0xc0; (* XOR (% eax) (% eax) *) + 0x4c; 0x8b; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (% r8) (Memop Quadword (%% (rsp,128))) *) + 0x4c; 0x2b; 0x44; 0x24; 0x60; + (* SUB (% r8) (Memop Quadword (%% (rsp,96))) *) + 0x4c; 0x8b; 0x8c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (% r9) (Memop Quadword (%% (rsp,136))) *) + 0x4c; 0x1b; 0x4c; 0x24; 0x68; + (* SBB (% r9) (Memop Quadword (%% (rsp,104))) *) + 0x4c; 0x8b; 0x94; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (% r10) (Memop Quadword (%% (rsp,144))) *) + 0x4c; 0x1b; 0x54; 0x24; 0x70; + (* SBB (% r10) (Memop Quadword (%% (rsp,112))) *) + 0x4c; 0x8b; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (% r11) (Memop Quadword (%% (rsp,152))) *) + 0x4c; 0x1b; 0x5c; 0x24; 0x78; + (* SBB (% r11) (Memop Quadword (%% (rsp,120))) *) + 0x48; 0xb9; 0xd1; 0x03; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rcx) (Imm64 (word 4294968273)) *) + 0x48; 0x0f; 0x43; 0xc8; (* CMOVAE (% rcx) (% rax) *) + 0x49; 0x29; 0xc8; (* SUB (% r8) (% rcx) *) + 0x4c; 0x89; 0x47; 0x20; (* MOV (Memop Quadword (%% (rdi,32))) (% r8) *) + 0x49; 0x19; 0xc1; (* SBB (% r9) (% rax) *) + 0x4c; 0x89; 0x4f; 0x28; (* MOV (Memop Quadword (%% (rdi,40))) (% r9) *) + 0x49; 0x19; 0xc2; (* SBB (% r10) (% rax) *) + 0x4c; 0x89; 0x57; 0x30; (* MOV (Memop Quadword (%% (rdi,48))) (% r10) *) + 0x49; 0x19; 0xc3; (* SBB (% r11) (% rax) *) + 0x4c; 0x89; 0x5f; 0x38; (* MOV (Memop Quadword (%% (rdi,56))) (% r11) *) + 0x48; 0x81; 0xc4; 0xc0; 0x00; 0x00; 0x00; + (* ADD (% rsp) (Imm32 (word 192)) *) + 0x41; 0x5f; (* POP (% r15) *) + 0x41; 0x5e; (* POP (% r14) *) + 0x41; 0x5d; (* POP (% r13) *) + 0x41; 0x5c; (* POP (% r12) *) + 0x5d; (* POP (% rbp) *) + 0x5b; (* POP (% rbx) *) + 0xc3 (* RET *) +];; + +let SECP256K1_JMIXADD_EXEC = X86_MK_CORE_EXEC_RULE secp256k1_jmixadd_mc;; + +(* ------------------------------------------------------------------------- *) +(* Common supporting definitions and lemmas for component proofs. *) +(* ------------------------------------------------------------------------- *) + +let p_256k1 = new_definition `p_256k1 = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F`;; + +let p256k1redlemma = prove + (`!n. n <= (2 EXP 64 - 1) * (p_256k1 - 1) + ==> let q = n DIV 2 EXP 256 + 1 in + q < 2 EXP 64 /\ + q * p_256k1 <= n + p_256k1 /\ + n < q * p_256k1 + p_256k1`, + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN REWRITE_TAC[p_256k1] THEN ARITH_TAC);; + +let secp256k1 = define + `secp256k1 = (integer_mod_ring p_256k1,&0:int,&7:int)`;; + +let secp256k1_encode = new_definition + `secp256k1_encode = modular_encode(256,p_256k1)`;; + +let nintlemma = prove + (`&(num_of_int(x rem &p_256k1)) = x rem &p_256k1`, + MATCH_MP_TAC INT_OF_NUM_OF_INT THEN MATCH_MP_TAC INT_REM_POS THEN + REWRITE_TAC[INT_OF_NUM_EQ; p_256k1] THEN CONV_TAC NUM_REDUCE_CONV);; + +let unilemma0 = prove + (`x = a MOD p_256k1 ==> x < p_256k1 /\ &x = &a rem &p_256k1`, + REWRITE_TAC[INT_OF_NUM_REM; p_256k1] THEN ARITH_TAC);; + +let unilemma1 = prove + (`&x = a rem &p_256k1 ==> x < p_256k1 /\ &x = a rem &p_256k1`, + SIMP_TAC[GSYM INT_OF_NUM_LT; INT_LT_REM_EQ; p_256k1] THEN INT_ARITH_TAC);; + +let unilemma2 = prove + (`X = num_of_int(x rem &p_256k1) ==> X < p_256k1 /\ &X = x rem &p_256k1`, + DISCH_THEN SUBST1_TAC THEN + REWRITE_TAC[GSYM INT_OF_NUM_LT; nintlemma; INT_LT_REM_EQ] THEN + REWRITE_TAC[INT_OF_NUM_LT; p_256k1] THEN CONV_TAC NUM_REDUCE_CONV);; + +let lvs = + ["x_1",[`RSI`;`0`]; + "y_1",[`RSI`;`32`]; + "z_1",[`RSI`;`64`]; + "x_2",[`RBP`;`0`]; + "y_2",[`RBP`;`32`]; + "z_2",[`RBP`;`64`]; + "x_3",[`RDI`;`0`]; + "y_3",[`RDI`;`32`]; + "z_3",[`RDI`;`64`]; + "zp2",[`RSP`;`0`]; + "ww",[`RSP`;`0`]; + "yd",[`RSP`;`32`]; + "y2a",[`RSP`;`32`]; + "x2a",[`RSP`;`64`]; + "zzx2",[`RSP`;`64`]; + "zz",[`RSP`;`96`]; + "t1",[`RSP`;`96`]; + "t2",[`RSP`;`128`]; + "zzx1",[`RSP`;`128`]; + "xd",[`RSP`;`160`]];; + +(* ------------------------------------------------------------------------- *) +(* Instances of sqr. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_SQR_P256K1_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE secp256k1_jmixadd_mc) 73 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1. + !n. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = n + ==> + nonoverlapping (word pc,0x15b1) (word_add (read p3 t) (word n3),32) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST secp256k1_jmixadd_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read RBP s = read RBP t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) s = + n) + (\s. read RIP s = pcout /\ + read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 4)) s = (n EXP 2) MOD p_256k1) + (MAYCHANGE [RIP; RAX; RBX; RCX; RDX; + R8; R9; R10; R11; R12; R13; R14; R15] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 4)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "n_" o lhand o concl) THEN + + (*** The initial squaring block, very similar to bignum_sqr_4_8 ***) + + X86_ACCSTEPS_TAC SECP256K1_JMIXADD_EXEC (1--41) (1--41) THEN + MAP_EVERY ABBREV_TAC + [`l = bignum_of_wordlist[mullo_s2; sum_s23; sum_s27; sum_s29]`; + `h = bignum_of_wordlist[sum_s33; sum_s35; sum_s39; sum_s41]`] THEN + SUBGOAL_THEN `2 EXP 256 * h + l = n EXP 2` (SUBST1_TAC o SYM) THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"; "n"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_ARITH_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** The initial modular reduction of the high part ***) + + SUBGOAL_THEN + `(2 EXP 256 * h + l) MOD p_256k1 = (4294968273 * h + l) MOD p_256k1` + SUBST1_TAC THENL + [ONCE_REWRITE_TAC[GSYM MOD_ADD_MOD] THEN + ONCE_REWRITE_TAC[GSYM MOD_MULT_LMOD] THEN + REWRITE_TAC[p_256k1] THEN CONV_TAC NUM_REDUCE_CONV; + ALL_TAC] THEN + + (*** Instantiate the quotient approximation lemma ***) + + MP_TAC(SPEC `4294968273 * h + l` p256k1redlemma) THEN ANTS_TAC THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"] THEN REWRITE_TAC[p_256k1] THEN + CONV_TAC NUM_REDUCE_CONV THEN BOUNDER_TAC[]; + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN STRIP_TAC] THEN + + (*** Reduction from 8 digits to 5 digits ***) + + X86_ACCSTEPS_TAC SECP256K1_JMIXADD_EXEC (42--56) (42--56) THEN + ABBREV_TAC + `ca = bignum_of_wordlist[sum_s45; sum_s48; sum_s51; sum_s54; sum_s56]` THEN + SUBGOAL_THEN `4294968273 * h + l = ca` SUBST_ALL_TAC THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"; "ca"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_ARITH_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Quotient estimate computation ***) + + SUBGOAL_THEN `ca DIV 2 EXP 256 = val(sum_s56:int64)` SUBST_ALL_TAC THENL + [EXPAND_TAC "ca" THEN CONV_TAC(LAND_CONV BIGNUM_OF_WORDLIST_DIV_CONV) THEN + REFL_TAC; + FIRST_ASSUM(ASSUME_TAC o MATCH_MP (ARITH_RULE + `n + 1 < 2 EXP 64 ==> n < 2 EXP 64 - 1`))] THEN + + X86_STEPS_TAC SECP256K1_JMIXADD_EXEC [57] THEN + ABBREV_TAC `q:int64 = word_add sum_s56 (word 1)` THEN + SUBGOAL_THEN `val(sum_s56:int64) + 1 = val(q:int64)` SUBST_ALL_TAC THENL + [EXPAND_TAC "q" THEN REWRITE_TAC[VAL_WORD_ADD; VAL_WORD_1] THEN + ASM_SIMP_TAC[DIMINDEX_64; MOD_LT]; + ALL_TAC] THEN + + (*** The rest of the computation ***) + + X86_ACCSTEPS_TAC SECP256K1_JMIXADD_EXEC + [58;59;60;61;62;66;67;68;69] (58--73) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC MOD_UNIQ_BALANCED_REAL THEN + MAP_EVERY EXISTS_TAC [`val(q:int64)`; `256`] THEN ASM_REWRITE_TAC[] THEN + CONJ_TAC THENL [REWRITE_TAC[p_256k1] THEN ARITH_TAC; ALL_TAC] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN + + (*** Comparison computation and then the rest is easy ***) + + SUBGOAL_THEN `ca < val(q:int64) * p_256k1 <=> ~carry_s62` SUBST1_TAC THENL + [CONV_TAC SYM_CONV THEN MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN + EXISTS_TAC `256` THEN EXPAND_TAC "ca" THEN + REWRITE_TAC[p_256k1; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + REWRITE_TAC[REAL_BITVAL_NOT] THEN + SUBGOAL_THEN `&(val(sum_s56:int64)):real = &(val(q:int64)) - &1` + SUBST1_TAC THENL + [FIRST_X_ASSUM(MP_TAC o MATCH_MP (ARITH_RULE + `n < 2 EXP 64 - 1 ==> n + 1 < 2 EXP 64`)) THEN + UNDISCH_THEN `word_add sum_s56 (word 1):int64 = q` (SUBST1_TAC o SYM) THEN + SIMP_TAC[VAL_WORD_ADD; VAL_WORD_1; DIMINDEX_64; MOD_LT] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN REAL_ARITH_TAC; + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]]; + EXPAND_TAC "ca" THEN + REWRITE_TAC[REAL_BITVAL_NOT] THEN + REWRITE_TAC[p_256k1; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + RULE_ASSUM_TAC(REWRITE_RULE[WORD_UNMASK_64]) THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + ASM_CASES_TAC `carry_s62:bool` THEN + ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN CONV_TAC WORD_REDUCE_CONV THEN + REAL_INTEGER_TAC]);; + +(* ------------------------------------------------------------------------- *) +(* Instances of mul. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_MUL_P256K1_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE secp256k1_jmixadd_mc) 85 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) t = n + ==> + nonoverlapping (word pc,0x15b1) (word_add (read p3 t) (word n3),32) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST secp256k1_jmixadd_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read RBP s = read RBP t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) s = + n) + (\s. read RIP s = pcout /\ + read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 4)) s = (m * n) MOD p_256k1) + (MAYCHANGE [RIP; RAX; RBX; RCX; RDX; + R8; R9; R10; R11; R12; R13; R14; R15] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 4)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s1" THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "m_" o lhand o concl) THEN + + (*** The initial multiplication block, very similar to bignum_mul_4_8 ***) + + X86_ACCSTEPS_TAC SECP256K1_JMIXADD_EXEC (2--56) (2--56) THEN + MAP_EVERY ABBREV_TAC + [`l = bignum_of_wordlist[mullo_s4; sum_s15; sum_s30; sum_s45]`; + `h = bignum_of_wordlist[sum_s48; sum_s51; sum_s54; sum_s56]`] THEN + SUBGOAL_THEN `2 EXP 256 * h + l = m * n` (SUBST1_TAC o SYM) THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"; "m"; "n"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_ARITH_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** The initial modular reduction of the high part ***) + + SUBGOAL_THEN + `(2 EXP 256 * h + l) MOD p_256k1 = (4294968273 * h + l) MOD p_256k1` + SUBST1_TAC THENL + [ONCE_REWRITE_TAC[GSYM MOD_ADD_MOD] THEN + ONCE_REWRITE_TAC[GSYM MOD_MULT_LMOD] THEN + REWRITE_TAC[p_256k1] THEN CONV_TAC NUM_REDUCE_CONV; + ALL_TAC] THEN + + (*** Instantiate the quotient approximation lemma ***) + + MP_TAC(SPEC `4294968273 * h + l` p256k1redlemma) THEN ANTS_TAC THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"] THEN REWRITE_TAC[p_256k1] THEN + CONV_TAC NUM_REDUCE_CONV THEN BOUNDER_TAC[]; + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN STRIP_TAC] THEN + + (*** Reduction from 8 digits to 5 digits ***) + + X86_ACCSTEPS_TAC SECP256K1_JMIXADD_EXEC (57--71) (57--71) THEN + ABBREV_TAC + `ca = bignum_of_wordlist[sum_s60; sum_s63; sum_s66; sum_s69; sum_s71]` THEN + SUBGOAL_THEN `4294968273 * h + l = ca` SUBST_ALL_TAC THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"; "ca"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_ARITH_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Quotient estimate computation ***) + + SUBGOAL_THEN `ca DIV 2 EXP 256 = val(sum_s71:int64)` SUBST_ALL_TAC THENL + [EXPAND_TAC "ca" THEN CONV_TAC(LAND_CONV BIGNUM_OF_WORDLIST_DIV_CONV) THEN + REFL_TAC; + FIRST_ASSUM(ASSUME_TAC o MATCH_MP (ARITH_RULE + `n + 1 < 2 EXP 64 ==> n < 2 EXP 64 - 1`))] THEN + + X86_STEPS_TAC SECP256K1_JMIXADD_EXEC [72] THEN + ABBREV_TAC `q:int64 = word_add sum_s71 (word 1)` THEN + SUBGOAL_THEN `val(sum_s71:int64) + 1 = val(q:int64)` SUBST_ALL_TAC THENL + [EXPAND_TAC "q" THEN REWRITE_TAC[VAL_WORD_ADD; VAL_WORD_1] THEN + ASM_SIMP_TAC[DIMINDEX_64; MOD_LT]; + ALL_TAC] THEN + + (*** The rest of the computation ***) + + X86_ACCSTEPS_TAC SECP256K1_JMIXADD_EXEC + [73;74;75;76;77;79;80;81;82] (73--86) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC MOD_UNIQ_BALANCED_REAL THEN + MAP_EVERY EXISTS_TAC [`val(q:int64)`; `256`] THEN ASM_REWRITE_TAC[] THEN + CONJ_TAC THENL [REWRITE_TAC[p_256k1] THEN ARITH_TAC; ALL_TAC] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN + + (*** Comparison computation and then the rest is easy ***) + + SUBGOAL_THEN `ca < val(q:int64) * p_256k1 <=> ~carry_s77` SUBST1_TAC THENL + [CONV_TAC SYM_CONV THEN MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN + EXISTS_TAC `256` THEN EXPAND_TAC "ca" THEN + REWRITE_TAC[p_256k1; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + REWRITE_TAC[REAL_BITVAL_NOT] THEN + SUBGOAL_THEN `&(val(sum_s71:int64)):real = &(val(q:int64)) - &1` + SUBST1_TAC THENL + [FIRST_X_ASSUM(MP_TAC o MATCH_MP (ARITH_RULE + `n < 2 EXP 64 - 1 ==> n + 1 < 2 EXP 64`)) THEN + UNDISCH_THEN `word_add sum_s71 (word 1):int64 = q` (SUBST1_TAC o SYM) THEN + SIMP_TAC[VAL_WORD_ADD; VAL_WORD_1; DIMINDEX_64; MOD_LT] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN REAL_ARITH_TAC; + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]]; + EXPAND_TAC "ca" THEN + REWRITE_TAC[REAL_BITVAL_NOT] THEN + REWRITE_TAC[p_256k1; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + RULE_ASSUM_TAC(REWRITE_RULE[WORD_UNMASK_64]) THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + ASM_CASES_TAC `carry_s77:bool` THEN + ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN CONV_TAC WORD_REDUCE_CONV THEN + REAL_INTEGER_TAC]);; + +(* ------------------------------------------------------------------------- *) +(* Instances of sub. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_SUB_P256K1_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE secp256k1_jmixadd_mc) 19 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) t = n + ==> + nonoverlapping (word pc,0x15b1) (word_add (read p3 t) (word n3),32) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST secp256k1_jmixadd_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read RBP s = read RBP t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) s = + n) + (\s. read RIP s = pcout /\ + (m < p_256k1 /\ n < p_256k1 + ==> &(read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 4)) s) = (&m - &n) rem &p_256k1)) + (MAYCHANGE [RIP; RAX; RCX; R8; R9; R10; R11] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 4)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "m_" o lhand o concl) THEN + + X86_ACCSTEPS_TAC SECP256K1_JMIXADD_EXEC [3;5;7;9] (1--9) THEN + + SUBGOAL_THEN `carry_s9 <=> m < n` SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN EXISTS_TAC `256` THEN + MAP_EVERY EXPAND_TAC ["m"; "n"] THEN REWRITE_TAC[GSYM REAL_OF_NUM_ADD] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_MUL; GSYM REAL_OF_NUM_POW] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ALL_TAC] THEN + + X86_ACCSTEPS_TAC SECP256K1_JMIXADD_EXEC [12;14;16;18] (10--19) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN STRIP_TAC THEN + CONV_TAC(LAND_CONV(RAND_CONV BIGNUM_EXPAND_CONV)) THEN + ASM_REWRITE_TAC[] THEN DISCARD_STATE_TAC "s19" THEN + + CONV_TAC SYM_CONV THEN MATCH_MP_TAC INT_REM_UNIQ THEN + EXISTS_TAC `--(&(bitval(m < n))):int` THEN REWRITE_TAC[INT_ABS_NUM] THEN + REWRITE_TAC[INT_ARITH `m - n:int = --b * p + z <=> z = b * p + m - n`] THEN + REWRITE_TAC[int_eq; int_le; int_lt] THEN + REWRITE_TAC[int_add_th; int_mul_th; int_of_num_th; int_sub_th] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_ADD; GSYM REAL_OF_NUM_MUL; + GSYM REAL_OF_NUM_POW] THEN + MATCH_MP_TAC(REAL_ARITH + `!t:real. p < t /\ + (&0 <= a /\ a < p) /\ + (&0 <= z /\ z < t) /\ + ((&0 <= z /\ z < t) /\ (&0 <= a /\ a < t) ==> z = a) + ==> z = a /\ &0 <= z /\ z < p`) THEN + EXISTS_TAC `(&2:real) pow 256` THEN + + CONJ_TAC THENL [REWRITE_TAC[p_256k1] THEN REAL_ARITH_TAC; ALL_TAC] THEN + CONJ_TAC THENL + [MAP_EVERY UNDISCH_TAC [`m < p_256k1`; `n < p_256k1`] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_LT] THEN + ASM_CASES_TAC `&m:real < &n` THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + POP_ASSUM MP_TAC THEN REWRITE_TAC[p_256k1] THEN REAL_ARITH_TAC; + ALL_TAC] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; STRIP_TAC] THEN + + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`256`; `&0:real`] THEN + ASM_REWRITE_TAC[] THEN + CONJ_TAC THENL [REAL_INTEGER_TAC; ALL_TAC] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[GSYM NOT_LE; BITVAL_CLAUSES] THEN + CONV_TAC WORD_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["m"; "n"] THEN REWRITE_TAC[GSYM REAL_OF_NUM_ADD] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_MUL; GSYM REAL_OF_NUM_POW; p_256k1] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + CONV_TAC(RAND_CONV REAL_POLY_CONV) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Overall point operation proof. *) +(* ------------------------------------------------------------------------- *) + +let SECP256K1_JMIXADD_CORRECT = time prove + (`!p3 p1 t1 p2 t2 pc stackpointer. + ALLPAIRS nonoverlapping + [(p3,96); (stackpointer,192)] + [(word pc,0x15b1); (p1,96); (p2,96)] /\ + nonoverlapping (p3,96) (stackpointer,192) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST secp256k1_jmixadd_mc) /\ + read RIP s = word(pc + 0x11) /\ + read RSP s = stackpointer /\ + C_ARGUMENTS [p3; p1; p2] s /\ + bignum_triple_from_memory (p1,4) s = t1 /\ + bignum_pair_from_memory (p2,4) s = t2) + (\s. read RIP s = word (pc + 0x159f) /\ + (!x1 y1 z1 x2 y2 z2. + ~(z1 = &0) /\ z2 = &1 /\ + ~(jacobian_eq (integer_mod_ring p_256k1) + (x1,y1,z1) (x2,y2,z2)) /\ + ~(jacobian_eq (integer_mod_ring p_256k1) + (jacobian_neg secp256k1 (x1,y1,z1)) + (x2,y2,z2)) /\ + t1 = tripled secp256k1_encode (x1,y1,z1) /\ + t2 = paired secp256k1_encode (x2,y2) + ==> bignum_triple_from_memory(p3,4) s = + tripled secp256k1_encode + (jacobian_add secp256k1 (x1,y1,z1) (x2,y2,z2)))) + (MAYCHANGE [RIP; RAX; RBX; RCX; RDX; RBP; R8; R9; + R10; R11; R12; R13; R14; R15] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,96); + memory :> bytes(stackpointer,192)])`, + REWRITE_TAC[FORALL_PAIR_THM] THEN + MAP_EVERY X_GEN_TAC + [`p3:int64`; `p1:int64`; `x1:num`; `y1:num`; `z1:num`; `p2:int64`; + `x2:num`; `y2:num`; `pc:num`; `stackpointer:int64`] THEN + REWRITE_TAC[ALLPAIRS; ALL; NONOVERLAPPING_CLAUSES] THEN STRIP_TAC THEN + REWRITE_TAC[C_ARGUMENTS; SOME_FLAGS; PAIR_EQ; + bignum_pair_from_memory; bignum_triple_from_memory] THEN + CONV_TAC(ONCE_DEPTH_CONV NUM_MULT_CONV) THEN + CONV_TAC(ONCE_DEPTH_CONV NORMALIZE_RELATIVE_ADDRESS_CONV) THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + + LOCAL_SQR_P256K1_TAC 1 ["zp2";"z_1"] THEN + LOCAL_MUL_P256K1_TAC 0 ["y2a";"z_1";"y_2"] THEN + LOCAL_MUL_P256K1_TAC 0 ["x2a";"zp2";"x_2"] THEN + LOCAL_MUL_P256K1_TAC 0 ["y2a";"zp2";"y2a"] THEN + LOCAL_SUB_P256K1_TAC 0 ["xd";"x2a";"x_1"] THEN + LOCAL_SUB_P256K1_TAC 0 ["yd";"y2a";"y_1"] THEN + LOCAL_SQR_P256K1_TAC 0 ["zz";"xd"] THEN + LOCAL_SQR_P256K1_TAC 0 ["ww";"yd"] THEN + LOCAL_MUL_P256K1_TAC 0 ["zzx1";"zz";"x_1"] THEN + LOCAL_MUL_P256K1_TAC 0 ["zzx2";"zz";"x2a"] THEN + LOCAL_SUB_P256K1_TAC 0 ["x_3";"ww";"zzx1"] THEN + LOCAL_SUB_P256K1_TAC 0 ["t1";"zzx2";"zzx1"] THEN + LOCAL_MUL_P256K1_TAC 0 ["z_3";"xd";"z_1"] THEN + LOCAL_SUB_P256K1_TAC 0 ["x_3";"x_3";"zzx2"] THEN + LOCAL_SUB_P256K1_TAC 0 ["t2";"zzx1";"x_3"] THEN + LOCAL_MUL_P256K1_TAC 0 ["t1";"t1";"y_1"] THEN + LOCAL_MUL_P256K1_TAC 0 ["t2";"yd";"t2"] THEN + LOCAL_SUB_P256K1_TAC 0 ["y_3";"t2";"t1"] THEN + + (*** Remove some assumptions slowing down SUBSUMED_MAYCHANGE_TAC ***) + + FIRST_X_ASSUM(MP_TAC o + check (can (term_match [] `(MAYCHANGE a ,, b) s s'` o concl))) THEN + POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o rev) THEN + DISCH_THEN(fun th -> + DISCH_TAC THEN ENSURES_FINAL_STATE_TAC THEN MP_TAC th) THEN + STRIP_TAC THEN ASM_REWRITE_TAC[] THEN + DISCARD_STATE_TAC "s19" THEN + DISCARD_MATCHING_ASSUMPTIONS [`nonoverlapping_modulo a b c`] THEN + MAP_EVERY X_GEN_TAC + [`x1':int`; `y1':int`; `z1':int`; `x2':int`; `y2':int`; `z2':int`] THEN + DISCH_THEN(CONJUNCTS_THEN2 ASSUME_TAC MP_TAC) THEN + GEN_REWRITE_TAC I [IMP_CONJ] THEN DISCH_THEN SUBST_ALL_TAC THEN + REPLICATE_TAC 2 (DISCH_THEN(CONJUNCTS_THEN2 ASSUME_TAC MP_TAC)) THEN + REWRITE_TAC[tripled; paired; secp256k1_encode; PAIR_EQ; modular_encode] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN + (STRIP_ASSUME_TAC o MATCH_MP unilemma2)) THEN + + (*** Dispose of any range hypotheses ***) + + REPEAT(FIRST_X_ASSUM(MP_TAC o check (is_imp o concl))) THEN + REPEAT(ANTS_TAC THENL + [REWRITE_TAC[p_256k1] THEN RULE_ASSUM_TAC(REWRITE_RULE[p_256k1]) THEN + CONV_TAC NUM_REDUCE_CONV THEN ASM BOUNDER_TAC[]; + (DISCH_THEN(STRIP_ASSUME_TAC o MATCH_MP unilemma0) ORELSE + DISCH_THEN(STRIP_ASSUME_TAC o MATCH_MP unilemma1))]) THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o GEN_REWRITE_RULE I [GSYM NOT_LE])) THEN + + (*** Now push the moduli around then do the algebra ***) + + RULE_ASSUM_TAC(REWRITE_RULE + [num_congruent; GSYM INT_OF_NUM_CLAUSES; GSYM INT_OF_NUM_REM]) THEN + ASM_REWRITE_TAC[tripled; paired; jacobian_add; secp256k1] THEN + ASM_REWRITE_TAC[GSYM secp256k1] THEN + REWRITE_TAC[INTEGER_MOD_RING_CLAUSES] THEN + CONV_TAC INT_REDUCE_CONV THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN + CONV_TAC INT_REM_DOWN_CONV THEN + REWRITE_TAC[tripled; paired; modular_encode] THEN + REWRITE_TAC[PAIR_EQ; GSYM INT_OF_NUM_EQ; nintlemma] THEN + CONV_TAC INT_REM_DOWN_CONV THEN + REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES; GSYM INT_OF_NUM_REM] THEN + ASM_REWRITE_TAC[] THEN CONV_TAC INT_REM_DOWN_CONV THEN + REPEAT CONJ_TAC THEN AP_THM_TAC THEN AP_TERM_TAC THEN + INT_ARITH_TAC);; + +let SECP256K1_JMIXADD_SUBROUTINE_CORRECT = time prove + (`!p3 p1 t1 p2 t2 pc stackpointer returnaddress. + ALLPAIRS nonoverlapping + [(p3,96); (word_sub stackpointer (word 240),240)] + [(word pc,0x15b1); (p1,96); (p2,96)] /\ + nonoverlapping (p3,96) (word_sub stackpointer (word 240),248) + ==> ensures x86 + (\s. bytes_loaded s (word pc) secp256k1_jmixadd_mc /\ + read RIP s = word pc /\ + read RSP s = stackpointer /\ + read (memory :> bytes64 stackpointer) s = returnaddress /\ + C_ARGUMENTS [p3; p1; p2] s /\ + bignum_triple_from_memory (p1,4) s = t1 /\ + bignum_pair_from_memory (p2,4) s = t2) + (\s. read RIP s = returnaddress /\ + read RSP s = word_add stackpointer (word 8) /\ + (!x1 y1 z1 x2 y2 z2. + ~(z1 = &0) /\ z2 = &1 /\ + ~(jacobian_eq (integer_mod_ring p_256k1) + (x1,y1,z1) (x2,y2,z2)) /\ + ~(jacobian_eq (integer_mod_ring p_256k1) + (jacobian_neg secp256k1 (x1,y1,z1)) + (x2,y2,z2)) /\ + t1 = tripled secp256k1_encode (x1,y1,z1) /\ + t2 = paired secp256k1_encode (x2,y2) + ==> bignum_triple_from_memory(p3,4) s = + tripled secp256k1_encode + (jacobian_add secp256k1 (x1,y1,z1) (x2,y2,z2)))) + (MAYCHANGE [RIP; RSP; RAX; RCX; RDX; R8; R9; R10; R11] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,96); + memory :> bytes(word_sub stackpointer (word 240),240)])`, + X86_PROMOTE_RETURN_STACK_TAC secp256k1_jmixadd_mc SECP256K1_JMIXADD_CORRECT + `[RBX; RBP; R12; R13; R14; R15]` 240);; + +(* ------------------------------------------------------------------------- *) +(* Correctness of Windows ABI version. *) +(* ------------------------------------------------------------------------- *) + +let windows_secp256k1_jmixadd_mc = define_from_elf "windows_secp256k1_jmixadd_mc" + "x86/secp256k1/secp256k1_jmixadd.obj";; + +let WINDOWS_SECP256K1_JMIXADD_SUBROUTINE_CORRECT = time prove + (`!p3 p1 t1 p2 t2 pc stackpointer returnaddress. + ALLPAIRS nonoverlapping + [(p3,96); (word_sub stackpointer (word 256),256)] + [(word pc,0x15be); (p1,96); (p2,96)] /\ + nonoverlapping (p3,96) (word_sub stackpointer (word 256),264) + ==> ensures x86 + (\s. bytes_loaded s (word pc) windows_secp256k1_jmixadd_mc /\ + read RIP s = word pc /\ + read RSP s = stackpointer /\ + read (memory :> bytes64 stackpointer) s = returnaddress /\ + WINDOWS_C_ARGUMENTS [p3; p1; p2] s /\ + bignum_triple_from_memory (p1,4) s = t1 /\ + bignum_pair_from_memory (p2,4) s = t2) + (\s. read RIP s = returnaddress /\ + read RSP s = word_add stackpointer (word 8) /\ + (!x1 y1 z1 x2 y2 z2. + ~(z1 = &0) /\ z2 = &1 /\ + ~(jacobian_eq (integer_mod_ring p_256k1) + (x1,y1,z1) (x2,y2,z2)) /\ + ~(jacobian_eq (integer_mod_ring p_256k1) + (jacobian_neg secp256k1 (x1,y1,z1)) + (x2,y2,z2)) /\ + t1 = tripled secp256k1_encode (x1,y1,z1) /\ + t2 = paired secp256k1_encode (x2,y2) + ==> bignum_triple_from_memory(p3,4) s = + tripled secp256k1_encode + (jacobian_add secp256k1 (x1,y1,z1) (x2,y2,z2)))) + (MAYCHANGE [RIP; RSP; RAX; RCX; RDX; R8; R9; R10; R11] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,96); + memory :> bytes(word_sub stackpointer (word 256),256)])`, + WINDOWS_X86_WRAP_STACK_TAC + windows_secp256k1_jmixadd_mc secp256k1_jmixadd_mc + SECP256K1_JMIXADD_CORRECT + `[RBX; RBP; R12; R13; R14; R15]` 240);; diff --git a/x86/secp256k1/Makefile b/x86/secp256k1/Makefile index 412b97d5a0..81909822c4 100644 --- a/x86/secp256k1/Makefile +++ b/x86/secp256k1/Makefile @@ -38,7 +38,10 @@ OBJ = bignum_add_p256k1.o \ bignum_tomont_p256k1.o \ bignum_tomont_p256k1_alt.o \ bignum_triple_p256k1.o \ - bignum_triple_p256k1_alt.o + bignum_triple_p256k1_alt.o \ + secp256k1_jadd.o \ + secp256k1_jdouble.o \ + secp256k1_jmixadd.o %.o : %.S ; $(CC) -E -I../../include $< | as -o $@ - diff --git a/x86/secp256k1/secp256k1_jadd.S b/x86/secp256k1/secp256k1_jadd.S new file mode 100644 index 0000000000..9dc0d15559 --- /dev/null +++ b/x86/secp256k1/secp256k1_jadd.S @@ -0,0 +1,353 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +// ---------------------------------------------------------------------------- +// Point addition on SECG curve secp256k1 in Jacobian coordinates +// +// extern void secp256k1_jadd +// (uint64_t p3[static 12],uint64_t p1[static 12],uint64_t p2[static 12]); +// +// Does p3 := p1 + p2 where all points are regarded as Jacobian triples. +// A Jacobian triple (x,y,z) represents affine point (x/z^2,y/z^3). +// It is assumed that all coordinates of the input points p1 and p2 are +// fully reduced mod p_256k1, that both z coordinates are nonzero and +// that neither p1 =~= p2 or p1 =~= -p2, where "=~=" means "represents +// the same affine point as". +// +// Standard x86-64 ABI: RDI = p3, RSI = p1, RDX = p2 +// Microsoft x64 ABI: RCX = p3, RDX = p1, R8 = p2 +// ---------------------------------------------------------------------------- +#include "_internal_s2n_bignum.h" + + .intel_syntax noprefix + S2N_BN_SYM_VISIBILITY_DIRECTIVE(secp256k1_jadd) + S2N_BN_SYM_PRIVACY_DIRECTIVE(secp256k1_jadd) + .text + +// Size of individual field elements + +#define NUMSIZE 32 + +// Pointer-offset pairs for inputs and outputs +// These assume rdi = p3, rsi = p1 and rbp = p2, +// all of which are maintained throughout the code. + +#define x_1 rsi+0 +#define y_1 rsi+NUMSIZE +#define z_1 rsi+(2*NUMSIZE) + +#define x_2 rbp+0 +#define y_2 rbp+NUMSIZE +#define z_2 rbp+(2*NUMSIZE) + +#define x_3 rdi+0 +#define y_3 rdi+NUMSIZE +#define z_3 rdi+(2*NUMSIZE) + +// Pointer-offset pairs for temporaries, with some aliasing +// NSPACE is the total stack needed for these temporaries + +#define z1sq rsp+(NUMSIZE*0) +#define ww rsp+(NUMSIZE*0) + +#define yd rsp+(NUMSIZE*1) +#define y2a rsp+(NUMSIZE*1) + +#define x2a rsp+(NUMSIZE*2) +#define zzx2 rsp+(NUMSIZE*2) + +#define zz rsp+(NUMSIZE*3) +#define t1 rsp+(NUMSIZE*3) + +#define t2 rsp+(NUMSIZE*4) +#define x1a rsp+(NUMSIZE*4) +#define zzx1 rsp+(NUMSIZE*4) + +#define xd rsp+(NUMSIZE*5) +#define z2sq rsp+(NUMSIZE*5) + +#define y1a rsp+(NUMSIZE*6) + +#define NSPACE (NUMSIZE*7) + +// Corresponds exactly to bignum_mul_p256k1 + +#define mul_p256k1(P0,P1,P2) \ + xor ecx,ecx; \ + mov rdx,[P2]; \ + mulx r9,r8,[P1]; \ + mulx r10,rax,[P1+0x8]; \ + add r9,rax; \ + mulx r11,rax,[P1+0x10]; \ + adc r10,rax; \ + mulx r12,rax,[P1+0x18]; \ + adc r11,rax; \ + adc r12,rcx; \ + xor ecx,ecx; \ + mov rdx,[P2+0x8]; \ + mulx rbx,rax,[P1]; \ + adcx r9,rax; \ + adox r10,rbx; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx r13,rax,[P1+0x18]; \ + adcx r12,rax; \ + adox r13,rcx; \ + adcx r13,rcx; \ + xor ecx,ecx; \ + mov rdx,[P2+0x10]; \ + mulx rbx,rax,[P1]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx r14,rax,[P1+0x18]; \ + adcx r13,rax; \ + adox r14,rcx; \ + adcx r14,rcx; \ + xor ecx,ecx; \ + mov rdx,[P2+0x18]; \ + mulx rbx,rax,[P1]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx r15,rax,[P1+0x18]; \ + adcx r14,rax; \ + adox r15,rcx; \ + adcx r15,rcx; \ + movabs rdx,0x1000003d1; \ + xor ecx,ecx; \ + mulx rbx,rax,r12; \ + adcx r8,rax; \ + adox r9,rbx; \ + mulx rbx,rax,r13; \ + adcx r9,rax; \ + adox r10,rbx; \ + mulx rbx,rax,r14; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx r12,rax,r15; \ + adcx r11,rax; \ + adox r12,rcx; \ + adcx r12,rcx; \ + lea rax,[r12+0x1]; \ + mulx rbx,rax,rax; \ + add r8,rax; \ + adc r9,rbx; \ + adc r10,rcx; \ + adc r11,rcx; \ + cmovb rdx,rcx; \ + sub r8,rdx; \ + sbb r9,rcx; \ + sbb r10,rcx; \ + sbb r11,rcx; \ + mov [P0],r8; \ + mov [P0+0x8],r9; \ + mov [P0+0x10],r10; \ + mov [P0+0x18],r11 + +// Corresponds exactly to bignum_sqr_p256k1 + +#define sqr_p256k1(P0,P1) \ + mov rdx,[P1]; \ + mulx r15,r8,rdx; \ + mulx r10,r9,[P1+0x8]; \ + mulx r12,r11,[P1+0x18]; \ + mov rdx,[P1+0x10]; \ + mulx r14,r13,[P1+0x18]; \ + xor ebx,ebx; \ + mulx rcx,rax,[P1]; \ + adcx r10,rax; \ + adox r11,rcx; \ + mulx rcx,rax,[P1+0x8]; \ + adcx r11,rax; \ + adox r12,rcx; \ + mov rdx,[P1+0x18]; \ + mulx rcx,rax,[P1+0x8]; \ + adcx r12,rax; \ + adox r13,rcx; \ + adcx r13,rbx; \ + adox r14,rbx; \ + adc r14,rbx; \ + xor ebx,ebx; \ + adcx r9,r9; \ + adox r9,r15; \ + mov rdx,[P1+0x8]; \ + mulx rdx,rax,rdx; \ + adcx r10,r10; \ + adox r10,rax; \ + adcx r11,r11; \ + adox r11,rdx; \ + mov rdx,[P1+0x10]; \ + mulx rdx,rax,rdx; \ + adcx r12,r12; \ + adox r12,rax; \ + adcx r13,r13; \ + adox r13,rdx; \ + mov rdx,[P1+0x18]; \ + mulx r15,rax,rdx; \ + adcx r14,r14; \ + adox r14,rax; \ + adcx r15,rbx; \ + adox r15,rbx; \ + movabs rdx,0x1000003d1; \ + xor ebx,ebx; \ + mulx rcx,rax,r12; \ + adcx r8,rax; \ + adox r9,rcx; \ + mulx rcx,rax,r13; \ + adcx r9,rax; \ + adox r10,rcx; \ + mulx rcx,rax,r14; \ + adcx r10,rax; \ + adox r11,rcx; \ + mulx r12,rax,r15; \ + adcx r11,rax; \ + adox r12,rbx; \ + adcx r12,rbx; \ + lea rax,[r12+0x1]; \ + mulx rcx,rax,rax; \ + add r8,rax; \ + adc r9,rcx; \ + adc r10,rbx; \ + adc r11,rbx; \ + sbb rax,rax; \ + not rax; \ + and rax,rdx; \ + sub r8,rax; \ + sbb r9,rbx; \ + sbb r10,rbx; \ + sbb r11,rbx; \ + mov [P0],r8; \ + mov [P0+0x8],r9; \ + mov [P0+0x10],r10; \ + mov [P0+0x18],r11 + +// Corresponds exactly to bignum_sub_p256k1 + +#define sub_p256k1(P0,P1,P2) \ + xor eax,eax; \ + mov r8,[P1]; \ + sub r8,[P2]; \ + mov r9,[P1+0x8]; \ + sbb r9,[P2+0x8]; \ + mov r10,[P1+0x10]; \ + sbb r10,[P2+0x10]; \ + mov r11,[P1+0x18]; \ + sbb r11,[P2+0x18]; \ + movabs rcx,0x1000003d1; \ + cmovae rcx,rax; \ + sub r8,rcx; \ + mov [P0],r8; \ + sbb r9,rax; \ + mov [P0+0x8],r9; \ + sbb r10,rax; \ + mov [P0+0x10],r10; \ + sbb r11,rax; \ + mov [P0+0x18],r11 + +S2N_BN_SYMBOL(secp256k1_jadd): + +#if WINDOWS_ABI + push rdi + push rsi + mov rdi, rcx + mov rsi, rdx + mov rdx, r8 +#endif + +// Save registers and make room on stack for temporary variables +// Put the input y in rbp where it stays + + push rbx + push rbp + push r12 + push r13 + push r14 + push r15 + + sub rsp, NSPACE + + mov rbp, rdx + +// Main code, just a sequence of basic field operations + + sqr_p256k1(z1sq,z_1) + sqr_p256k1(z2sq,z_2) + + mul_p256k1(y1a,z_2,y_1) + mul_p256k1(y2a,z_1,y_2) + + mul_p256k1(x2a,z1sq,x_2) + mul_p256k1(x1a,z2sq,x_1) + mul_p256k1(y2a,z1sq,y2a) + mul_p256k1(y1a,z2sq,y1a) + + sub_p256k1(xd,x2a,x1a) + sub_p256k1(yd,y2a,y1a) + + sqr_p256k1(zz,xd) + sqr_p256k1(ww,yd) + + mul_p256k1(zzx1,zz,x1a) + mul_p256k1(zzx2,zz,x2a) + + sub_p256k1(x_3,ww,zzx1) + sub_p256k1(t1,zzx2,zzx1) + + mul_p256k1(xd,xd,z_1) + + sub_p256k1(x_3,x_3,zzx2) + + sub_p256k1(t2,zzx1,x_3) + + mul_p256k1(t1,t1,y1a) + mul_p256k1(z_3,xd,z_2) + mul_p256k1(t2,yd,t2) + + sub_p256k1(y_3,t2,t1) + +// Restore stack and registers + + add rsp, NSPACE + pop r15 + pop r14 + pop r13 + pop r12 + pop rbp + pop rbx + +#if WINDOWS_ABI + pop rsi + pop rdi +#endif + ret + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack, "", %progbits +#endif diff --git a/x86/secp256k1/secp256k1_jdouble.S b/x86/secp256k1/secp256k1_jdouble.S new file mode 100644 index 0000000000..99b8c81e97 --- /dev/null +++ b/x86/secp256k1/secp256k1_jdouble.S @@ -0,0 +1,630 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +// ---------------------------------------------------------------------------- +// Point doubling on SECG curve secp256k1 in Jacobian coordinates +// +// extern void secp256k1_montjdouble +// (uint64_t p3[static 12],uint64_t p1[static 12]); +// +// Does p3 := 2 * p1 where all points are regarded as Jacobian triples. +// A Jacobian triple (x,y,z) represents affine point (x/z^2,y/z^3). +// It is assumed that all coordinates of the input point are fully +// reduced mod p_256k1 and that the z coordinate is not zero. +// +// Standard x86-64 ABI: RDI = p3, RSI = p1 +// Microsoft x64 ABI: RCX = p3, RDX = p1 +// ---------------------------------------------------------------------------- +#include "_internal_s2n_bignum.h" + + .intel_syntax noprefix + S2N_BN_SYM_VISIBILITY_DIRECTIVE(secp256k1_jdouble) + S2N_BN_SYM_PRIVACY_DIRECTIVE(secp256k1_jdouble) + .text + .balign 4 + +// Size of individual field elements + +#define NUMSIZE 32 + +// Pointer-offset pairs for inputs and outputs +// These assume rdi = p3, rsi = p1, which is true when the +// arguments come in initially and is not disturbed throughout. + +#define x_1 rsi+0 +#define y_1 rsi+NUMSIZE +#define z_1 rsi+(2*NUMSIZE) + +#define x_3 rdi+0 +#define y_3 rdi+NUMSIZE +#define z_3 rdi+(2*NUMSIZE) + +// Pointer-offset pairs for temporaries, with some aliasing +// NSPACE is the total stack needed for these temporaries + +#define x_2 rsp+(NUMSIZE*0) +#define y_2 rsp+(NUMSIZE*1) +#define d rsp+(NUMSIZE*2) +#define tmp rsp+(NUMSIZE*3) +#define x_4 rsp+(NUMSIZE*4) +#define y_4 rsp+(NUMSIZE*6) +#define dx2 rsp+(NUMSIZE*8) +#define xy2 rsp+(NUMSIZE*10) + +#define NSPACE (NUMSIZE*12) + +// Corresponds exactly to bignum_mul_p256k1 + +#define mul_p256k1(P0,P1,P2) \ + xor ecx,ecx; \ + mov rdx,[P2]; \ + mulx r9,r8,[P1]; \ + mulx r10,rax,[P1+0x8]; \ + add r9,rax; \ + mulx r11,rax,[P1+0x10]; \ + adc r10,rax; \ + mulx r12,rax,[P1+0x18]; \ + adc r11,rax; \ + adc r12,rcx; \ + xor ecx,ecx; \ + mov rdx,[P2+0x8]; \ + mulx rbx,rax,[P1]; \ + adcx r9,rax; \ + adox r10,rbx; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx r13,rax,[P1+0x18]; \ + adcx r12,rax; \ + adox r13,rcx; \ + adcx r13,rcx; \ + xor ecx,ecx; \ + mov rdx,[P2+0x10]; \ + mulx rbx,rax,[P1]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx r14,rax,[P1+0x18]; \ + adcx r13,rax; \ + adox r14,rcx; \ + adcx r14,rcx; \ + xor ecx,ecx; \ + mov rdx,[P2+0x18]; \ + mulx rbx,rax,[P1]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx r15,rax,[P1+0x18]; \ + adcx r14,rax; \ + adox r15,rcx; \ + adcx r15,rcx; \ + movabs rdx,0x1000003d1; \ + xor ecx,ecx; \ + mulx rbx,rax,r12; \ + adcx r8,rax; \ + adox r9,rbx; \ + mulx rbx,rax,r13; \ + adcx r9,rax; \ + adox r10,rbx; \ + mulx rbx,rax,r14; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx r12,rax,r15; \ + adcx r11,rax; \ + adox r12,rcx; \ + adcx r12,rcx; \ + lea rax,[r12+0x1]; \ + mulx rbx,rax,rax; \ + add r8,rax; \ + adc r9,rbx; \ + adc r10,rcx; \ + adc r11,rcx; \ + cmovb rdx,rcx; \ + sub r8,rdx; \ + sbb r9,rcx; \ + sbb r10,rcx; \ + sbb r11,rcx; \ + mov [P0],r8; \ + mov [P0+0x8],r9; \ + mov [P0+0x10],r10; \ + mov [P0+0x18],r11 + +// Corresponds exactly to bignum_sqr_p256k1 + +#define sqr_p256k1(P0,P1) \ + mov rdx,[P1]; \ + mulx r15,r8,rdx; \ + mulx r10,r9,[P1+0x8]; \ + mulx r12,r11,[P1+0x18]; \ + mov rdx,[P1+0x10]; \ + mulx r14,r13,[P1+0x18]; \ + xor ebx,ebx; \ + mulx rcx,rax,[P1]; \ + adcx r10,rax; \ + adox r11,rcx; \ + mulx rcx,rax,[P1+0x8]; \ + adcx r11,rax; \ + adox r12,rcx; \ + mov rdx,[P1+0x18]; \ + mulx rcx,rax,[P1+0x8]; \ + adcx r12,rax; \ + adox r13,rcx; \ + adcx r13,rbx; \ + adox r14,rbx; \ + adc r14,rbx; \ + xor ebx,ebx; \ + adcx r9,r9; \ + adox r9,r15; \ + mov rdx,[P1+0x8]; \ + mulx rdx,rax,rdx; \ + adcx r10,r10; \ + adox r10,rax; \ + adcx r11,r11; \ + adox r11,rdx; \ + mov rdx,[P1+0x10]; \ + mulx rdx,rax,rdx; \ + adcx r12,r12; \ + adox r12,rax; \ + adcx r13,r13; \ + adox r13,rdx; \ + mov rdx,[P1+0x18]; \ + mulx r15,rax,rdx; \ + adcx r14,r14; \ + adox r14,rax; \ + adcx r15,rbx; \ + adox r15,rbx; \ + movabs rdx,0x1000003d1; \ + xor ebx,ebx; \ + mulx rcx,rax,r12; \ + adcx r8,rax; \ + adox r9,rcx; \ + mulx rcx,rax,r13; \ + adcx r9,rax; \ + adox r10,rcx; \ + mulx rcx,rax,r14; \ + adcx r10,rax; \ + adox r11,rcx; \ + mulx r12,rax,r15; \ + adcx r11,rax; \ + adox r12,rbx; \ + adcx r12,rbx; \ + lea rax,[r12+0x1]; \ + mulx rcx,rax,rax; \ + add r8,rax; \ + adc r9,rcx; \ + adc r10,rbx; \ + adc r11,rbx; \ + sbb rax,rax; \ + not rax; \ + and rax,rdx; \ + sub r8,rax; \ + sbb r9,rbx; \ + sbb r10,rbx; \ + sbb r11,rbx; \ + mov [P0],r8; \ + mov [P0+0x8],r9; \ + mov [P0+0x10],r10; \ + mov [P0+0x18],r11 + +// Rough versions producing 5-word results + +#define roughmul_p256k1(P0,P1,P2) \ + xor ecx,ecx; \ + mov rdx,[P2]; \ + mulx r9,r8,[P1]; \ + mulx r10,rax,[P1+0x8]; \ + add r9,rax; \ + mulx r11,rax,[P1+0x10]; \ + adc r10,rax; \ + mulx r12,rax,[P1+0x18]; \ + adc r11,rax; \ + adc r12,rcx; \ + xor ecx,ecx; \ + mov rdx,[P2+0x8]; \ + mulx rbx,rax,[P1]; \ + adcx r9,rax; \ + adox r10,rbx; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx r13,rax,[P1+0x18]; \ + adcx r12,rax; \ + adox r13,rcx; \ + adcx r13,rcx; \ + xor ecx,ecx; \ + mov rdx,[P2+0x10]; \ + mulx rbx,rax,[P1]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx r14,rax,[P1+0x18]; \ + adcx r13,rax; \ + adox r14,rcx; \ + adcx r14,rcx; \ + xor ecx,ecx; \ + mov rdx,[P2+0x18]; \ + mulx rbx,rax,[P1]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx r15,rax,[P1+0x18]; \ + adcx r14,rax; \ + adox r15,rcx; \ + adcx r15,rcx; \ + movabs rdx,0x1000003d1; \ + xor ecx,ecx; \ + mulx rbx,rax,r12; \ + adcx r8,rax; \ + adox r9,rbx; \ + mulx rbx,rax,r13; \ + adcx r9,rax; \ + adox r10,rbx; \ + mulx rbx,rax,r14; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx r12,rax,r15; \ + adcx r11,rax; \ + adox r12,rcx; \ + adcx r12,rcx; \ + mov [P0],r8; \ + mov [P0+0x8],r9; \ + mov [P0+0x10],r10; \ + mov [P0+0x18],r11; \ + mov [P0+0x20],r12 + +#define roughsqr_p256k1(P0,P1) \ + mov rdx,[P1]; \ + mulx r15,r8,rdx; \ + mulx r10,r9,[P1+0x8]; \ + mulx r12,r11,[P1+0x18]; \ + mov rdx,[P1+0x10]; \ + mulx r14,r13,[P1+0x18]; \ + xor ebx,ebx; \ + mulx rcx,rax,[P1]; \ + adcx r10,rax; \ + adox r11,rcx; \ + mulx rcx,rax,[P1+0x8]; \ + adcx r11,rax; \ + adox r12,rcx; \ + mov rdx,[P1+0x18]; \ + mulx rcx,rax,[P1+0x8]; \ + adcx r12,rax; \ + adox r13,rcx; \ + adcx r13,rbx; \ + adox r14,rbx; \ + adc r14,rbx; \ + xor ebx,ebx; \ + adcx r9,r9; \ + adox r9,r15; \ + mov rdx,[P1+0x8]; \ + mulx rdx,rax,rdx; \ + adcx r10,r10; \ + adox r10,rax; \ + adcx r11,r11; \ + adox r11,rdx; \ + mov rdx,[P1+0x10]; \ + mulx rdx,rax,rdx; \ + adcx r12,r12; \ + adox r12,rax; \ + adcx r13,r13; \ + adox r13,rdx; \ + mov rdx,[P1+0x18]; \ + mulx r15,rax,rdx; \ + adcx r14,r14; \ + adox r14,rax; \ + adcx r15,rbx; \ + adox r15,rbx; \ + movabs rdx,0x1000003d1; \ + xor ebx,ebx; \ + mulx rcx,rax,r12; \ + adcx r8,rax; \ + adox r9,rcx; \ + mulx rcx,rax,r13; \ + adcx r9,rax; \ + adox r10,rcx; \ + mulx rcx,rax,r14; \ + adcx r10,rax; \ + adox r11,rcx; \ + mulx r12,rax,r15; \ + adcx r11,rax; \ + adox r12,rbx; \ + adcx r12,rbx; \ + mov [P0],r8; \ + mov [P0+0x8],r9; \ + mov [P0+0x10],r10; \ + mov [P0+0x18],r11; \ + mov [P0+0x20],r12 + +// Weak doubling operation, staying in 4 digits but not in general +// fully normalizing + +#define weakdouble_p256k1(P0,P1) \ + mov r11,[P1+24]; \ + mov r10,[P1+16]; \ + mov rax, 0x1000003d1; \ + xor rdx, rdx; \ + shld r11,r10,1; \ + cmovnc rax, rdx; \ + mov r9,[P1+8]; \ + shld r10,r9,1; \ + mov r8,[P1]; \ + shld r9,r8,1; \ + shl r8,1; \ + add r8, rax; \ + adc r9, rdx; \ + adc r10, rdx; \ + adc r11, rdx; \ + mov [P0], r8; \ + mov [P0+8], r9; \ + mov [P0+16], r10; \ + mov [P0+24], r11 + +// P0 = C * P1 - D * P2 with 5-word inputs P1 and P2 +// Only used here with C = 12, D = 9, but could be used more generally. +// We actually compute C * P1 + D * (2^33 * p_256k1 - P2) + +#define cmsub_p256k1(P0,C,P1,D,P2) \ + mov r8, 0xfffff85e00000000; \ + sub r8, [P2]; \ + mov r9, 0xfffffffffffffffd; \ + sbb r9, [P2+8]; \ + mov r10, 0xffffffffffffffff; \ + sbb r10, [P2+16]; \ + mov r11, 0xffffffffffffffff; \ + sbb r11, [P2+24]; \ + mov r12, 0x00000001ffffffff; \ + sbb r12, [P2+32]; \ + mov rdx, D; \ + mulx rax, r8, r8; \ + mulx rcx, r9, r9; \ + add r9, rax; \ + mulx rax, r10, r10; \ + adc r10, rcx; \ + mulx rcx, r11, r11; \ + adc r11, rax; \ + mulx rax, r12, r12; \ + adc r12, rcx; \ + mov rdx, C; \ + xor rbx, rbx; \ + mulx rcx, rax, [P1]; \ + adcx r8, rax; \ + adox r9, rcx; \ + mulx rcx, rax, [P1+8]; \ + adcx r9, rax; \ + adox r10, rcx; \ + mulx rcx, rax, [P1+16]; \ + adcx r10, rax; \ + adox r11, rcx; \ + mulx rcx, rax, [P1+24]; \ + adcx r11, rax; \ + adox r12, rcx; \ + mulx rcx, rax, [P1+32]; \ + adcx r12, rax; \ + lea rax,[r12+0x1]; \ + mov rcx,0x1000003d1; \ + mul rcx; \ + add r8,rax; \ + adc r9,rdx; \ + adc r10,rbx; \ + adc r11,rbx; \ + cmovb rcx,rbx; \ + sub r8,rcx; \ + mov [P0],r8; \ + sbb r9,rbx; \ + mov [P0+8],r9; \ + sbb r10,rbx; \ + mov [P0+16],r10; \ + sbb r11,rbx; \ + mov [P0+24],r11; \ + +// P0 = 3 * P1 - 8 * P2 with 5-digit P1 and P2 +// We actually compute 3 * P1 + (2^33 * p_256k1 - P2) << 3 + +#define cmsub38_p256k1(P0,P1,P2) \ + mov r8, 0xfffff85e00000000; \ + sub r8, [P2]; \ + mov r9, 0xfffffffffffffffd; \ + sbb r9, [P2+8]; \ + mov r10, 0xffffffffffffffff; \ + sbb r10, [P2+16]; \ + mov r11, 0xffffffffffffffff; \ + sbb r11, [P2+24]; \ + mov r12, 0x00000001ffffffff; \ + sbb r12, [P2+32]; \ + shld r12, r11, 3; \ + shld r11, r10, 3; \ + shld r10, r9, 3; \ + shld r9, r8, 3; \ + shl r8, 3; \ + mov rdx, 3; \ + xor rbx, rbx; \ + mulx rcx, rax, [P1]; \ + adcx r8, rax; \ + adox r9, rcx; \ + mulx rcx, rax, [P1+8]; \ + adcx r9, rax; \ + adox r10, rcx; \ + mulx rcx, rax, [P1+16]; \ + adcx r10, rax; \ + adox r11, rcx; \ + mulx rcx, rax, [P1+24]; \ + adcx r11, rax; \ + adox r12, rcx; \ + mulx rcx, rax, [P1+32]; \ + adcx r12, rax; \ + lea rax,[r12+0x1]; \ + mov rcx,0x1000003d1; \ + mul rcx; \ + add r8,rax; \ + adc r9,rdx; \ + adc r10,rbx; \ + adc r11,rbx; \ + cmovb rcx,rbx; \ + sub r8,rcx; \ + mov [P0],r8; \ + sbb r9,rbx; \ + mov [P0+8],r9; \ + sbb r10,rbx; \ + mov [P0+16],r10; \ + sbb r11,rbx; \ + mov [P0+24],r11; \ + +// P0 = 4 * P1 - P2 with 5-digit P1, 4-digit P2 and result. +// This is done by direct subtraction of P2 since the method +// in bignum_cmul_p256k1 etc. for quotient estimation still +// works when the value to be reduced is negative, as +// long as it is > -p_256k1, which is the case here. + +#define cmsub41_p256k1(P0,P1,P2) \ + mov r12, [P1+32]; \ + mov r11, [P1+24]; \ + shld r12, r11, 2; \ + mov r10, [P1+16]; \ + shld r11, r10, 2; \ + mov r9, [P1+8]; \ + shld r10, r9, 2; \ + mov r8, [P1]; \ + shld r9, r8, 2; \ + shl r8, 2; \ + sub r8, [P2]; \ + sbb r9, [P2+8]; \ + sbb r10, [P2+16]; \ + sbb r11, [P2+24]; \ + sbb r12, 0; \ + lea rax,[r12+0x1]; \ + mov rcx,0x1000003d1; \ + mul rcx; \ + xor rbx, rbx; \ + add r8,rax; \ + adc r9,rdx; \ + adc r10,0x0; \ + adc r11,0x0; \ + cmovb rcx,rbx; \ + sub r8,rcx; \ + mov [P0],r8; \ + sbb r9,rbx; \ + mov [P0+8],r9; \ + sbb r10,rbx; \ + mov [P0+16],r10; \ + sbb r11,rbx; \ + mov [P0+24],r11; \ + +S2N_BN_SYMBOL(secp256k1_jdouble): + +#if WINDOWS_ABI + push rdi + push rsi + mov rdi, rcx + mov rsi, rdx +#endif + +// Save registers and make room on stack for temporary variables + + push rbx + push r12 + push r13 + push r14 + push r15 + + sub rsp, NSPACE + +// Main sequence of operations + + // y_2 = y^2 + + sqr_p256k1(y_2,y_1) + + // x_2 = x^2 + + sqr_p256k1(x_2,x_1) + + // tmp = 2 * y_1 (in 4 words but not fully normalized) + + weakdouble_p256k1(tmp,y_1) + + // xy2 = x * y^2 (5-digit partially reduced) + // x_4 = x^4 (5-digit partially reduced) + + roughmul_p256k1(xy2,x_1,y_2) + roughsqr_p256k1(x_4,x_2) + + // z_3 = 2 * y_1 * z_1 + + mul_p256k1(z_3,z_1,tmp) + + // d = 12 * xy2 - 9 * x_4 + + cmsub_p256k1(d,12,xy2,9,x_4) + + // y4 = y2^2 (5-digit partially reduced) + + roughsqr_p256k1(y_4,y_2) + + // dx2 = d * x_2 (5-digit partially reduced) + + roughmul_p256k1(dx2,x_2,d) + + // x_3 = 4 * xy2 - d + + cmsub41_p256k1(x_3,xy2,d) + + // y_3 = 3 * dx2 - 8 * y_4 + + cmsub38_p256k1(y_3,dx2,y_4) + +// Restore stack and registers + + add rsp, NSPACE + pop r15 + pop r14 + pop r13 + pop r12 + pop rbx + +#if WINDOWS_ABI + pop rsi + pop rdi +#endif + ret + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack, "", %progbits +#endif diff --git a/x86/secp256k1/secp256k1_jmixadd.S b/x86/secp256k1/secp256k1_jmixadd.S new file mode 100644 index 0000000000..adcf6392f5 --- /dev/null +++ b/x86/secp256k1/secp256k1_jmixadd.S @@ -0,0 +1,346 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +// ---------------------------------------------------------------------------- +// Point mixed addition on SECG curve secp256k1 in Jacobian coordinates +// +// extern void secp256k1_jmixadd +// (uint64_t p3[static 12],uint64_t p1[static 12],uint64_t p2[static 8]); +// +// Does p3 := p1 + p2 where all points are regarded as Jacobian triples. +// A Jacobian triple (x,y,z) represents affine point (x/z^2,y/z^3). +// The "mixed" part means that p2 only has x and y coordinates, with the +// implicit z coordinate assumed to be the identity. It is assumed that +// all the coordinates of the input points p1 and p2 are fully reduced +// mod p_256k1, that the z coordinate of p1 is nonzero and that neither +// p1 =~= p2 or p1 =~= -p2, where "=~=" means "represents the same affine +// point as". +// +// Standard x86-64 ABI: RDI = p3, RSI = p1, RDX = p2 +// Microsoft x64 ABI: RCX = p3, RDX = p1, R8 = p2 +// ---------------------------------------------------------------------------- +#include "_internal_s2n_bignum.h" + + .intel_syntax noprefix + S2N_BN_SYM_VISIBILITY_DIRECTIVE(secp256k1_jmixadd) + S2N_BN_SYM_PRIVACY_DIRECTIVE(secp256k1_jmixadd) + .text + +// Size of individual field elements + +#define NUMSIZE 32 + +// Pointer-offset pairs for inputs and outputs +// These assume rdi = p3, rsi = p1 and rbp = p2, +// all of which are maintained throughout the code. + +#define x_1 rsi+0 +#define y_1 rsi+NUMSIZE +#define z_1 rsi+(2*NUMSIZE) + +#define x_2 rbp+0 +#define y_2 rbp+NUMSIZE +#define z_2 rbp+(2*NUMSIZE) + +#define x_3 rdi+0 +#define y_3 rdi+NUMSIZE +#define z_3 rdi+(2*NUMSIZE) + +// Pointer-offset pairs for temporaries, with some aliasing +// NSPACE is the total stack needed for these temporaries + +#define zp2 rsp+(NUMSIZE*0) +#define ww rsp+(NUMSIZE*0) + +#define yd rsp+(NUMSIZE*1) +#define y2a rsp+(NUMSIZE*1) + +#define x2a rsp+(NUMSIZE*2) +#define zzx2 rsp+(NUMSIZE*2) + +#define zz rsp+(NUMSIZE*3) +#define t1 rsp+(NUMSIZE*3) + +#define t2 rsp+(NUMSIZE*4) +#define zzx1 rsp+(NUMSIZE*4) + +#define xd rsp+(NUMSIZE*5) + +#define NSPACE (NUMSIZE*6) + +// Corresponds exactly to bignum_mul_p256k1 + +#define mul_p256k1(P0,P1,P2) \ + xor ecx,ecx; \ + mov rdx,[P2]; \ + mulx r9,r8,[P1]; \ + mulx r10,rax,[P1+0x8]; \ + add r9,rax; \ + mulx r11,rax,[P1+0x10]; \ + adc r10,rax; \ + mulx r12,rax,[P1+0x18]; \ + adc r11,rax; \ + adc r12,rcx; \ + xor ecx,ecx; \ + mov rdx,[P2+0x8]; \ + mulx rbx,rax,[P1]; \ + adcx r9,rax; \ + adox r10,rbx; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx r13,rax,[P1+0x18]; \ + adcx r12,rax; \ + adox r13,rcx; \ + adcx r13,rcx; \ + xor ecx,ecx; \ + mov rdx,[P2+0x10]; \ + mulx rbx,rax,[P1]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx r14,rax,[P1+0x18]; \ + adcx r13,rax; \ + adox r14,rcx; \ + adcx r14,rcx; \ + xor ecx,ecx; \ + mov rdx,[P2+0x18]; \ + mulx rbx,rax,[P1]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx r15,rax,[P1+0x18]; \ + adcx r14,rax; \ + adox r15,rcx; \ + adcx r15,rcx; \ + movabs rdx,0x1000003d1; \ + xor ecx,ecx; \ + mulx rbx,rax,r12; \ + adcx r8,rax; \ + adox r9,rbx; \ + mulx rbx,rax,r13; \ + adcx r9,rax; \ + adox r10,rbx; \ + mulx rbx,rax,r14; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx r12,rax,r15; \ + adcx r11,rax; \ + adox r12,rcx; \ + adcx r12,rcx; \ + lea rax,[r12+0x1]; \ + mulx rbx,rax,rax; \ + add r8,rax; \ + adc r9,rbx; \ + adc r10,rcx; \ + adc r11,rcx; \ + cmovb rdx,rcx; \ + sub r8,rdx; \ + sbb r9,rcx; \ + sbb r10,rcx; \ + sbb r11,rcx; \ + mov [P0],r8; \ + mov [P0+0x8],r9; \ + mov [P0+0x10],r10; \ + mov [P0+0x18],r11 + +// Corresponds exactly to bignum_sqr_p256k1 + +#define sqr_p256k1(P0,P1) \ + mov rdx,[P1]; \ + mulx r15,r8,rdx; \ + mulx r10,r9,[P1+0x8]; \ + mulx r12,r11,[P1+0x18]; \ + mov rdx,[P1+0x10]; \ + mulx r14,r13,[P1+0x18]; \ + xor ebx,ebx; \ + mulx rcx,rax,[P1]; \ + adcx r10,rax; \ + adox r11,rcx; \ + mulx rcx,rax,[P1+0x8]; \ + adcx r11,rax; \ + adox r12,rcx; \ + mov rdx,[P1+0x18]; \ + mulx rcx,rax,[P1+0x8]; \ + adcx r12,rax; \ + adox r13,rcx; \ + adcx r13,rbx; \ + adox r14,rbx; \ + adc r14,rbx; \ + xor ebx,ebx; \ + adcx r9,r9; \ + adox r9,r15; \ + mov rdx,[P1+0x8]; \ + mulx rdx,rax,rdx; \ + adcx r10,r10; \ + adox r10,rax; \ + adcx r11,r11; \ + adox r11,rdx; \ + mov rdx,[P1+0x10]; \ + mulx rdx,rax,rdx; \ + adcx r12,r12; \ + adox r12,rax; \ + adcx r13,r13; \ + adox r13,rdx; \ + mov rdx,[P1+0x18]; \ + mulx r15,rax,rdx; \ + adcx r14,r14; \ + adox r14,rax; \ + adcx r15,rbx; \ + adox r15,rbx; \ + movabs rdx,0x1000003d1; \ + xor ebx,ebx; \ + mulx rcx,rax,r12; \ + adcx r8,rax; \ + adox r9,rcx; \ + mulx rcx,rax,r13; \ + adcx r9,rax; \ + adox r10,rcx; \ + mulx rcx,rax,r14; \ + adcx r10,rax; \ + adox r11,rcx; \ + mulx r12,rax,r15; \ + adcx r11,rax; \ + adox r12,rbx; \ + adcx r12,rbx; \ + lea rax,[r12+0x1]; \ + mulx rcx,rax,rax; \ + add r8,rax; \ + adc r9,rcx; \ + adc r10,rbx; \ + adc r11,rbx; \ + sbb rax,rax; \ + not rax; \ + and rax,rdx; \ + sub r8,rax; \ + sbb r9,rbx; \ + sbb r10,rbx; \ + sbb r11,rbx; \ + mov [P0],r8; \ + mov [P0+0x8],r9; \ + mov [P0+0x10],r10; \ + mov [P0+0x18],r11 + +// Corresponds exactly to bignum_sub_p256k1 + +#define sub_p256k1(P0,P1,P2) \ + xor eax,eax; \ + mov r8,[P1]; \ + sub r8,[P2]; \ + mov r9,[P1+0x8]; \ + sbb r9,[P2+0x8]; \ + mov r10,[P1+0x10]; \ + sbb r10,[P2+0x10]; \ + mov r11,[P1+0x18]; \ + sbb r11,[P2+0x18]; \ + movabs rcx,0x1000003d1; \ + cmovae rcx,rax; \ + sub r8,rcx; \ + mov [P0],r8; \ + sbb r9,rax; \ + mov [P0+0x8],r9; \ + sbb r10,rax; \ + mov [P0+0x10],r10; \ + sbb r11,rax; \ + mov [P0+0x18],r11 + +S2N_BN_SYMBOL(secp256k1_jmixadd): + +#if WINDOWS_ABI + push rdi + push rsi + mov rdi, rcx + mov rsi, rdx + mov rdx, r8 +#endif + +// Save registers and make room on stack for temporary variables +// Put the input y in rbp where it stays + + push rbx + push rbp + push r12 + push r13 + push r14 + push r15 + + sub rsp, NSPACE + + mov rbp, rdx + +// Main code, just a sequence of basic field operations + + sqr_p256k1(zp2,z_1) + + mul_p256k1(y2a,z_1,y_2) + mul_p256k1(x2a,zp2,x_2) + mul_p256k1(y2a,zp2,y2a) + + sub_p256k1(xd,x2a,x_1) + + sub_p256k1(yd,y2a,y_1) + + sqr_p256k1(zz,xd) + sqr_p256k1(ww,yd) + + mul_p256k1(zzx1,zz,x_1) + mul_p256k1(zzx2,zz,x2a) + + sub_p256k1(x_3,ww,zzx1) + sub_p256k1(t1,zzx2,zzx1) + + mul_p256k1(z_3,xd,z_1) + + sub_p256k1(x_3,x_3,zzx2) + + sub_p256k1(t2,zzx1,x_3) + + mul_p256k1(t1,t1,y_1) + mul_p256k1(t2,yd,t2) + + sub_p256k1(y_3,t2,t1) + +// Restore stack and registers + + add rsp, NSPACE + pop r15 + pop r14 + pop r13 + pop r12 + pop rbp + pop rbx + +#if WINDOWS_ABI + pop rsi + pop rdi +#endif + ret + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack, "", %progbits +#endif diff --git a/x86/yesbmi_functions b/x86/yesbmi_functions index cc98f691f8..8415f979cf 100644 --- a/x86/yesbmi_functions +++ b/x86/yesbmi_functions @@ -45,3 +45,6 @@ bignum_triple_p256k1 bignum_triple_p384 bignum_triple_p521 curve25519_ladderstep +secp256k1_jadd +secp256k1_jdouble +secp256k1_jmixadd diff --git a/x86_att/Makefile b/x86_att/Makefile index e435726d44..833ef7cfa0 100644 --- a/x86_att/Makefile +++ b/x86_att/Makefile @@ -219,7 +219,10 @@ OBJ = curve25519/bignum_add_p25519.o \ secp256k1/bignum_tomont_p256k1.o \ secp256k1/bignum_tomont_p256k1_alt.o \ secp256k1/bignum_triple_p256k1.o \ - secp256k1/bignum_triple_p256k1_alt.o + secp256k1/bignum_triple_p256k1_alt.o \ + secp256k1/secp256k1_jadd.o \ + secp256k1/secp256k1_jdouble.o \ + secp256k1/secp256k1_jmixadd.o # The AT&T syntax source files diff --git a/x86_att/secp256k1/secp256k1_jadd.S b/x86_att/secp256k1/secp256k1_jadd.S new file mode 100644 index 0000000000..371f3a12a6 --- /dev/null +++ b/x86_att/secp256k1/secp256k1_jadd.S @@ -0,0 +1,353 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +// ---------------------------------------------------------------------------- +// Point addition on SECG curve secp256k1 in Jacobian coordinates +// +// extern void secp256k1_jadd +// (uint64_t p3[static 12],uint64_t p1[static 12],uint64_t p2[static 12]); +// +// Does p3 := p1 + p2 where all points are regarded as Jacobian triples. +// A Jacobian triple (x,y,z) represents affine point (x/z^2,y/z^3). +// It is assumed that all coordinates of the input points p1 and p2 are +// fully reduced mod p_256k1, that both z coordinates are nonzero and +// that neither p1 =~= p2 or p1 =~= -p2, where "=~=" means "represents +// the same affine point as". +// +// Standard x86-64 ABI: RDI = p3, RSI = p1, RDX = p2 +// Microsoft x64 ABI: RCX = p3, RDX = p1, R8 = p2 +// ---------------------------------------------------------------------------- +#include "_internal_s2n_bignum.h" + + + S2N_BN_SYM_VISIBILITY_DIRECTIVE(secp256k1_jadd) + S2N_BN_SYM_PRIVACY_DIRECTIVE(secp256k1_jadd) + .text + +// Size of individual field elements + +#define NUMSIZE 32 + +// Pointer-offset pairs for inputs and outputs +// These assume %rdi = p3, %rsi = p1 and %rbp = p2, +// all of which are maintained throughout the code. + +#define x_1 0(%rsi) +#define y_1 NUMSIZE(%rsi) +#define z_1 (2*NUMSIZE)(%rsi) + +#define x_2 0(%rbp) +#define y_2 NUMSIZE(%rbp) +#define z_2 (2*NUMSIZE)(%rbp) + +#define x_3 0(%rdi) +#define y_3 NUMSIZE(%rdi) +#define z_3 (2*NUMSIZE)(%rdi) + +// Pointer-offset pairs for temporaries, with some aliasing +// NSPACE is the total stack needed for these temporaries + +#define z1sq (NUMSIZE*0)(%rsp) +#define ww (NUMSIZE*0)(%rsp) + +#define yd (NUMSIZE*1)(%rsp) +#define y2a (NUMSIZE*1)(%rsp) + +#define x2a (NUMSIZE*2)(%rsp) +#define zzx2 (NUMSIZE*2)(%rsp) + +#define zz (NUMSIZE*3)(%rsp) +#define t1 (NUMSIZE*3)(%rsp) + +#define t2 (NUMSIZE*4)(%rsp) +#define x1a (NUMSIZE*4)(%rsp) +#define zzx1 (NUMSIZE*4)(%rsp) + +#define xd (NUMSIZE*5)(%rsp) +#define z2sq (NUMSIZE*5)(%rsp) + +#define y1a (NUMSIZE*6)(%rsp) + +#define NSPACE (NUMSIZE*7) + +// Corresponds exactly to bignum_mul_p256k1 + +#define mul_p256k1(P0,P1,P2) \ + xorl %ecx, %ecx ; \ + movq P2, %rdx ; \ + mulxq P1, %r8, %r9 ; \ + mulxq 0x8+P1, %rax, %r10 ; \ + addq %rax, %r9 ; \ + mulxq 0x10+P1, %rax, %r11 ; \ + adcq %rax, %r10 ; \ + mulxq 0x18+P1, %rax, %r12 ; \ + adcq %rax, %r11 ; \ + adcq %rcx, %r12 ; \ + xorl %ecx, %ecx ; \ + movq 0x8+P2, %rdx ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x18+P1, %rax, %r13 ; \ + adcxq %rax, %r12 ; \ + adoxq %rcx, %r13 ; \ + adcxq %rcx, %r13 ; \ + xorl %ecx, %ecx ; \ + movq 0x10+P2, %rdx ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x18+P1, %rax, %r14 ; \ + adcxq %rax, %r13 ; \ + adoxq %rcx, %r14 ; \ + adcxq %rcx, %r14 ; \ + xorl %ecx, %ecx ; \ + movq 0x18+P2, %rdx ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x18+P1, %rax, %r15 ; \ + adcxq %rax, %r14 ; \ + adoxq %rcx, %r15 ; \ + adcxq %rcx, %r15 ; \ + movabs $0x1000003d1, %rdx ; \ + xorl %ecx, %ecx ; \ + mulxq %r12, %rax, %rbx ; \ + adcxq %rax, %r8 ; \ + adoxq %rbx, %r9 ; \ + mulxq %r13, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq %r14, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq %r15, %rax, %r12 ; \ + adcxq %rax, %r11 ; \ + adoxq %rcx, %r12 ; \ + adcxq %rcx, %r12 ; \ + leaq 0x1(%r12), %rax ; \ + mulxq %rax, %rax, %rbx ; \ + addq %rax, %r8 ; \ + adcq %rbx, %r9 ; \ + adcq %rcx, %r10 ; \ + adcq %rcx, %r11 ; \ + cmovbq %rcx, %rdx ; \ + subq %rdx, %r8 ; \ + sbbq %rcx, %r9 ; \ + sbbq %rcx, %r10 ; \ + sbbq %rcx, %r11 ; \ + movq %r8, P0 ; \ + movq %r9, 0x8+P0 ; \ + movq %r10, 0x10+P0 ; \ + movq %r11, 0x18+P0 + +// Corresponds exactly to bignum_sqr_p256k1 + +#define sqr_p256k1(P0,P1) \ + movq P1, %rdx ; \ + mulxq %rdx, %r8, %r15 ; \ + mulxq 0x8+P1, %r9, %r10 ; \ + mulxq 0x18+P1, %r11, %r12 ; \ + movq 0x10+P1, %rdx ; \ + mulxq 0x18+P1, %r13, %r14 ; \ + xorl %ebx, %ebx ; \ + mulxq P1, %rax, %rcx ; \ + adcxq %rax, %r10 ; \ + adoxq %rcx, %r11 ; \ + mulxq 0x8+P1, %rax, %rcx ; \ + adcxq %rax, %r11 ; \ + adoxq %rcx, %r12 ; \ + movq 0x18+P1, %rdx ; \ + mulxq 0x8+P1, %rax, %rcx ; \ + adcxq %rax, %r12 ; \ + adoxq %rcx, %r13 ; \ + adcxq %rbx, %r13 ; \ + adoxq %rbx, %r14 ; \ + adcq %rbx, %r14 ; \ + xorl %ebx, %ebx ; \ + adcxq %r9, %r9 ; \ + adoxq %r15, %r9 ; \ + movq 0x8+P1, %rdx ; \ + mulxq %rdx, %rax, %rdx ; \ + adcxq %r10, %r10 ; \ + adoxq %rax, %r10 ; \ + adcxq %r11, %r11 ; \ + adoxq %rdx, %r11 ; \ + movq 0x10+P1, %rdx ; \ + mulxq %rdx, %rax, %rdx ; \ + adcxq %r12, %r12 ; \ + adoxq %rax, %r12 ; \ + adcxq %r13, %r13 ; \ + adoxq %rdx, %r13 ; \ + movq 0x18+P1, %rdx ; \ + mulxq %rdx, %rax, %r15 ; \ + adcxq %r14, %r14 ; \ + adoxq %rax, %r14 ; \ + adcxq %rbx, %r15 ; \ + adoxq %rbx, %r15 ; \ + movabs $0x1000003d1, %rdx ; \ + xorl %ebx, %ebx ; \ + mulxq %r12, %rax, %rcx ; \ + adcxq %rax, %r8 ; \ + adoxq %rcx, %r9 ; \ + mulxq %r13, %rax, %rcx ; \ + adcxq %rax, %r9 ; \ + adoxq %rcx, %r10 ; \ + mulxq %r14, %rax, %rcx ; \ + adcxq %rax, %r10 ; \ + adoxq %rcx, %r11 ; \ + mulxq %r15, %rax, %r12 ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + adcxq %rbx, %r12 ; \ + leaq 0x1(%r12), %rax ; \ + mulxq %rax, %rax, %rcx ; \ + addq %rax, %r8 ; \ + adcq %rcx, %r9 ; \ + adcq %rbx, %r10 ; \ + adcq %rbx, %r11 ; \ + sbbq %rax, %rax ; \ + notq %rax; \ + andq %rdx, %rax ; \ + subq %rax, %r8 ; \ + sbbq %rbx, %r9 ; \ + sbbq %rbx, %r10 ; \ + sbbq %rbx, %r11 ; \ + movq %r8, P0 ; \ + movq %r9, 0x8+P0 ; \ + movq %r10, 0x10+P0 ; \ + movq %r11, 0x18+P0 + +// Corresponds exactly to bignum_sub_p256k1 + +#define sub_p256k1(P0,P1,P2) \ + xorl %eax, %eax ; \ + movq P1, %r8 ; \ + subq P2, %r8 ; \ + movq 0x8+P1, %r9 ; \ + sbbq 0x8+P2, %r9 ; \ + movq 0x10+P1, %r10 ; \ + sbbq 0x10+P2, %r10 ; \ + movq 0x18+P1, %r11 ; \ + sbbq 0x18+P2, %r11 ; \ + movabs $0x1000003d1, %rcx ; \ + cmovae %rax, %rcx ; \ + subq %rcx, %r8 ; \ + movq %r8, P0 ; \ + sbbq %rax, %r9 ; \ + movq %r9, 0x8+P0 ; \ + sbbq %rax, %r10 ; \ + movq %r10, 0x10+P0 ; \ + sbbq %rax, %r11 ; \ + movq %r11, 0x18+P0 + +S2N_BN_SYMBOL(secp256k1_jadd): + +#if WINDOWS_ABI + pushq %rdi + pushq %rsi + movq %rcx, %rdi + movq %rdx, %rsi + movq %r8, %rdx +#endif + +// Save registers and make room on stack for temporary variables +// Put the input y in %rbp where it stays + + pushq %rbx + pushq %rbp + pushq %r12 + pushq %r13 + pushq %r14 + pushq %r15 + + subq $NSPACE, %rsp + + movq %rdx, %rbp + +// Main code, just a sequence of basic field operations + + sqr_p256k1(z1sq,z_1) + sqr_p256k1(z2sq,z_2) + + mul_p256k1(y1a,z_2,y_1) + mul_p256k1(y2a,z_1,y_2) + + mul_p256k1(x2a,z1sq,x_2) + mul_p256k1(x1a,z2sq,x_1) + mul_p256k1(y2a,z1sq,y2a) + mul_p256k1(y1a,z2sq,y1a) + + sub_p256k1(xd,x2a,x1a) + sub_p256k1(yd,y2a,y1a) + + sqr_p256k1(zz,xd) + sqr_p256k1(ww,yd) + + mul_p256k1(zzx1,zz,x1a) + mul_p256k1(zzx2,zz,x2a) + + sub_p256k1(x_3,ww,zzx1) + sub_p256k1(t1,zzx2,zzx1) + + mul_p256k1(xd,xd,z_1) + + sub_p256k1(x_3,x_3,zzx2) + + sub_p256k1(t2,zzx1,x_3) + + mul_p256k1(t1,t1,y1a) + mul_p256k1(z_3,xd,z_2) + mul_p256k1(t2,yd,t2) + + sub_p256k1(y_3,t2,t1) + +// Restore stack and registers + + addq $NSPACE, %rsp + popq %r15 + popq %r14 + popq %r13 + popq %r12 + popq %rbp + popq %rbx + +#if WINDOWS_ABI + popq %rsi + popq %rdi +#endif + ret + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack, "", %progbits +#endif diff --git a/x86_att/secp256k1/secp256k1_jdouble.S b/x86_att/secp256k1/secp256k1_jdouble.S new file mode 100644 index 0000000000..026742f67b --- /dev/null +++ b/x86_att/secp256k1/secp256k1_jdouble.S @@ -0,0 +1,630 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +// ---------------------------------------------------------------------------- +// Point doubling on SECG curve secp256k1 in Jacobian coordinates +// +// extern void secp256k1_montjdouble +// (uint64_t p3[static 12],uint64_t p1[static 12]); +// +// Does p3 := 2 * p1 where all points are regarded as Jacobian triples. +// A Jacobian triple (x,y,z) represents affine point (x/z^2,y/z^3). +// It is assumed that all coordinates of the input point are fully +// reduced mod p_256k1 and that the z coordinate is not zero. +// +// Standard x86-64 ABI: RDI = p3, RSI = p1 +// Microsoft x64 ABI: RCX = p3, RDX = p1 +// ---------------------------------------------------------------------------- +#include "_internal_s2n_bignum.h" + + + S2N_BN_SYM_VISIBILITY_DIRECTIVE(secp256k1_jdouble) + S2N_BN_SYM_PRIVACY_DIRECTIVE(secp256k1_jdouble) + .text + .balign 4 + +// Size of individual field elements + +#define NUMSIZE 32 + +// Pointer-offset pairs for inputs and outputs +// These assume %rdi = p3, %rsi = p1, which is true when the +// arguments come in initially and is not disturbed throughout. + +#define x_1 0(%rsi) +#define y_1 NUMSIZE(%rsi) +#define z_1 (2*NUMSIZE)(%rsi) + +#define x_3 0(%rdi) +#define y_3 NUMSIZE(%rdi) +#define z_3 (2*NUMSIZE)(%rdi) + +// Pointer-offset pairs for temporaries, with some aliasing +// NSPACE is the total stack needed for these temporaries + +#define x_2 (NUMSIZE*0)(%rsp) +#define y_2 (NUMSIZE*1)(%rsp) +#define d (NUMSIZE*2)(%rsp) +#define tmp (NUMSIZE*3)(%rsp) +#define x_4 (NUMSIZE*4)(%rsp) +#define y_4 (NUMSIZE*6)(%rsp) +#define dx2 (NUMSIZE*8)(%rsp) +#define xy2 (NUMSIZE*10)(%rsp) + +#define NSPACE (NUMSIZE*12) + +// Corresponds exactly to bignum_mul_p256k1 + +#define mul_p256k1(P0,P1,P2) \ + xorl %ecx, %ecx ; \ + movq P2, %rdx ; \ + mulxq P1, %r8, %r9 ; \ + mulxq 0x8+P1, %rax, %r10 ; \ + addq %rax, %r9 ; \ + mulxq 0x10+P1, %rax, %r11 ; \ + adcq %rax, %r10 ; \ + mulxq 0x18+P1, %rax, %r12 ; \ + adcq %rax, %r11 ; \ + adcq %rcx, %r12 ; \ + xorl %ecx, %ecx ; \ + movq 0x8+P2, %rdx ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x18+P1, %rax, %r13 ; \ + adcxq %rax, %r12 ; \ + adoxq %rcx, %r13 ; \ + adcxq %rcx, %r13 ; \ + xorl %ecx, %ecx ; \ + movq 0x10+P2, %rdx ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x18+P1, %rax, %r14 ; \ + adcxq %rax, %r13 ; \ + adoxq %rcx, %r14 ; \ + adcxq %rcx, %r14 ; \ + xorl %ecx, %ecx ; \ + movq 0x18+P2, %rdx ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x18+P1, %rax, %r15 ; \ + adcxq %rax, %r14 ; \ + adoxq %rcx, %r15 ; \ + adcxq %rcx, %r15 ; \ + movabsq $0x1000003d1, %rdx ; \ + xorl %ecx, %ecx ; \ + mulxq %r12, %rax, %rbx ; \ + adcxq %rax, %r8 ; \ + adoxq %rbx, %r9 ; \ + mulxq %r13, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq %r14, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq %r15, %rax, %r12 ; \ + adcxq %rax, %r11 ; \ + adoxq %rcx, %r12 ; \ + adcxq %rcx, %r12 ; \ + leaq 0x1(%r12), %rax ; \ + mulxq %rax, %rax, %rbx ; \ + addq %rax, %r8 ; \ + adcq %rbx, %r9 ; \ + adcq %rcx, %r10 ; \ + adcq %rcx, %r11 ; \ + cmovbq %rcx, %rdx ; \ + subq %rdx, %r8 ; \ + sbbq %rcx, %r9 ; \ + sbbq %rcx, %r10 ; \ + sbbq %rcx, %r11 ; \ + movq %r8, P0 ; \ + movq %r9, 0x8+P0 ; \ + movq %r10, 0x10+P0 ; \ + movq %r11, 0x18+P0 + +// Corresponds exactly to bignum_sqr_p256k1 + +#define sqr_p256k1(P0,P1) \ + movq P1, %rdx ; \ + mulxq %rdx, %r8, %r15 ; \ + mulxq 0x8+P1, %r9, %r10 ; \ + mulxq 0x18+P1, %r11, %r12 ; \ + movq 0x10+P1, %rdx ; \ + mulxq 0x18+P1, %r13, %r14 ; \ + xorl %ebx, %ebx ; \ + mulxq P1, %rax, %rcx ; \ + adcxq %rax, %r10 ; \ + adoxq %rcx, %r11 ; \ + mulxq 0x8+P1, %rax, %rcx ; \ + adcxq %rax, %r11 ; \ + adoxq %rcx, %r12 ; \ + movq 0x18+P1, %rdx ; \ + mulxq 0x8+P1, %rax, %rcx ; \ + adcxq %rax, %r12 ; \ + adoxq %rcx, %r13 ; \ + adcxq %rbx, %r13 ; \ + adoxq %rbx, %r14 ; \ + adcq %rbx, %r14 ; \ + xorl %ebx, %ebx ; \ + adcxq %r9, %r9 ; \ + adoxq %r15, %r9 ; \ + movq 0x8+P1, %rdx ; \ + mulxq %rdx, %rax, %rdx ; \ + adcxq %r10, %r10 ; \ + adoxq %rax, %r10 ; \ + adcxq %r11, %r11 ; \ + adoxq %rdx, %r11 ; \ + movq 0x10+P1, %rdx ; \ + mulxq %rdx, %rax, %rdx ; \ + adcxq %r12, %r12 ; \ + adoxq %rax, %r12 ; \ + adcxq %r13, %r13 ; \ + adoxq %rdx, %r13 ; \ + movq 0x18+P1, %rdx ; \ + mulxq %rdx, %rax, %r15 ; \ + adcxq %r14, %r14 ; \ + adoxq %rax, %r14 ; \ + adcxq %rbx, %r15 ; \ + adoxq %rbx, %r15 ; \ + movabsq $0x1000003d1, %rdx ; \ + xorl %ebx, %ebx ; \ + mulxq %r12, %rax, %rcx ; \ + adcxq %rax, %r8 ; \ + adoxq %rcx, %r9 ; \ + mulxq %r13, %rax, %rcx ; \ + adcxq %rax, %r9 ; \ + adoxq %rcx, %r10 ; \ + mulxq %r14, %rax, %rcx ; \ + adcxq %rax, %r10 ; \ + adoxq %rcx, %r11 ; \ + mulxq %r15, %rax, %r12 ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + adcxq %rbx, %r12 ; \ + leaq 0x1(%r12), %rax ; \ + mulxq %rax, %rax, %rcx ; \ + addq %rax, %r8 ; \ + adcq %rcx, %r9 ; \ + adcq %rbx, %r10 ; \ + adcq %rbx, %r11 ; \ + sbbq %rax, %rax ; \ + notq %rax; \ + andq %rdx, %rax ; \ + subq %rax, %r8 ; \ + sbbq %rbx, %r9 ; \ + sbbq %rbx, %r10 ; \ + sbbq %rbx, %r11 ; \ + movq %r8, P0 ; \ + movq %r9, 0x8+P0 ; \ + movq %r10, 0x10+P0 ; \ + movq %r11, 0x18+P0 + +// Rough versions producing 5-word results + +#define roughmul_p256k1(P0,P1,P2) \ + xorl %ecx, %ecx ; \ + movq P2, %rdx ; \ + mulxq P1, %r8, %r9 ; \ + mulxq 0x8+P1, %rax, %r10 ; \ + addq %rax, %r9 ; \ + mulxq 0x10+P1, %rax, %r11 ; \ + adcq %rax, %r10 ; \ + mulxq 0x18+P1, %rax, %r12 ; \ + adcq %rax, %r11 ; \ + adcq %rcx, %r12 ; \ + xorl %ecx, %ecx ; \ + movq 0x8+P2, %rdx ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x18+P1, %rax, %r13 ; \ + adcxq %rax, %r12 ; \ + adoxq %rcx, %r13 ; \ + adcxq %rcx, %r13 ; \ + xorl %ecx, %ecx ; \ + movq 0x10+P2, %rdx ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x18+P1, %rax, %r14 ; \ + adcxq %rax, %r13 ; \ + adoxq %rcx, %r14 ; \ + adcxq %rcx, %r14 ; \ + xorl %ecx, %ecx ; \ + movq 0x18+P2, %rdx ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x18+P1, %rax, %r15 ; \ + adcxq %rax, %r14 ; \ + adoxq %rcx, %r15 ; \ + adcxq %rcx, %r15 ; \ + movabsq $0x1000003d1, %rdx ; \ + xorl %ecx, %ecx ; \ + mulxq %r12, %rax, %rbx ; \ + adcxq %rax, %r8 ; \ + adoxq %rbx, %r9 ; \ + mulxq %r13, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq %r14, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq %r15, %rax, %r12 ; \ + adcxq %rax, %r11 ; \ + adoxq %rcx, %r12 ; \ + adcxq %rcx, %r12 ; \ + movq %r8, P0 ; \ + movq %r9, 0x8+P0 ; \ + movq %r10, 0x10+P0 ; \ + movq %r11, 0x18+P0 ; \ + movq %r12, 0x20+P0 + +#define roughsqr_p256k1(P0,P1) \ + movq P1, %rdx ; \ + mulxq %rdx, %r8, %r15 ; \ + mulxq 0x8+P1, %r9, %r10 ; \ + mulxq 0x18+P1, %r11, %r12 ; \ + movq 0x10+P1, %rdx ; \ + mulxq 0x18+P1, %r13, %r14 ; \ + xorl %ebx, %ebx ; \ + mulxq P1, %rax, %rcx ; \ + adcxq %rax, %r10 ; \ + adoxq %rcx, %r11 ; \ + mulxq 0x8+P1, %rax, %rcx ; \ + adcxq %rax, %r11 ; \ + adoxq %rcx, %r12 ; \ + movq 0x18+P1, %rdx ; \ + mulxq 0x8+P1, %rax, %rcx ; \ + adcxq %rax, %r12 ; \ + adoxq %rcx, %r13 ; \ + adcxq %rbx, %r13 ; \ + adoxq %rbx, %r14 ; \ + adcq %rbx, %r14 ; \ + xorl %ebx, %ebx ; \ + adcxq %r9, %r9 ; \ + adoxq %r15, %r9 ; \ + movq 0x8+P1, %rdx ; \ + mulxq %rdx, %rax, %rdx ; \ + adcxq %r10, %r10 ; \ + adoxq %rax, %r10 ; \ + adcxq %r11, %r11 ; \ + adoxq %rdx, %r11 ; \ + movq 0x10+P1, %rdx ; \ + mulxq %rdx, %rax, %rdx ; \ + adcxq %r12, %r12 ; \ + adoxq %rax, %r12 ; \ + adcxq %r13, %r13 ; \ + adoxq %rdx, %r13 ; \ + movq 0x18+P1, %rdx ; \ + mulxq %rdx, %rax, %r15 ; \ + adcxq %r14, %r14 ; \ + adoxq %rax, %r14 ; \ + adcxq %rbx, %r15 ; \ + adoxq %rbx, %r15 ; \ + movabsq $0x1000003d1, %rdx ; \ + xorl %ebx, %ebx ; \ + mulxq %r12, %rax, %rcx ; \ + adcxq %rax, %r8 ; \ + adoxq %rcx, %r9 ; \ + mulxq %r13, %rax, %rcx ; \ + adcxq %rax, %r9 ; \ + adoxq %rcx, %r10 ; \ + mulxq %r14, %rax, %rcx ; \ + adcxq %rax, %r10 ; \ + adoxq %rcx, %r11 ; \ + mulxq %r15, %rax, %r12 ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + adcxq %rbx, %r12 ; \ + movq %r8, P0 ; \ + movq %r9, 0x8+P0 ; \ + movq %r10, 0x10+P0 ; \ + movq %r11, 0x18+P0 ; \ + movq %r12, 0x20+P0 + +// Weak doubling operation, staying in 4 digits but not in general +// fully normalizing + +#define weakdouble_p256k1(P0,P1) \ + movq 24+P1, %r11 ; \ + movq 16+P1, %r10 ; \ + movq $0x1000003d1, %rax ; \ + xorq %rdx, %rdx ; \ + shldq $1, %r10, %r11 ; \ + cmovncq %rdx, %rax ; \ + movq 8+P1, %r9 ; \ + shldq $1, %r9, %r10 ; \ + movq P1, %r8 ; \ + shldq $1, %r8, %r9 ; \ + shlq $1, %r8 ; \ + addq %rax, %r8 ; \ + adcq %rdx, %r9 ; \ + adcq %rdx, %r10 ; \ + adcq %rdx, %r11 ; \ + movq %r8, P0 ; \ + movq %r9, 8+P0 ; \ + movq %r10, 16+P0 ; \ + movq %r11, 24+P0 + +// P0 = C * P1 - D * P2 with 5-word inputs P1 and P2 +// Only used here with C = 12, D = 9, but could be used more generally. +// We actually compute C * P1 + D * (2^33 * p_256k1 - P2) + +#define cmsub_p256k1(P0,C,P1,D,P2) \ + movq $0xfffff85e00000000, %r8 ; \ + subq P2, %r8 ; \ + movq $0xfffffffffffffffd, %r9 ; \ + sbbq 8+P2, %r9 ; \ + movq $0xffffffffffffffff, %r10 ; \ + sbbq 16+P2, %r10 ; \ + movq $0xffffffffffffffff, %r11 ; \ + sbbq 24+P2, %r11 ; \ + movq $0x00000001ffffffff, %r12 ; \ + sbbq 32+P2, %r12 ; \ + movq $D, %rdx ; \ + mulxq %r8, %r8, %rax ; \ + mulxq %r9, %r9, %rcx ; \ + addq %rax, %r9 ; \ + mulxq %r10, %r10, %rax ; \ + adcq %rcx, %r10 ; \ + mulxq %r11, %r11, %rcx ; \ + adcq %rax, %r11 ; \ + mulxq %r12, %r12, %rax ; \ + adcq %rcx, %r12 ; \ + movq $C, %rdx ; \ + xorq %rbx, %rbx ; \ + mulxq P1, %rax, %rcx ; \ + adcxq %rax, %r8 ; \ + adoxq %rcx, %r9 ; \ + mulxq 8+P1, %rax, %rcx ; \ + adcxq %rax, %r9 ; \ + adoxq %rcx, %r10 ; \ + mulxq 16+P1, %rax, %rcx ; \ + adcxq %rax, %r10 ; \ + adoxq %rcx, %r11 ; \ + mulxq 24+P1, %rax, %rcx ; \ + adcxq %rax, %r11 ; \ + adoxq %rcx, %r12 ; \ + mulxq 32+P1, %rax, %rcx ; \ + adcxq %rax, %r12 ; \ + leaq 0x1(%r12), %rax ; \ + movq $0x1000003d1, %rcx ; \ + mulq %rcx; \ + addq %rax, %r8 ; \ + adcq %rdx, %r9 ; \ + adcq %rbx, %r10 ; \ + adcq %rbx, %r11 ; \ + cmovbq %rbx, %rcx ; \ + subq %rcx, %r8 ; \ + movq %r8, P0 ; \ + sbbq %rbx, %r9 ; \ + movq %r9, 8+P0 ; \ + sbbq %rbx, %r10 ; \ + movq %r10, 16+P0 ; \ + sbbq %rbx, %r11 ; \ + movq %r11, 24+P0 ; \ + +// P0 = 3 * P1 - 8 * P2 with 5-digit P1 and P2 +// We actually compute 3 * P1 + (2^33 * p_256k1 - P2) << 3 + +#define cmsub38_p256k1(P0,P1,P2) \ + movq $0xfffff85e00000000, %r8 ; \ + subq P2, %r8 ; \ + movq $0xfffffffffffffffd, %r9 ; \ + sbbq 8+P2, %r9 ; \ + movq $0xffffffffffffffff, %r10 ; \ + sbbq 16+P2, %r10 ; \ + movq $0xffffffffffffffff, %r11 ; \ + sbbq 24+P2, %r11 ; \ + movq $0x00000001ffffffff, %r12 ; \ + sbbq 32+P2, %r12 ; \ + shldq $3, %r11, %r12 ; \ + shldq $3, %r10, %r11 ; \ + shldq $3, %r9, %r10 ; \ + shldq $3, %r8, %r9 ; \ + shlq $3, %r8 ; \ + movq $3, %rdx ; \ + xorq %rbx, %rbx ; \ + mulxq P1, %rax, %rcx ; \ + adcxq %rax, %r8 ; \ + adoxq %rcx, %r9 ; \ + mulxq 8+P1, %rax, %rcx ; \ + adcxq %rax, %r9 ; \ + adoxq %rcx, %r10 ; \ + mulxq 16+P1, %rax, %rcx ; \ + adcxq %rax, %r10 ; \ + adoxq %rcx, %r11 ; \ + mulxq 24+P1, %rax, %rcx ; \ + adcxq %rax, %r11 ; \ + adoxq %rcx, %r12 ; \ + mulxq 32+P1, %rax, %rcx ; \ + adcxq %rax, %r12 ; \ + leaq 0x1(%r12), %rax ; \ + movq $0x1000003d1, %rcx ; \ + mulq %rcx; \ + addq %rax, %r8 ; \ + adcq %rdx, %r9 ; \ + adcq %rbx, %r10 ; \ + adcq %rbx, %r11 ; \ + cmovbq %rbx, %rcx ; \ + subq %rcx, %r8 ; \ + movq %r8, P0 ; \ + sbbq %rbx, %r9 ; \ + movq %r9, 8+P0 ; \ + sbbq %rbx, %r10 ; \ + movq %r10, 16+P0 ; \ + sbbq %rbx, %r11 ; \ + movq %r11, 24+P0 ; \ + +// P0 = 4 * P1 - P2 with 5-digit P1, 4-digit P2 and result. +// This is done by direct subtraction of P2 since the method +// in bignum_cmul_p256k1 etc. for quotient estimation still +// works when the value to be reduced is negative, as +// long as it is > -p_256k1, which is the case here. + +#define cmsub41_p256k1(P0,P1,P2) \ + movq 32+P1, %r12 ; \ + movq 24+P1, %r11 ; \ + shldq $2, %r11, %r12 ; \ + movq 16+P1, %r10 ; \ + shldq $2, %r10, %r11 ; \ + movq 8+P1, %r9 ; \ + shldq $2, %r9, %r10 ; \ + movq P1, %r8 ; \ + shldq $2, %r8, %r9 ; \ + shlq $2, %r8 ; \ + subq P2, %r8 ; \ + sbbq 8+P2, %r9 ; \ + sbbq 16+P2, %r10 ; \ + sbbq 24+P2, %r11 ; \ + sbbq $0, %r12 ; \ + leaq 0x1(%r12), %rax ; \ + movq $0x1000003d1, %rcx ; \ + mulq %rcx; \ + xorq %rbx, %rbx ; \ + addq %rax, %r8 ; \ + adcq %rdx, %r9 ; \ + adcq $0x0, %r10 ; \ + adcq $0x0, %r11 ; \ + cmovbq %rbx, %rcx ; \ + subq %rcx, %r8 ; \ + movq %r8, P0 ; \ + sbbq %rbx, %r9 ; \ + movq %r9, 8+P0 ; \ + sbbq %rbx, %r10 ; \ + movq %r10, 16+P0 ; \ + sbbq %rbx, %r11 ; \ + movq %r11, 24+P0 ; \ + +S2N_BN_SYMBOL(secp256k1_jdouble): + +#if WINDOWS_ABI + pushq %rdi + pushq %rsi + movq %rcx, %rdi + movq %rdx, %rsi +#endif + +// Save registers and make room on stack for temporary variables + + pushq %rbx + pushq %r12 + pushq %r13 + pushq %r14 + pushq %r15 + + subq $NSPACE, %rsp + +// Main sequence of operations + + // y_2 = y^2 + + sqr_p256k1(y_2,y_1) + + // x_2 = x^2 + + sqr_p256k1(x_2,x_1) + + // tmp = 2 * y_1 (in 4 words but not fully normalized) + + weakdouble_p256k1(tmp,y_1) + + // xy2 = x * y^2 (5-digit partially reduced) + // x_4 = x^4 (5-digit partially reduced) + + roughmul_p256k1(xy2,x_1,y_2) + roughsqr_p256k1(x_4,x_2) + + // z_3 = 2 * y_1 * z_1 + + mul_p256k1(z_3,z_1,tmp) + + // d = 12 * xy2 - 9 * x_4 + + cmsub_p256k1(d,12,xy2,9,x_4) + + // y4 = y2^2 (5-digit partially reduced) + + roughsqr_p256k1(y_4,y_2) + + // dx2 = d * x_2 (5-digit partially reduced) + + roughmul_p256k1(dx2,x_2,d) + + // x_3 = 4 * xy2 - d + + cmsub41_p256k1(x_3,xy2,d) + + // y_3 = 3 * dx2 - 8 * y_4 + + cmsub38_p256k1(y_3,dx2,y_4) + +// Restore stack and registers + + addq $NSPACE, %rsp + popq %r15 + popq %r14 + popq %r13 + popq %r12 + popq %rbx + +#if WINDOWS_ABI + popq %rsi + popq %rdi +#endif + ret + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack, "", %progbits +#endif diff --git a/x86_att/secp256k1/secp256k1_jmixadd.S b/x86_att/secp256k1/secp256k1_jmixadd.S new file mode 100644 index 0000000000..884c41b8bb --- /dev/null +++ b/x86_att/secp256k1/secp256k1_jmixadd.S @@ -0,0 +1,346 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +// ---------------------------------------------------------------------------- +// Point mixed addition on SECG curve secp256k1 in Jacobian coordinates +// +// extern void secp256k1_jmixadd +// (uint64_t p3[static 12],uint64_t p1[static 12],uint64_t p2[static 8]); +// +// Does p3 := p1 + p2 where all points are regarded as Jacobian triples. +// A Jacobian triple (x,y,z) represents affine point (x/z^2,y/z^3). +// The "mixed" part means that p2 only has x and y coordinates, with the +// implicit z coordinate assumed to be the identity. It is assumed that +// all the coordinates of the input points p1 and p2 are fully reduced +// mod p_256k1, that the z coordinate of p1 is nonzero and that neither +// p1 =~= p2 or p1 =~= -p2, where "=~=" means "represents the same affine +// point as". +// +// Standard x86-64 ABI: RDI = p3, RSI = p1, RDX = p2 +// Microsoft x64 ABI: RCX = p3, RDX = p1, R8 = p2 +// ---------------------------------------------------------------------------- +#include "_internal_s2n_bignum.h" + + + S2N_BN_SYM_VISIBILITY_DIRECTIVE(secp256k1_jmixadd) + S2N_BN_SYM_PRIVACY_DIRECTIVE(secp256k1_jmixadd) + .text + +// Size of individual field elements + +#define NUMSIZE 32 + +// Pointer-offset pairs for inputs and outputs +// These assume %rdi = p3, %rsi = p1 and %rbp = p2, +// all of which are maintained throughout the code. + +#define x_1 0(%rsi) +#define y_1 NUMSIZE(%rsi) +#define z_1 (2*NUMSIZE)(%rsi) + +#define x_2 0(%rbp) +#define y_2 NUMSIZE(%rbp) +#define z_2 (2*NUMSIZE)(%rbp) + +#define x_3 0(%rdi) +#define y_3 NUMSIZE(%rdi) +#define z_3 (2*NUMSIZE)(%rdi) + +// Pointer-offset pairs for temporaries, with some aliasing +// NSPACE is the total stack needed for these temporaries + +#define zp2 (NUMSIZE*0)(%rsp) +#define ww (NUMSIZE*0)(%rsp) + +#define yd (NUMSIZE*1)(%rsp) +#define y2a (NUMSIZE*1)(%rsp) + +#define x2a (NUMSIZE*2)(%rsp) +#define zzx2 (NUMSIZE*2)(%rsp) + +#define zz (NUMSIZE*3)(%rsp) +#define t1 (NUMSIZE*3)(%rsp) + +#define t2 (NUMSIZE*4)(%rsp) +#define zzx1 (NUMSIZE*4)(%rsp) + +#define xd (NUMSIZE*5)(%rsp) + +#define NSPACE (NUMSIZE*6) + +// Corresponds exactly to bignum_mul_p256k1 + +#define mul_p256k1(P0,P1,P2) \ + xorl %ecx, %ecx ; \ + movq P2, %rdx ; \ + mulxq P1, %r8, %r9 ; \ + mulxq 0x8+P1, %rax, %r10 ; \ + addq %rax, %r9 ; \ + mulxq 0x10+P1, %rax, %r11 ; \ + adcq %rax, %r10 ; \ + mulxq 0x18+P1, %rax, %r12 ; \ + adcq %rax, %r11 ; \ + adcq %rcx, %r12 ; \ + xorl %ecx, %ecx ; \ + movq 0x8+P2, %rdx ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x18+P1, %rax, %r13 ; \ + adcxq %rax, %r12 ; \ + adoxq %rcx, %r13 ; \ + adcxq %rcx, %r13 ; \ + xorl %ecx, %ecx ; \ + movq 0x10+P2, %rdx ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x18+P1, %rax, %r14 ; \ + adcxq %rax, %r13 ; \ + adoxq %rcx, %r14 ; \ + adcxq %rcx, %r14 ; \ + xorl %ecx, %ecx ; \ + movq 0x18+P2, %rdx ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x18+P1, %rax, %r15 ; \ + adcxq %rax, %r14 ; \ + adoxq %rcx, %r15 ; \ + adcxq %rcx, %r15 ; \ + movabs $0x1000003d1, %rdx ; \ + xorl %ecx, %ecx ; \ + mulxq %r12, %rax, %rbx ; \ + adcxq %rax, %r8 ; \ + adoxq %rbx, %r9 ; \ + mulxq %r13, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq %r14, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq %r15, %rax, %r12 ; \ + adcxq %rax, %r11 ; \ + adoxq %rcx, %r12 ; \ + adcxq %rcx, %r12 ; \ + leaq 0x1(%r12), %rax ; \ + mulxq %rax, %rax, %rbx ; \ + addq %rax, %r8 ; \ + adcq %rbx, %r9 ; \ + adcq %rcx, %r10 ; \ + adcq %rcx, %r11 ; \ + cmovbq %rcx, %rdx ; \ + subq %rdx, %r8 ; \ + sbbq %rcx, %r9 ; \ + sbbq %rcx, %r10 ; \ + sbbq %rcx, %r11 ; \ + movq %r8, P0 ; \ + movq %r9, 0x8+P0 ; \ + movq %r10, 0x10+P0 ; \ + movq %r11, 0x18+P0 + +// Corresponds exactly to bignum_sqr_p256k1 + +#define sqr_p256k1(P0,P1) \ + movq P1, %rdx ; \ + mulxq %rdx, %r8, %r15 ; \ + mulxq 0x8+P1, %r9, %r10 ; \ + mulxq 0x18+P1, %r11, %r12 ; \ + movq 0x10+P1, %rdx ; \ + mulxq 0x18+P1, %r13, %r14 ; \ + xorl %ebx, %ebx ; \ + mulxq P1, %rax, %rcx ; \ + adcxq %rax, %r10 ; \ + adoxq %rcx, %r11 ; \ + mulxq 0x8+P1, %rax, %rcx ; \ + adcxq %rax, %r11 ; \ + adoxq %rcx, %r12 ; \ + movq 0x18+P1, %rdx ; \ + mulxq 0x8+P1, %rax, %rcx ; \ + adcxq %rax, %r12 ; \ + adoxq %rcx, %r13 ; \ + adcxq %rbx, %r13 ; \ + adoxq %rbx, %r14 ; \ + adcq %rbx, %r14 ; \ + xorl %ebx, %ebx ; \ + adcxq %r9, %r9 ; \ + adoxq %r15, %r9 ; \ + movq 0x8+P1, %rdx ; \ + mulxq %rdx, %rax, %rdx ; \ + adcxq %r10, %r10 ; \ + adoxq %rax, %r10 ; \ + adcxq %r11, %r11 ; \ + adoxq %rdx, %r11 ; \ + movq 0x10+P1, %rdx ; \ + mulxq %rdx, %rax, %rdx ; \ + adcxq %r12, %r12 ; \ + adoxq %rax, %r12 ; \ + adcxq %r13, %r13 ; \ + adoxq %rdx, %r13 ; \ + movq 0x18+P1, %rdx ; \ + mulxq %rdx, %rax, %r15 ; \ + adcxq %r14, %r14 ; \ + adoxq %rax, %r14 ; \ + adcxq %rbx, %r15 ; \ + adoxq %rbx, %r15 ; \ + movabs $0x1000003d1, %rdx ; \ + xorl %ebx, %ebx ; \ + mulxq %r12, %rax, %rcx ; \ + adcxq %rax, %r8 ; \ + adoxq %rcx, %r9 ; \ + mulxq %r13, %rax, %rcx ; \ + adcxq %rax, %r9 ; \ + adoxq %rcx, %r10 ; \ + mulxq %r14, %rax, %rcx ; \ + adcxq %rax, %r10 ; \ + adoxq %rcx, %r11 ; \ + mulxq %r15, %rax, %r12 ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + adcxq %rbx, %r12 ; \ + leaq 0x1(%r12), %rax ; \ + mulxq %rax, %rax, %rcx ; \ + addq %rax, %r8 ; \ + adcq %rcx, %r9 ; \ + adcq %rbx, %r10 ; \ + adcq %rbx, %r11 ; \ + sbbq %rax, %rax ; \ + notq %rax; \ + andq %rdx, %rax ; \ + subq %rax, %r8 ; \ + sbbq %rbx, %r9 ; \ + sbbq %rbx, %r10 ; \ + sbbq %rbx, %r11 ; \ + movq %r8, P0 ; \ + movq %r9, 0x8+P0 ; \ + movq %r10, 0x10+P0 ; \ + movq %r11, 0x18+P0 + +// Corresponds exactly to bignum_sub_p256k1 + +#define sub_p256k1(P0,P1,P2) \ + xorl %eax, %eax ; \ + movq P1, %r8 ; \ + subq P2, %r8 ; \ + movq 0x8+P1, %r9 ; \ + sbbq 0x8+P2, %r9 ; \ + movq 0x10+P1, %r10 ; \ + sbbq 0x10+P2, %r10 ; \ + movq 0x18+P1, %r11 ; \ + sbbq 0x18+P2, %r11 ; \ + movabs $0x1000003d1, %rcx ; \ + cmovae %rax, %rcx ; \ + subq %rcx, %r8 ; \ + movq %r8, P0 ; \ + sbbq %rax, %r9 ; \ + movq %r9, 0x8+P0 ; \ + sbbq %rax, %r10 ; \ + movq %r10, 0x10+P0 ; \ + sbbq %rax, %r11 ; \ + movq %r11, 0x18+P0 + +S2N_BN_SYMBOL(secp256k1_jmixadd): + +#if WINDOWS_ABI + pushq %rdi + pushq %rsi + movq %rcx, %rdi + movq %rdx, %rsi + movq %r8, %rdx +#endif + +// Save registers and make room on stack for temporary variables +// Put the input y in %rbp where it stays + + pushq %rbx + pushq %rbp + pushq %r12 + pushq %r13 + pushq %r14 + pushq %r15 + + subq $NSPACE, %rsp + + movq %rdx, %rbp + +// Main code, just a sequence of basic field operations + + sqr_p256k1(zp2,z_1) + + mul_p256k1(y2a,z_1,y_2) + mul_p256k1(x2a,zp2,x_2) + mul_p256k1(y2a,zp2,y2a) + + sub_p256k1(xd,x2a,x_1) + + sub_p256k1(yd,y2a,y_1) + + sqr_p256k1(zz,xd) + sqr_p256k1(ww,yd) + + mul_p256k1(zzx1,zz,x_1) + mul_p256k1(zzx2,zz,x2a) + + sub_p256k1(x_3,ww,zzx1) + sub_p256k1(t1,zzx2,zzx1) + + mul_p256k1(z_3,xd,z_1) + + sub_p256k1(x_3,x_3,zzx2) + + sub_p256k1(t2,zzx1,x_3) + + mul_p256k1(t1,t1,y_1) + mul_p256k1(t2,yd,t2) + + sub_p256k1(y_3,t2,t1) + +// Restore stack and registers + + addq $NSPACE, %rsp + popq %r15 + popq %r14 + popq %r13 + popq %r12 + popq %rbp + popq %rbx + +#if WINDOWS_ABI + popq %rsi + popq %rdi +#endif + ret + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack, "", %progbits +#endif From 39ab4657cf2340755950de490f5f176d6fd5b153 Mon Sep 17 00:00:00 2001 From: John Harrison Date: Thu, 30 Jun 2022 09:40:36 -0500 Subject: [PATCH 3/6] Add basic NIST P-256 point operations A point doubling function, point addition function, and point mixed addition function for the P-256 curve, all using Jacobian coordinates in a Montgomery representation, with input nondegeneracy assumed. As with secp256k1, the addition and mixed addition functions offer only marginal efficiency gains over just calling a sequence of basic field operations, but the doubling has some beneficial mathematically equivalent short-cutting of the intermediate modular reductions. --- arm/Makefile | 3 + arm/p256/Makefile | 5 +- arm/p256/bignum_montsqr_p256_alt.S | 2 +- arm/p256/p256_montjadd.S | 483 +++ arm/p256/p256_montjdouble.S | 594 ++++ arm/p256/p256_montjmixadd.S | 475 +++ arm/proofs/bignum_montsqr_p256_alt.ml | 23 +- arm/proofs/p256_montjadd.ml | 2598 ++++++++++++++++ arm/proofs/p256_montjdouble.ml | 2364 +++++++++++++++ arm/proofs/p256_montjmixadd.ml | 2031 +++++++++++++ benchmarks/benchmark.c | 7 + include/s2n-bignum-c89.h | 12 + include/s2n-bignum.h | 12 + tests/test.c | 118 + x86/Makefile | 3 + x86/p256/Makefile | 5 +- x86/p256/p256_montjadd.S | 526 ++++ x86/p256/p256_montjdouble.S | 641 ++++ x86/p256/p256_montjmixadd.S | 510 ++++ x86/proofs/p256_montjadd.ml | 3905 +++++++++++++++++++++++++ x86/proofs/p256_montjdouble.ml | 3204 ++++++++++++++++++++ x86/proofs/p256_montjmixadd.ml | 2959 +++++++++++++++++++ x86/yesbmi_functions | 3 + x86_att/Makefile | 3 + x86_att/p256/p256_montjadd.S | 526 ++++ x86_att/p256/p256_montjdouble.S | 641 ++++ x86_att/p256/p256_montjmixadd.S | 510 ++++ 27 files changed, 22148 insertions(+), 15 deletions(-) create mode 100644 arm/p256/p256_montjadd.S create mode 100644 arm/p256/p256_montjdouble.S create mode 100644 arm/p256/p256_montjmixadd.S create mode 100644 arm/proofs/p256_montjadd.ml create mode 100644 arm/proofs/p256_montjdouble.ml create mode 100644 arm/proofs/p256_montjmixadd.ml create mode 100644 x86/p256/p256_montjadd.S create mode 100644 x86/p256/p256_montjdouble.S create mode 100644 x86/p256/p256_montjmixadd.S create mode 100644 x86/proofs/p256_montjadd.ml create mode 100644 x86/proofs/p256_montjdouble.ml create mode 100644 x86/proofs/p256_montjmixadd.ml create mode 100644 x86_att/p256/p256_montjadd.S create mode 100644 x86_att/p256/p256_montjdouble.S create mode 100644 x86_att/p256/p256_montjmixadd.S diff --git a/arm/Makefile b/arm/Makefile index 4431189e4f..692de061cb 100644 --- a/arm/Makefile +++ b/arm/Makefile @@ -191,6 +191,9 @@ OBJ = curve25519/bignum_add_p25519.o \ p256/bignum_sub_p256.o \ p256/bignum_tomont_p256.o \ p256/bignum_triple_p256.o \ + p256/p256_montjadd.o \ + p256/p256_montjdouble.o \ + p256/p256_montjmixadd.o \ p384/bignum_add_p384.o \ p384/bignum_bigendian_6.o \ p384/bignum_cmul_p384.o \ diff --git a/arm/p256/Makefile b/arm/p256/Makefile index 2cd8e8bd01..f70822cc13 100644 --- a/arm/p256/Makefile +++ b/arm/p256/Makefile @@ -53,7 +53,10 @@ OBJ = bignum_add_p256.o \ bignum_optneg_p256.o \ bignum_sub_p256.o \ bignum_tomont_p256.o \ - bignum_triple_p256.o + bignum_triple_p256.o \ + p256_montjadd.o \ + p256_montjdouble.o \ + p256_montjmixadd.o %.o : %.S ; $(CC) -E -I../../include $< | $(GAS) -o $@ - diff --git a/arm/p256/bignum_montsqr_p256_alt.S b/arm/p256/bignum_montsqr_p256_alt.S index 5d18d6fe4d..51ca3c641f 100644 --- a/arm/p256/bignum_montsqr_p256_alt.S +++ b/arm/p256/bignum_montsqr_p256_alt.S @@ -162,9 +162,9 @@ S2N_BN_SYMBOL(bignum_montsqr_p256_alt): cset a0, cs // Set [a3;0;a1;-1] = p_256 and form [u7,u6,u5,u4] = [a0;u3;u2;u1;u0] - p_256 +// Note that a3 == mc was already set above mov a1, #0x00000000ffffffff - mov a3, #0xffffffff00000001 subs u4, u0, #-1 sbcs u5, u1, a1 diff --git a/arm/p256/p256_montjadd.S b/arm/p256/p256_montjadd.S new file mode 100644 index 0000000000..c108b232e2 --- /dev/null +++ b/arm/p256/p256_montjadd.S @@ -0,0 +1,483 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +// ---------------------------------------------------------------------------- +// Point addition on NIST curve P-256 in Montgomery-Jacobian coordinates +// +// extern void p256_montjadd +// (uint64_t p3[static 12],uint64_t p1[static 12],uint64_t p2[static 12]); +// +// Does p3 := p1 + p2 where all points are regarded as Jacobian triples with +// each coordinate in the Montgomery domain, i.e. x' = (2^256 * x) mod p_256. +// A Jacobian triple (x',y',z') represents affine point (x/z^2,y/z^3). +// +// Standard ARM ABI: X0 = p3, X1 = p1, X2 = p2 +// ---------------------------------------------------------------------------- +#include "_internal_s2n_bignum.h" + + S2N_BN_SYM_VISIBILITY_DIRECTIVE(p256_montjadd) + S2N_BN_SYM_PRIVACY_DIRECTIVE(p256_montjadd) + + .text + .balign 4 + +// Size of individual field elements + +#define NUMSIZE 32 + +// Stable homes for input arguments during main code sequence + +#define input_z x15 +#define input_x x16 +#define input_y x17 + +// Pointer-offset pairs for inputs and outputs + +#define x_1 input_x, #0 +#define y_1 input_x, #NUMSIZE +#define z_1 input_x, #(2*NUMSIZE) + +#define x_2 input_y, #0 +#define y_2 input_y, #NUMSIZE +#define z_2 input_y, #(2*NUMSIZE) + +#define x_3 input_z, #0 +#define y_3 input_z, #NUMSIZE +#define z_3 input_z, #(2*NUMSIZE) + +// Pointer-offset pairs for temporaries, with some aliasing +// NSPACE is the total stack needed for these temporaries + +#define z1sq sp, #(NUMSIZE*0) +#define ww sp, #(NUMSIZE*0) + +#define yd sp, #(NUMSIZE*1) +#define y2a sp, #(NUMSIZE*1) + +#define x2a sp, #(NUMSIZE*2) +#define zzx2 sp, #(NUMSIZE*2) + +#define zz sp, #(NUMSIZE*3) +#define t1 sp, #(NUMSIZE*3) + +#define t2 sp, #(NUMSIZE*4) +#define x1a sp, #(NUMSIZE*4) +#define zzx1 sp, #(NUMSIZE*4) + +#define xd sp, #(NUMSIZE*5) +#define z2sq sp, #(NUMSIZE*5) + +#define y1a sp, #(NUMSIZE*6) + +#define NSPACE (NUMSIZE*7) + +// Corresponds exactly to bignum_montmul_p256_alt + +#define montmul_p256(P0,P1,P2) \ + ldp x3, x4, [P1]; \ + ldp x7, x8, [P2]; \ + mul x12, x3, x7; \ + umulh x13, x3, x7; \ + mul x11, x3, x8; \ + umulh x14, x3, x8; \ + adds x13, x13, x11; \ + ldp x9, x10, [P2+16]; \ + mul x11, x3, x9; \ + umulh x0, x3, x9; \ + adcs x14, x14, x11; \ + mul x11, x3, x10; \ + umulh x1, x3, x10; \ + adcs x0, x0, x11; \ + adc x1, x1, xzr; \ + ldp x5, x6, [P1+16]; \ + mul x11, x4, x7; \ + adds x13, x13, x11; \ + mul x11, x4, x8; \ + adcs x14, x14, x11; \ + mul x11, x4, x9; \ + adcs x0, x0, x11; \ + mul x11, x4, x10; \ + adcs x1, x1, x11; \ + umulh x3, x4, x10; \ + adc x3, x3, xzr; \ + umulh x11, x4, x7; \ + adds x14, x14, x11; \ + umulh x11, x4, x8; \ + adcs x0, x0, x11; \ + umulh x11, x4, x9; \ + adcs x1, x1, x11; \ + adc x3, x3, xzr; \ + mul x11, x5, x7; \ + adds x14, x14, x11; \ + mul x11, x5, x8; \ + adcs x0, x0, x11; \ + mul x11, x5, x9; \ + adcs x1, x1, x11; \ + mul x11, x5, x10; \ + adcs x3, x3, x11; \ + umulh x4, x5, x10; \ + adc x4, x4, xzr; \ + umulh x11, x5, x7; \ + adds x0, x0, x11; \ + umulh x11, x5, x8; \ + adcs x1, x1, x11; \ + umulh x11, x5, x9; \ + adcs x3, x3, x11; \ + adc x4, x4, xzr; \ + mul x11, x6, x7; \ + adds x0, x0, x11; \ + mul x11, x6, x8; \ + adcs x1, x1, x11; \ + mul x11, x6, x9; \ + adcs x3, x3, x11; \ + mul x11, x6, x10; \ + adcs x4, x4, x11; \ + umulh x5, x6, x10; \ + adc x5, x5, xzr; \ + umulh x11, x6, x7; \ + adds x1, x1, x11; \ + umulh x11, x6, x8; \ + adcs x3, x3, x11; \ + umulh x11, x6, x9; \ + adcs x4, x4, x11; \ + adc x5, x5, xzr; \ + lsl x11, x12, #32; \ + subs x2, x12, x11; \ + lsr x6, x12, #32; \ + sbc x12, x12, x6; \ + adds x13, x13, x11; \ + adcs x14, x14, x6; \ + adcs x0, x0, x2; \ + adc x12, x12, xzr; \ + lsl x11, x13, #32; \ + subs x2, x13, x11; \ + lsr x6, x13, #32; \ + sbc x13, x13, x6; \ + adds x14, x14, x11; \ + adcs x0, x0, x6; \ + adcs x12, x12, x2; \ + adc x13, x13, xzr; \ + lsl x11, x14, #32; \ + subs x2, x14, x11; \ + lsr x6, x14, #32; \ + sbc x14, x14, x6; \ + adds x0, x0, x11; \ + adcs x12, x12, x6; \ + adcs x13, x13, x2; \ + adc x14, x14, xzr; \ + lsl x11, x0, #32; \ + subs x2, x0, x11; \ + lsr x6, x0, #32; \ + sbc x0, x0, x6; \ + adds x12, x12, x11; \ + adcs x13, x13, x6; \ + adcs x14, x14, x2; \ + adc x0, x0, xzr; \ + adds x12, x12, x1; \ + adcs x13, x13, x3; \ + adcs x14, x14, x4; \ + adcs x0, x0, x5; \ + cset x2, cs; \ + mov x11, #0xffffffff; \ + mov x6, #0xffffffff00000001; \ + adds x1, x12, #0x1; \ + sbcs x3, x13, x11; \ + sbcs x4, x14, xzr; \ + sbcs x5, x0, x6; \ + sbcs xzr, x2, xzr; \ + csel x12, x12, x1, cc; \ + csel x13, x13, x3, cc; \ + csel x14, x14, x4, cc; \ + csel x0, x0, x5, cc; \ + stp x12, x13, [P0]; \ + stp x14, x0, [P0+16] + +// Corresponds exactly to bignum_montsqr_p256_alt + +#define montsqr_p256(P0,P1) \ + ldp x2, x3, [P1]; \ + mul x9, x2, x3; \ + umulh x10, x2, x3; \ + ldp x4, x5, [P1+16]; \ + mul x11, x2, x5; \ + umulh x12, x2, x5; \ + mul x6, x2, x4; \ + umulh x7, x2, x4; \ + adds x10, x10, x6; \ + adcs x11, x11, x7; \ + mul x6, x3, x4; \ + umulh x7, x3, x4; \ + adc x7, x7, xzr; \ + adds x11, x11, x6; \ + mul x13, x4, x5; \ + umulh x14, x4, x5; \ + adcs x12, x12, x7; \ + mul x6, x3, x5; \ + umulh x7, x3, x5; \ + adc x7, x7, xzr; \ + adds x12, x12, x6; \ + adcs x13, x13, x7; \ + adc x14, x14, xzr; \ + adds x9, x9, x9; \ + adcs x10, x10, x10; \ + adcs x11, x11, x11; \ + adcs x12, x12, x12; \ + adcs x13, x13, x13; \ + adcs x14, x14, x14; \ + cset x7, cs; \ + umulh x6, x2, x2; \ + mul x8, x2, x2; \ + adds x9, x9, x6; \ + mul x6, x3, x3; \ + adcs x10, x10, x6; \ + umulh x6, x3, x3; \ + adcs x11, x11, x6; \ + mul x6, x4, x4; \ + adcs x12, x12, x6; \ + umulh x6, x4, x4; \ + adcs x13, x13, x6; \ + mul x6, x5, x5; \ + adcs x14, x14, x6; \ + umulh x6, x5, x5; \ + adc x7, x7, x6; \ + adds x9, x9, x8, lsl #32; \ + lsr x3, x8, #32; \ + adcs x10, x10, x3; \ + mov x3, #0xffffffff00000001; \ + mul x2, x8, x3; \ + umulh x8, x8, x3; \ + adcs x11, x11, x2; \ + adc x8, x8, xzr; \ + adds x10, x10, x9, lsl #32; \ + lsr x3, x9, #32; \ + adcs x11, x11, x3; \ + mov x3, #0xffffffff00000001; \ + mul x2, x9, x3; \ + umulh x9, x9, x3; \ + adcs x8, x8, x2; \ + adc x9, x9, xzr; \ + adds x11, x11, x10, lsl #32; \ + lsr x3, x10, #32; \ + adcs x8, x8, x3; \ + mov x3, #0xffffffff00000001; \ + mul x2, x10, x3; \ + umulh x10, x10, x3; \ + adcs x9, x9, x2; \ + adc x10, x10, xzr; \ + adds x8, x8, x11, lsl #32; \ + lsr x3, x11, #32; \ + adcs x9, x9, x3; \ + mov x3, #0xffffffff00000001; \ + mul x2, x11, x3; \ + umulh x11, x11, x3; \ + adcs x10, x10, x2; \ + adc x11, x11, xzr; \ + adds x8, x8, x12; \ + adcs x9, x9, x13; \ + adcs x10, x10, x14; \ + adcs x11, x11, x7; \ + cset x2, cs; \ + mov x3, #0xffffffff; \ + mov x5, #0xffffffff00000001; \ + adds x12, x8, #0x1; \ + sbcs x13, x9, x3; \ + sbcs x14, x10, xzr; \ + sbcs x7, x11, x5; \ + sbcs xzr, x2, xzr; \ + csel x8, x8, x12, cc; \ + csel x9, x9, x13, cc; \ + csel x10, x10, x14, cc; \ + csel x11, x11, x7, cc; \ + stp x8, x9, [P0]; \ + stp x10, x11, [P0+16] + +// Almost-Montgomery variant which we use when an input to other muls +// with the other argument fully reduced (which is always safe). + +#define amontsqr_p256(P0,P1) \ + ldp x2, x3, [P1]; \ + mul x9, x2, x3; \ + umulh x10, x2, x3; \ + ldp x4, x5, [P1+16]; \ + mul x11, x2, x5; \ + umulh x12, x2, x5; \ + mul x6, x2, x4; \ + umulh x7, x2, x4; \ + adds x10, x10, x6; \ + adcs x11, x11, x7; \ + mul x6, x3, x4; \ + umulh x7, x3, x4; \ + adc x7, x7, xzr; \ + adds x11, x11, x6; \ + mul x13, x4, x5; \ + umulh x14, x4, x5; \ + adcs x12, x12, x7; \ + mul x6, x3, x5; \ + umulh x7, x3, x5; \ + adc x7, x7, xzr; \ + adds x12, x12, x6; \ + adcs x13, x13, x7; \ + adc x14, x14, xzr; \ + adds x9, x9, x9; \ + adcs x10, x10, x10; \ + adcs x11, x11, x11; \ + adcs x12, x12, x12; \ + adcs x13, x13, x13; \ + adcs x14, x14, x14; \ + cset x7, cs; \ + umulh x6, x2, x2; \ + mul x8, x2, x2; \ + adds x9, x9, x6; \ + mul x6, x3, x3; \ + adcs x10, x10, x6; \ + umulh x6, x3, x3; \ + adcs x11, x11, x6; \ + mul x6, x4, x4; \ + adcs x12, x12, x6; \ + umulh x6, x4, x4; \ + adcs x13, x13, x6; \ + mul x6, x5, x5; \ + adcs x14, x14, x6; \ + umulh x6, x5, x5; \ + adc x7, x7, x6; \ + adds x9, x9, x8, lsl #32; \ + lsr x3, x8, #32; \ + adcs x10, x10, x3; \ + mov x3, #0xffffffff00000001; \ + mul x2, x8, x3; \ + umulh x8, x8, x3; \ + adcs x11, x11, x2; \ + adc x8, x8, xzr; \ + adds x10, x10, x9, lsl #32; \ + lsr x3, x9, #32; \ + adcs x11, x11, x3; \ + mov x3, #0xffffffff00000001; \ + mul x2, x9, x3; \ + umulh x9, x9, x3; \ + adcs x8, x8, x2; \ + adc x9, x9, xzr; \ + adds x11, x11, x10, lsl #32; \ + lsr x3, x10, #32; \ + adcs x8, x8, x3; \ + mov x3, #0xffffffff00000001; \ + mul x2, x10, x3; \ + umulh x10, x10, x3; \ + adcs x9, x9, x2; \ + adc x10, x10, xzr; \ + adds x8, x8, x11, lsl #32; \ + lsr x3, x11, #32; \ + adcs x9, x9, x3; \ + mov x3, #0xffffffff00000001; \ + mul x2, x11, x3; \ + umulh x11, x11, x3; \ + adcs x10, x10, x2; \ + adc x11, x11, xzr; \ + adds x8, x8, x12; \ + adcs x9, x9, x13; \ + adcs x10, x10, x14; \ + adcs x11, x11, x7; \ + mov x2, #0xffffffffffffffff; \ + csel x2, xzr, x2, cc; \ + mov x3, #0xffffffff; \ + csel x3, xzr, x3, cc; \ + mov x5, #0xffffffff00000001; \ + csel x5, xzr, x5, cc; \ + subs x8, x8, x2; \ + sbcs x9, x9, x3; \ + sbcs x10, x10, xzr; \ + sbc x11, x11, x5; \ + stp x8, x9, [P0]; \ + stp x10, x11, [P0+16] + +// Corresponds exactly to bignum_sub_p256 + +#define sub_p256(P0,P1,P2) \ + ldp x5, x6, [P1]; \ + ldp x4, x3, [P2]; \ + subs x5, x5, x4; \ + sbcs x6, x6, x3; \ + ldp x7, x8, [P1+16]; \ + ldp x4, x3, [P2+16]; \ + sbcs x7, x7, x4; \ + sbcs x8, x8, x3; \ + csetm x3, cc; \ + adds x5, x5, x3; \ + mov x4, #0xffffffff; \ + and x4, x4, x3; \ + adcs x6, x6, x4; \ + adcs x7, x7, xzr; \ + mov x4, #0xffffffff00000001; \ + and x4, x4, x3; \ + adc x8, x8, x4; \ + stp x5, x6, [P0]; \ + stp x7, x8, [P0+16] + +S2N_BN_SYMBOL(p256_montjadd): + +// Make room on stack for temporary variables +// Move the input arguments to stable places + + sub sp, sp, NSPACE + + mov input_z, x0 + mov input_x, x1 + mov input_y, x2 + +// Main code, just a sequence of basic field operations +// 12 * multiply + 4 * square + 7 * subtract + + amontsqr_p256(z1sq,z_1) + amontsqr_p256(z2sq,z_2) + + montmul_p256(y1a,z_2,y_1) + montmul_p256(y2a,z_1,y_2) + + montmul_p256(x2a,z1sq,x_2) + montmul_p256(x1a,z2sq,x_1) + montmul_p256(y2a,z1sq,y2a) + montmul_p256(y1a,z2sq,y1a) + + sub_p256(xd,x2a,x1a) + sub_p256(yd,y2a,y1a) + + amontsqr_p256(zz,xd) + montsqr_p256(ww,yd) + + montmul_p256(zzx1,zz,x1a) + montmul_p256(zzx2,zz,x2a) + + sub_p256(x_3,ww,zzx1) + sub_p256(t1,zzx2,zzx1) + + montmul_p256(xd,xd,z_1) + + sub_p256(x_3,x_3,zzx2) + + sub_p256(t2,zzx1,x_3) + + montmul_p256(t1,t1,y1a) + montmul_p256(z_3,xd,z_2) + montmul_p256(t2,yd,t2) + + sub_p256(y_3,t2,t1) + +// Restore stack and return + + add sp, sp, NSPACE + ret + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack, "", %progbits +#endif diff --git a/arm/p256/p256_montjdouble.S b/arm/p256/p256_montjdouble.S new file mode 100644 index 0000000000..c6aa1b674e --- /dev/null +++ b/arm/p256/p256_montjdouble.S @@ -0,0 +1,594 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +// ---------------------------------------------------------------------------- +// Point doubling on NIST curve P-256 in Montgomery-Jacobian coordinates +// +// extern void p256_montjdouble +// (uint64_t p3[static 12],uint64_t p1[static 12]); +// +// Does p3 := 2 * p1 where all points are regarded as Jacobian triples with +// each coordinate in the Montgomery domain, i.e. x' = (2^256 * x) mod p_256. +// A Jacobian triple (x',y',z') represents affine point (x/z^2,y/z^3). +// +// Standard ARM ABI: X0 = p3, X1 = p1 +// ---------------------------------------------------------------------------- +#include "_internal_s2n_bignum.h" + + S2N_BN_SYM_VISIBILITY_DIRECTIVE(p256_montjdouble) + S2N_BN_SYM_PRIVACY_DIRECTIVE(p256_montjdouble) + .text + .balign 4 + +// Size of individual field elements + +#define NUMSIZE 32 + +// Stable homes for input arguments during main code sequence + +#define input_z x15 +#define input_x x16 + +// Pointer-offset pairs for inputs and outputs + +#define x_1 input_x, #0 +#define y_1 input_x, #NUMSIZE +#define z_1 input_x, #(2*NUMSIZE) + +#define x_3 input_z, #0 +#define y_3 input_z, #NUMSIZE +#define z_3 input_z, #(2*NUMSIZE) + +// Pointer-offset pairs for temporaries, with some aliasing +// NSPACE is the total stack needed for these temporaries + +#define z2 sp, #(NUMSIZE*0) +#define y2 sp, #(NUMSIZE*1) +#define x2p sp, #(NUMSIZE*2) +#define xy2 sp, #(NUMSIZE*3) + +#define y4 sp, #(NUMSIZE*4) +#define t2 sp, #(NUMSIZE*4) + +#define dx2 sp, #(NUMSIZE*5) +#define t1 sp, #(NUMSIZE*5) + +#define d sp, #(NUMSIZE*6) +#define x4p sp, #(NUMSIZE*6) + +#define NSPACE (NUMSIZE*7) + +// Corresponds exactly to bignum_montmul_p256_alt except registers + +#define montmul_p256(P0,P1,P2) \ + ldp x3, x4, [P1]; \ + ldp x7, x8, [P2]; \ + mul x12, x3, x7; \ + umulh x13, x3, x7; \ + mul x11, x3, x8; \ + umulh x14, x3, x8; \ + adds x13, x13, x11; \ + ldp x9, x10, [P2+16]; \ + mul x11, x3, x9; \ + umulh x0, x3, x9; \ + adcs x14, x14, x11; \ + mul x11, x3, x10; \ + umulh x1, x3, x10; \ + adcs x0, x0, x11; \ + adc x1, x1, xzr; \ + ldp x5, x6, [P1+16]; \ + mul x11, x4, x7; \ + adds x13, x13, x11; \ + mul x11, x4, x8; \ + adcs x14, x14, x11; \ + mul x11, x4, x9; \ + adcs x0, x0, x11; \ + mul x11, x4, x10; \ + adcs x1, x1, x11; \ + umulh x3, x4, x10; \ + adc x3, x3, xzr; \ + umulh x11, x4, x7; \ + adds x14, x14, x11; \ + umulh x11, x4, x8; \ + adcs x0, x0, x11; \ + umulh x11, x4, x9; \ + adcs x1, x1, x11; \ + adc x3, x3, xzr; \ + mul x11, x5, x7; \ + adds x14, x14, x11; \ + mul x11, x5, x8; \ + adcs x0, x0, x11; \ + mul x11, x5, x9; \ + adcs x1, x1, x11; \ + mul x11, x5, x10; \ + adcs x3, x3, x11; \ + umulh x4, x5, x10; \ + adc x4, x4, xzr; \ + umulh x11, x5, x7; \ + adds x0, x0, x11; \ + umulh x11, x5, x8; \ + adcs x1, x1, x11; \ + umulh x11, x5, x9; \ + adcs x3, x3, x11; \ + adc x4, x4, xzr; \ + mul x11, x6, x7; \ + adds x0, x0, x11; \ + mul x11, x6, x8; \ + adcs x1, x1, x11; \ + mul x11, x6, x9; \ + adcs x3, x3, x11; \ + mul x11, x6, x10; \ + adcs x4, x4, x11; \ + umulh x5, x6, x10; \ + adc x5, x5, xzr; \ + umulh x11, x6, x7; \ + adds x1, x1, x11; \ + umulh x11, x6, x8; \ + adcs x3, x3, x11; \ + umulh x11, x6, x9; \ + adcs x4, x4, x11; \ + adc x5, x5, xzr; \ + lsl x11, x12, #32; \ + subs x2, x12, x11; \ + lsr x6, x12, #32; \ + sbc x12, x12, x6; \ + adds x13, x13, x11; \ + adcs x14, x14, x6; \ + adcs x0, x0, x2; \ + adc x12, x12, xzr; \ + lsl x11, x13, #32; \ + subs x2, x13, x11; \ + lsr x6, x13, #32; \ + sbc x13, x13, x6; \ + adds x14, x14, x11; \ + adcs x0, x0, x6; \ + adcs x12, x12, x2; \ + adc x13, x13, xzr; \ + lsl x11, x14, #32; \ + subs x2, x14, x11; \ + lsr x6, x14, #32; \ + sbc x14, x14, x6; \ + adds x0, x0, x11; \ + adcs x12, x12, x6; \ + adcs x13, x13, x2; \ + adc x14, x14, xzr; \ + lsl x11, x0, #32; \ + subs x2, x0, x11; \ + lsr x6, x0, #32; \ + sbc x0, x0, x6; \ + adds x12, x12, x11; \ + adcs x13, x13, x6; \ + adcs x14, x14, x2; \ + adc x0, x0, xzr; \ + adds x12, x12, x1; \ + adcs x13, x13, x3; \ + adcs x14, x14, x4; \ + adcs x0, x0, x5; \ + cset x2, hs; \ + mov x11, #4294967295; \ + mov x6, #-4294967295; \ + adds x1, x12, #1; \ + sbcs x3, x13, x11; \ + sbcs x4, x14, xzr; \ + sbcs x5, x0, x6; \ + sbcs xzr, x2, xzr; \ + csel x12, x12, x1, lo; \ + csel x13, x13, x3, lo; \ + csel x14, x14, x4, lo; \ + csel x0, x0, x5, lo; \ + stp x12, x13, [P0]; \ + stp x14, x0, [P0+16] + +// Corresponds exactly to bignum_montsqr_p256_alt + +#define montsqr_p256(P0,P1) \ + ldp x2, x3, [P1]; \ + mul x9, x2, x3; \ + umulh x10, x2, x3; \ + ldp x4, x5, [P1+16]; \ + mul x11, x2, x5; \ + umulh x12, x2, x5; \ + mul x6, x2, x4; \ + umulh x7, x2, x4; \ + adds x10, x10, x6; \ + adcs x11, x11, x7; \ + mul x6, x3, x4; \ + umulh x7, x3, x4; \ + adc x7, x7, xzr; \ + adds x11, x11, x6; \ + mul x13, x4, x5; \ + umulh x14, x4, x5; \ + adcs x12, x12, x7; \ + mul x6, x3, x5; \ + umulh x7, x3, x5; \ + adc x7, x7, xzr; \ + adds x12, x12, x6; \ + adcs x13, x13, x7; \ + adc x14, x14, xzr; \ + adds x9, x9, x9; \ + adcs x10, x10, x10; \ + adcs x11, x11, x11; \ + adcs x12, x12, x12; \ + adcs x13, x13, x13; \ + adcs x14, x14, x14; \ + cset x7, hs; \ + umulh x6, x2, x2; \ + mul x8, x2, x2; \ + adds x9, x9, x6; \ + mul x6, x3, x3; \ + adcs x10, x10, x6; \ + umulh x6, x3, x3; \ + adcs x11, x11, x6; \ + mul x6, x4, x4; \ + adcs x12, x12, x6; \ + umulh x6, x4, x4; \ + adcs x13, x13, x6; \ + mul x6, x5, x5; \ + adcs x14, x14, x6; \ + umulh x6, x5, x5; \ + adc x7, x7, x6; \ + mov x5, #-4294967295; \ + adds x9, x9, x8, lsl #32; \ + lsr x3, x8, #32; \ + adcs x10, x10, x3; \ + mul x2, x8, x5; \ + umulh x8, x8, x5; \ + adcs x11, x11, x2; \ + adc x8, x8, xzr; \ + adds x10, x10, x9, lsl #32; \ + lsr x3, x9, #32; \ + adcs x11, x11, x3; \ + mul x2, x9, x5; \ + umulh x9, x9, x5; \ + adcs x8, x8, x2; \ + adc x9, x9, xzr; \ + adds x11, x11, x10, lsl #32; \ + lsr x3, x10, #32; \ + adcs x8, x8, x3; \ + mul x2, x10, x5; \ + umulh x10, x10, x5; \ + adcs x9, x9, x2; \ + adc x10, x10, xzr; \ + adds x8, x8, x11, lsl #32; \ + lsr x3, x11, #32; \ + adcs x9, x9, x3; \ + mul x2, x11, x5; \ + umulh x11, x11, x5; \ + adcs x10, x10, x2; \ + adc x11, x11, xzr; \ + adds x8, x8, x12; \ + adcs x9, x9, x13; \ + adcs x10, x10, x14; \ + adcs x11, x11, x7; \ + cset x2, hs; \ + mov x3, #4294967295; \ + adds x12, x8, #1; \ + sbcs x13, x9, x3; \ + sbcs x14, x10, xzr; \ + sbcs x7, x11, x5; \ + sbcs xzr, x2, xzr; \ + csel x8, x8, x12, lo; \ + csel x9, x9, x13, lo; \ + csel x10, x10, x14, lo; \ + csel x11, x11, x7, lo; \ + stp x8, x9, [P0]; \ + stp x10, x11, [P0+16] + +// Corresponds exactly to bignum_sub_p256 + +#define sub_p256(P0,P1,P2) \ + ldp x5, x6, [P1]; \ + ldp x4, x3, [P2]; \ + subs x5, x5, x4; \ + sbcs x6, x6, x3; \ + ldp x7, x8, [P1+16]; \ + ldp x4, x3, [P2+16]; \ + sbcs x7, x7, x4; \ + sbcs x8, x8, x3; \ + csetm x3, lo; \ + adds x5, x5, x3; \ + and x4, x3, #0xffffffff; \ + adcs x6, x6, x4; \ + adcs x7, x7, xzr; \ + and x4, x3, #0xffffffff00000001; \ + adc x8, x8, x4; \ + stp x5, x6, [P0]; \ + stp x7, x8, [P0+16] + +// Corresponds exactly to bignum_add_p256 + +#define add_p256(P0,P1,P2) \ + ldp x5, x6, [P1]; \ + ldp x4, x3, [P2]; \ + adds x5, x5, x4; \ + adcs x6, x6, x3; \ + ldp x7, x8, [P1+16]; \ + ldp x4, x3, [P2+16]; \ + adcs x7, x7, x4; \ + adcs x8, x8, x3; \ + adc x3, xzr, xzr; \ + cmn x5, #1; \ + mov x4, #4294967295; \ + sbcs xzr, x6, x4; \ + sbcs xzr, x7, xzr; \ + mov x4, #-4294967295; \ + sbcs xzr, x8, x4; \ + adcs x3, x3, xzr; \ + csetm x3, ne; \ + subs x5, x5, x3; \ + and x4, x3, #0xffffffff; \ + sbcs x6, x6, x4; \ + sbcs x7, x7, xzr; \ + and x4, x3, #0xffffffff00000001; \ + sbc x8, x8, x4; \ + stp x5, x6, [P0]; \ + stp x7, x8, [P0+16] + +// A weak version of add that only guarantees sum in 4 digits + +#define weakadd_p256(P0,P1,P2) \ + ldp x5, x6, [P1]; \ + ldp x4, x3, [P2]; \ + adds x5, x5, x4; \ + adcs x6, x6, x3; \ + ldp x7, x8, [P1+16]; \ + ldp x4, x3, [P2+16]; \ + adcs x7, x7, x4; \ + adcs x8, x8, x3; \ + csetm x3, cs; \ + subs x5, x5, x3; \ + and x1, x3, #4294967295; \ + sbcs x6, x6, x1; \ + sbcs x7, x7, xzr; \ + and x2, x3, #-4294967295; \ + sbc x8, x8, x2; \ + stp x5, x6, [P0]; \ + stp x7, x8, [P0+16] + +// P0 = C * P1 - D * P2 computed as D * (p_256 - P2) + C * P1 +// Quotient estimation is done just as q = h + 1 as in bignum_triple_p256 +// This also applies to the other functions following. + +#define cmsub_p256(P0,C,P1,D,P2) \ + mov x1, D; \ + mov x2, #-1; \ + ldp x9, x10, [P2]; \ + subs x9, x2, x9; \ + mov x2, #4294967295; \ + sbcs x10, x2, x10; \ + ldp x11, x12, [P2+16]; \ + sbcs x11, xzr, x11; \ + mov x2, #-4294967295; \ + sbc x12, x2, x12; \ + mul x3, x1, x9; \ + mul x4, x1, x10; \ + mul x5, x1, x11; \ + mul x6, x1, x12; \ + umulh x9, x1, x9; \ + umulh x10, x1, x10; \ + umulh x11, x1, x11; \ + umulh x7, x1, x12; \ + adds x4, x4, x9; \ + adcs x5, x5, x10; \ + adcs x6, x6, x11; \ + adc x7, x7, xzr; \ + mov x1, C; \ + ldp x9, x10, [P1]; \ + mul x8, x9, x1; \ + umulh x9, x9, x1; \ + adds x3, x3, x8; \ + mul x8, x10, x1; \ + umulh x10, x10, x1; \ + adcs x4, x4, x8; \ + ldp x11, x12, [P1+16]; \ + mul x8, x11, x1; \ + umulh x11, x11, x1; \ + adcs x5, x5, x8; \ + mul x8, x12, x1; \ + umulh x12, x12, x1; \ + adcs x6, x6, x8; \ + adc x7, x7, xzr; \ + adds x4, x4, x9; \ + adcs x5, x5, x10; \ + adcs x6, x6, x11; \ + adc x7, x7, x12; \ + add x8, x7, #1; \ + lsl x10, x8, #32; \ + adds x6, x6, x10; \ + adc x7, x7, xzr; \ + neg x9, x8; \ + sub x10, x10, #1; \ + subs x3, x3, x9; \ + sbcs x4, x4, x10; \ + sbcs x5, x5, xzr; \ + sbcs x6, x6, x8; \ + sbc x8, x7, x8; \ + adds x3, x3, x8; \ + and x9, x8, #4294967295; \ + adcs x4, x4, x9; \ + adcs x5, x5, xzr; \ + neg x10, x9; \ + adc x6, x6, x10; \ + stp x3, x4, [P0]; \ + stp x5, x6, [P0+16] + +// P0 = 4 * P1 - P2, by direct subtraction of P2; the method +// in bignum_cmul_p256k1 etc. for quotient estimation still +// works when the value to be reduced is negative, as +// long as it is > -p_256k1, which is the case here. The +// actual accumulation of q * p_256 is done a bit differently +// so it works for the q = 0 case. + +#define cmsub41_p256(P0,P1,P2) \ + ldp x1, x2, [P1]; \ + lsl x0, x1, #2; \ + ldp x6, x7, [P2]; \ + subs x0, x0, x6; \ + extr x1, x2, x1, #62; \ + sbcs x1, x1, x7; \ + ldp x3, x4, [P1+16]; \ + extr x2, x3, x2, #62; \ + ldp x6, x7, [P2+16]; \ + sbcs x2, x2, x6; \ + extr x3, x4, x3, #62; \ + sbcs x3, x3, x7; \ + lsr x4, x4, #62; \ + sbc x4, x4, xzr; \ + add x5, x4, #1; \ + lsl x8, x5, #32; \ + subs x6, xzr, x8; \ + sbcs x7, xzr, xzr; \ + sbc x8, x8, x5; \ + adds x0, x0, x5; \ + adcs x1, x1, x6; \ + adcs x2, x2, x7; \ + adcs x3, x3, x8; \ + csetm x5, cc; \ + adds x0, x0, x5; \ + and x6, x5, #4294967295; \ + adcs x1, x1, x6; \ + adcs x2, x2, xzr; \ + neg x7, x6; \ + adc x3, x3, x7; \ + stp x0, x1, [P0]; \ + stp x2, x3, [P0+16] + +// P0 = 3 * P1 - 8 * P2, computed as (p_256 - P2) << 3 + 3 * P1 + +#define cmsub38_p256(P0,P1,P2) \ + mov x1, 8; \ + mov x2, #-1; \ + ldp x9, x10, [P2]; \ + subs x9, x2, x9; \ + mov x2, #4294967295; \ + sbcs x10, x2, x10; \ + ldp x11, x12, [P2+16]; \ + sbcs x11, xzr, x11; \ + mov x2, #-4294967295; \ + sbc x12, x2, x12; \ + lsl x3, x9, #3; \ + extr x4, x10, x9, #61; \ + extr x5, x11, x10, #61; \ + extr x6, x12, x11, #61; \ + lsr x7, x12, #61; \ + mov x1, 3; \ + ldp x9, x10, [P1]; \ + mul x8, x9, x1; \ + umulh x9, x9, x1; \ + adds x3, x3, x8; \ + mul x8, x10, x1; \ + umulh x10, x10, x1; \ + adcs x4, x4, x8; \ + ldp x11, x12, [P1+16]; \ + mul x8, x11, x1; \ + umulh x11, x11, x1; \ + adcs x5, x5, x8; \ + mul x8, x12, x1; \ + umulh x12, x12, x1; \ + adcs x6, x6, x8; \ + adc x7, x7, xzr; \ + adds x4, x4, x9; \ + adcs x5, x5, x10; \ + adcs x6, x6, x11; \ + adc x7, x7, x12; \ + add x8, x7, #1; \ + lsl x10, x8, #32; \ + adds x6, x6, x10; \ + adc x7, x7, xzr; \ + neg x9, x8; \ + sub x10, x10, #1; \ + subs x3, x3, x9; \ + sbcs x4, x4, x10; \ + sbcs x5, x5, xzr; \ + sbcs x6, x6, x8; \ + sbc x8, x7, x8; \ + adds x3, x3, x8; \ + and x9, x8, #4294967295; \ + adcs x4, x4, x9; \ + adcs x5, x5, xzr; \ + neg x10, x9; \ + adc x6, x6, x10; \ + stp x3, x4, [P0]; \ + stp x5, x6, [P0+16] + +S2N_BN_SYMBOL(p256_montjdouble): + +// Make room on stack for temporary variables + + sub sp, sp, NSPACE + +// Move the input arguments to stable places + + mov input_z, x0 + mov input_x, x1 + +// Main code, just a sequence of basic field operations + +// z2 = z^2 +// y2 = y^2 + + montsqr_p256(z2,z_1) + montsqr_p256(y2,y_1) + +// x2p = x^2 - z^4 = (x + z^2) * (x - z^2) + + weakadd_p256(t1,x_1,z2) + sub_p256(t2,x_1,z2) + montmul_p256(x2p,t1,t2) + +// t1 = y + z +// x4p = x2p^2 +// xy2 = x * y^2 + + add_p256(t1,y_1,z_1) + montsqr_p256(x4p,x2p) + montmul_p256(xy2,x_1,y2) + +// t2 = (y + z)^2 + + montsqr_p256(t2,t1) + +// d = 12 * xy2 - 9 * x4p +// t1 = y^2 + 2 * y * z + + cmsub_p256(d,12,xy2,9,x4p) + sub_p256(t1,t2,z2) + +// y4 = y^4 + + montsqr_p256(y4,y2) + +// z_3' = 2 * y * z +// dx2 = d * x2p + + sub_p256(z_3,t1,y2) + montmul_p256(dx2,d,x2p) + +// x' = 4 * xy2 - d + + cmsub41_p256(x_3,xy2,d) + +// y' = 3 * dx2 - 8 * y4 + + cmsub38_p256(y_3,dx2,y4); + +// Restore stack and return + + add sp, sp, NSPACE + ret + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack, "", %progbits +#endif diff --git a/arm/p256/p256_montjmixadd.S b/arm/p256/p256_montjmixadd.S new file mode 100644 index 0000000000..a606790a4a --- /dev/null +++ b/arm/p256/p256_montjmixadd.S @@ -0,0 +1,475 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +// ---------------------------------------------------------------------------- +// Point mixed addition on NIST curve P-256 in Montgomery-Jacobian coordinates +// +// extern void p256_montjmixadd +// (uint64_t p3[static 12],uint64_t p1[static 12],uint64_t p2[static 8]); +// +// Does p3 := p1 + p2 where all points are regarded as Jacobian triples with +// each coordinate in the Montgomery domain, i.e. x' = (2^256 * x) mod p_256. +// A Jacobian triple (x',y',z') represents affine point (x/z^2,y/z^3). +// The "mixed" part means that p2 only has x and y coordinates, with the +// implicit z coordinate assumed to be the identity. +// +// Standard ARM ABI: X0 = p3, X1 = p1, X2 = p2 +// ---------------------------------------------------------------------------- +#include "_internal_s2n_bignum.h" + + S2N_BN_SYM_VISIBILITY_DIRECTIVE(p256_montjmixadd) + S2N_BN_SYM_PRIVACY_DIRECTIVE(p256_montjmixadd) + + .text + .balign 4 + +// Size of individual field elements + +#define NUMSIZE 32 + +// Stable homes for input arguments during main code sequence + +#define input_z x15 +#define input_x x16 +#define input_y x17 + +// Pointer-offset pairs for inputs and outputs + +#define x_1 input_x, #0 +#define y_1 input_x, #NUMSIZE +#define z_1 input_x, #(2*NUMSIZE) + +#define x_2 input_y, #0 +#define y_2 input_y, #NUMSIZE + +#define x_3 input_z, #0 +#define y_3 input_z, #NUMSIZE +#define z_3 input_z, #(2*NUMSIZE) + +// Pointer-offset pairs for temporaries, with some aliasing +// NSPACE is the total stack needed for these temporaries + +#define zp2 sp, #(NUMSIZE*0) +#define ww sp, #(NUMSIZE*0) + +#define yd sp, #(NUMSIZE*1) +#define y2a sp, #(NUMSIZE*1) + +#define x2a sp, #(NUMSIZE*2) +#define zzx2 sp, #(NUMSIZE*2) + +#define zz sp, #(NUMSIZE*3) +#define t1 sp, #(NUMSIZE*3) + +#define t2 sp, #(NUMSIZE*4) +#define zzx1 sp, #(NUMSIZE*4) + +#define xd sp, #(NUMSIZE*5) + +#define NSPACE (NUMSIZE*6) + +// Corresponds exactly to bignum_montmul_p256_alt + +#define montmul_p256(P0,P1,P2) \ + ldp x3, x4, [P1]; \ + ldp x7, x8, [P2]; \ + mul x12, x3, x7; \ + umulh x13, x3, x7; \ + mul x11, x3, x8; \ + umulh x14, x3, x8; \ + adds x13, x13, x11; \ + ldp x9, x10, [P2+16]; \ + mul x11, x3, x9; \ + umulh x0, x3, x9; \ + adcs x14, x14, x11; \ + mul x11, x3, x10; \ + umulh x1, x3, x10; \ + adcs x0, x0, x11; \ + adc x1, x1, xzr; \ + ldp x5, x6, [P1+16]; \ + mul x11, x4, x7; \ + adds x13, x13, x11; \ + mul x11, x4, x8; \ + adcs x14, x14, x11; \ + mul x11, x4, x9; \ + adcs x0, x0, x11; \ + mul x11, x4, x10; \ + adcs x1, x1, x11; \ + umulh x3, x4, x10; \ + adc x3, x3, xzr; \ + umulh x11, x4, x7; \ + adds x14, x14, x11; \ + umulh x11, x4, x8; \ + adcs x0, x0, x11; \ + umulh x11, x4, x9; \ + adcs x1, x1, x11; \ + adc x3, x3, xzr; \ + mul x11, x5, x7; \ + adds x14, x14, x11; \ + mul x11, x5, x8; \ + adcs x0, x0, x11; \ + mul x11, x5, x9; \ + adcs x1, x1, x11; \ + mul x11, x5, x10; \ + adcs x3, x3, x11; \ + umulh x4, x5, x10; \ + adc x4, x4, xzr; \ + umulh x11, x5, x7; \ + adds x0, x0, x11; \ + umulh x11, x5, x8; \ + adcs x1, x1, x11; \ + umulh x11, x5, x9; \ + adcs x3, x3, x11; \ + adc x4, x4, xzr; \ + mul x11, x6, x7; \ + adds x0, x0, x11; \ + mul x11, x6, x8; \ + adcs x1, x1, x11; \ + mul x11, x6, x9; \ + adcs x3, x3, x11; \ + mul x11, x6, x10; \ + adcs x4, x4, x11; \ + umulh x5, x6, x10; \ + adc x5, x5, xzr; \ + umulh x11, x6, x7; \ + adds x1, x1, x11; \ + umulh x11, x6, x8; \ + adcs x3, x3, x11; \ + umulh x11, x6, x9; \ + adcs x4, x4, x11; \ + adc x5, x5, xzr; \ + lsl x11, x12, #32; \ + subs x2, x12, x11; \ + lsr x6, x12, #32; \ + sbc x12, x12, x6; \ + adds x13, x13, x11; \ + adcs x14, x14, x6; \ + adcs x0, x0, x2; \ + adc x12, x12, xzr; \ + lsl x11, x13, #32; \ + subs x2, x13, x11; \ + lsr x6, x13, #32; \ + sbc x13, x13, x6; \ + adds x14, x14, x11; \ + adcs x0, x0, x6; \ + adcs x12, x12, x2; \ + adc x13, x13, xzr; \ + lsl x11, x14, #32; \ + subs x2, x14, x11; \ + lsr x6, x14, #32; \ + sbc x14, x14, x6; \ + adds x0, x0, x11; \ + adcs x12, x12, x6; \ + adcs x13, x13, x2; \ + adc x14, x14, xzr; \ + lsl x11, x0, #32; \ + subs x2, x0, x11; \ + lsr x6, x0, #32; \ + sbc x0, x0, x6; \ + adds x12, x12, x11; \ + adcs x13, x13, x6; \ + adcs x14, x14, x2; \ + adc x0, x0, xzr; \ + adds x12, x12, x1; \ + adcs x13, x13, x3; \ + adcs x14, x14, x4; \ + adcs x0, x0, x5; \ + cset x2, cs; \ + mov x11, #0xffffffff; \ + mov x6, #0xffffffff00000001; \ + adds x1, x12, #0x1; \ + sbcs x3, x13, x11; \ + sbcs x4, x14, xzr; \ + sbcs x5, x0, x6; \ + sbcs xzr, x2, xzr; \ + csel x12, x12, x1, cc; \ + csel x13, x13, x3, cc; \ + csel x14, x14, x4, cc; \ + csel x0, x0, x5, cc; \ + stp x12, x13, [P0]; \ + stp x14, x0, [P0+16] + +// Corresponds exactly to bignum_montsqr_p256_alt + +#define montsqr_p256(P0,P1) \ + ldp x2, x3, [P1]; \ + mul x9, x2, x3; \ + umulh x10, x2, x3; \ + ldp x4, x5, [P1+16]; \ + mul x11, x2, x5; \ + umulh x12, x2, x5; \ + mul x6, x2, x4; \ + umulh x7, x2, x4; \ + adds x10, x10, x6; \ + adcs x11, x11, x7; \ + mul x6, x3, x4; \ + umulh x7, x3, x4; \ + adc x7, x7, xzr; \ + adds x11, x11, x6; \ + mul x13, x4, x5; \ + umulh x14, x4, x5; \ + adcs x12, x12, x7; \ + mul x6, x3, x5; \ + umulh x7, x3, x5; \ + adc x7, x7, xzr; \ + adds x12, x12, x6; \ + adcs x13, x13, x7; \ + adc x14, x14, xzr; \ + adds x9, x9, x9; \ + adcs x10, x10, x10; \ + adcs x11, x11, x11; \ + adcs x12, x12, x12; \ + adcs x13, x13, x13; \ + adcs x14, x14, x14; \ + cset x7, cs; \ + umulh x6, x2, x2; \ + mul x8, x2, x2; \ + adds x9, x9, x6; \ + mul x6, x3, x3; \ + adcs x10, x10, x6; \ + umulh x6, x3, x3; \ + adcs x11, x11, x6; \ + mul x6, x4, x4; \ + adcs x12, x12, x6; \ + umulh x6, x4, x4; \ + adcs x13, x13, x6; \ + mul x6, x5, x5; \ + adcs x14, x14, x6; \ + umulh x6, x5, x5; \ + adc x7, x7, x6; \ + adds x9, x9, x8, lsl #32; \ + lsr x3, x8, #32; \ + adcs x10, x10, x3; \ + mov x3, #0xffffffff00000001; \ + mul x2, x8, x3; \ + umulh x8, x8, x3; \ + adcs x11, x11, x2; \ + adc x8, x8, xzr; \ + adds x10, x10, x9, lsl #32; \ + lsr x3, x9, #32; \ + adcs x11, x11, x3; \ + mov x3, #0xffffffff00000001; \ + mul x2, x9, x3; \ + umulh x9, x9, x3; \ + adcs x8, x8, x2; \ + adc x9, x9, xzr; \ + adds x11, x11, x10, lsl #32; \ + lsr x3, x10, #32; \ + adcs x8, x8, x3; \ + mov x3, #0xffffffff00000001; \ + mul x2, x10, x3; \ + umulh x10, x10, x3; \ + adcs x9, x9, x2; \ + adc x10, x10, xzr; \ + adds x8, x8, x11, lsl #32; \ + lsr x3, x11, #32; \ + adcs x9, x9, x3; \ + mov x3, #0xffffffff00000001; \ + mul x2, x11, x3; \ + umulh x11, x11, x3; \ + adcs x10, x10, x2; \ + adc x11, x11, xzr; \ + adds x8, x8, x12; \ + adcs x9, x9, x13; \ + adcs x10, x10, x14; \ + adcs x11, x11, x7; \ + cset x2, cs; \ + mov x3, #0xffffffff; \ + mov x5, #0xffffffff00000001; \ + adds x12, x8, #0x1; \ + sbcs x13, x9, x3; \ + sbcs x14, x10, xzr; \ + sbcs x7, x11, x5; \ + sbcs xzr, x2, xzr; \ + csel x8, x8, x12, cc; \ + csel x9, x9, x13, cc; \ + csel x10, x10, x14, cc; \ + csel x11, x11, x7, cc; \ + stp x8, x9, [P0]; \ + stp x10, x11, [P0+16] + +// Almost-Montgomery variant which we use when an input to other muls +// with the other argument fully reduced (which is always safe). + +#define amontsqr_p256(P0,P1) \ + ldp x2, x3, [P1]; \ + mul x9, x2, x3; \ + umulh x10, x2, x3; \ + ldp x4, x5, [P1+16]; \ + mul x11, x2, x5; \ + umulh x12, x2, x5; \ + mul x6, x2, x4; \ + umulh x7, x2, x4; \ + adds x10, x10, x6; \ + adcs x11, x11, x7; \ + mul x6, x3, x4; \ + umulh x7, x3, x4; \ + adc x7, x7, xzr; \ + adds x11, x11, x6; \ + mul x13, x4, x5; \ + umulh x14, x4, x5; \ + adcs x12, x12, x7; \ + mul x6, x3, x5; \ + umulh x7, x3, x5; \ + adc x7, x7, xzr; \ + adds x12, x12, x6; \ + adcs x13, x13, x7; \ + adc x14, x14, xzr; \ + adds x9, x9, x9; \ + adcs x10, x10, x10; \ + adcs x11, x11, x11; \ + adcs x12, x12, x12; \ + adcs x13, x13, x13; \ + adcs x14, x14, x14; \ + cset x7, cs; \ + umulh x6, x2, x2; \ + mul x8, x2, x2; \ + adds x9, x9, x6; \ + mul x6, x3, x3; \ + adcs x10, x10, x6; \ + umulh x6, x3, x3; \ + adcs x11, x11, x6; \ + mul x6, x4, x4; \ + adcs x12, x12, x6; \ + umulh x6, x4, x4; \ + adcs x13, x13, x6; \ + mul x6, x5, x5; \ + adcs x14, x14, x6; \ + umulh x6, x5, x5; \ + adc x7, x7, x6; \ + adds x9, x9, x8, lsl #32; \ + lsr x3, x8, #32; \ + adcs x10, x10, x3; \ + mov x3, #0xffffffff00000001; \ + mul x2, x8, x3; \ + umulh x8, x8, x3; \ + adcs x11, x11, x2; \ + adc x8, x8, xzr; \ + adds x10, x10, x9, lsl #32; \ + lsr x3, x9, #32; \ + adcs x11, x11, x3; \ + mov x3, #0xffffffff00000001; \ + mul x2, x9, x3; \ + umulh x9, x9, x3; \ + adcs x8, x8, x2; \ + adc x9, x9, xzr; \ + adds x11, x11, x10, lsl #32; \ + lsr x3, x10, #32; \ + adcs x8, x8, x3; \ + mov x3, #0xffffffff00000001; \ + mul x2, x10, x3; \ + umulh x10, x10, x3; \ + adcs x9, x9, x2; \ + adc x10, x10, xzr; \ + adds x8, x8, x11, lsl #32; \ + lsr x3, x11, #32; \ + adcs x9, x9, x3; \ + mov x3, #0xffffffff00000001; \ + mul x2, x11, x3; \ + umulh x11, x11, x3; \ + adcs x10, x10, x2; \ + adc x11, x11, xzr; \ + adds x8, x8, x12; \ + adcs x9, x9, x13; \ + adcs x10, x10, x14; \ + adcs x11, x11, x7; \ + mov x2, #0xffffffffffffffff; \ + csel x2, xzr, x2, cc; \ + mov x3, #0xffffffff; \ + csel x3, xzr, x3, cc; \ + mov x5, #0xffffffff00000001; \ + csel x5, xzr, x5, cc; \ + subs x8, x8, x2; \ + sbcs x9, x9, x3; \ + sbcs x10, x10, xzr; \ + sbc x11, x11, x5; \ + stp x8, x9, [P0]; \ + stp x10, x11, [P0+16] + +// Corresponds exactly to bignum_sub_p256 + +#define sub_p256(P0,P1,P2) \ + ldp x5, x6, [P1]; \ + ldp x4, x3, [P2]; \ + subs x5, x5, x4; \ + sbcs x6, x6, x3; \ + ldp x7, x8, [P1+16]; \ + ldp x4, x3, [P2+16]; \ + sbcs x7, x7, x4; \ + sbcs x8, x8, x3; \ + csetm x3, cc; \ + adds x5, x5, x3; \ + mov x4, #0xffffffff; \ + and x4, x4, x3; \ + adcs x6, x6, x4; \ + adcs x7, x7, xzr; \ + mov x4, #0xffffffff00000001; \ + and x4, x4, x3; \ + adc x8, x8, x4; \ + stp x5, x6, [P0]; \ + stp x7, x8, [P0+16] + +S2N_BN_SYMBOL(p256_montjmixadd): + +// Make room on stack for temporary variables +// Move the input arguments to stable places + + sub sp, sp, NSPACE + + mov input_z, x0 + mov input_x, x1 + mov input_y, x2 + +// Main code, just a sequence of basic field operations +// 8 * multiply + 3 * square + 7 * subtract + + amontsqr_p256(zp2,z_1) + montmul_p256(y2a,z_1,y_2) + + montmul_p256(x2a,zp2,x_2) + montmul_p256(y2a,zp2,y2a) + + sub_p256(xd,x2a,x_1) + sub_p256(yd,y2a,y_1) + + amontsqr_p256(zz,xd) + montsqr_p256(ww,yd) + + montmul_p256(zzx1,zz,x_1) + montmul_p256(zzx2,zz,x2a) + + sub_p256(x_3,ww,zzx1) + sub_p256(t1,zzx2,zzx1) + + montmul_p256(z_3,xd,z_1) + + sub_p256(x_3,x_3,zzx2) + + sub_p256(t2,zzx1,x_3) + + montmul_p256(t1,t1,y_1) + montmul_p256(t2,yd,t2) + + sub_p256(y_3,t2,t1) + +// Restore stack and return + + add sp, sp, NSPACE + + ret + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack, "", %progbits +#endif diff --git a/arm/proofs/bignum_montsqr_p256_alt.ml b/arm/proofs/bignum_montsqr_p256_alt.ml index b8c0d1be41..8429a2170d 100644 --- a/arm/proofs/bignum_montsqr_p256_alt.ml +++ b/arm/proofs/bignum_montsqr_p256_alt.ml @@ -103,7 +103,6 @@ let bignum_montsqr_p256_alt_mc = 0xba07016b; (* arm_ADCS X11 X11 X7 *) 0x9a9f37e2; (* arm_CSET X2 Condition_CS *) 0xb2407fe3; (* arm_MOV X3 (rvalue (word 4294967295)) *) - 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) 0xb100050c; (* arm_ADDS X12 X8 (rvalue (word 1)) *) 0xfa03012d; (* arm_SBCS X13 X9 X3 *) 0xfa1f014e; (* arm_SBCS X14 X10 XZR *) @@ -128,13 +127,13 @@ let p_256 = new_definition `p_256 = 11579208921035624876269744694940757353008614 let BIGNUM_MONTSQR_P256_ALT_CORRECT = time prove (`!z x a pc. - nonoverlapping (word pc,0x174) (z,8 * 4) + nonoverlapping (word pc,0x170) (z,8 * 4) ==> ensures arm (\s. aligned_bytes_loaded s (word pc) bignum_montsqr_p256_alt_mc /\ read PC s = word pc /\ C_ARGUMENTS [z; x] s /\ bignum_from_memory (x,4) s = a) - (\s. read PC s = word (pc + 0x170) /\ + (\s. read PC s = word (pc + 0x16c) /\ (a EXP 2 <= 2 EXP 256 * p_256 ==> bignum_from_memory (z,4) s = (inverse_mod p_256 (2 EXP 256) * a EXP 2) MOD p_256)) @@ -149,7 +148,7 @@ let BIGNUM_MONTSQR_P256_ALT_CORRECT = time prove (*** Globalize the a EXP 2 <= 2 EXP 256 * p_256 assumption ***) ASM_CASES_TAC `a EXP 2 <= 2 EXP 256 * p_256` THENL - [ASM_REWRITE_TAC[]; ARM_SIM_TAC BIGNUM_MONTSQR_P256_ALT_EXEC (1--92)] THEN + [ASM_REWRITE_TAC[]; ARM_SIM_TAC BIGNUM_MONTSQR_P256_ALT_EXEC (1--91)] THEN ENSURES_INIT_TAC "s0" THEN BIGNUM_DIGITIZE_TAC "x_" `bignum_from_memory (x,4) s0` THEN @@ -181,7 +180,7 @@ let BIGNUM_MONTSQR_P256_ALT_CORRECT = time prove (*** Final correction stage ***) - ARM_ACCSTEPS_TAC BIGNUM_MONTSQR_P256_ALT_EXEC (82--86) (80--92) THEN + ARM_ACCSTEPS_TAC BIGNUM_MONTSQR_P256_ALT_EXEC (81--85) (80--91) THEN RULE_ASSUM_TAC(REWRITE_RULE [GSYM WORD_BITVAL; COND_SWAP; REAL_BITVAL_NOT]) THEN ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN @@ -205,7 +204,7 @@ let BIGNUM_MONTSQR_P256_ALT_CORRECT = time prove ASM_SIMP_TAC[MOD_CASES] THEN GEN_REWRITE_TAC LAND_CONV [COND_RAND] THEN SIMP_TAC[REAL_OF_NUM_SUB; GSYM NOT_LT]] THEN - SUBGOAL_THEN `carry_s86 <=> t < p_256` SUBST_ALL_TAC THENL + SUBGOAL_THEN `carry_s85 <=> t < p_256` SUBST_ALL_TAC THENL [MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN EXISTS_TAC `320` THEN EXPAND_TAC "t" THEN REWRITE_TAC[p_256; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN @@ -221,7 +220,7 @@ let BIGNUM_MONTSQR_P256_ALT_CORRECT = time prove let BIGNUM_MONTSQR_P256_ALT_SUBROUTINE_CORRECT = time prove (`!z x a pc returnaddress. - nonoverlapping (word pc,0x174) (z,8 * 4) + nonoverlapping (word pc,0x170) (z,8 * 4) ==> ensures arm (\s. aligned_bytes_loaded s (word pc) bignum_montsqr_p256_alt_mc /\ read PC s = word pc /\ @@ -247,13 +246,13 @@ let BIGNUM_MONTSQR_P256_ALT_SUBROUTINE_CORRECT = time prove let BIGNUM_AMONTSQR_P256_ALT_CORRECT = time prove (`!z x a pc. - nonoverlapping (word pc,0x174) (z,8 * 4) + nonoverlapping (word pc,0x170) (z,8 * 4) ==> ensures arm (\s. aligned_bytes_loaded s (word pc) bignum_montsqr_p256_alt_mc /\ read PC s = word pc /\ C_ARGUMENTS [z; x] s /\ bignum_from_memory (x,4) s = a) - (\s. read PC s = word (pc + 0x170) /\ + (\s. read PC s = word (pc + 0x16c) /\ (bignum_from_memory (z,4) s == inverse_mod p_256 (2 EXP 256) * a EXP 2) (mod p_256)) (MAYCHANGE [PC; X2; X3; X4; X5; X6; X7; X8; X9; X10; X11; X12; @@ -296,7 +295,7 @@ let BIGNUM_AMONTSQR_P256_ALT_CORRECT = time prove (*** Final correction stage ***) - ARM_ACCSTEPS_TAC BIGNUM_MONTSQR_P256_ALT_EXEC (82--86) (80--92) THEN + ARM_ACCSTEPS_TAC BIGNUM_MONTSQR_P256_ALT_EXEC (81--85) (80--91) THEN RULE_ASSUM_TAC(REWRITE_RULE [GSYM WORD_BITVAL; COND_SWAP; REAL_BITVAL_NOT]) THEN ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN @@ -308,7 +307,7 @@ let BIGNUM_AMONTSQR_P256_ALT_CORRECT = time prove REWRITE_TAC[INVERSE_MOD_RMUL_EQ; COPRIME_REXP; COPRIME_2] THEN CONJ_TAC THENL [REWRITE_TAC[p_256] THEN CONV_TAC NUM_REDUCE_CONV; ALL_TAC] THEN - SUBGOAL_THEN `carry_s86 <=> t < p_256` SUBST_ALL_TAC THENL + SUBGOAL_THEN `carry_s85 <=> t < p_256` SUBST_ALL_TAC THENL [MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN EXISTS_TAC `320` THEN EXPAND_TAC "t" THEN REWRITE_TAC[p_256; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN @@ -340,7 +339,7 @@ let BIGNUM_AMONTSQR_P256_ALT_CORRECT = time prove let BIGNUM_AMONTSQR_P256_ALT_SUBROUTINE_CORRECT = time prove (`!z x a pc returnaddress. - nonoverlapping (word pc,0x174) (z,8 * 4) + nonoverlapping (word pc,0x170) (z,8 * 4) ==> ensures arm (\s. aligned_bytes_loaded s (word pc) bignum_montsqr_p256_alt_mc /\ read PC s = word pc /\ diff --git a/arm/proofs/p256_montjadd.ml b/arm/proofs/p256_montjadd.ml new file mode 100644 index 0000000000..4e462d769d --- /dev/null +++ b/arm/proofs/p256_montjadd.ml @@ -0,0 +1,2598 @@ +(* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + *) + +(* ========================================================================= *) +(* Point addition in Montgomery-Jacobian coordinates for NIST P-256 curve. *) +(* ========================================================================= *) + +needs "arm/proofs/base.ml";; +needs "common/ecencoding.ml";; +needs "EC/jacobian.ml";; +needs "EC/nistp256.ml";; + +prioritize_int();; +prioritize_real();; +prioritize_num();; + +(**** print_literal_from_elf "arm/p256/p256_montjadd.o";; + ****) + +let p256_montjadd_mc = define_assert_from_elf + "p256_montjadd_mc" "arm/p256/p256_montjadd.o" +[ + 0xd10383ff; (* arm_SUB SP SP (rvalue (word 224)) *) + 0xaa0003ef; (* arm_MOV X15 X0 *) + 0xaa0103f0; (* arm_MOV X16 X1 *) + 0xaa0203f1; (* arm_MOV X17 X2 *) + 0xa9440e02; (* arm_LDP X2 X3 X16 (Immediate_Offset (iword (&64))) *) + 0x9b037c49; (* arm_MUL X9 X2 X3 *) + 0x9bc37c4a; (* arm_UMULH X10 X2 X3 *) + 0xa9451604; (* arm_LDP X4 X5 X16 (Immediate_Offset (iword (&80))) *) + 0x9b057c4b; (* arm_MUL X11 X2 X5 *) + 0x9bc57c4c; (* arm_UMULH X12 X2 X5 *) + 0x9b047c46; (* arm_MUL X6 X2 X4 *) + 0x9bc47c47; (* arm_UMULH X7 X2 X4 *) + 0xab06014a; (* arm_ADDS X10 X10 X6 *) + 0xba07016b; (* arm_ADCS X11 X11 X7 *) + 0x9b047c66; (* arm_MUL X6 X3 X4 *) + 0x9bc47c67; (* arm_UMULH X7 X3 X4 *) + 0x9a1f00e7; (* arm_ADC X7 X7 XZR *) + 0xab06016b; (* arm_ADDS X11 X11 X6 *) + 0x9b057c8d; (* arm_MUL X13 X4 X5 *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xba07018c; (* arm_ADCS X12 X12 X7 *) + 0x9b057c66; (* arm_MUL X6 X3 X5 *) + 0x9bc57c67; (* arm_UMULH X7 X3 X5 *) + 0x9a1f00e7; (* arm_ADC X7 X7 XZR *) + 0xab06018c; (* arm_ADDS X12 X12 X6 *) + 0xba0701ad; (* arm_ADCS X13 X13 X7 *) + 0x9a1f01ce; (* arm_ADC X14 X14 XZR *) + 0xab090129; (* arm_ADDS X9 X9 X9 *) + 0xba0a014a; (* arm_ADCS X10 X10 X10 *) + 0xba0b016b; (* arm_ADCS X11 X11 X11 *) + 0xba0c018c; (* arm_ADCS X12 X12 X12 *) + 0xba0d01ad; (* arm_ADCS X13 X13 X13 *) + 0xba0e01ce; (* arm_ADCS X14 X14 X14 *) + 0x9a9f37e7; (* arm_CSET X7 Condition_CS *) + 0x9bc27c46; (* arm_UMULH X6 X2 X2 *) + 0x9b027c48; (* arm_MUL X8 X2 X2 *) + 0xab060129; (* arm_ADDS X9 X9 X6 *) + 0x9b037c66; (* arm_MUL X6 X3 X3 *) + 0xba06014a; (* arm_ADCS X10 X10 X6 *) + 0x9bc37c66; (* arm_UMULH X6 X3 X3 *) + 0xba06016b; (* arm_ADCS X11 X11 X6 *) + 0x9b047c86; (* arm_MUL X6 X4 X4 *) + 0xba06018c; (* arm_ADCS X12 X12 X6 *) + 0x9bc47c86; (* arm_UMULH X6 X4 X4 *) + 0xba0601ad; (* arm_ADCS X13 X13 X6 *) + 0x9b057ca6; (* arm_MUL X6 X5 X5 *) + 0xba0601ce; (* arm_ADCS X14 X14 X6 *) + 0x9bc57ca6; (* arm_UMULH X6 X5 X5 *) + 0x9a0600e7; (* arm_ADC X7 X7 X6 *) + 0xab088129; (* arm_ADDS X9 X9 (Shiftedreg X8 LSL 32) *) + 0xd360fd03; (* arm_LSR X3 X8 32 *) + 0xba03014a; (* arm_ADCS X10 X10 X3 *) + 0xb26083e3; (* arm_MOV X3 (rvalue (word 18446744069414584321)) *) + 0x9b037d02; (* arm_MUL X2 X8 X3 *) + 0x9bc37d08; (* arm_UMULH X8 X8 X3 *) + 0xba02016b; (* arm_ADCS X11 X11 X2 *) + 0x9a1f0108; (* arm_ADC X8 X8 XZR *) + 0xab09814a; (* arm_ADDS X10 X10 (Shiftedreg X9 LSL 32) *) + 0xd360fd23; (* arm_LSR X3 X9 32 *) + 0xba03016b; (* arm_ADCS X11 X11 X3 *) + 0xb26083e3; (* arm_MOV X3 (rvalue (word 18446744069414584321)) *) + 0x9b037d22; (* arm_MUL X2 X9 X3 *) + 0x9bc37d29; (* arm_UMULH X9 X9 X3 *) + 0xba020108; (* arm_ADCS X8 X8 X2 *) + 0x9a1f0129; (* arm_ADC X9 X9 XZR *) + 0xab0a816b; (* arm_ADDS X11 X11 (Shiftedreg X10 LSL 32) *) + 0xd360fd43; (* arm_LSR X3 X10 32 *) + 0xba030108; (* arm_ADCS X8 X8 X3 *) + 0xb26083e3; (* arm_MOV X3 (rvalue (word 18446744069414584321)) *) + 0x9b037d42; (* arm_MUL X2 X10 X3 *) + 0x9bc37d4a; (* arm_UMULH X10 X10 X3 *) + 0xba020129; (* arm_ADCS X9 X9 X2 *) + 0x9a1f014a; (* arm_ADC X10 X10 XZR *) + 0xab0b8108; (* arm_ADDS X8 X8 (Shiftedreg X11 LSL 32) *) + 0xd360fd63; (* arm_LSR X3 X11 32 *) + 0xba030129; (* arm_ADCS X9 X9 X3 *) + 0xb26083e3; (* arm_MOV X3 (rvalue (word 18446744069414584321)) *) + 0x9b037d62; (* arm_MUL X2 X11 X3 *) + 0x9bc37d6b; (* arm_UMULH X11 X11 X3 *) + 0xba02014a; (* arm_ADCS X10 X10 X2 *) + 0x9a1f016b; (* arm_ADC X11 X11 XZR *) + 0xab0c0108; (* arm_ADDS X8 X8 X12 *) + 0xba0d0129; (* arm_ADCS X9 X9 X13 *) + 0xba0e014a; (* arm_ADCS X10 X10 X14 *) + 0xba07016b; (* arm_ADCS X11 X11 X7 *) + 0x92800002; (* arm_MOVN X2 (word 0) 0 *) + 0x9a8233e2; (* arm_CSEL X2 XZR X2 Condition_CC *) + 0xb2407fe3; (* arm_MOV X3 (rvalue (word 4294967295)) *) + 0x9a8333e3; (* arm_CSEL X3 XZR X3 Condition_CC *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9a8533e5; (* arm_CSEL X5 XZR X5 Condition_CC *) + 0xeb020108; (* arm_SUBS X8 X8 X2 *) + 0xfa030129; (* arm_SBCS X9 X9 X3 *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xda05016b; (* arm_SBC X11 X11 X5 *) + 0xa90027e8; (* arm_STP X8 X9 SP (Immediate_Offset (iword (&0))) *) + 0xa9012fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&16))) *) + 0xa9440e22; (* arm_LDP X2 X3 X17 (Immediate_Offset (iword (&64))) *) + 0x9b037c49; (* arm_MUL X9 X2 X3 *) + 0x9bc37c4a; (* arm_UMULH X10 X2 X3 *) + 0xa9451624; (* arm_LDP X4 X5 X17 (Immediate_Offset (iword (&80))) *) + 0x9b057c4b; (* arm_MUL X11 X2 X5 *) + 0x9bc57c4c; (* arm_UMULH X12 X2 X5 *) + 0x9b047c46; (* arm_MUL X6 X2 X4 *) + 0x9bc47c47; (* arm_UMULH X7 X2 X4 *) + 0xab06014a; (* arm_ADDS X10 X10 X6 *) + 0xba07016b; (* arm_ADCS X11 X11 X7 *) + 0x9b047c66; (* arm_MUL X6 X3 X4 *) + 0x9bc47c67; (* arm_UMULH X7 X3 X4 *) + 0x9a1f00e7; (* arm_ADC X7 X7 XZR *) + 0xab06016b; (* arm_ADDS X11 X11 X6 *) + 0x9b057c8d; (* arm_MUL X13 X4 X5 *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xba07018c; (* arm_ADCS X12 X12 X7 *) + 0x9b057c66; (* arm_MUL X6 X3 X5 *) + 0x9bc57c67; (* arm_UMULH X7 X3 X5 *) + 0x9a1f00e7; (* arm_ADC X7 X7 XZR *) + 0xab06018c; (* arm_ADDS X12 X12 X6 *) + 0xba0701ad; (* arm_ADCS X13 X13 X7 *) + 0x9a1f01ce; (* arm_ADC X14 X14 XZR *) + 0xab090129; (* arm_ADDS X9 X9 X9 *) + 0xba0a014a; (* arm_ADCS X10 X10 X10 *) + 0xba0b016b; (* arm_ADCS X11 X11 X11 *) + 0xba0c018c; (* arm_ADCS X12 X12 X12 *) + 0xba0d01ad; (* arm_ADCS X13 X13 X13 *) + 0xba0e01ce; (* arm_ADCS X14 X14 X14 *) + 0x9a9f37e7; (* arm_CSET X7 Condition_CS *) + 0x9bc27c46; (* arm_UMULH X6 X2 X2 *) + 0x9b027c48; (* arm_MUL X8 X2 X2 *) + 0xab060129; (* arm_ADDS X9 X9 X6 *) + 0x9b037c66; (* arm_MUL X6 X3 X3 *) + 0xba06014a; (* arm_ADCS X10 X10 X6 *) + 0x9bc37c66; (* arm_UMULH X6 X3 X3 *) + 0xba06016b; (* arm_ADCS X11 X11 X6 *) + 0x9b047c86; (* arm_MUL X6 X4 X4 *) + 0xba06018c; (* arm_ADCS X12 X12 X6 *) + 0x9bc47c86; (* arm_UMULH X6 X4 X4 *) + 0xba0601ad; (* arm_ADCS X13 X13 X6 *) + 0x9b057ca6; (* arm_MUL X6 X5 X5 *) + 0xba0601ce; (* arm_ADCS X14 X14 X6 *) + 0x9bc57ca6; (* arm_UMULH X6 X5 X5 *) + 0x9a0600e7; (* arm_ADC X7 X7 X6 *) + 0xab088129; (* arm_ADDS X9 X9 (Shiftedreg X8 LSL 32) *) + 0xd360fd03; (* arm_LSR X3 X8 32 *) + 0xba03014a; (* arm_ADCS X10 X10 X3 *) + 0xb26083e3; (* arm_MOV X3 (rvalue (word 18446744069414584321)) *) + 0x9b037d02; (* arm_MUL X2 X8 X3 *) + 0x9bc37d08; (* arm_UMULH X8 X8 X3 *) + 0xba02016b; (* arm_ADCS X11 X11 X2 *) + 0x9a1f0108; (* arm_ADC X8 X8 XZR *) + 0xab09814a; (* arm_ADDS X10 X10 (Shiftedreg X9 LSL 32) *) + 0xd360fd23; (* arm_LSR X3 X9 32 *) + 0xba03016b; (* arm_ADCS X11 X11 X3 *) + 0xb26083e3; (* arm_MOV X3 (rvalue (word 18446744069414584321)) *) + 0x9b037d22; (* arm_MUL X2 X9 X3 *) + 0x9bc37d29; (* arm_UMULH X9 X9 X3 *) + 0xba020108; (* arm_ADCS X8 X8 X2 *) + 0x9a1f0129; (* arm_ADC X9 X9 XZR *) + 0xab0a816b; (* arm_ADDS X11 X11 (Shiftedreg X10 LSL 32) *) + 0xd360fd43; (* arm_LSR X3 X10 32 *) + 0xba030108; (* arm_ADCS X8 X8 X3 *) + 0xb26083e3; (* arm_MOV X3 (rvalue (word 18446744069414584321)) *) + 0x9b037d42; (* arm_MUL X2 X10 X3 *) + 0x9bc37d4a; (* arm_UMULH X10 X10 X3 *) + 0xba020129; (* arm_ADCS X9 X9 X2 *) + 0x9a1f014a; (* arm_ADC X10 X10 XZR *) + 0xab0b8108; (* arm_ADDS X8 X8 (Shiftedreg X11 LSL 32) *) + 0xd360fd63; (* arm_LSR X3 X11 32 *) + 0xba030129; (* arm_ADCS X9 X9 X3 *) + 0xb26083e3; (* arm_MOV X3 (rvalue (word 18446744069414584321)) *) + 0x9b037d62; (* arm_MUL X2 X11 X3 *) + 0x9bc37d6b; (* arm_UMULH X11 X11 X3 *) + 0xba02014a; (* arm_ADCS X10 X10 X2 *) + 0x9a1f016b; (* arm_ADC X11 X11 XZR *) + 0xab0c0108; (* arm_ADDS X8 X8 X12 *) + 0xba0d0129; (* arm_ADCS X9 X9 X13 *) + 0xba0e014a; (* arm_ADCS X10 X10 X14 *) + 0xba07016b; (* arm_ADCS X11 X11 X7 *) + 0x92800002; (* arm_MOVN X2 (word 0) 0 *) + 0x9a8233e2; (* arm_CSEL X2 XZR X2 Condition_CC *) + 0xb2407fe3; (* arm_MOV X3 (rvalue (word 4294967295)) *) + 0x9a8333e3; (* arm_CSEL X3 XZR X3 Condition_CC *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9a8533e5; (* arm_CSEL X5 XZR X5 Condition_CC *) + 0xeb020108; (* arm_SUBS X8 X8 X2 *) + 0xfa030129; (* arm_SBCS X9 X9 X3 *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xda05016b; (* arm_SBC X11 X11 X5 *) + 0xa90a27e8; (* arm_STP X8 X9 SP (Immediate_Offset (iword (&160))) *) + 0xa90b2fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&176))) *) + 0xa9441223; (* arm_LDP X3 X4 X17 (Immediate_Offset (iword (&64))) *) + 0xa9422207; (* arm_LDP X7 X8 X16 (Immediate_Offset (iword (&32))) *) + 0x9b077c6c; (* arm_MUL X12 X3 X7 *) + 0x9bc77c6d; (* arm_UMULH X13 X3 X7 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa9432a09; (* arm_LDP X9 X10 X16 (Immediate_Offset (iword (&48))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c60; (* arm_UMULH X0 X3 X9 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c61; (* arm_UMULH X1 X3 X10 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0xa9451a25; (* arm_LDP X5 X6 X17 (Immediate_Offset (iword (&80))) *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bca7c83; (* arm_UMULH X3 X4 X10 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9b077cab; (* arm_MUL X11 X5 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b087cab; (* arm_MUL X11 X5 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b097cab; (* arm_MUL X11 X5 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b0a7cab; (* arm_MUL X11 X5 X10 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bca7ca4; (* arm_UMULH X4 X5 X10 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9bc77cab; (* arm_UMULH X11 X5 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9bc87cab; (* arm_UMULH X11 X5 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bc97cab; (* arm_UMULH X11 X5 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b077ccb; (* arm_MUL X11 X6 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9b087ccb; (* arm_MUL X11 X6 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b097ccb; (* arm_MUL X11 X6 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9b0a7ccb; (* arm_MUL X11 X6 X10 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9bca7cc5; (* arm_UMULH X5 X6 X10 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0x9bc77ccb; (* arm_UMULH X11 X6 X7 *) + 0xab0b0021; (* arm_ADDS X1 X1 X11 *) + 0x9bc87ccb; (* arm_UMULH X11 X6 X8 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bc97ccb; (* arm_UMULH X11 X6 X9 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0xd3607d8b; (* arm_LSL X11 X12 32 *) + 0xeb0b0182; (* arm_SUBS X2 X12 X11 *) + 0xd360fd86; (* arm_LSR X6 X12 32 *) + 0xda06018c; (* arm_SBC X12 X12 X6 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xba0601ce; (* arm_ADCS X14 X14 X6 *) + 0xba020000; (* arm_ADCS X0 X0 X2 *) + 0x9a1f018c; (* arm_ADC X12 X12 XZR *) + 0xd3607dab; (* arm_LSL X11 X13 32 *) + 0xeb0b01a2; (* arm_SUBS X2 X13 X11 *) + 0xd360fda6; (* arm_LSR X6 X13 32 *) + 0xda0601ad; (* arm_SBC X13 X13 X6 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0xba060000; (* arm_ADCS X0 X0 X6 *) + 0xba02018c; (* arm_ADCS X12 X12 X2 *) + 0x9a1f01ad; (* arm_ADC X13 X13 XZR *) + 0xd3607dcb; (* arm_LSL X11 X14 32 *) + 0xeb0b01c2; (* arm_SUBS X2 X14 X11 *) + 0xd360fdc6; (* arm_LSR X6 X14 32 *) + 0xda0601ce; (* arm_SBC X14 X14 X6 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0xba06018c; (* arm_ADCS X12 X12 X6 *) + 0xba0201ad; (* arm_ADCS X13 X13 X2 *) + 0x9a1f01ce; (* arm_ADC X14 X14 XZR *) + 0xd3607c0b; (* arm_LSL X11 X0 32 *) + 0xeb0b0002; (* arm_SUBS X2 X0 X11 *) + 0xd360fc06; (* arm_LSR X6 X0 32 *) + 0xda060000; (* arm_SBC X0 X0 X6 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0xba0601ad; (* arm_ADCS X13 X13 X6 *) + 0xba0201ce; (* arm_ADCS X14 X14 X2 *) + 0x9a1f0000; (* arm_ADC X0 X0 XZR *) + 0xab01018c; (* arm_ADDS X12 X12 X1 *) + 0xba0301ad; (* arm_ADCS X13 X13 X3 *) + 0xba0401ce; (* arm_ADCS X14 X14 X4 *) + 0xba050000; (* arm_ADCS X0 X0 X5 *) + 0x9a9f37e2; (* arm_CSET X2 Condition_CS *) + 0xb2407feb; (* arm_MOV X11 (rvalue (word 4294967295)) *) + 0xb26083e6; (* arm_MOV X6 (rvalue (word 18446744069414584321)) *) + 0xb1000581; (* arm_ADDS X1 X12 (rvalue (word 1)) *) + 0xfa0b01a3; (* arm_SBCS X3 X13 X11 *) + 0xfa1f01c4; (* arm_SBCS X4 X14 XZR *) + 0xfa060005; (* arm_SBCS X5 X0 X6 *) + 0xfa1f005f; (* arm_SBCS XZR X2 XZR *) + 0x9a81318c; (* arm_CSEL X12 X12 X1 Condition_CC *) + 0x9a8331ad; (* arm_CSEL X13 X13 X3 Condition_CC *) + 0x9a8431ce; (* arm_CSEL X14 X14 X4 Condition_CC *) + 0x9a853000; (* arm_CSEL X0 X0 X5 Condition_CC *) + 0xa90c37ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&192))) *) + 0xa90d03ee; (* arm_STP X14 X0 SP (Immediate_Offset (iword (&208))) *) + 0xa9441203; (* arm_LDP X3 X4 X16 (Immediate_Offset (iword (&64))) *) + 0xa9422227; (* arm_LDP X7 X8 X17 (Immediate_Offset (iword (&32))) *) + 0x9b077c6c; (* arm_MUL X12 X3 X7 *) + 0x9bc77c6d; (* arm_UMULH X13 X3 X7 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa9432a29; (* arm_LDP X9 X10 X17 (Immediate_Offset (iword (&48))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c60; (* arm_UMULH X0 X3 X9 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c61; (* arm_UMULH X1 X3 X10 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0xa9451a05; (* arm_LDP X5 X6 X16 (Immediate_Offset (iword (&80))) *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bca7c83; (* arm_UMULH X3 X4 X10 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9b077cab; (* arm_MUL X11 X5 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b087cab; (* arm_MUL X11 X5 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b097cab; (* arm_MUL X11 X5 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b0a7cab; (* arm_MUL X11 X5 X10 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bca7ca4; (* arm_UMULH X4 X5 X10 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9bc77cab; (* arm_UMULH X11 X5 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9bc87cab; (* arm_UMULH X11 X5 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bc97cab; (* arm_UMULH X11 X5 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b077ccb; (* arm_MUL X11 X6 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9b087ccb; (* arm_MUL X11 X6 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b097ccb; (* arm_MUL X11 X6 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9b0a7ccb; (* arm_MUL X11 X6 X10 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9bca7cc5; (* arm_UMULH X5 X6 X10 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0x9bc77ccb; (* arm_UMULH X11 X6 X7 *) + 0xab0b0021; (* arm_ADDS X1 X1 X11 *) + 0x9bc87ccb; (* arm_UMULH X11 X6 X8 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bc97ccb; (* arm_UMULH X11 X6 X9 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0xd3607d8b; (* arm_LSL X11 X12 32 *) + 0xeb0b0182; (* arm_SUBS X2 X12 X11 *) + 0xd360fd86; (* arm_LSR X6 X12 32 *) + 0xda06018c; (* arm_SBC X12 X12 X6 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xba0601ce; (* arm_ADCS X14 X14 X6 *) + 0xba020000; (* arm_ADCS X0 X0 X2 *) + 0x9a1f018c; (* arm_ADC X12 X12 XZR *) + 0xd3607dab; (* arm_LSL X11 X13 32 *) + 0xeb0b01a2; (* arm_SUBS X2 X13 X11 *) + 0xd360fda6; (* arm_LSR X6 X13 32 *) + 0xda0601ad; (* arm_SBC X13 X13 X6 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0xba060000; (* arm_ADCS X0 X0 X6 *) + 0xba02018c; (* arm_ADCS X12 X12 X2 *) + 0x9a1f01ad; (* arm_ADC X13 X13 XZR *) + 0xd3607dcb; (* arm_LSL X11 X14 32 *) + 0xeb0b01c2; (* arm_SUBS X2 X14 X11 *) + 0xd360fdc6; (* arm_LSR X6 X14 32 *) + 0xda0601ce; (* arm_SBC X14 X14 X6 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0xba06018c; (* arm_ADCS X12 X12 X6 *) + 0xba0201ad; (* arm_ADCS X13 X13 X2 *) + 0x9a1f01ce; (* arm_ADC X14 X14 XZR *) + 0xd3607c0b; (* arm_LSL X11 X0 32 *) + 0xeb0b0002; (* arm_SUBS X2 X0 X11 *) + 0xd360fc06; (* arm_LSR X6 X0 32 *) + 0xda060000; (* arm_SBC X0 X0 X6 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0xba0601ad; (* arm_ADCS X13 X13 X6 *) + 0xba0201ce; (* arm_ADCS X14 X14 X2 *) + 0x9a1f0000; (* arm_ADC X0 X0 XZR *) + 0xab01018c; (* arm_ADDS X12 X12 X1 *) + 0xba0301ad; (* arm_ADCS X13 X13 X3 *) + 0xba0401ce; (* arm_ADCS X14 X14 X4 *) + 0xba050000; (* arm_ADCS X0 X0 X5 *) + 0x9a9f37e2; (* arm_CSET X2 Condition_CS *) + 0xb2407feb; (* arm_MOV X11 (rvalue (word 4294967295)) *) + 0xb26083e6; (* arm_MOV X6 (rvalue (word 18446744069414584321)) *) + 0xb1000581; (* arm_ADDS X1 X12 (rvalue (word 1)) *) + 0xfa0b01a3; (* arm_SBCS X3 X13 X11 *) + 0xfa1f01c4; (* arm_SBCS X4 X14 XZR *) + 0xfa060005; (* arm_SBCS X5 X0 X6 *) + 0xfa1f005f; (* arm_SBCS XZR X2 XZR *) + 0x9a81318c; (* arm_CSEL X12 X12 X1 Condition_CC *) + 0x9a8331ad; (* arm_CSEL X13 X13 X3 Condition_CC *) + 0x9a8431ce; (* arm_CSEL X14 X14 X4 Condition_CC *) + 0x9a853000; (* arm_CSEL X0 X0 X5 Condition_CC *) + 0xa90237ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&32))) *) + 0xa90303ee; (* arm_STP X14 X0 SP (Immediate_Offset (iword (&48))) *) + 0xa94013e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&0))) *) + 0xa9402227; (* arm_LDP X7 X8 X17 (Immediate_Offset (iword (&0))) *) + 0x9b077c6c; (* arm_MUL X12 X3 X7 *) + 0x9bc77c6d; (* arm_UMULH X13 X3 X7 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa9412a29; (* arm_LDP X9 X10 X17 (Immediate_Offset (iword (&16))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c60; (* arm_UMULH X0 X3 X9 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c61; (* arm_UMULH X1 X3 X10 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0xa9411be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&16))) *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bca7c83; (* arm_UMULH X3 X4 X10 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9b077cab; (* arm_MUL X11 X5 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b087cab; (* arm_MUL X11 X5 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b097cab; (* arm_MUL X11 X5 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b0a7cab; (* arm_MUL X11 X5 X10 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bca7ca4; (* arm_UMULH X4 X5 X10 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9bc77cab; (* arm_UMULH X11 X5 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9bc87cab; (* arm_UMULH X11 X5 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bc97cab; (* arm_UMULH X11 X5 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b077ccb; (* arm_MUL X11 X6 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9b087ccb; (* arm_MUL X11 X6 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b097ccb; (* arm_MUL X11 X6 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9b0a7ccb; (* arm_MUL X11 X6 X10 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9bca7cc5; (* arm_UMULH X5 X6 X10 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0x9bc77ccb; (* arm_UMULH X11 X6 X7 *) + 0xab0b0021; (* arm_ADDS X1 X1 X11 *) + 0x9bc87ccb; (* arm_UMULH X11 X6 X8 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bc97ccb; (* arm_UMULH X11 X6 X9 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0xd3607d8b; (* arm_LSL X11 X12 32 *) + 0xeb0b0182; (* arm_SUBS X2 X12 X11 *) + 0xd360fd86; (* arm_LSR X6 X12 32 *) + 0xda06018c; (* arm_SBC X12 X12 X6 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xba0601ce; (* arm_ADCS X14 X14 X6 *) + 0xba020000; (* arm_ADCS X0 X0 X2 *) + 0x9a1f018c; (* arm_ADC X12 X12 XZR *) + 0xd3607dab; (* arm_LSL X11 X13 32 *) + 0xeb0b01a2; (* arm_SUBS X2 X13 X11 *) + 0xd360fda6; (* arm_LSR X6 X13 32 *) + 0xda0601ad; (* arm_SBC X13 X13 X6 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0xba060000; (* arm_ADCS X0 X0 X6 *) + 0xba02018c; (* arm_ADCS X12 X12 X2 *) + 0x9a1f01ad; (* arm_ADC X13 X13 XZR *) + 0xd3607dcb; (* arm_LSL X11 X14 32 *) + 0xeb0b01c2; (* arm_SUBS X2 X14 X11 *) + 0xd360fdc6; (* arm_LSR X6 X14 32 *) + 0xda0601ce; (* arm_SBC X14 X14 X6 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0xba06018c; (* arm_ADCS X12 X12 X6 *) + 0xba0201ad; (* arm_ADCS X13 X13 X2 *) + 0x9a1f01ce; (* arm_ADC X14 X14 XZR *) + 0xd3607c0b; (* arm_LSL X11 X0 32 *) + 0xeb0b0002; (* arm_SUBS X2 X0 X11 *) + 0xd360fc06; (* arm_LSR X6 X0 32 *) + 0xda060000; (* arm_SBC X0 X0 X6 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0xba0601ad; (* arm_ADCS X13 X13 X6 *) + 0xba0201ce; (* arm_ADCS X14 X14 X2 *) + 0x9a1f0000; (* arm_ADC X0 X0 XZR *) + 0xab01018c; (* arm_ADDS X12 X12 X1 *) + 0xba0301ad; (* arm_ADCS X13 X13 X3 *) + 0xba0401ce; (* arm_ADCS X14 X14 X4 *) + 0xba050000; (* arm_ADCS X0 X0 X5 *) + 0x9a9f37e2; (* arm_CSET X2 Condition_CS *) + 0xb2407feb; (* arm_MOV X11 (rvalue (word 4294967295)) *) + 0xb26083e6; (* arm_MOV X6 (rvalue (word 18446744069414584321)) *) + 0xb1000581; (* arm_ADDS X1 X12 (rvalue (word 1)) *) + 0xfa0b01a3; (* arm_SBCS X3 X13 X11 *) + 0xfa1f01c4; (* arm_SBCS X4 X14 XZR *) + 0xfa060005; (* arm_SBCS X5 X0 X6 *) + 0xfa1f005f; (* arm_SBCS XZR X2 XZR *) + 0x9a81318c; (* arm_CSEL X12 X12 X1 Condition_CC *) + 0x9a8331ad; (* arm_CSEL X13 X13 X3 Condition_CC *) + 0x9a8431ce; (* arm_CSEL X14 X14 X4 Condition_CC *) + 0x9a853000; (* arm_CSEL X0 X0 X5 Condition_CC *) + 0xa90437ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&64))) *) + 0xa90503ee; (* arm_STP X14 X0 SP (Immediate_Offset (iword (&80))) *) + 0xa94a13e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&160))) *) + 0xa9402207; (* arm_LDP X7 X8 X16 (Immediate_Offset (iword (&0))) *) + 0x9b077c6c; (* arm_MUL X12 X3 X7 *) + 0x9bc77c6d; (* arm_UMULH X13 X3 X7 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa9412a09; (* arm_LDP X9 X10 X16 (Immediate_Offset (iword (&16))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c60; (* arm_UMULH X0 X3 X9 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c61; (* arm_UMULH X1 X3 X10 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0xa94b1be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&176))) *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bca7c83; (* arm_UMULH X3 X4 X10 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9b077cab; (* arm_MUL X11 X5 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b087cab; (* arm_MUL X11 X5 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b097cab; (* arm_MUL X11 X5 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b0a7cab; (* arm_MUL X11 X5 X10 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bca7ca4; (* arm_UMULH X4 X5 X10 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9bc77cab; (* arm_UMULH X11 X5 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9bc87cab; (* arm_UMULH X11 X5 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bc97cab; (* arm_UMULH X11 X5 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b077ccb; (* arm_MUL X11 X6 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9b087ccb; (* arm_MUL X11 X6 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b097ccb; (* arm_MUL X11 X6 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9b0a7ccb; (* arm_MUL X11 X6 X10 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9bca7cc5; (* arm_UMULH X5 X6 X10 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0x9bc77ccb; (* arm_UMULH X11 X6 X7 *) + 0xab0b0021; (* arm_ADDS X1 X1 X11 *) + 0x9bc87ccb; (* arm_UMULH X11 X6 X8 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bc97ccb; (* arm_UMULH X11 X6 X9 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0xd3607d8b; (* arm_LSL X11 X12 32 *) + 0xeb0b0182; (* arm_SUBS X2 X12 X11 *) + 0xd360fd86; (* arm_LSR X6 X12 32 *) + 0xda06018c; (* arm_SBC X12 X12 X6 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xba0601ce; (* arm_ADCS X14 X14 X6 *) + 0xba020000; (* arm_ADCS X0 X0 X2 *) + 0x9a1f018c; (* arm_ADC X12 X12 XZR *) + 0xd3607dab; (* arm_LSL X11 X13 32 *) + 0xeb0b01a2; (* arm_SUBS X2 X13 X11 *) + 0xd360fda6; (* arm_LSR X6 X13 32 *) + 0xda0601ad; (* arm_SBC X13 X13 X6 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0xba060000; (* arm_ADCS X0 X0 X6 *) + 0xba02018c; (* arm_ADCS X12 X12 X2 *) + 0x9a1f01ad; (* arm_ADC X13 X13 XZR *) + 0xd3607dcb; (* arm_LSL X11 X14 32 *) + 0xeb0b01c2; (* arm_SUBS X2 X14 X11 *) + 0xd360fdc6; (* arm_LSR X6 X14 32 *) + 0xda0601ce; (* arm_SBC X14 X14 X6 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0xba06018c; (* arm_ADCS X12 X12 X6 *) + 0xba0201ad; (* arm_ADCS X13 X13 X2 *) + 0x9a1f01ce; (* arm_ADC X14 X14 XZR *) + 0xd3607c0b; (* arm_LSL X11 X0 32 *) + 0xeb0b0002; (* arm_SUBS X2 X0 X11 *) + 0xd360fc06; (* arm_LSR X6 X0 32 *) + 0xda060000; (* arm_SBC X0 X0 X6 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0xba0601ad; (* arm_ADCS X13 X13 X6 *) + 0xba0201ce; (* arm_ADCS X14 X14 X2 *) + 0x9a1f0000; (* arm_ADC X0 X0 XZR *) + 0xab01018c; (* arm_ADDS X12 X12 X1 *) + 0xba0301ad; (* arm_ADCS X13 X13 X3 *) + 0xba0401ce; (* arm_ADCS X14 X14 X4 *) + 0xba050000; (* arm_ADCS X0 X0 X5 *) + 0x9a9f37e2; (* arm_CSET X2 Condition_CS *) + 0xb2407feb; (* arm_MOV X11 (rvalue (word 4294967295)) *) + 0xb26083e6; (* arm_MOV X6 (rvalue (word 18446744069414584321)) *) + 0xb1000581; (* arm_ADDS X1 X12 (rvalue (word 1)) *) + 0xfa0b01a3; (* arm_SBCS X3 X13 X11 *) + 0xfa1f01c4; (* arm_SBCS X4 X14 XZR *) + 0xfa060005; (* arm_SBCS X5 X0 X6 *) + 0xfa1f005f; (* arm_SBCS XZR X2 XZR *) + 0x9a81318c; (* arm_CSEL X12 X12 X1 Condition_CC *) + 0x9a8331ad; (* arm_CSEL X13 X13 X3 Condition_CC *) + 0x9a8431ce; (* arm_CSEL X14 X14 X4 Condition_CC *) + 0x9a853000; (* arm_CSEL X0 X0 X5 Condition_CC *) + 0xa90837ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&128))) *) + 0xa90903ee; (* arm_STP X14 X0 SP (Immediate_Offset (iword (&144))) *) + 0xa94013e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&0))) *) + 0xa94223e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&32))) *) + 0x9b077c6c; (* arm_MUL X12 X3 X7 *) + 0x9bc77c6d; (* arm_UMULH X13 X3 X7 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa9432be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&48))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c60; (* arm_UMULH X0 X3 X9 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c61; (* arm_UMULH X1 X3 X10 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0xa9411be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&16))) *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bca7c83; (* arm_UMULH X3 X4 X10 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9b077cab; (* arm_MUL X11 X5 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b087cab; (* arm_MUL X11 X5 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b097cab; (* arm_MUL X11 X5 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b0a7cab; (* arm_MUL X11 X5 X10 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bca7ca4; (* arm_UMULH X4 X5 X10 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9bc77cab; (* arm_UMULH X11 X5 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9bc87cab; (* arm_UMULH X11 X5 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bc97cab; (* arm_UMULH X11 X5 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b077ccb; (* arm_MUL X11 X6 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9b087ccb; (* arm_MUL X11 X6 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b097ccb; (* arm_MUL X11 X6 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9b0a7ccb; (* arm_MUL X11 X6 X10 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9bca7cc5; (* arm_UMULH X5 X6 X10 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0x9bc77ccb; (* arm_UMULH X11 X6 X7 *) + 0xab0b0021; (* arm_ADDS X1 X1 X11 *) + 0x9bc87ccb; (* arm_UMULH X11 X6 X8 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bc97ccb; (* arm_UMULH X11 X6 X9 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0xd3607d8b; (* arm_LSL X11 X12 32 *) + 0xeb0b0182; (* arm_SUBS X2 X12 X11 *) + 0xd360fd86; (* arm_LSR X6 X12 32 *) + 0xda06018c; (* arm_SBC X12 X12 X6 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xba0601ce; (* arm_ADCS X14 X14 X6 *) + 0xba020000; (* arm_ADCS X0 X0 X2 *) + 0x9a1f018c; (* arm_ADC X12 X12 XZR *) + 0xd3607dab; (* arm_LSL X11 X13 32 *) + 0xeb0b01a2; (* arm_SUBS X2 X13 X11 *) + 0xd360fda6; (* arm_LSR X6 X13 32 *) + 0xda0601ad; (* arm_SBC X13 X13 X6 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0xba060000; (* arm_ADCS X0 X0 X6 *) + 0xba02018c; (* arm_ADCS X12 X12 X2 *) + 0x9a1f01ad; (* arm_ADC X13 X13 XZR *) + 0xd3607dcb; (* arm_LSL X11 X14 32 *) + 0xeb0b01c2; (* arm_SUBS X2 X14 X11 *) + 0xd360fdc6; (* arm_LSR X6 X14 32 *) + 0xda0601ce; (* arm_SBC X14 X14 X6 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0xba06018c; (* arm_ADCS X12 X12 X6 *) + 0xba0201ad; (* arm_ADCS X13 X13 X2 *) + 0x9a1f01ce; (* arm_ADC X14 X14 XZR *) + 0xd3607c0b; (* arm_LSL X11 X0 32 *) + 0xeb0b0002; (* arm_SUBS X2 X0 X11 *) + 0xd360fc06; (* arm_LSR X6 X0 32 *) + 0xda060000; (* arm_SBC X0 X0 X6 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0xba0601ad; (* arm_ADCS X13 X13 X6 *) + 0xba0201ce; (* arm_ADCS X14 X14 X2 *) + 0x9a1f0000; (* arm_ADC X0 X0 XZR *) + 0xab01018c; (* arm_ADDS X12 X12 X1 *) + 0xba0301ad; (* arm_ADCS X13 X13 X3 *) + 0xba0401ce; (* arm_ADCS X14 X14 X4 *) + 0xba050000; (* arm_ADCS X0 X0 X5 *) + 0x9a9f37e2; (* arm_CSET X2 Condition_CS *) + 0xb2407feb; (* arm_MOV X11 (rvalue (word 4294967295)) *) + 0xb26083e6; (* arm_MOV X6 (rvalue (word 18446744069414584321)) *) + 0xb1000581; (* arm_ADDS X1 X12 (rvalue (word 1)) *) + 0xfa0b01a3; (* arm_SBCS X3 X13 X11 *) + 0xfa1f01c4; (* arm_SBCS X4 X14 XZR *) + 0xfa060005; (* arm_SBCS X5 X0 X6 *) + 0xfa1f005f; (* arm_SBCS XZR X2 XZR *) + 0x9a81318c; (* arm_CSEL X12 X12 X1 Condition_CC *) + 0x9a8331ad; (* arm_CSEL X13 X13 X3 Condition_CC *) + 0x9a8431ce; (* arm_CSEL X14 X14 X4 Condition_CC *) + 0x9a853000; (* arm_CSEL X0 X0 X5 Condition_CC *) + 0xa90237ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&32))) *) + 0xa90303ee; (* arm_STP X14 X0 SP (Immediate_Offset (iword (&48))) *) + 0xa94a13e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&160))) *) + 0xa94c23e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&192))) *) + 0x9b077c6c; (* arm_MUL X12 X3 X7 *) + 0x9bc77c6d; (* arm_UMULH X13 X3 X7 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa94d2be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&208))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c60; (* arm_UMULH X0 X3 X9 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c61; (* arm_UMULH X1 X3 X10 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0xa94b1be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&176))) *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bca7c83; (* arm_UMULH X3 X4 X10 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9b077cab; (* arm_MUL X11 X5 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b087cab; (* arm_MUL X11 X5 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b097cab; (* arm_MUL X11 X5 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b0a7cab; (* arm_MUL X11 X5 X10 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bca7ca4; (* arm_UMULH X4 X5 X10 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9bc77cab; (* arm_UMULH X11 X5 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9bc87cab; (* arm_UMULH X11 X5 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bc97cab; (* arm_UMULH X11 X5 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b077ccb; (* arm_MUL X11 X6 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9b087ccb; (* arm_MUL X11 X6 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b097ccb; (* arm_MUL X11 X6 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9b0a7ccb; (* arm_MUL X11 X6 X10 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9bca7cc5; (* arm_UMULH X5 X6 X10 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0x9bc77ccb; (* arm_UMULH X11 X6 X7 *) + 0xab0b0021; (* arm_ADDS X1 X1 X11 *) + 0x9bc87ccb; (* arm_UMULH X11 X6 X8 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bc97ccb; (* arm_UMULH X11 X6 X9 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0xd3607d8b; (* arm_LSL X11 X12 32 *) + 0xeb0b0182; (* arm_SUBS X2 X12 X11 *) + 0xd360fd86; (* arm_LSR X6 X12 32 *) + 0xda06018c; (* arm_SBC X12 X12 X6 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xba0601ce; (* arm_ADCS X14 X14 X6 *) + 0xba020000; (* arm_ADCS X0 X0 X2 *) + 0x9a1f018c; (* arm_ADC X12 X12 XZR *) + 0xd3607dab; (* arm_LSL X11 X13 32 *) + 0xeb0b01a2; (* arm_SUBS X2 X13 X11 *) + 0xd360fda6; (* arm_LSR X6 X13 32 *) + 0xda0601ad; (* arm_SBC X13 X13 X6 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0xba060000; (* arm_ADCS X0 X0 X6 *) + 0xba02018c; (* arm_ADCS X12 X12 X2 *) + 0x9a1f01ad; (* arm_ADC X13 X13 XZR *) + 0xd3607dcb; (* arm_LSL X11 X14 32 *) + 0xeb0b01c2; (* arm_SUBS X2 X14 X11 *) + 0xd360fdc6; (* arm_LSR X6 X14 32 *) + 0xda0601ce; (* arm_SBC X14 X14 X6 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0xba06018c; (* arm_ADCS X12 X12 X6 *) + 0xba0201ad; (* arm_ADCS X13 X13 X2 *) + 0x9a1f01ce; (* arm_ADC X14 X14 XZR *) + 0xd3607c0b; (* arm_LSL X11 X0 32 *) + 0xeb0b0002; (* arm_SUBS X2 X0 X11 *) + 0xd360fc06; (* arm_LSR X6 X0 32 *) + 0xda060000; (* arm_SBC X0 X0 X6 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0xba0601ad; (* arm_ADCS X13 X13 X6 *) + 0xba0201ce; (* arm_ADCS X14 X14 X2 *) + 0x9a1f0000; (* arm_ADC X0 X0 XZR *) + 0xab01018c; (* arm_ADDS X12 X12 X1 *) + 0xba0301ad; (* arm_ADCS X13 X13 X3 *) + 0xba0401ce; (* arm_ADCS X14 X14 X4 *) + 0xba050000; (* arm_ADCS X0 X0 X5 *) + 0x9a9f37e2; (* arm_CSET X2 Condition_CS *) + 0xb2407feb; (* arm_MOV X11 (rvalue (word 4294967295)) *) + 0xb26083e6; (* arm_MOV X6 (rvalue (word 18446744069414584321)) *) + 0xb1000581; (* arm_ADDS X1 X12 (rvalue (word 1)) *) + 0xfa0b01a3; (* arm_SBCS X3 X13 X11 *) + 0xfa1f01c4; (* arm_SBCS X4 X14 XZR *) + 0xfa060005; (* arm_SBCS X5 X0 X6 *) + 0xfa1f005f; (* arm_SBCS XZR X2 XZR *) + 0x9a81318c; (* arm_CSEL X12 X12 X1 Condition_CC *) + 0x9a8331ad; (* arm_CSEL X13 X13 X3 Condition_CC *) + 0x9a8431ce; (* arm_CSEL X14 X14 X4 Condition_CC *) + 0x9a853000; (* arm_CSEL X0 X0 X5 Condition_CC *) + 0xa90c37ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&192))) *) + 0xa90d03ee; (* arm_STP X14 X0 SP (Immediate_Offset (iword (&208))) *) + 0xa9441be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&64))) *) + 0xa9480fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&128))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa94523e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&80))) *) + 0xa9490fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&144))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xda9f23e3; (* arm_CSETM X3 Condition_CC *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0xba0400c6; (* arm_ADCS X6 X6 X4 *) + 0xba1f00e7; (* arm_ADCS X7 X7 XZR *) + 0xb26083e4; (* arm_MOV X4 (rvalue (word 18446744069414584321)) *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0x9a040108; (* arm_ADC X8 X8 X4 *) + 0xa90a1be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&160))) *) + 0xa90b23e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&176))) *) + 0xa9421be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&32))) *) + 0xa94c0fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&192))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa94323e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&48))) *) + 0xa94d0fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&208))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xda9f23e3; (* arm_CSETM X3 Condition_CC *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0xba0400c6; (* arm_ADCS X6 X6 X4 *) + 0xba1f00e7; (* arm_ADCS X7 X7 XZR *) + 0xb26083e4; (* arm_MOV X4 (rvalue (word 18446744069414584321)) *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0x9a040108; (* arm_ADC X8 X8 X4 *) + 0xa9021be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&32))) *) + 0xa90323e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&48))) *) + 0xa94a0fe2; (* arm_LDP X2 X3 SP (Immediate_Offset (iword (&160))) *) + 0x9b037c49; (* arm_MUL X9 X2 X3 *) + 0x9bc37c4a; (* arm_UMULH X10 X2 X3 *) + 0xa94b17e4; (* arm_LDP X4 X5 SP (Immediate_Offset (iword (&176))) *) + 0x9b057c4b; (* arm_MUL X11 X2 X5 *) + 0x9bc57c4c; (* arm_UMULH X12 X2 X5 *) + 0x9b047c46; (* arm_MUL X6 X2 X4 *) + 0x9bc47c47; (* arm_UMULH X7 X2 X4 *) + 0xab06014a; (* arm_ADDS X10 X10 X6 *) + 0xba07016b; (* arm_ADCS X11 X11 X7 *) + 0x9b047c66; (* arm_MUL X6 X3 X4 *) + 0x9bc47c67; (* arm_UMULH X7 X3 X4 *) + 0x9a1f00e7; (* arm_ADC X7 X7 XZR *) + 0xab06016b; (* arm_ADDS X11 X11 X6 *) + 0x9b057c8d; (* arm_MUL X13 X4 X5 *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xba07018c; (* arm_ADCS X12 X12 X7 *) + 0x9b057c66; (* arm_MUL X6 X3 X5 *) + 0x9bc57c67; (* arm_UMULH X7 X3 X5 *) + 0x9a1f00e7; (* arm_ADC X7 X7 XZR *) + 0xab06018c; (* arm_ADDS X12 X12 X6 *) + 0xba0701ad; (* arm_ADCS X13 X13 X7 *) + 0x9a1f01ce; (* arm_ADC X14 X14 XZR *) + 0xab090129; (* arm_ADDS X9 X9 X9 *) + 0xba0a014a; (* arm_ADCS X10 X10 X10 *) + 0xba0b016b; (* arm_ADCS X11 X11 X11 *) + 0xba0c018c; (* arm_ADCS X12 X12 X12 *) + 0xba0d01ad; (* arm_ADCS X13 X13 X13 *) + 0xba0e01ce; (* arm_ADCS X14 X14 X14 *) + 0x9a9f37e7; (* arm_CSET X7 Condition_CS *) + 0x9bc27c46; (* arm_UMULH X6 X2 X2 *) + 0x9b027c48; (* arm_MUL X8 X2 X2 *) + 0xab060129; (* arm_ADDS X9 X9 X6 *) + 0x9b037c66; (* arm_MUL X6 X3 X3 *) + 0xba06014a; (* arm_ADCS X10 X10 X6 *) + 0x9bc37c66; (* arm_UMULH X6 X3 X3 *) + 0xba06016b; (* arm_ADCS X11 X11 X6 *) + 0x9b047c86; (* arm_MUL X6 X4 X4 *) + 0xba06018c; (* arm_ADCS X12 X12 X6 *) + 0x9bc47c86; (* arm_UMULH X6 X4 X4 *) + 0xba0601ad; (* arm_ADCS X13 X13 X6 *) + 0x9b057ca6; (* arm_MUL X6 X5 X5 *) + 0xba0601ce; (* arm_ADCS X14 X14 X6 *) + 0x9bc57ca6; (* arm_UMULH X6 X5 X5 *) + 0x9a0600e7; (* arm_ADC X7 X7 X6 *) + 0xab088129; (* arm_ADDS X9 X9 (Shiftedreg X8 LSL 32) *) + 0xd360fd03; (* arm_LSR X3 X8 32 *) + 0xba03014a; (* arm_ADCS X10 X10 X3 *) + 0xb26083e3; (* arm_MOV X3 (rvalue (word 18446744069414584321)) *) + 0x9b037d02; (* arm_MUL X2 X8 X3 *) + 0x9bc37d08; (* arm_UMULH X8 X8 X3 *) + 0xba02016b; (* arm_ADCS X11 X11 X2 *) + 0x9a1f0108; (* arm_ADC X8 X8 XZR *) + 0xab09814a; (* arm_ADDS X10 X10 (Shiftedreg X9 LSL 32) *) + 0xd360fd23; (* arm_LSR X3 X9 32 *) + 0xba03016b; (* arm_ADCS X11 X11 X3 *) + 0xb26083e3; (* arm_MOV X3 (rvalue (word 18446744069414584321)) *) + 0x9b037d22; (* arm_MUL X2 X9 X3 *) + 0x9bc37d29; (* arm_UMULH X9 X9 X3 *) + 0xba020108; (* arm_ADCS X8 X8 X2 *) + 0x9a1f0129; (* arm_ADC X9 X9 XZR *) + 0xab0a816b; (* arm_ADDS X11 X11 (Shiftedreg X10 LSL 32) *) + 0xd360fd43; (* arm_LSR X3 X10 32 *) + 0xba030108; (* arm_ADCS X8 X8 X3 *) + 0xb26083e3; (* arm_MOV X3 (rvalue (word 18446744069414584321)) *) + 0x9b037d42; (* arm_MUL X2 X10 X3 *) + 0x9bc37d4a; (* arm_UMULH X10 X10 X3 *) + 0xba020129; (* arm_ADCS X9 X9 X2 *) + 0x9a1f014a; (* arm_ADC X10 X10 XZR *) + 0xab0b8108; (* arm_ADDS X8 X8 (Shiftedreg X11 LSL 32) *) + 0xd360fd63; (* arm_LSR X3 X11 32 *) + 0xba030129; (* arm_ADCS X9 X9 X3 *) + 0xb26083e3; (* arm_MOV X3 (rvalue (word 18446744069414584321)) *) + 0x9b037d62; (* arm_MUL X2 X11 X3 *) + 0x9bc37d6b; (* arm_UMULH X11 X11 X3 *) + 0xba02014a; (* arm_ADCS X10 X10 X2 *) + 0x9a1f016b; (* arm_ADC X11 X11 XZR *) + 0xab0c0108; (* arm_ADDS X8 X8 X12 *) + 0xba0d0129; (* arm_ADCS X9 X9 X13 *) + 0xba0e014a; (* arm_ADCS X10 X10 X14 *) + 0xba07016b; (* arm_ADCS X11 X11 X7 *) + 0x92800002; (* arm_MOVN X2 (word 0) 0 *) + 0x9a8233e2; (* arm_CSEL X2 XZR X2 Condition_CC *) + 0xb2407fe3; (* arm_MOV X3 (rvalue (word 4294967295)) *) + 0x9a8333e3; (* arm_CSEL X3 XZR X3 Condition_CC *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9a8533e5; (* arm_CSEL X5 XZR X5 Condition_CC *) + 0xeb020108; (* arm_SUBS X8 X8 X2 *) + 0xfa030129; (* arm_SBCS X9 X9 X3 *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xda05016b; (* arm_SBC X11 X11 X5 *) + 0xa90627e8; (* arm_STP X8 X9 SP (Immediate_Offset (iword (&96))) *) + 0xa9072fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&112))) *) + 0xa9420fe2; (* arm_LDP X2 X3 SP (Immediate_Offset (iword (&32))) *) + 0x9b037c49; (* arm_MUL X9 X2 X3 *) + 0x9bc37c4a; (* arm_UMULH X10 X2 X3 *) + 0xa94317e4; (* arm_LDP X4 X5 SP (Immediate_Offset (iword (&48))) *) + 0x9b057c4b; (* arm_MUL X11 X2 X5 *) + 0x9bc57c4c; (* arm_UMULH X12 X2 X5 *) + 0x9b047c46; (* arm_MUL X6 X2 X4 *) + 0x9bc47c47; (* arm_UMULH X7 X2 X4 *) + 0xab06014a; (* arm_ADDS X10 X10 X6 *) + 0xba07016b; (* arm_ADCS X11 X11 X7 *) + 0x9b047c66; (* arm_MUL X6 X3 X4 *) + 0x9bc47c67; (* arm_UMULH X7 X3 X4 *) + 0x9a1f00e7; (* arm_ADC X7 X7 XZR *) + 0xab06016b; (* arm_ADDS X11 X11 X6 *) + 0x9b057c8d; (* arm_MUL X13 X4 X5 *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xba07018c; (* arm_ADCS X12 X12 X7 *) + 0x9b057c66; (* arm_MUL X6 X3 X5 *) + 0x9bc57c67; (* arm_UMULH X7 X3 X5 *) + 0x9a1f00e7; (* arm_ADC X7 X7 XZR *) + 0xab06018c; (* arm_ADDS X12 X12 X6 *) + 0xba0701ad; (* arm_ADCS X13 X13 X7 *) + 0x9a1f01ce; (* arm_ADC X14 X14 XZR *) + 0xab090129; (* arm_ADDS X9 X9 X9 *) + 0xba0a014a; (* arm_ADCS X10 X10 X10 *) + 0xba0b016b; (* arm_ADCS X11 X11 X11 *) + 0xba0c018c; (* arm_ADCS X12 X12 X12 *) + 0xba0d01ad; (* arm_ADCS X13 X13 X13 *) + 0xba0e01ce; (* arm_ADCS X14 X14 X14 *) + 0x9a9f37e7; (* arm_CSET X7 Condition_CS *) + 0x9bc27c46; (* arm_UMULH X6 X2 X2 *) + 0x9b027c48; (* arm_MUL X8 X2 X2 *) + 0xab060129; (* arm_ADDS X9 X9 X6 *) + 0x9b037c66; (* arm_MUL X6 X3 X3 *) + 0xba06014a; (* arm_ADCS X10 X10 X6 *) + 0x9bc37c66; (* arm_UMULH X6 X3 X3 *) + 0xba06016b; (* arm_ADCS X11 X11 X6 *) + 0x9b047c86; (* arm_MUL X6 X4 X4 *) + 0xba06018c; (* arm_ADCS X12 X12 X6 *) + 0x9bc47c86; (* arm_UMULH X6 X4 X4 *) + 0xba0601ad; (* arm_ADCS X13 X13 X6 *) + 0x9b057ca6; (* arm_MUL X6 X5 X5 *) + 0xba0601ce; (* arm_ADCS X14 X14 X6 *) + 0x9bc57ca6; (* arm_UMULH X6 X5 X5 *) + 0x9a0600e7; (* arm_ADC X7 X7 X6 *) + 0xab088129; (* arm_ADDS X9 X9 (Shiftedreg X8 LSL 32) *) + 0xd360fd03; (* arm_LSR X3 X8 32 *) + 0xba03014a; (* arm_ADCS X10 X10 X3 *) + 0xb26083e3; (* arm_MOV X3 (rvalue (word 18446744069414584321)) *) + 0x9b037d02; (* arm_MUL X2 X8 X3 *) + 0x9bc37d08; (* arm_UMULH X8 X8 X3 *) + 0xba02016b; (* arm_ADCS X11 X11 X2 *) + 0x9a1f0108; (* arm_ADC X8 X8 XZR *) + 0xab09814a; (* arm_ADDS X10 X10 (Shiftedreg X9 LSL 32) *) + 0xd360fd23; (* arm_LSR X3 X9 32 *) + 0xba03016b; (* arm_ADCS X11 X11 X3 *) + 0xb26083e3; (* arm_MOV X3 (rvalue (word 18446744069414584321)) *) + 0x9b037d22; (* arm_MUL X2 X9 X3 *) + 0x9bc37d29; (* arm_UMULH X9 X9 X3 *) + 0xba020108; (* arm_ADCS X8 X8 X2 *) + 0x9a1f0129; (* arm_ADC X9 X9 XZR *) + 0xab0a816b; (* arm_ADDS X11 X11 (Shiftedreg X10 LSL 32) *) + 0xd360fd43; (* arm_LSR X3 X10 32 *) + 0xba030108; (* arm_ADCS X8 X8 X3 *) + 0xb26083e3; (* arm_MOV X3 (rvalue (word 18446744069414584321)) *) + 0x9b037d42; (* arm_MUL X2 X10 X3 *) + 0x9bc37d4a; (* arm_UMULH X10 X10 X3 *) + 0xba020129; (* arm_ADCS X9 X9 X2 *) + 0x9a1f014a; (* arm_ADC X10 X10 XZR *) + 0xab0b8108; (* arm_ADDS X8 X8 (Shiftedreg X11 LSL 32) *) + 0xd360fd63; (* arm_LSR X3 X11 32 *) + 0xba030129; (* arm_ADCS X9 X9 X3 *) + 0xb26083e3; (* arm_MOV X3 (rvalue (word 18446744069414584321)) *) + 0x9b037d62; (* arm_MUL X2 X11 X3 *) + 0x9bc37d6b; (* arm_UMULH X11 X11 X3 *) + 0xba02014a; (* arm_ADCS X10 X10 X2 *) + 0x9a1f016b; (* arm_ADC X11 X11 XZR *) + 0xab0c0108; (* arm_ADDS X8 X8 X12 *) + 0xba0d0129; (* arm_ADCS X9 X9 X13 *) + 0xba0e014a; (* arm_ADCS X10 X10 X14 *) + 0xba07016b; (* arm_ADCS X11 X11 X7 *) + 0x9a9f37e2; (* arm_CSET X2 Condition_CS *) + 0xb2407fe3; (* arm_MOV X3 (rvalue (word 4294967295)) *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0xb100050c; (* arm_ADDS X12 X8 (rvalue (word 1)) *) + 0xfa03012d; (* arm_SBCS X13 X9 X3 *) + 0xfa1f014e; (* arm_SBCS X14 X10 XZR *) + 0xfa050167; (* arm_SBCS X7 X11 X5 *) + 0xfa1f005f; (* arm_SBCS XZR X2 XZR *) + 0x9a8c3108; (* arm_CSEL X8 X8 X12 Condition_CC *) + 0x9a8d3129; (* arm_CSEL X9 X9 X13 Condition_CC *) + 0x9a8e314a; (* arm_CSEL X10 X10 X14 Condition_CC *) + 0x9a87316b; (* arm_CSEL X11 X11 X7 Condition_CC *) + 0xa90027e8; (* arm_STP X8 X9 SP (Immediate_Offset (iword (&0))) *) + 0xa9012fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&16))) *) + 0xa94613e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&96))) *) + 0xa94823e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&128))) *) + 0x9b077c6c; (* arm_MUL X12 X3 X7 *) + 0x9bc77c6d; (* arm_UMULH X13 X3 X7 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa9492be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&144))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c60; (* arm_UMULH X0 X3 X9 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c61; (* arm_UMULH X1 X3 X10 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0xa9471be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&112))) *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bca7c83; (* arm_UMULH X3 X4 X10 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9b077cab; (* arm_MUL X11 X5 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b087cab; (* arm_MUL X11 X5 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b097cab; (* arm_MUL X11 X5 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b0a7cab; (* arm_MUL X11 X5 X10 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bca7ca4; (* arm_UMULH X4 X5 X10 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9bc77cab; (* arm_UMULH X11 X5 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9bc87cab; (* arm_UMULH X11 X5 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bc97cab; (* arm_UMULH X11 X5 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b077ccb; (* arm_MUL X11 X6 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9b087ccb; (* arm_MUL X11 X6 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b097ccb; (* arm_MUL X11 X6 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9b0a7ccb; (* arm_MUL X11 X6 X10 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9bca7cc5; (* arm_UMULH X5 X6 X10 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0x9bc77ccb; (* arm_UMULH X11 X6 X7 *) + 0xab0b0021; (* arm_ADDS X1 X1 X11 *) + 0x9bc87ccb; (* arm_UMULH X11 X6 X8 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bc97ccb; (* arm_UMULH X11 X6 X9 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0xd3607d8b; (* arm_LSL X11 X12 32 *) + 0xeb0b0182; (* arm_SUBS X2 X12 X11 *) + 0xd360fd86; (* arm_LSR X6 X12 32 *) + 0xda06018c; (* arm_SBC X12 X12 X6 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xba0601ce; (* arm_ADCS X14 X14 X6 *) + 0xba020000; (* arm_ADCS X0 X0 X2 *) + 0x9a1f018c; (* arm_ADC X12 X12 XZR *) + 0xd3607dab; (* arm_LSL X11 X13 32 *) + 0xeb0b01a2; (* arm_SUBS X2 X13 X11 *) + 0xd360fda6; (* arm_LSR X6 X13 32 *) + 0xda0601ad; (* arm_SBC X13 X13 X6 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0xba060000; (* arm_ADCS X0 X0 X6 *) + 0xba02018c; (* arm_ADCS X12 X12 X2 *) + 0x9a1f01ad; (* arm_ADC X13 X13 XZR *) + 0xd3607dcb; (* arm_LSL X11 X14 32 *) + 0xeb0b01c2; (* arm_SUBS X2 X14 X11 *) + 0xd360fdc6; (* arm_LSR X6 X14 32 *) + 0xda0601ce; (* arm_SBC X14 X14 X6 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0xba06018c; (* arm_ADCS X12 X12 X6 *) + 0xba0201ad; (* arm_ADCS X13 X13 X2 *) + 0x9a1f01ce; (* arm_ADC X14 X14 XZR *) + 0xd3607c0b; (* arm_LSL X11 X0 32 *) + 0xeb0b0002; (* arm_SUBS X2 X0 X11 *) + 0xd360fc06; (* arm_LSR X6 X0 32 *) + 0xda060000; (* arm_SBC X0 X0 X6 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0xba0601ad; (* arm_ADCS X13 X13 X6 *) + 0xba0201ce; (* arm_ADCS X14 X14 X2 *) + 0x9a1f0000; (* arm_ADC X0 X0 XZR *) + 0xab01018c; (* arm_ADDS X12 X12 X1 *) + 0xba0301ad; (* arm_ADCS X13 X13 X3 *) + 0xba0401ce; (* arm_ADCS X14 X14 X4 *) + 0xba050000; (* arm_ADCS X0 X0 X5 *) + 0x9a9f37e2; (* arm_CSET X2 Condition_CS *) + 0xb2407feb; (* arm_MOV X11 (rvalue (word 4294967295)) *) + 0xb26083e6; (* arm_MOV X6 (rvalue (word 18446744069414584321)) *) + 0xb1000581; (* arm_ADDS X1 X12 (rvalue (word 1)) *) + 0xfa0b01a3; (* arm_SBCS X3 X13 X11 *) + 0xfa1f01c4; (* arm_SBCS X4 X14 XZR *) + 0xfa060005; (* arm_SBCS X5 X0 X6 *) + 0xfa1f005f; (* arm_SBCS XZR X2 XZR *) + 0x9a81318c; (* arm_CSEL X12 X12 X1 Condition_CC *) + 0x9a8331ad; (* arm_CSEL X13 X13 X3 Condition_CC *) + 0x9a8431ce; (* arm_CSEL X14 X14 X4 Condition_CC *) + 0x9a853000; (* arm_CSEL X0 X0 X5 Condition_CC *) + 0xa90837ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&128))) *) + 0xa90903ee; (* arm_STP X14 X0 SP (Immediate_Offset (iword (&144))) *) + 0xa94613e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&96))) *) + 0xa94423e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&64))) *) + 0x9b077c6c; (* arm_MUL X12 X3 X7 *) + 0x9bc77c6d; (* arm_UMULH X13 X3 X7 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa9452be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&80))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c60; (* arm_UMULH X0 X3 X9 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c61; (* arm_UMULH X1 X3 X10 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0xa9471be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&112))) *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bca7c83; (* arm_UMULH X3 X4 X10 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9b077cab; (* arm_MUL X11 X5 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b087cab; (* arm_MUL X11 X5 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b097cab; (* arm_MUL X11 X5 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b0a7cab; (* arm_MUL X11 X5 X10 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bca7ca4; (* arm_UMULH X4 X5 X10 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9bc77cab; (* arm_UMULH X11 X5 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9bc87cab; (* arm_UMULH X11 X5 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bc97cab; (* arm_UMULH X11 X5 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b077ccb; (* arm_MUL X11 X6 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9b087ccb; (* arm_MUL X11 X6 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b097ccb; (* arm_MUL X11 X6 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9b0a7ccb; (* arm_MUL X11 X6 X10 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9bca7cc5; (* arm_UMULH X5 X6 X10 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0x9bc77ccb; (* arm_UMULH X11 X6 X7 *) + 0xab0b0021; (* arm_ADDS X1 X1 X11 *) + 0x9bc87ccb; (* arm_UMULH X11 X6 X8 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bc97ccb; (* arm_UMULH X11 X6 X9 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0xd3607d8b; (* arm_LSL X11 X12 32 *) + 0xeb0b0182; (* arm_SUBS X2 X12 X11 *) + 0xd360fd86; (* arm_LSR X6 X12 32 *) + 0xda06018c; (* arm_SBC X12 X12 X6 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xba0601ce; (* arm_ADCS X14 X14 X6 *) + 0xba020000; (* arm_ADCS X0 X0 X2 *) + 0x9a1f018c; (* arm_ADC X12 X12 XZR *) + 0xd3607dab; (* arm_LSL X11 X13 32 *) + 0xeb0b01a2; (* arm_SUBS X2 X13 X11 *) + 0xd360fda6; (* arm_LSR X6 X13 32 *) + 0xda0601ad; (* arm_SBC X13 X13 X6 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0xba060000; (* arm_ADCS X0 X0 X6 *) + 0xba02018c; (* arm_ADCS X12 X12 X2 *) + 0x9a1f01ad; (* arm_ADC X13 X13 XZR *) + 0xd3607dcb; (* arm_LSL X11 X14 32 *) + 0xeb0b01c2; (* arm_SUBS X2 X14 X11 *) + 0xd360fdc6; (* arm_LSR X6 X14 32 *) + 0xda0601ce; (* arm_SBC X14 X14 X6 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0xba06018c; (* arm_ADCS X12 X12 X6 *) + 0xba0201ad; (* arm_ADCS X13 X13 X2 *) + 0x9a1f01ce; (* arm_ADC X14 X14 XZR *) + 0xd3607c0b; (* arm_LSL X11 X0 32 *) + 0xeb0b0002; (* arm_SUBS X2 X0 X11 *) + 0xd360fc06; (* arm_LSR X6 X0 32 *) + 0xda060000; (* arm_SBC X0 X0 X6 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0xba0601ad; (* arm_ADCS X13 X13 X6 *) + 0xba0201ce; (* arm_ADCS X14 X14 X2 *) + 0x9a1f0000; (* arm_ADC X0 X0 XZR *) + 0xab01018c; (* arm_ADDS X12 X12 X1 *) + 0xba0301ad; (* arm_ADCS X13 X13 X3 *) + 0xba0401ce; (* arm_ADCS X14 X14 X4 *) + 0xba050000; (* arm_ADCS X0 X0 X5 *) + 0x9a9f37e2; (* arm_CSET X2 Condition_CS *) + 0xb2407feb; (* arm_MOV X11 (rvalue (word 4294967295)) *) + 0xb26083e6; (* arm_MOV X6 (rvalue (word 18446744069414584321)) *) + 0xb1000581; (* arm_ADDS X1 X12 (rvalue (word 1)) *) + 0xfa0b01a3; (* arm_SBCS X3 X13 X11 *) + 0xfa1f01c4; (* arm_SBCS X4 X14 XZR *) + 0xfa060005; (* arm_SBCS X5 X0 X6 *) + 0xfa1f005f; (* arm_SBCS XZR X2 XZR *) + 0x9a81318c; (* arm_CSEL X12 X12 X1 Condition_CC *) + 0x9a8331ad; (* arm_CSEL X13 X13 X3 Condition_CC *) + 0x9a8431ce; (* arm_CSEL X14 X14 X4 Condition_CC *) + 0x9a853000; (* arm_CSEL X0 X0 X5 Condition_CC *) + 0xa90437ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&64))) *) + 0xa90503ee; (* arm_STP X14 X0 SP (Immediate_Offset (iword (&80))) *) + 0xa9401be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&0))) *) + 0xa9480fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&128))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa94123e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&16))) *) + 0xa9490fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&144))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xda9f23e3; (* arm_CSETM X3 Condition_CC *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0xba0400c6; (* arm_ADCS X6 X6 X4 *) + 0xba1f00e7; (* arm_ADCS X7 X7 XZR *) + 0xb26083e4; (* arm_MOV X4 (rvalue (word 18446744069414584321)) *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0x9a040108; (* arm_ADC X8 X8 X4 *) + 0xa90019e5; (* arm_STP X5 X6 X15 (Immediate_Offset (iword (&0))) *) + 0xa90121e7; (* arm_STP X7 X8 X15 (Immediate_Offset (iword (&16))) *) + 0xa9441be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&64))) *) + 0xa9480fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&128))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa94523e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&80))) *) + 0xa9490fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&144))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xda9f23e3; (* arm_CSETM X3 Condition_CC *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0xba0400c6; (* arm_ADCS X6 X6 X4 *) + 0xba1f00e7; (* arm_ADCS X7 X7 XZR *) + 0xb26083e4; (* arm_MOV X4 (rvalue (word 18446744069414584321)) *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0x9a040108; (* arm_ADC X8 X8 X4 *) + 0xa9061be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&96))) *) + 0xa90723e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&112))) *) + 0xa94a13e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&160))) *) + 0xa9442207; (* arm_LDP X7 X8 X16 (Immediate_Offset (iword (&64))) *) + 0x9b077c6c; (* arm_MUL X12 X3 X7 *) + 0x9bc77c6d; (* arm_UMULH X13 X3 X7 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa9452a09; (* arm_LDP X9 X10 X16 (Immediate_Offset (iword (&80))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c60; (* arm_UMULH X0 X3 X9 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c61; (* arm_UMULH X1 X3 X10 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0xa94b1be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&176))) *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bca7c83; (* arm_UMULH X3 X4 X10 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9b077cab; (* arm_MUL X11 X5 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b087cab; (* arm_MUL X11 X5 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b097cab; (* arm_MUL X11 X5 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b0a7cab; (* arm_MUL X11 X5 X10 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bca7ca4; (* arm_UMULH X4 X5 X10 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9bc77cab; (* arm_UMULH X11 X5 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9bc87cab; (* arm_UMULH X11 X5 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bc97cab; (* arm_UMULH X11 X5 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b077ccb; (* arm_MUL X11 X6 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9b087ccb; (* arm_MUL X11 X6 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b097ccb; (* arm_MUL X11 X6 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9b0a7ccb; (* arm_MUL X11 X6 X10 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9bca7cc5; (* arm_UMULH X5 X6 X10 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0x9bc77ccb; (* arm_UMULH X11 X6 X7 *) + 0xab0b0021; (* arm_ADDS X1 X1 X11 *) + 0x9bc87ccb; (* arm_UMULH X11 X6 X8 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bc97ccb; (* arm_UMULH X11 X6 X9 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0xd3607d8b; (* arm_LSL X11 X12 32 *) + 0xeb0b0182; (* arm_SUBS X2 X12 X11 *) + 0xd360fd86; (* arm_LSR X6 X12 32 *) + 0xda06018c; (* arm_SBC X12 X12 X6 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xba0601ce; (* arm_ADCS X14 X14 X6 *) + 0xba020000; (* arm_ADCS X0 X0 X2 *) + 0x9a1f018c; (* arm_ADC X12 X12 XZR *) + 0xd3607dab; (* arm_LSL X11 X13 32 *) + 0xeb0b01a2; (* arm_SUBS X2 X13 X11 *) + 0xd360fda6; (* arm_LSR X6 X13 32 *) + 0xda0601ad; (* arm_SBC X13 X13 X6 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0xba060000; (* arm_ADCS X0 X0 X6 *) + 0xba02018c; (* arm_ADCS X12 X12 X2 *) + 0x9a1f01ad; (* arm_ADC X13 X13 XZR *) + 0xd3607dcb; (* arm_LSL X11 X14 32 *) + 0xeb0b01c2; (* arm_SUBS X2 X14 X11 *) + 0xd360fdc6; (* arm_LSR X6 X14 32 *) + 0xda0601ce; (* arm_SBC X14 X14 X6 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0xba06018c; (* arm_ADCS X12 X12 X6 *) + 0xba0201ad; (* arm_ADCS X13 X13 X2 *) + 0x9a1f01ce; (* arm_ADC X14 X14 XZR *) + 0xd3607c0b; (* arm_LSL X11 X0 32 *) + 0xeb0b0002; (* arm_SUBS X2 X0 X11 *) + 0xd360fc06; (* arm_LSR X6 X0 32 *) + 0xda060000; (* arm_SBC X0 X0 X6 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0xba0601ad; (* arm_ADCS X13 X13 X6 *) + 0xba0201ce; (* arm_ADCS X14 X14 X2 *) + 0x9a1f0000; (* arm_ADC X0 X0 XZR *) + 0xab01018c; (* arm_ADDS X12 X12 X1 *) + 0xba0301ad; (* arm_ADCS X13 X13 X3 *) + 0xba0401ce; (* arm_ADCS X14 X14 X4 *) + 0xba050000; (* arm_ADCS X0 X0 X5 *) + 0x9a9f37e2; (* arm_CSET X2 Condition_CS *) + 0xb2407feb; (* arm_MOV X11 (rvalue (word 4294967295)) *) + 0xb26083e6; (* arm_MOV X6 (rvalue (word 18446744069414584321)) *) + 0xb1000581; (* arm_ADDS X1 X12 (rvalue (word 1)) *) + 0xfa0b01a3; (* arm_SBCS X3 X13 X11 *) + 0xfa1f01c4; (* arm_SBCS X4 X14 XZR *) + 0xfa060005; (* arm_SBCS X5 X0 X6 *) + 0xfa1f005f; (* arm_SBCS XZR X2 XZR *) + 0x9a81318c; (* arm_CSEL X12 X12 X1 Condition_CC *) + 0x9a8331ad; (* arm_CSEL X13 X13 X3 Condition_CC *) + 0x9a8431ce; (* arm_CSEL X14 X14 X4 Condition_CC *) + 0x9a853000; (* arm_CSEL X0 X0 X5 Condition_CC *) + 0xa90a37ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&160))) *) + 0xa90b03ee; (* arm_STP X14 X0 SP (Immediate_Offset (iword (&176))) *) + 0xa94019e5; (* arm_LDP X5 X6 X15 (Immediate_Offset (iword (&0))) *) + 0xa9440fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&64))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa94121e7; (* arm_LDP X7 X8 X15 (Immediate_Offset (iword (&16))) *) + 0xa9450fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&80))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xda9f23e3; (* arm_CSETM X3 Condition_CC *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0xba0400c6; (* arm_ADCS X6 X6 X4 *) + 0xba1f00e7; (* arm_ADCS X7 X7 XZR *) + 0xb26083e4; (* arm_MOV X4 (rvalue (word 18446744069414584321)) *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0x9a040108; (* arm_ADC X8 X8 X4 *) + 0xa90019e5; (* arm_STP X5 X6 X15 (Immediate_Offset (iword (&0))) *) + 0xa90121e7; (* arm_STP X7 X8 X15 (Immediate_Offset (iword (&16))) *) + 0xa9481be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&128))) *) + 0xa9400de4; (* arm_LDP X4 X3 X15 (Immediate_Offset (iword (&0))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa94923e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&144))) *) + 0xa9410de4; (* arm_LDP X4 X3 X15 (Immediate_Offset (iword (&16))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xda9f23e3; (* arm_CSETM X3 Condition_CC *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0xba0400c6; (* arm_ADCS X6 X6 X4 *) + 0xba1f00e7; (* arm_ADCS X7 X7 XZR *) + 0xb26083e4; (* arm_MOV X4 (rvalue (word 18446744069414584321)) *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0x9a040108; (* arm_ADC X8 X8 X4 *) + 0xa9081be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&128))) *) + 0xa90923e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&144))) *) + 0xa94613e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&96))) *) + 0xa94c23e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&192))) *) + 0x9b077c6c; (* arm_MUL X12 X3 X7 *) + 0x9bc77c6d; (* arm_UMULH X13 X3 X7 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa94d2be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&208))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c60; (* arm_UMULH X0 X3 X9 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c61; (* arm_UMULH X1 X3 X10 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0xa9471be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&112))) *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bca7c83; (* arm_UMULH X3 X4 X10 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9b077cab; (* arm_MUL X11 X5 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b087cab; (* arm_MUL X11 X5 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b097cab; (* arm_MUL X11 X5 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b0a7cab; (* arm_MUL X11 X5 X10 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bca7ca4; (* arm_UMULH X4 X5 X10 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9bc77cab; (* arm_UMULH X11 X5 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9bc87cab; (* arm_UMULH X11 X5 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bc97cab; (* arm_UMULH X11 X5 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b077ccb; (* arm_MUL X11 X6 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9b087ccb; (* arm_MUL X11 X6 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b097ccb; (* arm_MUL X11 X6 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9b0a7ccb; (* arm_MUL X11 X6 X10 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9bca7cc5; (* arm_UMULH X5 X6 X10 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0x9bc77ccb; (* arm_UMULH X11 X6 X7 *) + 0xab0b0021; (* arm_ADDS X1 X1 X11 *) + 0x9bc87ccb; (* arm_UMULH X11 X6 X8 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bc97ccb; (* arm_UMULH X11 X6 X9 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0xd3607d8b; (* arm_LSL X11 X12 32 *) + 0xeb0b0182; (* arm_SUBS X2 X12 X11 *) + 0xd360fd86; (* arm_LSR X6 X12 32 *) + 0xda06018c; (* arm_SBC X12 X12 X6 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xba0601ce; (* arm_ADCS X14 X14 X6 *) + 0xba020000; (* arm_ADCS X0 X0 X2 *) + 0x9a1f018c; (* arm_ADC X12 X12 XZR *) + 0xd3607dab; (* arm_LSL X11 X13 32 *) + 0xeb0b01a2; (* arm_SUBS X2 X13 X11 *) + 0xd360fda6; (* arm_LSR X6 X13 32 *) + 0xda0601ad; (* arm_SBC X13 X13 X6 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0xba060000; (* arm_ADCS X0 X0 X6 *) + 0xba02018c; (* arm_ADCS X12 X12 X2 *) + 0x9a1f01ad; (* arm_ADC X13 X13 XZR *) + 0xd3607dcb; (* arm_LSL X11 X14 32 *) + 0xeb0b01c2; (* arm_SUBS X2 X14 X11 *) + 0xd360fdc6; (* arm_LSR X6 X14 32 *) + 0xda0601ce; (* arm_SBC X14 X14 X6 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0xba06018c; (* arm_ADCS X12 X12 X6 *) + 0xba0201ad; (* arm_ADCS X13 X13 X2 *) + 0x9a1f01ce; (* arm_ADC X14 X14 XZR *) + 0xd3607c0b; (* arm_LSL X11 X0 32 *) + 0xeb0b0002; (* arm_SUBS X2 X0 X11 *) + 0xd360fc06; (* arm_LSR X6 X0 32 *) + 0xda060000; (* arm_SBC X0 X0 X6 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0xba0601ad; (* arm_ADCS X13 X13 X6 *) + 0xba0201ce; (* arm_ADCS X14 X14 X2 *) + 0x9a1f0000; (* arm_ADC X0 X0 XZR *) + 0xab01018c; (* arm_ADDS X12 X12 X1 *) + 0xba0301ad; (* arm_ADCS X13 X13 X3 *) + 0xba0401ce; (* arm_ADCS X14 X14 X4 *) + 0xba050000; (* arm_ADCS X0 X0 X5 *) + 0x9a9f37e2; (* arm_CSET X2 Condition_CS *) + 0xb2407feb; (* arm_MOV X11 (rvalue (word 4294967295)) *) + 0xb26083e6; (* arm_MOV X6 (rvalue (word 18446744069414584321)) *) + 0xb1000581; (* arm_ADDS X1 X12 (rvalue (word 1)) *) + 0xfa0b01a3; (* arm_SBCS X3 X13 X11 *) + 0xfa1f01c4; (* arm_SBCS X4 X14 XZR *) + 0xfa060005; (* arm_SBCS X5 X0 X6 *) + 0xfa1f005f; (* arm_SBCS XZR X2 XZR *) + 0x9a81318c; (* arm_CSEL X12 X12 X1 Condition_CC *) + 0x9a8331ad; (* arm_CSEL X13 X13 X3 Condition_CC *) + 0x9a8431ce; (* arm_CSEL X14 X14 X4 Condition_CC *) + 0x9a853000; (* arm_CSEL X0 X0 X5 Condition_CC *) + 0xa90637ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&96))) *) + 0xa90703ee; (* arm_STP X14 X0 SP (Immediate_Offset (iword (&112))) *) + 0xa94a13e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&160))) *) + 0xa9442227; (* arm_LDP X7 X8 X17 (Immediate_Offset (iword (&64))) *) + 0x9b077c6c; (* arm_MUL X12 X3 X7 *) + 0x9bc77c6d; (* arm_UMULH X13 X3 X7 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa9452a29; (* arm_LDP X9 X10 X17 (Immediate_Offset (iword (&80))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c60; (* arm_UMULH X0 X3 X9 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c61; (* arm_UMULH X1 X3 X10 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0xa94b1be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&176))) *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bca7c83; (* arm_UMULH X3 X4 X10 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9b077cab; (* arm_MUL X11 X5 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b087cab; (* arm_MUL X11 X5 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b097cab; (* arm_MUL X11 X5 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b0a7cab; (* arm_MUL X11 X5 X10 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bca7ca4; (* arm_UMULH X4 X5 X10 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9bc77cab; (* arm_UMULH X11 X5 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9bc87cab; (* arm_UMULH X11 X5 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bc97cab; (* arm_UMULH X11 X5 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b077ccb; (* arm_MUL X11 X6 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9b087ccb; (* arm_MUL X11 X6 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b097ccb; (* arm_MUL X11 X6 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9b0a7ccb; (* arm_MUL X11 X6 X10 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9bca7cc5; (* arm_UMULH X5 X6 X10 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0x9bc77ccb; (* arm_UMULH X11 X6 X7 *) + 0xab0b0021; (* arm_ADDS X1 X1 X11 *) + 0x9bc87ccb; (* arm_UMULH X11 X6 X8 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bc97ccb; (* arm_UMULH X11 X6 X9 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0xd3607d8b; (* arm_LSL X11 X12 32 *) + 0xeb0b0182; (* arm_SUBS X2 X12 X11 *) + 0xd360fd86; (* arm_LSR X6 X12 32 *) + 0xda06018c; (* arm_SBC X12 X12 X6 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xba0601ce; (* arm_ADCS X14 X14 X6 *) + 0xba020000; (* arm_ADCS X0 X0 X2 *) + 0x9a1f018c; (* arm_ADC X12 X12 XZR *) + 0xd3607dab; (* arm_LSL X11 X13 32 *) + 0xeb0b01a2; (* arm_SUBS X2 X13 X11 *) + 0xd360fda6; (* arm_LSR X6 X13 32 *) + 0xda0601ad; (* arm_SBC X13 X13 X6 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0xba060000; (* arm_ADCS X0 X0 X6 *) + 0xba02018c; (* arm_ADCS X12 X12 X2 *) + 0x9a1f01ad; (* arm_ADC X13 X13 XZR *) + 0xd3607dcb; (* arm_LSL X11 X14 32 *) + 0xeb0b01c2; (* arm_SUBS X2 X14 X11 *) + 0xd360fdc6; (* arm_LSR X6 X14 32 *) + 0xda0601ce; (* arm_SBC X14 X14 X6 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0xba06018c; (* arm_ADCS X12 X12 X6 *) + 0xba0201ad; (* arm_ADCS X13 X13 X2 *) + 0x9a1f01ce; (* arm_ADC X14 X14 XZR *) + 0xd3607c0b; (* arm_LSL X11 X0 32 *) + 0xeb0b0002; (* arm_SUBS X2 X0 X11 *) + 0xd360fc06; (* arm_LSR X6 X0 32 *) + 0xda060000; (* arm_SBC X0 X0 X6 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0xba0601ad; (* arm_ADCS X13 X13 X6 *) + 0xba0201ce; (* arm_ADCS X14 X14 X2 *) + 0x9a1f0000; (* arm_ADC X0 X0 XZR *) + 0xab01018c; (* arm_ADDS X12 X12 X1 *) + 0xba0301ad; (* arm_ADCS X13 X13 X3 *) + 0xba0401ce; (* arm_ADCS X14 X14 X4 *) + 0xba050000; (* arm_ADCS X0 X0 X5 *) + 0x9a9f37e2; (* arm_CSET X2 Condition_CS *) + 0xb2407feb; (* arm_MOV X11 (rvalue (word 4294967295)) *) + 0xb26083e6; (* arm_MOV X6 (rvalue (word 18446744069414584321)) *) + 0xb1000581; (* arm_ADDS X1 X12 (rvalue (word 1)) *) + 0xfa0b01a3; (* arm_SBCS X3 X13 X11 *) + 0xfa1f01c4; (* arm_SBCS X4 X14 XZR *) + 0xfa060005; (* arm_SBCS X5 X0 X6 *) + 0xfa1f005f; (* arm_SBCS XZR X2 XZR *) + 0x9a81318c; (* arm_CSEL X12 X12 X1 Condition_CC *) + 0x9a8331ad; (* arm_CSEL X13 X13 X3 Condition_CC *) + 0x9a8431ce; (* arm_CSEL X14 X14 X4 Condition_CC *) + 0x9a853000; (* arm_CSEL X0 X0 X5 Condition_CC *) + 0xa90435ec; (* arm_STP X12 X13 X15 (Immediate_Offset (iword (&64))) *) + 0xa90501ee; (* arm_STP X14 X0 X15 (Immediate_Offset (iword (&80))) *) + 0xa94213e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&32))) *) + 0xa94823e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&128))) *) + 0x9b077c6c; (* arm_MUL X12 X3 X7 *) + 0x9bc77c6d; (* arm_UMULH X13 X3 X7 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa9492be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&144))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c60; (* arm_UMULH X0 X3 X9 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c61; (* arm_UMULH X1 X3 X10 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0xa9431be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&48))) *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bca7c83; (* arm_UMULH X3 X4 X10 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9b077cab; (* arm_MUL X11 X5 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b087cab; (* arm_MUL X11 X5 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b097cab; (* arm_MUL X11 X5 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b0a7cab; (* arm_MUL X11 X5 X10 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bca7ca4; (* arm_UMULH X4 X5 X10 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9bc77cab; (* arm_UMULH X11 X5 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9bc87cab; (* arm_UMULH X11 X5 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bc97cab; (* arm_UMULH X11 X5 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b077ccb; (* arm_MUL X11 X6 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9b087ccb; (* arm_MUL X11 X6 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b097ccb; (* arm_MUL X11 X6 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9b0a7ccb; (* arm_MUL X11 X6 X10 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9bca7cc5; (* arm_UMULH X5 X6 X10 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0x9bc77ccb; (* arm_UMULH X11 X6 X7 *) + 0xab0b0021; (* arm_ADDS X1 X1 X11 *) + 0x9bc87ccb; (* arm_UMULH X11 X6 X8 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bc97ccb; (* arm_UMULH X11 X6 X9 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0xd3607d8b; (* arm_LSL X11 X12 32 *) + 0xeb0b0182; (* arm_SUBS X2 X12 X11 *) + 0xd360fd86; (* arm_LSR X6 X12 32 *) + 0xda06018c; (* arm_SBC X12 X12 X6 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xba0601ce; (* arm_ADCS X14 X14 X6 *) + 0xba020000; (* arm_ADCS X0 X0 X2 *) + 0x9a1f018c; (* arm_ADC X12 X12 XZR *) + 0xd3607dab; (* arm_LSL X11 X13 32 *) + 0xeb0b01a2; (* arm_SUBS X2 X13 X11 *) + 0xd360fda6; (* arm_LSR X6 X13 32 *) + 0xda0601ad; (* arm_SBC X13 X13 X6 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0xba060000; (* arm_ADCS X0 X0 X6 *) + 0xba02018c; (* arm_ADCS X12 X12 X2 *) + 0x9a1f01ad; (* arm_ADC X13 X13 XZR *) + 0xd3607dcb; (* arm_LSL X11 X14 32 *) + 0xeb0b01c2; (* arm_SUBS X2 X14 X11 *) + 0xd360fdc6; (* arm_LSR X6 X14 32 *) + 0xda0601ce; (* arm_SBC X14 X14 X6 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0xba06018c; (* arm_ADCS X12 X12 X6 *) + 0xba0201ad; (* arm_ADCS X13 X13 X2 *) + 0x9a1f01ce; (* arm_ADC X14 X14 XZR *) + 0xd3607c0b; (* arm_LSL X11 X0 32 *) + 0xeb0b0002; (* arm_SUBS X2 X0 X11 *) + 0xd360fc06; (* arm_LSR X6 X0 32 *) + 0xda060000; (* arm_SBC X0 X0 X6 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0xba0601ad; (* arm_ADCS X13 X13 X6 *) + 0xba0201ce; (* arm_ADCS X14 X14 X2 *) + 0x9a1f0000; (* arm_ADC X0 X0 XZR *) + 0xab01018c; (* arm_ADDS X12 X12 X1 *) + 0xba0301ad; (* arm_ADCS X13 X13 X3 *) + 0xba0401ce; (* arm_ADCS X14 X14 X4 *) + 0xba050000; (* arm_ADCS X0 X0 X5 *) + 0x9a9f37e2; (* arm_CSET X2 Condition_CS *) + 0xb2407feb; (* arm_MOV X11 (rvalue (word 4294967295)) *) + 0xb26083e6; (* arm_MOV X6 (rvalue (word 18446744069414584321)) *) + 0xb1000581; (* arm_ADDS X1 X12 (rvalue (word 1)) *) + 0xfa0b01a3; (* arm_SBCS X3 X13 X11 *) + 0xfa1f01c4; (* arm_SBCS X4 X14 XZR *) + 0xfa060005; (* arm_SBCS X5 X0 X6 *) + 0xfa1f005f; (* arm_SBCS XZR X2 XZR *) + 0x9a81318c; (* arm_CSEL X12 X12 X1 Condition_CC *) + 0x9a8331ad; (* arm_CSEL X13 X13 X3 Condition_CC *) + 0x9a8431ce; (* arm_CSEL X14 X14 X4 Condition_CC *) + 0x9a853000; (* arm_CSEL X0 X0 X5 Condition_CC *) + 0xa90837ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&128))) *) + 0xa90903ee; (* arm_STP X14 X0 SP (Immediate_Offset (iword (&144))) *) + 0xa9481be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&128))) *) + 0xa9460fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&96))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa94923e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&144))) *) + 0xa9470fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&112))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xda9f23e3; (* arm_CSETM X3 Condition_CC *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0xba0400c6; (* arm_ADCS X6 X6 X4 *) + 0xba1f00e7; (* arm_ADCS X7 X7 XZR *) + 0xb26083e4; (* arm_MOV X4 (rvalue (word 18446744069414584321)) *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0x9a040108; (* arm_ADC X8 X8 X4 *) + 0xa90219e5; (* arm_STP X5 X6 X15 (Immediate_Offset (iword (&32))) *) + 0xa90321e7; (* arm_STP X7 X8 X15 (Immediate_Offset (iword (&48))) *) + 0x910383ff; (* arm_ADD SP SP (rvalue (word 224)) *) + 0xd65f03c0 (* arm_RET X30 *) +];; + +let P256_MONTJADD_EXEC = ARM_MK_EXEC_RULE p256_montjadd_mc;; + +(* ------------------------------------------------------------------------- *) +(* Common supporting definitions and lemmas for component proofs. *) +(* ------------------------------------------------------------------------- *) + +let p_256 = new_definition `p_256 = 115792089210356248762697446949407573530086143415290314195533631308867097853951`;; + +let nistp256 = define + `nistp256 = + (integer_mod_ring p_256, + ring_neg (integer_mod_ring p_256) (&3), + &b_256:int)`;; + +let nistp256_encode = new_definition + `nistp256_encode = montgomery_encode(256,p_256)`;; + +let nintlemma = prove + (`&(num_of_int(x rem &p_256)) = x rem &p_256`, + MATCH_MP_TAC INT_OF_NUM_OF_INT THEN MATCH_MP_TAC INT_REM_POS THEN + REWRITE_TAC[INT_OF_NUM_EQ; p_256] THEN CONV_TAC NUM_REDUCE_CONV);; + +let unilemma0 = prove + (`x = a MOD p_256 ==> x < p_256 /\ &x = &a rem &p_256`, + REWRITE_TAC[INT_OF_NUM_REM; p_256] THEN ARITH_TAC);; + +let unilemma1 = prove + (`&x = a rem &p_256 ==> x < p_256 /\ &x = a rem &p_256`, + SIMP_TAC[GSYM INT_OF_NUM_LT; INT_LT_REM_EQ; p_256] THEN INT_ARITH_TAC);; + +let unilemma2 = prove + (`X = num_of_int(x rem &p_256) ==> X < p_256 /\ &X = x rem &p_256`, + DISCH_THEN SUBST1_TAC THEN + REWRITE_TAC[GSYM INT_OF_NUM_LT; nintlemma; INT_LT_REM_EQ] THEN + REWRITE_TAC[INT_OF_NUM_LT; p_256] THEN CONV_TAC NUM_REDUCE_CONV);; + +let lemont = prove + (`(&i * x * y) rem &p_256 = (&i * x rem &p_256 * y rem &p_256) rem &p_256`, + CONV_TAC INT_REM_DOWN_CONV THEN REWRITE_TAC[]);; + +let pumont = prove + (`(&(inverse_mod p_256 (2 EXP 256)) * + (&2 pow 256 * x) rem &p_256 * (&2 pow 256 * y) rem &p_256) rem &p_256 = + (&2 pow 256 * x * y) rem &p_256`, + CONV_TAC INT_REM_DOWN_CONV THEN REWRITE_TAC[INT_REM_EQ] THEN + MATCH_MP_TAC(INTEGER_RULE + `(i * t:int == &1) (mod p) + ==> (i * (t * x) * (t * y) == t * x * y) (mod p)`) THEN + REWRITE_TAC[GSYM num_congruent; INT_OF_NUM_CLAUSES] THEN + REWRITE_TAC[INVERSE_MOD_LMUL_EQ; COPRIME_REXP; COPRIME_2; p_256] THEN + CONV_TAC NUM_REDUCE_CONV);; + +let lvs = + ["x_1",[`X16`;`0`]; + "y_1",[`X16`;`32`]; + "z_1",[`X16`;`64`]; + "x_2",[`X17`;`0`]; + "y_2",[`X17`;`32`]; + "z_2",[`X17`;`64`]; + "x_3",[`X15`;`0`]; + "y_3",[`X15`;`32`]; + "z_3",[`X15`;`64`]; + "z1sq",[`SP`;`0`]; + "ww",[`SP`;`0`]; + "yd",[`SP`;`32`]; + "y2a",[`SP`;`32`]; + "x2a",[`SP`;`64`]; + "zzx2",[`SP`;`64`]; + "zz",[`SP`;`96`]; + "t1",[`SP`;`96`]; + "t2",[`SP`;`128`]; + "x1a",[`SP`;`128`]; + "zzx1",[`SP`;`128`]; + "xd",[`SP`;`160`]; + "z2sq",[`SP`;`160`]; + "y1a",[`SP`;`192`]];; + +(* ------------------------------------------------------------------------- *) +(* Instances of montsqr. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_MONTSQR_P256_TAC = + ARM_MACRO_SIM_ABBREV_TAC p256_montjadd_mc 95 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1. + !a. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = a + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0x1df4) (word_add (read p3 t) (word n3),32) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p256_montjadd_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X15 s = read X15 t /\ + read X16 s = read X16 t /\ + read X17 s = read X17 t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) s = + a) + (\s. read PC s = pcout /\ + (a EXP 2 <= 2 EXP 256 * p_256 + ==> read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 4)) s = + (inverse_mod p_256 (2 EXP 256) * a EXP 2) MOD p_256)) + (MAYCHANGE [PC; X0; X1; X2; X3; X4; X5; X6; X7; X8; X9; X10; X11; X12; + X13; X14] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 4)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + (*** Globalize the a EXP 2 <= 2 EXP 256 * p_256 assumption ***) + + ASM_CASES_TAC `a EXP 2 <= 2 EXP 256 * p_256` THENL + [ASM_REWRITE_TAC[]; ARM_SIM_TAC P256_MONTJADD_EXEC (1--95)] THEN + ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "x_" o lhand o concl) THEN + + (*** Simulate the core pre-reduced result accumulation ***) + + ARM_ACCSTEPS_TAC P256_MONTJADD_EXEC (1--82) (1--82) THEN + RULE_ASSUM_TAC(REWRITE_RULE[COND_SWAP; GSYM WORD_BITVAL]) THEN + ABBREV_TAC + `t = bignum_of_wordlist + [sum_s78; sum_s79; sum_s80; sum_s81; word(bitval carry_s81)]` THEN + SUBGOAL_THEN + `t < 2 * p_256 /\ (2 EXP 256 * t == a EXP 2) (mod p_256)` + STRIP_ASSUME_TAC THENL + [ACCUMULATOR_POP_ASSUM_LIST + (STRIP_ASSUME_TAC o end_itlist CONJ o DECARRY_RULE) THEN + CONJ_TAC THENL + [FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP (ARITH_RULE + `ab <= 2 EXP 256 * p + ==> 2 EXP 256 * t < ab + 2 EXP 256 * p ==> t < 2 * p`)) THEN + MAP_EVERY EXPAND_TAC ["a"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + REWRITE_TAC[p_256; REAL_ARITH `a:real < b + c <=> a - b < c`] THEN + ASM_REWRITE_TAC[VAL_WORD_BITVAL] THEN BOUNDER_TAC[]; + REWRITE_TAC[REAL_CONGRUENCE; p_256] THEN CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["a"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ASM_REWRITE_TAC[VAL_WORD_BITVAL] THEN REAL_INTEGER_TAC]; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Final correction stage ***) + + ARM_ACCSTEPS_TAC P256_MONTJADD_EXEC (85--89) (83--95) THEN + RULE_ASSUM_TAC(REWRITE_RULE + [GSYM WORD_BITVAL; COND_SWAP; REAL_BITVAL_NOT]) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + TRANS_TAC EQ_TRANS `t MOD p_256` THEN CONJ_TAC THENL + [ALL_TAC; + REWRITE_TAC[GSYM CONG] THEN FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP + (NUMBER_RULE + `(e * t == a EXP 2) (mod p) + ==> (e * i == 1) (mod p) ==> (t == i * a EXP 2) (mod p)`)) THEN + REWRITE_TAC[INVERSE_MOD_RMUL_EQ; COPRIME_REXP; COPRIME_2] THEN + REWRITE_TAC[p_256] THEN CONV_TAC NUM_REDUCE_CONV] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC EQUAL_FROM_CONGRUENT_MOD_MOD THEN + MAP_EVERY EXISTS_TAC + [`256`; `if t < p_256 then &t:real else &t - &p_256`] THEN + REPEAT CONJ_TAC THENL + [REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN BOUNDER_TAC[]; + REWRITE_TAC[p_256] THEN ARITH_TAC; + REWRITE_TAC[p_256] THEN ARITH_TAC; + ALL_TAC; + ASM_SIMP_TAC[MOD_CASES] THEN + GEN_REWRITE_TAC LAND_CONV [COND_RAND] THEN + SIMP_TAC[REAL_OF_NUM_SUB; GSYM NOT_LT]] THEN + SUBGOAL_THEN `carry_s89 <=> t < p_256` SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN EXISTS_TAC `320` THEN + EXPAND_TAC "t" THEN + REWRITE_TAC[p_256; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + CONV_TAC NUM_REDUCE_CONV THEN REWRITE_TAC[VAL_WORD_BITVAL] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ALL_TAC] THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[] THEN EXPAND_TAC "t" THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist; p_256] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + ASM_REWRITE_TAC[BITVAL_CLAUSES; VAL_WORD_BITVAL] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instances of montmul. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_MONTMUL_P256_TAC = + ARM_MACRO_SIM_ABBREV_TAC p256_montjadd_mc 117 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1 p2 n2. + !a. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = a + ==> + !b. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) t = b + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0x1df4) (word_add (read p3 t) (word n3),32) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p256_montjadd_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X15 s = read X15 t /\ + read X16 s = read X16 t /\ + read X17 s = read X17 t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) s = + a /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) s = + b) + (\s. read PC s = pcout /\ + (a * b <= 2 EXP 256 * p_256 + ==> read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 4)) s = + (inverse_mod p_256 (2 EXP 256) * a * b) MOD p_256)) + (MAYCHANGE [PC; X0; X1; X2; X3; X4; X5; X6; X7; X8; X9; X10; X11; X12; + X13; X14] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 4)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + (*** Globalize the a * b <= 2 EXP 256 * p_256 assumption ***) + + ASM_CASES_TAC `a * b <= 2 EXP 256 * p_256` THENL + [ASM_REWRITE_TAC[]; ARM_SIM_TAC P256_MONTJADD_EXEC (1--117)] THEN + ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "y_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "x_" o lhand o concl) THEN + + (*** Simulate the core pre-reduced result accumulation ***) + + ARM_ACCSTEPS_TAC P256_MONTJADD_EXEC (1--104) (1--104) THEN + RULE_ASSUM_TAC(REWRITE_RULE[WORD_UNMASK_64]) THEN + ABBREV_TAC + `t = bignum_of_wordlist + [sum_s100; sum_s101; sum_s102; sum_s103; + word(bitval carry_s103)]` THEN + SUBGOAL_THEN + `t < 2 * p_256 /\ (2 EXP 256 * t == a * b) (mod p_256)` + STRIP_ASSUME_TAC THENL + [ACCUMULATOR_POP_ASSUM_LIST + (STRIP_ASSUME_TAC o end_itlist CONJ o DECARRY_RULE) THEN + CONJ_TAC THENL + [FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP (ARITH_RULE + `ab <= 2 EXP 256 * p + ==> 2 EXP 256 * t < ab + 2 EXP 256 * p ==> t < 2 * p`)) THEN + MAP_EVERY EXPAND_TAC ["a"; "b"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + REWRITE_TAC[p_256; REAL_ARITH `a:real < b + c <=> a - b < c`] THEN + ASM_REWRITE_TAC[VAL_WORD_BITVAL] THEN BOUNDER_TAC[]; + REWRITE_TAC[REAL_CONGRUENCE; p_256] THEN CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["a"; "b"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ASM_REWRITE_TAC[VAL_WORD_BITVAL] THEN REAL_INTEGER_TAC]; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Final correction stage ***) + + ARM_ACCSTEPS_TAC P256_MONTJADD_EXEC (107--111) (105--117) THEN + RULE_ASSUM_TAC(REWRITE_RULE + [GSYM WORD_BITVAL; COND_SWAP; REAL_BITVAL_NOT]) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + TRANS_TAC EQ_TRANS `t MOD p_256` THEN CONJ_TAC THENL + [ALL_TAC; + REWRITE_TAC[GSYM CONG] THEN FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP + (NUMBER_RULE + `(e * t == a * b) (mod p) + ==> (e * i == 1) (mod p) ==> (t == i * a * b) (mod p)`)) THEN + REWRITE_TAC[INVERSE_MOD_RMUL_EQ; COPRIME_REXP; COPRIME_2] THEN + REWRITE_TAC[p_256] THEN CONV_TAC NUM_REDUCE_CONV] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC EQUAL_FROM_CONGRUENT_MOD_MOD THEN + MAP_EVERY EXISTS_TAC + [`256`; `if t < p_256 then &t:real else &t - &p_256`] THEN + REPEAT CONJ_TAC THENL + [REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN BOUNDER_TAC[]; + REWRITE_TAC[p_256] THEN ARITH_TAC; + REWRITE_TAC[p_256] THEN ARITH_TAC; + ALL_TAC; + ASM_SIMP_TAC[MOD_CASES] THEN + GEN_REWRITE_TAC LAND_CONV [COND_RAND] THEN + SIMP_TAC[REAL_OF_NUM_SUB; GSYM NOT_LT]] THEN + SUBGOAL_THEN `carry_s111 <=> t < p_256` SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN EXISTS_TAC `320` THEN + EXPAND_TAC "t" THEN + REWRITE_TAC[p_256; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + CONV_TAC NUM_REDUCE_CONV THEN REWRITE_TAC[VAL_WORD_BITVAL] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ALL_TAC] THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[] THEN EXPAND_TAC "t" THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist; p_256] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + ASM_REWRITE_TAC[BITVAL_CLAUSES; VAL_WORD_BITVAL] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instances of sub. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_SUB_P256_TAC = + ARM_MACRO_SIM_ABBREV_TAC p256_montjadd_mc 19 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) t = n + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0x1df4) (word_add (read p3 t) (word n3),32) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p256_montjadd_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X15 s = read X15 t /\ + read X16 s = read X16 t /\ + read X17 s = read X17 t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) s = + n) + (\s. read PC s = pcout /\ + (m < p_256 /\ n < p_256 + ==> &(read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 4)) s) = (&m - &n) rem &p_256)) + (MAYCHANGE [PC; X3; X4; X5; X6; X7; X8] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 4)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "m_" o lhand o concl) THEN + + ARM_ACCSTEPS_TAC P256_MONTJADD_EXEC (1--8) (1--8) THEN + + SUBGOAL_THEN `carry_s8 <=> m < n` SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN EXISTS_TAC `256` THEN + MAP_EVERY EXPAND_TAC ["m"; "n"] THEN REWRITE_TAC[GSYM REAL_OF_NUM_ADD] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_MUL; GSYM REAL_OF_NUM_POW] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ALL_TAC] THEN + + ARM_STEPS_TAC P256_MONTJADD_EXEC [9] THEN + RULE_ASSUM_TAC(REWRITE_RULE[WORD_UNMASK_64; NOT_LE]) THEN + ARM_ACCSTEPS_TAC P256_MONTJADD_EXEC (10--19) (10--19) THEN + + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN STRIP_TAC THEN + CONV_TAC(LAND_CONV(RAND_CONV BIGNUM_EXPAND_CONV)) THEN + ASM_REWRITE_TAC[] THEN DISCARD_STATE_TAC "s19" THEN + + CONV_TAC SYM_CONV THEN MATCH_MP_TAC INT_REM_UNIQ THEN + EXISTS_TAC `--(&(bitval(m < n))):int` THEN REWRITE_TAC[INT_ABS_NUM] THEN + REWRITE_TAC[INT_ARITH `m - n:int = --b * p + z <=> z = b * p + m - n`] THEN + REWRITE_TAC[int_eq; int_le; int_lt] THEN + REWRITE_TAC[int_add_th; int_mul_th; int_of_num_th; int_sub_th] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_ADD; GSYM REAL_OF_NUM_MUL; + GSYM REAL_OF_NUM_POW] THEN + MATCH_MP_TAC(REAL_ARITH + `!t:real. p < t /\ + (&0 <= a /\ a < p) /\ + (&0 <= z /\ z < t) /\ + ((&0 <= z /\ z < t) /\ (&0 <= a /\ a < t) ==> z = a) + ==> z = a /\ &0 <= z /\ z < p`) THEN + EXISTS_TAC `(&2:real) pow 256` THEN + + CONJ_TAC THENL [REWRITE_TAC[p_256] THEN REAL_ARITH_TAC; ALL_TAC] THEN + CONJ_TAC THENL + [MAP_EVERY UNDISCH_TAC [`m < p_256`; `n < p_256`] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_LT] THEN + ASM_CASES_TAC `&m:real < &n` THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + POP_ASSUM MP_TAC THEN REWRITE_TAC[p_256] THEN REAL_ARITH_TAC; + ALL_TAC] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; STRIP_TAC] THEN + + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`256`; `&0:real`] THEN + ASM_REWRITE_TAC[] THEN + CONJ_TAC THENL [REAL_INTEGER_TAC; ALL_TAC] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + REWRITE_TAC[WORD_AND_MASK] THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC WORD_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["m"; "n"] THEN REWRITE_TAC[GSYM REAL_OF_NUM_ADD] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_MUL; GSYM REAL_OF_NUM_POW; p_256] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + CONV_TAC(RAND_CONV REAL_POLY_CONV) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instances of amontsqr. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_AMONTSQR_P256_TAC = + ARM_MACRO_SIM_ABBREV_TAC p256_montjadd_mc 93 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1. + !a. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = a + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0x1df4) (word_add (read p3 t) (word n3),32) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p256_montjadd_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X15 s = read X15 t /\ + read X16 s = read X16 t /\ + read X17 s = read X17 t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) s = + a) + (\s. read PC s = pcout /\ + read(memory :> bytes(word_add (read p3 t) (word n3),8 * 4)) s + < 2 EXP 256 /\ + (read(memory :> bytes(word_add (read p3 t) (word n3),8 * 4)) s == + inverse_mod p_256 (2 EXP 256) * a EXP 2) (mod p_256)) + (MAYCHANGE [PC; X0; X1; X2; X3; X4; X5; X6; X7; X8; X9; X10; X11; X12; + X13; X14] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 4)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "x_" o lhand o concl) THEN + + (*** Simulate the core pre-reduced result accumulation ***) + + ARM_ACCSTEPS_TAC P256_MONTJADD_EXEC (1--81) (1--81) THEN + RULE_ASSUM_TAC(REWRITE_RULE[COND_SWAP; GSYM WORD_BITVAL]) THEN + ABBREV_TAC + `t = bignum_of_wordlist + [sum_s78; sum_s79; sum_s80; sum_s81; + word(bitval carry_s81)]` THEN + SUBGOAL_THEN + `t < 2 EXP 256 + p_256 /\ (2 EXP 256 * t == a EXP 2) (mod p_256)` + STRIP_ASSUME_TAC THENL + [ACCUMULATOR_POP_ASSUM_LIST + (STRIP_ASSUME_TAC o end_itlist CONJ o DECARRY_RULE) THEN + CONJ_TAC THENL + [MATCH_MP_TAC(ARITH_RULE + `2 EXP 256 * t <= (2 EXP 256 - 1) EXP 2 + (2 EXP 256 - 1) * p + ==> t < 2 EXP 256 + p`) THEN + REWRITE_TAC[p_256] THEN CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["a"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + REWRITE_TAC[p_256; REAL_ARITH `a:real < b + c <=> a - b < c`] THEN + ASM_REWRITE_TAC[VAL_WORD_BITVAL] THEN BOUNDER_TAC[]; + REWRITE_TAC[REAL_CONGRUENCE; p_256] THEN CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["a"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ASM_REWRITE_TAC[VAL_WORD_BITVAL] THEN REAL_INTEGER_TAC]; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Final correction stage ***) + + ARM_ACCSTEPS_TAC P256_MONTJADD_EXEC (88--91) (82--93) THEN + RULE_ASSUM_TAC(REWRITE_RULE + [GSYM WORD_BITVAL; COND_SWAP; REAL_BITVAL_NOT]) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONJ_TAC THENL + [CONV_TAC(ONCE_DEPTH_CONV BIGNUM_EXPAND_CONV) THEN + ASM_REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN BOUNDER_TAC[]; + ALL_TAC] THEN + FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP + (NUMBER_RULE + `(e * t == ab) (mod p) + ==> (e * i == 1) (mod p) /\ (s == t) (mod p) + ==> (s == i * ab) (mod p)`)) THEN + REWRITE_TAC[INVERSE_MOD_RMUL_EQ; COPRIME_REXP; COPRIME_2] THEN + CONJ_TAC THENL + [REWRITE_TAC[p_256] THEN CONV_TAC NUM_REDUCE_CONV; ALL_TAC] THEN + SUBGOAL_THEN `carry_s81 <=> 2 EXP 256 <= t` SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LE THEN EXISTS_TAC `256` THEN + EXPAND_TAC "t" THEN + REWRITE_TAC[p_256; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + CONV_TAC NUM_REDUCE_CONV THEN REWRITE_TAC[VAL_WORD_BITVAL] THEN + REWRITE_TAC[VAL_WORD_BITVAL] THEN BOUNDER_TAC[]; + ABBREV_TAC `b <=> 2 EXP 256 <= t`] THEN + MATCH_MP_TAC(NUMBER_RULE `!b:num. x + b * p = y ==> (x == y) (mod p)`) THEN + EXISTS_TAC `bitval b` THEN REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN + ONCE_REWRITE_TAC[REAL_ARITH `a + b:real = c <=> c - b = a`] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`256`; `&0:real`] THEN CONJ_TAC THENL + [EXPAND_TAC "b" THEN UNDISCH_TAC `t < 2 EXP 256 + p_256` THEN + REWRITE_TAC[bitval; p_256; GSYM REAL_OF_NUM_CLAUSES] THEN REAL_ARITH_TAC; + REWRITE_TAC[INTEGER_CLOSED]] THEN + CONJ_TAC THENL + [CONV_TAC(ONCE_DEPTH_CONV BIGNUM_EXPAND_CONV) THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN BOUNDER_TAC[]; + ALL_TAC] THEN + CONV_TAC(ONCE_DEPTH_CONV BIGNUM_EXPAND_CONV) THEN + EXPAND_TAC "t" THEN REWRITE_TAC[bignum_of_wordlist] THEN + ASM_REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN + ACCUMULATOR_POP_ASSUM_LIST (MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + BOOL_CASES_TAC `b:bool` THEN REWRITE_TAC[BITVAL_CLAUSES; p_256] THEN + CONV_TAC WORD_REDUCE_CONV THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Overall point operation proof. *) +(* ------------------------------------------------------------------------- *) + +let P256_MONTJADD_CORRECT = time prove + (`!p3 p1 t1 p2 t2 pc stackpointer. + aligned 16 stackpointer /\ + ALLPAIRS nonoverlapping + [(p3,96); (stackpointer,224)] + [(word pc,0x1df4); (p1,96); (p2,96)] /\ + nonoverlapping (p3,96) (stackpointer,224) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p256_montjadd_mc /\ + read PC s = word(pc + 0x4) /\ + read SP s = stackpointer /\ + C_ARGUMENTS [p3; p1; p2] s /\ + bignum_triple_from_memory (p1,4) s = t1 /\ + bignum_triple_from_memory (p2,4) s = t2) + (\s. read PC s = word (pc + 0x1dec) /\ + (!x1 y1 z1 x2 y2 z2. + ~(z1 = &0) /\ ~(z2 = &0) /\ + ~(jacobian_eq (integer_mod_ring p_256) + (x1,y1,z1) (x2,y2,z2)) /\ + ~(jacobian_eq (integer_mod_ring p_256) + (jacobian_neg nistp256 (x1,y1,z1)) + (x2,y2,z2)) /\ + t1 = tripled nistp256_encode (x1,y1,z1) /\ + t2 = tripled nistp256_encode (x2,y2,z2) + ==> bignum_triple_from_memory(p3,4) s = + tripled nistp256_encode + (jacobian_add nistp256 (x1,y1,z1) (x2,y2,z2)))) + (MAYCHANGE [PC; X0; X1; X2; X3; X4; X5; X6; X7; X8; X9; X10; + X11; X12; X13; X14; X15; X16; X17] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,96); + memory :> bytes(stackpointer,224)])`, + REWRITE_TAC[FORALL_PAIR_THM] THEN + MAP_EVERY X_GEN_TAC + [`p3:int64`; `p1:int64`; `x1:num`; `y1:num`; `z1:num`; `p2:int64`; + `x2:num`; `y2:num`; `z2:num`; `pc:num`; `stackpointer:int64`] THEN + REWRITE_TAC[ALLPAIRS; ALL; NONOVERLAPPING_CLAUSES] THEN STRIP_TAC THEN + REWRITE_TAC[C_ARGUMENTS; SOME_FLAGS; PAIR_EQ; bignum_triple_from_memory] THEN + CONV_TAC(ONCE_DEPTH_CONV NUM_MULT_CONV) THEN + CONV_TAC(ONCE_DEPTH_CONV NORMALIZE_RELATIVE_ADDRESS_CONV) THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + + LOCAL_AMONTSQR_P256_TAC 3 ["z1sq";"z_1"] THEN + LOCAL_AMONTSQR_P256_TAC 0 ["z2sq";"z_2"] THEN + LOCAL_MONTMUL_P256_TAC 0 ["y1a";"z_2";"y_1"] THEN + LOCAL_MONTMUL_P256_TAC 0 ["y2a";"z_1";"y_2"] THEN + LOCAL_MONTMUL_P256_TAC 0 ["x2a";"z1sq";"x_2"] THEN + LOCAL_MONTMUL_P256_TAC 0 ["x1a";"z2sq";"x_1"] THEN + LOCAL_MONTMUL_P256_TAC 0 ["y2a";"z1sq";"y2a"] THEN + LOCAL_MONTMUL_P256_TAC 0 ["y1a";"z2sq";"y1a"] THEN + LOCAL_SUB_P256_TAC 0 ["xd";"x2a";"x1a"] THEN + LOCAL_SUB_P256_TAC 0 ["yd";"y2a";"y1a"] THEN + LOCAL_AMONTSQR_P256_TAC 0 ["zz";"xd"] THEN + LOCAL_MONTSQR_P256_TAC 0 ["ww";"yd"] THEN + LOCAL_MONTMUL_P256_TAC 0 ["zzx1";"zz";"x1a"] THEN + LOCAL_MONTMUL_P256_TAC 0 ["zzx2";"zz";"x2a"] THEN + LOCAL_SUB_P256_TAC 0 ["x_3";"ww";"zzx1"] THEN + LOCAL_SUB_P256_TAC 0 ["t1";"zzx2";"zzx1"] THEN + LOCAL_MONTMUL_P256_TAC 0 ["xd";"xd";"z_1"] THEN + LOCAL_SUB_P256_TAC 0 ["x_3";"x_3";"zzx2"] THEN + LOCAL_SUB_P256_TAC 0 ["t2";"zzx1";"x_3"] THEN + LOCAL_MONTMUL_P256_TAC 0 ["t1";"t1";"y1a"] THEN + LOCAL_MONTMUL_P256_TAC 0 ["z_3";"xd";"z_2"] THEN + LOCAL_MONTMUL_P256_TAC 0 ["t2";"yd";"t2"] THEN + LOCAL_SUB_P256_TAC 0 ["y_3";"t2";"t1"] THEN + + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + DISCARD_STATE_TAC "s26" THEN + DISCARD_MATCHING_ASSUMPTIONS [`nonoverlapping_modulo a b c`] THEN + + MAP_EVERY X_GEN_TAC + [`x1':int`; `y1':int`; `z1':int`; `x2':int`; `y2':int`; `z2':int`] THEN + REPLICATE_TAC 4 (DISCH_THEN(CONJUNCTS_THEN2 ASSUME_TAC MP_TAC)) THEN + REWRITE_TAC[tripled; nistp256_encode; montgomery_encode; PAIR_EQ] THEN + + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN + (STRIP_ASSUME_TAC o MATCH_MP unilemma2)) THEN + + REPEAT(FIRST_X_ASSUM(MP_TAC o check (is_imp o concl))) THEN + REPEAT(ANTS_TAC THENL + [REWRITE_TAC[p_256] THEN RULE_ASSUM_TAC(REWRITE_RULE[p_256]) THEN + CONV_TAC NUM_REDUCE_CONV THEN ASM BOUNDER_TAC[]; + (DISCH_THEN(STRIP_ASSUME_TAC o MATCH_MP unilemma0) ORELSE + DISCH_THEN(STRIP_ASSUME_TAC o MATCH_MP unilemma1))]) THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o GEN_REWRITE_RULE I [GSYM NOT_LE])) THEN + + RULE_ASSUM_TAC(REWRITE_RULE + [num_congruent; GSYM INT_OF_NUM_CLAUSES; GSYM INT_OF_NUM_REM]) THEN + RULE_ASSUM_TAC(REWRITE_RULE[GSYM INT_REM_EQ]) THEN + RULE_ASSUM_TAC(ONCE_REWRITE_RULE[GSYM INT_SUB_REM; GSYM INT_ADD_REM]) THEN + RULE_ASSUM_TAC(REWRITE_RULE[INT_POW_2]) THEN + RULE_ASSUM_TAC(GEN_REWRITE_RULE (RAND_CONV o TRY_CONV) [lemont]) THEN + + ASM_REWRITE_TAC[jacobian_add; nistp256] THEN + ASM_REWRITE_TAC[GSYM nistp256] THEN + REWRITE_TAC[INTEGER_MOD_RING_CLAUSES] THEN + CONV_TAC INT_REDUCE_CONV THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN + CONV_TAC INT_REM_DOWN_CONV THEN + REWRITE_TAC[tripled; nistp256_encode; montgomery_encode] THEN + REWRITE_TAC[PAIR_EQ; GSYM INT_OF_NUM_EQ; nintlemma] THEN + CONV_TAC INT_REM_DOWN_CONV THEN + + ASM_REWRITE_TAC[pumont; INT_REM_REM; GSYM INT_ADD_LDISTRIB; + GSYM INT_ADD_LDISTRIB; GSYM INT_SUB_LDISTRIB; + INT_SUB_REM; INT_ADD_REM] THEN + + REPEAT CONJ_TAC THEN AP_THM_TAC THEN AP_TERM_TAC THEN AP_TERM_TAC THEN + INT_ARITH_TAC);; + +let P256_MONTJADD_SUBROUTINE_CORRECT = time prove + (`!p3 p1 t1 p2 t2 pc stackpointer returnaddress. + aligned 16 stackpointer /\ + ALLPAIRS nonoverlapping + [(p3,96); (word_sub stackpointer (word 224),224)] + [(word pc,0x1df4); (p1,96); (p2,96)] /\ + nonoverlapping (p3,96) (word_sub stackpointer (word 224),224) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p256_montjadd_mc /\ + read PC s = word pc /\ + read SP s = stackpointer /\ + read X30 s = returnaddress /\ + C_ARGUMENTS [p3; p1; p2] s /\ + bignum_triple_from_memory (p1,4) s = t1 /\ + bignum_triple_from_memory (p2,4) s = t2) + (\s. read PC s = returnaddress /\ + (!x1 y1 z1 x2 y2 z2. + ~(z1 = &0) /\ ~(z2 = &0) /\ + ~(jacobian_eq (integer_mod_ring p_256) + (x1,y1,z1) (x2,y2,z2)) /\ + ~(jacobian_eq (integer_mod_ring p_256) + (jacobian_neg nistp256 (x1,y1,z1)) + (x2,y2,z2)) /\ + t1 = tripled nistp256_encode (x1,y1,z1) /\ + t2 = tripled nistp256_encode (x2,y2,z2) + ==> bignum_triple_from_memory(p3,4) s = + tripled nistp256_encode + (jacobian_add nistp256 (x1,y1,z1) (x2,y2,z2)))) + (MAYCHANGE [PC; X0; X1; X2; X3; X4; X5; X6; X7; X8; X9; X10; + X11; X12; X13; X14; X15; X16; X17] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,96); + memory :> bytes(word_sub stackpointer (word 224),224)])`, + ARM_ADD_RETURN_STACK_TAC P256_MONTJADD_EXEC + P256_MONTJADD_CORRECT `[]` 224);; diff --git a/arm/proofs/p256_montjdouble.ml b/arm/proofs/p256_montjdouble.ml new file mode 100644 index 0000000000..18956c98d3 --- /dev/null +++ b/arm/proofs/p256_montjdouble.ml @@ -0,0 +1,2364 @@ +(* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + *) + +(* ========================================================================= *) +(* Point doubling in Montgomery-Jacobian coordinates for NIST P-256 curve. *) +(* ========================================================================= *) + +needs "arm/proofs/base.ml";; +needs "common/ecencoding.ml";; +needs "EC/jacobian.ml";; +needs "EC/nistp256.ml";; + +prioritize_int();; +prioritize_real();; +prioritize_num();; + +(**** print_literal_from_elf "arm/p256/p256_montjdouble.o";; + ****) + +let p256_montjdouble_mc = define_assert_from_elf + "p256_montjdouble_mc" "arm/p256/p256_montjdouble.o" +[ + 0xd10383ff; (* arm_SUB SP SP (rvalue (word 224)) *) + 0xaa0003ef; (* arm_MOV X15 X0 *) + 0xaa0103f0; (* arm_MOV X16 X1 *) + 0xa9440e02; (* arm_LDP X2 X3 X16 (Immediate_Offset (iword (&64))) *) + 0x9b037c49; (* arm_MUL X9 X2 X3 *) + 0x9bc37c4a; (* arm_UMULH X10 X2 X3 *) + 0xa9451604; (* arm_LDP X4 X5 X16 (Immediate_Offset (iword (&80))) *) + 0x9b057c4b; (* arm_MUL X11 X2 X5 *) + 0x9bc57c4c; (* arm_UMULH X12 X2 X5 *) + 0x9b047c46; (* arm_MUL X6 X2 X4 *) + 0x9bc47c47; (* arm_UMULH X7 X2 X4 *) + 0xab06014a; (* arm_ADDS X10 X10 X6 *) + 0xba07016b; (* arm_ADCS X11 X11 X7 *) + 0x9b047c66; (* arm_MUL X6 X3 X4 *) + 0x9bc47c67; (* arm_UMULH X7 X3 X4 *) + 0x9a1f00e7; (* arm_ADC X7 X7 XZR *) + 0xab06016b; (* arm_ADDS X11 X11 X6 *) + 0x9b057c8d; (* arm_MUL X13 X4 X5 *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xba07018c; (* arm_ADCS X12 X12 X7 *) + 0x9b057c66; (* arm_MUL X6 X3 X5 *) + 0x9bc57c67; (* arm_UMULH X7 X3 X5 *) + 0x9a1f00e7; (* arm_ADC X7 X7 XZR *) + 0xab06018c; (* arm_ADDS X12 X12 X6 *) + 0xba0701ad; (* arm_ADCS X13 X13 X7 *) + 0x9a1f01ce; (* arm_ADC X14 X14 XZR *) + 0xab090129; (* arm_ADDS X9 X9 X9 *) + 0xba0a014a; (* arm_ADCS X10 X10 X10 *) + 0xba0b016b; (* arm_ADCS X11 X11 X11 *) + 0xba0c018c; (* arm_ADCS X12 X12 X12 *) + 0xba0d01ad; (* arm_ADCS X13 X13 X13 *) + 0xba0e01ce; (* arm_ADCS X14 X14 X14 *) + 0x9a9f37e7; (* arm_CSET X7 Condition_CS *) + 0x9bc27c46; (* arm_UMULH X6 X2 X2 *) + 0x9b027c48; (* arm_MUL X8 X2 X2 *) + 0xab060129; (* arm_ADDS X9 X9 X6 *) + 0x9b037c66; (* arm_MUL X6 X3 X3 *) + 0xba06014a; (* arm_ADCS X10 X10 X6 *) + 0x9bc37c66; (* arm_UMULH X6 X3 X3 *) + 0xba06016b; (* arm_ADCS X11 X11 X6 *) + 0x9b047c86; (* arm_MUL X6 X4 X4 *) + 0xba06018c; (* arm_ADCS X12 X12 X6 *) + 0x9bc47c86; (* arm_UMULH X6 X4 X4 *) + 0xba0601ad; (* arm_ADCS X13 X13 X6 *) + 0x9b057ca6; (* arm_MUL X6 X5 X5 *) + 0xba0601ce; (* arm_ADCS X14 X14 X6 *) + 0x9bc57ca6; (* arm_UMULH X6 X5 X5 *) + 0x9a0600e7; (* arm_ADC X7 X7 X6 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0xab088129; (* arm_ADDS X9 X9 (Shiftedreg X8 LSL 32) *) + 0xd360fd03; (* arm_LSR X3 X8 32 *) + 0xba03014a; (* arm_ADCS X10 X10 X3 *) + 0x9b057d02; (* arm_MUL X2 X8 X5 *) + 0x9bc57d08; (* arm_UMULH X8 X8 X5 *) + 0xba02016b; (* arm_ADCS X11 X11 X2 *) + 0x9a1f0108; (* arm_ADC X8 X8 XZR *) + 0xab09814a; (* arm_ADDS X10 X10 (Shiftedreg X9 LSL 32) *) + 0xd360fd23; (* arm_LSR X3 X9 32 *) + 0xba03016b; (* arm_ADCS X11 X11 X3 *) + 0x9b057d22; (* arm_MUL X2 X9 X5 *) + 0x9bc57d29; (* arm_UMULH X9 X9 X5 *) + 0xba020108; (* arm_ADCS X8 X8 X2 *) + 0x9a1f0129; (* arm_ADC X9 X9 XZR *) + 0xab0a816b; (* arm_ADDS X11 X11 (Shiftedreg X10 LSL 32) *) + 0xd360fd43; (* arm_LSR X3 X10 32 *) + 0xba030108; (* arm_ADCS X8 X8 X3 *) + 0x9b057d42; (* arm_MUL X2 X10 X5 *) + 0x9bc57d4a; (* arm_UMULH X10 X10 X5 *) + 0xba020129; (* arm_ADCS X9 X9 X2 *) + 0x9a1f014a; (* arm_ADC X10 X10 XZR *) + 0xab0b8108; (* arm_ADDS X8 X8 (Shiftedreg X11 LSL 32) *) + 0xd360fd63; (* arm_LSR X3 X11 32 *) + 0xba030129; (* arm_ADCS X9 X9 X3 *) + 0x9b057d62; (* arm_MUL X2 X11 X5 *) + 0x9bc57d6b; (* arm_UMULH X11 X11 X5 *) + 0xba02014a; (* arm_ADCS X10 X10 X2 *) + 0x9a1f016b; (* arm_ADC X11 X11 XZR *) + 0xab0c0108; (* arm_ADDS X8 X8 X12 *) + 0xba0d0129; (* arm_ADCS X9 X9 X13 *) + 0xba0e014a; (* arm_ADCS X10 X10 X14 *) + 0xba07016b; (* arm_ADCS X11 X11 X7 *) + 0x9a9f37e2; (* arm_CSET X2 Condition_CS *) + 0xb2407fe3; (* arm_MOV X3 (rvalue (word 4294967295)) *) + 0xb100050c; (* arm_ADDS X12 X8 (rvalue (word 1)) *) + 0xfa03012d; (* arm_SBCS X13 X9 X3 *) + 0xfa1f014e; (* arm_SBCS X14 X10 XZR *) + 0xfa050167; (* arm_SBCS X7 X11 X5 *) + 0xfa1f005f; (* arm_SBCS XZR X2 XZR *) + 0x9a8c3108; (* arm_CSEL X8 X8 X12 Condition_CC *) + 0x9a8d3129; (* arm_CSEL X9 X9 X13 Condition_CC *) + 0x9a8e314a; (* arm_CSEL X10 X10 X14 Condition_CC *) + 0x9a87316b; (* arm_CSEL X11 X11 X7 Condition_CC *) + 0xa90027e8; (* arm_STP X8 X9 SP (Immediate_Offset (iword (&0))) *) + 0xa9012fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&16))) *) + 0xa9420e02; (* arm_LDP X2 X3 X16 (Immediate_Offset (iword (&32))) *) + 0x9b037c49; (* arm_MUL X9 X2 X3 *) + 0x9bc37c4a; (* arm_UMULH X10 X2 X3 *) + 0xa9431604; (* arm_LDP X4 X5 X16 (Immediate_Offset (iword (&48))) *) + 0x9b057c4b; (* arm_MUL X11 X2 X5 *) + 0x9bc57c4c; (* arm_UMULH X12 X2 X5 *) + 0x9b047c46; (* arm_MUL X6 X2 X4 *) + 0x9bc47c47; (* arm_UMULH X7 X2 X4 *) + 0xab06014a; (* arm_ADDS X10 X10 X6 *) + 0xba07016b; (* arm_ADCS X11 X11 X7 *) + 0x9b047c66; (* arm_MUL X6 X3 X4 *) + 0x9bc47c67; (* arm_UMULH X7 X3 X4 *) + 0x9a1f00e7; (* arm_ADC X7 X7 XZR *) + 0xab06016b; (* arm_ADDS X11 X11 X6 *) + 0x9b057c8d; (* arm_MUL X13 X4 X5 *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xba07018c; (* arm_ADCS X12 X12 X7 *) + 0x9b057c66; (* arm_MUL X6 X3 X5 *) + 0x9bc57c67; (* arm_UMULH X7 X3 X5 *) + 0x9a1f00e7; (* arm_ADC X7 X7 XZR *) + 0xab06018c; (* arm_ADDS X12 X12 X6 *) + 0xba0701ad; (* arm_ADCS X13 X13 X7 *) + 0x9a1f01ce; (* arm_ADC X14 X14 XZR *) + 0xab090129; (* arm_ADDS X9 X9 X9 *) + 0xba0a014a; (* arm_ADCS X10 X10 X10 *) + 0xba0b016b; (* arm_ADCS X11 X11 X11 *) + 0xba0c018c; (* arm_ADCS X12 X12 X12 *) + 0xba0d01ad; (* arm_ADCS X13 X13 X13 *) + 0xba0e01ce; (* arm_ADCS X14 X14 X14 *) + 0x9a9f37e7; (* arm_CSET X7 Condition_CS *) + 0x9bc27c46; (* arm_UMULH X6 X2 X2 *) + 0x9b027c48; (* arm_MUL X8 X2 X2 *) + 0xab060129; (* arm_ADDS X9 X9 X6 *) + 0x9b037c66; (* arm_MUL X6 X3 X3 *) + 0xba06014a; (* arm_ADCS X10 X10 X6 *) + 0x9bc37c66; (* arm_UMULH X6 X3 X3 *) + 0xba06016b; (* arm_ADCS X11 X11 X6 *) + 0x9b047c86; (* arm_MUL X6 X4 X4 *) + 0xba06018c; (* arm_ADCS X12 X12 X6 *) + 0x9bc47c86; (* arm_UMULH X6 X4 X4 *) + 0xba0601ad; (* arm_ADCS X13 X13 X6 *) + 0x9b057ca6; (* arm_MUL X6 X5 X5 *) + 0xba0601ce; (* arm_ADCS X14 X14 X6 *) + 0x9bc57ca6; (* arm_UMULH X6 X5 X5 *) + 0x9a0600e7; (* arm_ADC X7 X7 X6 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0xab088129; (* arm_ADDS X9 X9 (Shiftedreg X8 LSL 32) *) + 0xd360fd03; (* arm_LSR X3 X8 32 *) + 0xba03014a; (* arm_ADCS X10 X10 X3 *) + 0x9b057d02; (* arm_MUL X2 X8 X5 *) + 0x9bc57d08; (* arm_UMULH X8 X8 X5 *) + 0xba02016b; (* arm_ADCS X11 X11 X2 *) + 0x9a1f0108; (* arm_ADC X8 X8 XZR *) + 0xab09814a; (* arm_ADDS X10 X10 (Shiftedreg X9 LSL 32) *) + 0xd360fd23; (* arm_LSR X3 X9 32 *) + 0xba03016b; (* arm_ADCS X11 X11 X3 *) + 0x9b057d22; (* arm_MUL X2 X9 X5 *) + 0x9bc57d29; (* arm_UMULH X9 X9 X5 *) + 0xba020108; (* arm_ADCS X8 X8 X2 *) + 0x9a1f0129; (* arm_ADC X9 X9 XZR *) + 0xab0a816b; (* arm_ADDS X11 X11 (Shiftedreg X10 LSL 32) *) + 0xd360fd43; (* arm_LSR X3 X10 32 *) + 0xba030108; (* arm_ADCS X8 X8 X3 *) + 0x9b057d42; (* arm_MUL X2 X10 X5 *) + 0x9bc57d4a; (* arm_UMULH X10 X10 X5 *) + 0xba020129; (* arm_ADCS X9 X9 X2 *) + 0x9a1f014a; (* arm_ADC X10 X10 XZR *) + 0xab0b8108; (* arm_ADDS X8 X8 (Shiftedreg X11 LSL 32) *) + 0xd360fd63; (* arm_LSR X3 X11 32 *) + 0xba030129; (* arm_ADCS X9 X9 X3 *) + 0x9b057d62; (* arm_MUL X2 X11 X5 *) + 0x9bc57d6b; (* arm_UMULH X11 X11 X5 *) + 0xba02014a; (* arm_ADCS X10 X10 X2 *) + 0x9a1f016b; (* arm_ADC X11 X11 XZR *) + 0xab0c0108; (* arm_ADDS X8 X8 X12 *) + 0xba0d0129; (* arm_ADCS X9 X9 X13 *) + 0xba0e014a; (* arm_ADCS X10 X10 X14 *) + 0xba07016b; (* arm_ADCS X11 X11 X7 *) + 0x9a9f37e2; (* arm_CSET X2 Condition_CS *) + 0xb2407fe3; (* arm_MOV X3 (rvalue (word 4294967295)) *) + 0xb100050c; (* arm_ADDS X12 X8 (rvalue (word 1)) *) + 0xfa03012d; (* arm_SBCS X13 X9 X3 *) + 0xfa1f014e; (* arm_SBCS X14 X10 XZR *) + 0xfa050167; (* arm_SBCS X7 X11 X5 *) + 0xfa1f005f; (* arm_SBCS XZR X2 XZR *) + 0x9a8c3108; (* arm_CSEL X8 X8 X12 Condition_CC *) + 0x9a8d3129; (* arm_CSEL X9 X9 X13 Condition_CC *) + 0x9a8e314a; (* arm_CSEL X10 X10 X14 Condition_CC *) + 0x9a87316b; (* arm_CSEL X11 X11 X7 Condition_CC *) + 0xa90227e8; (* arm_STP X8 X9 SP (Immediate_Offset (iword (&32))) *) + 0xa9032fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&48))) *) + 0xa9401a05; (* arm_LDP X5 X6 X16 (Immediate_Offset (iword (&0))) *) + 0xa9400fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&0))) *) + 0xab0400a5; (* arm_ADDS X5 X5 X4 *) + 0xba0300c6; (* arm_ADCS X6 X6 X3 *) + 0xa9412207; (* arm_LDP X7 X8 X16 (Immediate_Offset (iword (&16))) *) + 0xa9410fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&16))) *) + 0xba0400e7; (* arm_ADCS X7 X7 X4 *) + 0xba030108; (* arm_ADCS X8 X8 X3 *) + 0xda9f33e3; (* arm_CSETM X3 Condition_CS *) + 0xeb0300a5; (* arm_SUBS X5 X5 X3 *) + 0x92407c61; (* arm_AND X1 X3 (rvalue (word 4294967295)) *) + 0xfa0100c6; (* arm_SBCS X6 X6 X1 *) + 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) + 0x92608062; (* arm_AND X2 X3 (rvalue (word 18446744069414584321)) *) + 0xda020108; (* arm_SBC X8 X8 X2 *) + 0xa90a1be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&160))) *) + 0xa90b23e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&176))) *) + 0xa9401a05; (* arm_LDP X5 X6 X16 (Immediate_Offset (iword (&0))) *) + 0xa9400fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&0))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa9412207; (* arm_LDP X7 X8 X16 (Immediate_Offset (iword (&16))) *) + 0xa9410fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&16))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xda9f23e3; (* arm_CSETM X3 Condition_CC *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0x92407c64; (* arm_AND X4 X3 (rvalue (word 4294967295)) *) + 0xba0400c6; (* arm_ADCS X6 X6 X4 *) + 0xba1f00e7; (* arm_ADCS X7 X7 XZR *) + 0x92608064; (* arm_AND X4 X3 (rvalue (word 18446744069414584321)) *) + 0x9a040108; (* arm_ADC X8 X8 X4 *) + 0xa9081be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&128))) *) + 0xa90923e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&144))) *) + 0xa94a13e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&160))) *) + 0xa94823e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&128))) *) + 0x9b077c6c; (* arm_MUL X12 X3 X7 *) + 0x9bc77c6d; (* arm_UMULH X13 X3 X7 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa9492be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&144))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c60; (* arm_UMULH X0 X3 X9 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c61; (* arm_UMULH X1 X3 X10 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0xa94b1be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&176))) *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bca7c83; (* arm_UMULH X3 X4 X10 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9b077cab; (* arm_MUL X11 X5 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b087cab; (* arm_MUL X11 X5 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b097cab; (* arm_MUL X11 X5 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b0a7cab; (* arm_MUL X11 X5 X10 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bca7ca4; (* arm_UMULH X4 X5 X10 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9bc77cab; (* arm_UMULH X11 X5 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9bc87cab; (* arm_UMULH X11 X5 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bc97cab; (* arm_UMULH X11 X5 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b077ccb; (* arm_MUL X11 X6 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9b087ccb; (* arm_MUL X11 X6 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b097ccb; (* arm_MUL X11 X6 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9b0a7ccb; (* arm_MUL X11 X6 X10 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9bca7cc5; (* arm_UMULH X5 X6 X10 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0x9bc77ccb; (* arm_UMULH X11 X6 X7 *) + 0xab0b0021; (* arm_ADDS X1 X1 X11 *) + 0x9bc87ccb; (* arm_UMULH X11 X6 X8 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bc97ccb; (* arm_UMULH X11 X6 X9 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0xd3607d8b; (* arm_LSL X11 X12 32 *) + 0xeb0b0182; (* arm_SUBS X2 X12 X11 *) + 0xd360fd86; (* arm_LSR X6 X12 32 *) + 0xda06018c; (* arm_SBC X12 X12 X6 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xba0601ce; (* arm_ADCS X14 X14 X6 *) + 0xba020000; (* arm_ADCS X0 X0 X2 *) + 0x9a1f018c; (* arm_ADC X12 X12 XZR *) + 0xd3607dab; (* arm_LSL X11 X13 32 *) + 0xeb0b01a2; (* arm_SUBS X2 X13 X11 *) + 0xd360fda6; (* arm_LSR X6 X13 32 *) + 0xda0601ad; (* arm_SBC X13 X13 X6 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0xba060000; (* arm_ADCS X0 X0 X6 *) + 0xba02018c; (* arm_ADCS X12 X12 X2 *) + 0x9a1f01ad; (* arm_ADC X13 X13 XZR *) + 0xd3607dcb; (* arm_LSL X11 X14 32 *) + 0xeb0b01c2; (* arm_SUBS X2 X14 X11 *) + 0xd360fdc6; (* arm_LSR X6 X14 32 *) + 0xda0601ce; (* arm_SBC X14 X14 X6 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0xba06018c; (* arm_ADCS X12 X12 X6 *) + 0xba0201ad; (* arm_ADCS X13 X13 X2 *) + 0x9a1f01ce; (* arm_ADC X14 X14 XZR *) + 0xd3607c0b; (* arm_LSL X11 X0 32 *) + 0xeb0b0002; (* arm_SUBS X2 X0 X11 *) + 0xd360fc06; (* arm_LSR X6 X0 32 *) + 0xda060000; (* arm_SBC X0 X0 X6 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0xba0601ad; (* arm_ADCS X13 X13 X6 *) + 0xba0201ce; (* arm_ADCS X14 X14 X2 *) + 0x9a1f0000; (* arm_ADC X0 X0 XZR *) + 0xab01018c; (* arm_ADDS X12 X12 X1 *) + 0xba0301ad; (* arm_ADCS X13 X13 X3 *) + 0xba0401ce; (* arm_ADCS X14 X14 X4 *) + 0xba050000; (* arm_ADCS X0 X0 X5 *) + 0x9a9f37e2; (* arm_CSET X2 Condition_CS *) + 0xb2407feb; (* arm_MOV X11 (rvalue (word 4294967295)) *) + 0xb26083e6; (* arm_MOV X6 (rvalue (word 18446744069414584321)) *) + 0xb1000581; (* arm_ADDS X1 X12 (rvalue (word 1)) *) + 0xfa0b01a3; (* arm_SBCS X3 X13 X11 *) + 0xfa1f01c4; (* arm_SBCS X4 X14 XZR *) + 0xfa060005; (* arm_SBCS X5 X0 X6 *) + 0xfa1f005f; (* arm_SBCS XZR X2 XZR *) + 0x9a81318c; (* arm_CSEL X12 X12 X1 Condition_CC *) + 0x9a8331ad; (* arm_CSEL X13 X13 X3 Condition_CC *) + 0x9a8431ce; (* arm_CSEL X14 X14 X4 Condition_CC *) + 0x9a853000; (* arm_CSEL X0 X0 X5 Condition_CC *) + 0xa90437ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&64))) *) + 0xa90503ee; (* arm_STP X14 X0 SP (Immediate_Offset (iword (&80))) *) + 0xa9421a05; (* arm_LDP X5 X6 X16 (Immediate_Offset (iword (&32))) *) + 0xa9440e04; (* arm_LDP X4 X3 X16 (Immediate_Offset (iword (&64))) *) + 0xab0400a5; (* arm_ADDS X5 X5 X4 *) + 0xba0300c6; (* arm_ADCS X6 X6 X3 *) + 0xa9432207; (* arm_LDP X7 X8 X16 (Immediate_Offset (iword (&48))) *) + 0xa9450e04; (* arm_LDP X4 X3 X16 (Immediate_Offset (iword (&80))) *) + 0xba0400e7; (* arm_ADCS X7 X7 X4 *) + 0xba030108; (* arm_ADCS X8 X8 X3 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xb10004bf; (* arm_CMN X5 (rvalue (word 1)) *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0xfa0400df; (* arm_SBCS XZR X6 X4 *) + 0xfa1f00ff; (* arm_SBCS XZR X7 XZR *) + 0xb26083e4; (* arm_MOV X4 (rvalue (word 18446744069414584321)) *) + 0xfa04011f; (* arm_SBCS XZR X8 X4 *) + 0xba1f0063; (* arm_ADCS X3 X3 XZR *) + 0xda9f03e3; (* arm_CSETM X3 Condition_NE *) + 0xeb0300a5; (* arm_SUBS X5 X5 X3 *) + 0x92407c64; (* arm_AND X4 X3 (rvalue (word 4294967295)) *) + 0xfa0400c6; (* arm_SBCS X6 X6 X4 *) + 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) + 0x92608064; (* arm_AND X4 X3 (rvalue (word 18446744069414584321)) *) + 0xda040108; (* arm_SBC X8 X8 X4 *) + 0xa90a1be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&160))) *) + 0xa90b23e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&176))) *) + 0xa9440fe2; (* arm_LDP X2 X3 SP (Immediate_Offset (iword (&64))) *) + 0x9b037c49; (* arm_MUL X9 X2 X3 *) + 0x9bc37c4a; (* arm_UMULH X10 X2 X3 *) + 0xa94517e4; (* arm_LDP X4 X5 SP (Immediate_Offset (iword (&80))) *) + 0x9b057c4b; (* arm_MUL X11 X2 X5 *) + 0x9bc57c4c; (* arm_UMULH X12 X2 X5 *) + 0x9b047c46; (* arm_MUL X6 X2 X4 *) + 0x9bc47c47; (* arm_UMULH X7 X2 X4 *) + 0xab06014a; (* arm_ADDS X10 X10 X6 *) + 0xba07016b; (* arm_ADCS X11 X11 X7 *) + 0x9b047c66; (* arm_MUL X6 X3 X4 *) + 0x9bc47c67; (* arm_UMULH X7 X3 X4 *) + 0x9a1f00e7; (* arm_ADC X7 X7 XZR *) + 0xab06016b; (* arm_ADDS X11 X11 X6 *) + 0x9b057c8d; (* arm_MUL X13 X4 X5 *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xba07018c; (* arm_ADCS X12 X12 X7 *) + 0x9b057c66; (* arm_MUL X6 X3 X5 *) + 0x9bc57c67; (* arm_UMULH X7 X3 X5 *) + 0x9a1f00e7; (* arm_ADC X7 X7 XZR *) + 0xab06018c; (* arm_ADDS X12 X12 X6 *) + 0xba0701ad; (* arm_ADCS X13 X13 X7 *) + 0x9a1f01ce; (* arm_ADC X14 X14 XZR *) + 0xab090129; (* arm_ADDS X9 X9 X9 *) + 0xba0a014a; (* arm_ADCS X10 X10 X10 *) + 0xba0b016b; (* arm_ADCS X11 X11 X11 *) + 0xba0c018c; (* arm_ADCS X12 X12 X12 *) + 0xba0d01ad; (* arm_ADCS X13 X13 X13 *) + 0xba0e01ce; (* arm_ADCS X14 X14 X14 *) + 0x9a9f37e7; (* arm_CSET X7 Condition_CS *) + 0x9bc27c46; (* arm_UMULH X6 X2 X2 *) + 0x9b027c48; (* arm_MUL X8 X2 X2 *) + 0xab060129; (* arm_ADDS X9 X9 X6 *) + 0x9b037c66; (* arm_MUL X6 X3 X3 *) + 0xba06014a; (* arm_ADCS X10 X10 X6 *) + 0x9bc37c66; (* arm_UMULH X6 X3 X3 *) + 0xba06016b; (* arm_ADCS X11 X11 X6 *) + 0x9b047c86; (* arm_MUL X6 X4 X4 *) + 0xba06018c; (* arm_ADCS X12 X12 X6 *) + 0x9bc47c86; (* arm_UMULH X6 X4 X4 *) + 0xba0601ad; (* arm_ADCS X13 X13 X6 *) + 0x9b057ca6; (* arm_MUL X6 X5 X5 *) + 0xba0601ce; (* arm_ADCS X14 X14 X6 *) + 0x9bc57ca6; (* arm_UMULH X6 X5 X5 *) + 0x9a0600e7; (* arm_ADC X7 X7 X6 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0xab088129; (* arm_ADDS X9 X9 (Shiftedreg X8 LSL 32) *) + 0xd360fd03; (* arm_LSR X3 X8 32 *) + 0xba03014a; (* arm_ADCS X10 X10 X3 *) + 0x9b057d02; (* arm_MUL X2 X8 X5 *) + 0x9bc57d08; (* arm_UMULH X8 X8 X5 *) + 0xba02016b; (* arm_ADCS X11 X11 X2 *) + 0x9a1f0108; (* arm_ADC X8 X8 XZR *) + 0xab09814a; (* arm_ADDS X10 X10 (Shiftedreg X9 LSL 32) *) + 0xd360fd23; (* arm_LSR X3 X9 32 *) + 0xba03016b; (* arm_ADCS X11 X11 X3 *) + 0x9b057d22; (* arm_MUL X2 X9 X5 *) + 0x9bc57d29; (* arm_UMULH X9 X9 X5 *) + 0xba020108; (* arm_ADCS X8 X8 X2 *) + 0x9a1f0129; (* arm_ADC X9 X9 XZR *) + 0xab0a816b; (* arm_ADDS X11 X11 (Shiftedreg X10 LSL 32) *) + 0xd360fd43; (* arm_LSR X3 X10 32 *) + 0xba030108; (* arm_ADCS X8 X8 X3 *) + 0x9b057d42; (* arm_MUL X2 X10 X5 *) + 0x9bc57d4a; (* arm_UMULH X10 X10 X5 *) + 0xba020129; (* arm_ADCS X9 X9 X2 *) + 0x9a1f014a; (* arm_ADC X10 X10 XZR *) + 0xab0b8108; (* arm_ADDS X8 X8 (Shiftedreg X11 LSL 32) *) + 0xd360fd63; (* arm_LSR X3 X11 32 *) + 0xba030129; (* arm_ADCS X9 X9 X3 *) + 0x9b057d62; (* arm_MUL X2 X11 X5 *) + 0x9bc57d6b; (* arm_UMULH X11 X11 X5 *) + 0xba02014a; (* arm_ADCS X10 X10 X2 *) + 0x9a1f016b; (* arm_ADC X11 X11 XZR *) + 0xab0c0108; (* arm_ADDS X8 X8 X12 *) + 0xba0d0129; (* arm_ADCS X9 X9 X13 *) + 0xba0e014a; (* arm_ADCS X10 X10 X14 *) + 0xba07016b; (* arm_ADCS X11 X11 X7 *) + 0x9a9f37e2; (* arm_CSET X2 Condition_CS *) + 0xb2407fe3; (* arm_MOV X3 (rvalue (word 4294967295)) *) + 0xb100050c; (* arm_ADDS X12 X8 (rvalue (word 1)) *) + 0xfa03012d; (* arm_SBCS X13 X9 X3 *) + 0xfa1f014e; (* arm_SBCS X14 X10 XZR *) + 0xfa050167; (* arm_SBCS X7 X11 X5 *) + 0xfa1f005f; (* arm_SBCS XZR X2 XZR *) + 0x9a8c3108; (* arm_CSEL X8 X8 X12 Condition_CC *) + 0x9a8d3129; (* arm_CSEL X9 X9 X13 Condition_CC *) + 0x9a8e314a; (* arm_CSEL X10 X10 X14 Condition_CC *) + 0x9a87316b; (* arm_CSEL X11 X11 X7 Condition_CC *) + 0xa90c27e8; (* arm_STP X8 X9 SP (Immediate_Offset (iword (&192))) *) + 0xa90d2fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&208))) *) + 0xa9401203; (* arm_LDP X3 X4 X16 (Immediate_Offset (iword (&0))) *) + 0xa94223e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&32))) *) + 0x9b077c6c; (* arm_MUL X12 X3 X7 *) + 0x9bc77c6d; (* arm_UMULH X13 X3 X7 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa9432be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&48))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c60; (* arm_UMULH X0 X3 X9 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c61; (* arm_UMULH X1 X3 X10 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0xa9411a05; (* arm_LDP X5 X6 X16 (Immediate_Offset (iword (&16))) *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bca7c83; (* arm_UMULH X3 X4 X10 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9b077cab; (* arm_MUL X11 X5 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b087cab; (* arm_MUL X11 X5 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b097cab; (* arm_MUL X11 X5 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b0a7cab; (* arm_MUL X11 X5 X10 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bca7ca4; (* arm_UMULH X4 X5 X10 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9bc77cab; (* arm_UMULH X11 X5 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9bc87cab; (* arm_UMULH X11 X5 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bc97cab; (* arm_UMULH X11 X5 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b077ccb; (* arm_MUL X11 X6 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9b087ccb; (* arm_MUL X11 X6 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b097ccb; (* arm_MUL X11 X6 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9b0a7ccb; (* arm_MUL X11 X6 X10 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9bca7cc5; (* arm_UMULH X5 X6 X10 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0x9bc77ccb; (* arm_UMULH X11 X6 X7 *) + 0xab0b0021; (* arm_ADDS X1 X1 X11 *) + 0x9bc87ccb; (* arm_UMULH X11 X6 X8 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bc97ccb; (* arm_UMULH X11 X6 X9 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0xd3607d8b; (* arm_LSL X11 X12 32 *) + 0xeb0b0182; (* arm_SUBS X2 X12 X11 *) + 0xd360fd86; (* arm_LSR X6 X12 32 *) + 0xda06018c; (* arm_SBC X12 X12 X6 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xba0601ce; (* arm_ADCS X14 X14 X6 *) + 0xba020000; (* arm_ADCS X0 X0 X2 *) + 0x9a1f018c; (* arm_ADC X12 X12 XZR *) + 0xd3607dab; (* arm_LSL X11 X13 32 *) + 0xeb0b01a2; (* arm_SUBS X2 X13 X11 *) + 0xd360fda6; (* arm_LSR X6 X13 32 *) + 0xda0601ad; (* arm_SBC X13 X13 X6 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0xba060000; (* arm_ADCS X0 X0 X6 *) + 0xba02018c; (* arm_ADCS X12 X12 X2 *) + 0x9a1f01ad; (* arm_ADC X13 X13 XZR *) + 0xd3607dcb; (* arm_LSL X11 X14 32 *) + 0xeb0b01c2; (* arm_SUBS X2 X14 X11 *) + 0xd360fdc6; (* arm_LSR X6 X14 32 *) + 0xda0601ce; (* arm_SBC X14 X14 X6 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0xba06018c; (* arm_ADCS X12 X12 X6 *) + 0xba0201ad; (* arm_ADCS X13 X13 X2 *) + 0x9a1f01ce; (* arm_ADC X14 X14 XZR *) + 0xd3607c0b; (* arm_LSL X11 X0 32 *) + 0xeb0b0002; (* arm_SUBS X2 X0 X11 *) + 0xd360fc06; (* arm_LSR X6 X0 32 *) + 0xda060000; (* arm_SBC X0 X0 X6 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0xba0601ad; (* arm_ADCS X13 X13 X6 *) + 0xba0201ce; (* arm_ADCS X14 X14 X2 *) + 0x9a1f0000; (* arm_ADC X0 X0 XZR *) + 0xab01018c; (* arm_ADDS X12 X12 X1 *) + 0xba0301ad; (* arm_ADCS X13 X13 X3 *) + 0xba0401ce; (* arm_ADCS X14 X14 X4 *) + 0xba050000; (* arm_ADCS X0 X0 X5 *) + 0x9a9f37e2; (* arm_CSET X2 Condition_CS *) + 0xb2407feb; (* arm_MOV X11 (rvalue (word 4294967295)) *) + 0xb26083e6; (* arm_MOV X6 (rvalue (word 18446744069414584321)) *) + 0xb1000581; (* arm_ADDS X1 X12 (rvalue (word 1)) *) + 0xfa0b01a3; (* arm_SBCS X3 X13 X11 *) + 0xfa1f01c4; (* arm_SBCS X4 X14 XZR *) + 0xfa060005; (* arm_SBCS X5 X0 X6 *) + 0xfa1f005f; (* arm_SBCS XZR X2 XZR *) + 0x9a81318c; (* arm_CSEL X12 X12 X1 Condition_CC *) + 0x9a8331ad; (* arm_CSEL X13 X13 X3 Condition_CC *) + 0x9a8431ce; (* arm_CSEL X14 X14 X4 Condition_CC *) + 0x9a853000; (* arm_CSEL X0 X0 X5 Condition_CC *) + 0xa90637ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&96))) *) + 0xa90703ee; (* arm_STP X14 X0 SP (Immediate_Offset (iword (&112))) *) + 0xa94a0fe2; (* arm_LDP X2 X3 SP (Immediate_Offset (iword (&160))) *) + 0x9b037c49; (* arm_MUL X9 X2 X3 *) + 0x9bc37c4a; (* arm_UMULH X10 X2 X3 *) + 0xa94b17e4; (* arm_LDP X4 X5 SP (Immediate_Offset (iword (&176))) *) + 0x9b057c4b; (* arm_MUL X11 X2 X5 *) + 0x9bc57c4c; (* arm_UMULH X12 X2 X5 *) + 0x9b047c46; (* arm_MUL X6 X2 X4 *) + 0x9bc47c47; (* arm_UMULH X7 X2 X4 *) + 0xab06014a; (* arm_ADDS X10 X10 X6 *) + 0xba07016b; (* arm_ADCS X11 X11 X7 *) + 0x9b047c66; (* arm_MUL X6 X3 X4 *) + 0x9bc47c67; (* arm_UMULH X7 X3 X4 *) + 0x9a1f00e7; (* arm_ADC X7 X7 XZR *) + 0xab06016b; (* arm_ADDS X11 X11 X6 *) + 0x9b057c8d; (* arm_MUL X13 X4 X5 *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xba07018c; (* arm_ADCS X12 X12 X7 *) + 0x9b057c66; (* arm_MUL X6 X3 X5 *) + 0x9bc57c67; (* arm_UMULH X7 X3 X5 *) + 0x9a1f00e7; (* arm_ADC X7 X7 XZR *) + 0xab06018c; (* arm_ADDS X12 X12 X6 *) + 0xba0701ad; (* arm_ADCS X13 X13 X7 *) + 0x9a1f01ce; (* arm_ADC X14 X14 XZR *) + 0xab090129; (* arm_ADDS X9 X9 X9 *) + 0xba0a014a; (* arm_ADCS X10 X10 X10 *) + 0xba0b016b; (* arm_ADCS X11 X11 X11 *) + 0xba0c018c; (* arm_ADCS X12 X12 X12 *) + 0xba0d01ad; (* arm_ADCS X13 X13 X13 *) + 0xba0e01ce; (* arm_ADCS X14 X14 X14 *) + 0x9a9f37e7; (* arm_CSET X7 Condition_CS *) + 0x9bc27c46; (* arm_UMULH X6 X2 X2 *) + 0x9b027c48; (* arm_MUL X8 X2 X2 *) + 0xab060129; (* arm_ADDS X9 X9 X6 *) + 0x9b037c66; (* arm_MUL X6 X3 X3 *) + 0xba06014a; (* arm_ADCS X10 X10 X6 *) + 0x9bc37c66; (* arm_UMULH X6 X3 X3 *) + 0xba06016b; (* arm_ADCS X11 X11 X6 *) + 0x9b047c86; (* arm_MUL X6 X4 X4 *) + 0xba06018c; (* arm_ADCS X12 X12 X6 *) + 0x9bc47c86; (* arm_UMULH X6 X4 X4 *) + 0xba0601ad; (* arm_ADCS X13 X13 X6 *) + 0x9b057ca6; (* arm_MUL X6 X5 X5 *) + 0xba0601ce; (* arm_ADCS X14 X14 X6 *) + 0x9bc57ca6; (* arm_UMULH X6 X5 X5 *) + 0x9a0600e7; (* arm_ADC X7 X7 X6 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0xab088129; (* arm_ADDS X9 X9 (Shiftedreg X8 LSL 32) *) + 0xd360fd03; (* arm_LSR X3 X8 32 *) + 0xba03014a; (* arm_ADCS X10 X10 X3 *) + 0x9b057d02; (* arm_MUL X2 X8 X5 *) + 0x9bc57d08; (* arm_UMULH X8 X8 X5 *) + 0xba02016b; (* arm_ADCS X11 X11 X2 *) + 0x9a1f0108; (* arm_ADC X8 X8 XZR *) + 0xab09814a; (* arm_ADDS X10 X10 (Shiftedreg X9 LSL 32) *) + 0xd360fd23; (* arm_LSR X3 X9 32 *) + 0xba03016b; (* arm_ADCS X11 X11 X3 *) + 0x9b057d22; (* arm_MUL X2 X9 X5 *) + 0x9bc57d29; (* arm_UMULH X9 X9 X5 *) + 0xba020108; (* arm_ADCS X8 X8 X2 *) + 0x9a1f0129; (* arm_ADC X9 X9 XZR *) + 0xab0a816b; (* arm_ADDS X11 X11 (Shiftedreg X10 LSL 32) *) + 0xd360fd43; (* arm_LSR X3 X10 32 *) + 0xba030108; (* arm_ADCS X8 X8 X3 *) + 0x9b057d42; (* arm_MUL X2 X10 X5 *) + 0x9bc57d4a; (* arm_UMULH X10 X10 X5 *) + 0xba020129; (* arm_ADCS X9 X9 X2 *) + 0x9a1f014a; (* arm_ADC X10 X10 XZR *) + 0xab0b8108; (* arm_ADDS X8 X8 (Shiftedreg X11 LSL 32) *) + 0xd360fd63; (* arm_LSR X3 X11 32 *) + 0xba030129; (* arm_ADCS X9 X9 X3 *) + 0x9b057d62; (* arm_MUL X2 X11 X5 *) + 0x9bc57d6b; (* arm_UMULH X11 X11 X5 *) + 0xba02014a; (* arm_ADCS X10 X10 X2 *) + 0x9a1f016b; (* arm_ADC X11 X11 XZR *) + 0xab0c0108; (* arm_ADDS X8 X8 X12 *) + 0xba0d0129; (* arm_ADCS X9 X9 X13 *) + 0xba0e014a; (* arm_ADCS X10 X10 X14 *) + 0xba07016b; (* arm_ADCS X11 X11 X7 *) + 0x9a9f37e2; (* arm_CSET X2 Condition_CS *) + 0xb2407fe3; (* arm_MOV X3 (rvalue (word 4294967295)) *) + 0xb100050c; (* arm_ADDS X12 X8 (rvalue (word 1)) *) + 0xfa03012d; (* arm_SBCS X13 X9 X3 *) + 0xfa1f014e; (* arm_SBCS X14 X10 XZR *) + 0xfa050167; (* arm_SBCS X7 X11 X5 *) + 0xfa1f005f; (* arm_SBCS XZR X2 XZR *) + 0x9a8c3108; (* arm_CSEL X8 X8 X12 Condition_CC *) + 0x9a8d3129; (* arm_CSEL X9 X9 X13 Condition_CC *) + 0x9a8e314a; (* arm_CSEL X10 X10 X14 Condition_CC *) + 0x9a87316b; (* arm_CSEL X11 X11 X7 Condition_CC *) + 0xa90827e8; (* arm_STP X8 X9 SP (Immediate_Offset (iword (&128))) *) + 0xa9092fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&144))) *) + 0xd2800121; (* arm_MOV X1 (rvalue (word 9)) *) + 0x92800002; (* arm_MOVN X2 (word 0) 0 *) + 0xa94c2be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&192))) *) + 0xeb090049; (* arm_SUBS X9 X2 X9 *) + 0xb2407fe2; (* arm_MOV X2 (rvalue (word 4294967295)) *) + 0xfa0a004a; (* arm_SBCS X10 X2 X10 *) + 0xa94d33eb; (* arm_LDP X11 X12 SP (Immediate_Offset (iword (&208))) *) + 0xfa0b03eb; (* arm_NGCS X11 X11 *) + 0xb26083e2; (* arm_MOV X2 (rvalue (word 18446744069414584321)) *) + 0xda0c004c; (* arm_SBC X12 X2 X12 *) + 0x9b097c23; (* arm_MUL X3 X1 X9 *) + 0x9b0a7c24; (* arm_MUL X4 X1 X10 *) + 0x9b0b7c25; (* arm_MUL X5 X1 X11 *) + 0x9b0c7c26; (* arm_MUL X6 X1 X12 *) + 0x9bc97c29; (* arm_UMULH X9 X1 X9 *) + 0x9bca7c2a; (* arm_UMULH X10 X1 X10 *) + 0x9bcb7c2b; (* arm_UMULH X11 X1 X11 *) + 0x9bcc7c27; (* arm_UMULH X7 X1 X12 *) + 0xab090084; (* arm_ADDS X4 X4 X9 *) + 0xba0a00a5; (* arm_ADCS X5 X5 X10 *) + 0xba0b00c6; (* arm_ADCS X6 X6 X11 *) + 0x9a1f00e7; (* arm_ADC X7 X7 XZR *) + 0xd2800181; (* arm_MOV X1 (rvalue (word 12)) *) + 0xa9462be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&96))) *) + 0x9b017d28; (* arm_MUL X8 X9 X1 *) + 0x9bc17d29; (* arm_UMULH X9 X9 X1 *) + 0xab080063; (* arm_ADDS X3 X3 X8 *) + 0x9b017d48; (* arm_MUL X8 X10 X1 *) + 0x9bc17d4a; (* arm_UMULH X10 X10 X1 *) + 0xba080084; (* arm_ADCS X4 X4 X8 *) + 0xa94733eb; (* arm_LDP X11 X12 SP (Immediate_Offset (iword (&112))) *) + 0x9b017d68; (* arm_MUL X8 X11 X1 *) + 0x9bc17d6b; (* arm_UMULH X11 X11 X1 *) + 0xba0800a5; (* arm_ADCS X5 X5 X8 *) + 0x9b017d88; (* arm_MUL X8 X12 X1 *) + 0x9bc17d8c; (* arm_UMULH X12 X12 X1 *) + 0xba0800c6; (* arm_ADCS X6 X6 X8 *) + 0x9a1f00e7; (* arm_ADC X7 X7 XZR *) + 0xab090084; (* arm_ADDS X4 X4 X9 *) + 0xba0a00a5; (* arm_ADCS X5 X5 X10 *) + 0xba0b00c6; (* arm_ADCS X6 X6 X11 *) + 0x9a0c00e7; (* arm_ADC X7 X7 X12 *) + 0x910004e8; (* arm_ADD X8 X7 (rvalue (word 1)) *) + 0xd3607d0a; (* arm_LSL X10 X8 32 *) + 0xab0a00c6; (* arm_ADDS X6 X6 X10 *) + 0x9a1f00e7; (* arm_ADC X7 X7 XZR *) + 0xcb0803e9; (* arm_NEG X9 X8 *) + 0xd100054a; (* arm_SUB X10 X10 (rvalue (word 1)) *) + 0xeb090063; (* arm_SUBS X3 X3 X9 *) + 0xfa0a0084; (* arm_SBCS X4 X4 X10 *) + 0xfa1f00a5; (* arm_SBCS X5 X5 XZR *) + 0xfa0800c6; (* arm_SBCS X6 X6 X8 *) + 0xda0800e8; (* arm_SBC X8 X7 X8 *) + 0xab080063; (* arm_ADDS X3 X3 X8 *) + 0x92407d09; (* arm_AND X9 X8 (rvalue (word 4294967295)) *) + 0xba090084; (* arm_ADCS X4 X4 X9 *) + 0xba1f00a5; (* arm_ADCS X5 X5 XZR *) + 0xcb0903ea; (* arm_NEG X10 X9 *) + 0x9a0a00c6; (* arm_ADC X6 X6 X10 *) + 0xa90c13e3; (* arm_STP X3 X4 SP (Immediate_Offset (iword (&192))) *) + 0xa90d1be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&208))) *) + 0xa9481be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&128))) *) + 0xa9400fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&0))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa94923e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&144))) *) + 0xa9410fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&16))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xda9f23e3; (* arm_CSETM X3 Condition_CC *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0x92407c64; (* arm_AND X4 X3 (rvalue (word 4294967295)) *) + 0xba0400c6; (* arm_ADCS X6 X6 X4 *) + 0xba1f00e7; (* arm_ADCS X7 X7 XZR *) + 0x92608064; (* arm_AND X4 X3 (rvalue (word 18446744069414584321)) *) + 0x9a040108; (* arm_ADC X8 X8 X4 *) + 0xa90a1be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&160))) *) + 0xa90b23e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&176))) *) + 0xa9420fe2; (* arm_LDP X2 X3 SP (Immediate_Offset (iword (&32))) *) + 0x9b037c49; (* arm_MUL X9 X2 X3 *) + 0x9bc37c4a; (* arm_UMULH X10 X2 X3 *) + 0xa94317e4; (* arm_LDP X4 X5 SP (Immediate_Offset (iword (&48))) *) + 0x9b057c4b; (* arm_MUL X11 X2 X5 *) + 0x9bc57c4c; (* arm_UMULH X12 X2 X5 *) + 0x9b047c46; (* arm_MUL X6 X2 X4 *) + 0x9bc47c47; (* arm_UMULH X7 X2 X4 *) + 0xab06014a; (* arm_ADDS X10 X10 X6 *) + 0xba07016b; (* arm_ADCS X11 X11 X7 *) + 0x9b047c66; (* arm_MUL X6 X3 X4 *) + 0x9bc47c67; (* arm_UMULH X7 X3 X4 *) + 0x9a1f00e7; (* arm_ADC X7 X7 XZR *) + 0xab06016b; (* arm_ADDS X11 X11 X6 *) + 0x9b057c8d; (* arm_MUL X13 X4 X5 *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xba07018c; (* arm_ADCS X12 X12 X7 *) + 0x9b057c66; (* arm_MUL X6 X3 X5 *) + 0x9bc57c67; (* arm_UMULH X7 X3 X5 *) + 0x9a1f00e7; (* arm_ADC X7 X7 XZR *) + 0xab06018c; (* arm_ADDS X12 X12 X6 *) + 0xba0701ad; (* arm_ADCS X13 X13 X7 *) + 0x9a1f01ce; (* arm_ADC X14 X14 XZR *) + 0xab090129; (* arm_ADDS X9 X9 X9 *) + 0xba0a014a; (* arm_ADCS X10 X10 X10 *) + 0xba0b016b; (* arm_ADCS X11 X11 X11 *) + 0xba0c018c; (* arm_ADCS X12 X12 X12 *) + 0xba0d01ad; (* arm_ADCS X13 X13 X13 *) + 0xba0e01ce; (* arm_ADCS X14 X14 X14 *) + 0x9a9f37e7; (* arm_CSET X7 Condition_CS *) + 0x9bc27c46; (* arm_UMULH X6 X2 X2 *) + 0x9b027c48; (* arm_MUL X8 X2 X2 *) + 0xab060129; (* arm_ADDS X9 X9 X6 *) + 0x9b037c66; (* arm_MUL X6 X3 X3 *) + 0xba06014a; (* arm_ADCS X10 X10 X6 *) + 0x9bc37c66; (* arm_UMULH X6 X3 X3 *) + 0xba06016b; (* arm_ADCS X11 X11 X6 *) + 0x9b047c86; (* arm_MUL X6 X4 X4 *) + 0xba06018c; (* arm_ADCS X12 X12 X6 *) + 0x9bc47c86; (* arm_UMULH X6 X4 X4 *) + 0xba0601ad; (* arm_ADCS X13 X13 X6 *) + 0x9b057ca6; (* arm_MUL X6 X5 X5 *) + 0xba0601ce; (* arm_ADCS X14 X14 X6 *) + 0x9bc57ca6; (* arm_UMULH X6 X5 X5 *) + 0x9a0600e7; (* arm_ADC X7 X7 X6 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0xab088129; (* arm_ADDS X9 X9 (Shiftedreg X8 LSL 32) *) + 0xd360fd03; (* arm_LSR X3 X8 32 *) + 0xba03014a; (* arm_ADCS X10 X10 X3 *) + 0x9b057d02; (* arm_MUL X2 X8 X5 *) + 0x9bc57d08; (* arm_UMULH X8 X8 X5 *) + 0xba02016b; (* arm_ADCS X11 X11 X2 *) + 0x9a1f0108; (* arm_ADC X8 X8 XZR *) + 0xab09814a; (* arm_ADDS X10 X10 (Shiftedreg X9 LSL 32) *) + 0xd360fd23; (* arm_LSR X3 X9 32 *) + 0xba03016b; (* arm_ADCS X11 X11 X3 *) + 0x9b057d22; (* arm_MUL X2 X9 X5 *) + 0x9bc57d29; (* arm_UMULH X9 X9 X5 *) + 0xba020108; (* arm_ADCS X8 X8 X2 *) + 0x9a1f0129; (* arm_ADC X9 X9 XZR *) + 0xab0a816b; (* arm_ADDS X11 X11 (Shiftedreg X10 LSL 32) *) + 0xd360fd43; (* arm_LSR X3 X10 32 *) + 0xba030108; (* arm_ADCS X8 X8 X3 *) + 0x9b057d42; (* arm_MUL X2 X10 X5 *) + 0x9bc57d4a; (* arm_UMULH X10 X10 X5 *) + 0xba020129; (* arm_ADCS X9 X9 X2 *) + 0x9a1f014a; (* arm_ADC X10 X10 XZR *) + 0xab0b8108; (* arm_ADDS X8 X8 (Shiftedreg X11 LSL 32) *) + 0xd360fd63; (* arm_LSR X3 X11 32 *) + 0xba030129; (* arm_ADCS X9 X9 X3 *) + 0x9b057d62; (* arm_MUL X2 X11 X5 *) + 0x9bc57d6b; (* arm_UMULH X11 X11 X5 *) + 0xba02014a; (* arm_ADCS X10 X10 X2 *) + 0x9a1f016b; (* arm_ADC X11 X11 XZR *) + 0xab0c0108; (* arm_ADDS X8 X8 X12 *) + 0xba0d0129; (* arm_ADCS X9 X9 X13 *) + 0xba0e014a; (* arm_ADCS X10 X10 X14 *) + 0xba07016b; (* arm_ADCS X11 X11 X7 *) + 0x9a9f37e2; (* arm_CSET X2 Condition_CS *) + 0xb2407fe3; (* arm_MOV X3 (rvalue (word 4294967295)) *) + 0xb100050c; (* arm_ADDS X12 X8 (rvalue (word 1)) *) + 0xfa03012d; (* arm_SBCS X13 X9 X3 *) + 0xfa1f014e; (* arm_SBCS X14 X10 XZR *) + 0xfa050167; (* arm_SBCS X7 X11 X5 *) + 0xfa1f005f; (* arm_SBCS XZR X2 XZR *) + 0x9a8c3108; (* arm_CSEL X8 X8 X12 Condition_CC *) + 0x9a8d3129; (* arm_CSEL X9 X9 X13 Condition_CC *) + 0x9a8e314a; (* arm_CSEL X10 X10 X14 Condition_CC *) + 0x9a87316b; (* arm_CSEL X11 X11 X7 Condition_CC *) + 0xa90827e8; (* arm_STP X8 X9 SP (Immediate_Offset (iword (&128))) *) + 0xa9092fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&144))) *) + 0xa94a1be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&160))) *) + 0xa9420fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&32))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa94b23e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&176))) *) + 0xa9430fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&48))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xda9f23e3; (* arm_CSETM X3 Condition_CC *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0x92407c64; (* arm_AND X4 X3 (rvalue (word 4294967295)) *) + 0xba0400c6; (* arm_ADCS X6 X6 X4 *) + 0xba1f00e7; (* arm_ADCS X7 X7 XZR *) + 0x92608064; (* arm_AND X4 X3 (rvalue (word 18446744069414584321)) *) + 0x9a040108; (* arm_ADC X8 X8 X4 *) + 0xa90419e5; (* arm_STP X5 X6 X15 (Immediate_Offset (iword (&64))) *) + 0xa90521e7; (* arm_STP X7 X8 X15 (Immediate_Offset (iword (&80))) *) + 0xa94c13e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&192))) *) + 0xa94423e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&64))) *) + 0x9b077c6c; (* arm_MUL X12 X3 X7 *) + 0x9bc77c6d; (* arm_UMULH X13 X3 X7 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa9452be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&80))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c60; (* arm_UMULH X0 X3 X9 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c61; (* arm_UMULH X1 X3 X10 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0xa94d1be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&208))) *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bca7c83; (* arm_UMULH X3 X4 X10 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9b077cab; (* arm_MUL X11 X5 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b087cab; (* arm_MUL X11 X5 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b097cab; (* arm_MUL X11 X5 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b0a7cab; (* arm_MUL X11 X5 X10 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bca7ca4; (* arm_UMULH X4 X5 X10 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9bc77cab; (* arm_UMULH X11 X5 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9bc87cab; (* arm_UMULH X11 X5 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bc97cab; (* arm_UMULH X11 X5 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b077ccb; (* arm_MUL X11 X6 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9b087ccb; (* arm_MUL X11 X6 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b097ccb; (* arm_MUL X11 X6 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9b0a7ccb; (* arm_MUL X11 X6 X10 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9bca7cc5; (* arm_UMULH X5 X6 X10 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0x9bc77ccb; (* arm_UMULH X11 X6 X7 *) + 0xab0b0021; (* arm_ADDS X1 X1 X11 *) + 0x9bc87ccb; (* arm_UMULH X11 X6 X8 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bc97ccb; (* arm_UMULH X11 X6 X9 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0xd3607d8b; (* arm_LSL X11 X12 32 *) + 0xeb0b0182; (* arm_SUBS X2 X12 X11 *) + 0xd360fd86; (* arm_LSR X6 X12 32 *) + 0xda06018c; (* arm_SBC X12 X12 X6 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xba0601ce; (* arm_ADCS X14 X14 X6 *) + 0xba020000; (* arm_ADCS X0 X0 X2 *) + 0x9a1f018c; (* arm_ADC X12 X12 XZR *) + 0xd3607dab; (* arm_LSL X11 X13 32 *) + 0xeb0b01a2; (* arm_SUBS X2 X13 X11 *) + 0xd360fda6; (* arm_LSR X6 X13 32 *) + 0xda0601ad; (* arm_SBC X13 X13 X6 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0xba060000; (* arm_ADCS X0 X0 X6 *) + 0xba02018c; (* arm_ADCS X12 X12 X2 *) + 0x9a1f01ad; (* arm_ADC X13 X13 XZR *) + 0xd3607dcb; (* arm_LSL X11 X14 32 *) + 0xeb0b01c2; (* arm_SUBS X2 X14 X11 *) + 0xd360fdc6; (* arm_LSR X6 X14 32 *) + 0xda0601ce; (* arm_SBC X14 X14 X6 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0xba06018c; (* arm_ADCS X12 X12 X6 *) + 0xba0201ad; (* arm_ADCS X13 X13 X2 *) + 0x9a1f01ce; (* arm_ADC X14 X14 XZR *) + 0xd3607c0b; (* arm_LSL X11 X0 32 *) + 0xeb0b0002; (* arm_SUBS X2 X0 X11 *) + 0xd360fc06; (* arm_LSR X6 X0 32 *) + 0xda060000; (* arm_SBC X0 X0 X6 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0xba0601ad; (* arm_ADCS X13 X13 X6 *) + 0xba0201ce; (* arm_ADCS X14 X14 X2 *) + 0x9a1f0000; (* arm_ADC X0 X0 XZR *) + 0xab01018c; (* arm_ADDS X12 X12 X1 *) + 0xba0301ad; (* arm_ADCS X13 X13 X3 *) + 0xba0401ce; (* arm_ADCS X14 X14 X4 *) + 0xba050000; (* arm_ADCS X0 X0 X5 *) + 0x9a9f37e2; (* arm_CSET X2 Condition_CS *) + 0xb2407feb; (* arm_MOV X11 (rvalue (word 4294967295)) *) + 0xb26083e6; (* arm_MOV X6 (rvalue (word 18446744069414584321)) *) + 0xb1000581; (* arm_ADDS X1 X12 (rvalue (word 1)) *) + 0xfa0b01a3; (* arm_SBCS X3 X13 X11 *) + 0xfa1f01c4; (* arm_SBCS X4 X14 XZR *) + 0xfa060005; (* arm_SBCS X5 X0 X6 *) + 0xfa1f005f; (* arm_SBCS XZR X2 XZR *) + 0x9a81318c; (* arm_CSEL X12 X12 X1 Condition_CC *) + 0x9a8331ad; (* arm_CSEL X13 X13 X3 Condition_CC *) + 0x9a8431ce; (* arm_CSEL X14 X14 X4 Condition_CC *) + 0x9a853000; (* arm_CSEL X0 X0 X5 Condition_CC *) + 0xa90a37ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&160))) *) + 0xa90b03ee; (* arm_STP X14 X0 SP (Immediate_Offset (iword (&176))) *) + 0xa9460be1; (* arm_LDP X1 X2 SP (Immediate_Offset (iword (&96))) *) + 0xd37ef420; (* arm_LSL X0 X1 2 *) + 0xa94c1fe6; (* arm_LDP X6 X7 SP (Immediate_Offset (iword (&192))) *) + 0xeb060000; (* arm_SUBS X0 X0 X6 *) + 0x93c1f841; (* arm_EXTR X1 X2 X1 62 *) + 0xfa070021; (* arm_SBCS X1 X1 X7 *) + 0xa94713e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&112))) *) + 0x93c2f862; (* arm_EXTR X2 X3 X2 62 *) + 0xa94d1fe6; (* arm_LDP X6 X7 SP (Immediate_Offset (iword (&208))) *) + 0xfa060042; (* arm_SBCS X2 X2 X6 *) + 0x93c3f883; (* arm_EXTR X3 X4 X3 62 *) + 0xfa070063; (* arm_SBCS X3 X3 X7 *) + 0xd37efc84; (* arm_LSR X4 X4 62 *) + 0xda1f0084; (* arm_SBC X4 X4 XZR *) + 0x91000485; (* arm_ADD X5 X4 (rvalue (word 1)) *) + 0xd3607ca8; (* arm_LSL X8 X5 32 *) + 0xeb0803e6; (* arm_NEGS X6 X8 *) + 0xfa1f03e7; (* arm_NGCS X7 XZR *) + 0xda050108; (* arm_SBC X8 X8 X5 *) + 0xab050000; (* arm_ADDS X0 X0 X5 *) + 0xba060021; (* arm_ADCS X1 X1 X6 *) + 0xba070042; (* arm_ADCS X2 X2 X7 *) + 0xba080063; (* arm_ADCS X3 X3 X8 *) + 0xda9f23e5; (* arm_CSETM X5 Condition_CC *) + 0xab050000; (* arm_ADDS X0 X0 X5 *) + 0x92407ca6; (* arm_AND X6 X5 (rvalue (word 4294967295)) *) + 0xba060021; (* arm_ADCS X1 X1 X6 *) + 0xba1f0042; (* arm_ADCS X2 X2 XZR *) + 0xcb0603e7; (* arm_NEG X7 X6 *) + 0x9a070063; (* arm_ADC X3 X3 X7 *) + 0xa90005e0; (* arm_STP X0 X1 X15 (Immediate_Offset (iword (&0))) *) + 0xa9010de2; (* arm_STP X2 X3 X15 (Immediate_Offset (iword (&16))) *) + 0xd2800101; (* arm_MOV X1 (rvalue (word 8)) *) + 0x92800002; (* arm_MOVN X2 (word 0) 0 *) + 0xa9482be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&128))) *) + 0xeb090049; (* arm_SUBS X9 X2 X9 *) + 0xb2407fe2; (* arm_MOV X2 (rvalue (word 4294967295)) *) + 0xfa0a004a; (* arm_SBCS X10 X2 X10 *) + 0xa94933eb; (* arm_LDP X11 X12 SP (Immediate_Offset (iword (&144))) *) + 0xfa0b03eb; (* arm_NGCS X11 X11 *) + 0xb26083e2; (* arm_MOV X2 (rvalue (word 18446744069414584321)) *) + 0xda0c004c; (* arm_SBC X12 X2 X12 *) + 0xd37df123; (* arm_LSL X3 X9 3 *) + 0x93c9f544; (* arm_EXTR X4 X10 X9 61 *) + 0x93caf565; (* arm_EXTR X5 X11 X10 61 *) + 0x93cbf586; (* arm_EXTR X6 X12 X11 61 *) + 0xd37dfd87; (* arm_LSR X7 X12 61 *) + 0xd2800061; (* arm_MOV X1 (rvalue (word 3)) *) + 0xa94a2be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&160))) *) + 0x9b017d28; (* arm_MUL X8 X9 X1 *) + 0x9bc17d29; (* arm_UMULH X9 X9 X1 *) + 0xab080063; (* arm_ADDS X3 X3 X8 *) + 0x9b017d48; (* arm_MUL X8 X10 X1 *) + 0x9bc17d4a; (* arm_UMULH X10 X10 X1 *) + 0xba080084; (* arm_ADCS X4 X4 X8 *) + 0xa94b33eb; (* arm_LDP X11 X12 SP (Immediate_Offset (iword (&176))) *) + 0x9b017d68; (* arm_MUL X8 X11 X1 *) + 0x9bc17d6b; (* arm_UMULH X11 X11 X1 *) + 0xba0800a5; (* arm_ADCS X5 X5 X8 *) + 0x9b017d88; (* arm_MUL X8 X12 X1 *) + 0x9bc17d8c; (* arm_UMULH X12 X12 X1 *) + 0xba0800c6; (* arm_ADCS X6 X6 X8 *) + 0x9a1f00e7; (* arm_ADC X7 X7 XZR *) + 0xab090084; (* arm_ADDS X4 X4 X9 *) + 0xba0a00a5; (* arm_ADCS X5 X5 X10 *) + 0xba0b00c6; (* arm_ADCS X6 X6 X11 *) + 0x9a0c00e7; (* arm_ADC X7 X7 X12 *) + 0x910004e8; (* arm_ADD X8 X7 (rvalue (word 1)) *) + 0xd3607d0a; (* arm_LSL X10 X8 32 *) + 0xab0a00c6; (* arm_ADDS X6 X6 X10 *) + 0x9a1f00e7; (* arm_ADC X7 X7 XZR *) + 0xcb0803e9; (* arm_NEG X9 X8 *) + 0xd100054a; (* arm_SUB X10 X10 (rvalue (word 1)) *) + 0xeb090063; (* arm_SUBS X3 X3 X9 *) + 0xfa0a0084; (* arm_SBCS X4 X4 X10 *) + 0xfa1f00a5; (* arm_SBCS X5 X5 XZR *) + 0xfa0800c6; (* arm_SBCS X6 X6 X8 *) + 0xda0800e8; (* arm_SBC X8 X7 X8 *) + 0xab080063; (* arm_ADDS X3 X3 X8 *) + 0x92407d09; (* arm_AND X9 X8 (rvalue (word 4294967295)) *) + 0xba090084; (* arm_ADCS X4 X4 X9 *) + 0xba1f00a5; (* arm_ADCS X5 X5 XZR *) + 0xcb0903ea; (* arm_NEG X10 X9 *) + 0x9a0a00c6; (* arm_ADC X6 X6 X10 *) + 0xa90211e3; (* arm_STP X3 X4 X15 (Immediate_Offset (iword (&32))) *) + 0xa90319e5; (* arm_STP X5 X6 X15 (Immediate_Offset (iword (&48))) *) + 0x910383ff; (* arm_ADD SP SP (rvalue (word 224)) *) + 0xd65f03c0 (* arm_RET X30 *) +];; + +let P256_MONTJDOUBLE_EXEC = ARM_MK_EXEC_RULE p256_montjdouble_mc;; + +(* ------------------------------------------------------------------------- *) +(* Common supporting definitions and lemmas for component proofs. *) +(* ------------------------------------------------------------------------- *) + +let p_256 = new_definition `p_256 = 115792089210356248762697446949407573530086143415290314195533631308867097853951`;; + +let nistp256 = define + `nistp256 = + (integer_mod_ring p_256, + ring_neg (integer_mod_ring p_256) (&3), + &b_256:int)`;; + +let nistp256_encode = new_definition + `nistp256_encode = montgomery_encode(256,p_256)`;; + +let p256shortishredlemma = prove + (`!n. n < 24 * 2 EXP 256 + ==> let q = n DIV 2 EXP 256 + 1 in + q <= 24 /\ + q < 2 EXP 64 /\ + q * p_256 <= n + p_256 /\ + n < q * p_256 + p_256`, + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN REWRITE_TAC[p_256] THEN ARITH_TAC);; + +let FORALL_INT_CASES' = prove + (`!P. (!x:int. P x) <=> (!n. P(&n)) /\ (!n. ~(n = 0) ==> P(-- &n))`, + GEN_TAC THEN GEN_REWRITE_TAC LAND_CONV [FORALL_INT_CASES] THEN + MESON_TAC[INT_NEG_EQ_0; INT_OF_NUM_EQ]);; + +let p256shortintredlemma = prove + (`!n. --(&p_256) <= n /\ n <= &4 * &2 pow 256 + ==> let q = (&2 pow 256 + n) div &2 pow 256 in + &0 <= q /\ q < &6 /\ + q < &2 pow 64 /\ + q * &p_256 <= n + &p_256 /\ + n < q * &p_256 + &p_256`, + ONCE_REWRITE_TAC[INT_ARITH `&2 pow 256 + n:int = &1 * &2 pow 256 + n`] THEN + SIMP_TAC[INT_DIV_MUL_ADD; INT_POW_EQ_0; INT_OF_NUM_EQ; ARITH_EQ] THEN + REWRITE_TAC[FORALL_INT_CASES'; INT_DIV_LNEG] THEN + CONV_TAC(ONCE_DEPTH_CONV let_CONV) THEN + REWRITE_TAC[INT_OF_NUM_CLAUSES; INT_OF_NUM_DIV; INT_OF_NUM_REM] THEN + CONJ_TAC THENL [REWRITE_TAC[p_256] THEN ARITH_TAC; ALL_TAC] THEN + X_GEN_TAC `n:num` THEN DISCH_TAC THEN + REWRITE_TAC[INT_LE_NEG2; INT_OF_NUM_CLAUSES] THEN + DISCH_THEN(ASSUME_TAC o CONJUNCT1) THEN + SUBGOAL_THEN `n < 2 EXP 256` ASSUME_TAC THENL + [UNDISCH_TAC `n <= p_256` THEN REWRITE_TAC[p_256] THEN ARITH_TAC; + ASM_SIMP_TAC[DIV_LT; MOD_LT]] THEN + UNDISCH_TAC `n <= p_256` THEN + REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES] THEN CONV_TAC INT_REDUCE_CONV THEN + REWRITE_TAC[p_256] THEN INT_ARITH_TAC);; + +let nintlemma = prove + (`&(num_of_int(x rem &p_256)) = x rem &p_256`, + MATCH_MP_TAC INT_OF_NUM_OF_INT THEN MATCH_MP_TAC INT_REM_POS THEN + REWRITE_TAC[INT_OF_NUM_EQ; p_256] THEN CONV_TAC NUM_REDUCE_CONV);; + +let unilemma0 = prove + (`x = a MOD p_256 ==> x < p_256 /\ &x = &a rem &p_256`, + REWRITE_TAC[INT_OF_NUM_REM; p_256] THEN ARITH_TAC);; + +let unilemma1 = prove + (`&x = a rem &p_256 ==> x < p_256 /\ &x = a rem &p_256`, + SIMP_TAC[GSYM INT_OF_NUM_LT; INT_LT_REM_EQ; p_256] THEN INT_ARITH_TAC);; + +let unilemma2 = prove + (`X = num_of_int(x rem &p_256) ==> X < p_256 /\ &X = x rem &p_256`, + DISCH_THEN SUBST1_TAC THEN + REWRITE_TAC[GSYM INT_OF_NUM_LT; nintlemma; INT_LT_REM_EQ] THEN + REWRITE_TAC[INT_OF_NUM_LT; p_256] THEN CONV_TAC NUM_REDUCE_CONV);; + +let lemont = prove + (`(&i * x * y) rem &p_256 = (&i * x rem &p_256 * y rem &p_256) rem &p_256`, + CONV_TAC INT_REM_DOWN_CONV THEN REWRITE_TAC[]);; + +let pumont = prove + (`(&(inverse_mod p_256 (2 EXP 256)) * + (&2 pow 256 * x) rem &p_256 * (&2 pow 256 * y) rem &p_256) rem &p_256 = + (&2 pow 256 * x * y) rem &p_256`, + CONV_TAC INT_REM_DOWN_CONV THEN REWRITE_TAC[INT_REM_EQ] THEN + MATCH_MP_TAC(INTEGER_RULE + `(i * t:int == &1) (mod p) + ==> (i * (t * x) * (t * y) == t * x * y) (mod p)`) THEN + REWRITE_TAC[GSYM num_congruent; INT_OF_NUM_CLAUSES] THEN + REWRITE_TAC[INVERSE_MOD_LMUL_EQ; COPRIME_REXP; COPRIME_2; p_256] THEN + CONV_TAC NUM_REDUCE_CONV);; + +let silemma = prove + (`(&12 * (e * x) rem p - &9 * (e * y) rem p) rem p = + (e * (&12 * x - &9 * y)) rem p`, + CONV_TAC INT_REM_DOWN_CONV THEN + AP_THM_TAC THEN AP_TERM_TAC THEN INT_ARITH_TAC);; + +let lvs = + ["x_1",[`X16`; `0`]; + "y_1",[`X16`; `32`]; + "z_1",[`X16`; `64`]; + "x_3",[`X15`; `0`]; + "y_3",[`X15`; `32`]; + "z_3",[`X15`; `64`]; + "z2",[`SP`; `0`]; + "y2",[`SP`; `32`]; + "x2p",[`SP`; `64`]; + "xy2",[`SP`; `96`]; + "y4",[`SP`; `128`]; + "t2",[`SP`; `128`]; + "dx2",[`SP`; `160`]; + "t1",[`SP`; `160`]; + "d",[`SP`; `192`]; + "x4p",[`SP`; `192`]];; + +(* ------------------------------------------------------------------------- *) +(* Instances of montsqr. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_MONTSQR_P256_TAC = + ARM_MACRO_SIM_ABBREV_TAC p256_montjdouble_mc 91 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1. + !a. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = a + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0x106c) (word_add (read p3 t) (word n3),32) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p256_montjdouble_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X15 s = read X15 t /\ + read X16 s = read X16 t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) s = + a) + (\s. read PC s = pcout /\ + (a EXP 2 <= 2 EXP 256 * p_256 + ==> read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 4)) s = + (inverse_mod p_256 (2 EXP 256) * a EXP 2) MOD p_256)) + (MAYCHANGE [PC; X0; X1; X2; X3; X4; X5; X6; X7; X8; X9; + X10; X11; X12; X13; X14] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 4)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + (*** Globalize the a EXP 2 <= 2 EXP 256 * p_256 assumption ***) + + ASM_CASES_TAC `a EXP 2 <= 2 EXP 256 * p_256` THENL + [ASM_REWRITE_TAC[]; ARM_SIM_TAC P256_MONTJDOUBLE_EXEC (1--91)] THEN + ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "x_" o lhand o concl) THEN + + (*** Simulate the core pre-reduced result accumulation ***) + + ARM_ACCSTEPS_TAC P256_MONTJDOUBLE_EXEC (1--79) (1--79) THEN + RULE_ASSUM_TAC(REWRITE_RULE[COND_SWAP; GSYM WORD_BITVAL]) THEN + ABBREV_TAC + `t = bignum_of_wordlist + [sum_s75; sum_s76; sum_s77; sum_s78; word(bitval carry_s78)]` THEN + SUBGOAL_THEN + `t < 2 * p_256 /\ (2 EXP 256 * t == a EXP 2) (mod p_256)` + STRIP_ASSUME_TAC THENL + [ACCUMULATOR_POP_ASSUM_LIST + (STRIP_ASSUME_TAC o end_itlist CONJ o DECARRY_RULE) THEN + CONJ_TAC THENL + [FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP (ARITH_RULE + `ab <= 2 EXP 256 * p + ==> 2 EXP 256 * t < ab + 2 EXP 256 * p ==> t < 2 * p`)) THEN + MAP_EVERY EXPAND_TAC ["a"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + REWRITE_TAC[p_256; REAL_ARITH `a:real < b + c <=> a - b < c`] THEN + ASM_REWRITE_TAC[VAL_WORD_BITVAL] THEN BOUNDER_TAC[]; + REWRITE_TAC[REAL_CONGRUENCE; p_256] THEN CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["a"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ASM_REWRITE_TAC[VAL_WORD_BITVAL] THEN REAL_INTEGER_TAC]; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Final correction stage ***) + + ARM_ACCSTEPS_TAC P256_MONTJDOUBLE_EXEC (81--85) (80--91) THEN + RULE_ASSUM_TAC(REWRITE_RULE + [GSYM WORD_BITVAL; COND_SWAP; REAL_BITVAL_NOT]) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + TRANS_TAC EQ_TRANS `t MOD p_256` THEN CONJ_TAC THENL + [ALL_TAC; + REWRITE_TAC[GSYM CONG] THEN FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP + (NUMBER_RULE + `(e * t == a EXP 2) (mod p) + ==> (e * i == 1) (mod p) ==> (t == i * a EXP 2) (mod p)`)) THEN + REWRITE_TAC[INVERSE_MOD_RMUL_EQ; COPRIME_REXP; COPRIME_2] THEN + REWRITE_TAC[p_256] THEN CONV_TAC NUM_REDUCE_CONV] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC EQUAL_FROM_CONGRUENT_MOD_MOD THEN + MAP_EVERY EXISTS_TAC + [`256`; `if t < p_256 then &t:real else &t - &p_256`] THEN + REPEAT CONJ_TAC THENL + [REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN BOUNDER_TAC[]; + REWRITE_TAC[p_256] THEN ARITH_TAC; + REWRITE_TAC[p_256] THEN ARITH_TAC; + ALL_TAC; + ASM_SIMP_TAC[MOD_CASES] THEN + GEN_REWRITE_TAC LAND_CONV [COND_RAND] THEN + SIMP_TAC[REAL_OF_NUM_SUB; GSYM NOT_LT]] THEN + SUBGOAL_THEN `carry_s85 <=> t < p_256` SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN EXISTS_TAC `320` THEN + EXPAND_TAC "t" THEN + REWRITE_TAC[p_256; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + CONV_TAC NUM_REDUCE_CONV THEN REWRITE_TAC[VAL_WORD_BITVAL] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ALL_TAC] THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[] THEN EXPAND_TAC "t" THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist; p_256] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + ASM_REWRITE_TAC[BITVAL_CLAUSES; VAL_WORD_BITVAL] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instances of montmul. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_MONTMUL_P256_TAC = + ARM_MACRO_SIM_ABBREV_TAC p256_montjdouble_mc 117 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1 p2 n2. + !a. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = a + ==> + !b. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) t = b + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0x106c) (word_add (read p3 t) (word n3),32) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p256_montjdouble_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X15 s = read X15 t /\ + read X16 s = read X16 t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) s = + a /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) s = + b) + (\s. read PC s = pcout /\ + (a * b <= 2 EXP 256 * p_256 + ==> read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 4)) s = + (inverse_mod p_256 (2 EXP 256) * a * b) MOD p_256)) + (MAYCHANGE [PC; X0; X1; X2; X3; X4; X5; X6; X7; X8; X9; X10; X11; X12; + X13; X14] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 4)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + (*** Globalize the a * b <= 2 EXP 256 * p_256 assumption ***) + + ASM_CASES_TAC `a * b <= 2 EXP 256 * p_256` THENL + [ASM_REWRITE_TAC[]; ARM_SIM_TAC P256_MONTJDOUBLE_EXEC (1--117)] THEN + ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "y_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "x_" o lhand o concl) THEN + + (*** Simulate the core pre-reduced result accumulation ***) + + ARM_ACCSTEPS_TAC P256_MONTJDOUBLE_EXEC (1--104) (1--104) THEN + RULE_ASSUM_TAC(REWRITE_RULE[WORD_UNMASK_64]) THEN + ABBREV_TAC + `t = bignum_of_wordlist + [sum_s100; sum_s101; sum_s102; sum_s103; + word(bitval carry_s103)]` THEN + SUBGOAL_THEN + `t < 2 * p_256 /\ (2 EXP 256 * t == a * b) (mod p_256)` + STRIP_ASSUME_TAC THENL + [ACCUMULATOR_POP_ASSUM_LIST + (STRIP_ASSUME_TAC o end_itlist CONJ o DECARRY_RULE) THEN + CONJ_TAC THENL + [FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP (ARITH_RULE + `ab <= 2 EXP 256 * p + ==> 2 EXP 256 * t < ab + 2 EXP 256 * p ==> t < 2 * p`)) THEN + MAP_EVERY EXPAND_TAC ["a"; "b"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + REWRITE_TAC[p_256; REAL_ARITH `a:real < b + c <=> a - b < c`] THEN + ASM_REWRITE_TAC[VAL_WORD_BITVAL] THEN BOUNDER_TAC[]; + REWRITE_TAC[REAL_CONGRUENCE; p_256] THEN CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["a"; "b"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ASM_REWRITE_TAC[VAL_WORD_BITVAL] THEN REAL_INTEGER_TAC]; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Final correction stage ***) + + ARM_ACCSTEPS_TAC P256_MONTJDOUBLE_EXEC (107--111) (105--117) THEN + RULE_ASSUM_TAC(REWRITE_RULE + [GSYM WORD_BITVAL; COND_SWAP; REAL_BITVAL_NOT]) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + TRANS_TAC EQ_TRANS `t MOD p_256` THEN CONJ_TAC THENL + [ALL_TAC; + REWRITE_TAC[GSYM CONG] THEN FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP + (NUMBER_RULE + `(e * t == a * b) (mod p) + ==> (e * i == 1) (mod p) ==> (t == i * a * b) (mod p)`)) THEN + REWRITE_TAC[INVERSE_MOD_RMUL_EQ; COPRIME_REXP; COPRIME_2] THEN + REWRITE_TAC[p_256] THEN CONV_TAC NUM_REDUCE_CONV] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC EQUAL_FROM_CONGRUENT_MOD_MOD THEN + MAP_EVERY EXISTS_TAC + [`256`; `if t < p_256 then &t:real else &t - &p_256`] THEN + REPEAT CONJ_TAC THENL + [REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN BOUNDER_TAC[]; + REWRITE_TAC[p_256] THEN ARITH_TAC; + REWRITE_TAC[p_256] THEN ARITH_TAC; + ALL_TAC; + ASM_SIMP_TAC[MOD_CASES] THEN + GEN_REWRITE_TAC LAND_CONV [COND_RAND] THEN + SIMP_TAC[REAL_OF_NUM_SUB; GSYM NOT_LT]] THEN + SUBGOAL_THEN `carry_s111 <=> t < p_256` SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN EXISTS_TAC `320` THEN + EXPAND_TAC "t" THEN + REWRITE_TAC[p_256; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + CONV_TAC NUM_REDUCE_CONV THEN REWRITE_TAC[VAL_WORD_BITVAL] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ALL_TAC] THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[] THEN EXPAND_TAC "t" THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist; p_256] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + ASM_REWRITE_TAC[BITVAL_CLAUSES; VAL_WORD_BITVAL] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instances of sub. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_SUB_P256_TAC = + ARM_MACRO_SIM_ABBREV_TAC p256_montjdouble_mc 17 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) t = n + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0x106c) (word_add (read p3 t) (word n3),32) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p256_montjdouble_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X15 s = read X15 t /\ + read X16 s = read X16 t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) s = + n) + (\s. read PC s = pcout /\ + (m < p_256 /\ n < p_256 + ==> &(read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 4)) s) = (&m - &n) rem &p_256)) + (MAYCHANGE [PC; X3; X4; X5; X6; X7; X8] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 4)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "m_" o lhand o concl) THEN + + ARM_ACCSTEPS_TAC P256_MONTJDOUBLE_EXEC (1--8) (1--8) THEN + + SUBGOAL_THEN `carry_s8 <=> m < n` SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN EXISTS_TAC `256` THEN + MAP_EVERY EXPAND_TAC ["m"; "n"] THEN REWRITE_TAC[GSYM REAL_OF_NUM_ADD] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_MUL; GSYM REAL_OF_NUM_POW] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ALL_TAC] THEN + + ARM_STEPS_TAC P256_MONTJDOUBLE_EXEC [9] THEN + RULE_ASSUM_TAC(REWRITE_RULE[WORD_UNMASK_64; NOT_LE]) THEN + ARM_ACCSTEPS_TAC P256_MONTJDOUBLE_EXEC (10--17) (10--17) THEN + + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN STRIP_TAC THEN + CONV_TAC(LAND_CONV(RAND_CONV BIGNUM_EXPAND_CONV)) THEN + ASM_REWRITE_TAC[] THEN DISCARD_STATE_TAC "s17" THEN + + CONV_TAC SYM_CONV THEN MATCH_MP_TAC INT_REM_UNIQ THEN + EXISTS_TAC `--(&(bitval(m < n))):int` THEN REWRITE_TAC[INT_ABS_NUM] THEN + REWRITE_TAC[INT_ARITH `m - n:int = --b * p + z <=> z = b * p + m - n`] THEN + REWRITE_TAC[int_eq; int_le; int_lt] THEN + REWRITE_TAC[int_add_th; int_mul_th; int_of_num_th; int_sub_th] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_ADD; GSYM REAL_OF_NUM_MUL; + GSYM REAL_OF_NUM_POW] THEN + MATCH_MP_TAC(REAL_ARITH + `!t:real. p < t /\ + (&0 <= a /\ a < p) /\ + (&0 <= z /\ z < t) /\ + ((&0 <= z /\ z < t) /\ (&0 <= a /\ a < t) ==> z = a) + ==> z = a /\ &0 <= z /\ z < p`) THEN + EXISTS_TAC `(&2:real) pow 256` THEN + + CONJ_TAC THENL [REWRITE_TAC[p_256] THEN REAL_ARITH_TAC; ALL_TAC] THEN + CONJ_TAC THENL + [MAP_EVERY UNDISCH_TAC [`m < p_256`; `n < p_256`] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_LT] THEN + ASM_CASES_TAC `&m:real < &n` THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + POP_ASSUM MP_TAC THEN REWRITE_TAC[p_256] THEN REAL_ARITH_TAC; + ALL_TAC] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; STRIP_TAC] THEN + + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`256`; `&0:real`] THEN + ASM_REWRITE_TAC[] THEN + CONJ_TAC THENL [REAL_INTEGER_TAC; ALL_TAC] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + REWRITE_TAC[WORD_AND_MASK] THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC WORD_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["m"; "n"] THEN REWRITE_TAC[GSYM REAL_OF_NUM_ADD] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_MUL; GSYM REAL_OF_NUM_POW; p_256] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + CONV_TAC(RAND_CONV REAL_POLY_CONV) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instances of weakadd *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_WEAKADD_P256_TAC = + ARM_MACRO_SIM_ABBREV_TAC p256_montjdouble_mc 17 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) t = n + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0x106c) (word_add (read p3 t) (word n3),32) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p256_montjdouble_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X15 s = read X15 t /\ + read X16 s = read X16 t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) s = + n) + (\s. read PC s = pcout /\ + (m + n < 2 EXP 256 + p_256 + ==> read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 4)) s < 2 EXP 256 /\ + (&(read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 4)) s):int == &m + &n) (mod &p_256))) + (MAYCHANGE [PC; X1; X2; X3; X4; X5; X6; X7; X8] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 4)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "m_" o lhand o concl) THEN + + ARM_ACCSTEPS_TAC P256_MONTJDOUBLE_EXEC (1--8) (1--8) THEN + SUBGOAL_THEN `carry_s8 <=> 2 EXP 256 <= m + n` SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LE THEN EXISTS_TAC `256` THEN + MAP_EVERY EXPAND_TAC ["m"; "n"] THEN REWRITE_TAC[GSYM REAL_OF_NUM_ADD] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_MUL; GSYM REAL_OF_NUM_POW] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ALL_TAC] THEN + ARM_STEPS_TAC P256_MONTJDOUBLE_EXEC [9] THEN + RULE_ASSUM_TAC(REWRITE_RULE[WORD_UNMASK_64; NOT_LE]) THEN + ARM_ACCSTEPS_TAC P256_MONTJDOUBLE_EXEC (10--17) (10--17) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN STRIP_TAC THEN + MATCH_MP_TAC(MESON[] + `!x. (x < 2 EXP 256 /\ P x) /\ y = x ==> y < 2 EXP 256 /\ P y`) THEN + EXISTS_TAC `if m + n < 2 EXP 256 then m + n else (m + n) - p_256` THEN + REPEAT CONJ_TAC THENL + [UNDISCH_TAC `m + n < 2 EXP 256 + p_256` THEN + REWRITE_TAC[p_256] THEN ARITH_TAC; + COND_CASES_TAC THEN + ASM_REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES; INT_CONG_REFL] THEN + MATCH_MP_TAC(INTEGER_RULE `y - p:int = x ==> (x == y) (mod p)`) THEN + REWRITE_TAC[INT_OF_NUM_CLAUSES] THEN MATCH_MP_TAC INT_OF_NUM_SUB THEN + FIRST_X_ASSUM(MP_TAC o GEN_REWRITE_RULE I [NOT_LT]) THEN + REWRITE_TAC[p_256] THEN ARITH_TAC; + ALL_TAC] THEN + RULE_ASSUM_TAC(REWRITE_RULE[SYM(NUM_REDUCE_CONV `2 EXP 256`)]) THEN + ABBREV_TAC `b <=> 2 EXP 256 <= m + n` THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN + ASM_REWRITE_TAC[GSYM NOT_LE] THEN DISCARD_STATE_TAC "s27" THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; COND_SWAP] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`256`; `&0:real`] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN CONJ_TAC THENL + [REWRITE_TAC[REAL_OF_NUM_CLAUSES] THEN + UNDISCH_TAC `m + n < 2 EXP 256 + p_256` THEN + EXPAND_TAC "b" THEN ARITH_TAC; + REWRITE_TAC[INTEGER_CLOSED]] THEN + SUBGOAL_THEN + `&(if b then (m + n) - p_256 else m + n):real = + if b then (&m + &n) - &p_256 else &m + &n` + SUBST1_TAC THENL + [COND_CASES_TAC THEN ASM_REWRITE_TAC[REAL_OF_NUM_CLAUSES] THEN + MATCH_MP_TAC(GSYM REAL_OF_NUM_SUB) THEN + UNDISCH_TAC `b:bool` THEN EXPAND_TAC "b" THEN + REWRITE_TAC[p_256] THEN ARITH_TAC; + ALL_TAC] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC WORD_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["m"; "n"] THEN REWRITE_TAC[GSYM REAL_OF_NUM_ADD] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_MUL; GSYM REAL_OF_NUM_POW; p_256] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + CONV_TAC(RAND_CONV REAL_POLY_CONV) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instances of add. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_ADD_P256_TAC = + ARM_MACRO_SIM_ABBREV_TAC p256_montjdouble_mc 25 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) t = n + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0x106c) (word_add (read p3 t) (word n3),32) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p256_montjdouble_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X15 s = read X15 t /\ + read X16 s = read X16 t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) s = + n) + (\s. read PC s = pcout /\ + (m < p_256 /\ n < p_256 + ==> read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 4)) s = (m + n) MOD p_256)) + (MAYCHANGE [PC; X3; X4; X5; X6; X7; X8] ,, + MAYCHANGE [memory :> bytes(word_add (read p3 t) (word n3),8 * 4)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "m_" o lhand o concl) THEN + + ARM_ACCSTEPS_TAC P256_MONTJDOUBLE_EXEC (1--9) (1--9) THEN + + SUBGOAL_THEN + `2 EXP 256 * bitval carry_s8 + + bignum_of_wordlist [sum_s3; sum_s4; sum_s7; sum_s8] = + m + n` + ASSUME_TAC THENL + [REWRITE_TAC[bignum_of_wordlist; MULT_CLAUSES; ADD_CLAUSES] THEN + MAP_EVERY EXPAND_TAC ["m"; "n"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_EQ; GSYM REAL_OF_NUM_ADD; + GSYM REAL_OF_NUM_MUL; GSYM REAL_OF_NUM_POW] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_ARITH_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + ARM_ACCSTEPS_TAC P256_MONTJDOUBLE_EXEC (10--15) (10--15) THEN + RULE_ASSUM_TAC(REWRITE_RULE[REAL_BITVAL_NOT]) THEN + + SUBGOAL_THEN + `carry_s15 <=> + bignum_of_wordlist [sum_s3; sum_s4; sum_s7; sum_s8] < p_256` + SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN EXISTS_TAC `256` THEN + REWRITE_TAC[bignum_of_wordlist; MULT_CLAUSES; ADD_CLAUSES] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_EQ; GSYM REAL_OF_NUM_ADD; p_256; + GSYM REAL_OF_NUM_MUL; GSYM REAL_OF_NUM_POW] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + CONV_TAC(BINOP_CONV(BINOP_CONV REAL_POLY_CONV)) THEN BOUNDER_TAC[]; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + ARM_STEPS_TAC P256_MONTJDOUBLE_EXEC [16;17] THEN + + FIRST_X_ASSUM(MP_TAC o + SPEC `word_neg(word(bitval(p_256 <= m + n))):int64` o + MATCH_MP (MESON[] `read X3 s = z ==> !a. z = a ==> read X3 s = a`)) THEN + ANTS_TAC THENL + [REWRITE_TAC[GSYM WORD_ADD; ADD_CLAUSES; VAL_WORD; DIMINDEX_64] THEN + SIMP_TAC[BITVAL_BOUND; MOD_LT; ADD_EQ_0; BITVAL_EQ_0; + ARITH_RULE `a <= 1 /\ b <= 1 ==> a + b < 2 EXP 64`] THEN + FIRST_X_ASSUM(fun th -> GEN_REWRITE_TAC (funpow 5 RAND_CONV) [SYM th]) THEN + BOOL_CASES_TAC `carry_s8:bool` THEN + REWRITE_TAC[BITVAL_CLAUSES; ADD_CLAUSES; COND_SWAP; MULT_CLAUSES; + ADD_CLAUSES; WORD_MASK] THEN + CONV_TAC WORD_REDUCE_CONV THEN + ONCE_REWRITE_TAC[COND_RAND] THEN CONV_TAC WORD_REDUCE_CONV THEN + REWRITE_TAC[p_256] THEN ARITH_TAC; + DISCH_TAC] THEN + + ARM_ACCSTEPS_TAC P256_MONTJDOUBLE_EXEC (18--25) (18--25) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN STRIP_TAC THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN + ASM_REWRITE_TAC[] THEN DISCARD_STATE_TAC "s25" THEN + + ASM_SIMP_TAC[MOD_CASES; ARITH_RULE `m < p /\ n < p ==> m + n < 2 * p`] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_EQ] THEN ONCE_REWRITE_TAC[COND_RAND] THEN + SIMP_TAC[GSYM REAL_OF_NUM_SUB; GSYM NOT_LT] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_ADD; GSYM REAL_OF_NUM_MUL; + GSYM REAL_OF_NUM_POW] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`256`; `&0:real`] THEN + ASM_REWRITE_TAC[] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN + CONJ_TAC THENL + [MAP_EVERY UNDISCH_TAC [`m < p_256`; `n < p_256`] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_LT; GSYM REAL_OF_NUM_ADD] THEN + REWRITE_TAC[p_256] THEN REAL_ARITH_TAC; + ALL_TAC] THEN + CONJ_TAC THENL [REAL_INTEGER_TAC; ALL_TAC] THEN + FIRST_X_ASSUM(SUBST1_TAC o MATCH_MP (MESON[REAL_OF_NUM_ADD; REAL_OF_NUM_EQ] + `a:num = m + n ==> &m + &n = &a`)) THEN + REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_ADD; GSYM REAL_OF_NUM_MUL; + GSYM REAL_OF_NUM_POW] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + REWRITE_TAC[WORD_AND_MASK] THEN REWRITE_TAC[GSYM NOT_LE; COND_SWAP] THEN + REWRITE_TAC[WORD_MASK] THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC WORD_REDUCE_CONV THEN + REWRITE_TAC[GSYM REAL_OF_NUM_MUL; GSYM REAL_OF_NUM_POW; p_256] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + CONV_TAC(RAND_CONV REAL_POLY_CONV) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instance (12,9) of cmsub (the only one used in this code). *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_CMSUBC9_P256_TAC = + ARM_MACRO_SIM_ABBREV_TAC p256_montjdouble_mc 61 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) t = n + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0x106c) (word_add (read p3 t) (word n3),32) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p256_montjdouble_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X15 s = read X15 t /\ + read X16 s = read X16 t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) s = + n) + (\s. read PC s = pcout /\ + (n <= p_256 + ==> &(read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 4)) s) = (&12 * &m - &9 * &n) rem &p_256)) + (MAYCHANGE [PC; X1; X2; X3; X4; X5; X6; X7; X8; X9; + X10; X11; X12] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 4)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + ASM_CASES_TAC `n <= p_256` THENL + [ASM_REWRITE_TAC[]; ARM_SIM_TAC P256_MONTJDOUBLE_EXEC (1--61)] THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "m_" o lhand o concl) THEN + + SUBGOAL_THEN + `(&12 * &m - &9 * &n) rem &p_256 = + (&12 * &m + &9 * (&p_256 - &n)) rem &p_256` + SUBST1_TAC THENL + [REWRITE_TAC[INT_REM_EQ] THEN CONV_TAC INTEGER_RULE; + ASM_SIMP_TAC[INT_OF_NUM_CLAUSES; INT_OF_NUM_SUB; INT_OF_NUM_REM]] THEN + + (*** Initial negation of n ***) + + ARM_ACCSTEPS_TAC P256_MONTJDOUBLE_EXEC (1--10) (1--10) THEN + ABBREV_TAC + `n' = bignum_of_wordlist[sum_s4; sum_s6; sum_s8; sum_s10]` THEN + SUBGOAL_THEN `p_256 - n = n'` SUBST1_TAC THENL + [ASM_SIMP_TAC[GSYM REAL_OF_NUM_CLAUSES; GSYM REAL_OF_NUM_SUB] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`256`; `&0:real`] THEN CONJ_TAC THENL + [UNDISCH_TAC `n <= p_256` THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; p_256] THEN REAL_ARITH_TAC; + MAP_EVERY EXPAND_TAC ["n"; "n'"] THEN + REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES]] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; REWRITE_TAC[INTEGER_CLOSED]] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th; p_256]) THEN REAL_INTEGER_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** The main multiply-add accumulation without the final bump ***) + + ARM_ACCSTEPS_TAC P256_MONTJDOUBLE_EXEC (11--42) (11--42) THEN + ABBREV_TAC + `ca = + bignum_of_wordlist[sum_s27; sum_s39; sum_s40; sum_s41; sum_s42]` THEN + SUBGOAL_THEN `12 * m + 9 * n' < 24 * p_256` ASSUME_TAC THENL + [MAP_EVERY EXPAND_TAC ["m"; "n'"] THEN REWRITE_TAC[p_256] THEN + CONV_TAC NUM_REDUCE_CONV THEN BOUNDER_TAC[]; + ALL_TAC] THEN + SUBGOAL_THEN `12 * m + 9 * n' = ca` SUBST_ALL_TAC THENL + [MATCH_MP_TAC CONG_IMP_EQ THEN EXISTS_TAC `2 EXP 320` THEN + CONV_TAC NUM_REDUCE_CONV THEN CONJ_TAC THENL + [MAP_EVERY EXPAND_TAC ["m"; "n'"] THEN BOUNDER_TAC[]; ALL_TAC] THEN + CONJ_TAC THENL [EXPAND_TAC "ca" THEN BOUNDER_TAC[]; ALL_TAC] THEN + REWRITE_TAC[REAL_CONGRUENCE] THEN CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["m"; "n'"; "ca"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Properties of quotient estimate q = h + 1 ***) + + ABBREV_TAC `h = ca DIV 2 EXP 256` THEN + SUBGOAL_THEN `h < 24` ASSUME_TAC THENL + [UNDISCH_TAC `ca < 24 * p_256` THEN EXPAND_TAC "h" THEN + REWRITE_TAC[p_256] THEN ARITH_TAC; + ALL_TAC] THEN + + SUBGOAL_THEN `sum_s42:int64 = word h` SUBST_ALL_TAC THENL + [EXPAND_TAC "h" THEN FIRST_X_ASSUM(fun th -> + GEN_REWRITE_TAC (RAND_CONV o RAND_CONV o LAND_CONV) [SYM th]) THEN + CONV_TAC(ONCE_DEPTH_CONV BIGNUM_OF_WORDLIST_DIV_CONV) THEN + REWRITE_TAC[WORD_VAL]; + ALL_TAC] THEN + MP_TAC(SPEC `ca:num` p256shortishredlemma) THEN ASM_REWRITE_TAC[] THEN + ANTS_TAC THENL + [UNDISCH_TAC `ca < 24 * p_256` THEN EXPAND_TAC "h" THEN + REWRITE_TAC[p_256] THEN ARITH_TAC; + CONV_TAC(LAND_CONV let_CONV) THEN STRIP_TAC] THEN + + (*** Computation of ca - (h + 1) * p_256 ***) + + ARM_ACCSTEPS_TAC P256_MONTJDOUBLE_EXEC (45::46::(49--53)) (43--53) THEN + MP_TAC(SPECL + [`sum_s53:int64`; + `&(bignum_of_wordlist[sum_s49; sum_s50; sum_s51; sum_s52]):real`; + `256`; `ca:num`; `(h + 1) * p_256`] + MASK_AND_VALUE_FROM_CARRY_LT) THEN + ASM_REWRITE_TAC[] THEN ANTS_TAC THENL + [CONJ_TAC THENL + [MAP_EVERY UNDISCH_TAC + [`(h + 1) * p_256 <= ca + p_256`; + `ca < (h + 1) * p_256 + p_256`] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; p_256] THEN REAL_ARITH_TAC; + ALL_TAC] THEN + CONJ_TAC THENL + [REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + BOUNDER_TAC[]; + ALL_TAC] THEN + SUBST1_TAC(SYM(ASSUME + `bignum_of_wordlist [sum_s27; sum_s39; sum_s40; sum_s41; word h] = + ca`)) THEN + REWRITE_TAC[p_256; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ) THEN + UNDISCH_TAC `h < 24` THEN + SPEC_TAC(`h:num`,`h:num`) THEN CONV_TAC EXPAND_CASES_CONV THEN + CONV_TAC(DEPTH_CONV(NUM_RED_CONV ORELSEC WORD_RED_CONV ORELSEC + GEN_REWRITE_CONV I [BITVAL_CLAUSES])) THEN + REPEAT CONJ_TAC THEN + DISCH_THEN(MP_TAC o end_itlist CONJ o DESUM_RULE o CONJUNCTS) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC) THEN DISCARD_FLAGS_TAC THEN + DISCH_THEN(CONJUNCTS_THEN2 SUBST_ALL_TAC MP_TAC) THEN + REWRITE_TAC[MESON[REAL_MUL_RZERO; REAL_MUL_RID; REAL_ADD_RID; bitval] + `(if p then x + a else x):real = x + a * &(bitval p)`] THEN + DISCH_TAC] THEN + + (*** Final corrective masked addition ***) + + ARM_ACCSTEPS_TAC P256_MONTJDOUBLE_EXEC [54;56;57;59] (54--61) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC MOD_UNIQ_BALANCED_REAL THEN + MAP_EVERY EXISTS_TAC [`h + 1`; `256`] THEN + ASM_REWRITE_TAC[] THEN + ABBREV_TAC `topcar <=> ca < (h + 1) * p_256` THEN + FIRST_X_ASSUM(SUBST1_TAC o MATCH_MP (REAL_ARITH + `x:real = &ca - y + z ==> &ca = x + y - z`)) THEN + REWRITE_TAC[p_256] THEN CONJ_TAC THENL [ARITH_TAC; ALL_TAC] THEN + REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; p_256; bignum_of_wordlist] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + POP_ASSUM_LIST(K ALL_TAC) THEN + BOOL_CASES_TAC `topcar:bool` THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC WORD_REDUCE_CONV THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instance of cmsub41_p256 (actually there is only one). *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_CMSUB41_P256_TAC = + ARM_MACRO_SIM_ABBREV_TAC p256_montjdouble_mc 32 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) t = n + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0x106c) (word_add (read p3 t) (word n3),32) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p256_montjdouble_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X15 s = read X15 t /\ + read X16 s = read X16 t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) s = + n) + (\s. read PC s = pcout /\ + (n < p_256 + ==> &(read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 4)) s) = (&4 * &m - &n) rem &p_256)) + (MAYCHANGE [PC; X0; X1; X2; X3; X4; X5; X6; X7; X8] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 4)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + (*** Globalize the n < p_256 assumption ***) + + ASM_CASES_TAC `n < p_256` THENL + [ASM_REWRITE_TAC[]; ARM_SIM_TAC P256_MONTJDOUBLE_EXEC (1--32)] THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "m_" o lhand o concl) THEN + + (*** Instantiate the (integer) quotient approximation lemma ***) + + MP_TAC(SPEC `&4 * &m - &n:int` p256shortintredlemma) THEN ANTS_TAC THENL + [ASM_SIMP_TAC[INT_OF_NUM_LT; INT_ARITH + `n:int < p ==> --p <= &4 * &m - n`] THEN + MATCH_MP_TAC(INT_ARITH `x:int <= a ==> x - &n <= a`) THEN + REWRITE_TAC[INT_OF_NUM_CLAUSES] THEN EXPAND_TAC "m" THEN BOUNDER_TAC[]; + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN STRIP_TAC] THEN + + (*** Main shift-subtract block ***) + + ARM_ACCSTEPS_TAC P256_MONTJDOUBLE_EXEC [4;6;10;12;14;15] (1--15) THEN + ABBREV_TAC `ca = bignum_of_wordlist + [sum_s4; sum_s6; sum_s10; sum_s12; sum_s15]` THEN + SUBGOAL_THEN `&2 pow 256 + &4 * &m - &n:int = &ca` + (fun th -> SUBST_ALL_TAC th THEN ASSUME_TAC th) + THENL + [REWRITE_TAC[int_eq; int_add_th; int_sub_th; int_pow_th; + int_mul_th; int_of_num_th] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`320`; `&0:real`] THEN CONJ_TAC THENL + [MAP_EVERY EXPAND_TAC ["m"; "n"; "ca"] THEN BOUNDER_TAC[]; + ALL_TAC] THEN + CONJ_TAC THENL [EXPAND_TAC "ca" THEN BOUNDER_TAC[]; ALL_TAC] THEN + REWRITE_TAC[INTEGER_CLOSED] THEN + SUBGOAL_THEN + `&4 * &m:real = + &(bignum_of_wordlist + [word_shl m_0 2; + word_subword ((word_join:int64->int64->int128) m_1 m_0) (62,64); + word_subword ((word_join:int64->int64->int128) m_2 m_1) (62,64); + word_subword ((word_join:int64->int64->int128) m_3 m_2) (62,64); + word_ushr m_3 62])` + SUBST1_TAC THENL + [EXPAND_TAC "m" THEN + REWRITE_TAC[bignum_of_wordlist; REAL_OF_NUM_CLAUSES] THEN + REWRITE_TAC[val_def; DIMINDEX_64; bignum_of_wordlist] THEN + REWRITE_TAC[ARITH_RULE `i < 64 <=> 0 <= i /\ i <= 63`] THEN + REWRITE_TAC[GSYM IN_NUMSEG; IN_GSPEC] THEN + REWRITE_TAC[BIT_WORD_SUBWORD; BIT_WORD_JOIN; BIT_WORD_USHR; + BIT_WORD_SHL; DIMINDEX_64; DIMINDEX_128] THEN + CONV_TAC NUM_REDUCE_CONV THEN + CONV_TAC(ONCE_DEPTH_CONV EXPAND_NSUM_CONV) THEN + CONV_TAC NUM_REDUCE_CONV THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC WORD_REDUCE_CONV THEN REWRITE_TAC[BITVAL_CLAUSES] THEN + ONCE_REWRITE_TAC[BIT_GUARD] THEN REWRITE_TAC[DIMINDEX_64] THEN + CONV_TAC NUM_REDUCE_CONV THEN REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC NUM_RING; + MAP_EVERY EXPAND_TAC ["n"; "ca"] THEN + REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + REWRITE_TAC[REAL_BITVAL_NOT] THEN REAL_INTEGER_TAC]; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Quotient estimate is just the top word after the +1 ***) + + ABBREV_TAC `q:int64 = sum_s15` THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o + check (free_in `sum_s15:int64` o concl))) THEN + SUBGOAL_THEN `&ca div &2 pow 256 = &(val(q:int64))` SUBST_ALL_TAC THENL + [REWRITE_TAC[INT_OF_NUM_CLAUSES; INT_OF_NUM_DIV] THEN + EXPAND_TAC "ca" THEN CONV_TAC(LAND_CONV BIGNUM_OF_WORDLIST_DIV_CONV) THEN + REFL_TAC; + ALL_TAC] THEN + ARM_ACCSTEPS_TAC P256_MONTJDOUBLE_EXEC + [20;21;22;23; 25;27;28;30] (16--32) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(ONCE_DEPTH_CONV BIGNUM_LEXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC INT_REM_UNIQ_BALANCED_MOD THEN + MAP_EVERY EXISTS_TAC [`&(val(q:int64)):int`; `256`] THEN + ASM_REWRITE_TAC[] THEN + REPEAT(CONJ_TAC THENL + [REWRITE_TAC[INT_OF_NUM_CLAUSES; p_256] THEN BOUNDER_TAC[]; ALL_TAC]) THEN + ONCE_REWRITE_TAC[INT_ARITH + `&4 * m - n:int = (&2 pow 256 + &4 * m - n) - &2 pow 256`] THEN + ASM_REWRITE_TAC[] THEN + + (*** Usual finale, but all split explicitly over q for simplicity ***) + + SUBGOAL_THEN + `(&ca - &2 pow 256):int < &(val(q:int64)) * &p_256 <=> ~carry_s23` + SUBST1_TAC THENL + [REWRITE_TAC[INT_LT_SUB_RADD; INT_OF_NUM_CLAUSES] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN + EXISTS_TAC `256` THEN EXPAND_TAC "ca" THEN + REWRITE_TAC[p_256; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + REWRITE_TAC[REAL_BITVAL_NOT] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ) THEN + SUBST1_TAC(SYM(ISPEC `q:int64` WORD_VAL)) THEN + UNDISCH_TAC `&(val(q:int64)):int < &6` THEN + REWRITE_TAC[INT_OF_NUM_CLAUSES] THEN + SPEC_TAC(`val(q:int64)`,`qv:num`) THEN + CONV_TAC EXPAND_CASES_CONV THEN REPEAT CONJ_TAC THEN + CONV_TAC(DEPTH_CONV WORD_NUM_RED_CONV) THEN + DISCH_THEN(MP_TAC o end_itlist CONJ o DECARRY_RULE o CONJUNCTS) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + REWRITE_TAC[INTEGER_RULE + `(a:int == b + c - p) (mod p) <=> (a == b + c) (mod p)`] THEN + REWRITE_TAC[INT_OF_NUM_CLAUSES; GSYM num_congruent] THEN + REWRITE_TAC[REAL_CONGRUENCE; EXP_EQ_0; ARITH_EQ] THEN + EXPAND_TAC "ca" THEN REWRITE_TAC[REAL_BITVAL_NOT] THEN + REWRITE_TAC[p_256; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + RULE_ASSUM_TAC(REWRITE_RULE[WORD_UNMASK_64]) THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ) THEN + REWRITE_TAC[WORD_AND_MASK; WORD_XOR_MASK] THEN + SUBST1_TAC(SYM(ISPEC `q:int64` WORD_VAL)) THEN + UNDISCH_TAC `&(val(q:int64)):int < &6` THEN + REWRITE_TAC[INT_OF_NUM_CLAUSES] THEN + SPEC_TAC(`val(q:int64)`,`qv:num`) THEN + CONV_TAC EXPAND_CASES_CONV THEN REPEAT CONJ_TAC THEN + CONV_TAC(DEPTH_CONV WORD_NUM_RED_CONV) THEN + DISCH_THEN(MP_TAC o end_itlist CONJ o DESUM_RULE o CONJUNCTS) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + ASM_CASES_TAC `carry_s23:bool` THEN + ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN CONV_TAC WORD_REDUCE_CONV THEN + REAL_INTEGER_TAC]);; + +(* ------------------------------------------------------------------------- *) +(* Instance of cmsub38 (there is only one). *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_CMSUB38_P256_TAC = + ARM_MACRO_SIM_ABBREV_TAC p256_montjdouble_mc 54 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) t = n + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0x106c) (word_add (read p3 t) (word n3),32) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p256_montjdouble_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X15 s = read X15 t /\ + read X16 s = read X16 t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) s = + n) + (\s. read PC s = pcout /\ + (n <= p_256 + ==> &(read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 4)) s) = (&3 * &m - &8 * &n) rem &p_256)) + (MAYCHANGE [PC; X0; X1; X2; X3; X4; X5; X6; X7; X8; X9; + X10; X11; X12] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 4)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + ASM_CASES_TAC `n <= p_256` THENL + [ASM_REWRITE_TAC[]; ARM_SIM_TAC P256_MONTJDOUBLE_EXEC (1--54)] THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "m_" o lhand o concl) THEN + + SUBGOAL_THEN + `(&3 * &m - &8 * &n) rem &p_256 = + (&3 * &m + &8 * (&p_256 - &n)) rem &p_256` + SUBST1_TAC THENL + [REWRITE_TAC[INT_REM_EQ] THEN CONV_TAC INTEGER_RULE; + ASM_SIMP_TAC[INT_OF_NUM_CLAUSES; INT_OF_NUM_SUB; INT_OF_NUM_REM]] THEN + + (*** Initial negation of n ***) + + ARM_ACCSTEPS_TAC P256_MONTJDOUBLE_EXEC (1--10) (1--10) THEN + ABBREV_TAC `n' = bignum_of_wordlist[sum_s4; sum_s6; sum_s8; sum_s10]` THEN + SUBGOAL_THEN `p_256 - n = n'` SUBST1_TAC THENL + [ASM_SIMP_TAC[GSYM REAL_OF_NUM_CLAUSES; GSYM REAL_OF_NUM_SUB] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`256`; `&0:real`] THEN CONJ_TAC THENL + [UNDISCH_TAC `n <= p_256` THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; p_256] THEN REAL_ARITH_TAC; + MAP_EVERY EXPAND_TAC ["n"; "n'"] THEN + REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES]] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; REWRITE_TAC[INTEGER_CLOSED]] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th; p_256]) THEN REAL_INTEGER_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** The main multiply-add accumulation without the final bump ***) + + ARM_ACCSTEPS_TAC P256_MONTJDOUBLE_EXEC + [18;20;21;23;25;27;28;30;31;32;33;34;35] (11--35) THEN + ABBREV_TAC + `ca = + bignum_of_wordlist[sum_s20; sum_s32; sum_s33; sum_s34; sum_s35]` THEN + SUBGOAL_THEN `3 * m + 8 * n' < 24 * p_256` ASSUME_TAC THENL + [MAP_EVERY EXPAND_TAC ["m"; "n'"] THEN REWRITE_TAC[p_256] THEN + CONV_TAC NUM_REDUCE_CONV THEN BOUNDER_TAC[]; + ALL_TAC] THEN + SUBGOAL_THEN `3 * m + 8 * n' = ca` SUBST_ALL_TAC THENL + [MATCH_MP_TAC CONG_IMP_EQ THEN EXISTS_TAC `2 EXP 320` THEN + CONV_TAC NUM_REDUCE_CONV THEN CONJ_TAC THENL + [MAP_EVERY EXPAND_TAC ["m"; "n'"] THEN BOUNDER_TAC[]; ALL_TAC] THEN + CONJ_TAC THENL [EXPAND_TAC "ca" THEN BOUNDER_TAC[]; ALL_TAC] THEN + SUBGOAL_THEN + `8 * n' = + bignum_of_wordlist + [word_shl sum_s4 3; + word_subword ((word_join:int64->int64->int128) sum_s6 sum_s4) (61,64); + word_subword ((word_join:int64->int64->int128) sum_s8 sum_s6) (61,64); + word_subword ((word_join:int64->int64->int128) sum_s10 sum_s8) (61,64); + word_ushr sum_s10 61]` + SUBST1_TAC THENL + [EXPAND_TAC "n'" THEN REWRITE_TAC[bignum_of_wordlist] THEN + REWRITE_TAC[val_def; DIMINDEX_64; bignum_of_wordlist] THEN + REWRITE_TAC[ARITH_RULE `i < 64 <=> 0 <= i /\ i <= 63`] THEN + REWRITE_TAC[GSYM IN_NUMSEG; IN_GSPEC] THEN + REWRITE_TAC[BIT_WORD_SUBWORD; BIT_WORD_JOIN; BIT_WORD_USHR; + BIT_WORD_SHL; DIMINDEX_64; DIMINDEX_128] THEN + CONV_TAC NUM_REDUCE_CONV THEN + CONV_TAC(ONCE_DEPTH_CONV EXPAND_NSUM_CONV) THEN + CONV_TAC NUM_REDUCE_CONV THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC WORD_REDUCE_CONV THEN REWRITE_TAC[BITVAL_CLAUSES] THEN + ONCE_REWRITE_TAC[BIT_GUARD] THEN REWRITE_TAC[DIMINDEX_64] THEN + CONV_TAC NUM_REDUCE_CONV THEN REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC NUM_RING; + REWRITE_TAC[REAL_CONGRUENCE] THEN CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["m"; "ca"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC]; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Properties of quotient estimate q = h + 1 ***) + + ABBREV_TAC `h = ca DIV 2 EXP 256` THEN + SUBGOAL_THEN `h < 24` ASSUME_TAC THENL + [UNDISCH_TAC `ca < 24 * p_256` THEN EXPAND_TAC "h" THEN + REWRITE_TAC[p_256] THEN ARITH_TAC; + ALL_TAC] THEN + + SUBGOAL_THEN `sum_s35:int64 = word h` SUBST_ALL_TAC THENL + [EXPAND_TAC "h" THEN FIRST_X_ASSUM(fun th -> + GEN_REWRITE_TAC (RAND_CONV o RAND_CONV o LAND_CONV) [SYM th]) THEN + CONV_TAC(ONCE_DEPTH_CONV BIGNUM_OF_WORDLIST_DIV_CONV) THEN + REWRITE_TAC[WORD_VAL]; + ALL_TAC] THEN + MP_TAC(SPEC `ca:num` p256shortishredlemma) THEN ASM_REWRITE_TAC[] THEN + ANTS_TAC THENL + [UNDISCH_TAC `ca < 24 * p_256` THEN EXPAND_TAC "h" THEN + REWRITE_TAC[p_256] THEN ARITH_TAC; + CONV_TAC(LAND_CONV let_CONV) THEN STRIP_TAC] THEN + + (*** Computation of ca - (h + 1) * p_256 ***) + + ARM_ACCSTEPS_TAC P256_MONTJDOUBLE_EXEC (38::39::(42--46)) (36--46) THEN + MP_TAC(SPECL + [`sum_s46:int64`; + `&(bignum_of_wordlist[sum_s42; sum_s43; sum_s44; sum_s45]):real`; + `256`; `ca:num`; `(h + 1) * p_256`] + MASK_AND_VALUE_FROM_CARRY_LT) THEN + ASM_REWRITE_TAC[] THEN ANTS_TAC THENL + [CONJ_TAC THENL + [MAP_EVERY UNDISCH_TAC + [`(h + 1) * p_256 <= ca + p_256`; + `ca < (h + 1) * p_256 + p_256`] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; p_256] THEN REAL_ARITH_TAC; + ALL_TAC] THEN + CONJ_TAC THENL + [REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + BOUNDER_TAC[]; + ALL_TAC] THEN + SUBST1_TAC(SYM(ASSUME + `bignum_of_wordlist [sum_s20; sum_s32; sum_s33; sum_s34; word h] = + ca`)) THEN + REWRITE_TAC[p_256; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ) THEN + UNDISCH_TAC `h < 24` THEN + SPEC_TAC(`h:num`,`h:num`) THEN CONV_TAC EXPAND_CASES_CONV THEN + CONV_TAC(DEPTH_CONV(NUM_RED_CONV ORELSEC WORD_RED_CONV ORELSEC + GEN_REWRITE_CONV I [BITVAL_CLAUSES])) THEN + REPEAT CONJ_TAC THEN + DISCH_THEN(MP_TAC o end_itlist CONJ o DESUM_RULE o CONJUNCTS) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC) THEN DISCARD_FLAGS_TAC THEN + DISCH_THEN(CONJUNCTS_THEN2 SUBST_ALL_TAC MP_TAC) THEN + REWRITE_TAC[MESON[REAL_MUL_RZERO; REAL_MUL_RID; REAL_ADD_RID; bitval] + `(if p then x + a else x):real = x + a * &(bitval p)`] THEN + DISCH_TAC] THEN + + (*** Final corrective masked addition ***) + + ARM_ACCSTEPS_TAC P256_MONTJDOUBLE_EXEC [47;49;50;52] (47--54) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC MOD_UNIQ_BALANCED_REAL THEN + MAP_EVERY EXISTS_TAC [`h + 1`; `256`] THEN + ASM_REWRITE_TAC[] THEN + ABBREV_TAC `topcar <=> ca < (h + 1) * p_256` THEN + FIRST_X_ASSUM(SUBST1_TAC o MATCH_MP (REAL_ARITH + `x:real = &ca - y + z ==> &ca = x + y - z`)) THEN + REWRITE_TAC[p_256] THEN CONJ_TAC THENL [ARITH_TAC; ALL_TAC] THEN + REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; p_256; bignum_of_wordlist] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + POP_ASSUM_LIST(K ALL_TAC) THEN + BOOL_CASES_TAC `topcar:bool` THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC WORD_REDUCE_CONV THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Overall point operation proof. *) +(* ------------------------------------------------------------------------- *) + +let P256_MONTJDOUBLE_CORRECT = time prove + (`!p3 p1 t1 pc stackpointer. + aligned 16 stackpointer /\ + ALLPAIRS nonoverlapping + [(p3,96); (stackpointer,224)] + [(word pc,0x106c); (p1,96)] /\ + nonoverlapping (p3,96) (stackpointer,224) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p256_montjdouble_mc /\ + read PC s = word(pc + 0x4) /\ + read SP s = stackpointer /\ + C_ARGUMENTS [p3; p1] s /\ + bignum_triple_from_memory (p1,4) s = t1) + (\s. read PC s = word (pc + 0x1064) /\ + (!x1 y1 z1. + ~(z1 = &0) /\ + t1 = tripled nistp256_encode (x1,y1,z1) + ==> bignum_triple_from_memory(p3,4) s = + tripled nistp256_encode + (jacobian_add nistp256 (x1,y1,z1) (x1,y1,z1)))) + (MAYCHANGE [PC; X0; X1; X2; X3; X4; X5; X6; X7; X8; X9; X10; + X11; X12; X13; X14; X15; X16] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,96); + memory :> bytes(stackpointer,224)])`, + REWRITE_TAC[FORALL_PAIR_THM] THEN + MAP_EVERY X_GEN_TAC + [`p3:int64`; `p1:int64`; `x1:num`; `y1:num`; `z1:num`; + `pc:num`; `stackpointer:int64`] THEN + REWRITE_TAC[ALLPAIRS; ALL; NONOVERLAPPING_CLAUSES] THEN STRIP_TAC THEN + REWRITE_TAC[C_ARGUMENTS; SOME_FLAGS; PAIR_EQ; bignum_triple_from_memory] THEN + CONV_TAC(ONCE_DEPTH_CONV NUM_MULT_CONV) THEN + CONV_TAC(ONCE_DEPTH_CONV NORMALIZE_RELATIVE_ADDRESS_CONV) THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + + LOCAL_MONTSQR_P256_TAC 2 ["z2";"z_1"] THEN + LOCAL_MONTSQR_P256_TAC 0 ["y2";"y_1"] THEN + LOCAL_WEAKADD_P256_TAC 0 ["t1";"x_1";"z2"] THEN + LOCAL_SUB_P256_TAC 0 ["t2";"x_1";"z2"] THEN + LOCAL_MONTMUL_P256_TAC 0 ["x2p";"t1";"t2"] THEN + LOCAL_ADD_P256_TAC 0 ["t1";"y_1";"z_1"] THEN + LOCAL_MONTSQR_P256_TAC 0 ["x4p";"x2p"] THEN + LOCAL_MONTMUL_P256_TAC 0 ["xy2";"x_1";"y2"] THEN + LOCAL_MONTSQR_P256_TAC 0 ["t2";"t1"] THEN + LOCAL_CMSUBC9_P256_TAC 0 ["d";"xy2";"x4p"] THEN + LOCAL_SUB_P256_TAC 0 ["t1";"t2";"z2"] THEN + LOCAL_MONTSQR_P256_TAC 0 ["y4";"y2"] THEN + LOCAL_SUB_P256_TAC 0 ["z_3";"t1";"y2"] THEN + LOCAL_MONTMUL_P256_TAC 0 ["dx2";"d";"x2p"] THEN + LOCAL_CMSUB41_P256_TAC 0 ["x_3";"xy2";"d"] THEN + LOCAL_CMSUB38_P256_TAC 0 ["y_3";"dx2";"y4"] THEN + + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + DISCARD_STATE_TAC "s18" THEN + DISCARD_MATCHING_ASSUMPTIONS [`nonoverlapping_modulo a b c`] THEN + + MAP_EVERY X_GEN_TAC [`x1':int`; `y1':int`; `z1':int`] THEN + DISCH_THEN(CONJUNCTS_THEN2 ASSUME_TAC MP_TAC) THEN + REWRITE_TAC[tripled; nistp256_encode; montgomery_encode; PAIR_EQ] THEN + + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN + (STRIP_ASSUME_TAC o MATCH_MP unilemma2)) THEN + + REPEAT(FIRST_X_ASSUM(MP_TAC o check (is_imp o concl))) THEN + REPEAT(ANTS_TAC THENL + [REWRITE_TAC[p_256] THEN RULE_ASSUM_TAC(REWRITE_RULE[p_256]) THEN + CONV_TAC NUM_REDUCE_CONV THEN ASM BOUNDER_TAC[]; + (DISCH_THEN(STRIP_ASSUME_TAC o MATCH_MP unilemma0) ORELSE + DISCH_THEN(STRIP_ASSUME_TAC o MATCH_MP unilemma1) ORELSE + STRIP_TAC)]) THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o GEN_REWRITE_RULE I [GSYM NOT_LE])) THEN + + RULE_ASSUM_TAC(REWRITE_RULE + [num_congruent; GSYM INT_OF_NUM_CLAUSES; GSYM INT_OF_NUM_REM]) THEN + RULE_ASSUM_TAC(REWRITE_RULE[GSYM INT_REM_EQ]) THEN + + RULE_ASSUM_TAC(ONCE_REWRITE_RULE[GSYM INT_SUB_REM; GSYM INT_ADD_REM]) THEN + RULE_ASSUM_TAC(REWRITE_RULE[INT_POW_2]) THEN + RULE_ASSUM_TAC(GEN_REWRITE_RULE (RAND_CONV o TRY_CONV) [lemont]) THEN + + ASM_REWRITE_TAC[jacobian_add; jacobian_eq; nistp256] THEN + ASM_REWRITE_TAC[GSYM nistp256] THEN + REWRITE_TAC[INTEGER_MOD_RING_CLAUSES] THEN + CONV_TAC INT_REDUCE_CONV THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN + CONV_TAC INT_REM_DOWN_CONV THEN + REWRITE_TAC[tripled; montgomery_encode] THEN + REWRITE_TAC[PAIR_EQ; GSYM INT_OF_NUM_EQ; nintlemma] THEN + CONV_TAC INT_REM_DOWN_CONV THEN + + ASM_REWRITE_TAC[pumont; INT_REM_REM; GSYM INT_ADD_LDISTRIB; + GSYM INT_ADD_LDISTRIB; GSYM INT_SUB_LDISTRIB; + INT_SUB_REM; INT_ADD_REM; silemma] THEN + + CONV_TAC INT_REM_DOWN_CONV THEN REPEAT CONJ_TAC THEN + AP_THM_TAC THEN AP_TERM_TAC THEN INT_ARITH_TAC);; + +let P256_MONTJDOUBLE_SUBROUTINE_CORRECT = time prove + (`!p3 p1 t1 pc stackpointer returnaddress. + aligned 16 stackpointer /\ + ALLPAIRS nonoverlapping + [(p3,96); (word_sub stackpointer (word 224),224)] + [(word pc,0x106c); (p1,96)] /\ + nonoverlapping (p3,96) (word_sub stackpointer (word 224),224) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p256_montjdouble_mc /\ + read PC s = word pc /\ + read SP s = stackpointer /\ + read X30 s = returnaddress /\ + C_ARGUMENTS [p3; p1] s /\ + bignum_triple_from_memory (p1,4) s = t1) + (\s. read PC s = returnaddress /\ + (!x1 y1 z1. + ~(z1 = &0) /\ + t1 = tripled nistp256_encode (x1,y1,z1) + ==> bignum_triple_from_memory(p3,4) s = + tripled nistp256_encode + (jacobian_add nistp256 (x1,y1,z1) (x1,y1,z1)))) + (MAYCHANGE [PC; X0; X1; X2; X3; X4; X5; X6; X7; X8; X9; X10; + X11; X12; X13; X14; X15; X16] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,96); + memory :> bytes(word_sub stackpointer (word 224),224)])`, + ARM_ADD_RETURN_STACK_TAC P256_MONTJDOUBLE_EXEC + P256_MONTJDOUBLE_CORRECT `[]` 224);; diff --git a/arm/proofs/p256_montjmixadd.ml b/arm/proofs/p256_montjmixadd.ml new file mode 100644 index 0000000000..b21e69989b --- /dev/null +++ b/arm/proofs/p256_montjmixadd.ml @@ -0,0 +1,2031 @@ +(* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + *) + +(* ========================================================================= *) +(* Mixed addition in Montgomery-Jacobian coordinates for NIST P-256 curve. *) +(* ========================================================================= *) + +needs "arm/proofs/base.ml";; +needs "common/ecencoding.ml";; +needs "EC/jacobian.ml";; +needs "EC/nistp256.ml";; + +prioritize_int();; +prioritize_real();; +prioritize_num();; + +(**** print_literal_from_elf "arm/p256/p256_montjmixadd.o";; + ****) + +let p256_montjmixadd_mc = define_assert_from_elf + "p256_montjmixadd_mc" "arm/p256/p256_montjmixadd.o" +[ + 0xd10303ff; (* arm_SUB SP SP (rvalue (word 192)) *) + 0xaa0003ef; (* arm_MOV X15 X0 *) + 0xaa0103f0; (* arm_MOV X16 X1 *) + 0xaa0203f1; (* arm_MOV X17 X2 *) + 0xa9440e02; (* arm_LDP X2 X3 X16 (Immediate_Offset (iword (&64))) *) + 0x9b037c49; (* arm_MUL X9 X2 X3 *) + 0x9bc37c4a; (* arm_UMULH X10 X2 X3 *) + 0xa9451604; (* arm_LDP X4 X5 X16 (Immediate_Offset (iword (&80))) *) + 0x9b057c4b; (* arm_MUL X11 X2 X5 *) + 0x9bc57c4c; (* arm_UMULH X12 X2 X5 *) + 0x9b047c46; (* arm_MUL X6 X2 X4 *) + 0x9bc47c47; (* arm_UMULH X7 X2 X4 *) + 0xab06014a; (* arm_ADDS X10 X10 X6 *) + 0xba07016b; (* arm_ADCS X11 X11 X7 *) + 0x9b047c66; (* arm_MUL X6 X3 X4 *) + 0x9bc47c67; (* arm_UMULH X7 X3 X4 *) + 0x9a1f00e7; (* arm_ADC X7 X7 XZR *) + 0xab06016b; (* arm_ADDS X11 X11 X6 *) + 0x9b057c8d; (* arm_MUL X13 X4 X5 *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xba07018c; (* arm_ADCS X12 X12 X7 *) + 0x9b057c66; (* arm_MUL X6 X3 X5 *) + 0x9bc57c67; (* arm_UMULH X7 X3 X5 *) + 0x9a1f00e7; (* arm_ADC X7 X7 XZR *) + 0xab06018c; (* arm_ADDS X12 X12 X6 *) + 0xba0701ad; (* arm_ADCS X13 X13 X7 *) + 0x9a1f01ce; (* arm_ADC X14 X14 XZR *) + 0xab090129; (* arm_ADDS X9 X9 X9 *) + 0xba0a014a; (* arm_ADCS X10 X10 X10 *) + 0xba0b016b; (* arm_ADCS X11 X11 X11 *) + 0xba0c018c; (* arm_ADCS X12 X12 X12 *) + 0xba0d01ad; (* arm_ADCS X13 X13 X13 *) + 0xba0e01ce; (* arm_ADCS X14 X14 X14 *) + 0x9a9f37e7; (* arm_CSET X7 Condition_CS *) + 0x9bc27c46; (* arm_UMULH X6 X2 X2 *) + 0x9b027c48; (* arm_MUL X8 X2 X2 *) + 0xab060129; (* arm_ADDS X9 X9 X6 *) + 0x9b037c66; (* arm_MUL X6 X3 X3 *) + 0xba06014a; (* arm_ADCS X10 X10 X6 *) + 0x9bc37c66; (* arm_UMULH X6 X3 X3 *) + 0xba06016b; (* arm_ADCS X11 X11 X6 *) + 0x9b047c86; (* arm_MUL X6 X4 X4 *) + 0xba06018c; (* arm_ADCS X12 X12 X6 *) + 0x9bc47c86; (* arm_UMULH X6 X4 X4 *) + 0xba0601ad; (* arm_ADCS X13 X13 X6 *) + 0x9b057ca6; (* arm_MUL X6 X5 X5 *) + 0xba0601ce; (* arm_ADCS X14 X14 X6 *) + 0x9bc57ca6; (* arm_UMULH X6 X5 X5 *) + 0x9a0600e7; (* arm_ADC X7 X7 X6 *) + 0xab088129; (* arm_ADDS X9 X9 (Shiftedreg X8 LSL 32) *) + 0xd360fd03; (* arm_LSR X3 X8 32 *) + 0xba03014a; (* arm_ADCS X10 X10 X3 *) + 0xb26083e3; (* arm_MOV X3 (rvalue (word 18446744069414584321)) *) + 0x9b037d02; (* arm_MUL X2 X8 X3 *) + 0x9bc37d08; (* arm_UMULH X8 X8 X3 *) + 0xba02016b; (* arm_ADCS X11 X11 X2 *) + 0x9a1f0108; (* arm_ADC X8 X8 XZR *) + 0xab09814a; (* arm_ADDS X10 X10 (Shiftedreg X9 LSL 32) *) + 0xd360fd23; (* arm_LSR X3 X9 32 *) + 0xba03016b; (* arm_ADCS X11 X11 X3 *) + 0xb26083e3; (* arm_MOV X3 (rvalue (word 18446744069414584321)) *) + 0x9b037d22; (* arm_MUL X2 X9 X3 *) + 0x9bc37d29; (* arm_UMULH X9 X9 X3 *) + 0xba020108; (* arm_ADCS X8 X8 X2 *) + 0x9a1f0129; (* arm_ADC X9 X9 XZR *) + 0xab0a816b; (* arm_ADDS X11 X11 (Shiftedreg X10 LSL 32) *) + 0xd360fd43; (* arm_LSR X3 X10 32 *) + 0xba030108; (* arm_ADCS X8 X8 X3 *) + 0xb26083e3; (* arm_MOV X3 (rvalue (word 18446744069414584321)) *) + 0x9b037d42; (* arm_MUL X2 X10 X3 *) + 0x9bc37d4a; (* arm_UMULH X10 X10 X3 *) + 0xba020129; (* arm_ADCS X9 X9 X2 *) + 0x9a1f014a; (* arm_ADC X10 X10 XZR *) + 0xab0b8108; (* arm_ADDS X8 X8 (Shiftedreg X11 LSL 32) *) + 0xd360fd63; (* arm_LSR X3 X11 32 *) + 0xba030129; (* arm_ADCS X9 X9 X3 *) + 0xb26083e3; (* arm_MOV X3 (rvalue (word 18446744069414584321)) *) + 0x9b037d62; (* arm_MUL X2 X11 X3 *) + 0x9bc37d6b; (* arm_UMULH X11 X11 X3 *) + 0xba02014a; (* arm_ADCS X10 X10 X2 *) + 0x9a1f016b; (* arm_ADC X11 X11 XZR *) + 0xab0c0108; (* arm_ADDS X8 X8 X12 *) + 0xba0d0129; (* arm_ADCS X9 X9 X13 *) + 0xba0e014a; (* arm_ADCS X10 X10 X14 *) + 0xba07016b; (* arm_ADCS X11 X11 X7 *) + 0x92800002; (* arm_MOVN X2 (word 0) 0 *) + 0x9a8233e2; (* arm_CSEL X2 XZR X2 Condition_CC *) + 0xb2407fe3; (* arm_MOV X3 (rvalue (word 4294967295)) *) + 0x9a8333e3; (* arm_CSEL X3 XZR X3 Condition_CC *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9a8533e5; (* arm_CSEL X5 XZR X5 Condition_CC *) + 0xeb020108; (* arm_SUBS X8 X8 X2 *) + 0xfa030129; (* arm_SBCS X9 X9 X3 *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xda05016b; (* arm_SBC X11 X11 X5 *) + 0xa90027e8; (* arm_STP X8 X9 SP (Immediate_Offset (iword (&0))) *) + 0xa9012fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&16))) *) + 0xa9441203; (* arm_LDP X3 X4 X16 (Immediate_Offset (iword (&64))) *) + 0xa9422227; (* arm_LDP X7 X8 X17 (Immediate_Offset (iword (&32))) *) + 0x9b077c6c; (* arm_MUL X12 X3 X7 *) + 0x9bc77c6d; (* arm_UMULH X13 X3 X7 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa9432a29; (* arm_LDP X9 X10 X17 (Immediate_Offset (iword (&48))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c60; (* arm_UMULH X0 X3 X9 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c61; (* arm_UMULH X1 X3 X10 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0xa9451a05; (* arm_LDP X5 X6 X16 (Immediate_Offset (iword (&80))) *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bca7c83; (* arm_UMULH X3 X4 X10 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9b077cab; (* arm_MUL X11 X5 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b087cab; (* arm_MUL X11 X5 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b097cab; (* arm_MUL X11 X5 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b0a7cab; (* arm_MUL X11 X5 X10 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bca7ca4; (* arm_UMULH X4 X5 X10 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9bc77cab; (* arm_UMULH X11 X5 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9bc87cab; (* arm_UMULH X11 X5 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bc97cab; (* arm_UMULH X11 X5 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b077ccb; (* arm_MUL X11 X6 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9b087ccb; (* arm_MUL X11 X6 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b097ccb; (* arm_MUL X11 X6 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9b0a7ccb; (* arm_MUL X11 X6 X10 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9bca7cc5; (* arm_UMULH X5 X6 X10 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0x9bc77ccb; (* arm_UMULH X11 X6 X7 *) + 0xab0b0021; (* arm_ADDS X1 X1 X11 *) + 0x9bc87ccb; (* arm_UMULH X11 X6 X8 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bc97ccb; (* arm_UMULH X11 X6 X9 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0xd3607d8b; (* arm_LSL X11 X12 32 *) + 0xeb0b0182; (* arm_SUBS X2 X12 X11 *) + 0xd360fd86; (* arm_LSR X6 X12 32 *) + 0xda06018c; (* arm_SBC X12 X12 X6 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xba0601ce; (* arm_ADCS X14 X14 X6 *) + 0xba020000; (* arm_ADCS X0 X0 X2 *) + 0x9a1f018c; (* arm_ADC X12 X12 XZR *) + 0xd3607dab; (* arm_LSL X11 X13 32 *) + 0xeb0b01a2; (* arm_SUBS X2 X13 X11 *) + 0xd360fda6; (* arm_LSR X6 X13 32 *) + 0xda0601ad; (* arm_SBC X13 X13 X6 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0xba060000; (* arm_ADCS X0 X0 X6 *) + 0xba02018c; (* arm_ADCS X12 X12 X2 *) + 0x9a1f01ad; (* arm_ADC X13 X13 XZR *) + 0xd3607dcb; (* arm_LSL X11 X14 32 *) + 0xeb0b01c2; (* arm_SUBS X2 X14 X11 *) + 0xd360fdc6; (* arm_LSR X6 X14 32 *) + 0xda0601ce; (* arm_SBC X14 X14 X6 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0xba06018c; (* arm_ADCS X12 X12 X6 *) + 0xba0201ad; (* arm_ADCS X13 X13 X2 *) + 0x9a1f01ce; (* arm_ADC X14 X14 XZR *) + 0xd3607c0b; (* arm_LSL X11 X0 32 *) + 0xeb0b0002; (* arm_SUBS X2 X0 X11 *) + 0xd360fc06; (* arm_LSR X6 X0 32 *) + 0xda060000; (* arm_SBC X0 X0 X6 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0xba0601ad; (* arm_ADCS X13 X13 X6 *) + 0xba0201ce; (* arm_ADCS X14 X14 X2 *) + 0x9a1f0000; (* arm_ADC X0 X0 XZR *) + 0xab01018c; (* arm_ADDS X12 X12 X1 *) + 0xba0301ad; (* arm_ADCS X13 X13 X3 *) + 0xba0401ce; (* arm_ADCS X14 X14 X4 *) + 0xba050000; (* arm_ADCS X0 X0 X5 *) + 0x9a9f37e2; (* arm_CSET X2 Condition_CS *) + 0xb2407feb; (* arm_MOV X11 (rvalue (word 4294967295)) *) + 0xb26083e6; (* arm_MOV X6 (rvalue (word 18446744069414584321)) *) + 0xb1000581; (* arm_ADDS X1 X12 (rvalue (word 1)) *) + 0xfa0b01a3; (* arm_SBCS X3 X13 X11 *) + 0xfa1f01c4; (* arm_SBCS X4 X14 XZR *) + 0xfa060005; (* arm_SBCS X5 X0 X6 *) + 0xfa1f005f; (* arm_SBCS XZR X2 XZR *) + 0x9a81318c; (* arm_CSEL X12 X12 X1 Condition_CC *) + 0x9a8331ad; (* arm_CSEL X13 X13 X3 Condition_CC *) + 0x9a8431ce; (* arm_CSEL X14 X14 X4 Condition_CC *) + 0x9a853000; (* arm_CSEL X0 X0 X5 Condition_CC *) + 0xa90237ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&32))) *) + 0xa90303ee; (* arm_STP X14 X0 SP (Immediate_Offset (iword (&48))) *) + 0xa94013e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&0))) *) + 0xa9402227; (* arm_LDP X7 X8 X17 (Immediate_Offset (iword (&0))) *) + 0x9b077c6c; (* arm_MUL X12 X3 X7 *) + 0x9bc77c6d; (* arm_UMULH X13 X3 X7 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa9412a29; (* arm_LDP X9 X10 X17 (Immediate_Offset (iword (&16))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c60; (* arm_UMULH X0 X3 X9 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c61; (* arm_UMULH X1 X3 X10 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0xa9411be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&16))) *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bca7c83; (* arm_UMULH X3 X4 X10 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9b077cab; (* arm_MUL X11 X5 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b087cab; (* arm_MUL X11 X5 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b097cab; (* arm_MUL X11 X5 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b0a7cab; (* arm_MUL X11 X5 X10 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bca7ca4; (* arm_UMULH X4 X5 X10 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9bc77cab; (* arm_UMULH X11 X5 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9bc87cab; (* arm_UMULH X11 X5 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bc97cab; (* arm_UMULH X11 X5 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b077ccb; (* arm_MUL X11 X6 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9b087ccb; (* arm_MUL X11 X6 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b097ccb; (* arm_MUL X11 X6 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9b0a7ccb; (* arm_MUL X11 X6 X10 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9bca7cc5; (* arm_UMULH X5 X6 X10 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0x9bc77ccb; (* arm_UMULH X11 X6 X7 *) + 0xab0b0021; (* arm_ADDS X1 X1 X11 *) + 0x9bc87ccb; (* arm_UMULH X11 X6 X8 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bc97ccb; (* arm_UMULH X11 X6 X9 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0xd3607d8b; (* arm_LSL X11 X12 32 *) + 0xeb0b0182; (* arm_SUBS X2 X12 X11 *) + 0xd360fd86; (* arm_LSR X6 X12 32 *) + 0xda06018c; (* arm_SBC X12 X12 X6 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xba0601ce; (* arm_ADCS X14 X14 X6 *) + 0xba020000; (* arm_ADCS X0 X0 X2 *) + 0x9a1f018c; (* arm_ADC X12 X12 XZR *) + 0xd3607dab; (* arm_LSL X11 X13 32 *) + 0xeb0b01a2; (* arm_SUBS X2 X13 X11 *) + 0xd360fda6; (* arm_LSR X6 X13 32 *) + 0xda0601ad; (* arm_SBC X13 X13 X6 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0xba060000; (* arm_ADCS X0 X0 X6 *) + 0xba02018c; (* arm_ADCS X12 X12 X2 *) + 0x9a1f01ad; (* arm_ADC X13 X13 XZR *) + 0xd3607dcb; (* arm_LSL X11 X14 32 *) + 0xeb0b01c2; (* arm_SUBS X2 X14 X11 *) + 0xd360fdc6; (* arm_LSR X6 X14 32 *) + 0xda0601ce; (* arm_SBC X14 X14 X6 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0xba06018c; (* arm_ADCS X12 X12 X6 *) + 0xba0201ad; (* arm_ADCS X13 X13 X2 *) + 0x9a1f01ce; (* arm_ADC X14 X14 XZR *) + 0xd3607c0b; (* arm_LSL X11 X0 32 *) + 0xeb0b0002; (* arm_SUBS X2 X0 X11 *) + 0xd360fc06; (* arm_LSR X6 X0 32 *) + 0xda060000; (* arm_SBC X0 X0 X6 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0xba0601ad; (* arm_ADCS X13 X13 X6 *) + 0xba0201ce; (* arm_ADCS X14 X14 X2 *) + 0x9a1f0000; (* arm_ADC X0 X0 XZR *) + 0xab01018c; (* arm_ADDS X12 X12 X1 *) + 0xba0301ad; (* arm_ADCS X13 X13 X3 *) + 0xba0401ce; (* arm_ADCS X14 X14 X4 *) + 0xba050000; (* arm_ADCS X0 X0 X5 *) + 0x9a9f37e2; (* arm_CSET X2 Condition_CS *) + 0xb2407feb; (* arm_MOV X11 (rvalue (word 4294967295)) *) + 0xb26083e6; (* arm_MOV X6 (rvalue (word 18446744069414584321)) *) + 0xb1000581; (* arm_ADDS X1 X12 (rvalue (word 1)) *) + 0xfa0b01a3; (* arm_SBCS X3 X13 X11 *) + 0xfa1f01c4; (* arm_SBCS X4 X14 XZR *) + 0xfa060005; (* arm_SBCS X5 X0 X6 *) + 0xfa1f005f; (* arm_SBCS XZR X2 XZR *) + 0x9a81318c; (* arm_CSEL X12 X12 X1 Condition_CC *) + 0x9a8331ad; (* arm_CSEL X13 X13 X3 Condition_CC *) + 0x9a8431ce; (* arm_CSEL X14 X14 X4 Condition_CC *) + 0x9a853000; (* arm_CSEL X0 X0 X5 Condition_CC *) + 0xa90437ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&64))) *) + 0xa90503ee; (* arm_STP X14 X0 SP (Immediate_Offset (iword (&80))) *) + 0xa94013e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&0))) *) + 0xa94223e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&32))) *) + 0x9b077c6c; (* arm_MUL X12 X3 X7 *) + 0x9bc77c6d; (* arm_UMULH X13 X3 X7 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa9432be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&48))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c60; (* arm_UMULH X0 X3 X9 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c61; (* arm_UMULH X1 X3 X10 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0xa9411be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&16))) *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bca7c83; (* arm_UMULH X3 X4 X10 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9b077cab; (* arm_MUL X11 X5 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b087cab; (* arm_MUL X11 X5 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b097cab; (* arm_MUL X11 X5 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b0a7cab; (* arm_MUL X11 X5 X10 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bca7ca4; (* arm_UMULH X4 X5 X10 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9bc77cab; (* arm_UMULH X11 X5 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9bc87cab; (* arm_UMULH X11 X5 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bc97cab; (* arm_UMULH X11 X5 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b077ccb; (* arm_MUL X11 X6 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9b087ccb; (* arm_MUL X11 X6 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b097ccb; (* arm_MUL X11 X6 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9b0a7ccb; (* arm_MUL X11 X6 X10 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9bca7cc5; (* arm_UMULH X5 X6 X10 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0x9bc77ccb; (* arm_UMULH X11 X6 X7 *) + 0xab0b0021; (* arm_ADDS X1 X1 X11 *) + 0x9bc87ccb; (* arm_UMULH X11 X6 X8 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bc97ccb; (* arm_UMULH X11 X6 X9 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0xd3607d8b; (* arm_LSL X11 X12 32 *) + 0xeb0b0182; (* arm_SUBS X2 X12 X11 *) + 0xd360fd86; (* arm_LSR X6 X12 32 *) + 0xda06018c; (* arm_SBC X12 X12 X6 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xba0601ce; (* arm_ADCS X14 X14 X6 *) + 0xba020000; (* arm_ADCS X0 X0 X2 *) + 0x9a1f018c; (* arm_ADC X12 X12 XZR *) + 0xd3607dab; (* arm_LSL X11 X13 32 *) + 0xeb0b01a2; (* arm_SUBS X2 X13 X11 *) + 0xd360fda6; (* arm_LSR X6 X13 32 *) + 0xda0601ad; (* arm_SBC X13 X13 X6 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0xba060000; (* arm_ADCS X0 X0 X6 *) + 0xba02018c; (* arm_ADCS X12 X12 X2 *) + 0x9a1f01ad; (* arm_ADC X13 X13 XZR *) + 0xd3607dcb; (* arm_LSL X11 X14 32 *) + 0xeb0b01c2; (* arm_SUBS X2 X14 X11 *) + 0xd360fdc6; (* arm_LSR X6 X14 32 *) + 0xda0601ce; (* arm_SBC X14 X14 X6 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0xba06018c; (* arm_ADCS X12 X12 X6 *) + 0xba0201ad; (* arm_ADCS X13 X13 X2 *) + 0x9a1f01ce; (* arm_ADC X14 X14 XZR *) + 0xd3607c0b; (* arm_LSL X11 X0 32 *) + 0xeb0b0002; (* arm_SUBS X2 X0 X11 *) + 0xd360fc06; (* arm_LSR X6 X0 32 *) + 0xda060000; (* arm_SBC X0 X0 X6 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0xba0601ad; (* arm_ADCS X13 X13 X6 *) + 0xba0201ce; (* arm_ADCS X14 X14 X2 *) + 0x9a1f0000; (* arm_ADC X0 X0 XZR *) + 0xab01018c; (* arm_ADDS X12 X12 X1 *) + 0xba0301ad; (* arm_ADCS X13 X13 X3 *) + 0xba0401ce; (* arm_ADCS X14 X14 X4 *) + 0xba050000; (* arm_ADCS X0 X0 X5 *) + 0x9a9f37e2; (* arm_CSET X2 Condition_CS *) + 0xb2407feb; (* arm_MOV X11 (rvalue (word 4294967295)) *) + 0xb26083e6; (* arm_MOV X6 (rvalue (word 18446744069414584321)) *) + 0xb1000581; (* arm_ADDS X1 X12 (rvalue (word 1)) *) + 0xfa0b01a3; (* arm_SBCS X3 X13 X11 *) + 0xfa1f01c4; (* arm_SBCS X4 X14 XZR *) + 0xfa060005; (* arm_SBCS X5 X0 X6 *) + 0xfa1f005f; (* arm_SBCS XZR X2 XZR *) + 0x9a81318c; (* arm_CSEL X12 X12 X1 Condition_CC *) + 0x9a8331ad; (* arm_CSEL X13 X13 X3 Condition_CC *) + 0x9a8431ce; (* arm_CSEL X14 X14 X4 Condition_CC *) + 0x9a853000; (* arm_CSEL X0 X0 X5 Condition_CC *) + 0xa90237ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&32))) *) + 0xa90303ee; (* arm_STP X14 X0 SP (Immediate_Offset (iword (&48))) *) + 0xa9441be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&64))) *) + 0xa9400e04; (* arm_LDP X4 X3 X16 (Immediate_Offset (iword (&0))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa94523e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&80))) *) + 0xa9410e04; (* arm_LDP X4 X3 X16 (Immediate_Offset (iword (&16))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xda9f23e3; (* arm_CSETM X3 Condition_CC *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0xba0400c6; (* arm_ADCS X6 X6 X4 *) + 0xba1f00e7; (* arm_ADCS X7 X7 XZR *) + 0xb26083e4; (* arm_MOV X4 (rvalue (word 18446744069414584321)) *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0x9a040108; (* arm_ADC X8 X8 X4 *) + 0xa90a1be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&160))) *) + 0xa90b23e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&176))) *) + 0xa9421be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&32))) *) + 0xa9420e04; (* arm_LDP X4 X3 X16 (Immediate_Offset (iword (&32))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa94323e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&48))) *) + 0xa9430e04; (* arm_LDP X4 X3 X16 (Immediate_Offset (iword (&48))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xda9f23e3; (* arm_CSETM X3 Condition_CC *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0xba0400c6; (* arm_ADCS X6 X6 X4 *) + 0xba1f00e7; (* arm_ADCS X7 X7 XZR *) + 0xb26083e4; (* arm_MOV X4 (rvalue (word 18446744069414584321)) *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0x9a040108; (* arm_ADC X8 X8 X4 *) + 0xa9021be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&32))) *) + 0xa90323e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&48))) *) + 0xa94a0fe2; (* arm_LDP X2 X3 SP (Immediate_Offset (iword (&160))) *) + 0x9b037c49; (* arm_MUL X9 X2 X3 *) + 0x9bc37c4a; (* arm_UMULH X10 X2 X3 *) + 0xa94b17e4; (* arm_LDP X4 X5 SP (Immediate_Offset (iword (&176))) *) + 0x9b057c4b; (* arm_MUL X11 X2 X5 *) + 0x9bc57c4c; (* arm_UMULH X12 X2 X5 *) + 0x9b047c46; (* arm_MUL X6 X2 X4 *) + 0x9bc47c47; (* arm_UMULH X7 X2 X4 *) + 0xab06014a; (* arm_ADDS X10 X10 X6 *) + 0xba07016b; (* arm_ADCS X11 X11 X7 *) + 0x9b047c66; (* arm_MUL X6 X3 X4 *) + 0x9bc47c67; (* arm_UMULH X7 X3 X4 *) + 0x9a1f00e7; (* arm_ADC X7 X7 XZR *) + 0xab06016b; (* arm_ADDS X11 X11 X6 *) + 0x9b057c8d; (* arm_MUL X13 X4 X5 *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xba07018c; (* arm_ADCS X12 X12 X7 *) + 0x9b057c66; (* arm_MUL X6 X3 X5 *) + 0x9bc57c67; (* arm_UMULH X7 X3 X5 *) + 0x9a1f00e7; (* arm_ADC X7 X7 XZR *) + 0xab06018c; (* arm_ADDS X12 X12 X6 *) + 0xba0701ad; (* arm_ADCS X13 X13 X7 *) + 0x9a1f01ce; (* arm_ADC X14 X14 XZR *) + 0xab090129; (* arm_ADDS X9 X9 X9 *) + 0xba0a014a; (* arm_ADCS X10 X10 X10 *) + 0xba0b016b; (* arm_ADCS X11 X11 X11 *) + 0xba0c018c; (* arm_ADCS X12 X12 X12 *) + 0xba0d01ad; (* arm_ADCS X13 X13 X13 *) + 0xba0e01ce; (* arm_ADCS X14 X14 X14 *) + 0x9a9f37e7; (* arm_CSET X7 Condition_CS *) + 0x9bc27c46; (* arm_UMULH X6 X2 X2 *) + 0x9b027c48; (* arm_MUL X8 X2 X2 *) + 0xab060129; (* arm_ADDS X9 X9 X6 *) + 0x9b037c66; (* arm_MUL X6 X3 X3 *) + 0xba06014a; (* arm_ADCS X10 X10 X6 *) + 0x9bc37c66; (* arm_UMULH X6 X3 X3 *) + 0xba06016b; (* arm_ADCS X11 X11 X6 *) + 0x9b047c86; (* arm_MUL X6 X4 X4 *) + 0xba06018c; (* arm_ADCS X12 X12 X6 *) + 0x9bc47c86; (* arm_UMULH X6 X4 X4 *) + 0xba0601ad; (* arm_ADCS X13 X13 X6 *) + 0x9b057ca6; (* arm_MUL X6 X5 X5 *) + 0xba0601ce; (* arm_ADCS X14 X14 X6 *) + 0x9bc57ca6; (* arm_UMULH X6 X5 X5 *) + 0x9a0600e7; (* arm_ADC X7 X7 X6 *) + 0xab088129; (* arm_ADDS X9 X9 (Shiftedreg X8 LSL 32) *) + 0xd360fd03; (* arm_LSR X3 X8 32 *) + 0xba03014a; (* arm_ADCS X10 X10 X3 *) + 0xb26083e3; (* arm_MOV X3 (rvalue (word 18446744069414584321)) *) + 0x9b037d02; (* arm_MUL X2 X8 X3 *) + 0x9bc37d08; (* arm_UMULH X8 X8 X3 *) + 0xba02016b; (* arm_ADCS X11 X11 X2 *) + 0x9a1f0108; (* arm_ADC X8 X8 XZR *) + 0xab09814a; (* arm_ADDS X10 X10 (Shiftedreg X9 LSL 32) *) + 0xd360fd23; (* arm_LSR X3 X9 32 *) + 0xba03016b; (* arm_ADCS X11 X11 X3 *) + 0xb26083e3; (* arm_MOV X3 (rvalue (word 18446744069414584321)) *) + 0x9b037d22; (* arm_MUL X2 X9 X3 *) + 0x9bc37d29; (* arm_UMULH X9 X9 X3 *) + 0xba020108; (* arm_ADCS X8 X8 X2 *) + 0x9a1f0129; (* arm_ADC X9 X9 XZR *) + 0xab0a816b; (* arm_ADDS X11 X11 (Shiftedreg X10 LSL 32) *) + 0xd360fd43; (* arm_LSR X3 X10 32 *) + 0xba030108; (* arm_ADCS X8 X8 X3 *) + 0xb26083e3; (* arm_MOV X3 (rvalue (word 18446744069414584321)) *) + 0x9b037d42; (* arm_MUL X2 X10 X3 *) + 0x9bc37d4a; (* arm_UMULH X10 X10 X3 *) + 0xba020129; (* arm_ADCS X9 X9 X2 *) + 0x9a1f014a; (* arm_ADC X10 X10 XZR *) + 0xab0b8108; (* arm_ADDS X8 X8 (Shiftedreg X11 LSL 32) *) + 0xd360fd63; (* arm_LSR X3 X11 32 *) + 0xba030129; (* arm_ADCS X9 X9 X3 *) + 0xb26083e3; (* arm_MOV X3 (rvalue (word 18446744069414584321)) *) + 0x9b037d62; (* arm_MUL X2 X11 X3 *) + 0x9bc37d6b; (* arm_UMULH X11 X11 X3 *) + 0xba02014a; (* arm_ADCS X10 X10 X2 *) + 0x9a1f016b; (* arm_ADC X11 X11 XZR *) + 0xab0c0108; (* arm_ADDS X8 X8 X12 *) + 0xba0d0129; (* arm_ADCS X9 X9 X13 *) + 0xba0e014a; (* arm_ADCS X10 X10 X14 *) + 0xba07016b; (* arm_ADCS X11 X11 X7 *) + 0x92800002; (* arm_MOVN X2 (word 0) 0 *) + 0x9a8233e2; (* arm_CSEL X2 XZR X2 Condition_CC *) + 0xb2407fe3; (* arm_MOV X3 (rvalue (word 4294967295)) *) + 0x9a8333e3; (* arm_CSEL X3 XZR X3 Condition_CC *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9a8533e5; (* arm_CSEL X5 XZR X5 Condition_CC *) + 0xeb020108; (* arm_SUBS X8 X8 X2 *) + 0xfa030129; (* arm_SBCS X9 X9 X3 *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xda05016b; (* arm_SBC X11 X11 X5 *) + 0xa90627e8; (* arm_STP X8 X9 SP (Immediate_Offset (iword (&96))) *) + 0xa9072fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&112))) *) + 0xa9420fe2; (* arm_LDP X2 X3 SP (Immediate_Offset (iword (&32))) *) + 0x9b037c49; (* arm_MUL X9 X2 X3 *) + 0x9bc37c4a; (* arm_UMULH X10 X2 X3 *) + 0xa94317e4; (* arm_LDP X4 X5 SP (Immediate_Offset (iword (&48))) *) + 0x9b057c4b; (* arm_MUL X11 X2 X5 *) + 0x9bc57c4c; (* arm_UMULH X12 X2 X5 *) + 0x9b047c46; (* arm_MUL X6 X2 X4 *) + 0x9bc47c47; (* arm_UMULH X7 X2 X4 *) + 0xab06014a; (* arm_ADDS X10 X10 X6 *) + 0xba07016b; (* arm_ADCS X11 X11 X7 *) + 0x9b047c66; (* arm_MUL X6 X3 X4 *) + 0x9bc47c67; (* arm_UMULH X7 X3 X4 *) + 0x9a1f00e7; (* arm_ADC X7 X7 XZR *) + 0xab06016b; (* arm_ADDS X11 X11 X6 *) + 0x9b057c8d; (* arm_MUL X13 X4 X5 *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xba07018c; (* arm_ADCS X12 X12 X7 *) + 0x9b057c66; (* arm_MUL X6 X3 X5 *) + 0x9bc57c67; (* arm_UMULH X7 X3 X5 *) + 0x9a1f00e7; (* arm_ADC X7 X7 XZR *) + 0xab06018c; (* arm_ADDS X12 X12 X6 *) + 0xba0701ad; (* arm_ADCS X13 X13 X7 *) + 0x9a1f01ce; (* arm_ADC X14 X14 XZR *) + 0xab090129; (* arm_ADDS X9 X9 X9 *) + 0xba0a014a; (* arm_ADCS X10 X10 X10 *) + 0xba0b016b; (* arm_ADCS X11 X11 X11 *) + 0xba0c018c; (* arm_ADCS X12 X12 X12 *) + 0xba0d01ad; (* arm_ADCS X13 X13 X13 *) + 0xba0e01ce; (* arm_ADCS X14 X14 X14 *) + 0x9a9f37e7; (* arm_CSET X7 Condition_CS *) + 0x9bc27c46; (* arm_UMULH X6 X2 X2 *) + 0x9b027c48; (* arm_MUL X8 X2 X2 *) + 0xab060129; (* arm_ADDS X9 X9 X6 *) + 0x9b037c66; (* arm_MUL X6 X3 X3 *) + 0xba06014a; (* arm_ADCS X10 X10 X6 *) + 0x9bc37c66; (* arm_UMULH X6 X3 X3 *) + 0xba06016b; (* arm_ADCS X11 X11 X6 *) + 0x9b047c86; (* arm_MUL X6 X4 X4 *) + 0xba06018c; (* arm_ADCS X12 X12 X6 *) + 0x9bc47c86; (* arm_UMULH X6 X4 X4 *) + 0xba0601ad; (* arm_ADCS X13 X13 X6 *) + 0x9b057ca6; (* arm_MUL X6 X5 X5 *) + 0xba0601ce; (* arm_ADCS X14 X14 X6 *) + 0x9bc57ca6; (* arm_UMULH X6 X5 X5 *) + 0x9a0600e7; (* arm_ADC X7 X7 X6 *) + 0xab088129; (* arm_ADDS X9 X9 (Shiftedreg X8 LSL 32) *) + 0xd360fd03; (* arm_LSR X3 X8 32 *) + 0xba03014a; (* arm_ADCS X10 X10 X3 *) + 0xb26083e3; (* arm_MOV X3 (rvalue (word 18446744069414584321)) *) + 0x9b037d02; (* arm_MUL X2 X8 X3 *) + 0x9bc37d08; (* arm_UMULH X8 X8 X3 *) + 0xba02016b; (* arm_ADCS X11 X11 X2 *) + 0x9a1f0108; (* arm_ADC X8 X8 XZR *) + 0xab09814a; (* arm_ADDS X10 X10 (Shiftedreg X9 LSL 32) *) + 0xd360fd23; (* arm_LSR X3 X9 32 *) + 0xba03016b; (* arm_ADCS X11 X11 X3 *) + 0xb26083e3; (* arm_MOV X3 (rvalue (word 18446744069414584321)) *) + 0x9b037d22; (* arm_MUL X2 X9 X3 *) + 0x9bc37d29; (* arm_UMULH X9 X9 X3 *) + 0xba020108; (* arm_ADCS X8 X8 X2 *) + 0x9a1f0129; (* arm_ADC X9 X9 XZR *) + 0xab0a816b; (* arm_ADDS X11 X11 (Shiftedreg X10 LSL 32) *) + 0xd360fd43; (* arm_LSR X3 X10 32 *) + 0xba030108; (* arm_ADCS X8 X8 X3 *) + 0xb26083e3; (* arm_MOV X3 (rvalue (word 18446744069414584321)) *) + 0x9b037d42; (* arm_MUL X2 X10 X3 *) + 0x9bc37d4a; (* arm_UMULH X10 X10 X3 *) + 0xba020129; (* arm_ADCS X9 X9 X2 *) + 0x9a1f014a; (* arm_ADC X10 X10 XZR *) + 0xab0b8108; (* arm_ADDS X8 X8 (Shiftedreg X11 LSL 32) *) + 0xd360fd63; (* arm_LSR X3 X11 32 *) + 0xba030129; (* arm_ADCS X9 X9 X3 *) + 0xb26083e3; (* arm_MOV X3 (rvalue (word 18446744069414584321)) *) + 0x9b037d62; (* arm_MUL X2 X11 X3 *) + 0x9bc37d6b; (* arm_UMULH X11 X11 X3 *) + 0xba02014a; (* arm_ADCS X10 X10 X2 *) + 0x9a1f016b; (* arm_ADC X11 X11 XZR *) + 0xab0c0108; (* arm_ADDS X8 X8 X12 *) + 0xba0d0129; (* arm_ADCS X9 X9 X13 *) + 0xba0e014a; (* arm_ADCS X10 X10 X14 *) + 0xba07016b; (* arm_ADCS X11 X11 X7 *) + 0x9a9f37e2; (* arm_CSET X2 Condition_CS *) + 0xb2407fe3; (* arm_MOV X3 (rvalue (word 4294967295)) *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0xb100050c; (* arm_ADDS X12 X8 (rvalue (word 1)) *) + 0xfa03012d; (* arm_SBCS X13 X9 X3 *) + 0xfa1f014e; (* arm_SBCS X14 X10 XZR *) + 0xfa050167; (* arm_SBCS X7 X11 X5 *) + 0xfa1f005f; (* arm_SBCS XZR X2 XZR *) + 0x9a8c3108; (* arm_CSEL X8 X8 X12 Condition_CC *) + 0x9a8d3129; (* arm_CSEL X9 X9 X13 Condition_CC *) + 0x9a8e314a; (* arm_CSEL X10 X10 X14 Condition_CC *) + 0x9a87316b; (* arm_CSEL X11 X11 X7 Condition_CC *) + 0xa90027e8; (* arm_STP X8 X9 SP (Immediate_Offset (iword (&0))) *) + 0xa9012fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&16))) *) + 0xa94613e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&96))) *) + 0xa9402207; (* arm_LDP X7 X8 X16 (Immediate_Offset (iword (&0))) *) + 0x9b077c6c; (* arm_MUL X12 X3 X7 *) + 0x9bc77c6d; (* arm_UMULH X13 X3 X7 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa9412a09; (* arm_LDP X9 X10 X16 (Immediate_Offset (iword (&16))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c60; (* arm_UMULH X0 X3 X9 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c61; (* arm_UMULH X1 X3 X10 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0xa9471be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&112))) *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bca7c83; (* arm_UMULH X3 X4 X10 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9b077cab; (* arm_MUL X11 X5 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b087cab; (* arm_MUL X11 X5 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b097cab; (* arm_MUL X11 X5 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b0a7cab; (* arm_MUL X11 X5 X10 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bca7ca4; (* arm_UMULH X4 X5 X10 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9bc77cab; (* arm_UMULH X11 X5 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9bc87cab; (* arm_UMULH X11 X5 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bc97cab; (* arm_UMULH X11 X5 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b077ccb; (* arm_MUL X11 X6 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9b087ccb; (* arm_MUL X11 X6 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b097ccb; (* arm_MUL X11 X6 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9b0a7ccb; (* arm_MUL X11 X6 X10 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9bca7cc5; (* arm_UMULH X5 X6 X10 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0x9bc77ccb; (* arm_UMULH X11 X6 X7 *) + 0xab0b0021; (* arm_ADDS X1 X1 X11 *) + 0x9bc87ccb; (* arm_UMULH X11 X6 X8 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bc97ccb; (* arm_UMULH X11 X6 X9 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0xd3607d8b; (* arm_LSL X11 X12 32 *) + 0xeb0b0182; (* arm_SUBS X2 X12 X11 *) + 0xd360fd86; (* arm_LSR X6 X12 32 *) + 0xda06018c; (* arm_SBC X12 X12 X6 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xba0601ce; (* arm_ADCS X14 X14 X6 *) + 0xba020000; (* arm_ADCS X0 X0 X2 *) + 0x9a1f018c; (* arm_ADC X12 X12 XZR *) + 0xd3607dab; (* arm_LSL X11 X13 32 *) + 0xeb0b01a2; (* arm_SUBS X2 X13 X11 *) + 0xd360fda6; (* arm_LSR X6 X13 32 *) + 0xda0601ad; (* arm_SBC X13 X13 X6 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0xba060000; (* arm_ADCS X0 X0 X6 *) + 0xba02018c; (* arm_ADCS X12 X12 X2 *) + 0x9a1f01ad; (* arm_ADC X13 X13 XZR *) + 0xd3607dcb; (* arm_LSL X11 X14 32 *) + 0xeb0b01c2; (* arm_SUBS X2 X14 X11 *) + 0xd360fdc6; (* arm_LSR X6 X14 32 *) + 0xda0601ce; (* arm_SBC X14 X14 X6 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0xba06018c; (* arm_ADCS X12 X12 X6 *) + 0xba0201ad; (* arm_ADCS X13 X13 X2 *) + 0x9a1f01ce; (* arm_ADC X14 X14 XZR *) + 0xd3607c0b; (* arm_LSL X11 X0 32 *) + 0xeb0b0002; (* arm_SUBS X2 X0 X11 *) + 0xd360fc06; (* arm_LSR X6 X0 32 *) + 0xda060000; (* arm_SBC X0 X0 X6 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0xba0601ad; (* arm_ADCS X13 X13 X6 *) + 0xba0201ce; (* arm_ADCS X14 X14 X2 *) + 0x9a1f0000; (* arm_ADC X0 X0 XZR *) + 0xab01018c; (* arm_ADDS X12 X12 X1 *) + 0xba0301ad; (* arm_ADCS X13 X13 X3 *) + 0xba0401ce; (* arm_ADCS X14 X14 X4 *) + 0xba050000; (* arm_ADCS X0 X0 X5 *) + 0x9a9f37e2; (* arm_CSET X2 Condition_CS *) + 0xb2407feb; (* arm_MOV X11 (rvalue (word 4294967295)) *) + 0xb26083e6; (* arm_MOV X6 (rvalue (word 18446744069414584321)) *) + 0xb1000581; (* arm_ADDS X1 X12 (rvalue (word 1)) *) + 0xfa0b01a3; (* arm_SBCS X3 X13 X11 *) + 0xfa1f01c4; (* arm_SBCS X4 X14 XZR *) + 0xfa060005; (* arm_SBCS X5 X0 X6 *) + 0xfa1f005f; (* arm_SBCS XZR X2 XZR *) + 0x9a81318c; (* arm_CSEL X12 X12 X1 Condition_CC *) + 0x9a8331ad; (* arm_CSEL X13 X13 X3 Condition_CC *) + 0x9a8431ce; (* arm_CSEL X14 X14 X4 Condition_CC *) + 0x9a853000; (* arm_CSEL X0 X0 X5 Condition_CC *) + 0xa90837ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&128))) *) + 0xa90903ee; (* arm_STP X14 X0 SP (Immediate_Offset (iword (&144))) *) + 0xa94613e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&96))) *) + 0xa94423e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&64))) *) + 0x9b077c6c; (* arm_MUL X12 X3 X7 *) + 0x9bc77c6d; (* arm_UMULH X13 X3 X7 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa9452be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&80))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c60; (* arm_UMULH X0 X3 X9 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c61; (* arm_UMULH X1 X3 X10 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0xa9471be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&112))) *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bca7c83; (* arm_UMULH X3 X4 X10 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9b077cab; (* arm_MUL X11 X5 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b087cab; (* arm_MUL X11 X5 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b097cab; (* arm_MUL X11 X5 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b0a7cab; (* arm_MUL X11 X5 X10 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bca7ca4; (* arm_UMULH X4 X5 X10 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9bc77cab; (* arm_UMULH X11 X5 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9bc87cab; (* arm_UMULH X11 X5 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bc97cab; (* arm_UMULH X11 X5 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b077ccb; (* arm_MUL X11 X6 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9b087ccb; (* arm_MUL X11 X6 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b097ccb; (* arm_MUL X11 X6 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9b0a7ccb; (* arm_MUL X11 X6 X10 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9bca7cc5; (* arm_UMULH X5 X6 X10 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0x9bc77ccb; (* arm_UMULH X11 X6 X7 *) + 0xab0b0021; (* arm_ADDS X1 X1 X11 *) + 0x9bc87ccb; (* arm_UMULH X11 X6 X8 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bc97ccb; (* arm_UMULH X11 X6 X9 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0xd3607d8b; (* arm_LSL X11 X12 32 *) + 0xeb0b0182; (* arm_SUBS X2 X12 X11 *) + 0xd360fd86; (* arm_LSR X6 X12 32 *) + 0xda06018c; (* arm_SBC X12 X12 X6 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xba0601ce; (* arm_ADCS X14 X14 X6 *) + 0xba020000; (* arm_ADCS X0 X0 X2 *) + 0x9a1f018c; (* arm_ADC X12 X12 XZR *) + 0xd3607dab; (* arm_LSL X11 X13 32 *) + 0xeb0b01a2; (* arm_SUBS X2 X13 X11 *) + 0xd360fda6; (* arm_LSR X6 X13 32 *) + 0xda0601ad; (* arm_SBC X13 X13 X6 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0xba060000; (* arm_ADCS X0 X0 X6 *) + 0xba02018c; (* arm_ADCS X12 X12 X2 *) + 0x9a1f01ad; (* arm_ADC X13 X13 XZR *) + 0xd3607dcb; (* arm_LSL X11 X14 32 *) + 0xeb0b01c2; (* arm_SUBS X2 X14 X11 *) + 0xd360fdc6; (* arm_LSR X6 X14 32 *) + 0xda0601ce; (* arm_SBC X14 X14 X6 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0xba06018c; (* arm_ADCS X12 X12 X6 *) + 0xba0201ad; (* arm_ADCS X13 X13 X2 *) + 0x9a1f01ce; (* arm_ADC X14 X14 XZR *) + 0xd3607c0b; (* arm_LSL X11 X0 32 *) + 0xeb0b0002; (* arm_SUBS X2 X0 X11 *) + 0xd360fc06; (* arm_LSR X6 X0 32 *) + 0xda060000; (* arm_SBC X0 X0 X6 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0xba0601ad; (* arm_ADCS X13 X13 X6 *) + 0xba0201ce; (* arm_ADCS X14 X14 X2 *) + 0x9a1f0000; (* arm_ADC X0 X0 XZR *) + 0xab01018c; (* arm_ADDS X12 X12 X1 *) + 0xba0301ad; (* arm_ADCS X13 X13 X3 *) + 0xba0401ce; (* arm_ADCS X14 X14 X4 *) + 0xba050000; (* arm_ADCS X0 X0 X5 *) + 0x9a9f37e2; (* arm_CSET X2 Condition_CS *) + 0xb2407feb; (* arm_MOV X11 (rvalue (word 4294967295)) *) + 0xb26083e6; (* arm_MOV X6 (rvalue (word 18446744069414584321)) *) + 0xb1000581; (* arm_ADDS X1 X12 (rvalue (word 1)) *) + 0xfa0b01a3; (* arm_SBCS X3 X13 X11 *) + 0xfa1f01c4; (* arm_SBCS X4 X14 XZR *) + 0xfa060005; (* arm_SBCS X5 X0 X6 *) + 0xfa1f005f; (* arm_SBCS XZR X2 XZR *) + 0x9a81318c; (* arm_CSEL X12 X12 X1 Condition_CC *) + 0x9a8331ad; (* arm_CSEL X13 X13 X3 Condition_CC *) + 0x9a8431ce; (* arm_CSEL X14 X14 X4 Condition_CC *) + 0x9a853000; (* arm_CSEL X0 X0 X5 Condition_CC *) + 0xa90437ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&64))) *) + 0xa90503ee; (* arm_STP X14 X0 SP (Immediate_Offset (iword (&80))) *) + 0xa9401be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&0))) *) + 0xa9480fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&128))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa94123e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&16))) *) + 0xa9490fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&144))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xda9f23e3; (* arm_CSETM X3 Condition_CC *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0xba0400c6; (* arm_ADCS X6 X6 X4 *) + 0xba1f00e7; (* arm_ADCS X7 X7 XZR *) + 0xb26083e4; (* arm_MOV X4 (rvalue (word 18446744069414584321)) *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0x9a040108; (* arm_ADC X8 X8 X4 *) + 0xa90019e5; (* arm_STP X5 X6 X15 (Immediate_Offset (iword (&0))) *) + 0xa90121e7; (* arm_STP X7 X8 X15 (Immediate_Offset (iword (&16))) *) + 0xa9441be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&64))) *) + 0xa9480fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&128))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa94523e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&80))) *) + 0xa9490fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&144))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xda9f23e3; (* arm_CSETM X3 Condition_CC *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0xba0400c6; (* arm_ADCS X6 X6 X4 *) + 0xba1f00e7; (* arm_ADCS X7 X7 XZR *) + 0xb26083e4; (* arm_MOV X4 (rvalue (word 18446744069414584321)) *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0x9a040108; (* arm_ADC X8 X8 X4 *) + 0xa9061be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&96))) *) + 0xa90723e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&112))) *) + 0xa94a13e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&160))) *) + 0xa9442207; (* arm_LDP X7 X8 X16 (Immediate_Offset (iword (&64))) *) + 0x9b077c6c; (* arm_MUL X12 X3 X7 *) + 0x9bc77c6d; (* arm_UMULH X13 X3 X7 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa9452a09; (* arm_LDP X9 X10 X16 (Immediate_Offset (iword (&80))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c60; (* arm_UMULH X0 X3 X9 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c61; (* arm_UMULH X1 X3 X10 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0xa94b1be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&176))) *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bca7c83; (* arm_UMULH X3 X4 X10 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9b077cab; (* arm_MUL X11 X5 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b087cab; (* arm_MUL X11 X5 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b097cab; (* arm_MUL X11 X5 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b0a7cab; (* arm_MUL X11 X5 X10 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bca7ca4; (* arm_UMULH X4 X5 X10 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9bc77cab; (* arm_UMULH X11 X5 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9bc87cab; (* arm_UMULH X11 X5 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bc97cab; (* arm_UMULH X11 X5 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b077ccb; (* arm_MUL X11 X6 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9b087ccb; (* arm_MUL X11 X6 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b097ccb; (* arm_MUL X11 X6 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9b0a7ccb; (* arm_MUL X11 X6 X10 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9bca7cc5; (* arm_UMULH X5 X6 X10 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0x9bc77ccb; (* arm_UMULH X11 X6 X7 *) + 0xab0b0021; (* arm_ADDS X1 X1 X11 *) + 0x9bc87ccb; (* arm_UMULH X11 X6 X8 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bc97ccb; (* arm_UMULH X11 X6 X9 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0xd3607d8b; (* arm_LSL X11 X12 32 *) + 0xeb0b0182; (* arm_SUBS X2 X12 X11 *) + 0xd360fd86; (* arm_LSR X6 X12 32 *) + 0xda06018c; (* arm_SBC X12 X12 X6 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xba0601ce; (* arm_ADCS X14 X14 X6 *) + 0xba020000; (* arm_ADCS X0 X0 X2 *) + 0x9a1f018c; (* arm_ADC X12 X12 XZR *) + 0xd3607dab; (* arm_LSL X11 X13 32 *) + 0xeb0b01a2; (* arm_SUBS X2 X13 X11 *) + 0xd360fda6; (* arm_LSR X6 X13 32 *) + 0xda0601ad; (* arm_SBC X13 X13 X6 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0xba060000; (* arm_ADCS X0 X0 X6 *) + 0xba02018c; (* arm_ADCS X12 X12 X2 *) + 0x9a1f01ad; (* arm_ADC X13 X13 XZR *) + 0xd3607dcb; (* arm_LSL X11 X14 32 *) + 0xeb0b01c2; (* arm_SUBS X2 X14 X11 *) + 0xd360fdc6; (* arm_LSR X6 X14 32 *) + 0xda0601ce; (* arm_SBC X14 X14 X6 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0xba06018c; (* arm_ADCS X12 X12 X6 *) + 0xba0201ad; (* arm_ADCS X13 X13 X2 *) + 0x9a1f01ce; (* arm_ADC X14 X14 XZR *) + 0xd3607c0b; (* arm_LSL X11 X0 32 *) + 0xeb0b0002; (* arm_SUBS X2 X0 X11 *) + 0xd360fc06; (* arm_LSR X6 X0 32 *) + 0xda060000; (* arm_SBC X0 X0 X6 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0xba0601ad; (* arm_ADCS X13 X13 X6 *) + 0xba0201ce; (* arm_ADCS X14 X14 X2 *) + 0x9a1f0000; (* arm_ADC X0 X0 XZR *) + 0xab01018c; (* arm_ADDS X12 X12 X1 *) + 0xba0301ad; (* arm_ADCS X13 X13 X3 *) + 0xba0401ce; (* arm_ADCS X14 X14 X4 *) + 0xba050000; (* arm_ADCS X0 X0 X5 *) + 0x9a9f37e2; (* arm_CSET X2 Condition_CS *) + 0xb2407feb; (* arm_MOV X11 (rvalue (word 4294967295)) *) + 0xb26083e6; (* arm_MOV X6 (rvalue (word 18446744069414584321)) *) + 0xb1000581; (* arm_ADDS X1 X12 (rvalue (word 1)) *) + 0xfa0b01a3; (* arm_SBCS X3 X13 X11 *) + 0xfa1f01c4; (* arm_SBCS X4 X14 XZR *) + 0xfa060005; (* arm_SBCS X5 X0 X6 *) + 0xfa1f005f; (* arm_SBCS XZR X2 XZR *) + 0x9a81318c; (* arm_CSEL X12 X12 X1 Condition_CC *) + 0x9a8331ad; (* arm_CSEL X13 X13 X3 Condition_CC *) + 0x9a8431ce; (* arm_CSEL X14 X14 X4 Condition_CC *) + 0x9a853000; (* arm_CSEL X0 X0 X5 Condition_CC *) + 0xa90435ec; (* arm_STP X12 X13 X15 (Immediate_Offset (iword (&64))) *) + 0xa90501ee; (* arm_STP X14 X0 X15 (Immediate_Offset (iword (&80))) *) + 0xa94019e5; (* arm_LDP X5 X6 X15 (Immediate_Offset (iword (&0))) *) + 0xa9440fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&64))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa94121e7; (* arm_LDP X7 X8 X15 (Immediate_Offset (iword (&16))) *) + 0xa9450fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&80))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xda9f23e3; (* arm_CSETM X3 Condition_CC *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0xba0400c6; (* arm_ADCS X6 X6 X4 *) + 0xba1f00e7; (* arm_ADCS X7 X7 XZR *) + 0xb26083e4; (* arm_MOV X4 (rvalue (word 18446744069414584321)) *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0x9a040108; (* arm_ADC X8 X8 X4 *) + 0xa90019e5; (* arm_STP X5 X6 X15 (Immediate_Offset (iword (&0))) *) + 0xa90121e7; (* arm_STP X7 X8 X15 (Immediate_Offset (iword (&16))) *) + 0xa9481be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&128))) *) + 0xa9400de4; (* arm_LDP X4 X3 X15 (Immediate_Offset (iword (&0))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa94923e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&144))) *) + 0xa9410de4; (* arm_LDP X4 X3 X15 (Immediate_Offset (iword (&16))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xda9f23e3; (* arm_CSETM X3 Condition_CC *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0xba0400c6; (* arm_ADCS X6 X6 X4 *) + 0xba1f00e7; (* arm_ADCS X7 X7 XZR *) + 0xb26083e4; (* arm_MOV X4 (rvalue (word 18446744069414584321)) *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0x9a040108; (* arm_ADC X8 X8 X4 *) + 0xa9081be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&128))) *) + 0xa90923e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&144))) *) + 0xa94613e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&96))) *) + 0xa9422207; (* arm_LDP X7 X8 X16 (Immediate_Offset (iword (&32))) *) + 0x9b077c6c; (* arm_MUL X12 X3 X7 *) + 0x9bc77c6d; (* arm_UMULH X13 X3 X7 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa9432a09; (* arm_LDP X9 X10 X16 (Immediate_Offset (iword (&48))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c60; (* arm_UMULH X0 X3 X9 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c61; (* arm_UMULH X1 X3 X10 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0xa9471be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&112))) *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bca7c83; (* arm_UMULH X3 X4 X10 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9b077cab; (* arm_MUL X11 X5 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b087cab; (* arm_MUL X11 X5 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b097cab; (* arm_MUL X11 X5 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b0a7cab; (* arm_MUL X11 X5 X10 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bca7ca4; (* arm_UMULH X4 X5 X10 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9bc77cab; (* arm_UMULH X11 X5 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9bc87cab; (* arm_UMULH X11 X5 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bc97cab; (* arm_UMULH X11 X5 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b077ccb; (* arm_MUL X11 X6 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9b087ccb; (* arm_MUL X11 X6 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b097ccb; (* arm_MUL X11 X6 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9b0a7ccb; (* arm_MUL X11 X6 X10 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9bca7cc5; (* arm_UMULH X5 X6 X10 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0x9bc77ccb; (* arm_UMULH X11 X6 X7 *) + 0xab0b0021; (* arm_ADDS X1 X1 X11 *) + 0x9bc87ccb; (* arm_UMULH X11 X6 X8 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bc97ccb; (* arm_UMULH X11 X6 X9 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0xd3607d8b; (* arm_LSL X11 X12 32 *) + 0xeb0b0182; (* arm_SUBS X2 X12 X11 *) + 0xd360fd86; (* arm_LSR X6 X12 32 *) + 0xda06018c; (* arm_SBC X12 X12 X6 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xba0601ce; (* arm_ADCS X14 X14 X6 *) + 0xba020000; (* arm_ADCS X0 X0 X2 *) + 0x9a1f018c; (* arm_ADC X12 X12 XZR *) + 0xd3607dab; (* arm_LSL X11 X13 32 *) + 0xeb0b01a2; (* arm_SUBS X2 X13 X11 *) + 0xd360fda6; (* arm_LSR X6 X13 32 *) + 0xda0601ad; (* arm_SBC X13 X13 X6 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0xba060000; (* arm_ADCS X0 X0 X6 *) + 0xba02018c; (* arm_ADCS X12 X12 X2 *) + 0x9a1f01ad; (* arm_ADC X13 X13 XZR *) + 0xd3607dcb; (* arm_LSL X11 X14 32 *) + 0xeb0b01c2; (* arm_SUBS X2 X14 X11 *) + 0xd360fdc6; (* arm_LSR X6 X14 32 *) + 0xda0601ce; (* arm_SBC X14 X14 X6 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0xba06018c; (* arm_ADCS X12 X12 X6 *) + 0xba0201ad; (* arm_ADCS X13 X13 X2 *) + 0x9a1f01ce; (* arm_ADC X14 X14 XZR *) + 0xd3607c0b; (* arm_LSL X11 X0 32 *) + 0xeb0b0002; (* arm_SUBS X2 X0 X11 *) + 0xd360fc06; (* arm_LSR X6 X0 32 *) + 0xda060000; (* arm_SBC X0 X0 X6 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0xba0601ad; (* arm_ADCS X13 X13 X6 *) + 0xba0201ce; (* arm_ADCS X14 X14 X2 *) + 0x9a1f0000; (* arm_ADC X0 X0 XZR *) + 0xab01018c; (* arm_ADDS X12 X12 X1 *) + 0xba0301ad; (* arm_ADCS X13 X13 X3 *) + 0xba0401ce; (* arm_ADCS X14 X14 X4 *) + 0xba050000; (* arm_ADCS X0 X0 X5 *) + 0x9a9f37e2; (* arm_CSET X2 Condition_CS *) + 0xb2407feb; (* arm_MOV X11 (rvalue (word 4294967295)) *) + 0xb26083e6; (* arm_MOV X6 (rvalue (word 18446744069414584321)) *) + 0xb1000581; (* arm_ADDS X1 X12 (rvalue (word 1)) *) + 0xfa0b01a3; (* arm_SBCS X3 X13 X11 *) + 0xfa1f01c4; (* arm_SBCS X4 X14 XZR *) + 0xfa060005; (* arm_SBCS X5 X0 X6 *) + 0xfa1f005f; (* arm_SBCS XZR X2 XZR *) + 0x9a81318c; (* arm_CSEL X12 X12 X1 Condition_CC *) + 0x9a8331ad; (* arm_CSEL X13 X13 X3 Condition_CC *) + 0x9a8431ce; (* arm_CSEL X14 X14 X4 Condition_CC *) + 0x9a853000; (* arm_CSEL X0 X0 X5 Condition_CC *) + 0xa90637ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&96))) *) + 0xa90703ee; (* arm_STP X14 X0 SP (Immediate_Offset (iword (&112))) *) + 0xa94213e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&32))) *) + 0xa94823e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&128))) *) + 0x9b077c6c; (* arm_MUL X12 X3 X7 *) + 0x9bc77c6d; (* arm_UMULH X13 X3 X7 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa9492be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&144))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c60; (* arm_UMULH X0 X3 X9 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c61; (* arm_UMULH X1 X3 X10 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0xa9431be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&48))) *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bca7c83; (* arm_UMULH X3 X4 X10 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9a1f0063; (* arm_ADC X3 X3 XZR *) + 0x9b077cab; (* arm_MUL X11 X5 X7 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b087cab; (* arm_MUL X11 X5 X8 *) + 0xba0b0000; (* arm_ADCS X0 X0 X11 *) + 0x9b097cab; (* arm_MUL X11 X5 X9 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b0a7cab; (* arm_MUL X11 X5 X10 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bca7ca4; (* arm_UMULH X4 X5 X10 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9bc77cab; (* arm_UMULH X11 X5 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9bc87cab; (* arm_UMULH X11 X5 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9bc97cab; (* arm_UMULH X11 X5 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b077ccb; (* arm_MUL X11 X6 X7 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0x9b087ccb; (* arm_MUL X11 X6 X8 *) + 0xba0b0021; (* arm_ADCS X1 X1 X11 *) + 0x9b097ccb; (* arm_MUL X11 X6 X9 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9b0a7ccb; (* arm_MUL X11 X6 X10 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9bca7cc5; (* arm_UMULH X5 X6 X10 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0x9bc77ccb; (* arm_UMULH X11 X6 X7 *) + 0xab0b0021; (* arm_ADDS X1 X1 X11 *) + 0x9bc87ccb; (* arm_UMULH X11 X6 X8 *) + 0xba0b0063; (* arm_ADCS X3 X3 X11 *) + 0x9bc97ccb; (* arm_UMULH X11 X6 X9 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f00a5; (* arm_ADC X5 X5 XZR *) + 0xd3607d8b; (* arm_LSL X11 X12 32 *) + 0xeb0b0182; (* arm_SUBS X2 X12 X11 *) + 0xd360fd86; (* arm_LSR X6 X12 32 *) + 0xda06018c; (* arm_SBC X12 X12 X6 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xba0601ce; (* arm_ADCS X14 X14 X6 *) + 0xba020000; (* arm_ADCS X0 X0 X2 *) + 0x9a1f018c; (* arm_ADC X12 X12 XZR *) + 0xd3607dab; (* arm_LSL X11 X13 32 *) + 0xeb0b01a2; (* arm_SUBS X2 X13 X11 *) + 0xd360fda6; (* arm_LSR X6 X13 32 *) + 0xda0601ad; (* arm_SBC X13 X13 X6 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0xba060000; (* arm_ADCS X0 X0 X6 *) + 0xba02018c; (* arm_ADCS X12 X12 X2 *) + 0x9a1f01ad; (* arm_ADC X13 X13 XZR *) + 0xd3607dcb; (* arm_LSL X11 X14 32 *) + 0xeb0b01c2; (* arm_SUBS X2 X14 X11 *) + 0xd360fdc6; (* arm_LSR X6 X14 32 *) + 0xda0601ce; (* arm_SBC X14 X14 X6 *) + 0xab0b0000; (* arm_ADDS X0 X0 X11 *) + 0xba06018c; (* arm_ADCS X12 X12 X6 *) + 0xba0201ad; (* arm_ADCS X13 X13 X2 *) + 0x9a1f01ce; (* arm_ADC X14 X14 XZR *) + 0xd3607c0b; (* arm_LSL X11 X0 32 *) + 0xeb0b0002; (* arm_SUBS X2 X0 X11 *) + 0xd360fc06; (* arm_LSR X6 X0 32 *) + 0xda060000; (* arm_SBC X0 X0 X6 *) + 0xab0b018c; (* arm_ADDS X12 X12 X11 *) + 0xba0601ad; (* arm_ADCS X13 X13 X6 *) + 0xba0201ce; (* arm_ADCS X14 X14 X2 *) + 0x9a1f0000; (* arm_ADC X0 X0 XZR *) + 0xab01018c; (* arm_ADDS X12 X12 X1 *) + 0xba0301ad; (* arm_ADCS X13 X13 X3 *) + 0xba0401ce; (* arm_ADCS X14 X14 X4 *) + 0xba050000; (* arm_ADCS X0 X0 X5 *) + 0x9a9f37e2; (* arm_CSET X2 Condition_CS *) + 0xb2407feb; (* arm_MOV X11 (rvalue (word 4294967295)) *) + 0xb26083e6; (* arm_MOV X6 (rvalue (word 18446744069414584321)) *) + 0xb1000581; (* arm_ADDS X1 X12 (rvalue (word 1)) *) + 0xfa0b01a3; (* arm_SBCS X3 X13 X11 *) + 0xfa1f01c4; (* arm_SBCS X4 X14 XZR *) + 0xfa060005; (* arm_SBCS X5 X0 X6 *) + 0xfa1f005f; (* arm_SBCS XZR X2 XZR *) + 0x9a81318c; (* arm_CSEL X12 X12 X1 Condition_CC *) + 0x9a8331ad; (* arm_CSEL X13 X13 X3 Condition_CC *) + 0x9a8431ce; (* arm_CSEL X14 X14 X4 Condition_CC *) + 0x9a853000; (* arm_CSEL X0 X0 X5 Condition_CC *) + 0xa90837ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&128))) *) + 0xa90903ee; (* arm_STP X14 X0 SP (Immediate_Offset (iword (&144))) *) + 0xa9481be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&128))) *) + 0xa9460fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&96))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa94923e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&144))) *) + 0xa9470fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&112))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xda9f23e3; (* arm_CSETM X3 Condition_CC *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0xba0400c6; (* arm_ADCS X6 X6 X4 *) + 0xba1f00e7; (* arm_ADCS X7 X7 XZR *) + 0xb26083e4; (* arm_MOV X4 (rvalue (word 18446744069414584321)) *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0x9a040108; (* arm_ADC X8 X8 X4 *) + 0xa90219e5; (* arm_STP X5 X6 X15 (Immediate_Offset (iword (&32))) *) + 0xa90321e7; (* arm_STP X7 X8 X15 (Immediate_Offset (iword (&48))) *) + 0x910303ff; (* arm_ADD SP SP (rvalue (word 192)) *) + 0xd65f03c0 (* arm_RET X30 *) +];; + +let P256_MONTJMIXADD_EXEC = ARM_MK_EXEC_RULE p256_montjmixadd_mc;; + +(* ------------------------------------------------------------------------- *) +(* Common supporting definitions and lemmas for component proofs. *) +(* ------------------------------------------------------------------------- *) + +let p_256 = new_definition `p_256 = 115792089210356248762697446949407573530086143415290314195533631308867097853951`;; + +let nistp256 = define + `nistp256 = + (integer_mod_ring p_256, + ring_neg (integer_mod_ring p_256) (&3), + &b_256:int)`;; + +let nistp256_encode = new_definition + `nistp256_encode = montgomery_encode(256,p_256)`;; + +let nintlemma = prove + (`&(num_of_int(x rem &p_256)) = x rem &p_256`, + MATCH_MP_TAC INT_OF_NUM_OF_INT THEN MATCH_MP_TAC INT_REM_POS THEN + REWRITE_TAC[INT_OF_NUM_EQ; p_256] THEN CONV_TAC NUM_REDUCE_CONV);; + +let unilemma0 = prove + (`x = a MOD p_256 ==> x < p_256 /\ &x = &a rem &p_256`, + REWRITE_TAC[INT_OF_NUM_REM; p_256] THEN ARITH_TAC);; + +let unilemma1 = prove + (`&x = a rem &p_256 ==> x < p_256 /\ &x = a rem &p_256`, + SIMP_TAC[GSYM INT_OF_NUM_LT; INT_LT_REM_EQ; p_256] THEN INT_ARITH_TAC);; + +let unilemma2 = prove + (`X = num_of_int(x rem &p_256) ==> X < p_256 /\ &X = x rem &p_256`, + DISCH_THEN SUBST1_TAC THEN + REWRITE_TAC[GSYM INT_OF_NUM_LT; nintlemma; INT_LT_REM_EQ] THEN + REWRITE_TAC[INT_OF_NUM_LT; p_256] THEN CONV_TAC NUM_REDUCE_CONV);; + +let lemont = prove + (`(&i * x * y) rem &p_256 = (&i * x rem &p_256 * y rem &p_256) rem &p_256`, + CONV_TAC INT_REM_DOWN_CONV THEN REWRITE_TAC[]);; + +let pumont = prove + (`(&(inverse_mod p_256 (2 EXP 256)) * + (&2 pow 256 * x) rem &p_256 * (&2 pow 256 * y) rem &p_256) rem &p_256 = + (&2 pow 256 * x * y) rem &p_256`, + CONV_TAC INT_REM_DOWN_CONV THEN REWRITE_TAC[INT_REM_EQ] THEN + MATCH_MP_TAC(INTEGER_RULE + `(i * t:int == &1) (mod p) + ==> (i * (t * x) * (t * y) == t * x * y) (mod p)`) THEN + REWRITE_TAC[GSYM num_congruent; INT_OF_NUM_CLAUSES] THEN + REWRITE_TAC[INVERSE_MOD_LMUL_EQ; COPRIME_REXP; COPRIME_2; p_256] THEN + CONV_TAC NUM_REDUCE_CONV);; + +let lvs = + ["x_1",[`X16`;`0`]; + "y_1",[`X16`;`32`]; + "z_1",[`X16`;`64`]; + "x_2",[`X17`;`0`]; + "y_2",[`X17`;`32`]; + "z_2",[`X17`;`64`]; + "x_3",[`X15`;`0`]; + "y_3",[`X15`;`32`]; + "z_3",[`X15`;`64`]; + "zp2",[`SP`;`0`]; + "ww",[`SP`;`0`]; + "yd",[`SP`;`32`]; + "y2a",[`SP`;`32`]; + "x2a",[`SP`;`64`]; + "zzx2",[`SP`;`64`]; + "zz",[`SP`;`96`]; + "t1",[`SP`;`96`]; + "t2",[`SP`;`128`]; + "zzx1",[`SP`;`128`]; + "xd",[`SP`;`160`]];; + +(* ------------------------------------------------------------------------- *) +(* Instances of montsqr. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_MONTSQR_P256_TAC = + ARM_MACRO_SIM_ABBREV_TAC p256_montjmixadd_mc 95 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1. + !a. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = a + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0x1530) (word_add (read p3 t) (word n3),32) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p256_montjmixadd_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X15 s = read X15 t /\ + read X16 s = read X16 t /\ + read X17 s = read X17 t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) s = + a) + (\s. read PC s = pcout /\ + (a EXP 2 <= 2 EXP 256 * p_256 + ==> read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 4)) s = + (inverse_mod p_256 (2 EXP 256) * a EXP 2) MOD p_256)) + (MAYCHANGE [PC; X0; X1; X2; X3; X4; X5; X6; X7; X8; X9; X10; X11; X12; + X13; X14] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 4)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + (*** Globalize the a EXP 2 <= 2 EXP 256 * p_256 assumption ***) + + ASM_CASES_TAC `a EXP 2 <= 2 EXP 256 * p_256` THENL + [ASM_REWRITE_TAC[]; ARM_SIM_TAC P256_MONTJMIXADD_EXEC (1--95)] THEN + ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "x_" o lhand o concl) THEN + + (*** Simulate the core pre-reduced result accumulation ***) + + ARM_ACCSTEPS_TAC P256_MONTJMIXADD_EXEC (1--82) (1--82) THEN + RULE_ASSUM_TAC(REWRITE_RULE[COND_SWAP; GSYM WORD_BITVAL]) THEN + ABBREV_TAC + `t = bignum_of_wordlist + [sum_s78; sum_s79; sum_s80; sum_s81; word(bitval carry_s81)]` THEN + SUBGOAL_THEN + `t < 2 * p_256 /\ (2 EXP 256 * t == a EXP 2) (mod p_256)` + STRIP_ASSUME_TAC THENL + [ACCUMULATOR_POP_ASSUM_LIST + (STRIP_ASSUME_TAC o end_itlist CONJ o DECARRY_RULE) THEN + CONJ_TAC THENL + [FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP (ARITH_RULE + `ab <= 2 EXP 256 * p + ==> 2 EXP 256 * t < ab + 2 EXP 256 * p ==> t < 2 * p`)) THEN + MAP_EVERY EXPAND_TAC ["a"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + REWRITE_TAC[p_256; REAL_ARITH `a:real < b + c <=> a - b < c`] THEN + ASM_REWRITE_TAC[VAL_WORD_BITVAL] THEN BOUNDER_TAC[]; + REWRITE_TAC[REAL_CONGRUENCE; p_256] THEN CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["a"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ASM_REWRITE_TAC[VAL_WORD_BITVAL] THEN REAL_INTEGER_TAC]; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Final correction stage ***) + + ARM_ACCSTEPS_TAC P256_MONTJMIXADD_EXEC (85--89) (83--95) THEN + RULE_ASSUM_TAC(REWRITE_RULE + [GSYM WORD_BITVAL; COND_SWAP; REAL_BITVAL_NOT]) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + TRANS_TAC EQ_TRANS `t MOD p_256` THEN CONJ_TAC THENL + [ALL_TAC; + REWRITE_TAC[GSYM CONG] THEN FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP + (NUMBER_RULE + `(e * t == a EXP 2) (mod p) + ==> (e * i == 1) (mod p) ==> (t == i * a EXP 2) (mod p)`)) THEN + REWRITE_TAC[INVERSE_MOD_RMUL_EQ; COPRIME_REXP; COPRIME_2] THEN + REWRITE_TAC[p_256] THEN CONV_TAC NUM_REDUCE_CONV] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC EQUAL_FROM_CONGRUENT_MOD_MOD THEN + MAP_EVERY EXISTS_TAC + [`256`; `if t < p_256 then &t:real else &t - &p_256`] THEN + REPEAT CONJ_TAC THENL + [REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN BOUNDER_TAC[]; + REWRITE_TAC[p_256] THEN ARITH_TAC; + REWRITE_TAC[p_256] THEN ARITH_TAC; + ALL_TAC; + ASM_SIMP_TAC[MOD_CASES] THEN + GEN_REWRITE_TAC LAND_CONV [COND_RAND] THEN + SIMP_TAC[REAL_OF_NUM_SUB; GSYM NOT_LT]] THEN + SUBGOAL_THEN `carry_s89 <=> t < p_256` SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN EXISTS_TAC `320` THEN + EXPAND_TAC "t" THEN + REWRITE_TAC[p_256; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + CONV_TAC NUM_REDUCE_CONV THEN REWRITE_TAC[VAL_WORD_BITVAL] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ALL_TAC] THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[] THEN EXPAND_TAC "t" THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist; p_256] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + ASM_REWRITE_TAC[BITVAL_CLAUSES; VAL_WORD_BITVAL] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instances of montmul. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_MONTMUL_P256_TAC = + ARM_MACRO_SIM_ABBREV_TAC p256_montjmixadd_mc 117 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1 p2 n2. + !a. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = a + ==> + !b. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) t = b + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0x1530) (word_add (read p3 t) (word n3),32) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p256_montjmixadd_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X15 s = read X15 t /\ + read X16 s = read X16 t /\ + read X17 s = read X17 t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) s = + a /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) s = + b) + (\s. read PC s = pcout /\ + (a * b <= 2 EXP 256 * p_256 + ==> read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 4)) s = + (inverse_mod p_256 (2 EXP 256) * a * b) MOD p_256)) + (MAYCHANGE [PC; X0; X1; X2; X3; X4; X5; X6; X7; X8; X9; X10; X11; X12; + X13; X14] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 4)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + (*** Globalize the a * b <= 2 EXP 256 * p_256 assumption ***) + + ASM_CASES_TAC `a * b <= 2 EXP 256 * p_256` THENL + [ASM_REWRITE_TAC[]; ARM_SIM_TAC P256_MONTJMIXADD_EXEC (1--117)] THEN + ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "y_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "x_" o lhand o concl) THEN + + (*** Simulate the core pre-reduced result accumulation ***) + + ARM_ACCSTEPS_TAC P256_MONTJMIXADD_EXEC (1--104) (1--104) THEN + RULE_ASSUM_TAC(REWRITE_RULE[WORD_UNMASK_64]) THEN + ABBREV_TAC + `t = bignum_of_wordlist + [sum_s100; sum_s101; sum_s102; sum_s103; + word(bitval carry_s103)]` THEN + SUBGOAL_THEN + `t < 2 * p_256 /\ (2 EXP 256 * t == a * b) (mod p_256)` + STRIP_ASSUME_TAC THENL + [ACCUMULATOR_POP_ASSUM_LIST + (STRIP_ASSUME_TAC o end_itlist CONJ o DECARRY_RULE) THEN + CONJ_TAC THENL + [FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP (ARITH_RULE + `ab <= 2 EXP 256 * p + ==> 2 EXP 256 * t < ab + 2 EXP 256 * p ==> t < 2 * p`)) THEN + MAP_EVERY EXPAND_TAC ["a"; "b"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + REWRITE_TAC[p_256; REAL_ARITH `a:real < b + c <=> a - b < c`] THEN + ASM_REWRITE_TAC[VAL_WORD_BITVAL] THEN BOUNDER_TAC[]; + REWRITE_TAC[REAL_CONGRUENCE; p_256] THEN CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["a"; "b"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ASM_REWRITE_TAC[VAL_WORD_BITVAL] THEN REAL_INTEGER_TAC]; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Final correction stage ***) + + ARM_ACCSTEPS_TAC P256_MONTJMIXADD_EXEC (107--111) (105--117) THEN + RULE_ASSUM_TAC(REWRITE_RULE + [GSYM WORD_BITVAL; COND_SWAP; REAL_BITVAL_NOT]) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + TRANS_TAC EQ_TRANS `t MOD p_256` THEN CONJ_TAC THENL + [ALL_TAC; + REWRITE_TAC[GSYM CONG] THEN FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP + (NUMBER_RULE + `(e * t == a * b) (mod p) + ==> (e * i == 1) (mod p) ==> (t == i * a * b) (mod p)`)) THEN + REWRITE_TAC[INVERSE_MOD_RMUL_EQ; COPRIME_REXP; COPRIME_2] THEN + REWRITE_TAC[p_256] THEN CONV_TAC NUM_REDUCE_CONV] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC EQUAL_FROM_CONGRUENT_MOD_MOD THEN + MAP_EVERY EXISTS_TAC + [`256`; `if t < p_256 then &t:real else &t - &p_256`] THEN + REPEAT CONJ_TAC THENL + [REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN BOUNDER_TAC[]; + REWRITE_TAC[p_256] THEN ARITH_TAC; + REWRITE_TAC[p_256] THEN ARITH_TAC; + ALL_TAC; + ASM_SIMP_TAC[MOD_CASES] THEN + GEN_REWRITE_TAC LAND_CONV [COND_RAND] THEN + SIMP_TAC[REAL_OF_NUM_SUB; GSYM NOT_LT]] THEN + SUBGOAL_THEN `carry_s111 <=> t < p_256` SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN EXISTS_TAC `320` THEN + EXPAND_TAC "t" THEN + REWRITE_TAC[p_256; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + CONV_TAC NUM_REDUCE_CONV THEN REWRITE_TAC[VAL_WORD_BITVAL] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ALL_TAC] THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[] THEN EXPAND_TAC "t" THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist; p_256] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + ASM_REWRITE_TAC[BITVAL_CLAUSES; VAL_WORD_BITVAL] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instances of sub. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_SUB_P256_TAC = + ARM_MACRO_SIM_ABBREV_TAC p256_montjmixadd_mc 19 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) t = n + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0x1530) (word_add (read p3 t) (word n3),32) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p256_montjmixadd_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X15 s = read X15 t /\ + read X16 s = read X16 t /\ + read X17 s = read X17 t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) s = + n) + (\s. read PC s = pcout /\ + (m < p_256 /\ n < p_256 + ==> &(read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 4)) s) = (&m - &n) rem &p_256)) + (MAYCHANGE [PC; X3; X4; X5; X6; X7; X8] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 4)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "m_" o lhand o concl) THEN + + ARM_ACCSTEPS_TAC P256_MONTJMIXADD_EXEC (1--8) (1--8) THEN + + SUBGOAL_THEN `carry_s8 <=> m < n` SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN EXISTS_TAC `256` THEN + MAP_EVERY EXPAND_TAC ["m"; "n"] THEN REWRITE_TAC[GSYM REAL_OF_NUM_ADD] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_MUL; GSYM REAL_OF_NUM_POW] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ALL_TAC] THEN + + ARM_STEPS_TAC P256_MONTJMIXADD_EXEC [9] THEN + RULE_ASSUM_TAC(REWRITE_RULE[WORD_UNMASK_64; NOT_LE]) THEN + ARM_ACCSTEPS_TAC P256_MONTJMIXADD_EXEC (10--19) (10--19) THEN + + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN STRIP_TAC THEN + CONV_TAC(LAND_CONV(RAND_CONV BIGNUM_EXPAND_CONV)) THEN + ASM_REWRITE_TAC[] THEN DISCARD_STATE_TAC "s19" THEN + + CONV_TAC SYM_CONV THEN MATCH_MP_TAC INT_REM_UNIQ THEN + EXISTS_TAC `--(&(bitval(m < n))):int` THEN REWRITE_TAC[INT_ABS_NUM] THEN + REWRITE_TAC[INT_ARITH `m - n:int = --b * p + z <=> z = b * p + m - n`] THEN + REWRITE_TAC[int_eq; int_le; int_lt] THEN + REWRITE_TAC[int_add_th; int_mul_th; int_of_num_th; int_sub_th] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_ADD; GSYM REAL_OF_NUM_MUL; + GSYM REAL_OF_NUM_POW] THEN + MATCH_MP_TAC(REAL_ARITH + `!t:real. p < t /\ + (&0 <= a /\ a < p) /\ + (&0 <= z /\ z < t) /\ + ((&0 <= z /\ z < t) /\ (&0 <= a /\ a < t) ==> z = a) + ==> z = a /\ &0 <= z /\ z < p`) THEN + EXISTS_TAC `(&2:real) pow 256` THEN + + CONJ_TAC THENL [REWRITE_TAC[p_256] THEN REAL_ARITH_TAC; ALL_TAC] THEN + CONJ_TAC THENL + [MAP_EVERY UNDISCH_TAC [`m < p_256`; `n < p_256`] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_LT] THEN + ASM_CASES_TAC `&m:real < &n` THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + POP_ASSUM MP_TAC THEN REWRITE_TAC[p_256] THEN REAL_ARITH_TAC; + ALL_TAC] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; STRIP_TAC] THEN + + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`256`; `&0:real`] THEN + ASM_REWRITE_TAC[] THEN + CONJ_TAC THENL [REAL_INTEGER_TAC; ALL_TAC] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + REWRITE_TAC[WORD_AND_MASK] THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC WORD_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["m"; "n"] THEN REWRITE_TAC[GSYM REAL_OF_NUM_ADD] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_MUL; GSYM REAL_OF_NUM_POW; p_256] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + CONV_TAC(RAND_CONV REAL_POLY_CONV) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instances of amontsqr. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_AMONTSQR_P256_TAC = + ARM_MACRO_SIM_ABBREV_TAC p256_montjmixadd_mc 93 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1. + !a. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = a + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0x1530) (word_add (read p3 t) (word n3),32) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p256_montjmixadd_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X15 s = read X15 t /\ + read X16 s = read X16 t /\ + read X17 s = read X17 t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) s = + a) + (\s. read PC s = pcout /\ + read(memory :> bytes(word_add (read p3 t) (word n3),8 * 4)) s + < 2 EXP 256 /\ + (read(memory :> bytes(word_add (read p3 t) (word n3),8 * 4)) s == + inverse_mod p_256 (2 EXP 256) * a EXP 2) (mod p_256)) + (MAYCHANGE [PC; X0; X1; X2; X3; X4; X5; X6; X7; X8; X9; X10; X11; X12; + X13; X14] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 4)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "x_" o lhand o concl) THEN + + (*** Simulate the core pre-reduced result accumulation ***) + + ARM_ACCSTEPS_TAC P256_MONTJMIXADD_EXEC (1--81) (1--81) THEN + RULE_ASSUM_TAC(REWRITE_RULE[COND_SWAP; GSYM WORD_BITVAL]) THEN + ABBREV_TAC + `t = bignum_of_wordlist + [sum_s78; sum_s79; sum_s80; sum_s81; + word(bitval carry_s81)]` THEN + SUBGOAL_THEN + `t < 2 EXP 256 + p_256 /\ (2 EXP 256 * t == a EXP 2) (mod p_256)` + STRIP_ASSUME_TAC THENL + [ACCUMULATOR_POP_ASSUM_LIST + (STRIP_ASSUME_TAC o end_itlist CONJ o DECARRY_RULE) THEN + CONJ_TAC THENL + [MATCH_MP_TAC(ARITH_RULE + `2 EXP 256 * t <= (2 EXP 256 - 1) EXP 2 + (2 EXP 256 - 1) * p + ==> t < 2 EXP 256 + p`) THEN + REWRITE_TAC[p_256] THEN CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["a"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + REWRITE_TAC[p_256; REAL_ARITH `a:real < b + c <=> a - b < c`] THEN + ASM_REWRITE_TAC[VAL_WORD_BITVAL] THEN BOUNDER_TAC[]; + REWRITE_TAC[REAL_CONGRUENCE; p_256] THEN CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["a"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ASM_REWRITE_TAC[VAL_WORD_BITVAL] THEN REAL_INTEGER_TAC]; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Final correction stage ***) + + ARM_ACCSTEPS_TAC P256_MONTJMIXADD_EXEC (88--91) (82--93) THEN + RULE_ASSUM_TAC(REWRITE_RULE + [GSYM WORD_BITVAL; COND_SWAP; REAL_BITVAL_NOT]) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONJ_TAC THENL + [CONV_TAC(ONCE_DEPTH_CONV BIGNUM_EXPAND_CONV) THEN + ASM_REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN BOUNDER_TAC[]; + ALL_TAC] THEN + FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP + (NUMBER_RULE + `(e * t == ab) (mod p) + ==> (e * i == 1) (mod p) /\ (s == t) (mod p) + ==> (s == i * ab) (mod p)`)) THEN + REWRITE_TAC[INVERSE_MOD_RMUL_EQ; COPRIME_REXP; COPRIME_2] THEN + CONJ_TAC THENL + [REWRITE_TAC[p_256] THEN CONV_TAC NUM_REDUCE_CONV; ALL_TAC] THEN + SUBGOAL_THEN `carry_s81 <=> 2 EXP 256 <= t` SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LE THEN EXISTS_TAC `256` THEN + EXPAND_TAC "t" THEN + REWRITE_TAC[p_256; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + CONV_TAC NUM_REDUCE_CONV THEN REWRITE_TAC[VAL_WORD_BITVAL] THEN + REWRITE_TAC[VAL_WORD_BITVAL] THEN BOUNDER_TAC[]; + ABBREV_TAC `b <=> 2 EXP 256 <= t`] THEN + MATCH_MP_TAC(NUMBER_RULE `!b:num. x + b * p = y ==> (x == y) (mod p)`) THEN + EXISTS_TAC `bitval b` THEN REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN + ONCE_REWRITE_TAC[REAL_ARITH `a + b:real = c <=> c - b = a`] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`256`; `&0:real`] THEN CONJ_TAC THENL + [EXPAND_TAC "b" THEN UNDISCH_TAC `t < 2 EXP 256 + p_256` THEN + REWRITE_TAC[bitval; p_256; GSYM REAL_OF_NUM_CLAUSES] THEN REAL_ARITH_TAC; + REWRITE_TAC[INTEGER_CLOSED]] THEN + CONJ_TAC THENL + [CONV_TAC(ONCE_DEPTH_CONV BIGNUM_EXPAND_CONV) THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN BOUNDER_TAC[]; + ALL_TAC] THEN + CONV_TAC(ONCE_DEPTH_CONV BIGNUM_EXPAND_CONV) THEN + EXPAND_TAC "t" THEN REWRITE_TAC[bignum_of_wordlist] THEN + ASM_REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN + ACCUMULATOR_POP_ASSUM_LIST (MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + BOOL_CASES_TAC `b:bool` THEN REWRITE_TAC[BITVAL_CLAUSES; p_256] THEN + CONV_TAC WORD_REDUCE_CONV THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Overall point operation proof. *) +(* ------------------------------------------------------------------------- *) + +let P256_MONTJMIXADD_CORRECT = time prove + (`!p3 p1 t1 p2 t2 pc stackpointer. + aligned 16 stackpointer /\ + ALLPAIRS nonoverlapping + [(p3,96); (stackpointer,192)] + [(word pc,0x1530); (p1,96); (p2,96)] /\ + nonoverlapping (p3,96) (stackpointer,192) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p256_montjmixadd_mc /\ + read PC s = word(pc + 0x4) /\ + read SP s = stackpointer /\ + C_ARGUMENTS [p3; p1; p2] s /\ + bignum_triple_from_memory (p1,4) s = t1 /\ + bignum_pair_from_memory (p2,4) s = t2) + (\s. read PC s = word (pc + 0x1528) /\ + (!x1 y1 z1 x2 y2 z2. + ~(z1 = &0) /\ z2 = &1 /\ + ~(jacobian_eq (integer_mod_ring p_256) + (x1,y1,z1) (x2,y2,z2)) /\ + ~(jacobian_eq (integer_mod_ring p_256) + (jacobian_neg nistp256 (x1,y1,z1)) + (x2,y2,z2)) /\ + t1 = tripled nistp256_encode (x1,y1,z1) /\ + t2 = paired nistp256_encode (x2,y2) + ==> bignum_triple_from_memory(p3,4) s = + tripled nistp256_encode + (jacobian_add nistp256 (x1,y1,z1) (x2,y2,z2)))) + (MAYCHANGE [PC; X0; X1; X2; X3; X4; X5; X6; X7; X8; X9; X10; + X11; X12; X13; X14; X15; X16; X17] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,96); + memory :> bytes(stackpointer,192)])`, + REWRITE_TAC[FORALL_PAIR_THM] THEN + MAP_EVERY X_GEN_TAC + [`p3:int64`; `p1:int64`; `x1:num`; `y1:num`; `z1:num`; `p2:int64`; + `x2:num`; `y2:num`; `pc:num`; `stackpointer:int64`] THEN + REWRITE_TAC[ALLPAIRS; ALL; NONOVERLAPPING_CLAUSES] THEN STRIP_TAC THEN + REWRITE_TAC[C_ARGUMENTS; SOME_FLAGS; PAIR_EQ; + bignum_pair_from_memory; bignum_triple_from_memory] THEN + CONV_TAC(ONCE_DEPTH_CONV NUM_MULT_CONV) THEN + CONV_TAC(ONCE_DEPTH_CONV NORMALIZE_RELATIVE_ADDRESS_CONV) THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + + LOCAL_AMONTSQR_P256_TAC 3 ["zp2";"z_1"] THEN + LOCAL_MONTMUL_P256_TAC 0 ["y2a";"z_1";"y_2"] THEN + LOCAL_MONTMUL_P256_TAC 0 ["x2a";"zp2";"x_2"] THEN + LOCAL_MONTMUL_P256_TAC 0 ["y2a";"zp2";"y2a"] THEN + LOCAL_SUB_P256_TAC 0 ["xd";"x2a";"x_1"] THEN + LOCAL_SUB_P256_TAC 0 ["yd";"y2a";"y_1"] THEN + LOCAL_AMONTSQR_P256_TAC 0 ["zz";"xd"] THEN + LOCAL_MONTSQR_P256_TAC 0 ["ww";"yd"] THEN + LOCAL_MONTMUL_P256_TAC 0 ["zzx1";"zz";"x_1"] THEN + LOCAL_MONTMUL_P256_TAC 0 ["zzx2";"zz";"x2a"] THEN + LOCAL_SUB_P256_TAC 0 ["x_3";"ww";"zzx1"] THEN + LOCAL_SUB_P256_TAC 0 ["t1";"zzx2";"zzx1"] THEN + LOCAL_MONTMUL_P256_TAC 0 ["z_3";"xd";"z_1"] THEN + LOCAL_SUB_P256_TAC 0 ["x_3";"x_3";"zzx2"] THEN + LOCAL_SUB_P256_TAC 0 ["t2";"zzx1";"x_3"] THEN + LOCAL_MONTMUL_P256_TAC 0 ["t1";"t1";"y_1"] THEN + LOCAL_MONTMUL_P256_TAC 0 ["t2";"yd";"t2"] THEN + LOCAL_SUB_P256_TAC 0 ["y_3";"t2";"t1"] THEN + + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + DISCARD_STATE_TAC "s21" THEN + DISCARD_MATCHING_ASSUMPTIONS [`nonoverlapping_modulo a b c`] THEN + + MAP_EVERY X_GEN_TAC + [`x1':int`; `y1':int`; `z1':int`; `x2':int`; `y2':int`; `z2':int`] THEN + DISCH_THEN(CONJUNCTS_THEN2 ASSUME_TAC MP_TAC) THEN + GEN_REWRITE_TAC I [IMP_CONJ] THEN DISCH_THEN SUBST_ALL_TAC THEN + REPLICATE_TAC 2 (DISCH_THEN(CONJUNCTS_THEN2 ASSUME_TAC MP_TAC)) THEN + REWRITE_TAC[tripled; paired; nistp256_encode; montgomery_encode; PAIR_EQ] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN + (STRIP_ASSUME_TAC o MATCH_MP unilemma2)) THEN + + REPEAT(FIRST_X_ASSUM(MP_TAC o check (is_imp o concl))) THEN + REPEAT(ANTS_TAC THENL + [REWRITE_TAC[p_256] THEN RULE_ASSUM_TAC(REWRITE_RULE[p_256]) THEN + CONV_TAC NUM_REDUCE_CONV THEN ASM BOUNDER_TAC[]; + (DISCH_THEN(STRIP_ASSUME_TAC o MATCH_MP unilemma0) ORELSE + DISCH_THEN(STRIP_ASSUME_TAC o MATCH_MP unilemma1))]) THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o GEN_REWRITE_RULE I [GSYM NOT_LE])) THEN + + RULE_ASSUM_TAC(REWRITE_RULE + [num_congruent; GSYM INT_OF_NUM_CLAUSES; GSYM INT_OF_NUM_REM]) THEN + RULE_ASSUM_TAC(REWRITE_RULE[GSYM INT_REM_EQ]) THEN + RULE_ASSUM_TAC(ONCE_REWRITE_RULE[GSYM INT_SUB_REM; GSYM INT_ADD_REM]) THEN + RULE_ASSUM_TAC(REWRITE_RULE[INT_POW_2]) THEN + RULE_ASSUM_TAC(GEN_REWRITE_RULE (RAND_CONV o TRY_CONV) [lemont]) THEN + + ASM_REWRITE_TAC[jacobian_add; nistp256] THEN + ASM_REWRITE_TAC[GSYM nistp256] THEN + REWRITE_TAC[INTEGER_MOD_RING_CLAUSES] THEN + CONV_TAC INT_REDUCE_CONV THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN + CONV_TAC INT_REM_DOWN_CONV THEN + REWRITE_TAC[tripled; paired; nistp256_encode; montgomery_encode] THEN + REWRITE_TAC[PAIR_EQ; GSYM INT_OF_NUM_EQ; nintlemma] THEN + CONV_TAC INT_REM_DOWN_CONV THEN + + ASM_REWRITE_TAC[pumont; INT_REM_REM; GSYM INT_ADD_LDISTRIB; + GSYM INT_ADD_LDISTRIB; GSYM INT_SUB_LDISTRIB; + INT_SUB_REM; INT_ADD_REM] THEN + + REPEAT CONJ_TAC THEN AP_THM_TAC THEN AP_TERM_TAC THEN AP_TERM_TAC THEN + INT_ARITH_TAC);; + +let P256_MONTJMIXADD_SUBROUTINE_CORRECT = time prove + (`!p3 p1 t1 p2 t2 pc stackpointer returnaddress. + aligned 16 stackpointer /\ + ALLPAIRS nonoverlapping + [(p3,96); (word_sub stackpointer (word 192),192)] + [(word pc,0x1530); (p1,96); (p2,96)] /\ + nonoverlapping (p3,96) (word_sub stackpointer (word 192),192) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p256_montjmixadd_mc /\ + read PC s = word pc /\ + read SP s = stackpointer /\ + read X30 s = returnaddress /\ + C_ARGUMENTS [p3; p1; p2] s /\ + bignum_triple_from_memory (p1,4) s = t1 /\ + bignum_pair_from_memory (p2,4) s = t2) + (\s. read PC s = returnaddress /\ + (!x1 y1 z1 x2 y2 z2. + ~(z1 = &0) /\ z2 = &1 /\ + ~(jacobian_eq (integer_mod_ring p_256) + (x1,y1,z1) (x2,y2,z2)) /\ + ~(jacobian_eq (integer_mod_ring p_256) + (jacobian_neg nistp256 (x1,y1,z1)) + (x2,y2,z2)) /\ + t1 = tripled nistp256_encode (x1,y1,z1) /\ + t2 = paired nistp256_encode (x2,y2) + ==> bignum_triple_from_memory(p3,4) s = + tripled nistp256_encode + (jacobian_add nistp256 (x1,y1,z1) (x2,y2,z2)))) + (MAYCHANGE [PC; X0; X1; X2; X3; X4; X5; X6; X7; X8; X9; X10; + X11; X12; X13; X14; X15; X16; X17] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,96); + memory :> bytes(word_sub stackpointer (word 192),192)])`, + ARM_ADD_RETURN_STACK_TAC P256_MONTJMIXADD_EXEC + P256_MONTJMIXADD_CORRECT `[]` 192);; diff --git a/benchmarks/benchmark.c b/benchmarks/benchmark.c index af16776e14..d2c675ef8f 100644 --- a/benchmarks/benchmark.c +++ b/benchmarks/benchmark.c @@ -645,6 +645,10 @@ void call_bignum_mux16__32() void call_curve25519_ladderstep(void) repeat(curve25519_ladderstep(b0,b1,b2,*b3)) void call_curve25519_ladderstep_alt(void) repeat(curve25519_ladderstep_alt(b0,b1,b2,*b3)) +void call_p256_montjadd(void) repeat(p256_montjadd(b1,b2,b3)) +void call_p256_montjdouble(void) repeat(p256_montjdouble(b1,b2)) +void call_p256_montjmixadd(void) repeat(p256_montjmixadd(b1,b2,b3)) + void call_secp256k1_jadd(void) repeat(secp256k1_jadd(b1,b2,b3)) void call_secp256k1_jdouble(void) repeat(secp256k1_jdouble(b1,b2)) void call_secp256k1_jmixadd(void) repeat(secp256k1_jmixadd(b1,b2,b3)) @@ -920,6 +924,9 @@ int main(void) timingtest(all,"bignum_triple_p521_alt",call_bignum_triple_p521_alt); timingtest(bmi,"curve25519_ladderstep",call_curve25519_ladderstep); timingtest(all,"curve25519_ladderstep_alt",call_curve25519_ladderstep_alt); + timingtest(bmi,"p256_montjadd",call_p256_montjadd); + timingtest(bmi,"p256_montjdouble",call_p256_montjdouble); + timingtest(bmi,"p256_montjmixadd",call_p256_montjmixadd); timingtest(bmi,"secp256k1_jadd",call_secp256k1_jadd); timingtest(bmi,"secp256k1_jdouble",call_secp256k1_jdouble); timingtest(bmi,"secp256k1_jmixadd",call_secp256k1_jmixadd); diff --git a/include/s2n-bignum-c89.h b/include/s2n-bignum-c89.h index 5887fce0cc..7c3ac77dc1 100644 --- a/include/s2n-bignum-c89.h +++ b/include/s2n-bignum-c89.h @@ -734,6 +734,18 @@ extern void bignum_triple_p521_alt (uint64_t z[9], uint64_t x[9]); extern void curve25519_ladderstep(uint64_t rr[16],uint64_t point[8],uint64_t pp[16],uint64_t b); extern void curve25519_ladderstep_alt(uint64_t rr[16],uint64_t point[8],uint64_t pp[16],uint64_t b); +/* Point addition on NIST curve P-256 in Montgomery-Jacobian coordinates */ +/* Inputs p1[12], p2[12]; output p3[12] */ +extern void p256_montjadd(uint64_t p3[12],uint64_t p1[12],uint64_t p2[12]); + +/* Point doubling on NIST curve P-256 in Montgomery-Jacobian coordinates */ +/* Inputs p1[12]; output p3[12] */ +extern void p256_montjdouble(uint64_t p3[12],uint64_t p1[12]); + +/* Point mixed addition on NIST curve P-256 in Montgomery-Jacobian coordinates */ +/* Inputs p1[12], p2[8]; output p3[12] */ +extern void p256_montjmixadd(uint64_t p3[12],uint64_t p1[12],uint64_t p2[8]); + /* Point addition on SECG curve secp256k1 in Jacobian coordinates */ /* Inputs p1[12], p2[12]; output p3[12] */ extern void secp256k1_jadd(uint64_t p3[12],uint64_t p1[12],uint64_t p2[12]); diff --git a/include/s2n-bignum.h b/include/s2n-bignum.h index b9345acd4d..6670120a1d 100644 --- a/include/s2n-bignum.h +++ b/include/s2n-bignum.h @@ -733,6 +733,18 @@ extern void bignum_triple_p521_alt (uint64_t z[static 9], uint64_t x[static 9]); extern void curve25519_ladderstep(uint64_t rr[16],uint64_t point[8],uint64_t pp[16],uint64_t b); extern void curve25519_ladderstep_alt(uint64_t rr[16],uint64_t point[8],uint64_t pp[16],uint64_t b); +// Point addition on NIST curve P-256 in Montgomery-Jacobian coordinates +// Inputs p1[12], p2[12]; output p3[12] +extern void p256_montjadd(uint64_t p3[static 12],uint64_t p1[static 12],uint64_t p2[static 12]); + +// Point doubling on NIST curve P-256 in Montgomery-Jacobian coordinates +// Inputs p1[12]; output p3[12] +extern void p256_montjdouble(uint64_t p3[static 12],uint64_t p1[static 12]); + +// Point mixed addition on NIST curve P-256 in Montgomery-Jacobian coordinates +// Inputs p1[12], p2[8]; output p3[12] +extern void p256_montjmixadd(uint64_t p3[static 12],uint64_t p1[static 12],uint64_t p2[static 8]); + // Point addition on SECG curve secp256k1 in Jacobian coordinates // Inputs p1[12], p2[12]; output p3[12] extern void secp256k1_jadd(uint64_t p3[static 12],uint64_t p1[static 12],uint64_t p2[static 12]); diff --git a/tests/test.c b/tests/test.c index f1e56a8df8..77709ad7f1 100644 --- a/tests/test.c +++ b/tests/test.c @@ -271,6 +271,9 @@ enum { TEST_BIGNUM_TRIPLE_P521_ALT, TEST_CURVE25519_LADDERSTEP, TEST_CURVE25519_LADDERSTEP_ALT, + TEST_P256_MONTJADD, + TEST_P256_MONTJDOUBLE, + TEST_P256_MONTJMIXADD, TEST_SECP256K1_JADD, TEST_SECP256K1_JDOUBLE, TEST_SECP256K1_JMIXADD, @@ -353,6 +356,12 @@ uint64_t i_256[4] = UINT64_C(0xffffffff00000002) }; +uint64_t a_256[4] = + { UINT64_C(0xfffffffffffffffc), + UINT64_C(0x00000003ffffffff), + UINT64_C(0x0000000000000000), + UINT64_C(0xfffffffc00000004) + }; uint64_t p_256k1[4] = { UINT64_C(0xfffffffefffffc2f), @@ -7570,6 +7579,109 @@ int test_curve25519_ladderstep_alt(void) return 0; } +int test_p256_montjadd(void) +{ uint64_t t, k; + printf("Testing p256_montjadd with %d cases\n",tests); + k = 4; + + int c; + for (t = 0; t < tests; ++t) + { random_bignum(k,b0); reference_mod(k,b1,b0,p_256); + random_bignum(k,b0); reference_mod(k,b1+k,b0,p_256); + random_bignum(k,b0); reference_mod(k,b1+2*k,b0,p_256); + random_bignum(k,b0); reference_mod(k,b2,b0,p_256); + random_bignum(k,b0); reference_mod(k,b2+k,b0,p_256); + random_bignum(k,b0); reference_mod(k,b2+2*k,b0,p_256); + + p256_montjadd(b3,b1,b2); + reference_montjadd(k,b4,b1,b2,p_256); + + c = reference_compare(3*k,b3,3*k,b4); + if (c != 0) + { printf("### Disparity: [size %4"PRIu64"] " + "<...0x%016"PRIx64"> + <...0x%016"PRIx64"> = " + "<...0x%016"PRIx64"> not <...0x%016"PRIx64">\n", + k,b1[0],b2[0],b3[0],b4[0]); + return 1; + } + else if (VERBOSE) + { printf("OK: [size %4"PRIu64"] " + "<...0x%016"PRIx64"> + <...0x%016"PRIx64"> = " + "<...0x%016"PRIx64">\n", + k,b1[0],b2[0],b3[0]); + } + } + printf("All OK\n"); + return 0; +} + +int test_p256_montjdouble(void) +{ uint64_t t, k; + printf("Testing p256_montjdouble with %d cases\n",tests); + k = 4; + + int c; + for (t = 0; t < tests; ++t) + { random_bignum(k,b0); reference_mod(k,b1,b0,p_256); + random_bignum(k,b0); reference_mod(k,b1+k,b0,p_256); + random_bignum(k,b0); reference_mod(k,b1+2*k,b0,p_256); + + reference_montjdouble(k,b4,b1,a_256,p_256); + p256_montjdouble(b3,b1); + + c = reference_compare(3*k,b3,3*k,b4); + if (c != 0) + { printf("### Disparity: [size %4"PRIu64"] " + "2 * <...0x%016"PRIx64"> = " + "<...0x%016"PRIx64"> not <...0x%016"PRIx64">\n", + k,b1[0],b3[0],b4[0]); + return 1; + } + else if (VERBOSE) + { printf("OK: [size %4"PRIu64"] " + "2 * <...0x%016"PRIx64"> = " + "<...0x%016"PRIx64">\n", + k,b1[0],b3[0]); + } + } + printf("All OK\n"); + return 0; +} + +int test_p256_montjmixadd(void) +{ uint64_t t, k; + printf("Testing p256_montjmixadd with %d cases\n",tests); + k = 4; + + int c; + for (t = 0; t < tests; ++t) + { random_bignum(k,b0); reference_mod(k,b1,b0,p_256); + random_bignum(k,b0); reference_mod(k,b1+k,b0,p_256); + random_bignum(k,b0); reference_mod(k,b1+2*k,b0,p_256); + random_bignum(k,b0); reference_mod(k,b2,b0,p_256); + random_bignum(k,b0); reference_mod(k,b2+k,b0,p_256); + p256_montjmixadd(b3,b1,b2); + reference_montjmixadd(k,b4,b1,b2,p_256); + + c = reference_compare(3*k,b3,3*k,b4); + if (c != 0) + { printf("### Disparity: [size %4"PRIu64"] " + "<...0x%016"PRIx64"> + <...0x%016"PRIx64"> = " + "<...0x%016"PRIx64"> not <...0x%016"PRIx64">\n", + k,b1[0],b2[0],b3[0],b4[0]); + return 1; + } + else if (VERBOSE) + { printf("OK: [size %4"PRIu64"] " + "<...0x%016"PRIx64"> + <...0x%016"PRIx64"> = " + "<...0x%016"PRIx64">\n", + k,b1[0],b2[0],b3[0]); + } + } + printf("All OK\n"); + return 0; +} + int test_secp256k1_jadd(void) { uint64_t t, k; printf("Testing secp256k1_jadd with %d cases\n",tests); @@ -8059,6 +8171,9 @@ int test_all(void) dotest(test_bignum_triple_p521_alt); dotest(test_curve25519_ladderstep); dotest(test_curve25519_ladderstep_alt); + dotest(test_p256_montjadd); + dotest(test_p256_montjdouble); + dotest(test_p256_montjmixadd); dotest(test_secp256k1_jadd); dotest(test_secp256k1_jdouble); dotest(test_secp256k1_jmixadd); @@ -8543,6 +8658,9 @@ int main(int argc, char *argv[]) case TEST_BIGNUM_TRIPLE_P521_ALT: return test_bignum_triple_p521_alt(); case TEST_CURVE25519_LADDERSTEP: return test_curve25519_ladderstep(); case TEST_CURVE25519_LADDERSTEP_ALT: return test_curve25519_ladderstep_alt(); + case TEST_P256_MONTJADD: return test_p256_montjadd(); + case TEST_P256_MONTJDOUBLE: return test_p256_montjdouble(); + case TEST_P256_MONTJMIXADD: return test_p256_montjmixadd(); case TEST_SECP256K1_JADD: return test_secp256k1_jadd(); case TEST_SECP256K1_JDOUBLE: return test_secp256k1_jdouble(); case TEST_SECP256K1_JMIXADD: return test_secp256k1_jmixadd(); diff --git a/x86/Makefile b/x86/Makefile index 274311a532..dec360673a 100644 --- a/x86/Makefile +++ b/x86/Makefile @@ -208,6 +208,9 @@ OBJ = curve25519/bignum_add_p25519.o \ p256/bignum_tomont_p256_alt.o \ p256/bignum_triple_p256.o \ p256/bignum_triple_p256_alt.o \ + p256/p256_montjadd.o \ + p256/p256_montjdouble.o \ + p256/p256_montjmixadd.o \ p384/bignum_add_p384.o \ p384/bignum_bigendian_6.o \ p384/bignum_cmul_p384.o \ diff --git a/x86/p256/Makefile b/x86/p256/Makefile index bb6b64b0c4..4e178dd135 100644 --- a/x86/p256/Makefile +++ b/x86/p256/Makefile @@ -44,7 +44,10 @@ OBJ = bignum_add_p256.o \ bignum_tomont_p256.o \ bignum_tomont_p256_alt.o \ bignum_triple_p256.o \ - bignum_triple_p256_alt.o + bignum_triple_p256_alt.o \ + p256_montjadd.o \ + p256_montjdouble.o \ + p256_montjmixadd.o %.o : %.S ; $(CC) -E -I../../include $< | as -o $@ - diff --git a/x86/p256/p256_montjadd.S b/x86/p256/p256_montjadd.S new file mode 100644 index 0000000000..81bce3ffa3 --- /dev/null +++ b/x86/p256/p256_montjadd.S @@ -0,0 +1,526 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +// ---------------------------------------------------------------------------- +// Point mixed addition on NIST curve P-256 in Montgomery-Jacobian coordinates +// +// extern void p256_montjadd +// (uint64_t p3[static 12],uint64_t p1[static 12],uint64_t p2[static 12]); +// +// Does p3 := p1 + p2 where all points are regarded as Jacobian triples with +// each coordinate in the Montgomery domain, i.e. x' = (2^256 * x) mod p_256. +// A Jacobian triple (x',y',z') represents affine point (x/z^2,y/z^3). +// +// Standard x86-64 ABI: RDI = p3, RSI = p1, RDX = p2 +// Microsoft x64 ABI: RCX = p3, RDX = p1, R8 = p2 +// ---------------------------------------------------------------------------- +#include "_internal_s2n_bignum.h" + + .intel_syntax noprefix + S2N_BN_SYM_VISIBILITY_DIRECTIVE(p256_montjadd) + S2N_BN_SYM_PRIVACY_DIRECTIVE(p256_montjadd) + .text + +// Size of individual field elements + +#define NUMSIZE 32 + +// Pointer-offset pairs for inputs and outputs +// These assume rdi = p3, rsi = p1 and rbp = p2, +// which needs to be set up explicitly before use +// As it happens none of the code macros modify +// either rdi or rsi so we just need to take care +// over rbp. That is set up early and lasts for the +// places where it's needed but not the full code; +// it gets destroyed by montsqr_p256 calls. That's +// when we restore it from input_y near the end. + +#define x_1 rsi+0 +#define y_1 rsi+NUMSIZE +#define z_1 rsi+(2*NUMSIZE) + +#define x_2 rbp+0 +#define y_2 rbp+NUMSIZE +#define z_2 rbp+(2*NUMSIZE) + +#define x_3 rdi+0 +#define y_3 rdi+NUMSIZE +#define z_3 rdi+(2*NUMSIZE) + +// Pointer-offset pairs for temporaries, with some aliasing +// NSPACE is the total stack needed for these temporaries + +#define z1sq rsp+(NUMSIZE*0) +#define ww rsp+(NUMSIZE*0) + +#define yd rsp+(NUMSIZE*1) +#define y2a rsp+(NUMSIZE*1) + +#define x2a rsp+(NUMSIZE*2) +#define zzx2 rsp+(NUMSIZE*2) + +#define zz rsp+(NUMSIZE*3) +#define t1 rsp+(NUMSIZE*3) + +#define t2 rsp+(NUMSIZE*4) +#define x1a rsp+(NUMSIZE*4) +#define zzx1 rsp+(NUMSIZE*4) + +#define xd rsp+(NUMSIZE*5) +#define z2sq rsp+(NUMSIZE*5) + +#define y1a rsp+(NUMSIZE*6) + +// Temporary for input pointer y + +#define input_y [rsp+(NUMSIZE*7)] + +#define NSPACE (NUMSIZE*7+8) + +// Corresponds exactly to bignum_montmul_p256 + +#define montmul_p256(P0,P1,P2) \ + xor r13d,r13d; \ + mov rdx,[P2]; \ + mulx r9,r8,[P1]; \ + mulx r10,rbx,[P1+0x8]; \ + adc r9,rbx; \ + mulx r11,rbx,[P1+0x10]; \ + adc r10,rbx; \ + mulx r12,rbx,[P1+0x18]; \ + adc r11,rbx; \ + adc r12,r13; \ + mov rdx,[P2+0x8]; \ + xor r14d,r14d; \ + mulx rbx,rax,[P1]; \ + adcx r9,rax; \ + adox r10,rbx; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r12,rax; \ + adox r13,rbx; \ + adc r13,r14; \ + xor r15d,r15d; \ + movabs rdx,0x100000000; \ + mulx rbx,rax,r8; \ + adcx r9,rax; \ + adox r10,rbx; \ + mulx rbx,rax,r9; \ + adcx r10,rax; \ + adox r11,rbx; \ + not rdx; \ + lea rdx,[rdx+0x2]; \ + mulx rbx,rax,r8; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,r9; \ + adcx r12,rax; \ + adox r13,rbx; \ + adcx r13,r15; \ + adox r14,r15; \ + adc r14,r15; \ + mov rdx,[P2+0x10]; \ + xor r8d,r8d; \ + mulx rbx,rax,[P1]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r12,rax; \ + adox r13,rbx; \ + adox r14,r8; \ + mulx rbx,rax,[P1+0x18]; \ + adc r13,rax; \ + adc r14,rbx; \ + adc r15,r8; \ + mov rdx,[P2+0x18]; \ + xor r9d,r9d; \ + mulx rbx,rax,[P1]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r13,rax; \ + adox r14,rbx; \ + adox r15,r9; \ + mulx rbx,rax,[P1+0x18]; \ + adc r14,rax; \ + adc r15,rbx; \ + adc r8,r9; \ + xor r9d,r9d; \ + movabs rdx,0x100000000; \ + mulx rbx,rax,r10; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,r11; \ + adcx r12,rax; \ + adox r13,rbx; \ + not rdx; \ + lea rdx,[rdx+0x2]; \ + mulx rbx,rax,r10; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,r11; \ + adcx r14,rax; \ + adox r15,rbx; \ + adcx r15,r9; \ + adox r8,r9; \ + adc r8,r9; \ + mov ecx,0x1; \ + add rcx,r12; \ + dec rdx; \ + adc rdx,r13; \ + dec r9; \ + mov rax,r9; \ + adc r9,r14; \ + mov r11d,0xfffffffe; \ + adc r11,r15; \ + adc rax,r8; \ + cmovb r12,rcx; \ + cmovb r13,rdx; \ + cmovb r14,r9; \ + cmovb r15,r11; \ + mov [P0],r12; \ + mov [P0+0x8],r13; \ + mov [P0+0x10],r14; \ + mov [P0+0x18],r15 + +// Corresponds exactly to bignum_montsqr_p256 + +#define montsqr_p256(P0,P1) \ + mov rdx,[P1]; \ + mulx r15,r8,rdx; \ + mulx r10,r9,[P1+0x8]; \ + mulx r12,r11,[P1+0x18]; \ + mov rdx,[P1+0x10]; \ + mulx r14,r13,[P1+0x18]; \ + xor ebp,ebp; \ + mulx rbx,rax,[P1]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mov rdx,[P1+0x18]; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r12,rax; \ + adox r13,rbx; \ + adcx r13,rbp; \ + adox r14,rbp; \ + adc r14,rbp; \ + xor ebp,ebp; \ + adcx r9,r9; \ + adox r9,r15; \ + mov rdx,[P1+0x8]; \ + mulx rdx,rax,rdx; \ + adcx r10,r10; \ + adox r10,rax; \ + adcx r11,r11; \ + adox r11,rdx; \ + mov rdx,[P1+0x10]; \ + mulx rdx,rax,rdx; \ + adcx r12,r12; \ + adox r12,rax; \ + adcx r13,r13; \ + adox r13,rdx; \ + mov rdx,[P1+0x18]; \ + mulx r15,rax,rdx; \ + adcx r14,r14; \ + adox r14,rax; \ + adcx r15,rbp; \ + adox r15,rbp; \ + xor ebp,ebp; \ + movabs rdx,0x100000000; \ + mulx rbx,rax,r8; \ + adcx r9,rax; \ + adox r10,rbx; \ + mulx rbx,rax,r9; \ + adcx r10,rax; \ + adox r11,rbx; \ + movabs rdx,0xffffffff00000001; \ + mulx rbx,rax,r8; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,r9; \ + adcx r12,rax; \ + adox r13,rbx; \ + adcx r13,rbp; \ + mov r9d,ebp; \ + adox r9,rbp; \ + adcx r9,rbp; \ + add r14,r9; \ + adc r15,rbp; \ + mov r8d,ebp; \ + adc r8,rbp; \ + xor ebp,ebp; \ + movabs rdx,0x100000000; \ + mulx rbx,rax,r10; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,r11; \ + adcx r12,rax; \ + adox r13,rbx; \ + movabs rdx,0xffffffff00000001; \ + mulx rbx,rax,r10; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,r11; \ + adcx r14,rax; \ + adox r15,rbx; \ + adcx r15,rbp; \ + adox r8,rbp; \ + adc r8,rbp; \ + mov ecx,0x1; \ + add rcx,r12; \ + lea rdx,[rdx-0x1]; \ + adc rdx,r13; \ + lea rbp,[rbp-0x1]; \ + mov rax,rbp; \ + adc rbp,r14; \ + mov r11d,0xfffffffe; \ + adc r11,r15; \ + adc rax,r8; \ + cmovb r12,rcx; \ + cmovb r13,rdx; \ + cmovb r14,rbp; \ + cmovb r15,r11; \ + mov [P0],r12; \ + mov [P0+0x8],r13; \ + mov [P0+0x10],r14; \ + mov [P0+0x18],r15 + +// Almost-Montgomery variant which we use when an input to other muls +// with the other argument fully reduced (which is always safe). +// It's also tweaked to avoid modifying rbp so that we can use that +// for the y input while it is needed. + +#define amontsqr_p256(P0,P1) \ + mov rdx,[P1]; \ + mulx r15,r8,rdx; \ + mulx r10,r9,[P1+0x8]; \ + mulx r12,r11,[P1+0x18]; \ + mov rdx,[P1+0x10]; \ + mulx r14,r13,[P1+0x18]; \ + xor ecx,ecx; \ + mulx rbx,rax,[P1]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mov rdx,[P1+0x18]; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r12,rax; \ + adox r13,rbx; \ + adcx r13,rcx; \ + adox r14,rcx; \ + adc r14,rcx; \ + xor ecx,ecx; \ + adcx r9,r9; \ + adox r9,r15; \ + mov rdx,[P1+0x8]; \ + mulx rdx,rax,rdx; \ + adcx r10,r10; \ + adox r10,rax; \ + adcx r11,r11; \ + adox r11,rdx; \ + mov rdx,[P1+0x10]; \ + mulx rdx,rax,rdx; \ + adcx r12,r12; \ + adox r12,rax; \ + adcx r13,r13; \ + adox r13,rdx; \ + mov rdx,[P1+0x18]; \ + mulx r15,rax,rdx; \ + adcx r14,r14; \ + adox r14,rax; \ + adcx r15,rcx; \ + adox r15,rcx; \ + xor ecx,ecx; \ + movabs rdx,0x100000000; \ + mulx rbx,rax,r8; \ + adcx r9,rax; \ + adox r10,rbx; \ + mulx rbx,rax,r9; \ + adcx r10,rax; \ + adox r11,rbx; \ + movabs rdx,0xffffffff00000001; \ + mulx rbx,rax,r8; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,r9; \ + adcx r12,rax; \ + adox r13,rbx; \ + adcx r13,rcx; \ + mov r9d,ecx; \ + adox r9,rcx; \ + adcx r9,rcx; \ + add r14,r9; \ + adc r15,rcx; \ + mov r8d,ecx; \ + adc r8,rcx; \ + xor ecx,ecx; \ + movabs rdx,0x100000000; \ + mulx rbx,rax,r10; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,r11; \ + adcx r12,rax; \ + adox r13,rbx; \ + movabs rdx,0xffffffff00000001; \ + mulx rbx,rax,r10; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,r11; \ + adcx r14,rax; \ + adox r15,rbx; \ + adcx r15,rcx; \ + adox r8,rcx; \ + adc r8,rcx; \ + mov r8d,0x1; \ + lea rdx,[rdx-0x1]; \ + lea rax,[rcx-0x1]; \ + mov r11d,0xfffffffe; \ + cmovz r8,rcx; \ + cmovz rdx,rcx; \ + cmovz rax,rcx; \ + cmovz r11,rcx; \ + add r12,r8; \ + adc r13,rdx; \ + adc r14,rax; \ + adc r15,r11; \ + mov [P0],r12; \ + mov [P0+0x8],r13; \ + mov [P0+0x10],r14; \ + mov [P0+0x18],r15 + +// Corresponds exactly to bignum_sub_p256 + +#define sub_p256(P0,P1,P2) \ + mov rax,[P1]; \ + sub rax,[P2]; \ + mov rcx,[P1+0x8]; \ + sbb rcx,[P2+0x8]; \ + mov r8,[P1+0x10]; \ + sbb r8,[P2+0x10]; \ + mov r9,[P1+0x18]; \ + sbb r9,[P2+0x18]; \ + mov r10d,0xffffffff; \ + sbb r11,r11; \ + xor rdx,rdx; \ + and r10,r11; \ + sub rdx,r10; \ + add rax,r11; \ + mov [P0],rax; \ + adc rcx,r10; \ + mov [P0+0x8],rcx; \ + adc r8,0x0; \ + mov [P0+0x10],r8; \ + adc r9,rdx; \ + mov [P0+0x18],r9 + +S2N_BN_SYMBOL(p256_montjadd): + +#if WINDOWS_ABI + push rdi + push rsi + mov rdi, rcx + mov rsi, rdx + mov rdx, r8 +#endif + +// Save registers and make room on stack for temporary variables +// Put the input y in rbp where it lasts as long as it's needed. + + push rbx + push rbp + push r12 + push r13 + push r14 + push r15 + + sub rsp, NSPACE + + mov rbp, rdx + mov input_y, rdx + +// Main code, just a sequence of basic field operations +// 12 * multiply + 4 * square + 7 * subtract + + amontsqr_p256(z1sq,z_1) + amontsqr_p256(z2sq,z_2) + + montmul_p256(y1a,z_2,y_1) + montmul_p256(y2a,z_1,y_2) + + montmul_p256(x2a,z1sq,x_2) + montmul_p256(x1a,z2sq,x_1) + montmul_p256(y2a,z1sq,y2a) + montmul_p256(y1a,z2sq,y1a) + + sub_p256(xd,x2a,x1a) + sub_p256(yd,y2a,y1a) + + amontsqr_p256(zz,xd) + montsqr_p256(ww,yd) + + montmul_p256(zzx1,zz,x1a) + montmul_p256(zzx2,zz,x2a) + + sub_p256(x_3,ww,zzx1) + sub_p256(t1,zzx2,zzx1) + + montmul_p256(xd,xd,z_1) + + sub_p256(x_3,x_3,zzx2) + + sub_p256(t2,zzx1,x_3) + + montmul_p256(t1,t1,y1a) + + mov rbp, input_y + montmul_p256(z_3,xd,z_2) + montmul_p256(t2,yd,t2) + + sub_p256(y_3,t2,t1) + +// Restore stack and registers + + add rsp, NSPACE + pop r15 + pop r14 + pop r13 + pop r12 + pop rbp + pop rbx + +#if WINDOWS_ABI + pop rsi + pop rdi +#endif + ret + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack, "", %progbits +#endif diff --git a/x86/p256/p256_montjdouble.S b/x86/p256/p256_montjdouble.S new file mode 100644 index 0000000000..ea9d8899ba --- /dev/null +++ b/x86/p256/p256_montjdouble.S @@ -0,0 +1,641 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +// ---------------------------------------------------------------------------- +// Point doubling on NIST curve P-256 in Montgomery-Jacobian coordinates +// +// extern void p256_montjdouble +// (uint64_t p3[static 12],uint64_t p1[static 12]); +// +// Does p3 := 2 * p1 where all points are regarded as Jacobian triples with +// each coordinate in the Montgomery domain, i.e. x' = (2^256 * x) mod p_256. +// A Jacobian triple (x',y',z') represents affine point (x/z^2,y/z^3). +// +// Standard x86-64 ABI: RDI = p3, RSI = p1 +// Microsoft x64 ABI: RCX = p3, RDX = p1 +// ---------------------------------------------------------------------------- +#include "_internal_s2n_bignum.h" + + .intel_syntax noprefix + S2N_BN_SYM_VISIBILITY_DIRECTIVE(p256_montjdouble) + S2N_BN_SYM_PRIVACY_DIRECTIVE(p256_montjdouble) + .text + .balign 4 + +// Size of individual field elements + +#define NUMSIZE 32 + +// Pointer-offset pairs for inputs and outputs +// These assume rdi = p3, rsi = p1, which is true when the +// arguments come in initially and is not disturbed throughout. + +#define x_1 rsi+0 +#define y_1 rsi+NUMSIZE +#define z_1 rsi+(2*NUMSIZE) + +#define x_3 rdi+0 +#define y_3 rdi+NUMSIZE +#define z_3 rdi+(2*NUMSIZE) + +// Pointer-offset pairs for temporaries, with some aliasing +// NSPACE is the total stack needed for these temporaries + +#define z2 rsp+(NUMSIZE*0) +#define y2 rsp+(NUMSIZE*1) +#define x2p rsp+(NUMSIZE*2) +#define xy2 rsp+(NUMSIZE*3) + +#define y4 rsp+(NUMSIZE*4) +#define t2 rsp+(NUMSIZE*4) + +#define dx2 rsp+(NUMSIZE*5) +#define t1 rsp+(NUMSIZE*5) + +#define d rsp+(NUMSIZE*6) +#define x4p rsp+(NUMSIZE*6) + +#define NSPACE (NUMSIZE*7) + +// Corresponds exactly to bignum_montmul_p256 + +#define montmul_p256(P0,P1,P2) \ + xor r13d,r13d; \ + mov rdx,[P2]; \ + mulx r9,r8,[P1]; \ + mulx r10,rbx,[P1+0x8]; \ + adc r9,rbx; \ + mulx r11,rbx,[P1+0x10]; \ + adc r10,rbx; \ + mulx r12,rbx,[P1+0x18]; \ + adc r11,rbx; \ + adc r12,r13; \ + mov rdx,[P2+0x8]; \ + xor r14d,r14d; \ + mulx rbx,rax,[P1]; \ + adcx r9,rax; \ + adox r10,rbx; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r12,rax; \ + adox r13,rbx; \ + adc r13,r14; \ + xor r15d,r15d; \ + movabs rdx,0x100000000; \ + mulx rbx,rax,r8; \ + adcx r9,rax; \ + adox r10,rbx; \ + mulx rbx,rax,r9; \ + adcx r10,rax; \ + adox r11,rbx; \ + not rdx; \ + lea rdx,[rdx+0x2]; \ + mulx rbx,rax,r8; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,r9; \ + adcx r12,rax; \ + adox r13,rbx; \ + adcx r13,r15; \ + adox r14,r15; \ + adc r14,r15; \ + mov rdx,[P2+0x10]; \ + xor r8d,r8d; \ + mulx rbx,rax,[P1]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r12,rax; \ + adox r13,rbx; \ + adox r14,r8; \ + mulx rbx,rax,[P1+0x18]; \ + adc r13,rax; \ + adc r14,rbx; \ + adc r15,r8; \ + mov rdx,[P2+0x18]; \ + xor r9d,r9d; \ + mulx rbx,rax,[P1]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r13,rax; \ + adox r14,rbx; \ + adox r15,r9; \ + mulx rbx,rax,[P1+0x18]; \ + adc r14,rax; \ + adc r15,rbx; \ + adc r8,r9; \ + xor r9d,r9d; \ + movabs rdx,0x100000000; \ + mulx rbx,rax,r10; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,r11; \ + adcx r12,rax; \ + adox r13,rbx; \ + not rdx; \ + lea rdx,[rdx+0x2]; \ + mulx rbx,rax,r10; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,r11; \ + adcx r14,rax; \ + adox r15,rbx; \ + adcx r15,r9; \ + adox r8,r9; \ + adc r8,r9; \ + mov ecx,0x1; \ + add rcx,r12; \ + dec rdx; \ + adc rdx,r13; \ + dec r9; \ + mov rax,r9; \ + adc r9,r14; \ + mov r11d,0xfffffffe; \ + adc r11,r15; \ + adc rax,r8; \ + cmovb r12,rcx; \ + cmovb r13,rdx; \ + cmovb r14,r9; \ + cmovb r15,r11; \ + mov [P0],r12; \ + mov [P0+0x8],r13; \ + mov [P0+0x10],r14; \ + mov [P0+0x18],r15 + +// Corresponds exactly to bignum_montsqr_p256 + +#define montsqr_p256(P0,P1) \ + mov rdx,[P1]; \ + mulx r15,r8,rdx; \ + mulx r10,r9,[P1+0x8]; \ + mulx r12,r11,[P1+0x18]; \ + mov rdx,[P1+0x10]; \ + mulx r14,r13,[P1+0x18]; \ + xor ebp,ebp; \ + mulx rbx,rax,[P1]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mov rdx,[P1+0x18]; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r12,rax; \ + adox r13,rbx; \ + adcx r13,rbp; \ + adox r14,rbp; \ + adc r14,rbp; \ + xor ebp,ebp; \ + adcx r9,r9; \ + adox r9,r15; \ + mov rdx,[P1+0x8]; \ + mulx rdx,rax,rdx; \ + adcx r10,r10; \ + adox r10,rax; \ + adcx r11,r11; \ + adox r11,rdx; \ + mov rdx,[P1+0x10]; \ + mulx rdx,rax,rdx; \ + adcx r12,r12; \ + adox r12,rax; \ + adcx r13,r13; \ + adox r13,rdx; \ + mov rdx,[P1+0x18]; \ + mulx r15,rax,rdx; \ + adcx r14,r14; \ + adox r14,rax; \ + adcx r15,rbp; \ + adox r15,rbp; \ + xor ebp,ebp; \ + movabs rdx,0x100000000; \ + mulx rbx,rax,r8; \ + adcx r9,rax; \ + adox r10,rbx; \ + mulx rbx,rax,r9; \ + adcx r10,rax; \ + adox r11,rbx; \ + movabs rdx,0xffffffff00000001; \ + mulx rbx,rax,r8; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,r9; \ + adcx r12,rax; \ + adox r13,rbx; \ + adcx r13,rbp; \ + mov r9d,ebp; \ + adox r9,rbp; \ + adcx r9,rbp; \ + add r14,r9; \ + adc r15,rbp; \ + mov r8d,ebp; \ + adc r8,rbp; \ + xor ebp,ebp; \ + movabs rdx,0x100000000; \ + mulx rbx,rax,r10; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,r11; \ + adcx r12,rax; \ + adox r13,rbx; \ + movabs rdx,0xffffffff00000001; \ + mulx rbx,rax,r10; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,r11; \ + adcx r14,rax; \ + adox r15,rbx; \ + adcx r15,rbp; \ + adox r8,rbp; \ + adc r8,rbp; \ + mov ecx,0x1; \ + add rcx,r12; \ + lea rdx,[rdx-0x1]; \ + adc rdx,r13; \ + lea rbp,[rbp-0x1]; \ + mov rax,rbp; \ + adc rbp,r14; \ + mov r11d,0xfffffffe; \ + adc r11,r15; \ + adc rax,r8; \ + cmovb r12,rcx; \ + cmovb r13,rdx; \ + cmovb r14,rbp; \ + cmovb r15,r11; \ + mov [P0],r12; \ + mov [P0+0x8],r13; \ + mov [P0+0x10],r14; \ + mov [P0+0x18],r15 + +// Corresponds exactly to bignum_sub_p256 + +#define sub_p256(P0,P1,P2) \ + mov rax,[P1]; \ + sub rax,[P2]; \ + mov rcx,[P1+0x8]; \ + sbb rcx,[P2+0x8]; \ + mov r8,[P1+0x10]; \ + sbb r8,[P2+0x10]; \ + mov r9,[P1+0x18]; \ + sbb r9,[P2+0x18]; \ + mov r10d,0xffffffff; \ + sbb r11,r11; \ + xor rdx,rdx; \ + and r10,r11; \ + sub rdx,r10; \ + add rax,r11; \ + mov [P0],rax; \ + adc rcx,r10; \ + mov [P0+0x8],rcx; \ + adc r8,0x0; \ + mov [P0+0x10],r8; \ + adc r9,rdx; \ + mov [P0+0x18],r9 + +// Corresponds exactly to bignum_add_p256 + +#define add_p256(P0,P1,P2) \ + xor r11,r11; \ + mov rax,[P1]; \ + add rax,[P2]; \ + mov rcx,[P1+0x8]; \ + adc rcx,[P2+0x8]; \ + mov r8,[P1+0x10]; \ + adc r8,[P2+0x10]; \ + mov r9,[P1+0x18]; \ + adc r9,[P2+0x18]; \ + adc r11,r11; \ + sub rax,0xffffffffffffffff; \ + mov r10d,0xffffffff; \ + sbb rcx,r10; \ + sbb r8,0x0; \ + mov rdx,0xffffffff00000001; \ + sbb r9,rdx; \ + sbb r11,0x0; \ + and r10,r11; \ + and rdx,r11; \ + add rax,r11; \ + mov [P0],rax; \ + adc rcx,r10; \ + mov [P0+0x8],rcx; \ + adc r8,0x0; \ + mov [P0+0x10],r8; \ + adc r9,rdx; \ + mov [P0+0x18],r9 + +// A weak version of add that only guarantees sum in 4 digits + +#define weakadd_p256(P0,P1,P2) \ + mov rax,[P1]; \ + add rax,[P2]; \ + mov rcx,[P1+0x8]; \ + adc rcx,[P2+0x8]; \ + mov r8,[P1+0x10]; \ + adc r8,[P2+0x10]; \ + mov r9,[P1+0x18]; \ + adc r9,[P2+0x18]; \ + mov r10d,0xffffffff; \ + sbb r11,r11; \ + xor rdx,rdx; \ + and r10,r11; \ + sub rdx,r10; \ + sub rax,r11; \ + mov [P0],rax; \ + sbb rcx,r10; \ + mov [P0+0x8],rcx; \ + sbb r8,0x0; \ + mov [P0+0x10],r8; \ + sbb r9,rdx; \ + mov [P0+0x18],r9 + +// P0 = C * P1 - D * P2 computed as d * (p_256 - P2) + c * P1 +// Quotient estimation is done just as q = h + 1 as in bignum_triple_p256 +// This also applies to the other functions following. + +#define cmsub_p256(P0,C,P1,D,P2) \ + /* First [r11;r10;r9;r8] = p_256 - P2 */ \ + mov r8,0xffffffffffffffff; \ + xor r10d,r10d; \ + sub r8,[P2]; \ + mov r9,0x00000000ffffffff; \ + sbb r9,[P2+0x8]; \ + sbb r10,[P2+0x10]; \ + mov r11,0xffffffff00000001; \ + sbb r11,[P2+0x18]; \ + /* [r12;r11;r10;r9;r8] = D * (p_256 - P2) */ \ + xor r12d,r12d; \ + mov rdx, D; \ + mulx rax, r8, r8; \ + mulx rcx, r9, r9; \ + add r9, rax; \ + mulx rax, r10, r10; \ + adc r10, rcx; \ + mulx rcx, r11, r11; \ + adc r11, rax; \ + adc r12, rcx; \ + /* [rdx;r11;r10;r9;r8] = 2^256 + C * P1 + D * (p_256 - P2) */ \ + mov rdx, C; \ + xor eax, eax; \ + mulx rcx, rax, [P1]; \ + adcx r8, rax; \ + adox r9, rcx; \ + mulx rcx, rax, [P1+0x8]; \ + adcx r9, rax; \ + adox r10, rcx; \ + mulx rcx, rax, [P1+0x10]; \ + adcx r10, rax; \ + adox r11, rcx; \ + mulx rdx, rax, [P1+0x18]; \ + adcx r11, rax; \ + adox rdx, r12; \ + adc rdx, 1; \ + /* Now the tail for modular reduction from tripling */ \ + add r8,rdx; \ + mov rax,0x100000000; \ + mulx rcx,rax,rax; \ + sbb rax,0x0; \ + sbb rcx,0x0; \ + sub r9,rax; \ + sbb r10,rcx; \ + mov rax,0xffffffff00000001; \ + mulx rcx,rax,rax; \ + sbb r11,rax; \ + sbb rdx,rcx; \ + dec rdx; \ + mov eax,0xffffffff; \ + and rax,rdx; \ + xor ecx,ecx; \ + sub rcx,rax; \ + add r8,rdx; \ + mov [P0],r8; \ + adc r9,rax; \ + mov [P0+0x8],r9; \ + adc r10,0x0; \ + mov [P0+0x10],r10; \ + adc r11,rcx; \ + mov [P0+0x18],r11 + +// P0 = 3 * P1 - 8 * P2, computed as (p_256 - P2) << 3 + 3 * P1 + +#define cmsub38_p256(P0,P1,P2) \ + /* First [r11;r10;r9;r8] = p_256 - P2 */ \ + mov r8,0xffffffffffffffff; \ + xor r10d,r10d; \ + sub r8,[P2]; \ + mov r9,0x00000000ffffffff; \ + sbb r9,[P2+0x8]; \ + sbb r10,[P2+0x10]; \ + mov r11,0xffffffff00000001; \ + sbb r11,[P2+0x18]; \ + /* [r12;r11;r10;r9;r8] = (p_256 - P2) << 3 */ \ + mov r12, r11; \ + shld r11, r10, 3; \ + shld r10, r9, 3; \ + shld r9, r8, 3; \ + shl r8, 3; \ + shr r12, 61; \ + /* [rdx;r11;r10;r9;r8] = 2^256 + 3 * P1 + 8 * (p_256 - P2) */ \ + mov rdx, 3; \ + xor eax, eax; \ + mulx rcx, rax, [P1]; \ + adcx r8, rax; \ + adox r9, rcx; \ + mulx rcx, rax, [P1+0x8]; \ + adcx r9, rax; \ + adox r10, rcx; \ + mulx rcx, rax, [P1+0x10]; \ + adcx r10, rax; \ + adox r11, rcx; \ + mulx rdx, rax, [P1+0x18]; \ + adcx r11, rax; \ + adox rdx, r12; \ + adc rdx, 1; \ + /* Now the tail for modular reduction from tripling */ \ + add r8,rdx; \ + mov rax,0x100000000; \ + mulx rcx,rax,rax; \ + sbb rax,0x0; \ + sbb rcx,0x0; \ + sub r9,rax; \ + sbb r10,rcx; \ + mov rax,0xffffffff00000001; \ + mulx rcx,rax,rax; \ + sbb r11,rax; \ + sbb rdx,rcx; \ + dec rdx; \ + mov eax,0xffffffff; \ + and rax,rdx; \ + xor ecx,ecx; \ + sub rcx,rax; \ + add r8,rdx; \ + mov [P0],r8; \ + adc r9,rax; \ + mov [P0+0x8],r9; \ + adc r10,0x0; \ + mov [P0+0x10],r10; \ + adc r11,rcx; \ + mov [P0+0x18],r11 + +// P0 = 4 * P1 - P2, by direct subtraction of P2, +// since the quotient estimate still works safely +// for initial value > -p_256 + +#define cmsub41_p256(P0,P1,P2) \ + mov r11,[P1+0x18]; \ + mov rdx, r11; \ + mov r10,[P1+0x10]; \ + shld r11, r10, 2; \ + mov r9,[P1+0x8]; \ + shld r10, r9, 2; \ + mov r8,[P1]; \ + shld r9, r8, 2; \ + shl r8, 2; \ + shr rdx, 62; \ + add rdx, 1; \ + sub r8, [P2]; \ + sbb r9, [P2+0x8]; \ + sbb r10, [P2+0x10]; \ + sbb r11, [P2+0x18]; \ + sbb rdx, 0; \ + /* Now the tail for modular reduction from tripling */ \ + add r8,rdx; \ + mov rax,0x100000000; \ + mulx rcx,rax,rax; \ + sbb rax,0x0; \ + sbb rcx,0x0; \ + sub r9,rax; \ + sbb r10,rcx; \ + mov rax,0xffffffff00000001; \ + mulx rcx,rax,rax; \ + sbb r11,rax; \ + sbb rdx,rcx; \ + dec rdx; \ + mov eax,0xffffffff; \ + and rax,rdx; \ + xor ecx,ecx; \ + sub rcx,rax; \ + add r8,rdx; \ + mov [P0],r8; \ + adc r9,rax; \ + mov [P0+0x8],r9; \ + adc r10,0x0; \ + mov [P0+0x10],r10; \ + adc r11,rcx; \ + mov [P0+0x18],r11 + +S2N_BN_SYMBOL(p256_montjdouble): + +#if WINDOWS_ABI + push rdi + push rsi + mov rdi, rcx + mov rsi, rdx +#endif + +// Save registers and make room on stack for temporary variables +// Save the outpuy pointer rdi which gets overwritten in earlier +// operations before it is used. + + push rbx + push rbp + push r12 + push r13 + push r14 + push r15 + + sub rsp, NSPACE + +// Main code, just a sequence of basic field operations + +// z2 = z^2 +// y2 = y^2 + + montsqr_p256(z2,z_1) + montsqr_p256(y2,y_1) + +// x2p = x^2 - z^4 = (x + z^2) * (x - z^2) + + weakadd_p256(t1,x_1,z2) + sub_p256(t2,x_1,z2) + montmul_p256(x2p,t1,t2) + +// t1 = y + z +// x4p = x2p^2 +// xy2 = x * y^2 + + add_p256(t1,y_1,z_1) + montsqr_p256(x4p,x2p) + montmul_p256(xy2,x_1,y2) + +// t2 = (y + z)^2 + + montsqr_p256(t2,t1) + +// d = 12 * xy2 - 9 * x4p +// t1 = y^2 + 2 * y * z + + cmsub_p256(d,12,xy2,9,x4p) + sub_p256(t1,t2,z2) + +// y4 = y^4 + + montsqr_p256(y4,y2) + +// Restore the output pointer to write to x_3, y_3 and z_3. + +// z_3' = 2 * y * z +// dx2 = d * x2p + + sub_p256(z_3,t1,y2) + montmul_p256(dx2,d,x2p) + +// x' = 4 * xy2 - d + + cmsub41_p256(x_3,xy2,d) + +// y' = 3 * dx2 - 8 * y4 + + cmsub38_p256(y_3,dx2,y4) + +// Restore stack and registers + + add rsp, NSPACE + pop r15 + pop r14 + pop r13 + pop r12 + pop rbp + pop rbx + +#if WINDOWS_ABI + pop rsi + pop rdi +#endif + ret + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack, "", %progbits +#endif diff --git a/x86/p256/p256_montjmixadd.S b/x86/p256/p256_montjmixadd.S new file mode 100644 index 0000000000..9698b4db6f --- /dev/null +++ b/x86/p256/p256_montjmixadd.S @@ -0,0 +1,510 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +// ---------------------------------------------------------------------------- +// Point mixed addition on NIST curve P-256 in Montgomery-Jacobian coordinates +// +// extern void p256_montjmixadd +// (uint64_t p3[static 12],uint64_t p1[static 12],uint64_t p2[static 8]); +// +// Does p3 := p1 + p2 where all points are regarded as Jacobian triples with +// each coordinate in the Montgomery domain, i.e. x' = (2^256 * x) mod p_256. +// A Jacobian triple (x',y',z') represents affine point (x/z^2,y/z^3). +// The "mixed" part means that p2 only has x and y coordinates, with the +// implicit z coordinate assumed to be the identity. +// +// Standard x86-64 ABI: RDI = p3, RSI = p1, RDX = p2 +// Microsoft x64 ABI: RCX = p3, RDX = p1, R8 = p2 +// ---------------------------------------------------------------------------- +#include "_internal_s2n_bignum.h" + + .intel_syntax noprefix + S2N_BN_SYM_VISIBILITY_DIRECTIVE(p256_montjmixadd) + S2N_BN_SYM_PRIVACY_DIRECTIVE(p256_montjmixadd) + .text + +// Size of individual field elements + +#define NUMSIZE 32 + +// Pointer-offset pairs for inputs and outputs +// These assume rdi = p3, rsi = p1 and rbp = p2, +// which needs to be set up explicitly before use +// As it happens none of the code macros modify +// either rdi or rsi so we just need to take care +// over rbp. That is set up early and lasts for the +// places where it's needed but not the full code; +// it gets destroyed by montsqr_p256 calls. + +#define x_1 rsi+0 +#define y_1 rsi+NUMSIZE +#define z_1 rsi+(2*NUMSIZE) + +#define x_2 rbp+0 +#define y_2 rbp+NUMSIZE + +#define x_3 rdi+0 +#define y_3 rdi+NUMSIZE +#define z_3 rdi+(2*NUMSIZE) + +// Pointer-offset pairs for temporaries, with some aliasing +// NSPACE is the total stack needed for these temporaries + +#define zp2 rsp+(NUMSIZE*0) +#define ww rsp+(NUMSIZE*0) + +#define yd rsp+(NUMSIZE*1) +#define y2a rsp+(NUMSIZE*1) + +#define x2a rsp+(NUMSIZE*2) +#define zzx2 rsp+(NUMSIZE*2) + +#define zz rsp+(NUMSIZE*3) +#define t1 rsp+(NUMSIZE*3) + +#define t2 rsp+(NUMSIZE*4) +#define zzx1 rsp+(NUMSIZE*4) + +#define xd rsp+(NUMSIZE*5) + +#define NSPACE (NUMSIZE*6) + +// Corresponds exactly to bignum_montmul_p256 + +#define montmul_p256(P0,P1,P2) \ + xor r13d,r13d; \ + mov rdx,[P2]; \ + mulx r9,r8,[P1]; \ + mulx r10,rbx,[P1+0x8]; \ + adc r9,rbx; \ + mulx r11,rbx,[P1+0x10]; \ + adc r10,rbx; \ + mulx r12,rbx,[P1+0x18]; \ + adc r11,rbx; \ + adc r12,r13; \ + mov rdx,[P2+0x8]; \ + xor r14d,r14d; \ + mulx rbx,rax,[P1]; \ + adcx r9,rax; \ + adox r10,rbx; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r12,rax; \ + adox r13,rbx; \ + adc r13,r14; \ + xor r15d,r15d; \ + movabs rdx,0x100000000; \ + mulx rbx,rax,r8; \ + adcx r9,rax; \ + adox r10,rbx; \ + mulx rbx,rax,r9; \ + adcx r10,rax; \ + adox r11,rbx; \ + not rdx; \ + lea rdx,[rdx+0x2]; \ + mulx rbx,rax,r8; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,r9; \ + adcx r12,rax; \ + adox r13,rbx; \ + adcx r13,r15; \ + adox r14,r15; \ + adc r14,r15; \ + mov rdx,[P2+0x10]; \ + xor r8d,r8d; \ + mulx rbx,rax,[P1]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r12,rax; \ + adox r13,rbx; \ + adox r14,r8; \ + mulx rbx,rax,[P1+0x18]; \ + adc r13,rax; \ + adc r14,rbx; \ + adc r15,r8; \ + mov rdx,[P2+0x18]; \ + xor r9d,r9d; \ + mulx rbx,rax,[P1]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r13,rax; \ + adox r14,rbx; \ + adox r15,r9; \ + mulx rbx,rax,[P1+0x18]; \ + adc r14,rax; \ + adc r15,rbx; \ + adc r8,r9; \ + xor r9d,r9d; \ + movabs rdx,0x100000000; \ + mulx rbx,rax,r10; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,r11; \ + adcx r12,rax; \ + adox r13,rbx; \ + not rdx; \ + lea rdx,[rdx+0x2]; \ + mulx rbx,rax,r10; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,r11; \ + adcx r14,rax; \ + adox r15,rbx; \ + adcx r15,r9; \ + adox r8,r9; \ + adc r8,r9; \ + mov ecx,0x1; \ + add rcx,r12; \ + dec rdx; \ + adc rdx,r13; \ + dec r9; \ + mov rax,r9; \ + adc r9,r14; \ + mov r11d,0xfffffffe; \ + adc r11,r15; \ + adc rax,r8; \ + cmovb r12,rcx; \ + cmovb r13,rdx; \ + cmovb r14,r9; \ + cmovb r15,r11; \ + mov [P0],r12; \ + mov [P0+0x8],r13; \ + mov [P0+0x10],r14; \ + mov [P0+0x18],r15 + +// Corresponds exactly to bignum_montsqr_p256 + +#define montsqr_p256(P0,P1) \ + mov rdx,[P1]; \ + mulx r15,r8,rdx; \ + mulx r10,r9,[P1+0x8]; \ + mulx r12,r11,[P1+0x18]; \ + mov rdx,[P1+0x10]; \ + mulx r14,r13,[P1+0x18]; \ + xor ebp,ebp; \ + mulx rbx,rax,[P1]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mov rdx,[P1+0x18]; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r12,rax; \ + adox r13,rbx; \ + adcx r13,rbp; \ + adox r14,rbp; \ + adc r14,rbp; \ + xor ebp,ebp; \ + adcx r9,r9; \ + adox r9,r15; \ + mov rdx,[P1+0x8]; \ + mulx rdx,rax,rdx; \ + adcx r10,r10; \ + adox r10,rax; \ + adcx r11,r11; \ + adox r11,rdx; \ + mov rdx,[P1+0x10]; \ + mulx rdx,rax,rdx; \ + adcx r12,r12; \ + adox r12,rax; \ + adcx r13,r13; \ + adox r13,rdx; \ + mov rdx,[P1+0x18]; \ + mulx r15,rax,rdx; \ + adcx r14,r14; \ + adox r14,rax; \ + adcx r15,rbp; \ + adox r15,rbp; \ + xor ebp,ebp; \ + movabs rdx,0x100000000; \ + mulx rbx,rax,r8; \ + adcx r9,rax; \ + adox r10,rbx; \ + mulx rbx,rax,r9; \ + adcx r10,rax; \ + adox r11,rbx; \ + movabs rdx,0xffffffff00000001; \ + mulx rbx,rax,r8; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,r9; \ + adcx r12,rax; \ + adox r13,rbx; \ + adcx r13,rbp; \ + mov r9d,ebp; \ + adox r9,rbp; \ + adcx r9,rbp; \ + add r14,r9; \ + adc r15,rbp; \ + mov r8d,ebp; \ + adc r8,rbp; \ + xor ebp,ebp; \ + movabs rdx,0x100000000; \ + mulx rbx,rax,r10; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,r11; \ + adcx r12,rax; \ + adox r13,rbx; \ + movabs rdx,0xffffffff00000001; \ + mulx rbx,rax,r10; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,r11; \ + adcx r14,rax; \ + adox r15,rbx; \ + adcx r15,rbp; \ + adox r8,rbp; \ + adc r8,rbp; \ + mov ecx,0x1; \ + add rcx,r12; \ + lea rdx,[rdx-0x1]; \ + adc rdx,r13; \ + lea rbp,[rbp-0x1]; \ + mov rax,rbp; \ + adc rbp,r14; \ + mov r11d,0xfffffffe; \ + adc r11,r15; \ + adc rax,r8; \ + cmovb r12,rcx; \ + cmovb r13,rdx; \ + cmovb r14,rbp; \ + cmovb r15,r11; \ + mov [P0],r12; \ + mov [P0+0x8],r13; \ + mov [P0+0x10],r14; \ + mov [P0+0x18],r15 + +// Almost-Montgomery variant which we use when an input to other muls +// with the other argument fully reduced (which is always safe). +// It's also tweaked to avoid modifying rbp so that we can use that +// for the y input while it is needed. + +#define amontsqr_p256(P0,P1) \ + mov rdx,[P1]; \ + mulx r15,r8,rdx; \ + mulx r10,r9,[P1+0x8]; \ + mulx r12,r11,[P1+0x18]; \ + mov rdx,[P1+0x10]; \ + mulx r14,r13,[P1+0x18]; \ + xor ecx,ecx; \ + mulx rbx,rax,[P1]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mov rdx,[P1+0x18]; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r12,rax; \ + adox r13,rbx; \ + adcx r13,rcx; \ + adox r14,rcx; \ + adc r14,rcx; \ + xor ecx,ecx; \ + adcx r9,r9; \ + adox r9,r15; \ + mov rdx,[P1+0x8]; \ + mulx rdx,rax,rdx; \ + adcx r10,r10; \ + adox r10,rax; \ + adcx r11,r11; \ + adox r11,rdx; \ + mov rdx,[P1+0x10]; \ + mulx rdx,rax,rdx; \ + adcx r12,r12; \ + adox r12,rax; \ + adcx r13,r13; \ + adox r13,rdx; \ + mov rdx,[P1+0x18]; \ + mulx r15,rax,rdx; \ + adcx r14,r14; \ + adox r14,rax; \ + adcx r15,rcx; \ + adox r15,rcx; \ + xor ecx,ecx; \ + movabs rdx,0x100000000; \ + mulx rbx,rax,r8; \ + adcx r9,rax; \ + adox r10,rbx; \ + mulx rbx,rax,r9; \ + adcx r10,rax; \ + adox r11,rbx; \ + movabs rdx,0xffffffff00000001; \ + mulx rbx,rax,r8; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,r9; \ + adcx r12,rax; \ + adox r13,rbx; \ + adcx r13,rcx; \ + mov r9d,ecx; \ + adox r9,rcx; \ + adcx r9,rcx; \ + add r14,r9; \ + adc r15,rcx; \ + mov r8d,ecx; \ + adc r8,rcx; \ + xor ecx,ecx; \ + movabs rdx,0x100000000; \ + mulx rbx,rax,r10; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,r11; \ + adcx r12,rax; \ + adox r13,rbx; \ + movabs rdx,0xffffffff00000001; \ + mulx rbx,rax,r10; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,r11; \ + adcx r14,rax; \ + adox r15,rbx; \ + adcx r15,rcx; \ + adox r8,rcx; \ + adc r8,rcx; \ + mov r8d,0x1; \ + lea rdx,[rdx-0x1]; \ + lea rax,[rcx-0x1]; \ + mov r11d,0xfffffffe; \ + cmovz r8,rcx; \ + cmovz rdx,rcx; \ + cmovz rax,rcx; \ + cmovz r11,rcx; \ + add r12,r8; \ + adc r13,rdx; \ + adc r14,rax; \ + adc r15,r11; \ + mov [P0],r12; \ + mov [P0+0x8],r13; \ + mov [P0+0x10],r14; \ + mov [P0+0x18],r15 + +// Corresponds exactly to bignum_sub_p256 + +#define sub_p256(P0,P1,P2) \ + mov rax,[P1]; \ + sub rax,[P2]; \ + mov rcx,[P1+0x8]; \ + sbb rcx,[P2+0x8]; \ + mov r8,[P1+0x10]; \ + sbb r8,[P2+0x10]; \ + mov r9,[P1+0x18]; \ + sbb r9,[P2+0x18]; \ + mov r10d,0xffffffff; \ + sbb r11,r11; \ + xor rdx,rdx; \ + and r10,r11; \ + sub rdx,r10; \ + add rax,r11; \ + mov [P0],rax; \ + adc rcx,r10; \ + mov [P0+0x8],rcx; \ + adc r8,0x0; \ + mov [P0+0x10],r8; \ + adc r9,rdx; \ + mov [P0+0x18],r9 + +S2N_BN_SYMBOL(p256_montjmixadd): + +#if WINDOWS_ABI + push rdi + push rsi + mov rdi, rcx + mov rsi, rdx + mov rdx, r8 +#endif + +// Save registers and make room on stack for temporary variables +// Put the input y in rbp where it lasts as long as it's needed. + + push rbx + push rbp + push r12 + push r13 + push r14 + push r15 + + sub rsp, NSPACE + + mov rbp, rdx + +// Main code, just a sequence of basic field operations +// 8 * multiply + 3 * square + 7 * subtract + + amontsqr_p256(zp2,z_1) + + montmul_p256(y2a,z_1,y_2) + montmul_p256(x2a,zp2,x_2) + montmul_p256(y2a,zp2,y2a) + + sub_p256(xd,x2a,x_1) + + sub_p256(yd,y2a,y_1) + + amontsqr_p256(zz,xd) + montsqr_p256(ww,yd) + + montmul_p256(zzx1,zz,x_1) + montmul_p256(zzx2,zz,x2a) + + sub_p256(x_3,ww,zzx1) + sub_p256(t1,zzx2,zzx1) + + montmul_p256(z_3,xd,z_1) + + sub_p256(x_3,x_3,zzx2) + + sub_p256(t2,zzx1,x_3) + + montmul_p256(t1,t1,y_1) + montmul_p256(t2,yd,t2) + + sub_p256(y_3,t2,t1) + +// Restore stack and registers + + add rsp, NSPACE + pop r15 + pop r14 + pop r13 + pop r12 + pop rbp + pop rbx + +#if WINDOWS_ABI + pop rsi + pop rdi +#endif + ret + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack, "", %progbits +#endif diff --git a/x86/proofs/p256_montjadd.ml b/x86/proofs/p256_montjadd.ml new file mode 100644 index 0000000000..a1f6a6ac55 --- /dev/null +++ b/x86/proofs/p256_montjadd.ml @@ -0,0 +1,3905 @@ +(* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + *) + +(* ========================================================================= *) +(* Point addition in Montgomery-Jacobian coordinates for NIST P-256 curve. *) +(* ========================================================================= *) + +needs "x86/proofs/base.ml";; +needs "common/ecencoding.ml";; +needs "EC/jacobian.ml";; +needs "EC/nistp256.ml";; + +prioritize_int();; +prioritize_real();; +prioritize_num();; + +(**** print_literal_from_elf "x86/p256/p256_montjadd.o";; + ****) + +let p256_montjadd_mc = define_assert_from_elf + "p256_montjadd_mc" "x86/p256/p256_montjadd.o" +[ + 0x53; (* PUSH (% rbx) *) + 0x55; (* PUSH (% rbp) *) + 0x41; 0x54; (* PUSH (% r12) *) + 0x41; 0x55; (* PUSH (% r13) *) + 0x41; 0x56; (* PUSH (% r14) *) + 0x41; 0x57; (* PUSH (% r15) *) + 0x48; 0x81; 0xec; 0xe8; 0x00; 0x00; 0x00; + (* SUB (% rsp) (Imm32 (word 232)) *) + 0x48; 0x89; 0xd5; (* MOV (% rbp) (% rdx) *) + 0x48; 0x89; 0x94; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,224))) (% rdx) *) + 0x48; 0x8b; 0x56; 0x40; (* MOV (% rdx) (Memop Quadword (%% (rsi,64))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0xfa; + (* MULX4 (% r15,% r8) (% rdx,% rdx) *) + 0xc4; 0x62; 0xb3; 0xf6; 0x56; 0x48; + (* MULX4 (% r10,% r9) (% rdx,Memop Quadword (%% (rsi,72))) *) + 0xc4; 0x62; 0xa3; 0xf6; 0x66; 0x58; + (* MULX4 (% r12,% r11) (% rdx,Memop Quadword (%% (rsi,88))) *) + 0x48; 0x8b; 0x56; 0x50; (* MOV (% rdx) (Memop Quadword (%% (rsi,80))) *) + 0xc4; 0x62; 0x93; 0xf6; 0x76; 0x58; + (* MULX4 (% r14,% r13) (% rdx,Memop Quadword (%% (rsi,88))) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x40; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,64))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x48; 0x8b; 0x56; 0x58; (* MOV (% rdx) (Memop Quadword (%% (rsi,88))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADCX (% r13) (% rcx) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADOX (% r14) (% rcx) *) + 0x49; 0x11; 0xce; (* ADC (% r14) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% r9) (% r9) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xcf; + (* ADOX (% r9) (% r15) *) + 0x48; 0x8b; 0x56; 0x48; (* MOV (% rdx) (Memop Quadword (%% (rsi,72))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xd2; + (* ADCX (% r10) (% r10) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADOX (% r10) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% r11) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% r11) (% rdx) *) + 0x48; 0x8b; 0x56; 0x50; (* MOV (% rdx) (Memop Quadword (%% (rsi,80))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xe4; + (* ADCX (% r12) (% r12) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADOX (% r12) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% r13) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xea; + (* ADOX (% r13) (% rdx) *) + 0x48; 0x8b; 0x56; 0x58; (* MOV (% rdx) (Memop Quadword (%% (rsi,88))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xfa; + (* MULX4 (% r15,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf6; + (* ADCX (% r14) (% r14) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% rax) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% rcx) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0xba; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rdx) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADCX (% r13) (% rcx) *) + 0x41; 0x89; 0xc9; (* MOV (% r9d) (% ecx) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc9; + (* ADOX (% r9) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% r9) (% rcx) *) + 0x4d; 0x01; 0xce; (* ADD (% r14) (% r9) *) + 0x49; 0x11; 0xcf; (* ADC (% r15) (% rcx) *) + 0x41; 0x89; 0xc8; (* MOV (% r8d) (% ecx) *) + 0x49; 0x11; 0xc8; (* ADC (% r8) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0xba; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rdx) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% rcx) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc1; + (* ADOX (% r8) (% rcx) *) + 0x49; 0x11; 0xc8; (* ADC (% r8) (% rcx) *) + 0x41; 0xb8; 0x01; 0x00; 0x00; 0x00; + (* MOV (% r8d) (Imm32 (word 1)) *) + 0x48; 0x8d; 0x52; 0xff; (* LEA (% rdx) (%% (rdx,18446744073709551615)) *) + 0x48; 0x8d; 0x41; 0xff; (* LEA (% rax) (%% (rcx,18446744073709551615)) *) + 0x41; 0xbb; 0xfe; 0xff; 0xff; 0xff; + (* MOV (% r11d) (Imm32 (word 4294967294)) *) + 0x4c; 0x0f; 0x44; 0xc1; (* CMOVE (% r8) (% rcx) *) + 0x48; 0x0f; 0x44; 0xd1; (* CMOVE (% rdx) (% rcx) *) + 0x48; 0x0f; 0x44; 0xc1; (* CMOVE (% rax) (% rcx) *) + 0x4c; 0x0f; 0x44; 0xd9; (* CMOVE (% r11) (% rcx) *) + 0x4d; 0x01; 0xc4; (* ADD (% r12) (% r8) *) + 0x49; 0x11; 0xd5; (* ADC (% r13) (% rdx) *) + 0x49; 0x11; 0xc6; (* ADC (% r14) (% rax) *) + 0x4d; 0x11; 0xdf; (* ADC (% r15) (% r11) *) + 0x4c; 0x89; 0x24; 0x24; (* MOV (Memop Quadword (%% (rsp,0))) (% r12) *) + 0x4c; 0x89; 0x6c; 0x24; 0x08; + (* MOV (Memop Quadword (%% (rsp,8))) (% r13) *) + 0x4c; 0x89; 0x74; 0x24; 0x10; + (* MOV (Memop Quadword (%% (rsp,16))) (% r14) *) + 0x4c; 0x89; 0x7c; 0x24; 0x18; + (* MOV (Memop Quadword (%% (rsp,24))) (% r15) *) + 0x48; 0x8b; 0x55; 0x40; (* MOV (% rdx) (Memop Quadword (%% (rbp,64))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0xfa; + (* MULX4 (% r15,% r8) (% rdx,% rdx) *) + 0xc4; 0x62; 0xb3; 0xf6; 0x55; 0x48; + (* MULX4 (% r10,% r9) (% rdx,Memop Quadword (%% (rbp,72))) *) + 0xc4; 0x62; 0xa3; 0xf6; 0x65; 0x58; + (* MULX4 (% r12,% r11) (% rdx,Memop Quadword (%% (rbp,88))) *) + 0x48; 0x8b; 0x55; 0x50; (* MOV (% rdx) (Memop Quadword (%% (rbp,80))) *) + 0xc4; 0x62; 0x93; 0xf6; 0x75; 0x58; + (* MULX4 (% r14,% r13) (% rdx,Memop Quadword (%% (rbp,88))) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5d; 0x40; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rbp,64))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5d; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rbp,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x48; 0x8b; 0x55; 0x58; (* MOV (% rdx) (Memop Quadword (%% (rbp,88))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5d; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rbp,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADCX (% r13) (% rcx) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADOX (% r14) (% rcx) *) + 0x49; 0x11; 0xce; (* ADC (% r14) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% r9) (% r9) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xcf; + (* ADOX (% r9) (% r15) *) + 0x48; 0x8b; 0x55; 0x48; (* MOV (% rdx) (Memop Quadword (%% (rbp,72))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xd2; + (* ADCX (% r10) (% r10) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADOX (% r10) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% r11) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% r11) (% rdx) *) + 0x48; 0x8b; 0x55; 0x50; (* MOV (% rdx) (Memop Quadword (%% (rbp,80))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xe4; + (* ADCX (% r12) (% r12) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADOX (% r12) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% r13) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xea; + (* ADOX (% r13) (% rdx) *) + 0x48; 0x8b; 0x55; 0x58; (* MOV (% rdx) (Memop Quadword (%% (rbp,88))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xfa; + (* MULX4 (% r15,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf6; + (* ADCX (% r14) (% r14) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% rax) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% rcx) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0xba; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rdx) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADCX (% r13) (% rcx) *) + 0x41; 0x89; 0xc9; (* MOV (% r9d) (% ecx) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc9; + (* ADOX (% r9) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% r9) (% rcx) *) + 0x4d; 0x01; 0xce; (* ADD (% r14) (% r9) *) + 0x49; 0x11; 0xcf; (* ADC (% r15) (% rcx) *) + 0x41; 0x89; 0xc8; (* MOV (% r8d) (% ecx) *) + 0x49; 0x11; 0xc8; (* ADC (% r8) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0xba; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rdx) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% rcx) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc1; + (* ADOX (% r8) (% rcx) *) + 0x49; 0x11; 0xc8; (* ADC (% r8) (% rcx) *) + 0x41; 0xb8; 0x01; 0x00; 0x00; 0x00; + (* MOV (% r8d) (Imm32 (word 1)) *) + 0x48; 0x8d; 0x52; 0xff; (* LEA (% rdx) (%% (rdx,18446744073709551615)) *) + 0x48; 0x8d; 0x41; 0xff; (* LEA (% rax) (%% (rcx,18446744073709551615)) *) + 0x41; 0xbb; 0xfe; 0xff; 0xff; 0xff; + (* MOV (% r11d) (Imm32 (word 4294967294)) *) + 0x4c; 0x0f; 0x44; 0xc1; (* CMOVE (% r8) (% rcx) *) + 0x48; 0x0f; 0x44; 0xd1; (* CMOVE (% rdx) (% rcx) *) + 0x48; 0x0f; 0x44; 0xc1; (* CMOVE (% rax) (% rcx) *) + 0x4c; 0x0f; 0x44; 0xd9; (* CMOVE (% r11) (% rcx) *) + 0x4d; 0x01; 0xc4; (* ADD (% r12) (% r8) *) + 0x49; 0x11; 0xd5; (* ADC (% r13) (% rdx) *) + 0x49; 0x11; 0xc6; (* ADC (% r14) (% rax) *) + 0x4d; 0x11; 0xdf; (* ADC (% r15) (% r11) *) + 0x4c; 0x89; 0xa4; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,160))) (% r12) *) + 0x4c; 0x89; 0xac; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,168))) (% r13) *) + 0x4c; 0x89; 0xb4; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,176))) (% r14) *) + 0x4c; 0x89; 0xbc; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,184))) (% r15) *) + 0x45; 0x31; 0xed; (* XOR (% r13d) (% r13d) *) + 0x48; 0x8b; 0x56; 0x20; (* MOV (% rdx) (Memop Quadword (%% (rsi,32))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x4d; 0x40; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rbp,64))) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x55; 0x48; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rbp,72))) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x5d; 0x50; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rbp,80))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x65; 0x58; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rbp,88))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x4d; 0x11; 0xec; (* ADC (% r12) (% r13) *) + 0x48; 0x8b; 0x56; 0x28; (* MOV (% rdx) (Memop Quadword (%% (rsi,40))) *) + 0x45; 0x31; 0xf6; (* XOR (% r14d) (% r14d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5d; 0x40; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rbp,64))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5d; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rbp,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5d; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rbp,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5d; 0x58; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rbp,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4d; 0x11; 0xf5; (* ADC (% r13) (% r14) *) + 0x45; 0x31; 0xff; (* XOR (% r15d) (% r15d) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0xf7; 0xd2; (* NOT (% rdx) *) + 0x48; 0x8d; 0x52; 0x02; (* LEA (% rdx) (%% (rdx,2)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xef; + (* ADCX (% r13) (% r15) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf7; + (* ADOX (% r14) (% r15) *) + 0x4d; 0x11; 0xfe; (* ADC (% r14) (% r15) *) + 0x48; 0x8b; 0x56; 0x30; (* MOV (% rdx) (Memop Quadword (%% (rsi,48))) *) + 0x45; 0x31; 0xc0; (* XOR (% r8d) (% r8d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5d; 0x40; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rbp,64))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5d; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rbp,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5d; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rbp,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% r8) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5d; 0x58; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rbp,88))) *) + 0x49; 0x11; 0xc5; (* ADC (% r13) (% rax) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0x4d; 0x11; 0xc7; (* ADC (% r15) (% r8) *) + 0x48; 0x8b; 0x56; 0x38; (* MOV (% rdx) (Memop Quadword (%% (rsi,56))) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5d; 0x40; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rbp,64))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5d; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rbp,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5d; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rbp,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5d; 0x58; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rbp,88))) *) + 0x49; 0x11; 0xc6; (* ADC (% r14) (% rax) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x4d; 0x11; 0xc8; (* ADC (% r8) (% r9) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0xf7; 0xd2; (* NOT (% rdx) *) + 0x48; 0x8d; 0x52; 0x02; (* LEA (% rdx) (%% (rdx,2)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% r9) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xc1; + (* ADOX (% r8) (% r9) *) + 0x4d; 0x11; 0xc8; (* ADC (% r8) (% r9) *) + 0xb9; 0x01; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 1)) *) + 0x4c; 0x01; 0xe1; (* ADD (% rcx) (% r12) *) + 0x48; 0xff; 0xca; (* DEC (% rdx) *) + 0x4c; 0x11; 0xea; (* ADC (% rdx) (% r13) *) + 0x49; 0xff; 0xc9; (* DEC (% r9) *) + 0x4c; 0x89; 0xc8; (* MOV (% rax) (% r9) *) + 0x4d; 0x11; 0xf1; (* ADC (% r9) (% r14) *) + 0x41; 0xbb; 0xfe; 0xff; 0xff; 0xff; + (* MOV (% r11d) (Imm32 (word 4294967294)) *) + 0x4d; 0x11; 0xfb; (* ADC (% r11) (% r15) *) + 0x4c; 0x11; 0xc0; (* ADC (% rax) (% r8) *) + 0x4c; 0x0f; 0x42; 0xe1; (* CMOVB (% r12) (% rcx) *) + 0x4c; 0x0f; 0x42; 0xea; (* CMOVB (% r13) (% rdx) *) + 0x4d; 0x0f; 0x42; 0xf1; (* CMOVB (% r14) (% r9) *) + 0x4d; 0x0f; 0x42; 0xfb; (* CMOVB (% r15) (% r11) *) + 0x4c; 0x89; 0xa4; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,192))) (% r12) *) + 0x4c; 0x89; 0xac; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,200))) (% r13) *) + 0x4c; 0x89; 0xb4; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,208))) (% r14) *) + 0x4c; 0x89; 0xbc; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,216))) (% r15) *) + 0x45; 0x31; 0xed; (* XOR (% r13d) (% r13d) *) + 0x48; 0x8b; 0x55; 0x20; (* MOV (% rdx) (Memop Quadword (%% (rbp,32))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x4e; 0x40; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsi,64))) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x56; 0x48; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsi,72))) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x5e; 0x50; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsi,80))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x66; 0x58; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsi,88))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x4d; 0x11; 0xec; (* ADC (% r12) (% r13) *) + 0x48; 0x8b; 0x55; 0x28; (* MOV (% rdx) (Memop Quadword (%% (rbp,40))) *) + 0x45; 0x31; 0xf6; (* XOR (% r14d) (% r14d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x40; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,64))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x58; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4d; 0x11; 0xf5; (* ADC (% r13) (% r14) *) + 0x45; 0x31; 0xff; (* XOR (% r15d) (% r15d) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0xf7; 0xd2; (* NOT (% rdx) *) + 0x48; 0x8d; 0x52; 0x02; (* LEA (% rdx) (%% (rdx,2)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xef; + (* ADCX (% r13) (% r15) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf7; + (* ADOX (% r14) (% r15) *) + 0x4d; 0x11; 0xfe; (* ADC (% r14) (% r15) *) + 0x48; 0x8b; 0x55; 0x30; (* MOV (% rdx) (Memop Quadword (%% (rbp,48))) *) + 0x45; 0x31; 0xc0; (* XOR (% r8d) (% r8d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x40; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,64))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% r8) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x58; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,88))) *) + 0x49; 0x11; 0xc5; (* ADC (% r13) (% rax) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0x4d; 0x11; 0xc7; (* ADC (% r15) (% r8) *) + 0x48; 0x8b; 0x55; 0x38; (* MOV (% rdx) (Memop Quadword (%% (rbp,56))) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x40; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,64))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x58; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,88))) *) + 0x49; 0x11; 0xc6; (* ADC (% r14) (% rax) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x4d; 0x11; 0xc8; (* ADC (% r8) (% r9) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0xf7; 0xd2; (* NOT (% rdx) *) + 0x48; 0x8d; 0x52; 0x02; (* LEA (% rdx) (%% (rdx,2)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% r9) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xc1; + (* ADOX (% r8) (% r9) *) + 0x4d; 0x11; 0xc8; (* ADC (% r8) (% r9) *) + 0xb9; 0x01; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 1)) *) + 0x4c; 0x01; 0xe1; (* ADD (% rcx) (% r12) *) + 0x48; 0xff; 0xca; (* DEC (% rdx) *) + 0x4c; 0x11; 0xea; (* ADC (% rdx) (% r13) *) + 0x49; 0xff; 0xc9; (* DEC (% r9) *) + 0x4c; 0x89; 0xc8; (* MOV (% rax) (% r9) *) + 0x4d; 0x11; 0xf1; (* ADC (% r9) (% r14) *) + 0x41; 0xbb; 0xfe; 0xff; 0xff; 0xff; + (* MOV (% r11d) (Imm32 (word 4294967294)) *) + 0x4d; 0x11; 0xfb; (* ADC (% r11) (% r15) *) + 0x4c; 0x11; 0xc0; (* ADC (% rax) (% r8) *) + 0x4c; 0x0f; 0x42; 0xe1; (* CMOVB (% r12) (% rcx) *) + 0x4c; 0x0f; 0x42; 0xea; (* CMOVB (% r13) (% rdx) *) + 0x4d; 0x0f; 0x42; 0xf1; (* CMOVB (% r14) (% r9) *) + 0x4d; 0x0f; 0x42; 0xfb; (* CMOVB (% r15) (% r11) *) + 0x4c; 0x89; 0x64; 0x24; 0x20; + (* MOV (Memop Quadword (%% (rsp,32))) (% r12) *) + 0x4c; 0x89; 0x6c; 0x24; 0x28; + (* MOV (Memop Quadword (%% (rsp,40))) (% r13) *) + 0x4c; 0x89; 0x74; 0x24; 0x30; + (* MOV (Memop Quadword (%% (rsp,48))) (% r14) *) + 0x4c; 0x89; 0x7c; 0x24; 0x38; + (* MOV (Memop Quadword (%% (rsp,56))) (% r15) *) + 0x45; 0x31; 0xed; (* XOR (% r13d) (% r13d) *) + 0x48; 0x8b; 0x55; 0x00; (* MOV (% rdx) (Memop Quadword (%% (rbp,0))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x0c; 0x24; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x54; 0x24; 0x08; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x64; 0x24; 0x18; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x4d; 0x11; 0xec; (* ADC (% r12) (% r13) *) + 0x48; 0x8b; 0x55; 0x08; (* MOV (% rdx) (Memop Quadword (%% (rbp,8))) *) + 0x45; 0x31; 0xf6; (* XOR (% r14d) (% r14d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4d; 0x11; 0xf5; (* ADC (% r13) (% r14) *) + 0x45; 0x31; 0xff; (* XOR (% r15d) (% r15d) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0xf7; 0xd2; (* NOT (% rdx) *) + 0x48; 0x8d; 0x52; 0x02; (* LEA (% rdx) (%% (rdx,2)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xef; + (* ADCX (% r13) (% r15) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf7; + (* ADOX (% r14) (% r15) *) + 0x4d; 0x11; 0xfe; (* ADC (% r14) (% r15) *) + 0x48; 0x8b; 0x55; 0x10; (* MOV (% rdx) (Memop Quadword (%% (rbp,16))) *) + 0x45; 0x31; 0xc0; (* XOR (% r8d) (% r8d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% r8) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x49; 0x11; 0xc5; (* ADC (% r13) (% rax) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0x4d; 0x11; 0xc7; (* ADC (% r15) (% r8) *) + 0x48; 0x8b; 0x55; 0x18; (* MOV (% rdx) (Memop Quadword (%% (rbp,24))) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x49; 0x11; 0xc6; (* ADC (% r14) (% rax) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x4d; 0x11; 0xc8; (* ADC (% r8) (% r9) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0xf7; 0xd2; (* NOT (% rdx) *) + 0x48; 0x8d; 0x52; 0x02; (* LEA (% rdx) (%% (rdx,2)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% r9) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xc1; + (* ADOX (% r8) (% r9) *) + 0x4d; 0x11; 0xc8; (* ADC (% r8) (% r9) *) + 0xb9; 0x01; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 1)) *) + 0x4c; 0x01; 0xe1; (* ADD (% rcx) (% r12) *) + 0x48; 0xff; 0xca; (* DEC (% rdx) *) + 0x4c; 0x11; 0xea; (* ADC (% rdx) (% r13) *) + 0x49; 0xff; 0xc9; (* DEC (% r9) *) + 0x4c; 0x89; 0xc8; (* MOV (% rax) (% r9) *) + 0x4d; 0x11; 0xf1; (* ADC (% r9) (% r14) *) + 0x41; 0xbb; 0xfe; 0xff; 0xff; 0xff; + (* MOV (% r11d) (Imm32 (word 4294967294)) *) + 0x4d; 0x11; 0xfb; (* ADC (% r11) (% r15) *) + 0x4c; 0x11; 0xc0; (* ADC (% rax) (% r8) *) + 0x4c; 0x0f; 0x42; 0xe1; (* CMOVB (% r12) (% rcx) *) + 0x4c; 0x0f; 0x42; 0xea; (* CMOVB (% r13) (% rdx) *) + 0x4d; 0x0f; 0x42; 0xf1; (* CMOVB (% r14) (% r9) *) + 0x4d; 0x0f; 0x42; 0xfb; (* CMOVB (% r15) (% r11) *) + 0x4c; 0x89; 0x64; 0x24; 0x40; + (* MOV (Memop Quadword (%% (rsp,64))) (% r12) *) + 0x4c; 0x89; 0x6c; 0x24; 0x48; + (* MOV (Memop Quadword (%% (rsp,72))) (% r13) *) + 0x4c; 0x89; 0x74; 0x24; 0x50; + (* MOV (Memop Quadword (%% (rsp,80))) (% r14) *) + 0x4c; 0x89; 0x7c; 0x24; 0x58; + (* MOV (Memop Quadword (%% (rsp,88))) (% r15) *) + 0x45; 0x31; 0xed; (* XOR (% r13d) (% r13d) *) + 0x48; 0x8b; 0x16; (* MOV (% rdx) (Memop Quadword (%% (rsi,0))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x8c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x94; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xa4; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x4d; 0x11; 0xec; (* ADC (% r12) (% r13) *) + 0x48; 0x8b; 0x56; 0x08; (* MOV (% rdx) (Memop Quadword (%% (rsi,8))) *) + 0x45; 0x31; 0xf6; (* XOR (% r14d) (% r14d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4d; 0x11; 0xf5; (* ADC (% r13) (% r14) *) + 0x45; 0x31; 0xff; (* XOR (% r15d) (% r15d) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0xf7; 0xd2; (* NOT (% rdx) *) + 0x48; 0x8d; 0x52; 0x02; (* LEA (% rdx) (%% (rdx,2)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xef; + (* ADCX (% r13) (% r15) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf7; + (* ADOX (% r14) (% r15) *) + 0x4d; 0x11; 0xfe; (* ADC (% r14) (% r15) *) + 0x48; 0x8b; 0x56; 0x10; (* MOV (% rdx) (Memop Quadword (%% (rsi,16))) *) + 0x45; 0x31; 0xc0; (* XOR (% r8d) (% r8d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% r8) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xc5; (* ADC (% r13) (% rax) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0x4d; 0x11; 0xc7; (* ADC (% r15) (% r8) *) + 0x48; 0x8b; 0x56; 0x18; (* MOV (% rdx) (Memop Quadword (%% (rsi,24))) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xc6; (* ADC (% r14) (% rax) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x4d; 0x11; 0xc8; (* ADC (% r8) (% r9) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0xf7; 0xd2; (* NOT (% rdx) *) + 0x48; 0x8d; 0x52; 0x02; (* LEA (% rdx) (%% (rdx,2)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% r9) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xc1; + (* ADOX (% r8) (% r9) *) + 0x4d; 0x11; 0xc8; (* ADC (% r8) (% r9) *) + 0xb9; 0x01; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 1)) *) + 0x4c; 0x01; 0xe1; (* ADD (% rcx) (% r12) *) + 0x48; 0xff; 0xca; (* DEC (% rdx) *) + 0x4c; 0x11; 0xea; (* ADC (% rdx) (% r13) *) + 0x49; 0xff; 0xc9; (* DEC (% r9) *) + 0x4c; 0x89; 0xc8; (* MOV (% rax) (% r9) *) + 0x4d; 0x11; 0xf1; (* ADC (% r9) (% r14) *) + 0x41; 0xbb; 0xfe; 0xff; 0xff; 0xff; + (* MOV (% r11d) (Imm32 (word 4294967294)) *) + 0x4d; 0x11; 0xfb; (* ADC (% r11) (% r15) *) + 0x4c; 0x11; 0xc0; (* ADC (% rax) (% r8) *) + 0x4c; 0x0f; 0x42; 0xe1; (* CMOVB (% r12) (% rcx) *) + 0x4c; 0x0f; 0x42; 0xea; (* CMOVB (% r13) (% rdx) *) + 0x4d; 0x0f; 0x42; 0xf1; (* CMOVB (% r14) (% r9) *) + 0x4d; 0x0f; 0x42; 0xfb; (* CMOVB (% r15) (% r11) *) + 0x4c; 0x89; 0xa4; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,128))) (% r12) *) + 0x4c; 0x89; 0xac; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,136))) (% r13) *) + 0x4c; 0x89; 0xb4; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,144))) (% r14) *) + 0x4c; 0x89; 0xbc; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,152))) (% r15) *) + 0x45; 0x31; 0xed; (* XOR (% r13d) (% r13d) *) + 0x48; 0x8b; 0x54; 0x24; 0x20; + (* MOV (% rdx) (Memop Quadword (%% (rsp,32))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x0c; 0x24; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x54; 0x24; 0x08; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x64; 0x24; 0x18; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x4d; 0x11; 0xec; (* ADC (% r12) (% r13) *) + 0x48; 0x8b; 0x54; 0x24; 0x28; + (* MOV (% rdx) (Memop Quadword (%% (rsp,40))) *) + 0x45; 0x31; 0xf6; (* XOR (% r14d) (% r14d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4d; 0x11; 0xf5; (* ADC (% r13) (% r14) *) + 0x45; 0x31; 0xff; (* XOR (% r15d) (% r15d) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0xf7; 0xd2; (* NOT (% rdx) *) + 0x48; 0x8d; 0x52; 0x02; (* LEA (% rdx) (%% (rdx,2)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xef; + (* ADCX (% r13) (% r15) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf7; + (* ADOX (% r14) (% r15) *) + 0x4d; 0x11; 0xfe; (* ADC (% r14) (% r15) *) + 0x48; 0x8b; 0x54; 0x24; 0x30; + (* MOV (% rdx) (Memop Quadword (%% (rsp,48))) *) + 0x45; 0x31; 0xc0; (* XOR (% r8d) (% r8d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% r8) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x49; 0x11; 0xc5; (* ADC (% r13) (% rax) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0x4d; 0x11; 0xc7; (* ADC (% r15) (% r8) *) + 0x48; 0x8b; 0x54; 0x24; 0x38; + (* MOV (% rdx) (Memop Quadword (%% (rsp,56))) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x49; 0x11; 0xc6; (* ADC (% r14) (% rax) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x4d; 0x11; 0xc8; (* ADC (% r8) (% r9) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0xf7; 0xd2; (* NOT (% rdx) *) + 0x48; 0x8d; 0x52; 0x02; (* LEA (% rdx) (%% (rdx,2)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% r9) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xc1; + (* ADOX (% r8) (% r9) *) + 0x4d; 0x11; 0xc8; (* ADC (% r8) (% r9) *) + 0xb9; 0x01; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 1)) *) + 0x4c; 0x01; 0xe1; (* ADD (% rcx) (% r12) *) + 0x48; 0xff; 0xca; (* DEC (% rdx) *) + 0x4c; 0x11; 0xea; (* ADC (% rdx) (% r13) *) + 0x49; 0xff; 0xc9; (* DEC (% r9) *) + 0x4c; 0x89; 0xc8; (* MOV (% rax) (% r9) *) + 0x4d; 0x11; 0xf1; (* ADC (% r9) (% r14) *) + 0x41; 0xbb; 0xfe; 0xff; 0xff; 0xff; + (* MOV (% r11d) (Imm32 (word 4294967294)) *) + 0x4d; 0x11; 0xfb; (* ADC (% r11) (% r15) *) + 0x4c; 0x11; 0xc0; (* ADC (% rax) (% r8) *) + 0x4c; 0x0f; 0x42; 0xe1; (* CMOVB (% r12) (% rcx) *) + 0x4c; 0x0f; 0x42; 0xea; (* CMOVB (% r13) (% rdx) *) + 0x4d; 0x0f; 0x42; 0xf1; (* CMOVB (% r14) (% r9) *) + 0x4d; 0x0f; 0x42; 0xfb; (* CMOVB (% r15) (% r11) *) + 0x4c; 0x89; 0x64; 0x24; 0x20; + (* MOV (Memop Quadword (%% (rsp,32))) (% r12) *) + 0x4c; 0x89; 0x6c; 0x24; 0x28; + (* MOV (Memop Quadword (%% (rsp,40))) (% r13) *) + 0x4c; 0x89; 0x74; 0x24; 0x30; + (* MOV (Memop Quadword (%% (rsp,48))) (% r14) *) + 0x4c; 0x89; 0x7c; 0x24; 0x38; + (* MOV (Memop Quadword (%% (rsp,56))) (% r15) *) + 0x45; 0x31; 0xed; (* XOR (% r13d) (% r13d) *) + 0x48; 0x8b; 0x94; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,192))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x8c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x94; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xa4; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x4d; 0x11; 0xec; (* ADC (% r12) (% r13) *) + 0x48; 0x8b; 0x94; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,200))) *) + 0x45; 0x31; 0xf6; (* XOR (% r14d) (% r14d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4d; 0x11; 0xf5; (* ADC (% r13) (% r14) *) + 0x45; 0x31; 0xff; (* XOR (% r15d) (% r15d) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0xf7; 0xd2; (* NOT (% rdx) *) + 0x48; 0x8d; 0x52; 0x02; (* LEA (% rdx) (%% (rdx,2)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xef; + (* ADCX (% r13) (% r15) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf7; + (* ADOX (% r14) (% r15) *) + 0x4d; 0x11; 0xfe; (* ADC (% r14) (% r15) *) + 0x48; 0x8b; 0x94; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,208))) *) + 0x45; 0x31; 0xc0; (* XOR (% r8d) (% r8d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% r8) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xc5; (* ADC (% r13) (% rax) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0x4d; 0x11; 0xc7; (* ADC (% r15) (% r8) *) + 0x48; 0x8b; 0x94; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,216))) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xc6; (* ADC (% r14) (% rax) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x4d; 0x11; 0xc8; (* ADC (% r8) (% r9) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0xf7; 0xd2; (* NOT (% rdx) *) + 0x48; 0x8d; 0x52; 0x02; (* LEA (% rdx) (%% (rdx,2)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% r9) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xc1; + (* ADOX (% r8) (% r9) *) + 0x4d; 0x11; 0xc8; (* ADC (% r8) (% r9) *) + 0xb9; 0x01; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 1)) *) + 0x4c; 0x01; 0xe1; (* ADD (% rcx) (% r12) *) + 0x48; 0xff; 0xca; (* DEC (% rdx) *) + 0x4c; 0x11; 0xea; (* ADC (% rdx) (% r13) *) + 0x49; 0xff; 0xc9; (* DEC (% r9) *) + 0x4c; 0x89; 0xc8; (* MOV (% rax) (% r9) *) + 0x4d; 0x11; 0xf1; (* ADC (% r9) (% r14) *) + 0x41; 0xbb; 0xfe; 0xff; 0xff; 0xff; + (* MOV (% r11d) (Imm32 (word 4294967294)) *) + 0x4d; 0x11; 0xfb; (* ADC (% r11) (% r15) *) + 0x4c; 0x11; 0xc0; (* ADC (% rax) (% r8) *) + 0x4c; 0x0f; 0x42; 0xe1; (* CMOVB (% r12) (% rcx) *) + 0x4c; 0x0f; 0x42; 0xea; (* CMOVB (% r13) (% rdx) *) + 0x4d; 0x0f; 0x42; 0xf1; (* CMOVB (% r14) (% r9) *) + 0x4d; 0x0f; 0x42; 0xfb; (* CMOVB (% r15) (% r11) *) + 0x4c; 0x89; 0xa4; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,192))) (% r12) *) + 0x4c; 0x89; 0xac; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,200))) (% r13) *) + 0x4c; 0x89; 0xb4; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,208))) (% r14) *) + 0x4c; 0x89; 0xbc; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,216))) (% r15) *) + 0x48; 0x8b; 0x44; 0x24; 0x40; + (* MOV (% rax) (Memop Quadword (%% (rsp,64))) *) + 0x48; 0x2b; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; + (* SUB (% rax) (Memop Quadword (%% (rsp,128))) *) + 0x48; 0x8b; 0x4c; 0x24; 0x48; + (* MOV (% rcx) (Memop Quadword (%% (rsp,72))) *) + 0x48; 0x1b; 0x8c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* SBB (% rcx) (Memop Quadword (%% (rsp,136))) *) + 0x4c; 0x8b; 0x44; 0x24; 0x50; + (* MOV (% r8) (Memop Quadword (%% (rsp,80))) *) + 0x4c; 0x1b; 0x84; 0x24; 0x90; 0x00; 0x00; 0x00; + (* SBB (% r8) (Memop Quadword (%% (rsp,144))) *) + 0x4c; 0x8b; 0x4c; 0x24; 0x58; + (* MOV (% r9) (Memop Quadword (%% (rsp,88))) *) + 0x4c; 0x1b; 0x8c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* SBB (% r9) (Memop Quadword (%% (rsp,152))) *) + 0x41; 0xba; 0xff; 0xff; 0xff; 0xff; + (* MOV (% r10d) (Imm32 (word 4294967295)) *) + 0x4d; 0x19; 0xdb; (* SBB (% r11) (% r11) *) + 0x48; 0x31; 0xd2; (* XOR (% rdx) (% rdx) *) + 0x4d; 0x21; 0xda; (* AND (% r10) (% r11) *) + 0x4c; 0x29; 0xd2; (* SUB (% rdx) (% r10) *) + 0x4c; 0x01; 0xd8; (* ADD (% rax) (% r11) *) + 0x48; 0x89; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,160))) (% rax) *) + 0x4c; 0x11; 0xd1; (* ADC (% rcx) (% r10) *) + 0x48; 0x89; 0x8c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,168))) (% rcx) *) + 0x49; 0x83; 0xd0; 0x00; (* ADC (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x84; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,176))) (% r8) *) + 0x49; 0x11; 0xd1; (* ADC (% r9) (% rdx) *) + 0x4c; 0x89; 0x8c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,184))) (% r9) *) + 0x48; 0x8b; 0x44; 0x24; 0x20; + (* MOV (% rax) (Memop Quadword (%% (rsp,32))) *) + 0x48; 0x2b; 0x84; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* SUB (% rax) (Memop Quadword (%% (rsp,192))) *) + 0x48; 0x8b; 0x4c; 0x24; 0x28; + (* MOV (% rcx) (Memop Quadword (%% (rsp,40))) *) + 0x48; 0x1b; 0x8c; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* SBB (% rcx) (Memop Quadword (%% (rsp,200))) *) + 0x4c; 0x8b; 0x44; 0x24; 0x30; + (* MOV (% r8) (Memop Quadword (%% (rsp,48))) *) + 0x4c; 0x1b; 0x84; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* SBB (% r8) (Memop Quadword (%% (rsp,208))) *) + 0x4c; 0x8b; 0x4c; 0x24; 0x38; + (* MOV (% r9) (Memop Quadword (%% (rsp,56))) *) + 0x4c; 0x1b; 0x8c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* SBB (% r9) (Memop Quadword (%% (rsp,216))) *) + 0x41; 0xba; 0xff; 0xff; 0xff; 0xff; + (* MOV (% r10d) (Imm32 (word 4294967295)) *) + 0x4d; 0x19; 0xdb; (* SBB (% r11) (% r11) *) + 0x48; 0x31; 0xd2; (* XOR (% rdx) (% rdx) *) + 0x4d; 0x21; 0xda; (* AND (% r10) (% r11) *) + 0x4c; 0x29; 0xd2; (* SUB (% rdx) (% r10) *) + 0x4c; 0x01; 0xd8; (* ADD (% rax) (% r11) *) + 0x48; 0x89; 0x44; 0x24; 0x20; + (* MOV (Memop Quadword (%% (rsp,32))) (% rax) *) + 0x4c; 0x11; 0xd1; (* ADC (% rcx) (% r10) *) + 0x48; 0x89; 0x4c; 0x24; 0x28; + (* MOV (Memop Quadword (%% (rsp,40))) (% rcx) *) + 0x49; 0x83; 0xd0; 0x00; (* ADC (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x44; 0x24; 0x30; + (* MOV (Memop Quadword (%% (rsp,48))) (% r8) *) + 0x49; 0x11; 0xd1; (* ADC (% r9) (% rdx) *) + 0x4c; 0x89; 0x4c; 0x24; 0x38; + (* MOV (Memop Quadword (%% (rsp,56))) (% r9) *) + 0x48; 0x8b; 0x94; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,160))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0xfa; + (* MULX4 (% r15,% r8) (% rdx,% rdx) *) + 0xc4; 0x62; 0xb3; 0xf6; 0x94; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% r10,% r9) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0xc4; 0x62; 0xa3; 0xf6; 0xa4; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r12,% r11) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x48; 0x8b; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,176))) *) + 0xc4; 0x62; 0x93; 0xf6; 0xb4; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r14,% r13) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x48; 0x8b; 0x94; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,184))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADCX (% r13) (% rcx) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADOX (% r14) (% rcx) *) + 0x49; 0x11; 0xce; (* ADC (% r14) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% r9) (% r9) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xcf; + (* ADOX (% r9) (% r15) *) + 0x48; 0x8b; 0x94; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,168))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xd2; + (* ADCX (% r10) (% r10) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADOX (% r10) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% r11) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% r11) (% rdx) *) + 0x48; 0x8b; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,176))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xe4; + (* ADCX (% r12) (% r12) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADOX (% r12) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% r13) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xea; + (* ADOX (% r13) (% rdx) *) + 0x48; 0x8b; 0x94; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,184))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xfa; + (* MULX4 (% r15,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf6; + (* ADCX (% r14) (% r14) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% rax) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% rcx) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0xba; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rdx) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADCX (% r13) (% rcx) *) + 0x41; 0x89; 0xc9; (* MOV (% r9d) (% ecx) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc9; + (* ADOX (% r9) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% r9) (% rcx) *) + 0x4d; 0x01; 0xce; (* ADD (% r14) (% r9) *) + 0x49; 0x11; 0xcf; (* ADC (% r15) (% rcx) *) + 0x41; 0x89; 0xc8; (* MOV (% r8d) (% ecx) *) + 0x49; 0x11; 0xc8; (* ADC (% r8) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0xba; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rdx) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% rcx) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc1; + (* ADOX (% r8) (% rcx) *) + 0x49; 0x11; 0xc8; (* ADC (% r8) (% rcx) *) + 0x41; 0xb8; 0x01; 0x00; 0x00; 0x00; + (* MOV (% r8d) (Imm32 (word 1)) *) + 0x48; 0x8d; 0x52; 0xff; (* LEA (% rdx) (%% (rdx,18446744073709551615)) *) + 0x48; 0x8d; 0x41; 0xff; (* LEA (% rax) (%% (rcx,18446744073709551615)) *) + 0x41; 0xbb; 0xfe; 0xff; 0xff; 0xff; + (* MOV (% r11d) (Imm32 (word 4294967294)) *) + 0x4c; 0x0f; 0x44; 0xc1; (* CMOVE (% r8) (% rcx) *) + 0x48; 0x0f; 0x44; 0xd1; (* CMOVE (% rdx) (% rcx) *) + 0x48; 0x0f; 0x44; 0xc1; (* CMOVE (% rax) (% rcx) *) + 0x4c; 0x0f; 0x44; 0xd9; (* CMOVE (% r11) (% rcx) *) + 0x4d; 0x01; 0xc4; (* ADD (% r12) (% r8) *) + 0x49; 0x11; 0xd5; (* ADC (% r13) (% rdx) *) + 0x49; 0x11; 0xc6; (* ADC (% r14) (% rax) *) + 0x4d; 0x11; 0xdf; (* ADC (% r15) (% r11) *) + 0x4c; 0x89; 0x64; 0x24; 0x60; + (* MOV (Memop Quadword (%% (rsp,96))) (% r12) *) + 0x4c; 0x89; 0x6c; 0x24; 0x68; + (* MOV (Memop Quadword (%% (rsp,104))) (% r13) *) + 0x4c; 0x89; 0x74; 0x24; 0x70; + (* MOV (Memop Quadword (%% (rsp,112))) (% r14) *) + 0x4c; 0x89; 0x7c; 0x24; 0x78; + (* MOV (Memop Quadword (%% (rsp,120))) (% r15) *) + 0x48; 0x8b; 0x54; 0x24; 0x20; + (* MOV (% rdx) (Memop Quadword (%% (rsp,32))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0xfa; + (* MULX4 (% r15,% r8) (% rdx,% rdx) *) + 0xc4; 0x62; 0xb3; 0xf6; 0x54; 0x24; 0x28; + (* MULX4 (% r10,% r9) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0xc4; 0x62; 0xa3; 0xf6; 0x64; 0x24; 0x38; + (* MULX4 (% r12,% r11) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x48; 0x8b; 0x54; 0x24; 0x30; + (* MOV (% rdx) (Memop Quadword (%% (rsp,48))) *) + 0xc4; 0x62; 0x93; 0xf6; 0x74; 0x24; 0x38; + (* MULX4 (% r14,% r13) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x48; 0x8b; 0x54; 0x24; 0x38; + (* MOV (% rdx) (Memop Quadword (%% (rsp,56))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% rbp) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf5; + (* ADOX (% r14) (% rbp) *) + 0x49; 0x11; 0xee; (* ADC (% r14) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% r9) (% r9) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xcf; + (* ADOX (% r9) (% r15) *) + 0x48; 0x8b; 0x54; 0x24; 0x28; + (* MOV (% rdx) (Memop Quadword (%% (rsp,40))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xd2; + (* ADCX (% r10) (% r10) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADOX (% r10) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% r11) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% r11) (% rdx) *) + 0x48; 0x8b; 0x54; 0x24; 0x30; + (* MOV (% rdx) (Memop Quadword (%% (rsp,48))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xe4; + (* ADCX (% r12) (% r12) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADOX (% r12) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% r13) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xea; + (* ADOX (% r13) (% rdx) *) + 0x48; 0x8b; 0x54; 0x24; 0x38; + (* MOV (% rdx) (Memop Quadword (%% (rsp,56))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xfa; + (* MULX4 (% r15,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf6; + (* ADCX (% r14) (% r14) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% rax) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADCX (% r15) (% rbp) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADOX (% r15) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0xba; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rdx) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% rbp) *) + 0x41; 0x89; 0xe9; (* MOV (% r9d) (% ebp) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcd; + (* ADOX (% r9) (% rbp) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xcd; + (* ADCX (% r9) (% rbp) *) + 0x4d; 0x01; 0xce; (* ADD (% r14) (% r9) *) + 0x49; 0x11; 0xef; (* ADC (% r15) (% rbp) *) + 0x41; 0x89; 0xe8; (* MOV (% r8d) (% ebp) *) + 0x49; 0x11; 0xe8; (* ADC (% r8) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0xba; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rdx) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADCX (% r15) (% rbp) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc5; + (* ADOX (% r8) (% rbp) *) + 0x49; 0x11; 0xe8; (* ADC (% r8) (% rbp) *) + 0xb9; 0x01; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 1)) *) + 0x4c; 0x01; 0xe1; (* ADD (% rcx) (% r12) *) + 0x48; 0x8d; 0x52; 0xff; (* LEA (% rdx) (%% (rdx,18446744073709551615)) *) + 0x4c; 0x11; 0xea; (* ADC (% rdx) (% r13) *) + 0x48; 0x8d; 0x6d; 0xff; (* LEA (% rbp) (%% (rbp,18446744073709551615)) *) + 0x48; 0x89; 0xe8; (* MOV (% rax) (% rbp) *) + 0x4c; 0x11; 0xf5; (* ADC (% rbp) (% r14) *) + 0x41; 0xbb; 0xfe; 0xff; 0xff; 0xff; + (* MOV (% r11d) (Imm32 (word 4294967294)) *) + 0x4d; 0x11; 0xfb; (* ADC (% r11) (% r15) *) + 0x4c; 0x11; 0xc0; (* ADC (% rax) (% r8) *) + 0x4c; 0x0f; 0x42; 0xe1; (* CMOVB (% r12) (% rcx) *) + 0x4c; 0x0f; 0x42; 0xea; (* CMOVB (% r13) (% rdx) *) + 0x4c; 0x0f; 0x42; 0xf5; (* CMOVB (% r14) (% rbp) *) + 0x4d; 0x0f; 0x42; 0xfb; (* CMOVB (% r15) (% r11) *) + 0x4c; 0x89; 0x24; 0x24; (* MOV (Memop Quadword (%% (rsp,0))) (% r12) *) + 0x4c; 0x89; 0x6c; 0x24; 0x08; + (* MOV (Memop Quadword (%% (rsp,8))) (% r13) *) + 0x4c; 0x89; 0x74; 0x24; 0x10; + (* MOV (Memop Quadword (%% (rsp,16))) (% r14) *) + 0x4c; 0x89; 0x7c; 0x24; 0x18; + (* MOV (Memop Quadword (%% (rsp,24))) (% r15) *) + 0x45; 0x31; 0xed; (* XOR (% r13d) (% r13d) *) + 0x48; 0x8b; 0x94; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,128))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x4c; 0x24; 0x60; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x54; 0x24; 0x68; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x64; 0x24; 0x78; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x4d; 0x11; 0xec; (* ADC (% r12) (% r13) *) + 0x48; 0x8b; 0x94; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,136))) *) + 0x45; 0x31; 0xf6; (* XOR (% r14d) (% r14d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4d; 0x11; 0xf5; (* ADC (% r13) (% r14) *) + 0x45; 0x31; 0xff; (* XOR (% r15d) (% r15d) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0xf7; 0xd2; (* NOT (% rdx) *) + 0x48; 0x8d; 0x52; 0x02; (* LEA (% rdx) (%% (rdx,2)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xef; + (* ADCX (% r13) (% r15) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf7; + (* ADOX (% r14) (% r15) *) + 0x4d; 0x11; 0xfe; (* ADC (% r14) (% r15) *) + 0x48; 0x8b; 0x94; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,144))) *) + 0x45; 0x31; 0xc0; (* XOR (% r8d) (% r8d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% r8) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x49; 0x11; 0xc5; (* ADC (% r13) (% rax) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0x4d; 0x11; 0xc7; (* ADC (% r15) (% r8) *) + 0x48; 0x8b; 0x94; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,152))) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x49; 0x11; 0xc6; (* ADC (% r14) (% rax) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x4d; 0x11; 0xc8; (* ADC (% r8) (% r9) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0xf7; 0xd2; (* NOT (% rdx) *) + 0x48; 0x8d; 0x52; 0x02; (* LEA (% rdx) (%% (rdx,2)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% r9) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xc1; + (* ADOX (% r8) (% r9) *) + 0x4d; 0x11; 0xc8; (* ADC (% r8) (% r9) *) + 0xb9; 0x01; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 1)) *) + 0x4c; 0x01; 0xe1; (* ADD (% rcx) (% r12) *) + 0x48; 0xff; 0xca; (* DEC (% rdx) *) + 0x4c; 0x11; 0xea; (* ADC (% rdx) (% r13) *) + 0x49; 0xff; 0xc9; (* DEC (% r9) *) + 0x4c; 0x89; 0xc8; (* MOV (% rax) (% r9) *) + 0x4d; 0x11; 0xf1; (* ADC (% r9) (% r14) *) + 0x41; 0xbb; 0xfe; 0xff; 0xff; 0xff; + (* MOV (% r11d) (Imm32 (word 4294967294)) *) + 0x4d; 0x11; 0xfb; (* ADC (% r11) (% r15) *) + 0x4c; 0x11; 0xc0; (* ADC (% rax) (% r8) *) + 0x4c; 0x0f; 0x42; 0xe1; (* CMOVB (% r12) (% rcx) *) + 0x4c; 0x0f; 0x42; 0xea; (* CMOVB (% r13) (% rdx) *) + 0x4d; 0x0f; 0x42; 0xf1; (* CMOVB (% r14) (% r9) *) + 0x4d; 0x0f; 0x42; 0xfb; (* CMOVB (% r15) (% r11) *) + 0x4c; 0x89; 0xa4; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,128))) (% r12) *) + 0x4c; 0x89; 0xac; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,136))) (% r13) *) + 0x4c; 0x89; 0xb4; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,144))) (% r14) *) + 0x4c; 0x89; 0xbc; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,152))) (% r15) *) + 0x45; 0x31; 0xed; (* XOR (% r13d) (% r13d) *) + 0x48; 0x8b; 0x54; 0x24; 0x40; + (* MOV (% rdx) (Memop Quadword (%% (rsp,64))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x4c; 0x24; 0x60; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x54; 0x24; 0x68; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x64; 0x24; 0x78; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x4d; 0x11; 0xec; (* ADC (% r12) (% r13) *) + 0x48; 0x8b; 0x54; 0x24; 0x48; + (* MOV (% rdx) (Memop Quadword (%% (rsp,72))) *) + 0x45; 0x31; 0xf6; (* XOR (% r14d) (% r14d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4d; 0x11; 0xf5; (* ADC (% r13) (% r14) *) + 0x45; 0x31; 0xff; (* XOR (% r15d) (% r15d) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0xf7; 0xd2; (* NOT (% rdx) *) + 0x48; 0x8d; 0x52; 0x02; (* LEA (% rdx) (%% (rdx,2)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xef; + (* ADCX (% r13) (% r15) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf7; + (* ADOX (% r14) (% r15) *) + 0x4d; 0x11; 0xfe; (* ADC (% r14) (% r15) *) + 0x48; 0x8b; 0x54; 0x24; 0x50; + (* MOV (% rdx) (Memop Quadword (%% (rsp,80))) *) + 0x45; 0x31; 0xc0; (* XOR (% r8d) (% r8d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% r8) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x49; 0x11; 0xc5; (* ADC (% r13) (% rax) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0x4d; 0x11; 0xc7; (* ADC (% r15) (% r8) *) + 0x48; 0x8b; 0x54; 0x24; 0x58; + (* MOV (% rdx) (Memop Quadword (%% (rsp,88))) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x49; 0x11; 0xc6; (* ADC (% r14) (% rax) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x4d; 0x11; 0xc8; (* ADC (% r8) (% r9) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0xf7; 0xd2; (* NOT (% rdx) *) + 0x48; 0x8d; 0x52; 0x02; (* LEA (% rdx) (%% (rdx,2)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% r9) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xc1; + (* ADOX (% r8) (% r9) *) + 0x4d; 0x11; 0xc8; (* ADC (% r8) (% r9) *) + 0xb9; 0x01; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 1)) *) + 0x4c; 0x01; 0xe1; (* ADD (% rcx) (% r12) *) + 0x48; 0xff; 0xca; (* DEC (% rdx) *) + 0x4c; 0x11; 0xea; (* ADC (% rdx) (% r13) *) + 0x49; 0xff; 0xc9; (* DEC (% r9) *) + 0x4c; 0x89; 0xc8; (* MOV (% rax) (% r9) *) + 0x4d; 0x11; 0xf1; (* ADC (% r9) (% r14) *) + 0x41; 0xbb; 0xfe; 0xff; 0xff; 0xff; + (* MOV (% r11d) (Imm32 (word 4294967294)) *) + 0x4d; 0x11; 0xfb; (* ADC (% r11) (% r15) *) + 0x4c; 0x11; 0xc0; (* ADC (% rax) (% r8) *) + 0x4c; 0x0f; 0x42; 0xe1; (* CMOVB (% r12) (% rcx) *) + 0x4c; 0x0f; 0x42; 0xea; (* CMOVB (% r13) (% rdx) *) + 0x4d; 0x0f; 0x42; 0xf1; (* CMOVB (% r14) (% r9) *) + 0x4d; 0x0f; 0x42; 0xfb; (* CMOVB (% r15) (% r11) *) + 0x4c; 0x89; 0x64; 0x24; 0x40; + (* MOV (Memop Quadword (%% (rsp,64))) (% r12) *) + 0x4c; 0x89; 0x6c; 0x24; 0x48; + (* MOV (Memop Quadword (%% (rsp,72))) (% r13) *) + 0x4c; 0x89; 0x74; 0x24; 0x50; + (* MOV (Memop Quadword (%% (rsp,80))) (% r14) *) + 0x4c; 0x89; 0x7c; 0x24; 0x58; + (* MOV (Memop Quadword (%% (rsp,88))) (% r15) *) + 0x48; 0x8b; 0x04; 0x24; (* MOV (% rax) (Memop Quadword (%% (rsp,0))) *) + 0x48; 0x2b; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; + (* SUB (% rax) (Memop Quadword (%% (rsp,128))) *) + 0x48; 0x8b; 0x4c; 0x24; 0x08; + (* MOV (% rcx) (Memop Quadword (%% (rsp,8))) *) + 0x48; 0x1b; 0x8c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* SBB (% rcx) (Memop Quadword (%% (rsp,136))) *) + 0x4c; 0x8b; 0x44; 0x24; 0x10; + (* MOV (% r8) (Memop Quadword (%% (rsp,16))) *) + 0x4c; 0x1b; 0x84; 0x24; 0x90; 0x00; 0x00; 0x00; + (* SBB (% r8) (Memop Quadword (%% (rsp,144))) *) + 0x4c; 0x8b; 0x4c; 0x24; 0x18; + (* MOV (% r9) (Memop Quadword (%% (rsp,24))) *) + 0x4c; 0x1b; 0x8c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* SBB (% r9) (Memop Quadword (%% (rsp,152))) *) + 0x41; 0xba; 0xff; 0xff; 0xff; 0xff; + (* MOV (% r10d) (Imm32 (word 4294967295)) *) + 0x4d; 0x19; 0xdb; (* SBB (% r11) (% r11) *) + 0x48; 0x31; 0xd2; (* XOR (% rdx) (% rdx) *) + 0x4d; 0x21; 0xda; (* AND (% r10) (% r11) *) + 0x4c; 0x29; 0xd2; (* SUB (% rdx) (% r10) *) + 0x4c; 0x01; 0xd8; (* ADD (% rax) (% r11) *) + 0x48; 0x89; 0x07; (* MOV (Memop Quadword (%% (rdi,0))) (% rax) *) + 0x4c; 0x11; 0xd1; (* ADC (% rcx) (% r10) *) + 0x48; 0x89; 0x4f; 0x08; (* MOV (Memop Quadword (%% (rdi,8))) (% rcx) *) + 0x49; 0x83; 0xd0; 0x00; (* ADC (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x47; 0x10; (* MOV (Memop Quadword (%% (rdi,16))) (% r8) *) + 0x49; 0x11; 0xd1; (* ADC (% r9) (% rdx) *) + 0x4c; 0x89; 0x4f; 0x18; (* MOV (Memop Quadword (%% (rdi,24))) (% r9) *) + 0x48; 0x8b; 0x44; 0x24; 0x40; + (* MOV (% rax) (Memop Quadword (%% (rsp,64))) *) + 0x48; 0x2b; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; + (* SUB (% rax) (Memop Quadword (%% (rsp,128))) *) + 0x48; 0x8b; 0x4c; 0x24; 0x48; + (* MOV (% rcx) (Memop Quadword (%% (rsp,72))) *) + 0x48; 0x1b; 0x8c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* SBB (% rcx) (Memop Quadword (%% (rsp,136))) *) + 0x4c; 0x8b; 0x44; 0x24; 0x50; + (* MOV (% r8) (Memop Quadword (%% (rsp,80))) *) + 0x4c; 0x1b; 0x84; 0x24; 0x90; 0x00; 0x00; 0x00; + (* SBB (% r8) (Memop Quadword (%% (rsp,144))) *) + 0x4c; 0x8b; 0x4c; 0x24; 0x58; + (* MOV (% r9) (Memop Quadword (%% (rsp,88))) *) + 0x4c; 0x1b; 0x8c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* SBB (% r9) (Memop Quadword (%% (rsp,152))) *) + 0x41; 0xba; 0xff; 0xff; 0xff; 0xff; + (* MOV (% r10d) (Imm32 (word 4294967295)) *) + 0x4d; 0x19; 0xdb; (* SBB (% r11) (% r11) *) + 0x48; 0x31; 0xd2; (* XOR (% rdx) (% rdx) *) + 0x4d; 0x21; 0xda; (* AND (% r10) (% r11) *) + 0x4c; 0x29; 0xd2; (* SUB (% rdx) (% r10) *) + 0x4c; 0x01; 0xd8; (* ADD (% rax) (% r11) *) + 0x48; 0x89; 0x44; 0x24; 0x60; + (* MOV (Memop Quadword (%% (rsp,96))) (% rax) *) + 0x4c; 0x11; 0xd1; (* ADC (% rcx) (% r10) *) + 0x48; 0x89; 0x4c; 0x24; 0x68; + (* MOV (Memop Quadword (%% (rsp,104))) (% rcx) *) + 0x49; 0x83; 0xd0; 0x00; (* ADC (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x44; 0x24; 0x70; + (* MOV (Memop Quadword (%% (rsp,112))) (% r8) *) + 0x49; 0x11; 0xd1; (* ADC (% r9) (% rdx) *) + 0x4c; 0x89; 0x4c; 0x24; 0x78; + (* MOV (Memop Quadword (%% (rsp,120))) (% r9) *) + 0x45; 0x31; 0xed; (* XOR (% r13d) (% r13d) *) + 0x48; 0x8b; 0x56; 0x40; (* MOV (% rdx) (Memop Quadword (%% (rsi,64))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x8c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x94; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xa4; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x4d; 0x11; 0xec; (* ADC (% r12) (% r13) *) + 0x48; 0x8b; 0x56; 0x48; (* MOV (% rdx) (Memop Quadword (%% (rsi,72))) *) + 0x45; 0x31; 0xf6; (* XOR (% r14d) (% r14d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4d; 0x11; 0xf5; (* ADC (% r13) (% r14) *) + 0x45; 0x31; 0xff; (* XOR (% r15d) (% r15d) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0xf7; 0xd2; (* NOT (% rdx) *) + 0x48; 0x8d; 0x52; 0x02; (* LEA (% rdx) (%% (rdx,2)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xef; + (* ADCX (% r13) (% r15) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf7; + (* ADOX (% r14) (% r15) *) + 0x4d; 0x11; 0xfe; (* ADC (% r14) (% r15) *) + 0x48; 0x8b; 0x56; 0x50; (* MOV (% rdx) (Memop Quadword (%% (rsi,80))) *) + 0x45; 0x31; 0xc0; (* XOR (% r8d) (% r8d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% r8) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xc5; (* ADC (% r13) (% rax) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0x4d; 0x11; 0xc7; (* ADC (% r15) (% r8) *) + 0x48; 0x8b; 0x56; 0x58; (* MOV (% rdx) (Memop Quadword (%% (rsi,88))) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xc6; (* ADC (% r14) (% rax) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x4d; 0x11; 0xc8; (* ADC (% r8) (% r9) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0xf7; 0xd2; (* NOT (% rdx) *) + 0x48; 0x8d; 0x52; 0x02; (* LEA (% rdx) (%% (rdx,2)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% r9) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xc1; + (* ADOX (% r8) (% r9) *) + 0x4d; 0x11; 0xc8; (* ADC (% r8) (% r9) *) + 0xb9; 0x01; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 1)) *) + 0x4c; 0x01; 0xe1; (* ADD (% rcx) (% r12) *) + 0x48; 0xff; 0xca; (* DEC (% rdx) *) + 0x4c; 0x11; 0xea; (* ADC (% rdx) (% r13) *) + 0x49; 0xff; 0xc9; (* DEC (% r9) *) + 0x4c; 0x89; 0xc8; (* MOV (% rax) (% r9) *) + 0x4d; 0x11; 0xf1; (* ADC (% r9) (% r14) *) + 0x41; 0xbb; 0xfe; 0xff; 0xff; 0xff; + (* MOV (% r11d) (Imm32 (word 4294967294)) *) + 0x4d; 0x11; 0xfb; (* ADC (% r11) (% r15) *) + 0x4c; 0x11; 0xc0; (* ADC (% rax) (% r8) *) + 0x4c; 0x0f; 0x42; 0xe1; (* CMOVB (% r12) (% rcx) *) + 0x4c; 0x0f; 0x42; 0xea; (* CMOVB (% r13) (% rdx) *) + 0x4d; 0x0f; 0x42; 0xf1; (* CMOVB (% r14) (% r9) *) + 0x4d; 0x0f; 0x42; 0xfb; (* CMOVB (% r15) (% r11) *) + 0x4c; 0x89; 0xa4; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,160))) (% r12) *) + 0x4c; 0x89; 0xac; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,168))) (% r13) *) + 0x4c; 0x89; 0xb4; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,176))) (% r14) *) + 0x4c; 0x89; 0xbc; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,184))) (% r15) *) + 0x48; 0x8b; 0x07; (* MOV (% rax) (Memop Quadword (%% (rdi,0))) *) + 0x48; 0x2b; 0x44; 0x24; 0x40; + (* SUB (% rax) (Memop Quadword (%% (rsp,64))) *) + 0x48; 0x8b; 0x4f; 0x08; (* MOV (% rcx) (Memop Quadword (%% (rdi,8))) *) + 0x48; 0x1b; 0x4c; 0x24; 0x48; + (* SBB (% rcx) (Memop Quadword (%% (rsp,72))) *) + 0x4c; 0x8b; 0x47; 0x10; (* MOV (% r8) (Memop Quadword (%% (rdi,16))) *) + 0x4c; 0x1b; 0x44; 0x24; 0x50; + (* SBB (% r8) (Memop Quadword (%% (rsp,80))) *) + 0x4c; 0x8b; 0x4f; 0x18; (* MOV (% r9) (Memop Quadword (%% (rdi,24))) *) + 0x4c; 0x1b; 0x4c; 0x24; 0x58; + (* SBB (% r9) (Memop Quadword (%% (rsp,88))) *) + 0x41; 0xba; 0xff; 0xff; 0xff; 0xff; + (* MOV (% r10d) (Imm32 (word 4294967295)) *) + 0x4d; 0x19; 0xdb; (* SBB (% r11) (% r11) *) + 0x48; 0x31; 0xd2; (* XOR (% rdx) (% rdx) *) + 0x4d; 0x21; 0xda; (* AND (% r10) (% r11) *) + 0x4c; 0x29; 0xd2; (* SUB (% rdx) (% r10) *) + 0x4c; 0x01; 0xd8; (* ADD (% rax) (% r11) *) + 0x48; 0x89; 0x07; (* MOV (Memop Quadword (%% (rdi,0))) (% rax) *) + 0x4c; 0x11; 0xd1; (* ADC (% rcx) (% r10) *) + 0x48; 0x89; 0x4f; 0x08; (* MOV (Memop Quadword (%% (rdi,8))) (% rcx) *) + 0x49; 0x83; 0xd0; 0x00; (* ADC (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x47; 0x10; (* MOV (Memop Quadword (%% (rdi,16))) (% r8) *) + 0x49; 0x11; 0xd1; (* ADC (% r9) (% rdx) *) + 0x4c; 0x89; 0x4f; 0x18; (* MOV (Memop Quadword (%% (rdi,24))) (% r9) *) + 0x48; 0x8b; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,128))) *) + 0x48; 0x2b; 0x07; (* SUB (% rax) (Memop Quadword (%% (rdi,0))) *) + 0x48; 0x8b; 0x8c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (% rcx) (Memop Quadword (%% (rsp,136))) *) + 0x48; 0x1b; 0x4f; 0x08; (* SBB (% rcx) (Memop Quadword (%% (rdi,8))) *) + 0x4c; 0x8b; 0x84; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (% r8) (Memop Quadword (%% (rsp,144))) *) + 0x4c; 0x1b; 0x47; 0x10; (* SBB (% r8) (Memop Quadword (%% (rdi,16))) *) + 0x4c; 0x8b; 0x8c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (% r9) (Memop Quadword (%% (rsp,152))) *) + 0x4c; 0x1b; 0x4f; 0x18; (* SBB (% r9) (Memop Quadword (%% (rdi,24))) *) + 0x41; 0xba; 0xff; 0xff; 0xff; 0xff; + (* MOV (% r10d) (Imm32 (word 4294967295)) *) + 0x4d; 0x19; 0xdb; (* SBB (% r11) (% r11) *) + 0x48; 0x31; 0xd2; (* XOR (% rdx) (% rdx) *) + 0x4d; 0x21; 0xda; (* AND (% r10) (% r11) *) + 0x4c; 0x29; 0xd2; (* SUB (% rdx) (% r10) *) + 0x4c; 0x01; 0xd8; (* ADD (% rax) (% r11) *) + 0x48; 0x89; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,128))) (% rax) *) + 0x4c; 0x11; 0xd1; (* ADC (% rcx) (% r10) *) + 0x48; 0x89; 0x8c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,136))) (% rcx) *) + 0x49; 0x83; 0xd0; 0x00; (* ADC (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x84; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,144))) (% r8) *) + 0x49; 0x11; 0xd1; (* ADC (% r9) (% rdx) *) + 0x4c; 0x89; 0x8c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,152))) (% r9) *) + 0x45; 0x31; 0xed; (* XOR (% r13d) (% r13d) *) + 0x48; 0x8b; 0x94; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,192))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x4c; 0x24; 0x60; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x54; 0x24; 0x68; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x64; 0x24; 0x78; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x4d; 0x11; 0xec; (* ADC (% r12) (% r13) *) + 0x48; 0x8b; 0x94; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,200))) *) + 0x45; 0x31; 0xf6; (* XOR (% r14d) (% r14d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4d; 0x11; 0xf5; (* ADC (% r13) (% r14) *) + 0x45; 0x31; 0xff; (* XOR (% r15d) (% r15d) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0xf7; 0xd2; (* NOT (% rdx) *) + 0x48; 0x8d; 0x52; 0x02; (* LEA (% rdx) (%% (rdx,2)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xef; + (* ADCX (% r13) (% r15) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf7; + (* ADOX (% r14) (% r15) *) + 0x4d; 0x11; 0xfe; (* ADC (% r14) (% r15) *) + 0x48; 0x8b; 0x94; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,208))) *) + 0x45; 0x31; 0xc0; (* XOR (% r8d) (% r8d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% r8) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x49; 0x11; 0xc5; (* ADC (% r13) (% rax) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0x4d; 0x11; 0xc7; (* ADC (% r15) (% r8) *) + 0x48; 0x8b; 0x94; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,216))) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x49; 0x11; 0xc6; (* ADC (% r14) (% rax) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x4d; 0x11; 0xc8; (* ADC (% r8) (% r9) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0xf7; 0xd2; (* NOT (% rdx) *) + 0x48; 0x8d; 0x52; 0x02; (* LEA (% rdx) (%% (rdx,2)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% r9) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xc1; + (* ADOX (% r8) (% r9) *) + 0x4d; 0x11; 0xc8; (* ADC (% r8) (% r9) *) + 0xb9; 0x01; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 1)) *) + 0x4c; 0x01; 0xe1; (* ADD (% rcx) (% r12) *) + 0x48; 0xff; 0xca; (* DEC (% rdx) *) + 0x4c; 0x11; 0xea; (* ADC (% rdx) (% r13) *) + 0x49; 0xff; 0xc9; (* DEC (% r9) *) + 0x4c; 0x89; 0xc8; (* MOV (% rax) (% r9) *) + 0x4d; 0x11; 0xf1; (* ADC (% r9) (% r14) *) + 0x41; 0xbb; 0xfe; 0xff; 0xff; 0xff; + (* MOV (% r11d) (Imm32 (word 4294967294)) *) + 0x4d; 0x11; 0xfb; (* ADC (% r11) (% r15) *) + 0x4c; 0x11; 0xc0; (* ADC (% rax) (% r8) *) + 0x4c; 0x0f; 0x42; 0xe1; (* CMOVB (% r12) (% rcx) *) + 0x4c; 0x0f; 0x42; 0xea; (* CMOVB (% r13) (% rdx) *) + 0x4d; 0x0f; 0x42; 0xf1; (* CMOVB (% r14) (% r9) *) + 0x4d; 0x0f; 0x42; 0xfb; (* CMOVB (% r15) (% r11) *) + 0x4c; 0x89; 0x64; 0x24; 0x60; + (* MOV (Memop Quadword (%% (rsp,96))) (% r12) *) + 0x4c; 0x89; 0x6c; 0x24; 0x68; + (* MOV (Memop Quadword (%% (rsp,104))) (% r13) *) + 0x4c; 0x89; 0x74; 0x24; 0x70; + (* MOV (Memop Quadword (%% (rsp,112))) (% r14) *) + 0x4c; 0x89; 0x7c; 0x24; 0x78; + (* MOV (Memop Quadword (%% (rsp,120))) (% r15) *) + 0x48; 0x8b; 0xac; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MOV (% rbp) (Memop Quadword (%% (rsp,224))) *) + 0x45; 0x31; 0xed; (* XOR (% r13d) (% r13d) *) + 0x48; 0x8b; 0x55; 0x40; (* MOV (% rdx) (Memop Quadword (%% (rbp,64))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x8c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x94; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xa4; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x4d; 0x11; 0xec; (* ADC (% r12) (% r13) *) + 0x48; 0x8b; 0x55; 0x48; (* MOV (% rdx) (Memop Quadword (%% (rbp,72))) *) + 0x45; 0x31; 0xf6; (* XOR (% r14d) (% r14d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4d; 0x11; 0xf5; (* ADC (% r13) (% r14) *) + 0x45; 0x31; 0xff; (* XOR (% r15d) (% r15d) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0xf7; 0xd2; (* NOT (% rdx) *) + 0x48; 0x8d; 0x52; 0x02; (* LEA (% rdx) (%% (rdx,2)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xef; + (* ADCX (% r13) (% r15) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf7; + (* ADOX (% r14) (% r15) *) + 0x4d; 0x11; 0xfe; (* ADC (% r14) (% r15) *) + 0x48; 0x8b; 0x55; 0x50; (* MOV (% rdx) (Memop Quadword (%% (rbp,80))) *) + 0x45; 0x31; 0xc0; (* XOR (% r8d) (% r8d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% r8) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xc5; (* ADC (% r13) (% rax) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0x4d; 0x11; 0xc7; (* ADC (% r15) (% r8) *) + 0x48; 0x8b; 0x55; 0x58; (* MOV (% rdx) (Memop Quadword (%% (rbp,88))) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xc6; (* ADC (% r14) (% rax) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x4d; 0x11; 0xc8; (* ADC (% r8) (% r9) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0xf7; 0xd2; (* NOT (% rdx) *) + 0x48; 0x8d; 0x52; 0x02; (* LEA (% rdx) (%% (rdx,2)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% r9) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xc1; + (* ADOX (% r8) (% r9) *) + 0x4d; 0x11; 0xc8; (* ADC (% r8) (% r9) *) + 0xb9; 0x01; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 1)) *) + 0x4c; 0x01; 0xe1; (* ADD (% rcx) (% r12) *) + 0x48; 0xff; 0xca; (* DEC (% rdx) *) + 0x4c; 0x11; 0xea; (* ADC (% rdx) (% r13) *) + 0x49; 0xff; 0xc9; (* DEC (% r9) *) + 0x4c; 0x89; 0xc8; (* MOV (% rax) (% r9) *) + 0x4d; 0x11; 0xf1; (* ADC (% r9) (% r14) *) + 0x41; 0xbb; 0xfe; 0xff; 0xff; 0xff; + (* MOV (% r11d) (Imm32 (word 4294967294)) *) + 0x4d; 0x11; 0xfb; (* ADC (% r11) (% r15) *) + 0x4c; 0x11; 0xc0; (* ADC (% rax) (% r8) *) + 0x4c; 0x0f; 0x42; 0xe1; (* CMOVB (% r12) (% rcx) *) + 0x4c; 0x0f; 0x42; 0xea; (* CMOVB (% r13) (% rdx) *) + 0x4d; 0x0f; 0x42; 0xf1; (* CMOVB (% r14) (% r9) *) + 0x4d; 0x0f; 0x42; 0xfb; (* CMOVB (% r15) (% r11) *) + 0x4c; 0x89; 0x67; 0x40; (* MOV (Memop Quadword (%% (rdi,64))) (% r12) *) + 0x4c; 0x89; 0x6f; 0x48; (* MOV (Memop Quadword (%% (rdi,72))) (% r13) *) + 0x4c; 0x89; 0x77; 0x50; (* MOV (Memop Quadword (%% (rdi,80))) (% r14) *) + 0x4c; 0x89; 0x7f; 0x58; (* MOV (Memop Quadword (%% (rdi,88))) (% r15) *) + 0x45; 0x31; 0xed; (* XOR (% r13d) (% r13d) *) + 0x48; 0x8b; 0x94; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,128))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x4c; 0x24; 0x20; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x54; 0x24; 0x28; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x64; 0x24; 0x38; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x4d; 0x11; 0xec; (* ADC (% r12) (% r13) *) + 0x48; 0x8b; 0x94; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,136))) *) + 0x45; 0x31; 0xf6; (* XOR (% r14d) (% r14d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x38; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4d; 0x11; 0xf5; (* ADC (% r13) (% r14) *) + 0x45; 0x31; 0xff; (* XOR (% r15d) (% r15d) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0xf7; 0xd2; (* NOT (% rdx) *) + 0x48; 0x8d; 0x52; 0x02; (* LEA (% rdx) (%% (rdx,2)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xef; + (* ADCX (% r13) (% r15) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf7; + (* ADOX (% r14) (% r15) *) + 0x4d; 0x11; 0xfe; (* ADC (% r14) (% r15) *) + 0x48; 0x8b; 0x94; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,144))) *) + 0x45; 0x31; 0xc0; (* XOR (% r8d) (% r8d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% r8) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x38; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x49; 0x11; 0xc5; (* ADC (% r13) (% rax) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0x4d; 0x11; 0xc7; (* ADC (% r15) (% r8) *) + 0x48; 0x8b; 0x94; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,152))) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x38; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x49; 0x11; 0xc6; (* ADC (% r14) (% rax) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x4d; 0x11; 0xc8; (* ADC (% r8) (% r9) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0xf7; 0xd2; (* NOT (% rdx) *) + 0x48; 0x8d; 0x52; 0x02; (* LEA (% rdx) (%% (rdx,2)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% r9) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xc1; + (* ADOX (% r8) (% r9) *) + 0x4d; 0x11; 0xc8; (* ADC (% r8) (% r9) *) + 0xb9; 0x01; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 1)) *) + 0x4c; 0x01; 0xe1; (* ADD (% rcx) (% r12) *) + 0x48; 0xff; 0xca; (* DEC (% rdx) *) + 0x4c; 0x11; 0xea; (* ADC (% rdx) (% r13) *) + 0x49; 0xff; 0xc9; (* DEC (% r9) *) + 0x4c; 0x89; 0xc8; (* MOV (% rax) (% r9) *) + 0x4d; 0x11; 0xf1; (* ADC (% r9) (% r14) *) + 0x41; 0xbb; 0xfe; 0xff; 0xff; 0xff; + (* MOV (% r11d) (Imm32 (word 4294967294)) *) + 0x4d; 0x11; 0xfb; (* ADC (% r11) (% r15) *) + 0x4c; 0x11; 0xc0; (* ADC (% rax) (% r8) *) + 0x4c; 0x0f; 0x42; 0xe1; (* CMOVB (% r12) (% rcx) *) + 0x4c; 0x0f; 0x42; 0xea; (* CMOVB (% r13) (% rdx) *) + 0x4d; 0x0f; 0x42; 0xf1; (* CMOVB (% r14) (% r9) *) + 0x4d; 0x0f; 0x42; 0xfb; (* CMOVB (% r15) (% r11) *) + 0x4c; 0x89; 0xa4; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,128))) (% r12) *) + 0x4c; 0x89; 0xac; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,136))) (% r13) *) + 0x4c; 0x89; 0xb4; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,144))) (% r14) *) + 0x4c; 0x89; 0xbc; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,152))) (% r15) *) + 0x48; 0x8b; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,128))) *) + 0x48; 0x2b; 0x44; 0x24; 0x60; + (* SUB (% rax) (Memop Quadword (%% (rsp,96))) *) + 0x48; 0x8b; 0x8c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (% rcx) (Memop Quadword (%% (rsp,136))) *) + 0x48; 0x1b; 0x4c; 0x24; 0x68; + (* SBB (% rcx) (Memop Quadword (%% (rsp,104))) *) + 0x4c; 0x8b; 0x84; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (% r8) (Memop Quadword (%% (rsp,144))) *) + 0x4c; 0x1b; 0x44; 0x24; 0x70; + (* SBB (% r8) (Memop Quadword (%% (rsp,112))) *) + 0x4c; 0x8b; 0x8c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (% r9) (Memop Quadword (%% (rsp,152))) *) + 0x4c; 0x1b; 0x4c; 0x24; 0x78; + (* SBB (% r9) (Memop Quadword (%% (rsp,120))) *) + 0x41; 0xba; 0xff; 0xff; 0xff; 0xff; + (* MOV (% r10d) (Imm32 (word 4294967295)) *) + 0x4d; 0x19; 0xdb; (* SBB (% r11) (% r11) *) + 0x48; 0x31; 0xd2; (* XOR (% rdx) (% rdx) *) + 0x4d; 0x21; 0xda; (* AND (% r10) (% r11) *) + 0x4c; 0x29; 0xd2; (* SUB (% rdx) (% r10) *) + 0x4c; 0x01; 0xd8; (* ADD (% rax) (% r11) *) + 0x48; 0x89; 0x47; 0x20; (* MOV (Memop Quadword (%% (rdi,32))) (% rax) *) + 0x4c; 0x11; 0xd1; (* ADC (% rcx) (% r10) *) + 0x48; 0x89; 0x4f; 0x28; (* MOV (Memop Quadword (%% (rdi,40))) (% rcx) *) + 0x49; 0x83; 0xd0; 0x00; (* ADC (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x47; 0x30; (* MOV (Memop Quadword (%% (rdi,48))) (% r8) *) + 0x49; 0x11; 0xd1; (* ADC (% r9) (% rdx) *) + 0x4c; 0x89; 0x4f; 0x38; (* MOV (Memop Quadword (%% (rdi,56))) (% r9) *) + 0x48; 0x81; 0xc4; 0xe8; 0x00; 0x00; 0x00; + (* ADD (% rsp) (Imm32 (word 232)) *) + 0x41; 0x5f; (* POP (% r15) *) + 0x41; 0x5e; (* POP (% r14) *) + 0x41; 0x5d; (* POP (% r13) *) + 0x41; 0x5c; (* POP (% r12) *) + 0x5d; (* POP (% rbp) *) + 0x5b; (* POP (% rbx) *) + 0xc3 (* RET *) +];; + +let P256_MONTJADD_EXEC = X86_MK_CORE_EXEC_RULE p256_montjadd_mc;; + +(* ------------------------------------------------------------------------- *) +(* Common supporting definitions and lemmas for component proofs. *) +(* ------------------------------------------------------------------------- *) + +let p_256 = new_definition `p_256 = 115792089210356248762697446949407573530086143415290314195533631308867097853951`;; + +let nistp256 = define + `nistp256 = + (integer_mod_ring p_256, + ring_neg (integer_mod_ring p_256) (&3), + &b_256:int)`;; + +let nistp256_encode = new_definition + `nistp256_encode = montgomery_encode(256,p_256)`;; + +let nintlemma = prove + (`&(num_of_int(x rem &p_256)) = x rem &p_256`, + MATCH_MP_TAC INT_OF_NUM_OF_INT THEN MATCH_MP_TAC INT_REM_POS THEN + REWRITE_TAC[INT_OF_NUM_EQ; p_256] THEN CONV_TAC NUM_REDUCE_CONV);; + +let unilemma0 = prove + (`x = a MOD p_256 ==> x < p_256 /\ &x = &a rem &p_256`, + REWRITE_TAC[INT_OF_NUM_REM; p_256] THEN ARITH_TAC);; + +let unilemma1 = prove + (`&x = a rem &p_256 ==> x < p_256 /\ &x = a rem &p_256`, + SIMP_TAC[GSYM INT_OF_NUM_LT; INT_LT_REM_EQ; p_256] THEN INT_ARITH_TAC);; + +let unilemma2 = prove + (`X = num_of_int(x rem &p_256) ==> X < p_256 /\ &X = x rem &p_256`, + DISCH_THEN SUBST1_TAC THEN + REWRITE_TAC[GSYM INT_OF_NUM_LT; nintlemma; INT_LT_REM_EQ] THEN + REWRITE_TAC[INT_OF_NUM_LT; p_256] THEN CONV_TAC NUM_REDUCE_CONV);; + +let lemont = prove + (`(&i * x * y) rem &p_256 = (&i * x rem &p_256 * y rem &p_256) rem &p_256`, + CONV_TAC INT_REM_DOWN_CONV THEN REWRITE_TAC[]);; + +let pumont = prove + (`(&(inverse_mod p_256 (2 EXP 256)) * + (&2 pow 256 * x) rem &p_256 * (&2 pow 256 * y) rem &p_256) rem &p_256 = + (&2 pow 256 * x * y) rem &p_256`, + CONV_TAC INT_REM_DOWN_CONV THEN REWRITE_TAC[INT_REM_EQ] THEN + MATCH_MP_TAC(INTEGER_RULE + `(i * t:int == &1) (mod p) + ==> (i * (t * x) * (t * y) == t * x * y) (mod p)`) THEN + REWRITE_TAC[GSYM num_congruent; INT_OF_NUM_CLAUSES] THEN + REWRITE_TAC[INVERSE_MOD_LMUL_EQ; COPRIME_REXP; COPRIME_2; p_256] THEN + CONV_TAC NUM_REDUCE_CONV);; + +let lvs = + ["x_1",[`RSI`;`0`]; + "y_1",[`RSI`;`32`]; + "z_1",[`RSI`;`64`]; + "x_2",[`RBP`;`0`]; + "y_2",[`RBP`;`32`]; + "z_2",[`RBP`;`64`]; + "x_3",[`RDI`;`0`]; + "y_3",[`RDI`;`32`]; + "z_3",[`RDI`;`64`]; + "z1sq",[`RSP`;`0`]; + "ww",[`RSP`;`0`]; + "yd",[`RSP`;`32`]; + "y2a",[`RSP`;`32`]; + "x2a",[`RSP`;`64`]; + "zzx2",[`RSP`;`64`]; + "zz",[`RSP`;`96`]; + "t1",[`RSP`;`96`]; + "t2",[`RSP`;`128`]; + "x1a",[`RSP`;`128`]; + "zzx1",[`RSP`;`128`]; + "xd",[`RSP`;`160`]; + "z2sq",[`RSP`;`160`]; + "y1a",[`RSP`;`192`]];; + +(* ------------------------------------------------------------------------- *) +(* Instances of montsqr. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_MONTSQR_P256_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE p256_montjadd_mc) 100 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1. + !a. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = a + ==> + nonoverlapping (word pc,0x27bc) (word_add (read p3 t) (word n3),32) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST p256_montjadd_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read RBP s = read RBP t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) s = + a) + (\s. read RIP s = pcout /\ + (a EXP 2 <= 2 EXP 256 * p_256 + ==> read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 4)) s = + (inverse_mod p_256 (2 EXP 256) * a EXP 2) MOD p_256)) + (MAYCHANGE [RIP; RAX; RBX; RBP; RCX; RDX; + R8; R9; R10; R11; R12; R13; R14; R15] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 4)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + (*** Globalize the a EXP 2 <= 2 EXP 256 * p_256 assumption ***) + + ASM_CASES_TAC `a EXP 2 <= 2 EXP 256 * p_256` THENL + [ASM_REWRITE_TAC[]; X86_SIM_TAC P256_MONTJADD_EXEC (1--100)] THEN + ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "x_" o lhand o concl) THEN + + (*** Simulate the core pre-reduced result accumulation ***) + + X86_ACCSTEPS_TAC P256_MONTJADD_EXEC (1--82) (1--82) THEN + ABBREV_TAC + `t = bignum_of_wordlist [sum_s71; sum_s75; sum_s78; sum_s80; sum_s82]` THEN + SUBGOAL_THEN + `t < 2 * p_256 /\ (2 EXP 256 * t == a EXP 2) (mod p_256)` + STRIP_ASSUME_TAC THENL + [RULE_ASSUM_TAC(REWRITE_RULE[VAL_WORD_BITVAL]) THEN + ACCUMULATOR_POP_ASSUM_LIST + (STRIP_ASSUME_TAC o end_itlist CONJ o DECARRY_RULE) THEN + CONJ_TAC THENL + [FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP (ARITH_RULE + `ab <= 2 EXP 256 * p + ==> 2 EXP 256 * t < ab + 2 EXP 256 * p ==> t < 2 * p`)) THEN + MAP_EVERY EXPAND_TAC ["a"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + REWRITE_TAC[p_256; REAL_ARITH `a:real < b + c <=> a - b < c`] THEN + ASM_REWRITE_TAC[] THEN BOUNDER_TAC[]; + REWRITE_TAC[REAL_CONGRUENCE; p_256] THEN CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["a"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ASM_REWRITE_TAC[] THEN REAL_INTEGER_TAC]; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Final correction stage ***) + + X86_ACCSTEPS_TAC P256_MONTJADD_EXEC [84;86;89;91;92] (83--100) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + TRANS_TAC EQ_TRANS `t MOD p_256` THEN CONJ_TAC THENL + [ALL_TAC; + REWRITE_TAC[GSYM CONG] THEN FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP + (NUMBER_RULE + `(e * t == a EXP 2) (mod p) + ==> (e * i == 1) (mod p) ==> (t == i * a EXP 2) (mod p)`)) THEN + REWRITE_TAC[INVERSE_MOD_RMUL_EQ; COPRIME_REXP; COPRIME_2] THEN + REWRITE_TAC[p_256] THEN CONV_TAC NUM_REDUCE_CONV] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC EQUAL_FROM_CONGRUENT_MOD_MOD THEN + MAP_EVERY EXISTS_TAC + [`256`; `if t < p_256 then &t:real else &t - &p_256`] THEN + REPEAT CONJ_TAC THENL + [REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN BOUNDER_TAC[]; + REWRITE_TAC[p_256] THEN ARITH_TAC; + REWRITE_TAC[p_256] THEN ARITH_TAC; + ALL_TAC; + ASM_SIMP_TAC[MOD_CASES] THEN + GEN_REWRITE_TAC LAND_CONV [COND_RAND] THEN + SIMP_TAC[REAL_OF_NUM_SUB; GSYM NOT_LT]] THEN + SUBGOAL_THEN `carry_s92 <=> p_256 <= t` SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LE THEN EXISTS_TAC `320` THEN + EXPAND_TAC "t" THEN + REWRITE_TAC[p_256; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + CONV_TAC NUM_REDUCE_CONV THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + REWRITE_TAC[GSYM NOT_LT; COND_SWAP]] THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[] THEN EXPAND_TAC "t" THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist; p_256] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + ASM_REWRITE_TAC[BITVAL_CLAUSES; VAL_WORD_BITVAL] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instances of montmul. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_MONTMUL_P256_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE p256_montjadd_mc) 113 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1 p2 n2. + !a. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = a + ==> + !b. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) t = b + ==> + nonoverlapping (word pc,0x27bc) (word_add (read p3 t) (word n3),32) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST p256_montjadd_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read RBP s = read RBP t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) s = + a /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) s = + b) + (\s. read RIP s = pcout /\ + (a * b <= 2 EXP 256 * p_256 + ==> read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 4)) s = + (inverse_mod p_256 (2 EXP 256) * a * b) MOD p_256)) + (MAYCHANGE [RIP; RAX; RBX; RCX; RDX; + R8; R9; R10; R11; R12; R13; R14; R15] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 4)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + (*** Globalize the a * b <= 2 EXP 256 * p_256 assumption ***) + + ASM_CASES_TAC `a * b <= 2 EXP 256 * p_256` THENL + [ASM_REWRITE_TAC[]; X86_SIM_TAC P256_MONTJADD_EXEC (1--113)] THEN + ENSURES_INIT_TAC "s1" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "y_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "x_" o lhand o concl) THEN + + (*** Simulate the core pre-reduced result accumulation ***) + + X86_ACCSTEPS_TAC P256_MONTJADD_EXEC (2--96) (2--96) THEN + ABBREV_TAC + `t = bignum_of_wordlist [sum_s84; sum_s89; sum_s92; sum_s94; sum_s96]` THEN + SUBGOAL_THEN + `t < 2 * p_256 /\ (2 EXP 256 * t == a * b) (mod p_256)` + STRIP_ASSUME_TAC THENL + [ACCUMULATOR_POP_ASSUM_LIST + (STRIP_ASSUME_TAC o end_itlist CONJ o DECARRY_RULE) THEN + CONJ_TAC THENL + [FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP (ARITH_RULE + `ab <= 2 EXP 256 * p + ==> 2 EXP 256 * t < ab + 2 EXP 256 * p ==> t < 2 * p`)) THEN + MAP_EVERY EXPAND_TAC ["a"; "b"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + REWRITE_TAC[p_256; REAL_ARITH `a:real < b + c <=> a - b < c`] THEN + ASM_REWRITE_TAC[] THEN BOUNDER_TAC[]; + REWRITE_TAC[REAL_CONGRUENCE; p_256] THEN CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["a"; "b"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ASM_REWRITE_TAC[] THEN REAL_INTEGER_TAC]; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Final correction stage ***) + + X86_ACCSTEPS_TAC P256_MONTJADD_EXEC [98;100;103;105;106] (97--114) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + TRANS_TAC EQ_TRANS `t MOD p_256` THEN CONJ_TAC THENL + [ALL_TAC; + REWRITE_TAC[GSYM CONG] THEN FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP + (NUMBER_RULE + `(e * t == a * b) (mod p) + ==> (e * i == 1) (mod p) ==> (t == i * a * b) (mod p)`)) THEN + REWRITE_TAC[INVERSE_MOD_RMUL_EQ; COPRIME_REXP; COPRIME_2] THEN + REWRITE_TAC[p_256] THEN CONV_TAC NUM_REDUCE_CONV] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC EQUAL_FROM_CONGRUENT_MOD_MOD THEN + MAP_EVERY EXISTS_TAC + [`256`; `if t < p_256 then &t:real else &t - &p_256`] THEN + REPEAT CONJ_TAC THENL + [REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN BOUNDER_TAC[]; + REWRITE_TAC[p_256] THEN ARITH_TAC; + REWRITE_TAC[p_256] THEN ARITH_TAC; + ALL_TAC; + ASM_SIMP_TAC[MOD_CASES] THEN + GEN_REWRITE_TAC LAND_CONV [COND_RAND] THEN + SIMP_TAC[REAL_OF_NUM_SUB; GSYM NOT_LT]] THEN + SUBGOAL_THEN `carry_s106 <=> p_256 <= t` SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LE THEN EXISTS_TAC `320` THEN + EXPAND_TAC "t" THEN + REWRITE_TAC[p_256; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + CONV_TAC NUM_REDUCE_CONV THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + REWRITE_TAC[GSYM NOT_LT; COND_SWAP]] THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[] THEN EXPAND_TAC "t" THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist; p_256] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + ASM_REWRITE_TAC[BITVAL_CLAUSES; VAL_WORD_BITVAL] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instances of sub. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_SUB_P256_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE p256_montjadd_mc) 21 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) t = n + ==> + nonoverlapping (word pc,0x27bc) (word_add (read p3 t) (word n3),32) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST p256_montjadd_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read RBP s = read RBP t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) s = + n) + (\s. read RIP s = pcout /\ + (m < p_256 /\ n < p_256 + ==> &(read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 4)) s) = (&m - &n) rem &p_256)) + (MAYCHANGE [RIP; RAX; RDX; RCX; R8; R9; R10; R11] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 4)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "m_" o lhand o concl) THEN + + X86_ACCSTEPS_TAC P256_MONTJADD_EXEC (1--8) (1--8) THEN + + SUBGOAL_THEN `carry_s8 <=> m < n` SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN EXISTS_TAC `256` THEN + MAP_EVERY EXPAND_TAC ["m"; "n"] THEN REWRITE_TAC[GSYM REAL_OF_NUM_ADD] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_MUL; GSYM REAL_OF_NUM_POW] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ALL_TAC] THEN + + X86_ACCSTEPS_TAC P256_MONTJADD_EXEC (14--21) (9--21) THEN + + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN STRIP_TAC THEN + CONV_TAC(LAND_CONV(RAND_CONV BIGNUM_EXPAND_CONV)) THEN + ASM_REWRITE_TAC[] THEN DISCARD_STATE_TAC "s21" THEN + + CONV_TAC SYM_CONV THEN MATCH_MP_TAC INT_REM_UNIQ THEN + EXISTS_TAC `--(&(bitval(m < n))):int` THEN REWRITE_TAC[INT_ABS_NUM] THEN + REWRITE_TAC[INT_ARITH `m - n:int = --b * p + z <=> z = b * p + m - n`] THEN + REWRITE_TAC[int_eq; int_le; int_lt] THEN + REWRITE_TAC[int_add_th; int_mul_th; int_of_num_th; int_sub_th] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_ADD; GSYM REAL_OF_NUM_MUL; + GSYM REAL_OF_NUM_POW] THEN + MATCH_MP_TAC(REAL_ARITH + `!t:real. p < t /\ + (&0 <= a /\ a < p) /\ + (&0 <= z /\ z < t) /\ + ((&0 <= z /\ z < t) /\ (&0 <= a /\ a < t) ==> z = a) + ==> z = a /\ &0 <= z /\ z < p`) THEN + EXISTS_TAC `(&2:real) pow 256` THEN + + CONJ_TAC THENL [REWRITE_TAC[p_256] THEN REAL_ARITH_TAC; ALL_TAC] THEN + CONJ_TAC THENL + [MAP_EVERY UNDISCH_TAC [`m < p_256`; `n < p_256`] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_LT] THEN + ASM_CASES_TAC `&m:real < &n` THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + POP_ASSUM MP_TAC THEN REWRITE_TAC[p_256] THEN REAL_ARITH_TAC; + ALL_TAC] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; STRIP_TAC] THEN + + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`256`; `&0:real`] THEN + ASM_REWRITE_TAC[] THEN + CONJ_TAC THENL [REAL_INTEGER_TAC; ALL_TAC] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + REWRITE_TAC[WORD_AND_MASK] THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC WORD_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["m"; "n"] THEN REWRITE_TAC[GSYM REAL_OF_NUM_ADD] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_MUL; GSYM REAL_OF_NUM_POW; p_256] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instances of amontsqr. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_AMONTSQR_P256_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE p256_montjadd_mc) 98 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1. + !a. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = a + ==> + nonoverlapping (word pc,0x27bc) (word_add (read p3 t) (word n3),32) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST p256_montjadd_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read RBP s = read RBP t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) s = + a) + (\s. read RIP s = pcout /\ + read(memory :> bytes(word_add (read p3 t) (word n3),8 * 4)) s + < 2 EXP 256 /\ + (read(memory :> bytes(word_add (read p3 t) (word n3),8 * 4)) s == + inverse_mod p_256 (2 EXP 256) * a EXP 2) (mod p_256)) + (MAYCHANGE [RIP; RAX; RBX; RCX; RDX; + R8; R9; R10; R11; R12; R13; R14; R15] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 4)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "x_" o lhand o concl) THEN + + X86_ACCSTEPS_TAC P256_MONTJADD_EXEC (1--82) (1--82) THEN + + SUBGOAL_THEN + `word_add sum_s81 (word (bitval carry_s80)):int64 = sum_s82` + SUBST_ALL_TAC THENL + [ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o hd) THEN + REWRITE_TAC[GSYM VAL_CONG; REAL_OF_NUM_CLAUSES; DIMINDEX_64] THEN + REWRITE_TAC[VAL_WORD_ADD; DIMINDEX_64; CONG; VAL_WORD_BITVAL] THEN + CONV_TAC MOD_DOWN_CONV THEN REWRITE_TAC[GSYM CONG] THEN + SPEC_TAC(`2 EXP 64`,`p:num`) THEN CONV_TAC NUMBER_RULE; + ALL_TAC] THEN + + ABBREV_TAC + `t = bignum_of_wordlist [sum_s71; sum_s75; sum_s78; sum_s80; sum_s82]` THEN + SUBGOAL_THEN + `t < 2 EXP 256 + p_256 /\ (2 EXP 256 * t == a EXP 2) (mod p_256)` + STRIP_ASSUME_TAC THENL + [RULE_ASSUM_TAC(REWRITE_RULE[VAL_WORD_BITVAL]) THEN + ACCUMULATOR_POP_ASSUM_LIST + (STRIP_ASSUME_TAC o end_itlist CONJ o DECARRY_RULE) THEN + CONJ_TAC THENL + [MATCH_MP_TAC(ARITH_RULE + `2 EXP 256 * t <= (2 EXP 256 - 1) EXP 2 + (2 EXP 256 - 1) * p + ==> t < 2 EXP 256 + p`) THEN + REWRITE_TAC[p_256] THEN CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["a"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + REWRITE_TAC[p_256; REAL_ARITH `a:real < b + c <=> a - b < c`] THEN + ASM_REWRITE_TAC[] THEN BOUNDER_TAC[]; + REWRITE_TAC[REAL_CONGRUENCE; p_256] THEN CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["a"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ASM_REWRITE_TAC[] THEN REAL_INTEGER_TAC]; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Final correction stage ***) + + X86_ACCSTEPS_TAC P256_MONTJADD_EXEC (91--94) (83--98) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONJ_TAC THENL + [CONV_TAC(ONCE_DEPTH_CONV BIGNUM_EXPAND_CONV) THEN + ASM_REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN BOUNDER_TAC[]; + ALL_TAC] THEN + FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP + (NUMBER_RULE + `(e * t == ab) (mod p) + ==> (e * i == 1) (mod p) /\ (s == t) (mod p) + ==> (s == i * ab) (mod p)`)) THEN + REWRITE_TAC[INVERSE_MOD_RMUL_EQ; COPRIME_REXP; COPRIME_2] THEN + CONJ_TAC THENL + [REWRITE_TAC[p_256] THEN CONV_TAC NUM_REDUCE_CONV; ALL_TAC] THEN + SUBGOAL_THEN `val(sum_s82:int64) = 0 <=> ~(2 EXP 256 <= t)` + SUBST_ALL_TAC THENL + [REWRITE_TAC[NOT_LE] THEN EXPAND_TAC "t" THEN + REWRITE_TAC[BIGNUM_OF_WORDLIST_SPLIT_RULE(4,1)] THEN + REWRITE_TAC[BIGNUM_OF_WORDLIST_SING] THEN MATCH_MP_TAC(ARITH_RULE + `l < 2 EXP 256 ==> (h = 0 <=> l + 2 EXP 256 * h < 2 EXP 256)`) THEN + CONV_TAC NUM_REDUCE_CONV THEN BOUNDER_TAC[]; + ABBREV_TAC `b <=> 2 EXP 256 <= t`] THEN + MATCH_MP_TAC(NUMBER_RULE `!b:num. x + b * p = y ==> (x == y) (mod p)`) THEN + EXISTS_TAC `bitval b` THEN REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN + ONCE_REWRITE_TAC[REAL_ARITH `a + b:real = c <=> c - b = a`] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`256`; `&0:real`] THEN CONJ_TAC THENL + [EXPAND_TAC "b" THEN UNDISCH_TAC `t < 2 EXP 256 + p_256` THEN + REWRITE_TAC[bitval; p_256; GSYM REAL_OF_NUM_CLAUSES] THEN REAL_ARITH_TAC; + REWRITE_TAC[INTEGER_CLOSED]] THEN + CONJ_TAC THENL + [CONV_TAC(ONCE_DEPTH_CONV BIGNUM_EXPAND_CONV) THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN BOUNDER_TAC[]; + ALL_TAC] THEN + CONV_TAC(ONCE_DEPTH_CONV BIGNUM_EXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + EXPAND_TAC "t" THEN REWRITE_TAC[bignum_of_wordlist] THEN + ASM_REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN + ACCUMULATOR_POP_ASSUM_LIST (MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + BOOL_CASES_TAC `b:bool` THEN REWRITE_TAC[BITVAL_CLAUSES; p_256] THEN + CONV_TAC WORD_REDUCE_CONV THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Overall point operation proof. *) +(* ------------------------------------------------------------------------- *) + +let P256_MONTJADD_CORRECT = time prove + (`!p3 p1 t1 p2 t2 pc stackpointer. + ALLPAIRS nonoverlapping + [(p3,96); (stackpointer,232)] + [(word pc,0x27bc); (p1,96); (p2,96)] /\ + nonoverlapping (p3,96) (stackpointer,232) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST p256_montjadd_mc) /\ + read RIP s = word(pc + 0x11) /\ + read RSP s = stackpointer /\ + C_ARGUMENTS [p3; p1; p2] s /\ + bignum_triple_from_memory (p1,4) s = t1 /\ + bignum_triple_from_memory (p2,4) s = t2) + (\s. read RIP s = word (pc + 0x27aa) /\ + (!x1 y1 z1 x2 y2 z2. + ~(z1 = &0) /\ ~(z2 = &0) /\ + ~(jacobian_eq (integer_mod_ring p_256) + (x1,y1,z1) (x2,y2,z2)) /\ + ~(jacobian_eq (integer_mod_ring p_256) + (jacobian_neg nistp256 (x1,y1,z1)) + (x2,y2,z2)) /\ + t1 = tripled nistp256_encode (x1,y1,z1) /\ + t2 = tripled nistp256_encode (x2,y2,z2) + ==> bignum_triple_from_memory(p3,4) s = + tripled nistp256_encode + (jacobian_add nistp256 (x1,y1,z1) (x2,y2,z2)))) + (MAYCHANGE [RIP; RAX; RBX; RCX; RDX; RBP; + R8; R9; R10; R11; R12; R13; R14; R15] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,96); + memory :> bytes(stackpointer,232)])`, + REWRITE_TAC[FORALL_PAIR_THM] THEN + MAP_EVERY X_GEN_TAC + [`p3:int64`; `p1:int64`; `x1:num`; `y1:num`; `z1:num`; `p2:int64`; + `x2:num`; `y2:num`; `z2:num`; `pc:num`; `stackpointer:int64`] THEN + REWRITE_TAC[ALLPAIRS; ALL; NONOVERLAPPING_CLAUSES] THEN STRIP_TAC THEN + REWRITE_TAC[C_ARGUMENTS; SOME_FLAGS; PAIR_EQ; bignum_triple_from_memory] THEN + CONV_TAC(ONCE_DEPTH_CONV NUM_MULT_CONV) THEN + CONV_TAC(ONCE_DEPTH_CONV NORMALIZE_RELATIVE_ADDRESS_CONV) THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + + LOCAL_AMONTSQR_P256_TAC 2 ["z1sq";"z_1"] THEN + LOCAL_AMONTSQR_P256_TAC 0 ["z2sq";"z_2"] THEN + LOCAL_MONTMUL_P256_TAC 0 ["y1a";"z_2";"y_1"] THEN + LOCAL_MONTMUL_P256_TAC 0 ["y2a";"z_1";"y_2"] THEN + LOCAL_MONTMUL_P256_TAC 0 ["x2a";"z1sq";"x_2"] THEN + LOCAL_MONTMUL_P256_TAC 0 ["x1a";"z2sq";"x_1"] THEN + LOCAL_MONTMUL_P256_TAC 0 ["y2a";"z1sq";"y2a"] THEN + LOCAL_MONTMUL_P256_TAC 0 ["y1a";"z2sq";"y1a"] THEN + LOCAL_SUB_P256_TAC 0 ["xd";"x2a";"x1a"] THEN + LOCAL_SUB_P256_TAC 0 ["yd";"y2a";"y1a"] THEN + LOCAL_AMONTSQR_P256_TAC 0 ["zz";"xd"] THEN + LOCAL_MONTSQR_P256_TAC 0 ["ww";"yd"] THEN + LOCAL_MONTMUL_P256_TAC 0 ["zzx1";"zz";"x1a"] THEN + LOCAL_MONTMUL_P256_TAC 0 ["zzx2";"zz";"x2a"] THEN + LOCAL_SUB_P256_TAC 0 ["x_3";"ww";"zzx1"] THEN + LOCAL_SUB_P256_TAC 0 ["t1";"zzx2";"zzx1"] THEN + LOCAL_MONTMUL_P256_TAC 0 ["xd";"xd";"z_1"] THEN + LOCAL_SUB_P256_TAC 0 ["x_3";"x_3";"zzx2"] THEN + LOCAL_SUB_P256_TAC 0 ["t2";"zzx1";"x_3"] THEN + LOCAL_MONTMUL_P256_TAC 0 ["t1";"t1";"y1a"] THEN + LOCAL_MONTMUL_P256_TAC 1 ["z_3";"xd";"z_2"] THEN + LOCAL_MONTMUL_P256_TAC 0 ["t2";"yd";"t2"] THEN + LOCAL_SUB_P256_TAC 0 ["y_3";"t2";"t1"] THEN + + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + DISCARD_STATE_TAC "s26" THEN + DISCARD_MATCHING_ASSUMPTIONS [`nonoverlapping_modulo a b c`] THEN + + MAP_EVERY X_GEN_TAC + [`x1':int`; `y1':int`; `z1':int`; `x2':int`; `y2':int`; `z2':int`] THEN + REPLICATE_TAC 4 (DISCH_THEN(CONJUNCTS_THEN2 ASSUME_TAC MP_TAC)) THEN + REWRITE_TAC[tripled; nistp256_encode; montgomery_encode; PAIR_EQ] THEN + + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN + (STRIP_ASSUME_TAC o MATCH_MP unilemma2)) THEN + + REPEAT(FIRST_X_ASSUM(MP_TAC o check (is_imp o concl))) THEN + REPEAT(ANTS_TAC THENL + [REWRITE_TAC[p_256] THEN RULE_ASSUM_TAC(REWRITE_RULE[p_256]) THEN + CONV_TAC NUM_REDUCE_CONV THEN ASM BOUNDER_TAC[]; + (DISCH_THEN(STRIP_ASSUME_TAC o MATCH_MP unilemma0) ORELSE + DISCH_THEN(STRIP_ASSUME_TAC o MATCH_MP unilemma1))]) THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o GEN_REWRITE_RULE I [GSYM NOT_LE])) THEN + + RULE_ASSUM_TAC(REWRITE_RULE + [num_congruent; GSYM INT_OF_NUM_CLAUSES; GSYM INT_OF_NUM_REM]) THEN + RULE_ASSUM_TAC(REWRITE_RULE[GSYM INT_REM_EQ]) THEN + RULE_ASSUM_TAC(ONCE_REWRITE_RULE[GSYM INT_SUB_REM; GSYM INT_ADD_REM]) THEN + RULE_ASSUM_TAC(REWRITE_RULE[INT_POW_2]) THEN + RULE_ASSUM_TAC(GEN_REWRITE_RULE (RAND_CONV o TRY_CONV) [lemont]) THEN + + ASM_REWRITE_TAC[jacobian_add; nistp256] THEN + ASM_REWRITE_TAC[GSYM nistp256] THEN + REWRITE_TAC[INTEGER_MOD_RING_CLAUSES] THEN + CONV_TAC INT_REDUCE_CONV THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN + CONV_TAC INT_REM_DOWN_CONV THEN + REWRITE_TAC[tripled; nistp256_encode; montgomery_encode] THEN + REWRITE_TAC[PAIR_EQ; GSYM INT_OF_NUM_EQ; nintlemma] THEN + CONV_TAC INT_REM_DOWN_CONV THEN + + ASM_REWRITE_TAC[pumont; INT_REM_REM; GSYM INT_ADD_LDISTRIB; + GSYM INT_ADD_LDISTRIB; GSYM INT_SUB_LDISTRIB; + INT_SUB_REM; INT_ADD_REM] THEN + + REPEAT CONJ_TAC THEN AP_THM_TAC THEN AP_TERM_TAC THEN AP_TERM_TAC THEN + INT_ARITH_TAC);; + +let P256_MONTJADD_SUBROUTINE_CORRECT = time prove + (`!p3 p1 t1 p2 t2 pc stackpointer returnaddress. + ALLPAIRS nonoverlapping + [(p3,96); (word_sub stackpointer (word 280),280)] + [(word pc,0x27bc); (p1,96); (p2,96)] /\ + nonoverlapping (p3,96) (word_sub stackpointer (word 280),288) + ==> ensures x86 + (\s. bytes_loaded s (word pc) p256_montjadd_mc /\ + read RIP s = word pc /\ + read RSP s = stackpointer /\ + read (memory :> bytes64 stackpointer) s = returnaddress /\ + C_ARGUMENTS [p3; p1; p2] s /\ + bignum_triple_from_memory (p1,4) s = t1 /\ + bignum_triple_from_memory (p2,4) s = t2) + (\s. read RIP s = returnaddress /\ + read RSP s = word_add stackpointer (word 8) /\ + (!x1 y1 z1 x2 y2 z2. + ~(z1 = &0) /\ ~(z2 = &0) /\ + ~(jacobian_eq (integer_mod_ring p_256) + (x1,y1,z1) (x2,y2,z2)) /\ + ~(jacobian_eq (integer_mod_ring p_256) + (jacobian_neg nistp256 (x1,y1,z1)) + (x2,y2,z2)) /\ + t1 = tripled nistp256_encode (x1,y1,z1) /\ + t2 = tripled nistp256_encode (x2,y2,z2) + ==> bignum_triple_from_memory(p3,4) s = + tripled nistp256_encode + (jacobian_add nistp256 (x1,y1,z1) (x2,y2,z2)))) + (MAYCHANGE [RIP; RSP; RAX; RCX; RDX; R8; R9; R10; R11] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,96); + memory :> bytes(word_sub stackpointer (word 280),280)])`, + X86_PROMOTE_RETURN_STACK_TAC p256_montjadd_mc P256_MONTJADD_CORRECT + `[RBX; RBP; R12; R13; R14; R15]` 280);; + +(* ------------------------------------------------------------------------- *) +(* Correctness of Windows ABI version. *) +(* ------------------------------------------------------------------------- *) + +let windows_p256_montjadd_mc = define_from_elf "windows_p256_montjadd_mc" + "x86/p256/p256_montjadd.obj";; + +let WINDOWS_P256_MONTJADD_SUBROUTINE_CORRECT = time prove + (`!p3 p1 t1 p2 t2 pc stackpointer returnaddress. + ALLPAIRS nonoverlapping + [(p3,96); (word_sub stackpointer (word 296),296)] + [(word pc,0x27c9); (p1,96); (p2,96)] /\ + nonoverlapping (p3,96) (word_sub stackpointer (word 296),304) + ==> ensures x86 + (\s. bytes_loaded s (word pc) windows_p256_montjadd_mc /\ + read RIP s = word pc /\ + read RSP s = stackpointer /\ + read (memory :> bytes64 stackpointer) s = returnaddress /\ + WINDOWS_C_ARGUMENTS [p3; p1; p2] s /\ + bignum_triple_from_memory (p1,4) s = t1 /\ + bignum_triple_from_memory (p2,4) s = t2) + (\s. read RIP s = returnaddress /\ + read RSP s = word_add stackpointer (word 8) /\ + (!x1 y1 z1 x2 y2 z2. + ~(z1 = &0) /\ ~(z2 = &0) /\ + ~(jacobian_eq (integer_mod_ring p_256) + (x1,y1,z1) (x2,y2,z2)) /\ + ~(jacobian_eq (integer_mod_ring p_256) + (jacobian_neg nistp256 (x1,y1,z1)) + (x2,y2,z2)) /\ + t1 = tripled nistp256_encode (x1,y1,z1) /\ + t2 = tripled nistp256_encode (x2,y2,z2) + ==> bignum_triple_from_memory(p3,4) s = + tripled nistp256_encode + (jacobian_add nistp256 (x1,y1,z1) (x2,y2,z2)))) + (MAYCHANGE [RIP; RSP; RAX; RCX; RDX; R8; R9; R10; R11] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,96); + memory :> bytes(word_sub stackpointer (word 296),296)])`, + WINDOWS_X86_WRAP_STACK_TAC + windows_p256_montjadd_mc p256_montjadd_mc + P256_MONTJADD_CORRECT + `[RBX; RBP; R12; R13; R14; R15]` 280);; diff --git a/x86/proofs/p256_montjdouble.ml b/x86/proofs/p256_montjdouble.ml new file mode 100644 index 0000000000..c7adc52446 --- /dev/null +++ b/x86/proofs/p256_montjdouble.ml @@ -0,0 +1,3204 @@ +(* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + *) + +(* ========================================================================= *) +(* Point doubling in Montgomery-Jacobian coordinates for NIST P-256 curve. *) +(* ========================================================================= *) + +needs "x86/proofs/base.ml";; +needs "common/ecencoding.ml";; +needs "EC/jacobian.ml";; +needs "EC/nistp256.ml";; + +prioritize_int();; +prioritize_real();; +prioritize_num();; + +(**** print_literal_from_elf "x86/p256/p256_montjdouble.o";; + ****) + +let p256_montjdouble_mc = define_assert_from_elf + "p256_montjdouble_mc" "x86/p256/p256_montjdouble.o" +[ + 0x53; (* PUSH (% rbx) *) + 0x55; (* PUSH (% rbp) *) + 0x41; 0x54; (* PUSH (% r12) *) + 0x41; 0x55; (* PUSH (% r13) *) + 0x41; 0x56; (* PUSH (% r14) *) + 0x41; 0x57; (* PUSH (% r15) *) + 0x48; 0x81; 0xec; 0xe0; 0x00; 0x00; 0x00; + (* SUB (% rsp) (Imm32 (word 224)) *) + 0x48; 0x8b; 0x56; 0x40; (* MOV (% rdx) (Memop Quadword (%% (rsi,64))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0xfa; + (* MULX4 (% r15,% r8) (% rdx,% rdx) *) + 0xc4; 0x62; 0xb3; 0xf6; 0x56; 0x48; + (* MULX4 (% r10,% r9) (% rdx,Memop Quadword (%% (rsi,72))) *) + 0xc4; 0x62; 0xa3; 0xf6; 0x66; 0x58; + (* MULX4 (% r12,% r11) (% rdx,Memop Quadword (%% (rsi,88))) *) + 0x48; 0x8b; 0x56; 0x50; (* MOV (% rdx) (Memop Quadword (%% (rsi,80))) *) + 0xc4; 0x62; 0x93; 0xf6; 0x76; 0x58; + (* MULX4 (% r14,% r13) (% rdx,Memop Quadword (%% (rsi,88))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x40; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,64))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x48; 0x8b; 0x56; 0x58; (* MOV (% rdx) (Memop Quadword (%% (rsi,88))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% rbp) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf5; + (* ADOX (% r14) (% rbp) *) + 0x49; 0x11; 0xee; (* ADC (% r14) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% r9) (% r9) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xcf; + (* ADOX (% r9) (% r15) *) + 0x48; 0x8b; 0x56; 0x48; (* MOV (% rdx) (Memop Quadword (%% (rsi,72))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xd2; + (* ADCX (% r10) (% r10) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADOX (% r10) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% r11) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% r11) (% rdx) *) + 0x48; 0x8b; 0x56; 0x50; (* MOV (% rdx) (Memop Quadword (%% (rsi,80))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xe4; + (* ADCX (% r12) (% r12) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADOX (% r12) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% r13) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xea; + (* ADOX (% r13) (% rdx) *) + 0x48; 0x8b; 0x56; 0x58; (* MOV (% rdx) (Memop Quadword (%% (rsi,88))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xfa; + (* MULX4 (% r15,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf6; + (* ADCX (% r14) (% r14) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% rax) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADCX (% r15) (% rbp) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADOX (% r15) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0xba; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rdx) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% rbp) *) + 0x41; 0x89; 0xe9; (* MOV (% r9d) (% ebp) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcd; + (* ADOX (% r9) (% rbp) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xcd; + (* ADCX (% r9) (% rbp) *) + 0x4d; 0x01; 0xce; (* ADD (% r14) (% r9) *) + 0x49; 0x11; 0xef; (* ADC (% r15) (% rbp) *) + 0x41; 0x89; 0xe8; (* MOV (% r8d) (% ebp) *) + 0x49; 0x11; 0xe8; (* ADC (% r8) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0xba; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rdx) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADCX (% r15) (% rbp) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc5; + (* ADOX (% r8) (% rbp) *) + 0x49; 0x11; 0xe8; (* ADC (% r8) (% rbp) *) + 0xb9; 0x01; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 1)) *) + 0x4c; 0x01; 0xe1; (* ADD (% rcx) (% r12) *) + 0x48; 0x8d; 0x52; 0xff; (* LEA (% rdx) (%% (rdx,18446744073709551615)) *) + 0x4c; 0x11; 0xea; (* ADC (% rdx) (% r13) *) + 0x48; 0x8d; 0x6d; 0xff; (* LEA (% rbp) (%% (rbp,18446744073709551615)) *) + 0x48; 0x89; 0xe8; (* MOV (% rax) (% rbp) *) + 0x4c; 0x11; 0xf5; (* ADC (% rbp) (% r14) *) + 0x41; 0xbb; 0xfe; 0xff; 0xff; 0xff; + (* MOV (% r11d) (Imm32 (word 4294967294)) *) + 0x4d; 0x11; 0xfb; (* ADC (% r11) (% r15) *) + 0x4c; 0x11; 0xc0; (* ADC (% rax) (% r8) *) + 0x4c; 0x0f; 0x42; 0xe1; (* CMOVB (% r12) (% rcx) *) + 0x4c; 0x0f; 0x42; 0xea; (* CMOVB (% r13) (% rdx) *) + 0x4c; 0x0f; 0x42; 0xf5; (* CMOVB (% r14) (% rbp) *) + 0x4d; 0x0f; 0x42; 0xfb; (* CMOVB (% r15) (% r11) *) + 0x4c; 0x89; 0x24; 0x24; (* MOV (Memop Quadword (%% (rsp,0))) (% r12) *) + 0x4c; 0x89; 0x6c; 0x24; 0x08; + (* MOV (Memop Quadword (%% (rsp,8))) (% r13) *) + 0x4c; 0x89; 0x74; 0x24; 0x10; + (* MOV (Memop Quadword (%% (rsp,16))) (% r14) *) + 0x4c; 0x89; 0x7c; 0x24; 0x18; + (* MOV (Memop Quadword (%% (rsp,24))) (% r15) *) + 0x48; 0x8b; 0x56; 0x20; (* MOV (% rdx) (Memop Quadword (%% (rsi,32))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0xfa; + (* MULX4 (% r15,% r8) (% rdx,% rdx) *) + 0xc4; 0x62; 0xb3; 0xf6; 0x56; 0x28; + (* MULX4 (% r10,% r9) (% rdx,Memop Quadword (%% (rsi,40))) *) + 0xc4; 0x62; 0xa3; 0xf6; 0x66; 0x38; + (* MULX4 (% r12,% r11) (% rdx,Memop Quadword (%% (rsi,56))) *) + 0x48; 0x8b; 0x56; 0x30; (* MOV (% rdx) (Memop Quadword (%% (rsi,48))) *) + 0xc4; 0x62; 0x93; 0xf6; 0x76; 0x38; + (* MULX4 (% r14,% r13) (% rdx,Memop Quadword (%% (rsi,56))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x48; 0x8b; 0x56; 0x38; (* MOV (% rdx) (Memop Quadword (%% (rsi,56))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% rbp) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf5; + (* ADOX (% r14) (% rbp) *) + 0x49; 0x11; 0xee; (* ADC (% r14) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% r9) (% r9) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xcf; + (* ADOX (% r9) (% r15) *) + 0x48; 0x8b; 0x56; 0x28; (* MOV (% rdx) (Memop Quadword (%% (rsi,40))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xd2; + (* ADCX (% r10) (% r10) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADOX (% r10) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% r11) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% r11) (% rdx) *) + 0x48; 0x8b; 0x56; 0x30; (* MOV (% rdx) (Memop Quadword (%% (rsi,48))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xe4; + (* ADCX (% r12) (% r12) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADOX (% r12) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% r13) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xea; + (* ADOX (% r13) (% rdx) *) + 0x48; 0x8b; 0x56; 0x38; (* MOV (% rdx) (Memop Quadword (%% (rsi,56))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xfa; + (* MULX4 (% r15,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf6; + (* ADCX (% r14) (% r14) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% rax) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADCX (% r15) (% rbp) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADOX (% r15) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0xba; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rdx) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% rbp) *) + 0x41; 0x89; 0xe9; (* MOV (% r9d) (% ebp) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcd; + (* ADOX (% r9) (% rbp) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xcd; + (* ADCX (% r9) (% rbp) *) + 0x4d; 0x01; 0xce; (* ADD (% r14) (% r9) *) + 0x49; 0x11; 0xef; (* ADC (% r15) (% rbp) *) + 0x41; 0x89; 0xe8; (* MOV (% r8d) (% ebp) *) + 0x49; 0x11; 0xe8; (* ADC (% r8) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0xba; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rdx) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADCX (% r15) (% rbp) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc5; + (* ADOX (% r8) (% rbp) *) + 0x49; 0x11; 0xe8; (* ADC (% r8) (% rbp) *) + 0xb9; 0x01; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 1)) *) + 0x4c; 0x01; 0xe1; (* ADD (% rcx) (% r12) *) + 0x48; 0x8d; 0x52; 0xff; (* LEA (% rdx) (%% (rdx,18446744073709551615)) *) + 0x4c; 0x11; 0xea; (* ADC (% rdx) (% r13) *) + 0x48; 0x8d; 0x6d; 0xff; (* LEA (% rbp) (%% (rbp,18446744073709551615)) *) + 0x48; 0x89; 0xe8; (* MOV (% rax) (% rbp) *) + 0x4c; 0x11; 0xf5; (* ADC (% rbp) (% r14) *) + 0x41; 0xbb; 0xfe; 0xff; 0xff; 0xff; + (* MOV (% r11d) (Imm32 (word 4294967294)) *) + 0x4d; 0x11; 0xfb; (* ADC (% r11) (% r15) *) + 0x4c; 0x11; 0xc0; (* ADC (% rax) (% r8) *) + 0x4c; 0x0f; 0x42; 0xe1; (* CMOVB (% r12) (% rcx) *) + 0x4c; 0x0f; 0x42; 0xea; (* CMOVB (% r13) (% rdx) *) + 0x4c; 0x0f; 0x42; 0xf5; (* CMOVB (% r14) (% rbp) *) + 0x4d; 0x0f; 0x42; 0xfb; (* CMOVB (% r15) (% r11) *) + 0x4c; 0x89; 0x64; 0x24; 0x20; + (* MOV (Memop Quadword (%% (rsp,32))) (% r12) *) + 0x4c; 0x89; 0x6c; 0x24; 0x28; + (* MOV (Memop Quadword (%% (rsp,40))) (% r13) *) + 0x4c; 0x89; 0x74; 0x24; 0x30; + (* MOV (Memop Quadword (%% (rsp,48))) (% r14) *) + 0x4c; 0x89; 0x7c; 0x24; 0x38; + (* MOV (Memop Quadword (%% (rsp,56))) (% r15) *) + 0x48; 0x8b; 0x06; (* MOV (% rax) (Memop Quadword (%% (rsi,0))) *) + 0x48; 0x03; 0x04; 0x24; (* ADD (% rax) (Memop Quadword (%% (rsp,0))) *) + 0x48; 0x8b; 0x4e; 0x08; (* MOV (% rcx) (Memop Quadword (%% (rsi,8))) *) + 0x48; 0x13; 0x4c; 0x24; 0x08; + (* ADC (% rcx) (Memop Quadword (%% (rsp,8))) *) + 0x4c; 0x8b; 0x46; 0x10; (* MOV (% r8) (Memop Quadword (%% (rsi,16))) *) + 0x4c; 0x13; 0x44; 0x24; 0x10; + (* ADC (% r8) (Memop Quadword (%% (rsp,16))) *) + 0x4c; 0x8b; 0x4e; 0x18; (* MOV (% r9) (Memop Quadword (%% (rsi,24))) *) + 0x4c; 0x13; 0x4c; 0x24; 0x18; + (* ADC (% r9) (Memop Quadword (%% (rsp,24))) *) + 0x41; 0xba; 0xff; 0xff; 0xff; 0xff; + (* MOV (% r10d) (Imm32 (word 4294967295)) *) + 0x4d; 0x19; 0xdb; (* SBB (% r11) (% r11) *) + 0x48; 0x31; 0xd2; (* XOR (% rdx) (% rdx) *) + 0x4d; 0x21; 0xda; (* AND (% r10) (% r11) *) + 0x4c; 0x29; 0xd2; (* SUB (% rdx) (% r10) *) + 0x4c; 0x29; 0xd8; (* SUB (% rax) (% r11) *) + 0x48; 0x89; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,160))) (% rax) *) + 0x4c; 0x19; 0xd1; (* SBB (% rcx) (% r10) *) + 0x48; 0x89; 0x8c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,168))) (% rcx) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x84; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,176))) (% r8) *) + 0x49; 0x19; 0xd1; (* SBB (% r9) (% rdx) *) + 0x4c; 0x89; 0x8c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,184))) (% r9) *) + 0x48; 0x8b; 0x06; (* MOV (% rax) (Memop Quadword (%% (rsi,0))) *) + 0x48; 0x2b; 0x04; 0x24; (* SUB (% rax) (Memop Quadword (%% (rsp,0))) *) + 0x48; 0x8b; 0x4e; 0x08; (* MOV (% rcx) (Memop Quadword (%% (rsi,8))) *) + 0x48; 0x1b; 0x4c; 0x24; 0x08; + (* SBB (% rcx) (Memop Quadword (%% (rsp,8))) *) + 0x4c; 0x8b; 0x46; 0x10; (* MOV (% r8) (Memop Quadword (%% (rsi,16))) *) + 0x4c; 0x1b; 0x44; 0x24; 0x10; + (* SBB (% r8) (Memop Quadword (%% (rsp,16))) *) + 0x4c; 0x8b; 0x4e; 0x18; (* MOV (% r9) (Memop Quadword (%% (rsi,24))) *) + 0x4c; 0x1b; 0x4c; 0x24; 0x18; + (* SBB (% r9) (Memop Quadword (%% (rsp,24))) *) + 0x41; 0xba; 0xff; 0xff; 0xff; 0xff; + (* MOV (% r10d) (Imm32 (word 4294967295)) *) + 0x4d; 0x19; 0xdb; (* SBB (% r11) (% r11) *) + 0x48; 0x31; 0xd2; (* XOR (% rdx) (% rdx) *) + 0x4d; 0x21; 0xda; (* AND (% r10) (% r11) *) + 0x4c; 0x29; 0xd2; (* SUB (% rdx) (% r10) *) + 0x4c; 0x01; 0xd8; (* ADD (% rax) (% r11) *) + 0x48; 0x89; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,128))) (% rax) *) + 0x4c; 0x11; 0xd1; (* ADC (% rcx) (% r10) *) + 0x48; 0x89; 0x8c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,136))) (% rcx) *) + 0x49; 0x83; 0xd0; 0x00; (* ADC (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x84; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,144))) (% r8) *) + 0x49; 0x11; 0xd1; (* ADC (% r9) (% rdx) *) + 0x4c; 0x89; 0x8c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,152))) (% r9) *) + 0x45; 0x31; 0xed; (* XOR (% r13d) (% r13d) *) + 0x48; 0x8b; 0x94; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,128))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x8c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x94; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xa4; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x4d; 0x11; 0xec; (* ADC (% r12) (% r13) *) + 0x48; 0x8b; 0x94; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,136))) *) + 0x45; 0x31; 0xf6; (* XOR (% r14d) (% r14d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4d; 0x11; 0xf5; (* ADC (% r13) (% r14) *) + 0x45; 0x31; 0xff; (* XOR (% r15d) (% r15d) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0xf7; 0xd2; (* NOT (% rdx) *) + 0x48; 0x8d; 0x52; 0x02; (* LEA (% rdx) (%% (rdx,2)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xef; + (* ADCX (% r13) (% r15) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf7; + (* ADOX (% r14) (% r15) *) + 0x4d; 0x11; 0xfe; (* ADC (% r14) (% r15) *) + 0x48; 0x8b; 0x94; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,144))) *) + 0x45; 0x31; 0xc0; (* XOR (% r8d) (% r8d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% r8) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xc5; (* ADC (% r13) (% rax) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0x4d; 0x11; 0xc7; (* ADC (% r15) (% r8) *) + 0x48; 0x8b; 0x94; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,152))) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xc6; (* ADC (% r14) (% rax) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x4d; 0x11; 0xc8; (* ADC (% r8) (% r9) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0xf7; 0xd2; (* NOT (% rdx) *) + 0x48; 0x8d; 0x52; 0x02; (* LEA (% rdx) (%% (rdx,2)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% r9) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xc1; + (* ADOX (% r8) (% r9) *) + 0x4d; 0x11; 0xc8; (* ADC (% r8) (% r9) *) + 0xb9; 0x01; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 1)) *) + 0x4c; 0x01; 0xe1; (* ADD (% rcx) (% r12) *) + 0x48; 0xff; 0xca; (* DEC (% rdx) *) + 0x4c; 0x11; 0xea; (* ADC (% rdx) (% r13) *) + 0x49; 0xff; 0xc9; (* DEC (% r9) *) + 0x4c; 0x89; 0xc8; (* MOV (% rax) (% r9) *) + 0x4d; 0x11; 0xf1; (* ADC (% r9) (% r14) *) + 0x41; 0xbb; 0xfe; 0xff; 0xff; 0xff; + (* MOV (% r11d) (Imm32 (word 4294967294)) *) + 0x4d; 0x11; 0xfb; (* ADC (% r11) (% r15) *) + 0x4c; 0x11; 0xc0; (* ADC (% rax) (% r8) *) + 0x4c; 0x0f; 0x42; 0xe1; (* CMOVB (% r12) (% rcx) *) + 0x4c; 0x0f; 0x42; 0xea; (* CMOVB (% r13) (% rdx) *) + 0x4d; 0x0f; 0x42; 0xf1; (* CMOVB (% r14) (% r9) *) + 0x4d; 0x0f; 0x42; 0xfb; (* CMOVB (% r15) (% r11) *) + 0x4c; 0x89; 0x64; 0x24; 0x40; + (* MOV (Memop Quadword (%% (rsp,64))) (% r12) *) + 0x4c; 0x89; 0x6c; 0x24; 0x48; + (* MOV (Memop Quadword (%% (rsp,72))) (% r13) *) + 0x4c; 0x89; 0x74; 0x24; 0x50; + (* MOV (Memop Quadword (%% (rsp,80))) (% r14) *) + 0x4c; 0x89; 0x7c; 0x24; 0x58; + (* MOV (Memop Quadword (%% (rsp,88))) (% r15) *) + 0x4d; 0x31; 0xdb; (* XOR (% r11) (% r11) *) + 0x48; 0x8b; 0x46; 0x20; (* MOV (% rax) (Memop Quadword (%% (rsi,32))) *) + 0x48; 0x03; 0x46; 0x40; (* ADD (% rax) (Memop Quadword (%% (rsi,64))) *) + 0x48; 0x8b; 0x4e; 0x28; (* MOV (% rcx) (Memop Quadword (%% (rsi,40))) *) + 0x48; 0x13; 0x4e; 0x48; (* ADC (% rcx) (Memop Quadword (%% (rsi,72))) *) + 0x4c; 0x8b; 0x46; 0x30; (* MOV (% r8) (Memop Quadword (%% (rsi,48))) *) + 0x4c; 0x13; 0x46; 0x50; (* ADC (% r8) (Memop Quadword (%% (rsi,80))) *) + 0x4c; 0x8b; 0x4e; 0x38; (* MOV (% r9) (Memop Quadword (%% (rsi,56))) *) + 0x4c; 0x13; 0x4e; 0x58; (* ADC (% r9) (Memop Quadword (%% (rsi,88))) *) + 0x4d; 0x11; 0xdb; (* ADC (% r11) (% r11) *) + 0x48; 0x83; 0xe8; 0xff; (* SUB (% rax) (Imm8 (word 255)) *) + 0x41; 0xba; 0xff; 0xff; 0xff; 0xff; + (* MOV (% r10d) (Imm32 (word 4294967295)) *) + 0x4c; 0x19; 0xd1; (* SBB (% rcx) (% r10) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x48; 0xba; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rdx) (Imm64 (word 18446744069414584321)) *) + 0x49; 0x19; 0xd1; (* SBB (% r9) (% rdx) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4d; 0x21; 0xda; (* AND (% r10) (% r11) *) + 0x4c; 0x21; 0xda; (* AND (% rdx) (% r11) *) + 0x4c; 0x01; 0xd8; (* ADD (% rax) (% r11) *) + 0x48; 0x89; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,160))) (% rax) *) + 0x4c; 0x11; 0xd1; (* ADC (% rcx) (% r10) *) + 0x48; 0x89; 0x8c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,168))) (% rcx) *) + 0x49; 0x83; 0xd0; 0x00; (* ADC (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x84; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,176))) (% r8) *) + 0x49; 0x11; 0xd1; (* ADC (% r9) (% rdx) *) + 0x4c; 0x89; 0x8c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,184))) (% r9) *) + 0x48; 0x8b; 0x54; 0x24; 0x40; + (* MOV (% rdx) (Memop Quadword (%% (rsp,64))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0xfa; + (* MULX4 (% r15,% r8) (% rdx,% rdx) *) + 0xc4; 0x62; 0xb3; 0xf6; 0x54; 0x24; 0x48; + (* MULX4 (% r10,% r9) (% rdx,Memop Quadword (%% (rsp,72))) *) + 0xc4; 0x62; 0xa3; 0xf6; 0x64; 0x24; 0x58; + (* MULX4 (% r12,% r11) (% rdx,Memop Quadword (%% (rsp,88))) *) + 0x48; 0x8b; 0x54; 0x24; 0x50; + (* MOV (% rdx) (Memop Quadword (%% (rsp,80))) *) + 0xc4; 0x62; 0x93; 0xf6; 0x74; 0x24; 0x58; + (* MULX4 (% r14,% r13) (% rdx,Memop Quadword (%% (rsp,88))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x40; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,64))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x48; 0x8b; 0x54; 0x24; 0x58; + (* MOV (% rdx) (Memop Quadword (%% (rsp,88))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% rbp) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf5; + (* ADOX (% r14) (% rbp) *) + 0x49; 0x11; 0xee; (* ADC (% r14) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% r9) (% r9) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xcf; + (* ADOX (% r9) (% r15) *) + 0x48; 0x8b; 0x54; 0x24; 0x48; + (* MOV (% rdx) (Memop Quadword (%% (rsp,72))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xd2; + (* ADCX (% r10) (% r10) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADOX (% r10) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% r11) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% r11) (% rdx) *) + 0x48; 0x8b; 0x54; 0x24; 0x50; + (* MOV (% rdx) (Memop Quadword (%% (rsp,80))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xe4; + (* ADCX (% r12) (% r12) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADOX (% r12) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% r13) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xea; + (* ADOX (% r13) (% rdx) *) + 0x48; 0x8b; 0x54; 0x24; 0x58; + (* MOV (% rdx) (Memop Quadword (%% (rsp,88))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xfa; + (* MULX4 (% r15,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf6; + (* ADCX (% r14) (% r14) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% rax) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADCX (% r15) (% rbp) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADOX (% r15) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0xba; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rdx) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% rbp) *) + 0x41; 0x89; 0xe9; (* MOV (% r9d) (% ebp) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcd; + (* ADOX (% r9) (% rbp) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xcd; + (* ADCX (% r9) (% rbp) *) + 0x4d; 0x01; 0xce; (* ADD (% r14) (% r9) *) + 0x49; 0x11; 0xef; (* ADC (% r15) (% rbp) *) + 0x41; 0x89; 0xe8; (* MOV (% r8d) (% ebp) *) + 0x49; 0x11; 0xe8; (* ADC (% r8) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0xba; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rdx) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADCX (% r15) (% rbp) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc5; + (* ADOX (% r8) (% rbp) *) + 0x49; 0x11; 0xe8; (* ADC (% r8) (% rbp) *) + 0xb9; 0x01; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 1)) *) + 0x4c; 0x01; 0xe1; (* ADD (% rcx) (% r12) *) + 0x48; 0x8d; 0x52; 0xff; (* LEA (% rdx) (%% (rdx,18446744073709551615)) *) + 0x4c; 0x11; 0xea; (* ADC (% rdx) (% r13) *) + 0x48; 0x8d; 0x6d; 0xff; (* LEA (% rbp) (%% (rbp,18446744073709551615)) *) + 0x48; 0x89; 0xe8; (* MOV (% rax) (% rbp) *) + 0x4c; 0x11; 0xf5; (* ADC (% rbp) (% r14) *) + 0x41; 0xbb; 0xfe; 0xff; 0xff; 0xff; + (* MOV (% r11d) (Imm32 (word 4294967294)) *) + 0x4d; 0x11; 0xfb; (* ADC (% r11) (% r15) *) + 0x4c; 0x11; 0xc0; (* ADC (% rax) (% r8) *) + 0x4c; 0x0f; 0x42; 0xe1; (* CMOVB (% r12) (% rcx) *) + 0x4c; 0x0f; 0x42; 0xea; (* CMOVB (% r13) (% rdx) *) + 0x4c; 0x0f; 0x42; 0xf5; (* CMOVB (% r14) (% rbp) *) + 0x4d; 0x0f; 0x42; 0xfb; (* CMOVB (% r15) (% r11) *) + 0x4c; 0x89; 0xa4; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,192))) (% r12) *) + 0x4c; 0x89; 0xac; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,200))) (% r13) *) + 0x4c; 0x89; 0xb4; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,208))) (% r14) *) + 0x4c; 0x89; 0xbc; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,216))) (% r15) *) + 0x45; 0x31; 0xed; (* XOR (% r13d) (% r13d) *) + 0x48; 0x8b; 0x54; 0x24; 0x20; + (* MOV (% rdx) (Memop Quadword (%% (rsp,32))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x0e; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsi,0))) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x56; 0x08; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsi,8))) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x5e; 0x10; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsi,16))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x66; 0x18; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsi,24))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x4d; 0x11; 0xec; (* ADC (% r12) (% r13) *) + 0x48; 0x8b; 0x54; 0x24; 0x28; + (* MOV (% rdx) (Memop Quadword (%% (rsp,40))) *) + 0x45; 0x31; 0xf6; (* XOR (% r14d) (% r14d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1e; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4d; 0x11; 0xf5; (* ADC (% r13) (% r14) *) + 0x45; 0x31; 0xff; (* XOR (% r15d) (% r15d) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0xf7; 0xd2; (* NOT (% rdx) *) + 0x48; 0x8d; 0x52; 0x02; (* LEA (% rdx) (%% (rdx,2)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xef; + (* ADCX (% r13) (% r15) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf7; + (* ADOX (% r14) (% r15) *) + 0x4d; 0x11; 0xfe; (* ADC (% r14) (% r15) *) + 0x48; 0x8b; 0x54; 0x24; 0x30; + (* MOV (% rdx) (Memop Quadword (%% (rsp,48))) *) + 0x45; 0x31; 0xc0; (* XOR (% r8d) (% r8d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1e; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% r8) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,24))) *) + 0x49; 0x11; 0xc5; (* ADC (% r13) (% rax) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0x4d; 0x11; 0xc7; (* ADC (% r15) (% r8) *) + 0x48; 0x8b; 0x54; 0x24; 0x38; + (* MOV (% rdx) (Memop Quadword (%% (rsp,56))) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1e; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,24))) *) + 0x49; 0x11; 0xc6; (* ADC (% r14) (% rax) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x4d; 0x11; 0xc8; (* ADC (% r8) (% r9) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0xf7; 0xd2; (* NOT (% rdx) *) + 0x48; 0x8d; 0x52; 0x02; (* LEA (% rdx) (%% (rdx,2)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% r9) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xc1; + (* ADOX (% r8) (% r9) *) + 0x4d; 0x11; 0xc8; (* ADC (% r8) (% r9) *) + 0xb9; 0x01; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 1)) *) + 0x4c; 0x01; 0xe1; (* ADD (% rcx) (% r12) *) + 0x48; 0xff; 0xca; (* DEC (% rdx) *) + 0x4c; 0x11; 0xea; (* ADC (% rdx) (% r13) *) + 0x49; 0xff; 0xc9; (* DEC (% r9) *) + 0x4c; 0x89; 0xc8; (* MOV (% rax) (% r9) *) + 0x4d; 0x11; 0xf1; (* ADC (% r9) (% r14) *) + 0x41; 0xbb; 0xfe; 0xff; 0xff; 0xff; + (* MOV (% r11d) (Imm32 (word 4294967294)) *) + 0x4d; 0x11; 0xfb; (* ADC (% r11) (% r15) *) + 0x4c; 0x11; 0xc0; (* ADC (% rax) (% r8) *) + 0x4c; 0x0f; 0x42; 0xe1; (* CMOVB (% r12) (% rcx) *) + 0x4c; 0x0f; 0x42; 0xea; (* CMOVB (% r13) (% rdx) *) + 0x4d; 0x0f; 0x42; 0xf1; (* CMOVB (% r14) (% r9) *) + 0x4d; 0x0f; 0x42; 0xfb; (* CMOVB (% r15) (% r11) *) + 0x4c; 0x89; 0x64; 0x24; 0x60; + (* MOV (Memop Quadword (%% (rsp,96))) (% r12) *) + 0x4c; 0x89; 0x6c; 0x24; 0x68; + (* MOV (Memop Quadword (%% (rsp,104))) (% r13) *) + 0x4c; 0x89; 0x74; 0x24; 0x70; + (* MOV (Memop Quadword (%% (rsp,112))) (% r14) *) + 0x4c; 0x89; 0x7c; 0x24; 0x78; + (* MOV (Memop Quadword (%% (rsp,120))) (% r15) *) + 0x48; 0x8b; 0x94; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,160))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0xfa; + (* MULX4 (% r15,% r8) (% rdx,% rdx) *) + 0xc4; 0x62; 0xb3; 0xf6; 0x94; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% r10,% r9) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0xc4; 0x62; 0xa3; 0xf6; 0xa4; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r12,% r11) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x48; 0x8b; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,176))) *) + 0xc4; 0x62; 0x93; 0xf6; 0xb4; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r14,% r13) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x48; 0x8b; 0x94; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,184))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% rbp) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf5; + (* ADOX (% r14) (% rbp) *) + 0x49; 0x11; 0xee; (* ADC (% r14) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% r9) (% r9) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xcf; + (* ADOX (% r9) (% r15) *) + 0x48; 0x8b; 0x94; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,168))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xd2; + (* ADCX (% r10) (% r10) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADOX (% r10) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% r11) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% r11) (% rdx) *) + 0x48; 0x8b; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,176))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xe4; + (* ADCX (% r12) (% r12) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADOX (% r12) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% r13) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xea; + (* ADOX (% r13) (% rdx) *) + 0x48; 0x8b; 0x94; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,184))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xfa; + (* MULX4 (% r15,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf6; + (* ADCX (% r14) (% r14) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% rax) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADCX (% r15) (% rbp) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADOX (% r15) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0xba; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rdx) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% rbp) *) + 0x41; 0x89; 0xe9; (* MOV (% r9d) (% ebp) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcd; + (* ADOX (% r9) (% rbp) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xcd; + (* ADCX (% r9) (% rbp) *) + 0x4d; 0x01; 0xce; (* ADD (% r14) (% r9) *) + 0x49; 0x11; 0xef; (* ADC (% r15) (% rbp) *) + 0x41; 0x89; 0xe8; (* MOV (% r8d) (% ebp) *) + 0x49; 0x11; 0xe8; (* ADC (% r8) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0xba; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rdx) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADCX (% r15) (% rbp) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc5; + (* ADOX (% r8) (% rbp) *) + 0x49; 0x11; 0xe8; (* ADC (% r8) (% rbp) *) + 0xb9; 0x01; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 1)) *) + 0x4c; 0x01; 0xe1; (* ADD (% rcx) (% r12) *) + 0x48; 0x8d; 0x52; 0xff; (* LEA (% rdx) (%% (rdx,18446744073709551615)) *) + 0x4c; 0x11; 0xea; (* ADC (% rdx) (% r13) *) + 0x48; 0x8d; 0x6d; 0xff; (* LEA (% rbp) (%% (rbp,18446744073709551615)) *) + 0x48; 0x89; 0xe8; (* MOV (% rax) (% rbp) *) + 0x4c; 0x11; 0xf5; (* ADC (% rbp) (% r14) *) + 0x41; 0xbb; 0xfe; 0xff; 0xff; 0xff; + (* MOV (% r11d) (Imm32 (word 4294967294)) *) + 0x4d; 0x11; 0xfb; (* ADC (% r11) (% r15) *) + 0x4c; 0x11; 0xc0; (* ADC (% rax) (% r8) *) + 0x4c; 0x0f; 0x42; 0xe1; (* CMOVB (% r12) (% rcx) *) + 0x4c; 0x0f; 0x42; 0xea; (* CMOVB (% r13) (% rdx) *) + 0x4c; 0x0f; 0x42; 0xf5; (* CMOVB (% r14) (% rbp) *) + 0x4d; 0x0f; 0x42; 0xfb; (* CMOVB (% r15) (% r11) *) + 0x4c; 0x89; 0xa4; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,128))) (% r12) *) + 0x4c; 0x89; 0xac; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,136))) (% r13) *) + 0x4c; 0x89; 0xb4; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,144))) (% r14) *) + 0x4c; 0x89; 0xbc; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,152))) (% r15) *) + 0x49; 0xc7; 0xc0; 0xff; 0xff; 0xff; 0xff; + (* MOV (% r8) (Imm32 (word 4294967295)) *) + 0x45; 0x31; 0xd2; (* XOR (% r10d) (% r10d) *) + 0x4c; 0x2b; 0x84; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* SUB (% r8) (Memop Quadword (%% (rsp,192))) *) + 0x49; 0xb9; 0xff; 0xff; 0xff; 0xff; 0x00; 0x00; 0x00; 0x00; + (* MOV (% r9) (Imm64 (word 4294967295)) *) + 0x4c; 0x1b; 0x8c; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* SBB (% r9) (Memop Quadword (%% (rsp,200))) *) + 0x4c; 0x1b; 0x94; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* SBB (% r10) (Memop Quadword (%% (rsp,208))) *) + 0x49; 0xbb; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% r11) (Imm64 (word 18446744069414584321)) *) + 0x4c; 0x1b; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* SBB (% r11) (Memop Quadword (%% (rsp,216))) *) + 0x45; 0x31; 0xe4; (* XOR (% r12d) (% r12d) *) + 0x48; 0xc7; 0xc2; 0x09; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm32 (word 9)) *) + 0xc4; 0xc2; 0xbb; 0xf6; 0xc0; + (* MULX4 (% rax,% r8) (% rdx,% r8) *) + 0xc4; 0xc2; 0xb3; 0xf6; 0xc9; + (* MULX4 (% rcx,% r9) (% rdx,% r9) *) + 0x49; 0x01; 0xc1; (* ADD (% r9) (% rax) *) + 0xc4; 0xc2; 0xab; 0xf6; 0xc2; + (* MULX4 (% rax,% r10) (% rdx,% r10) *) + 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) + 0xc4; 0xc2; 0xa3; 0xf6; 0xcb; + (* MULX4 (% rcx,% r11) (% rdx,% r11) *) + 0x49; 0x11; 0xc3; (* ADC (% r11) (% rax) *) + 0x49; 0x11; 0xcc; (* ADC (% r12) (% rcx) *) + 0x48; 0xc7; 0xc2; 0x0c; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm32 (word 12)) *) + 0x31; 0xc0; (* XOR (% eax) (% eax) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x4c; 0x24; 0x60; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc9; + (* ADOX (% r9) (% rcx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x4c; 0x24; 0x68; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd1; + (* ADOX (% r10) (% rcx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x4c; 0x24; 0x70; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd9; + (* ADOX (% r11) (% rcx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x54; 0x24; 0x78; + (* MULX4 (% rdx,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x49; 0x0f; 0x38; 0xf6; 0xd4; + (* ADOX (% rdx) (% r12) *) + 0x48; 0x83; 0xd2; 0x01; (* ADC (% rdx) (Imm8 (word 1)) *) + 0x49; 0x01; 0xd0; (* ADD (% r8) (% rdx) *) + 0x48; 0xb8; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rax) (Imm64 (word 4294967296)) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xc8; + (* MULX4 (% rcx,% rax) (% rdx,% rax) *) + 0x48; 0x83; 0xd8; 0x00; (* SBB (% rax) (Imm8 (word 0)) *) + 0x48; 0x83; 0xd9; 0x00; (* SBB (% rcx) (Imm8 (word 0)) *) + 0x49; 0x29; 0xc1; (* SUB (% r9) (% rax) *) + 0x49; 0x19; 0xca; (* SBB (% r10) (% rcx) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xc8; + (* MULX4 (% rcx,% rax) (% rdx,% rax) *) + 0x49; 0x19; 0xc3; (* SBB (% r11) (% rax) *) + 0x48; 0x19; 0xca; (* SBB (% rdx) (% rcx) *) + 0x48; 0xff; 0xca; (* DEC (% rdx) *) + 0xb8; 0xff; 0xff; 0xff; 0xff; + (* MOV (% eax) (Imm32 (word 4294967295)) *) + 0x48; 0x21; 0xd0; (* AND (% rax) (% rdx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x29; 0xc1; (* SUB (% rcx) (% rax) *) + 0x49; 0x01; 0xd0; (* ADD (% r8) (% rdx) *) + 0x4c; 0x89; 0x84; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,192))) (% r8) *) + 0x49; 0x11; 0xc1; (* ADC (% r9) (% rax) *) + 0x4c; 0x89; 0x8c; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,200))) (% r9) *) + 0x49; 0x83; 0xd2; 0x00; (* ADC (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x94; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,208))) (% r10) *) + 0x49; 0x11; 0xcb; (* ADC (% r11) (% rcx) *) + 0x4c; 0x89; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,216))) (% r11) *) + 0x48; 0x8b; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,128))) *) + 0x48; 0x2b; 0x04; 0x24; (* SUB (% rax) (Memop Quadword (%% (rsp,0))) *) + 0x48; 0x8b; 0x8c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (% rcx) (Memop Quadword (%% (rsp,136))) *) + 0x48; 0x1b; 0x4c; 0x24; 0x08; + (* SBB (% rcx) (Memop Quadword (%% (rsp,8))) *) + 0x4c; 0x8b; 0x84; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (% r8) (Memop Quadword (%% (rsp,144))) *) + 0x4c; 0x1b; 0x44; 0x24; 0x10; + (* SBB (% r8) (Memop Quadword (%% (rsp,16))) *) + 0x4c; 0x8b; 0x8c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (% r9) (Memop Quadword (%% (rsp,152))) *) + 0x4c; 0x1b; 0x4c; 0x24; 0x18; + (* SBB (% r9) (Memop Quadword (%% (rsp,24))) *) + 0x41; 0xba; 0xff; 0xff; 0xff; 0xff; + (* MOV (% r10d) (Imm32 (word 4294967295)) *) + 0x4d; 0x19; 0xdb; (* SBB (% r11) (% r11) *) + 0x48; 0x31; 0xd2; (* XOR (% rdx) (% rdx) *) + 0x4d; 0x21; 0xda; (* AND (% r10) (% r11) *) + 0x4c; 0x29; 0xd2; (* SUB (% rdx) (% r10) *) + 0x4c; 0x01; 0xd8; (* ADD (% rax) (% r11) *) + 0x48; 0x89; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,160))) (% rax) *) + 0x4c; 0x11; 0xd1; (* ADC (% rcx) (% r10) *) + 0x48; 0x89; 0x8c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,168))) (% rcx) *) + 0x49; 0x83; 0xd0; 0x00; (* ADC (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x84; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,176))) (% r8) *) + 0x49; 0x11; 0xd1; (* ADC (% r9) (% rdx) *) + 0x4c; 0x89; 0x8c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,184))) (% r9) *) + 0x48; 0x8b; 0x54; 0x24; 0x20; + (* MOV (% rdx) (Memop Quadword (%% (rsp,32))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0xfa; + (* MULX4 (% r15,% r8) (% rdx,% rdx) *) + 0xc4; 0x62; 0xb3; 0xf6; 0x54; 0x24; 0x28; + (* MULX4 (% r10,% r9) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0xc4; 0x62; 0xa3; 0xf6; 0x64; 0x24; 0x38; + (* MULX4 (% r12,% r11) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x48; 0x8b; 0x54; 0x24; 0x30; + (* MOV (% rdx) (Memop Quadword (%% (rsp,48))) *) + 0xc4; 0x62; 0x93; 0xf6; 0x74; 0x24; 0x38; + (* MULX4 (% r14,% r13) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x48; 0x8b; 0x54; 0x24; 0x38; + (* MOV (% rdx) (Memop Quadword (%% (rsp,56))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% rbp) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf5; + (* ADOX (% r14) (% rbp) *) + 0x49; 0x11; 0xee; (* ADC (% r14) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% r9) (% r9) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xcf; + (* ADOX (% r9) (% r15) *) + 0x48; 0x8b; 0x54; 0x24; 0x28; + (* MOV (% rdx) (Memop Quadword (%% (rsp,40))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xd2; + (* ADCX (% r10) (% r10) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADOX (% r10) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% r11) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% r11) (% rdx) *) + 0x48; 0x8b; 0x54; 0x24; 0x30; + (* MOV (% rdx) (Memop Quadword (%% (rsp,48))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xe4; + (* ADCX (% r12) (% r12) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADOX (% r12) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% r13) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xea; + (* ADOX (% r13) (% rdx) *) + 0x48; 0x8b; 0x54; 0x24; 0x38; + (* MOV (% rdx) (Memop Quadword (%% (rsp,56))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xfa; + (* MULX4 (% r15,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf6; + (* ADCX (% r14) (% r14) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% rax) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADCX (% r15) (% rbp) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADOX (% r15) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0xba; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rdx) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% rbp) *) + 0x41; 0x89; 0xe9; (* MOV (% r9d) (% ebp) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcd; + (* ADOX (% r9) (% rbp) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xcd; + (* ADCX (% r9) (% rbp) *) + 0x4d; 0x01; 0xce; (* ADD (% r14) (% r9) *) + 0x49; 0x11; 0xef; (* ADC (% r15) (% rbp) *) + 0x41; 0x89; 0xe8; (* MOV (% r8d) (% ebp) *) + 0x49; 0x11; 0xe8; (* ADC (% r8) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0xba; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rdx) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADCX (% r15) (% rbp) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc5; + (* ADOX (% r8) (% rbp) *) + 0x49; 0x11; 0xe8; (* ADC (% r8) (% rbp) *) + 0xb9; 0x01; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 1)) *) + 0x4c; 0x01; 0xe1; (* ADD (% rcx) (% r12) *) + 0x48; 0x8d; 0x52; 0xff; (* LEA (% rdx) (%% (rdx,18446744073709551615)) *) + 0x4c; 0x11; 0xea; (* ADC (% rdx) (% r13) *) + 0x48; 0x8d; 0x6d; 0xff; (* LEA (% rbp) (%% (rbp,18446744073709551615)) *) + 0x48; 0x89; 0xe8; (* MOV (% rax) (% rbp) *) + 0x4c; 0x11; 0xf5; (* ADC (% rbp) (% r14) *) + 0x41; 0xbb; 0xfe; 0xff; 0xff; 0xff; + (* MOV (% r11d) (Imm32 (word 4294967294)) *) + 0x4d; 0x11; 0xfb; (* ADC (% r11) (% r15) *) + 0x4c; 0x11; 0xc0; (* ADC (% rax) (% r8) *) + 0x4c; 0x0f; 0x42; 0xe1; (* CMOVB (% r12) (% rcx) *) + 0x4c; 0x0f; 0x42; 0xea; (* CMOVB (% r13) (% rdx) *) + 0x4c; 0x0f; 0x42; 0xf5; (* CMOVB (% r14) (% rbp) *) + 0x4d; 0x0f; 0x42; 0xfb; (* CMOVB (% r15) (% r11) *) + 0x4c; 0x89; 0xa4; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,128))) (% r12) *) + 0x4c; 0x89; 0xac; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,136))) (% r13) *) + 0x4c; 0x89; 0xb4; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,144))) (% r14) *) + 0x4c; 0x89; 0xbc; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,152))) (% r15) *) + 0x48; 0x8b; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,160))) *) + 0x48; 0x2b; 0x44; 0x24; 0x20; + (* SUB (% rax) (Memop Quadword (%% (rsp,32))) *) + 0x48; 0x8b; 0x8c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (% rcx) (Memop Quadword (%% (rsp,168))) *) + 0x48; 0x1b; 0x4c; 0x24; 0x28; + (* SBB (% rcx) (Memop Quadword (%% (rsp,40))) *) + 0x4c; 0x8b; 0x84; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (% r8) (Memop Quadword (%% (rsp,176))) *) + 0x4c; 0x1b; 0x44; 0x24; 0x30; + (* SBB (% r8) (Memop Quadword (%% (rsp,48))) *) + 0x4c; 0x8b; 0x8c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (% r9) (Memop Quadword (%% (rsp,184))) *) + 0x4c; 0x1b; 0x4c; 0x24; 0x38; + (* SBB (% r9) (Memop Quadword (%% (rsp,56))) *) + 0x41; 0xba; 0xff; 0xff; 0xff; 0xff; + (* MOV (% r10d) (Imm32 (word 4294967295)) *) + 0x4d; 0x19; 0xdb; (* SBB (% r11) (% r11) *) + 0x48; 0x31; 0xd2; (* XOR (% rdx) (% rdx) *) + 0x4d; 0x21; 0xda; (* AND (% r10) (% r11) *) + 0x4c; 0x29; 0xd2; (* SUB (% rdx) (% r10) *) + 0x4c; 0x01; 0xd8; (* ADD (% rax) (% r11) *) + 0x48; 0x89; 0x47; 0x40; (* MOV (Memop Quadword (%% (rdi,64))) (% rax) *) + 0x4c; 0x11; 0xd1; (* ADC (% rcx) (% r10) *) + 0x48; 0x89; 0x4f; 0x48; (* MOV (Memop Quadword (%% (rdi,72))) (% rcx) *) + 0x49; 0x83; 0xd0; 0x00; (* ADC (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x47; 0x50; (* MOV (Memop Quadword (%% (rdi,80))) (% r8) *) + 0x49; 0x11; 0xd1; (* ADC (% r9) (% rdx) *) + 0x4c; 0x89; 0x4f; 0x58; (* MOV (Memop Quadword (%% (rdi,88))) (% r9) *) + 0x45; 0x31; 0xed; (* XOR (% r13d) (% r13d) *) + 0x48; 0x8b; 0x54; 0x24; 0x40; + (* MOV (% rdx) (Memop Quadword (%% (rsp,64))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x8c; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,192))) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x94; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,200))) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x9c; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,208))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xa4; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x4d; 0x11; 0xec; (* ADC (% r12) (% r13) *) + 0x48; 0x8b; 0x54; 0x24; 0x48; + (* MOV (% rdx) (Memop Quadword (%% (rsp,72))) *) + 0x45; 0x31; 0xf6; (* XOR (% r14d) (% r14d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,208))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4d; 0x11; 0xf5; (* ADC (% r13) (% r14) *) + 0x45; 0x31; 0xff; (* XOR (% r15d) (% r15d) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0xf7; 0xd2; (* NOT (% rdx) *) + 0x48; 0x8d; 0x52; 0x02; (* LEA (% rdx) (%% (rdx,2)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xef; + (* ADCX (% r13) (% r15) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf7; + (* ADOX (% r14) (% r15) *) + 0x4d; 0x11; 0xfe; (* ADC (% r14) (% r15) *) + 0x48; 0x8b; 0x54; 0x24; 0x50; + (* MOV (% rdx) (Memop Quadword (%% (rsp,80))) *) + 0x45; 0x31; 0xc0; (* XOR (% r8d) (% r8d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,208))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% r8) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x49; 0x11; 0xc5; (* ADC (% r13) (% rax) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0x4d; 0x11; 0xc7; (* ADC (% r15) (% r8) *) + 0x48; 0x8b; 0x54; 0x24; 0x58; + (* MOV (% rdx) (Memop Quadword (%% (rsp,88))) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,208))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x49; 0x11; 0xc6; (* ADC (% r14) (% rax) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x4d; 0x11; 0xc8; (* ADC (% r8) (% r9) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0xf7; 0xd2; (* NOT (% rdx) *) + 0x48; 0x8d; 0x52; 0x02; (* LEA (% rdx) (%% (rdx,2)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% r9) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xc1; + (* ADOX (% r8) (% r9) *) + 0x4d; 0x11; 0xc8; (* ADC (% r8) (% r9) *) + 0xb9; 0x01; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 1)) *) + 0x4c; 0x01; 0xe1; (* ADD (% rcx) (% r12) *) + 0x48; 0xff; 0xca; (* DEC (% rdx) *) + 0x4c; 0x11; 0xea; (* ADC (% rdx) (% r13) *) + 0x49; 0xff; 0xc9; (* DEC (% r9) *) + 0x4c; 0x89; 0xc8; (* MOV (% rax) (% r9) *) + 0x4d; 0x11; 0xf1; (* ADC (% r9) (% r14) *) + 0x41; 0xbb; 0xfe; 0xff; 0xff; 0xff; + (* MOV (% r11d) (Imm32 (word 4294967294)) *) + 0x4d; 0x11; 0xfb; (* ADC (% r11) (% r15) *) + 0x4c; 0x11; 0xc0; (* ADC (% rax) (% r8) *) + 0x4c; 0x0f; 0x42; 0xe1; (* CMOVB (% r12) (% rcx) *) + 0x4c; 0x0f; 0x42; 0xea; (* CMOVB (% r13) (% rdx) *) + 0x4d; 0x0f; 0x42; 0xf1; (* CMOVB (% r14) (% r9) *) + 0x4d; 0x0f; 0x42; 0xfb; (* CMOVB (% r15) (% r11) *) + 0x4c; 0x89; 0xa4; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,160))) (% r12) *) + 0x4c; 0x89; 0xac; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,168))) (% r13) *) + 0x4c; 0x89; 0xb4; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,176))) (% r14) *) + 0x4c; 0x89; 0xbc; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,184))) (% r15) *) + 0x4c; 0x8b; 0x5c; 0x24; 0x78; + (* MOV (% r11) (Memop Quadword (%% (rsp,120))) *) + 0x4c; 0x89; 0xda; (* MOV (% rdx) (% r11) *) + 0x4c; 0x8b; 0x54; 0x24; 0x70; + (* MOV (% r10) (Memop Quadword (%% (rsp,112))) *) + 0x4d; 0x0f; 0xa4; 0xd3; 0x02; + (* SHLD (% r11) (% r10) (Imm8 (word 2)) *) + 0x4c; 0x8b; 0x4c; 0x24; 0x68; + (* MOV (% r9) (Memop Quadword (%% (rsp,104))) *) + 0x4d; 0x0f; 0xa4; 0xca; 0x02; + (* SHLD (% r10) (% r9) (Imm8 (word 2)) *) + 0x4c; 0x8b; 0x44; 0x24; 0x60; + (* MOV (% r8) (Memop Quadword (%% (rsp,96))) *) + 0x4d; 0x0f; 0xa4; 0xc1; 0x02; + (* SHLD (% r9) (% r8) (Imm8 (word 2)) *) + 0x49; 0xc1; 0xe0; 0x02; (* SHL (% r8) (Imm8 (word 2)) *) + 0x48; 0xc1; 0xea; 0x3e; (* SHR (% rdx) (Imm8 (word 62)) *) + 0x48; 0x83; 0xc2; 0x01; (* ADD (% rdx) (Imm8 (word 1)) *) + 0x4c; 0x2b; 0x84; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* SUB (% r8) (Memop Quadword (%% (rsp,192))) *) + 0x4c; 0x1b; 0x8c; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* SBB (% r9) (Memop Quadword (%% (rsp,200))) *) + 0x4c; 0x1b; 0x94; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* SBB (% r10) (Memop Quadword (%% (rsp,208))) *) + 0x4c; 0x1b; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* SBB (% r11) (Memop Quadword (%% (rsp,216))) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd0; (* ADD (% r8) (% rdx) *) + 0x48; 0xb8; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rax) (Imm64 (word 4294967296)) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xc8; + (* MULX4 (% rcx,% rax) (% rdx,% rax) *) + 0x48; 0x83; 0xd8; 0x00; (* SBB (% rax) (Imm8 (word 0)) *) + 0x48; 0x83; 0xd9; 0x00; (* SBB (% rcx) (Imm8 (word 0)) *) + 0x49; 0x29; 0xc1; (* SUB (% r9) (% rax) *) + 0x49; 0x19; 0xca; (* SBB (% r10) (% rcx) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xc8; + (* MULX4 (% rcx,% rax) (% rdx,% rax) *) + 0x49; 0x19; 0xc3; (* SBB (% r11) (% rax) *) + 0x48; 0x19; 0xca; (* SBB (% rdx) (% rcx) *) + 0x48; 0xff; 0xca; (* DEC (% rdx) *) + 0xb8; 0xff; 0xff; 0xff; 0xff; + (* MOV (% eax) (Imm32 (word 4294967295)) *) + 0x48; 0x21; 0xd0; (* AND (% rax) (% rdx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x29; 0xc1; (* SUB (% rcx) (% rax) *) + 0x49; 0x01; 0xd0; (* ADD (% r8) (% rdx) *) + 0x4c; 0x89; 0x07; (* MOV (Memop Quadword (%% (rdi,0))) (% r8) *) + 0x49; 0x11; 0xc1; (* ADC (% r9) (% rax) *) + 0x4c; 0x89; 0x4f; 0x08; (* MOV (Memop Quadword (%% (rdi,8))) (% r9) *) + 0x49; 0x83; 0xd2; 0x00; (* ADC (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x57; 0x10; (* MOV (Memop Quadword (%% (rdi,16))) (% r10) *) + 0x49; 0x11; 0xcb; (* ADC (% r11) (% rcx) *) + 0x4c; 0x89; 0x5f; 0x18; (* MOV (Memop Quadword (%% (rdi,24))) (% r11) *) + 0x49; 0xc7; 0xc0; 0xff; 0xff; 0xff; 0xff; + (* MOV (% r8) (Imm32 (word 4294967295)) *) + 0x45; 0x31; 0xd2; (* XOR (% r10d) (% r10d) *) + 0x4c; 0x2b; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; + (* SUB (% r8) (Memop Quadword (%% (rsp,128))) *) + 0x49; 0xb9; 0xff; 0xff; 0xff; 0xff; 0x00; 0x00; 0x00; 0x00; + (* MOV (% r9) (Imm64 (word 4294967295)) *) + 0x4c; 0x1b; 0x8c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* SBB (% r9) (Memop Quadword (%% (rsp,136))) *) + 0x4c; 0x1b; 0x94; 0x24; 0x90; 0x00; 0x00; 0x00; + (* SBB (% r10) (Memop Quadword (%% (rsp,144))) *) + 0x49; 0xbb; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% r11) (Imm64 (word 18446744069414584321)) *) + 0x4c; 0x1b; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* SBB (% r11) (Memop Quadword (%% (rsp,152))) *) + 0x4d; 0x89; 0xdc; (* MOV (% r12) (% r11) *) + 0x4d; 0x0f; 0xa4; 0xd3; 0x03; + (* SHLD (% r11) (% r10) (Imm8 (word 3)) *) + 0x4d; 0x0f; 0xa4; 0xca; 0x03; + (* SHLD (% r10) (% r9) (Imm8 (word 3)) *) + 0x4d; 0x0f; 0xa4; 0xc1; 0x03; + (* SHLD (% r9) (% r8) (Imm8 (word 3)) *) + 0x49; 0xc1; 0xe0; 0x03; (* SHL (% r8) (Imm8 (word 3)) *) + 0x49; 0xc1; 0xec; 0x3d; (* SHR (% r12) (Imm8 (word 61)) *) + 0x48; 0xc7; 0xc2; 0x03; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm32 (word 3)) *) + 0x31; 0xc0; (* XOR (% eax) (% eax) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x8c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc9; + (* ADOX (% r9) (% rcx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x8c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd1; + (* ADOX (% r10) (% rcx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x8c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd9; + (* ADOX (% r11) (% rcx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x94; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rdx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x49; 0x0f; 0x38; 0xf6; 0xd4; + (* ADOX (% rdx) (% r12) *) + 0x48; 0x83; 0xd2; 0x01; (* ADC (% rdx) (Imm8 (word 1)) *) + 0x49; 0x01; 0xd0; (* ADD (% r8) (% rdx) *) + 0x48; 0xb8; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rax) (Imm64 (word 4294967296)) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xc8; + (* MULX4 (% rcx,% rax) (% rdx,% rax) *) + 0x48; 0x83; 0xd8; 0x00; (* SBB (% rax) (Imm8 (word 0)) *) + 0x48; 0x83; 0xd9; 0x00; (* SBB (% rcx) (Imm8 (word 0)) *) + 0x49; 0x29; 0xc1; (* SUB (% r9) (% rax) *) + 0x49; 0x19; 0xca; (* SBB (% r10) (% rcx) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xc8; + (* MULX4 (% rcx,% rax) (% rdx,% rax) *) + 0x49; 0x19; 0xc3; (* SBB (% r11) (% rax) *) + 0x48; 0x19; 0xca; (* SBB (% rdx) (% rcx) *) + 0x48; 0xff; 0xca; (* DEC (% rdx) *) + 0xb8; 0xff; 0xff; 0xff; 0xff; + (* MOV (% eax) (Imm32 (word 4294967295)) *) + 0x48; 0x21; 0xd0; (* AND (% rax) (% rdx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x29; 0xc1; (* SUB (% rcx) (% rax) *) + 0x49; 0x01; 0xd0; (* ADD (% r8) (% rdx) *) + 0x4c; 0x89; 0x47; 0x20; (* MOV (Memop Quadword (%% (rdi,32))) (% r8) *) + 0x49; 0x11; 0xc1; (* ADC (% r9) (% rax) *) + 0x4c; 0x89; 0x4f; 0x28; (* MOV (Memop Quadword (%% (rdi,40))) (% r9) *) + 0x49; 0x83; 0xd2; 0x00; (* ADC (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x57; 0x30; (* MOV (Memop Quadword (%% (rdi,48))) (% r10) *) + 0x49; 0x11; 0xcb; (* ADC (% r11) (% rcx) *) + 0x4c; 0x89; 0x5f; 0x38; (* MOV (Memop Quadword (%% (rdi,56))) (% r11) *) + 0x48; 0x81; 0xc4; 0xe0; 0x00; 0x00; 0x00; + (* ADD (% rsp) (Imm32 (word 224)) *) + 0x41; 0x5f; (* POP (% r15) *) + 0x41; 0x5e; (* POP (% r14) *) + 0x41; 0x5d; (* POP (% r13) *) + 0x41; 0x5c; (* POP (% r12) *) + 0x5d; (* POP (% rbp) *) + 0x5b; (* POP (% rbx) *) + 0xc3 (* RET *) +];; + +let P256_MONTJDOUBLE_EXEC = X86_MK_CORE_EXEC_RULE p256_montjdouble_mc;; + +(* ------------------------------------------------------------------------- *) +(* Common supporting definitions and lemmas for component proofs. *) +(* ------------------------------------------------------------------------- *) + +let p_256 = new_definition `p_256 = 115792089210356248762697446949407573530086143415290314195533631308867097853951`;; + +let nistp256 = define + `nistp256 = + (integer_mod_ring p_256, + ring_neg (integer_mod_ring p_256) (&3), + &b_256:int)`;; + +let nistp256_encode = new_definition + `nistp256_encode = montgomery_encode(256,p_256)`;; + +let p256shortishredlemma = prove + (`!n. n < 24 * 2 EXP 256 + ==> let q = n DIV 2 EXP 256 + 1 in + q <= 24 /\ + q < 2 EXP 64 /\ + q * p_256 <= n + p_256 /\ + n < q * p_256 + p_256`, + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN REWRITE_TAC[p_256] THEN ARITH_TAC);; + +let FORALL_INT_CASES' = prove + (`!P. (!x:int. P x) <=> (!n. P(&n)) /\ (!n. ~(n = 0) ==> P(-- &n))`, + GEN_TAC THEN GEN_REWRITE_TAC LAND_CONV [FORALL_INT_CASES] THEN + MESON_TAC[INT_NEG_EQ_0; INT_OF_NUM_EQ]);; + +let p256shortintredlemma = prove + (`!n. --(&p_256) <= n /\ n <= &4 * &2 pow 256 + ==> let q = (&2 pow 256 + n) div &2 pow 256 in + &0 <= q /\ q < &6 /\ + q < &2 pow 64 /\ + q * &p_256 <= n + &p_256 /\ + n < q * &p_256 + &p_256`, + ONCE_REWRITE_TAC[INT_ARITH `&2 pow 256 + n:int = &1 * &2 pow 256 + n`] THEN + SIMP_TAC[INT_DIV_MUL_ADD; INT_POW_EQ_0; INT_OF_NUM_EQ; ARITH_EQ] THEN + REWRITE_TAC[FORALL_INT_CASES'; INT_DIV_LNEG] THEN + CONV_TAC(ONCE_DEPTH_CONV let_CONV) THEN + REWRITE_TAC[INT_OF_NUM_CLAUSES; INT_OF_NUM_DIV; INT_OF_NUM_REM] THEN + CONJ_TAC THENL [REWRITE_TAC[p_256] THEN ARITH_TAC; ALL_TAC] THEN + X_GEN_TAC `n:num` THEN DISCH_TAC THEN + REWRITE_TAC[INT_LE_NEG2; INT_OF_NUM_CLAUSES] THEN + DISCH_THEN(ASSUME_TAC o CONJUNCT1) THEN + SUBGOAL_THEN `n < 2 EXP 256` ASSUME_TAC THENL + [UNDISCH_TAC `n <= p_256` THEN REWRITE_TAC[p_256] THEN ARITH_TAC; + ASM_SIMP_TAC[DIV_LT; MOD_LT]] THEN + UNDISCH_TAC `n <= p_256` THEN + REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES] THEN CONV_TAC INT_REDUCE_CONV THEN + REWRITE_TAC[p_256] THEN INT_ARITH_TAC);; + +let nintlemma = prove + (`&(num_of_int(x rem &p_256)) = x rem &p_256`, + MATCH_MP_TAC INT_OF_NUM_OF_INT THEN MATCH_MP_TAC INT_REM_POS THEN + REWRITE_TAC[INT_OF_NUM_EQ; p_256] THEN CONV_TAC NUM_REDUCE_CONV);; + +let unilemma0 = prove + (`x = a MOD p_256 ==> x < p_256 /\ &x = &a rem &p_256`, + REWRITE_TAC[INT_OF_NUM_REM; p_256] THEN ARITH_TAC);; + +let unilemma1 = prove + (`&x = a rem &p_256 ==> x < p_256 /\ &x = a rem &p_256`, + SIMP_TAC[GSYM INT_OF_NUM_LT; INT_LT_REM_EQ; p_256] THEN INT_ARITH_TAC);; + +let unilemma2 = prove + (`X = num_of_int(x rem &p_256) ==> X < p_256 /\ &X = x rem &p_256`, + DISCH_THEN SUBST1_TAC THEN + REWRITE_TAC[GSYM INT_OF_NUM_LT; nintlemma; INT_LT_REM_EQ] THEN + REWRITE_TAC[INT_OF_NUM_LT; p_256] THEN CONV_TAC NUM_REDUCE_CONV);; + +let lemont = prove + (`(&i * x * y) rem &p_256 = (&i * x rem &p_256 * y rem &p_256) rem &p_256`, + CONV_TAC INT_REM_DOWN_CONV THEN REWRITE_TAC[]);; + +let pumont = prove + (`(&(inverse_mod p_256 (2 EXP 256)) * + (&2 pow 256 * x) rem &p_256 * (&2 pow 256 * y) rem &p_256) rem &p_256 = + (&2 pow 256 * x * y) rem &p_256`, + CONV_TAC INT_REM_DOWN_CONV THEN REWRITE_TAC[INT_REM_EQ] THEN + MATCH_MP_TAC(INTEGER_RULE + `(i * t:int == &1) (mod p) + ==> (i * (t * x) * (t * y) == t * x * y) (mod p)`) THEN + REWRITE_TAC[GSYM num_congruent; INT_OF_NUM_CLAUSES] THEN + REWRITE_TAC[INVERSE_MOD_LMUL_EQ; COPRIME_REXP; COPRIME_2; p_256] THEN + CONV_TAC NUM_REDUCE_CONV);; + +let silemma = prove + (`(&12 * (e * x) rem p - &9 * (e * y) rem p) rem p = + (e * (&12 * x - &9 * y)) rem p`, + CONV_TAC INT_REM_DOWN_CONV THEN + AP_THM_TAC THEN AP_TERM_TAC THEN INT_ARITH_TAC);; + +let lvs = + ["x_1",[`RSI`; `0`]; + "y_1",[`RSI`; `32`]; + "z_1",[`RSI`; `64`]; + "x_3",[`RDI`; `0`]; + "y_3",[`RDI`; `32`]; + "z_3",[`RDI`; `64`]; + "z2",[`RSP`; `0`]; + "y2",[`RSP`; `32`]; + "x2p",[`RSP`; `64`]; + "xy2",[`RSP`; `96`]; + "y4",[`RSP`; `128`]; + "t2",[`RSP`; `128`]; + "dx2",[`RSP`; `160`]; + "t1",[`RSP`; `160`]; + "d",[`RSP`; `192`]; + "x4p",[`RSP`; `192`]];; + +(* ------------------------------------------------------------------------- *) +(* Instances of montsqr. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_MONTSQR_P256_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE p256_montjdouble_mc) 100 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1. + !a. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = a + ==> + nonoverlapping (word pc,0x1713) (word_add (read p3 t) (word n3),32) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST p256_montjdouble_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) s = + a) + (\s. read RIP s = pcout /\ + (a EXP 2 <= 2 EXP 256 * p_256 + ==> read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 4)) s = + (inverse_mod p_256 (2 EXP 256) * a EXP 2) MOD p_256)) + (MAYCHANGE [RIP; RAX; RBX; RBP; RCX; RDX; + R8; R9; R10; R11; R12; R13; R14; R15] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 4)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + (*** Globalize the a EXP 2 <= 2 EXP 256 * p_256 assumption ***) + + ASM_CASES_TAC `a EXP 2 <= 2 EXP 256 * p_256` THENL + [ASM_REWRITE_TAC[]; X86_SIM_TAC P256_MONTJDOUBLE_EXEC (1--100)] THEN + ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "x_" o lhand o concl) THEN + + (*** Simulate the core pre-reduced result accumulation ***) + + X86_ACCSTEPS_TAC P256_MONTJDOUBLE_EXEC (1--82) (1--82) THEN + ABBREV_TAC + `t = bignum_of_wordlist [sum_s71; sum_s75; sum_s78; sum_s80; sum_s82]` THEN + SUBGOAL_THEN + `t < 2 * p_256 /\ (2 EXP 256 * t == a EXP 2) (mod p_256)` + STRIP_ASSUME_TAC THENL + [RULE_ASSUM_TAC(REWRITE_RULE[VAL_WORD_BITVAL]) THEN + ACCUMULATOR_POP_ASSUM_LIST + (STRIP_ASSUME_TAC o end_itlist CONJ o DECARRY_RULE) THEN + CONJ_TAC THENL + [FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP (ARITH_RULE + `ab <= 2 EXP 256 * p + ==> 2 EXP 256 * t < ab + 2 EXP 256 * p ==> t < 2 * p`)) THEN + MAP_EVERY EXPAND_TAC ["a"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + REWRITE_TAC[p_256; REAL_ARITH `a:real < b + c <=> a - b < c`] THEN + ASM_REWRITE_TAC[] THEN BOUNDER_TAC[]; + REWRITE_TAC[REAL_CONGRUENCE; p_256] THEN CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["a"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ASM_REWRITE_TAC[] THEN REAL_INTEGER_TAC]; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Final correction stage ***) + + X86_ACCSTEPS_TAC P256_MONTJDOUBLE_EXEC [84;86;89;91;92] (83--100) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + TRANS_TAC EQ_TRANS `t MOD p_256` THEN CONJ_TAC THENL + [ALL_TAC; + REWRITE_TAC[GSYM CONG] THEN FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP + (NUMBER_RULE + `(e * t == a EXP 2) (mod p) + ==> (e * i == 1) (mod p) ==> (t == i * a EXP 2) (mod p)`)) THEN + REWRITE_TAC[INVERSE_MOD_RMUL_EQ; COPRIME_REXP; COPRIME_2] THEN + REWRITE_TAC[p_256] THEN CONV_TAC NUM_REDUCE_CONV] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC EQUAL_FROM_CONGRUENT_MOD_MOD THEN + MAP_EVERY EXISTS_TAC + [`256`; `if t < p_256 then &t:real else &t - &p_256`] THEN + REPEAT CONJ_TAC THENL + [REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN BOUNDER_TAC[]; + REWRITE_TAC[p_256] THEN ARITH_TAC; + REWRITE_TAC[p_256] THEN ARITH_TAC; + ALL_TAC; + ASM_SIMP_TAC[MOD_CASES] THEN + GEN_REWRITE_TAC LAND_CONV [COND_RAND] THEN + SIMP_TAC[REAL_OF_NUM_SUB; GSYM NOT_LT]] THEN + SUBGOAL_THEN `carry_s92 <=> p_256 <= t` SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LE THEN EXISTS_TAC `320` THEN + EXPAND_TAC "t" THEN + REWRITE_TAC[p_256; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + CONV_TAC NUM_REDUCE_CONV THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + REWRITE_TAC[GSYM NOT_LT; COND_SWAP]] THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[] THEN EXPAND_TAC "t" THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist; p_256] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + ASM_REWRITE_TAC[BITVAL_CLAUSES; VAL_WORD_BITVAL] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instances of montmul. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_MONTMUL_P256_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE p256_montjdouble_mc) 113 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1 p2 n2. + !a. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = a + ==> + !b. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) t = b + ==> + nonoverlapping (word pc,0x1713) (word_add (read p3 t) (word n3),32) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST p256_montjdouble_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) s = + a /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) s = + b) + (\s. read RIP s = pcout /\ + (a * b <= 2 EXP 256 * p_256 + ==> read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 4)) s = + (inverse_mod p_256 (2 EXP 256) * a * b) MOD p_256)) + (MAYCHANGE [RIP; RAX; RBX; RCX; RDX; + R8; R9; R10; R11; R12; R13; R14; R15] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 4)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + (*** Globalize the a * b <= 2 EXP 256 * p_256 assumption ***) + + ASM_CASES_TAC `a * b <= 2 EXP 256 * p_256` THENL + [ASM_REWRITE_TAC[]; X86_SIM_TAC P256_MONTJDOUBLE_EXEC (1--113)] THEN + ENSURES_INIT_TAC "s1" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "y_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "x_" o lhand o concl) THEN + + (*** Simulate the core pre-reduced result accumulation ***) + + X86_ACCSTEPS_TAC P256_MONTJDOUBLE_EXEC (2--96) (2--96) THEN + ABBREV_TAC + `t = bignum_of_wordlist [sum_s84; sum_s89; sum_s92; sum_s94; sum_s96]` THEN + SUBGOAL_THEN + `t < 2 * p_256 /\ (2 EXP 256 * t == a * b) (mod p_256)` + STRIP_ASSUME_TAC THENL + [ACCUMULATOR_POP_ASSUM_LIST + (STRIP_ASSUME_TAC o end_itlist CONJ o DECARRY_RULE) THEN + CONJ_TAC THENL + [FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP (ARITH_RULE + `ab <= 2 EXP 256 * p + ==> 2 EXP 256 * t < ab + 2 EXP 256 * p ==> t < 2 * p`)) THEN + MAP_EVERY EXPAND_TAC ["a"; "b"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + REWRITE_TAC[p_256; REAL_ARITH `a:real < b + c <=> a - b < c`] THEN + ASM_REWRITE_TAC[] THEN BOUNDER_TAC[]; + REWRITE_TAC[REAL_CONGRUENCE; p_256] THEN CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["a"; "b"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ASM_REWRITE_TAC[] THEN REAL_INTEGER_TAC]; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Final correction stage ***) + + X86_ACCSTEPS_TAC P256_MONTJDOUBLE_EXEC [98;100;103;105;106] (97--114) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + TRANS_TAC EQ_TRANS `t MOD p_256` THEN CONJ_TAC THENL + [ALL_TAC; + REWRITE_TAC[GSYM CONG] THEN FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP + (NUMBER_RULE + `(e * t == a * b) (mod p) + ==> (e * i == 1) (mod p) ==> (t == i * a * b) (mod p)`)) THEN + REWRITE_TAC[INVERSE_MOD_RMUL_EQ; COPRIME_REXP; COPRIME_2] THEN + REWRITE_TAC[p_256] THEN CONV_TAC NUM_REDUCE_CONV] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC EQUAL_FROM_CONGRUENT_MOD_MOD THEN + MAP_EVERY EXISTS_TAC + [`256`; `if t < p_256 then &t:real else &t - &p_256`] THEN + REPEAT CONJ_TAC THENL + [REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN BOUNDER_TAC[]; + REWRITE_TAC[p_256] THEN ARITH_TAC; + REWRITE_TAC[p_256] THEN ARITH_TAC; + ALL_TAC; + ASM_SIMP_TAC[MOD_CASES] THEN + GEN_REWRITE_TAC LAND_CONV [COND_RAND] THEN + SIMP_TAC[REAL_OF_NUM_SUB; GSYM NOT_LT]] THEN + SUBGOAL_THEN `carry_s106 <=> p_256 <= t` SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LE THEN EXISTS_TAC `320` THEN + EXPAND_TAC "t" THEN + REWRITE_TAC[p_256; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + CONV_TAC NUM_REDUCE_CONV THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + REWRITE_TAC[GSYM NOT_LT; COND_SWAP]] THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[] THEN EXPAND_TAC "t" THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist; p_256] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + ASM_REWRITE_TAC[BITVAL_CLAUSES; VAL_WORD_BITVAL] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instances of sub. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_SUB_P256_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE p256_montjdouble_mc) 21 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) t = n + ==> + nonoverlapping (word pc,0x1713) (word_add (read p3 t) (word n3),32) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST p256_montjdouble_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) s = + n) + (\s. read RIP s = pcout /\ + (m < p_256 /\ n < p_256 + ==> &(read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 4)) s) = (&m - &n) rem &p_256)) + (MAYCHANGE [RIP; RAX; RDX; RCX; R8; R9; R10; R11] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 4)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "m_" o lhand o concl) THEN + + X86_ACCSTEPS_TAC P256_MONTJDOUBLE_EXEC (1--8) (1--8) THEN + + SUBGOAL_THEN `carry_s8 <=> m < n` SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN EXISTS_TAC `256` THEN + MAP_EVERY EXPAND_TAC ["m"; "n"] THEN REWRITE_TAC[GSYM REAL_OF_NUM_ADD] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_MUL; GSYM REAL_OF_NUM_POW] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ALL_TAC] THEN + + X86_ACCSTEPS_TAC P256_MONTJDOUBLE_EXEC (14--21) (9--21) THEN + + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN STRIP_TAC THEN + CONV_TAC(LAND_CONV(RAND_CONV BIGNUM_EXPAND_CONV)) THEN + ASM_REWRITE_TAC[] THEN DISCARD_STATE_TAC "s21" THEN + + CONV_TAC SYM_CONV THEN MATCH_MP_TAC INT_REM_UNIQ THEN + EXISTS_TAC `--(&(bitval(m < n))):int` THEN REWRITE_TAC[INT_ABS_NUM] THEN + REWRITE_TAC[INT_ARITH `m - n:int = --b * p + z <=> z = b * p + m - n`] THEN + REWRITE_TAC[int_eq; int_le; int_lt] THEN + REWRITE_TAC[int_add_th; int_mul_th; int_of_num_th; int_sub_th] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_ADD; GSYM REAL_OF_NUM_MUL; + GSYM REAL_OF_NUM_POW] THEN + MATCH_MP_TAC(REAL_ARITH + `!t:real. p < t /\ + (&0 <= a /\ a < p) /\ + (&0 <= z /\ z < t) /\ + ((&0 <= z /\ z < t) /\ (&0 <= a /\ a < t) ==> z = a) + ==> z = a /\ &0 <= z /\ z < p`) THEN + EXISTS_TAC `(&2:real) pow 256` THEN + + CONJ_TAC THENL [REWRITE_TAC[p_256] THEN REAL_ARITH_TAC; ALL_TAC] THEN + CONJ_TAC THENL + [MAP_EVERY UNDISCH_TAC [`m < p_256`; `n < p_256`] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_LT] THEN + ASM_CASES_TAC `&m:real < &n` THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + POP_ASSUM MP_TAC THEN REWRITE_TAC[p_256] THEN REAL_ARITH_TAC; + ALL_TAC] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; STRIP_TAC] THEN + + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`256`; `&0:real`] THEN + ASM_REWRITE_TAC[] THEN + CONJ_TAC THENL [REAL_INTEGER_TAC; ALL_TAC] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + REWRITE_TAC[WORD_AND_MASK] THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC WORD_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["m"; "n"] THEN REWRITE_TAC[GSYM REAL_OF_NUM_ADD] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_MUL; GSYM REAL_OF_NUM_POW; p_256] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instances of weakadd *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_WEAKADD_P256_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE p256_montjdouble_mc) 21 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) t = n + ==> + nonoverlapping (word pc,0x1713) (word_add (read p3 t) (word n3),32) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST p256_montjdouble_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) s = + n) + (\s. read RIP s = pcout /\ + (m + n < 2 EXP 256 + p_256 + ==> read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 4)) s < 2 EXP 256 /\ + (&(read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 4)) s):int == &m + &n) (mod &p_256))) + (MAYCHANGE [RIP; RAX; RCX; RDX; R8; R9; R10; R11] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 4)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "m_" o lhand o concl) THEN + + X86_ACCSTEPS_TAC P256_MONTJDOUBLE_EXEC [2;4;6;8] (1--8) THEN + SUBGOAL_THEN `carry_s8 <=> 2 EXP 256 <= m + n` SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LE THEN EXISTS_TAC `256` THEN + MAP_EVERY EXPAND_TAC ["m"; "n"] THEN REWRITE_TAC[GSYM REAL_OF_NUM_ADD] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_MUL; GSYM REAL_OF_NUM_POW] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ALL_TAC] THEN + + X86_ACCSTEPS_TAC P256_MONTJDOUBLE_EXEC [14;16;18;20] (9--21) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN STRIP_TAC THEN + MATCH_MP_TAC(MESON[] + `!x. (x < 2 EXP 256 /\ P x) /\ y = x ==> y < 2 EXP 256 /\ P y`) THEN + EXISTS_TAC `if m + n < 2 EXP 256 then m + n else (m + n) - p_256` THEN + REPEAT CONJ_TAC THENL + [UNDISCH_TAC `m + n < 2 EXP 256 + p_256` THEN + REWRITE_TAC[p_256] THEN ARITH_TAC; + COND_CASES_TAC THEN + ASM_REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES; INT_CONG_REFL] THEN + MATCH_MP_TAC(INTEGER_RULE `y - p:int = x ==> (x == y) (mod p)`) THEN + REWRITE_TAC[INT_OF_NUM_CLAUSES] THEN MATCH_MP_TAC INT_OF_NUM_SUB THEN + FIRST_X_ASSUM(MP_TAC o GEN_REWRITE_RULE I [NOT_LT]) THEN + REWRITE_TAC[p_256] THEN ARITH_TAC; + ALL_TAC] THEN + RULE_ASSUM_TAC(REWRITE_RULE[SYM(NUM_REDUCE_CONV `2 EXP 256`)]) THEN + ABBREV_TAC `b <=> 2 EXP 256 <= m + n` THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN + ASM_REWRITE_TAC[GSYM NOT_LE] THEN DISCARD_STATE_TAC "s21" THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; COND_SWAP] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`256`; `&0:real`] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN CONJ_TAC THENL + [REWRITE_TAC[REAL_OF_NUM_CLAUSES] THEN + UNDISCH_TAC `m + n < 2 EXP 256 + p_256` THEN + EXPAND_TAC "b" THEN ARITH_TAC; + REWRITE_TAC[INTEGER_CLOSED]] THEN + SUBGOAL_THEN + `&(if b then (m + n) - p_256 else m + n):real = + if b then (&m + &n) - &p_256 else &m + &n` + SUBST1_TAC THENL + [COND_CASES_TAC THEN ASM_REWRITE_TAC[REAL_OF_NUM_CLAUSES] THEN + MATCH_MP_TAC(GSYM REAL_OF_NUM_SUB) THEN + UNDISCH_TAC `b:bool` THEN EXPAND_TAC "b" THEN + REWRITE_TAC[p_256] THEN ARITH_TAC; + ALL_TAC] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC WORD_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["m"; "n"] THEN REWRITE_TAC[GSYM REAL_OF_NUM_ADD] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_MUL; GSYM REAL_OF_NUM_POW; p_256] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + CONV_TAC(RAND_CONV REAL_POLY_CONV) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instances of add. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_ADD_P256_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE p256_montjdouble_mc) 27 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) t = n + ==> + nonoverlapping (word pc,0x1713) (word_add (read p3 t) (word n3),32) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST p256_montjdouble_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) s = + n) + (\s. read RIP s = pcout /\ + (m < p_256 /\ n < p_256 + ==> read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 4)) s = (m + n) MOD p_256)) + (MAYCHANGE [RIP; RAX; RDX; RCX; R8; R9; R10; R11] ,, + MAYCHANGE [memory :> bytes(word_add (read p3 t) (word n3),8 * 4)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "m_" o lhand o concl) THEN + + X86_ACCSTEPS_TAC P256_MONTJDOUBLE_EXEC (1--27) (1--27) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN STRIP_TAC THEN + + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN + ASM_REWRITE_TAC[] THEN DISCARD_STATE_TAC "s27" THEN + ASM_SIMP_TAC[MOD_CASES; ARITH_RULE `m < p /\ n < p ==> m + n < 2 * p`] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_EQ; GSYM REAL_OF_NUM_ADD] THEN + ONCE_REWRITE_TAC[COND_RAND] THEN + SIMP_TAC[GSYM REAL_OF_NUM_SUB; GSYM REAL_OF_NUM_ADD; GSYM NOT_LT] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_MUL; GSYM REAL_OF_NUM_POW] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`256`; `&0:real`] THEN ASM_REWRITE_TAC[] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN CONJ_TAC THENL + [MAP_EVERY UNDISCH_TAC [`m < p_256`; `n < p_256`] THEN + REWRITE_TAC[p_256; GSYM REAL_OF_NUM_CLAUSES] THEN REAL_ARITH_TAC; + ALL_TAC] THEN + CONJ_TAC THENL [REAL_INTEGER_TAC; ALL_TAC] THEN + + MAP_EVERY EXPAND_TAC ["m"; "n"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_ADD] THEN ASM_REWRITE_TAC[] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_MUL; GSYM REAL_OF_NUM_POW] THEN + + SUBGOAL_THEN + `sum_s17:int64 = word_neg(word(bitval(m + n < p_256))) /\ + (carry_s17 <=> m + n < p_256)` + (CONJUNCTS_THEN SUBST_ALL_TAC) THENL + [MATCH_MP_TAC FLAG_AND_MASK_FROM_CARRY_LT THEN + EXISTS_TAC `256` THEN REWRITE_TAC[GSYM REAL_OF_NUM_MUL] THEN + GEN_REWRITE_TAC I [CONJ_ASSOC] THEN CONJ_TAC THENL + [MAP_EVERY UNDISCH_TAC [`m < p_256`; `n < p_256`] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; p_256] THEN REAL_ARITH_TAC; + MAP_EVERY EXPAND_TAC ["m"; "n"] THEN + REWRITE_TAC[p_256; GSYM REAL_OF_NUM_CLAUSES] THEN + RULE_ASSUM_TAC(REWRITE_RULE[VAL_WORD_BITVAL]) THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]]; + ALL_TAC] THEN + + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ) THEN + COND_CASES_TAC THEN + ASM_REWRITE_TAC[VAL_WORD_BITVAL; BITVAL_CLAUSES] THEN + CONV_TAC WORD_REDUCE_CONV THENL + [ALL_TAC; + REWRITE_TAC[REAL_ARITH `p * &0 + &0:real = x - &0 - y <=> x = y`] THEN + REWRITE_TAC[REAL_EQ_BITVAL] THEN + ASM_CASES_TAC `carry_s16 <=> carry_s9` THEN ASM_REWRITE_TAC[]] THEN + REWRITE_TAC[p_256; REAL_RAT_REDUCE_CONV `(&2 pow 64 - &1) * &1:real`] THEN + DISCH_THEN(MP_TAC o end_itlist CONJ o DESUM_RULE o CONJUNCTS) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instance (12,9) of cmsub (the only one used in this code). *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_CMSUBC9_P256_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE p256_montjdouble_mc) 57 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) t = n + ==> + nonoverlapping (word pc,0x1713) (word_add (read p3 t) (word n3),32) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST p256_montjdouble_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) s = + n) + (\s. read RIP s = pcout /\ + (n <= p_256 + ==> &(read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 4)) s) = (&12 * &m - &9 * &n) rem &p_256)) + (MAYCHANGE [RIP; RAX; RCX; RDX; R8; R9; R10; R11; R12] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 4)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + ASM_CASES_TAC `n <= p_256` THENL + [ASM_REWRITE_TAC[]; X86_SIM_TAC P256_MONTJDOUBLE_EXEC (1--57)] THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "m_" o lhand o concl) THEN + + SUBGOAL_THEN + `(&12 * &m - &9 * &n) rem &p_256 = + (&12 * &m + &9 * (&p_256 - &n)) rem &p_256` + SUBST1_TAC THENL + [REWRITE_TAC[INT_REM_EQ] THEN CONV_TAC INTEGER_RULE; + ASM_SIMP_TAC[INT_OF_NUM_CLAUSES; INT_OF_NUM_SUB; INT_OF_NUM_REM]] THEN + + (*** Initial negation of n ***) + + X86_ACCSTEPS_TAC P256_MONTJDOUBLE_EXEC [3;5;6;8] (1--8) THEN + ABBREV_TAC + `n' = bignum_of_wordlist[sum_s3; sum_s5; sum_s6; sum_s8]` THEN + SUBGOAL_THEN `p_256 - n = n'` SUBST1_TAC THENL + [ASM_SIMP_TAC[GSYM REAL_OF_NUM_CLAUSES; GSYM REAL_OF_NUM_SUB] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`256`; `&0:real`] THEN CONJ_TAC THENL + [UNDISCH_TAC `n <= p_256` THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; p_256] THEN REAL_ARITH_TAC; + MAP_EVERY EXPAND_TAC ["n"; "n'"] THEN + REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES]] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; REWRITE_TAC[INTEGER_CLOSED]] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th; p_256]) THEN REAL_INTEGER_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Intermediate result from multiply-add block including top +1 ***) + + X86_ACCSTEPS_TAC P256_MONTJDOUBLE_EXEC (9--33) (9--33) THEN + SUBGOAL_THEN + `bignum_of_wordlist [sum_s22; sum_s25; sum_s28; sum_s31; sum_s33] = + 2 EXP 256 + (12 * m + 9 * n')` + ASSUME_TAC THENL + [MATCH_MP_TAC CONG_IMP_EQ THEN EXISTS_TAC `2 EXP 320` THEN + CONV_TAC NUM_REDUCE_CONV THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN CONJ_TAC THENL + [MAP_EVERY EXPAND_TAC ["m"; "n'"] THEN BOUNDER_TAC[]; ALL_TAC] THEN + REWRITE_TAC[REAL_CONGRUENCE] THEN CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["m"; "n'"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC) THEN DISCARD_FLAGS_TAC] THEN + + (*** Properties of quotient estimate q = h + 1 ***) + + ABBREV_TAC `h = (12 * m + 9 * n') DIV 2 EXP 256` THEN + SUBGOAL_THEN `h < 24` ASSUME_TAC THENL + [EXPAND_TAC "h" THEN SIMP_TAC[RDIV_LT_EQ; EXP_EQ_0; ARITH_EQ] THEN + CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["m"; "n'"] THEN BOUNDER_TAC[]; + ALL_TAC] THEN + SUBGOAL_THEN `sum_s33:int64 = word(h + 1)` SUBST_ALL_TAC THENL + [EXPAND_TAC "h" THEN REWRITE_TAC[ARITH_RULE + `ca DIV 2 EXP 256 + 1 = (2 EXP 256 + ca) DIV 2 EXP 256`] THEN + FIRST_X_ASSUM(fun th -> + GEN_REWRITE_TAC (RAND_CONV o RAND_CONV o LAND_CONV) [SYM th]) THEN + CONV_TAC(ONCE_DEPTH_CONV BIGNUM_OF_WORDLIST_DIV_CONV) THEN + REWRITE_TAC[WORD_VAL]; + ALL_TAC] THEN + MP_TAC(SPEC `12 * m + 9 * n'` p256shortishredlemma) THEN + ASM_REWRITE_TAC[] THEN ANTS_TAC THENL + [EXPAND_TAC "h" THEN SIMP_TAC[RDIV_LT_EQ; EXP_EQ_0; ARITH_EQ] THEN + CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["m"; "n'"] THEN BOUNDER_TAC[]; + CONV_TAC(LAND_CONV let_CONV) THEN STRIP_TAC] THEN + + (*** Computation of 12 * m + 9 * n' - (h + 1) * p_256 ***) + + X86_ACCSTEPS_TAC P256_MONTJDOUBLE_EXEC + [34; 37; 38; 39; 40; 43; 44; 45] (34--45) THEN + MP_TAC(SPECL + [`sum_s45:int64`; + `&(bignum_of_wordlist[sum_s34; sum_s39; sum_s40; sum_s43]):real`; + `256`; `12 * m + 9 * n'`; `(h + 1) * p_256`] + MASK_AND_VALUE_FROM_CARRY_LT) THEN + ASM_REWRITE_TAC[] THEN ANTS_TAC THENL + [CONJ_TAC THENL + [MAP_EVERY UNDISCH_TAC + [`(h + 1) * p_256 <= (12 * m + 9 * n') + p_256`; + `12 * m + 9 * n' < (h + 1) * p_256 + p_256`] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; p_256] THEN REAL_ARITH_TAC; + ALL_TAC] THEN + CONJ_TAC THENL + [REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + BOUNDER_TAC[]; + ALL_TAC] THEN + + SUBGOAL_THEN + `&(12 * m + 9 * n'):real = + &(bignum_of_wordlist [sum_s22; sum_s25; sum_s28; sum_s31; word (h + 1)]) - + &2 pow 256` + SUBST1_TAC THENL + [ASM_REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN REAL_ARITH_TAC; + ALL_TAC] THEN + + REWRITE_TAC[p_256; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ) THEN + REWRITE_TAC[DIMINDEX_64] THEN UNDISCH_TAC `h < 24` THEN + SPEC_TAC(`h:num`,`h:num`) THEN CONV_TAC EXPAND_CASES_CONV THEN + CONV_TAC(DEPTH_CONV(NUM_RED_CONV ORELSEC WORD_RED_CONV ORELSEC + GEN_REWRITE_CONV I [BITVAL_CLAUSES])) THEN + REPEAT CONJ_TAC THEN + DISCH_THEN(fun th -> + (MP_TAC o end_itlist CONJ o DESUM_RULE o CONJUNCTS) th THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + CONV_TAC(RAND_CONV REAL_POLY_CONV) THEN + (MP_TAC o end_itlist CONJ o + filter (is_ratconst o rand o concl) o DECARRY_RULE o CONJUNCTS) th THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC); + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC) THEN DISCARD_FLAGS_TAC THEN + DISCH_THEN(CONJUNCTS_THEN2 SUBST_ALL_TAC MP_TAC) THEN + REWRITE_TAC[MESON[REAL_MUL_RZERO; REAL_MUL_RID; REAL_ADD_RID; bitval] + `(if p then x + a else x):real = x + a * &(bitval p)`] THEN + DISCH_TAC] THEN + + (*** Final corrective masked addition ***) + + X86_ACCSTEPS_TAC P256_MONTJDOUBLE_EXEC [50;52;54;56] (46--57) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC MOD_UNIQ_BALANCED_REAL THEN + MAP_EVERY EXISTS_TAC [`h + 1`; `256`] THEN + ASM_REWRITE_TAC[] THEN + ABBREV_TAC `topcar <=> 12 * m + 9 * n' < (h + 1) * p_256` THEN + FIRST_X_ASSUM(SUBST1_TAC o MATCH_MP (REAL_ARITH + `x:real = &(12 * m + 9 * n') - y + z + ==> &(12 * m + 9 * n') = x + y - z`)) THEN + REWRITE_TAC[p_256] THEN CONJ_TAC THENL [ARITH_TAC; ALL_TAC] THEN + REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; p_256; bignum_of_wordlist] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + POP_ASSUM_LIST(K ALL_TAC) THEN + BOOL_CASES_TAC `topcar:bool` THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC WORD_REDUCE_CONV THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instance of cmsub41_p256 (actually there is only one). *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_CMSUB41_P256_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE p256_montjdouble_mc) 40 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) t = n + ==> + nonoverlapping (word pc,0x1713) (word_add (read p3 t) (word n3),32) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST p256_montjdouble_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) s = + n) + (\s. read RIP s = pcout /\ + (n < p_256 + ==> &(read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 4)) s) = (&4 * &m - &n) rem &p_256)) + (MAYCHANGE [RIP; RAX; RCX; RDX; R8; R9; R10; R11; R12] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 4)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + (*** Globalize the n < p_256 assumption ***) + + ASM_CASES_TAC `n < p_256` THENL + [ASM_REWRITE_TAC[]; X86_SIM_TAC P256_MONTJDOUBLE_EXEC (1--40)] THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "m_" o lhand o concl) THEN + + (*** Instantiate the (integer) quotient approximation lemma ***) + + MP_TAC(SPEC `&4 * &m - &n:int` p256shortintredlemma) THEN ANTS_TAC THENL + [ASM_SIMP_TAC[INT_OF_NUM_LT; INT_ARITH + `n:int < p ==> --p <= &4 * &m - n`] THEN + MATCH_MP_TAC(INT_ARITH `x:int <= a ==> x - &n <= a`) THEN + REWRITE_TAC[INT_OF_NUM_CLAUSES] THEN EXPAND_TAC "m" THEN BOUNDER_TAC[]; + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN STRIP_TAC] THEN + + (*** Main shift-subtract block ***) + + X86_ACCSTEPS_TAC P256_MONTJDOUBLE_EXEC (11--16) (1--16) THEN + ABBREV_TAC `ca = bignum_of_wordlist + [sum_s12; sum_s13; sum_s14; sum_s15; sum_s16]` THEN + SUBGOAL_THEN `&2 pow 256 + &4 * &m - &n:int = &ca` + (fun th -> SUBST_ALL_TAC th THEN ASSUME_TAC th) + THENL + [REWRITE_TAC[int_eq; int_add_th; int_sub_th; int_pow_th; + int_mul_th; int_of_num_th] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`320`; `&0:real`] THEN CONJ_TAC THENL + [MAP_EVERY EXPAND_TAC ["m"; "n"; "ca"] THEN BOUNDER_TAC[]; + ALL_TAC] THEN + CONJ_TAC THENL [EXPAND_TAC "ca" THEN BOUNDER_TAC[]; ALL_TAC] THEN + REWRITE_TAC[INTEGER_CLOSED] THEN + SUBGOAL_THEN + `&4 * &m:real = + &(bignum_of_wordlist + [word_shl m_0 2; + word_subword ((word_join:int64->int64->int128) m_1 m_0) (62,64); + word_subword ((word_join:int64->int64->int128) m_2 m_1) (62,64); + word_subword ((word_join:int64->int64->int128) m_3 m_2) (62,64); + word_ushr m_3 62])` + SUBST1_TAC THENL + [EXPAND_TAC "m" THEN + REWRITE_TAC[bignum_of_wordlist; REAL_OF_NUM_CLAUSES] THEN + REWRITE_TAC[val_def; DIMINDEX_64; bignum_of_wordlist] THEN + REWRITE_TAC[ARITH_RULE `i < 64 <=> 0 <= i /\ i <= 63`] THEN + REWRITE_TAC[GSYM IN_NUMSEG; IN_GSPEC] THEN + REWRITE_TAC[BIT_WORD_SUBWORD; BIT_WORD_JOIN; BIT_WORD_USHR; + BIT_WORD_SHL; DIMINDEX_64; DIMINDEX_128] THEN + CONV_TAC NUM_REDUCE_CONV THEN + CONV_TAC(ONCE_DEPTH_CONV EXPAND_NSUM_CONV) THEN + CONV_TAC NUM_REDUCE_CONV THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC WORD_REDUCE_CONV THEN REWRITE_TAC[BITVAL_CLAUSES] THEN + ONCE_REWRITE_TAC[BIT_GUARD] THEN REWRITE_TAC[DIMINDEX_64] THEN + CONV_TAC NUM_REDUCE_CONV THEN REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC NUM_RING; + MAP_EVERY EXPAND_TAC ["n"; "ca"] THEN + REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + REWRITE_TAC[REAL_BITVAL_NOT] THEN REAL_INTEGER_TAC]; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Quotient estimate is just the top word after the +1 ***) + + ABBREV_TAC `q:int64 = sum_s16` THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o + check (free_in `sum_s16:int64` o concl))) THEN + SUBGOAL_THEN `&ca div &2 pow 256 = &(val(q:int64))` SUBST_ALL_TAC THENL + [REWRITE_TAC[INT_OF_NUM_CLAUSES; INT_OF_NUM_DIV] THEN + EXPAND_TAC "ca" THEN CONV_TAC(LAND_CONV BIGNUM_OF_WORDLIST_DIV_CONV) THEN + REFL_TAC; + ALL_TAC] THEN + + (*** The subtraction of the provisional quotient estimate ***) + + X86_ACCSTEPS_TAC P256_MONTJDOUBLE_EXEC + [17; 20; 21; 22; 23; 26; 27; 28] (17--28) THEN + MP_TAC(SPECL + [`sum_s28:int64`; + `&(bignum_of_wordlist[sum_s17; sum_s22; sum_s23; sum_s26]):real`; + `256`; `4 * m + (2 EXP 256 - n)`; `2 EXP 256 + val(q:int64) * p_256`] + MASK_AND_VALUE_FROM_CARRY_LT) THEN + ASM_REWRITE_TAC[] THEN ANTS_TAC THENL + [CONJ_TAC THENL + [MAP_EVERY UNDISCH_TAC + [`&(val(q:int64)) * &p_256:int <= &4 * &m - &n + &p_256`; + `&4 * &m - &n < &(val(q:int64)):int * &p_256 + &p_256`] THEN + REWRITE_TAC[INT_ARITH `a - b + c:int = (a + c) - b`] THEN + REWRITE_TAC[INT_LE_SUB_LADD; INT_LT_SUB_RADD] THEN + REWRITE_TAC[INT_OF_NUM_CLAUSES] THEN + SUBGOAL_THEN `n <= 2 EXP 256` MP_TAC THENL + [CONV_TAC NUM_REDUCE_CONV THEN EXPAND_TAC "n" THEN + BOUNDER_TAC[]; + SIMP_TAC[GSYM REAL_OF_NUM_CLAUSES; GSYM REAL_OF_NUM_SUB]] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; p_256] THEN REAL_ARITH_TAC; + ALL_TAC] THEN + CONJ_TAC THENL + [REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + BOUNDER_TAC[]; + ALL_TAC] THEN + SUBGOAL_THEN + `&(4 * m + 2 EXP 256 - n):real = + &(bignum_of_wordlist [sum_s12; sum_s13; sum_s14; sum_s15; q])` + SUBST1_TAC THENL + [ASM_REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN + SUBGOAL_THEN `n <= 2 EXP 256` MP_TAC THENL + [CONV_TAC NUM_REDUCE_CONV THEN EXPAND_TAC "n" THEN + BOUNDER_TAC[]; + SIMP_TAC[GSYM REAL_OF_NUM_CLAUSES; GSYM REAL_OF_NUM_SUB]] THEN + UNDISCH_TAC `&2 pow 256 + &4 * &m - &n:int = &ca` THEN + REWRITE_TAC[REAL_ARITH `a + b - c:real = d <=> a + b = c + d`] THEN + REWRITE_TAC[REAL_OF_NUM_CLAUSES] THEN + REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES] THEN INT_ARITH_TAC; + ALL_TAC] THEN + REWRITE_TAC[p_256; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ) THEN + REWRITE_TAC[DIMINDEX_64] THEN CONV_TAC NUM_REDUCE_CONV THEN + SUBST1_TAC(SYM(ISPEC `q:int64` WORD_VAL)) THEN + UNDISCH_TAC `&(val(q:int64)):int < &6` THEN + GEN_REWRITE_TAC LAND_CONV [INT_OF_NUM_LT] THEN + SPEC_TAC(`val(q:int64)`,`h:num`) THEN CONV_TAC EXPAND_CASES_CONV THEN + CONV_TAC(DEPTH_CONV(NUM_RED_CONV ORELSEC WORD_RED_CONV ORELSEC + GEN_REWRITE_CONV I [BITVAL_CLAUSES])) THEN + REPEAT CONJ_TAC THEN + DISCH_THEN(fun th -> + (MP_TAC o end_itlist CONJ o DESUM_RULE o CONJUNCTS) th THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + CONV_TAC(RAND_CONV REAL_POLY_CONV) THEN + (MP_TAC o end_itlist CONJ o + filter (is_ratconst o rand o concl) o DECARRY_RULE o CONJUNCTS) th THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC); + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC) THEN DISCARD_FLAGS_TAC] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN + SUBGOAL_THEN `n <= 2 EXP 256` MP_TAC THENL + [EXPAND_TAC "n" THEN BOUNDER_TAC[]; SIMP_TAC[GSYM REAL_OF_NUM_SUB]] THEN + REWRITE_TAC[MESON[REAL_MUL_RZERO; REAL_MUL_RID; REAL_ADD_RID; bitval] + `(if p then x + a else x):real = x + a * &(bitval p)`] THEN + DISCH_THEN(K ALL_TAC) THEN + GEN_REWRITE_TAC (LAND_CONV o TOP_DEPTH_CONV) [GSYM REAL_OF_NUM_CLAUSES] THEN + REWRITE_TAC[REAL_ARITH `m + e - n:real < e + qp <=> m - n < qp`] THEN + ABBREV_TAC `topcar <=> &4 * &m - &n:real < &(val(q:int64)) * &p_256` THEN + DISCH_THEN(CONJUNCTS_THEN2 SUBST_ALL_TAC MP_TAC) THEN + REWRITE_TAC[REAL_ARITH `(m + e - n) - (e + qp):real = m - n - qp`] THEN + DISCH_TAC THEN + + (*** Final corrective masked addition ***) + + X86_ACCSTEPS_TAC P256_MONTJDOUBLE_EXEC [33;35;37;39] (29--40) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(LAND_CONV(RAND_CONV BIGNUM_EXPAND_CONV)) THEN ASM_REWRITE_TAC[] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC INT_REM_UNIQ_BALANCED_MOD THEN + MAP_EVERY EXISTS_TAC [`&(val(q:int64)):int`; `256`] THEN + ASM_REWRITE_TAC[] THEN + REPEAT(CONJ_TAC THENL + [REWRITE_TAC[INT_OF_NUM_CLAUSES; p_256] THEN BOUNDER_TAC[]; ALL_TAC]) THEN + REWRITE_TAC[REAL_INT_CONGRUENCE] THEN + REWRITE_TAC[INT_OF_NUM_CLAUSES; EXP_EQ_0; ARITH_EQ] THEN + REWRITE_TAC[int_lt; int_sub_th; int_of_num_th; int_add_th] THEN + ASM_REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN + FIRST_X_ASSUM(SUBST1_TAC o MATCH_MP (REAL_ARITH + `x:real = &4 * m - n - q * p + eb + ==> &4 * m - n = x + q * p - eb`)) THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; p_256; bignum_of_wordlist] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + BOOL_CASES_TAC `topcar:bool` THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC WORD_REDUCE_CONV THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instance of cmsub38 (there is only one). *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_CMSUB38_P256_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE p256_montjdouble_mc) 53 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) t = n + ==> + nonoverlapping (word pc,0x1713) (word_add (read p3 t) (word n3),32) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST p256_montjdouble_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) s = + n) + (\s. read RIP s = pcout /\ + (n <= p_256 + ==> &(read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 4)) s) = (&3 * &m - &8 * &n) rem &p_256)) + (MAYCHANGE [RIP; RAX; RCX; RDX; R8; R9; R10; R11; R12] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 4)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + ASM_CASES_TAC `n <= p_256` THENL + [ASM_REWRITE_TAC[]; X86_SIM_TAC P256_MONTJDOUBLE_EXEC (1--53)] THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "m_" o lhand o concl) THEN + + SUBGOAL_THEN + `(&3 * &m - &8 * &n) rem &p_256 = + (&3 * &m + &8 * (&p_256 - &n)) rem &p_256` + SUBST1_TAC THENL + [REWRITE_TAC[INT_REM_EQ] THEN CONV_TAC INTEGER_RULE; + ASM_SIMP_TAC[INT_OF_NUM_CLAUSES; INT_OF_NUM_SUB; INT_OF_NUM_REM]] THEN + + (*** Initial negation of n ***) + + X86_ACCSTEPS_TAC P256_MONTJDOUBLE_EXEC [3;5;6;8] (1--8) THEN + ABBREV_TAC + `n' = bignum_of_wordlist[sum_s3; sum_s5; sum_s6; sum_s8]` THEN + SUBGOAL_THEN `p_256 - n = n'` SUBST1_TAC THENL + [ASM_SIMP_TAC[GSYM REAL_OF_NUM_CLAUSES; GSYM REAL_OF_NUM_SUB] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`256`; `&0:real`] THEN CONJ_TAC THENL + [UNDISCH_TAC `n <= p_256` THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; p_256] THEN REAL_ARITH_TAC; + MAP_EVERY EXPAND_TAC ["n"; "n'"] THEN + REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES]] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; REWRITE_TAC[INTEGER_CLOSED]] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th; p_256]) THEN REAL_INTEGER_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Intermediate result from multiply-add block including top +1 ***) + + X86_ACCSTEPS_TAC P256_MONTJDOUBLE_EXEC (17--29) (9--29) THEN + SUBGOAL_THEN + `bignum_of_wordlist [sum_s18; sum_s21; sum_s24; sum_s27; sum_s29] = + 2 EXP 256 + (3 * m + 8 * n')` + ASSUME_TAC THENL + [MATCH_MP_TAC CONG_IMP_EQ THEN EXISTS_TAC `2 EXP 320` THEN + CONV_TAC NUM_REDUCE_CONV THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN CONJ_TAC THENL + [MAP_EVERY EXPAND_TAC ["m"; "n'"] THEN BOUNDER_TAC[]; ALL_TAC] THEN + SUBGOAL_THEN + `8 * n' = + bignum_of_wordlist + [word_shl sum_s3 3; + word_subword ((word_join:int64->int64->int128) sum_s5 sum_s3) (61,64); + word_subword ((word_join:int64->int64->int128) sum_s6 sum_s5) (61,64); + word_subword ((word_join:int64->int64->int128) sum_s8 sum_s6) (61,64); + word_ushr sum_s8 61]` + SUBST1_TAC THENL + [EXPAND_TAC "n'" THEN REWRITE_TAC[bignum_of_wordlist] THEN + REWRITE_TAC[val_def; DIMINDEX_64; bignum_of_wordlist] THEN + REWRITE_TAC[ARITH_RULE `i < 64 <=> 0 <= i /\ i <= 63`] THEN + REWRITE_TAC[GSYM IN_NUMSEG; IN_GSPEC] THEN + REWRITE_TAC[BIT_WORD_SUBWORD; BIT_WORD_JOIN; BIT_WORD_USHR; + BIT_WORD_SHL; DIMINDEX_64; DIMINDEX_128] THEN + CONV_TAC NUM_REDUCE_CONV THEN + CONV_TAC(ONCE_DEPTH_CONV EXPAND_NSUM_CONV) THEN + CONV_TAC NUM_REDUCE_CONV THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC WORD_REDUCE_CONV THEN REWRITE_TAC[BITVAL_CLAUSES] THEN + ONCE_REWRITE_TAC[BIT_GUARD] THEN REWRITE_TAC[DIMINDEX_64] THEN + CONV_TAC NUM_REDUCE_CONV THEN REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC NUM_RING; + REWRITE_TAC[REAL_CONGRUENCE] THEN CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["m"; "n'"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC]; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC) THEN DISCARD_FLAGS_TAC] THEN + + (*** Properties of quotient estimate q = h + 1 ***) + + ABBREV_TAC `h = (3 * m + 8 * n') DIV 2 EXP 256` THEN + SUBGOAL_THEN `h < 24` ASSUME_TAC THENL + [EXPAND_TAC "h" THEN SIMP_TAC[RDIV_LT_EQ; EXP_EQ_0; ARITH_EQ] THEN + CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["m"; "n'"] THEN BOUNDER_TAC[]; + ALL_TAC] THEN + SUBGOAL_THEN `sum_s29:int64 = word(h + 1)` SUBST_ALL_TAC THENL + [EXPAND_TAC "h" THEN REWRITE_TAC[ARITH_RULE + `ca DIV 2 EXP 256 + 1 = (2 EXP 256 + ca) DIV 2 EXP 256`] THEN + FIRST_X_ASSUM(fun th -> + GEN_REWRITE_TAC (RAND_CONV o RAND_CONV o LAND_CONV) [SYM th]) THEN + CONV_TAC(ONCE_DEPTH_CONV BIGNUM_OF_WORDLIST_DIV_CONV) THEN + REWRITE_TAC[WORD_VAL]; + ALL_TAC] THEN + MP_TAC(SPEC `3 * m + 8 * n'` p256shortishredlemma) THEN + ASM_REWRITE_TAC[] THEN ANTS_TAC THENL + [EXPAND_TAC "h" THEN SIMP_TAC[RDIV_LT_EQ; EXP_EQ_0; ARITH_EQ] THEN + CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["m"; "n'"] THEN BOUNDER_TAC[]; + CONV_TAC(LAND_CONV let_CONV) THEN STRIP_TAC] THEN + + (*** Computation of 3 * m + 8 * n' - (h + 1) * p_256 ***) + + X86_ACCSTEPS_TAC P256_MONTJDOUBLE_EXEC + [30; 33; 34; 35; 36; 39; 40; 41] (30--41) THEN + MP_TAC(SPECL + [`sum_s41:int64`; + `&(bignum_of_wordlist[sum_s30; sum_s35; sum_s36; sum_s39]):real`; + `256`; `3 * m + 8 * n'`; `(h + 1) * p_256`] + MASK_AND_VALUE_FROM_CARRY_LT) THEN + ASM_REWRITE_TAC[] THEN ANTS_TAC THENL + [CONJ_TAC THENL + [MAP_EVERY UNDISCH_TAC + [`(h + 1) * p_256 <= (3 * m + 8 * n') + p_256`; + `3 * m + 8 * n' < (h + 1) * p_256 + p_256`] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; p_256] THEN REAL_ARITH_TAC; + ALL_TAC] THEN + CONJ_TAC THENL + [REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + BOUNDER_TAC[]; + ALL_TAC] THEN + + SUBGOAL_THEN + `&(3 * m + 8 * n'):real = + &(bignum_of_wordlist [sum_s18; sum_s21; sum_s24; sum_s27; word (h + 1)]) - + &2 pow 256` + SUBST1_TAC THENL + [ASM_REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN REAL_ARITH_TAC; + ALL_TAC] THEN + + REWRITE_TAC[p_256; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ) THEN + REWRITE_TAC[DIMINDEX_64] THEN UNDISCH_TAC `h < 24` THEN + SPEC_TAC(`h:num`,`h:num`) THEN CONV_TAC EXPAND_CASES_CONV THEN + CONV_TAC(DEPTH_CONV(NUM_RED_CONV ORELSEC WORD_RED_CONV ORELSEC + GEN_REWRITE_CONV I [BITVAL_CLAUSES])) THEN + REPEAT CONJ_TAC THEN + DISCH_THEN(fun th -> + (MP_TAC o end_itlist CONJ o DESUM_RULE o CONJUNCTS) th THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + CONV_TAC(RAND_CONV REAL_POLY_CONV) THEN + (MP_TAC o end_itlist CONJ o + filter (is_ratconst o rand o concl) o DECARRY_RULE o CONJUNCTS) th THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC); + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC) THEN DISCARD_FLAGS_TAC THEN + DISCH_THEN(CONJUNCTS_THEN2 SUBST_ALL_TAC MP_TAC) THEN + REWRITE_TAC[MESON[REAL_MUL_RZERO; REAL_MUL_RID; REAL_ADD_RID; bitval] + `(if p then x + a else x):real = x + a * &(bitval p)`] THEN + DISCH_TAC] THEN + + (*** Final corrective masked addition ***) + + X86_ACCSTEPS_TAC P256_MONTJDOUBLE_EXEC [46;48;50;53] (42--53) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC MOD_UNIQ_BALANCED_REAL THEN + MAP_EVERY EXISTS_TAC [`h + 1`; `256`] THEN + ASM_REWRITE_TAC[] THEN + ABBREV_TAC `topcar <=> 3 * m + 8 * n' < (h + 1) * p_256` THEN + FIRST_X_ASSUM(SUBST1_TAC o MATCH_MP (REAL_ARITH + `x:real = &(3 * m + 8 * n') - y + z + ==> &(3 * m + 8 * n') = x + y - z`)) THEN + REWRITE_TAC[p_256] THEN CONJ_TAC THENL [ARITH_TAC; ALL_TAC] THEN + REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; p_256; bignum_of_wordlist] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + POP_ASSUM_LIST(K ALL_TAC) THEN + BOOL_CASES_TAC `topcar:bool` THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC WORD_REDUCE_CONV THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Overall point operation proof. *) +(* ------------------------------------------------------------------------- *) + +let P256_MONTJDOUBLE_CORRECT = time prove + (`!p3 p1 t1 pc stackpointer. + ALLPAIRS nonoverlapping + [(p3,96); (stackpointer,224)] + [(word pc,0x1713); (p1,96)] /\ + nonoverlapping (p3,96) (stackpointer,224) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST p256_montjdouble_mc) /\ + read RIP s = word(pc + 0x11) /\ + read RSP s = stackpointer /\ + C_ARGUMENTS [p3; p1] s /\ + bignum_triple_from_memory (p1,4) s = t1) + (\s. read RIP s = word (pc + 0x1701) /\ + (!x1 y1 z1. + ~(z1 = &0) /\ + t1 = tripled nistp256_encode (x1,y1,z1) + ==> bignum_triple_from_memory(p3,4) s = + tripled nistp256_encode + (jacobian_add nistp256 (x1,y1,z1) (x1,y1,z1)))) + (MAYCHANGE [RIP; RAX; RBX; RBP; RCX; RDX; + R8; R9; R10; R11; R12; R13; R14; R15] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,96); + memory :> bytes(stackpointer,224)])`, + REWRITE_TAC[FORALL_PAIR_THM] THEN + MAP_EVERY X_GEN_TAC + [`p3:int64`; `p1:int64`; `x1:num`; `y1:num`; `z1:num`; + `pc:num`; `stackpointer:int64`] THEN + REWRITE_TAC[ALLPAIRS; ALL; NONOVERLAPPING_CLAUSES] THEN STRIP_TAC THEN + REWRITE_TAC[C_ARGUMENTS; SOME_FLAGS; PAIR_EQ; bignum_triple_from_memory] THEN + CONV_TAC(ONCE_DEPTH_CONV NUM_MULT_CONV) THEN + CONV_TAC(ONCE_DEPTH_CONV NORMALIZE_RELATIVE_ADDRESS_CONV) THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + + LOCAL_MONTSQR_P256_TAC 0 ["z2";"z_1"] THEN + LOCAL_MONTSQR_P256_TAC 0 ["y2";"y_1"] THEN + LOCAL_WEAKADD_P256_TAC 0 ["t1";"x_1";"z2"] THEN + LOCAL_SUB_P256_TAC 0 ["t2";"x_1";"z2"] THEN + LOCAL_MONTMUL_P256_TAC 0 ["x2p";"t1";"t2"] THEN + LOCAL_ADD_P256_TAC 0 ["t1";"y_1";"z_1"] THEN + LOCAL_MONTSQR_P256_TAC 0 ["x4p";"x2p"] THEN + LOCAL_MONTMUL_P256_TAC 0 ["xy2";"x_1";"y2"] THEN + LOCAL_MONTSQR_P256_TAC 0 ["t2";"t1"] THEN + LOCAL_CMSUBC9_P256_TAC 0 ["d";"xy2";"x4p"] THEN + LOCAL_SUB_P256_TAC 0 ["t1";"t2";"z2"] THEN + LOCAL_MONTSQR_P256_TAC 0 ["y4";"y2"] THEN + LOCAL_SUB_P256_TAC 0 ["z_3";"t1";"y2"] THEN + LOCAL_MONTMUL_P256_TAC 0 ["dx2";"d";"x2p"] THEN + LOCAL_CMSUB41_P256_TAC 0 ["x_3";"xy2";"d"] THEN + LOCAL_CMSUB38_P256_TAC 0 ["y_3";"dx2";"y4"] THEN + + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + DISCARD_STATE_TAC "s16" THEN + DISCARD_MATCHING_ASSUMPTIONS [`nonoverlapping_modulo a b c`] THEN + + MAP_EVERY X_GEN_TAC [`x1':int`; `y1':int`; `z1':int`] THEN + DISCH_THEN(CONJUNCTS_THEN2 ASSUME_TAC MP_TAC) THEN + REWRITE_TAC[tripled; nistp256_encode; montgomery_encode; PAIR_EQ] THEN + + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN + (STRIP_ASSUME_TAC o MATCH_MP unilemma2)) THEN + + REPEAT(FIRST_X_ASSUM(MP_TAC o check (is_imp o concl))) THEN + REPEAT(ANTS_TAC THENL + [REWRITE_TAC[p_256] THEN RULE_ASSUM_TAC(REWRITE_RULE[p_256]) THEN + CONV_TAC NUM_REDUCE_CONV THEN ASM BOUNDER_TAC[]; + (DISCH_THEN(STRIP_ASSUME_TAC o MATCH_MP unilemma0) ORELSE + DISCH_THEN(STRIP_ASSUME_TAC o MATCH_MP unilemma1) ORELSE + STRIP_TAC)]) THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o GEN_REWRITE_RULE I [GSYM NOT_LE])) THEN + + RULE_ASSUM_TAC(REWRITE_RULE + [num_congruent; GSYM INT_OF_NUM_CLAUSES; GSYM INT_OF_NUM_REM]) THEN + RULE_ASSUM_TAC(REWRITE_RULE[GSYM INT_REM_EQ]) THEN + + RULE_ASSUM_TAC(ONCE_REWRITE_RULE[GSYM INT_SUB_REM; GSYM INT_ADD_REM]) THEN + RULE_ASSUM_TAC(REWRITE_RULE[INT_POW_2]) THEN + RULE_ASSUM_TAC(GEN_REWRITE_RULE (RAND_CONV o TRY_CONV) [lemont]) THEN + + ASM_REWRITE_TAC[jacobian_add; jacobian_eq; nistp256] THEN + ASM_REWRITE_TAC[GSYM nistp256] THEN + REWRITE_TAC[INTEGER_MOD_RING_CLAUSES] THEN + CONV_TAC INT_REDUCE_CONV THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN + CONV_TAC INT_REM_DOWN_CONV THEN + REWRITE_TAC[tripled; montgomery_encode] THEN + REWRITE_TAC[PAIR_EQ; GSYM INT_OF_NUM_EQ; nintlemma] THEN + CONV_TAC INT_REM_DOWN_CONV THEN + + ASM_REWRITE_TAC[pumont; INT_REM_REM; GSYM INT_ADD_LDISTRIB; + GSYM INT_ADD_LDISTRIB; GSYM INT_SUB_LDISTRIB; + INT_SUB_REM; INT_ADD_REM; silemma] THEN + + CONV_TAC INT_REM_DOWN_CONV THEN REPEAT CONJ_TAC THEN + AP_THM_TAC THEN AP_TERM_TAC THEN INT_ARITH_TAC);; + +let P256_MONTJDOUBLE_SUBROUTINE_CORRECT = time prove + (`!p3 p1 t1 pc stackpointer returnaddress. + ALLPAIRS nonoverlapping + [(p3,96); (word_sub stackpointer (word 272),272)] + [(word pc,0x1713); (p1,96)] /\ + nonoverlapping (p3,96) (word_sub stackpointer (word 272),280) + ==> ensures x86 + (\s. bytes_loaded s (word pc) p256_montjdouble_mc /\ + read RIP s = word pc /\ + read RSP s = stackpointer /\ + read (memory :> bytes64 stackpointer) s = returnaddress /\ + C_ARGUMENTS [p3; p1] s /\ + bignum_triple_from_memory (p1,4) s = t1) + (\s. read RIP s = returnaddress /\ + read RSP s = word_add stackpointer (word 8) /\ + (!x1 y1 z1. + ~(z1 = &0) /\ + t1 = tripled nistp256_encode (x1,y1,z1) + ==> bignum_triple_from_memory(p3,4) s = + tripled nistp256_encode + (jacobian_add nistp256 (x1,y1,z1) (x1,y1,z1)))) + (MAYCHANGE [RIP; RSP; RAX; RCX; RDX; R8; R9; R10; R11] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,96); + memory :> bytes(word_sub stackpointer (word 272),272)])`, + X86_PROMOTE_RETURN_STACK_TAC p256_montjdouble_mc P256_MONTJDOUBLE_CORRECT + `[RBX; RBP; R12; R13; R14; R15]` 272);; + +(* ------------------------------------------------------------------------- *) +(* Correctness of Windows ABI version. *) +(* ------------------------------------------------------------------------- *) + +let windows_p256_montjdouble_mc = define_from_elf "windows_p256_montjdouble_mc" + "x86/p256/p256_montjdouble.obj";; + +let WINDOWS_P256_MONTJDOUBLE_SUBROUTINE_CORRECT = time prove + (`!p3 p1 t1 pc stackpointer returnaddress. + ALLPAIRS nonoverlapping + [(p3,96); (word_sub stackpointer (word 288),288)] + [(word pc,0x171d); (p1,96)] /\ + nonoverlapping (p3,96) (word_sub stackpointer (word 288),296) + ==> ensures x86 + (\s. bytes_loaded s (word pc) windows_p256_montjdouble_mc /\ + read RIP s = word pc /\ + read RSP s = stackpointer /\ + read (memory :> bytes64 stackpointer) s = returnaddress /\ + WINDOWS_C_ARGUMENTS [p3; p1] s /\ + bignum_triple_from_memory (p1,4) s = t1) + (\s. read RIP s = returnaddress /\ + read RSP s = word_add stackpointer (word 8) /\ + (!x1 y1 z1. + ~(z1 = &0) /\ + t1 = tripled nistp256_encode (x1,y1,z1) + ==> bignum_triple_from_memory(p3,4) s = + tripled nistp256_encode + (jacobian_add nistp256 (x1,y1,z1) (x1,y1,z1)))) + (MAYCHANGE [RIP; RSP; RAX; RCX; RDX; R8; R9; R10; R11] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,96); + memory :> bytes(word_sub stackpointer (word 288),288)])`, + WINDOWS_X86_WRAP_STACK_TAC + windows_p256_montjdouble_mc p256_montjdouble_mc + P256_MONTJDOUBLE_CORRECT + `[RBX; RBP; R12; R13; R14; R15]` 272);; diff --git a/x86/proofs/p256_montjmixadd.ml b/x86/proofs/p256_montjmixadd.ml new file mode 100644 index 0000000000..ffd9b2d08f --- /dev/null +++ b/x86/proofs/p256_montjmixadd.ml @@ -0,0 +1,2959 @@ +(* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + *) + +(* ========================================================================= *) +(* Point addition in Montgomery-Jacobian coordinates for NIST P-256 curve. *) +(* ========================================================================= *) + +needs "x86/proofs/base.ml";; +needs "common/ecencoding.ml";; +needs "EC/jacobian.ml";; +needs "EC/nistp256.ml";; + +prioritize_int();; +prioritize_real();; +prioritize_num();; + +(**** print_literal_from_elf "x86/p256/p256_montjmixadd.o";; + ****) + +let p256_montjmixadd_mc = define_assert_from_elf + "p256_montjmixadd_mc" "x86/p256/p256_montjmixadd.o" +[ + 0x53; (* PUSH (% rbx) *) + 0x55; (* PUSH (% rbp) *) + 0x41; 0x54; (* PUSH (% r12) *) + 0x41; 0x55; (* PUSH (% r13) *) + 0x41; 0x56; (* PUSH (% r14) *) + 0x41; 0x57; (* PUSH (% r15) *) + 0x48; 0x81; 0xec; 0xc0; 0x00; 0x00; 0x00; + (* SUB (% rsp) (Imm32 (word 192)) *) + 0x48; 0x89; 0xd5; (* MOV (% rbp) (% rdx) *) + 0x48; 0x8b; 0x56; 0x40; (* MOV (% rdx) (Memop Quadword (%% (rsi,64))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0xfa; + (* MULX4 (% r15,% r8) (% rdx,% rdx) *) + 0xc4; 0x62; 0xb3; 0xf6; 0x56; 0x48; + (* MULX4 (% r10,% r9) (% rdx,Memop Quadword (%% (rsi,72))) *) + 0xc4; 0x62; 0xa3; 0xf6; 0x66; 0x58; + (* MULX4 (% r12,% r11) (% rdx,Memop Quadword (%% (rsi,88))) *) + 0x48; 0x8b; 0x56; 0x50; (* MOV (% rdx) (Memop Quadword (%% (rsi,80))) *) + 0xc4; 0x62; 0x93; 0xf6; 0x76; 0x58; + (* MULX4 (% r14,% r13) (% rdx,Memop Quadword (%% (rsi,88))) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x40; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,64))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x48; 0x8b; 0x56; 0x58; (* MOV (% rdx) (Memop Quadword (%% (rsi,88))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADCX (% r13) (% rcx) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADOX (% r14) (% rcx) *) + 0x49; 0x11; 0xce; (* ADC (% r14) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% r9) (% r9) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xcf; + (* ADOX (% r9) (% r15) *) + 0x48; 0x8b; 0x56; 0x48; (* MOV (% rdx) (Memop Quadword (%% (rsi,72))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xd2; + (* ADCX (% r10) (% r10) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADOX (% r10) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% r11) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% r11) (% rdx) *) + 0x48; 0x8b; 0x56; 0x50; (* MOV (% rdx) (Memop Quadword (%% (rsi,80))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xe4; + (* ADCX (% r12) (% r12) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADOX (% r12) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% r13) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xea; + (* ADOX (% r13) (% rdx) *) + 0x48; 0x8b; 0x56; 0x58; (* MOV (% rdx) (Memop Quadword (%% (rsi,88))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xfa; + (* MULX4 (% r15,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf6; + (* ADCX (% r14) (% r14) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% rax) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% rcx) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0xba; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rdx) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADCX (% r13) (% rcx) *) + 0x41; 0x89; 0xc9; (* MOV (% r9d) (% ecx) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc9; + (* ADOX (% r9) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% r9) (% rcx) *) + 0x4d; 0x01; 0xce; (* ADD (% r14) (% r9) *) + 0x49; 0x11; 0xcf; (* ADC (% r15) (% rcx) *) + 0x41; 0x89; 0xc8; (* MOV (% r8d) (% ecx) *) + 0x49; 0x11; 0xc8; (* ADC (% r8) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0xba; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rdx) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% rcx) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc1; + (* ADOX (% r8) (% rcx) *) + 0x49; 0x11; 0xc8; (* ADC (% r8) (% rcx) *) + 0x41; 0xb8; 0x01; 0x00; 0x00; 0x00; + (* MOV (% r8d) (Imm32 (word 1)) *) + 0x48; 0x8d; 0x52; 0xff; (* LEA (% rdx) (%% (rdx,18446744073709551615)) *) + 0x48; 0x8d; 0x41; 0xff; (* LEA (% rax) (%% (rcx,18446744073709551615)) *) + 0x41; 0xbb; 0xfe; 0xff; 0xff; 0xff; + (* MOV (% r11d) (Imm32 (word 4294967294)) *) + 0x4c; 0x0f; 0x44; 0xc1; (* CMOVE (% r8) (% rcx) *) + 0x48; 0x0f; 0x44; 0xd1; (* CMOVE (% rdx) (% rcx) *) + 0x48; 0x0f; 0x44; 0xc1; (* CMOVE (% rax) (% rcx) *) + 0x4c; 0x0f; 0x44; 0xd9; (* CMOVE (% r11) (% rcx) *) + 0x4d; 0x01; 0xc4; (* ADD (% r12) (% r8) *) + 0x49; 0x11; 0xd5; (* ADC (% r13) (% rdx) *) + 0x49; 0x11; 0xc6; (* ADC (% r14) (% rax) *) + 0x4d; 0x11; 0xdf; (* ADC (% r15) (% r11) *) + 0x4c; 0x89; 0x24; 0x24; (* MOV (Memop Quadword (%% (rsp,0))) (% r12) *) + 0x4c; 0x89; 0x6c; 0x24; 0x08; + (* MOV (Memop Quadword (%% (rsp,8))) (% r13) *) + 0x4c; 0x89; 0x74; 0x24; 0x10; + (* MOV (Memop Quadword (%% (rsp,16))) (% r14) *) + 0x4c; 0x89; 0x7c; 0x24; 0x18; + (* MOV (Memop Quadword (%% (rsp,24))) (% r15) *) + 0x45; 0x31; 0xed; (* XOR (% r13d) (% r13d) *) + 0x48; 0x8b; 0x55; 0x20; (* MOV (% rdx) (Memop Quadword (%% (rbp,32))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x4e; 0x40; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsi,64))) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x56; 0x48; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsi,72))) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x5e; 0x50; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsi,80))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x66; 0x58; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsi,88))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x4d; 0x11; 0xec; (* ADC (% r12) (% r13) *) + 0x48; 0x8b; 0x55; 0x28; (* MOV (% rdx) (Memop Quadword (%% (rbp,40))) *) + 0x45; 0x31; 0xf6; (* XOR (% r14d) (% r14d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x40; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,64))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x58; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4d; 0x11; 0xf5; (* ADC (% r13) (% r14) *) + 0x45; 0x31; 0xff; (* XOR (% r15d) (% r15d) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0xf7; 0xd2; (* NOT (% rdx) *) + 0x48; 0x8d; 0x52; 0x02; (* LEA (% rdx) (%% (rdx,2)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xef; + (* ADCX (% r13) (% r15) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf7; + (* ADOX (% r14) (% r15) *) + 0x4d; 0x11; 0xfe; (* ADC (% r14) (% r15) *) + 0x48; 0x8b; 0x55; 0x30; (* MOV (% rdx) (Memop Quadword (%% (rbp,48))) *) + 0x45; 0x31; 0xc0; (* XOR (% r8d) (% r8d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x40; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,64))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% r8) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x58; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,88))) *) + 0x49; 0x11; 0xc5; (* ADC (% r13) (% rax) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0x4d; 0x11; 0xc7; (* ADC (% r15) (% r8) *) + 0x48; 0x8b; 0x55; 0x38; (* MOV (% rdx) (Memop Quadword (%% (rbp,56))) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x40; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,64))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x58; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,88))) *) + 0x49; 0x11; 0xc6; (* ADC (% r14) (% rax) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x4d; 0x11; 0xc8; (* ADC (% r8) (% r9) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0xf7; 0xd2; (* NOT (% rdx) *) + 0x48; 0x8d; 0x52; 0x02; (* LEA (% rdx) (%% (rdx,2)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% r9) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xc1; + (* ADOX (% r8) (% r9) *) + 0x4d; 0x11; 0xc8; (* ADC (% r8) (% r9) *) + 0xb9; 0x01; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 1)) *) + 0x4c; 0x01; 0xe1; (* ADD (% rcx) (% r12) *) + 0x48; 0xff; 0xca; (* DEC (% rdx) *) + 0x4c; 0x11; 0xea; (* ADC (% rdx) (% r13) *) + 0x49; 0xff; 0xc9; (* DEC (% r9) *) + 0x4c; 0x89; 0xc8; (* MOV (% rax) (% r9) *) + 0x4d; 0x11; 0xf1; (* ADC (% r9) (% r14) *) + 0x41; 0xbb; 0xfe; 0xff; 0xff; 0xff; + (* MOV (% r11d) (Imm32 (word 4294967294)) *) + 0x4d; 0x11; 0xfb; (* ADC (% r11) (% r15) *) + 0x4c; 0x11; 0xc0; (* ADC (% rax) (% r8) *) + 0x4c; 0x0f; 0x42; 0xe1; (* CMOVB (% r12) (% rcx) *) + 0x4c; 0x0f; 0x42; 0xea; (* CMOVB (% r13) (% rdx) *) + 0x4d; 0x0f; 0x42; 0xf1; (* CMOVB (% r14) (% r9) *) + 0x4d; 0x0f; 0x42; 0xfb; (* CMOVB (% r15) (% r11) *) + 0x4c; 0x89; 0x64; 0x24; 0x20; + (* MOV (Memop Quadword (%% (rsp,32))) (% r12) *) + 0x4c; 0x89; 0x6c; 0x24; 0x28; + (* MOV (Memop Quadword (%% (rsp,40))) (% r13) *) + 0x4c; 0x89; 0x74; 0x24; 0x30; + (* MOV (Memop Quadword (%% (rsp,48))) (% r14) *) + 0x4c; 0x89; 0x7c; 0x24; 0x38; + (* MOV (Memop Quadword (%% (rsp,56))) (% r15) *) + 0x45; 0x31; 0xed; (* XOR (% r13d) (% r13d) *) + 0x48; 0x8b; 0x55; 0x00; (* MOV (% rdx) (Memop Quadword (%% (rbp,0))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x0c; 0x24; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x54; 0x24; 0x08; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x64; 0x24; 0x18; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x4d; 0x11; 0xec; (* ADC (% r12) (% r13) *) + 0x48; 0x8b; 0x55; 0x08; (* MOV (% rdx) (Memop Quadword (%% (rbp,8))) *) + 0x45; 0x31; 0xf6; (* XOR (% r14d) (% r14d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4d; 0x11; 0xf5; (* ADC (% r13) (% r14) *) + 0x45; 0x31; 0xff; (* XOR (% r15d) (% r15d) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0xf7; 0xd2; (* NOT (% rdx) *) + 0x48; 0x8d; 0x52; 0x02; (* LEA (% rdx) (%% (rdx,2)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xef; + (* ADCX (% r13) (% r15) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf7; + (* ADOX (% r14) (% r15) *) + 0x4d; 0x11; 0xfe; (* ADC (% r14) (% r15) *) + 0x48; 0x8b; 0x55; 0x10; (* MOV (% rdx) (Memop Quadword (%% (rbp,16))) *) + 0x45; 0x31; 0xc0; (* XOR (% r8d) (% r8d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% r8) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x49; 0x11; 0xc5; (* ADC (% r13) (% rax) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0x4d; 0x11; 0xc7; (* ADC (% r15) (% r8) *) + 0x48; 0x8b; 0x55; 0x18; (* MOV (% rdx) (Memop Quadword (%% (rbp,24))) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x49; 0x11; 0xc6; (* ADC (% r14) (% rax) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x4d; 0x11; 0xc8; (* ADC (% r8) (% r9) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0xf7; 0xd2; (* NOT (% rdx) *) + 0x48; 0x8d; 0x52; 0x02; (* LEA (% rdx) (%% (rdx,2)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% r9) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xc1; + (* ADOX (% r8) (% r9) *) + 0x4d; 0x11; 0xc8; (* ADC (% r8) (% r9) *) + 0xb9; 0x01; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 1)) *) + 0x4c; 0x01; 0xe1; (* ADD (% rcx) (% r12) *) + 0x48; 0xff; 0xca; (* DEC (% rdx) *) + 0x4c; 0x11; 0xea; (* ADC (% rdx) (% r13) *) + 0x49; 0xff; 0xc9; (* DEC (% r9) *) + 0x4c; 0x89; 0xc8; (* MOV (% rax) (% r9) *) + 0x4d; 0x11; 0xf1; (* ADC (% r9) (% r14) *) + 0x41; 0xbb; 0xfe; 0xff; 0xff; 0xff; + (* MOV (% r11d) (Imm32 (word 4294967294)) *) + 0x4d; 0x11; 0xfb; (* ADC (% r11) (% r15) *) + 0x4c; 0x11; 0xc0; (* ADC (% rax) (% r8) *) + 0x4c; 0x0f; 0x42; 0xe1; (* CMOVB (% r12) (% rcx) *) + 0x4c; 0x0f; 0x42; 0xea; (* CMOVB (% r13) (% rdx) *) + 0x4d; 0x0f; 0x42; 0xf1; (* CMOVB (% r14) (% r9) *) + 0x4d; 0x0f; 0x42; 0xfb; (* CMOVB (% r15) (% r11) *) + 0x4c; 0x89; 0x64; 0x24; 0x40; + (* MOV (Memop Quadword (%% (rsp,64))) (% r12) *) + 0x4c; 0x89; 0x6c; 0x24; 0x48; + (* MOV (Memop Quadword (%% (rsp,72))) (% r13) *) + 0x4c; 0x89; 0x74; 0x24; 0x50; + (* MOV (Memop Quadword (%% (rsp,80))) (% r14) *) + 0x4c; 0x89; 0x7c; 0x24; 0x58; + (* MOV (Memop Quadword (%% (rsp,88))) (% r15) *) + 0x45; 0x31; 0xed; (* XOR (% r13d) (% r13d) *) + 0x48; 0x8b; 0x54; 0x24; 0x20; + (* MOV (% rdx) (Memop Quadword (%% (rsp,32))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x0c; 0x24; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x54; 0x24; 0x08; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x64; 0x24; 0x18; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x4d; 0x11; 0xec; (* ADC (% r12) (% r13) *) + 0x48; 0x8b; 0x54; 0x24; 0x28; + (* MOV (% rdx) (Memop Quadword (%% (rsp,40))) *) + 0x45; 0x31; 0xf6; (* XOR (% r14d) (% r14d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4d; 0x11; 0xf5; (* ADC (% r13) (% r14) *) + 0x45; 0x31; 0xff; (* XOR (% r15d) (% r15d) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0xf7; 0xd2; (* NOT (% rdx) *) + 0x48; 0x8d; 0x52; 0x02; (* LEA (% rdx) (%% (rdx,2)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xef; + (* ADCX (% r13) (% r15) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf7; + (* ADOX (% r14) (% r15) *) + 0x4d; 0x11; 0xfe; (* ADC (% r14) (% r15) *) + 0x48; 0x8b; 0x54; 0x24; 0x30; + (* MOV (% rdx) (Memop Quadword (%% (rsp,48))) *) + 0x45; 0x31; 0xc0; (* XOR (% r8d) (% r8d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% r8) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x49; 0x11; 0xc5; (* ADC (% r13) (% rax) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0x4d; 0x11; 0xc7; (* ADC (% r15) (% r8) *) + 0x48; 0x8b; 0x54; 0x24; 0x38; + (* MOV (% rdx) (Memop Quadword (%% (rsp,56))) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x49; 0x11; 0xc6; (* ADC (% r14) (% rax) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x4d; 0x11; 0xc8; (* ADC (% r8) (% r9) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0xf7; 0xd2; (* NOT (% rdx) *) + 0x48; 0x8d; 0x52; 0x02; (* LEA (% rdx) (%% (rdx,2)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% r9) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xc1; + (* ADOX (% r8) (% r9) *) + 0x4d; 0x11; 0xc8; (* ADC (% r8) (% r9) *) + 0xb9; 0x01; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 1)) *) + 0x4c; 0x01; 0xe1; (* ADD (% rcx) (% r12) *) + 0x48; 0xff; 0xca; (* DEC (% rdx) *) + 0x4c; 0x11; 0xea; (* ADC (% rdx) (% r13) *) + 0x49; 0xff; 0xc9; (* DEC (% r9) *) + 0x4c; 0x89; 0xc8; (* MOV (% rax) (% r9) *) + 0x4d; 0x11; 0xf1; (* ADC (% r9) (% r14) *) + 0x41; 0xbb; 0xfe; 0xff; 0xff; 0xff; + (* MOV (% r11d) (Imm32 (word 4294967294)) *) + 0x4d; 0x11; 0xfb; (* ADC (% r11) (% r15) *) + 0x4c; 0x11; 0xc0; (* ADC (% rax) (% r8) *) + 0x4c; 0x0f; 0x42; 0xe1; (* CMOVB (% r12) (% rcx) *) + 0x4c; 0x0f; 0x42; 0xea; (* CMOVB (% r13) (% rdx) *) + 0x4d; 0x0f; 0x42; 0xf1; (* CMOVB (% r14) (% r9) *) + 0x4d; 0x0f; 0x42; 0xfb; (* CMOVB (% r15) (% r11) *) + 0x4c; 0x89; 0x64; 0x24; 0x20; + (* MOV (Memop Quadword (%% (rsp,32))) (% r12) *) + 0x4c; 0x89; 0x6c; 0x24; 0x28; + (* MOV (Memop Quadword (%% (rsp,40))) (% r13) *) + 0x4c; 0x89; 0x74; 0x24; 0x30; + (* MOV (Memop Quadword (%% (rsp,48))) (% r14) *) + 0x4c; 0x89; 0x7c; 0x24; 0x38; + (* MOV (Memop Quadword (%% (rsp,56))) (% r15) *) + 0x48; 0x8b; 0x44; 0x24; 0x40; + (* MOV (% rax) (Memop Quadword (%% (rsp,64))) *) + 0x48; 0x2b; 0x06; (* SUB (% rax) (Memop Quadword (%% (rsi,0))) *) + 0x48; 0x8b; 0x4c; 0x24; 0x48; + (* MOV (% rcx) (Memop Quadword (%% (rsp,72))) *) + 0x48; 0x1b; 0x4e; 0x08; (* SBB (% rcx) (Memop Quadword (%% (rsi,8))) *) + 0x4c; 0x8b; 0x44; 0x24; 0x50; + (* MOV (% r8) (Memop Quadword (%% (rsp,80))) *) + 0x4c; 0x1b; 0x46; 0x10; (* SBB (% r8) (Memop Quadword (%% (rsi,16))) *) + 0x4c; 0x8b; 0x4c; 0x24; 0x58; + (* MOV (% r9) (Memop Quadword (%% (rsp,88))) *) + 0x4c; 0x1b; 0x4e; 0x18; (* SBB (% r9) (Memop Quadword (%% (rsi,24))) *) + 0x41; 0xba; 0xff; 0xff; 0xff; 0xff; + (* MOV (% r10d) (Imm32 (word 4294967295)) *) + 0x4d; 0x19; 0xdb; (* SBB (% r11) (% r11) *) + 0x48; 0x31; 0xd2; (* XOR (% rdx) (% rdx) *) + 0x4d; 0x21; 0xda; (* AND (% r10) (% r11) *) + 0x4c; 0x29; 0xd2; (* SUB (% rdx) (% r10) *) + 0x4c; 0x01; 0xd8; (* ADD (% rax) (% r11) *) + 0x48; 0x89; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,160))) (% rax) *) + 0x4c; 0x11; 0xd1; (* ADC (% rcx) (% r10) *) + 0x48; 0x89; 0x8c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,168))) (% rcx) *) + 0x49; 0x83; 0xd0; 0x00; (* ADC (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x84; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,176))) (% r8) *) + 0x49; 0x11; 0xd1; (* ADC (% r9) (% rdx) *) + 0x4c; 0x89; 0x8c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,184))) (% r9) *) + 0x48; 0x8b; 0x44; 0x24; 0x20; + (* MOV (% rax) (Memop Quadword (%% (rsp,32))) *) + 0x48; 0x2b; 0x46; 0x20; (* SUB (% rax) (Memop Quadword (%% (rsi,32))) *) + 0x48; 0x8b; 0x4c; 0x24; 0x28; + (* MOV (% rcx) (Memop Quadword (%% (rsp,40))) *) + 0x48; 0x1b; 0x4e; 0x28; (* SBB (% rcx) (Memop Quadword (%% (rsi,40))) *) + 0x4c; 0x8b; 0x44; 0x24; 0x30; + (* MOV (% r8) (Memop Quadword (%% (rsp,48))) *) + 0x4c; 0x1b; 0x46; 0x30; (* SBB (% r8) (Memop Quadword (%% (rsi,48))) *) + 0x4c; 0x8b; 0x4c; 0x24; 0x38; + (* MOV (% r9) (Memop Quadword (%% (rsp,56))) *) + 0x4c; 0x1b; 0x4e; 0x38; (* SBB (% r9) (Memop Quadword (%% (rsi,56))) *) + 0x41; 0xba; 0xff; 0xff; 0xff; 0xff; + (* MOV (% r10d) (Imm32 (word 4294967295)) *) + 0x4d; 0x19; 0xdb; (* SBB (% r11) (% r11) *) + 0x48; 0x31; 0xd2; (* XOR (% rdx) (% rdx) *) + 0x4d; 0x21; 0xda; (* AND (% r10) (% r11) *) + 0x4c; 0x29; 0xd2; (* SUB (% rdx) (% r10) *) + 0x4c; 0x01; 0xd8; (* ADD (% rax) (% r11) *) + 0x48; 0x89; 0x44; 0x24; 0x20; + (* MOV (Memop Quadword (%% (rsp,32))) (% rax) *) + 0x4c; 0x11; 0xd1; (* ADC (% rcx) (% r10) *) + 0x48; 0x89; 0x4c; 0x24; 0x28; + (* MOV (Memop Quadword (%% (rsp,40))) (% rcx) *) + 0x49; 0x83; 0xd0; 0x00; (* ADC (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x44; 0x24; 0x30; + (* MOV (Memop Quadword (%% (rsp,48))) (% r8) *) + 0x49; 0x11; 0xd1; (* ADC (% r9) (% rdx) *) + 0x4c; 0x89; 0x4c; 0x24; 0x38; + (* MOV (Memop Quadword (%% (rsp,56))) (% r9) *) + 0x48; 0x8b; 0x94; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,160))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0xfa; + (* MULX4 (% r15,% r8) (% rdx,% rdx) *) + 0xc4; 0x62; 0xb3; 0xf6; 0x94; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% r10,% r9) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0xc4; 0x62; 0xa3; 0xf6; 0xa4; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r12,% r11) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x48; 0x8b; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,176))) *) + 0xc4; 0x62; 0x93; 0xf6; 0xb4; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r14,% r13) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x48; 0x8b; 0x94; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,184))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADCX (% r13) (% rcx) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADOX (% r14) (% rcx) *) + 0x49; 0x11; 0xce; (* ADC (% r14) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% r9) (% r9) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xcf; + (* ADOX (% r9) (% r15) *) + 0x48; 0x8b; 0x94; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,168))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xd2; + (* ADCX (% r10) (% r10) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADOX (% r10) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% r11) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% r11) (% rdx) *) + 0x48; 0x8b; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,176))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xe4; + (* ADCX (% r12) (% r12) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADOX (% r12) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% r13) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xea; + (* ADOX (% r13) (% rdx) *) + 0x48; 0x8b; 0x94; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,184))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xfa; + (* MULX4 (% r15,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf6; + (* ADCX (% r14) (% r14) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% rax) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% rcx) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0xba; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rdx) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADCX (% r13) (% rcx) *) + 0x41; 0x89; 0xc9; (* MOV (% r9d) (% ecx) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc9; + (* ADOX (% r9) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% r9) (% rcx) *) + 0x4d; 0x01; 0xce; (* ADD (% r14) (% r9) *) + 0x49; 0x11; 0xcf; (* ADC (% r15) (% rcx) *) + 0x41; 0x89; 0xc8; (* MOV (% r8d) (% ecx) *) + 0x49; 0x11; 0xc8; (* ADC (% r8) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0xba; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rdx) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% rcx) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc1; + (* ADOX (% r8) (% rcx) *) + 0x49; 0x11; 0xc8; (* ADC (% r8) (% rcx) *) + 0x41; 0xb8; 0x01; 0x00; 0x00; 0x00; + (* MOV (% r8d) (Imm32 (word 1)) *) + 0x48; 0x8d; 0x52; 0xff; (* LEA (% rdx) (%% (rdx,18446744073709551615)) *) + 0x48; 0x8d; 0x41; 0xff; (* LEA (% rax) (%% (rcx,18446744073709551615)) *) + 0x41; 0xbb; 0xfe; 0xff; 0xff; 0xff; + (* MOV (% r11d) (Imm32 (word 4294967294)) *) + 0x4c; 0x0f; 0x44; 0xc1; (* CMOVE (% r8) (% rcx) *) + 0x48; 0x0f; 0x44; 0xd1; (* CMOVE (% rdx) (% rcx) *) + 0x48; 0x0f; 0x44; 0xc1; (* CMOVE (% rax) (% rcx) *) + 0x4c; 0x0f; 0x44; 0xd9; (* CMOVE (% r11) (% rcx) *) + 0x4d; 0x01; 0xc4; (* ADD (% r12) (% r8) *) + 0x49; 0x11; 0xd5; (* ADC (% r13) (% rdx) *) + 0x49; 0x11; 0xc6; (* ADC (% r14) (% rax) *) + 0x4d; 0x11; 0xdf; (* ADC (% r15) (% r11) *) + 0x4c; 0x89; 0x64; 0x24; 0x60; + (* MOV (Memop Quadword (%% (rsp,96))) (% r12) *) + 0x4c; 0x89; 0x6c; 0x24; 0x68; + (* MOV (Memop Quadword (%% (rsp,104))) (% r13) *) + 0x4c; 0x89; 0x74; 0x24; 0x70; + (* MOV (Memop Quadword (%% (rsp,112))) (% r14) *) + 0x4c; 0x89; 0x7c; 0x24; 0x78; + (* MOV (Memop Quadword (%% (rsp,120))) (% r15) *) + 0x48; 0x8b; 0x54; 0x24; 0x20; + (* MOV (% rdx) (Memop Quadword (%% (rsp,32))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0xfa; + (* MULX4 (% r15,% r8) (% rdx,% rdx) *) + 0xc4; 0x62; 0xb3; 0xf6; 0x54; 0x24; 0x28; + (* MULX4 (% r10,% r9) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0xc4; 0x62; 0xa3; 0xf6; 0x64; 0x24; 0x38; + (* MULX4 (% r12,% r11) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x48; 0x8b; 0x54; 0x24; 0x30; + (* MOV (% rdx) (Memop Quadword (%% (rsp,48))) *) + 0xc4; 0x62; 0x93; 0xf6; 0x74; 0x24; 0x38; + (* MULX4 (% r14,% r13) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x48; 0x8b; 0x54; 0x24; 0x38; + (* MOV (% rdx) (Memop Quadword (%% (rsp,56))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% rbp) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf5; + (* ADOX (% r14) (% rbp) *) + 0x49; 0x11; 0xee; (* ADC (% r14) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% r9) (% r9) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xcf; + (* ADOX (% r9) (% r15) *) + 0x48; 0x8b; 0x54; 0x24; 0x28; + (* MOV (% rdx) (Memop Quadword (%% (rsp,40))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xd2; + (* ADCX (% r10) (% r10) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADOX (% r10) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% r11) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% r11) (% rdx) *) + 0x48; 0x8b; 0x54; 0x24; 0x30; + (* MOV (% rdx) (Memop Quadword (%% (rsp,48))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xe4; + (* ADCX (% r12) (% r12) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADOX (% r12) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% r13) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xea; + (* ADOX (% r13) (% rdx) *) + 0x48; 0x8b; 0x54; 0x24; 0x38; + (* MOV (% rdx) (Memop Quadword (%% (rsp,56))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xfa; + (* MULX4 (% r15,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf6; + (* ADCX (% r14) (% r14) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% rax) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADCX (% r15) (% rbp) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADOX (% r15) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0xba; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rdx) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% rbp) *) + 0x41; 0x89; 0xe9; (* MOV (% r9d) (% ebp) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcd; + (* ADOX (% r9) (% rbp) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xcd; + (* ADCX (% r9) (% rbp) *) + 0x4d; 0x01; 0xce; (* ADD (% r14) (% r9) *) + 0x49; 0x11; 0xef; (* ADC (% r15) (% rbp) *) + 0x41; 0x89; 0xe8; (* MOV (% r8d) (% ebp) *) + 0x49; 0x11; 0xe8; (* ADC (% r8) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0xba; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rdx) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADCX (% r15) (% rbp) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc5; + (* ADOX (% r8) (% rbp) *) + 0x49; 0x11; 0xe8; (* ADC (% r8) (% rbp) *) + 0xb9; 0x01; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 1)) *) + 0x4c; 0x01; 0xe1; (* ADD (% rcx) (% r12) *) + 0x48; 0x8d; 0x52; 0xff; (* LEA (% rdx) (%% (rdx,18446744073709551615)) *) + 0x4c; 0x11; 0xea; (* ADC (% rdx) (% r13) *) + 0x48; 0x8d; 0x6d; 0xff; (* LEA (% rbp) (%% (rbp,18446744073709551615)) *) + 0x48; 0x89; 0xe8; (* MOV (% rax) (% rbp) *) + 0x4c; 0x11; 0xf5; (* ADC (% rbp) (% r14) *) + 0x41; 0xbb; 0xfe; 0xff; 0xff; 0xff; + (* MOV (% r11d) (Imm32 (word 4294967294)) *) + 0x4d; 0x11; 0xfb; (* ADC (% r11) (% r15) *) + 0x4c; 0x11; 0xc0; (* ADC (% rax) (% r8) *) + 0x4c; 0x0f; 0x42; 0xe1; (* CMOVB (% r12) (% rcx) *) + 0x4c; 0x0f; 0x42; 0xea; (* CMOVB (% r13) (% rdx) *) + 0x4c; 0x0f; 0x42; 0xf5; (* CMOVB (% r14) (% rbp) *) + 0x4d; 0x0f; 0x42; 0xfb; (* CMOVB (% r15) (% r11) *) + 0x4c; 0x89; 0x24; 0x24; (* MOV (Memop Quadword (%% (rsp,0))) (% r12) *) + 0x4c; 0x89; 0x6c; 0x24; 0x08; + (* MOV (Memop Quadword (%% (rsp,8))) (% r13) *) + 0x4c; 0x89; 0x74; 0x24; 0x10; + (* MOV (Memop Quadword (%% (rsp,16))) (% r14) *) + 0x4c; 0x89; 0x7c; 0x24; 0x18; + (* MOV (Memop Quadword (%% (rsp,24))) (% r15) *) + 0x45; 0x31; 0xed; (* XOR (% r13d) (% r13d) *) + 0x48; 0x8b; 0x16; (* MOV (% rdx) (Memop Quadword (%% (rsi,0))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x4c; 0x24; 0x60; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x54; 0x24; 0x68; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x64; 0x24; 0x78; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x4d; 0x11; 0xec; (* ADC (% r12) (% r13) *) + 0x48; 0x8b; 0x56; 0x08; (* MOV (% rdx) (Memop Quadword (%% (rsi,8))) *) + 0x45; 0x31; 0xf6; (* XOR (% r14d) (% r14d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4d; 0x11; 0xf5; (* ADC (% r13) (% r14) *) + 0x45; 0x31; 0xff; (* XOR (% r15d) (% r15d) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0xf7; 0xd2; (* NOT (% rdx) *) + 0x48; 0x8d; 0x52; 0x02; (* LEA (% rdx) (%% (rdx,2)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xef; + (* ADCX (% r13) (% r15) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf7; + (* ADOX (% r14) (% r15) *) + 0x4d; 0x11; 0xfe; (* ADC (% r14) (% r15) *) + 0x48; 0x8b; 0x56; 0x10; (* MOV (% rdx) (Memop Quadword (%% (rsi,16))) *) + 0x45; 0x31; 0xc0; (* XOR (% r8d) (% r8d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% r8) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x49; 0x11; 0xc5; (* ADC (% r13) (% rax) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0x4d; 0x11; 0xc7; (* ADC (% r15) (% r8) *) + 0x48; 0x8b; 0x56; 0x18; (* MOV (% rdx) (Memop Quadword (%% (rsi,24))) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x49; 0x11; 0xc6; (* ADC (% r14) (% rax) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x4d; 0x11; 0xc8; (* ADC (% r8) (% r9) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0xf7; 0xd2; (* NOT (% rdx) *) + 0x48; 0x8d; 0x52; 0x02; (* LEA (% rdx) (%% (rdx,2)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% r9) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xc1; + (* ADOX (% r8) (% r9) *) + 0x4d; 0x11; 0xc8; (* ADC (% r8) (% r9) *) + 0xb9; 0x01; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 1)) *) + 0x4c; 0x01; 0xe1; (* ADD (% rcx) (% r12) *) + 0x48; 0xff; 0xca; (* DEC (% rdx) *) + 0x4c; 0x11; 0xea; (* ADC (% rdx) (% r13) *) + 0x49; 0xff; 0xc9; (* DEC (% r9) *) + 0x4c; 0x89; 0xc8; (* MOV (% rax) (% r9) *) + 0x4d; 0x11; 0xf1; (* ADC (% r9) (% r14) *) + 0x41; 0xbb; 0xfe; 0xff; 0xff; 0xff; + (* MOV (% r11d) (Imm32 (word 4294967294)) *) + 0x4d; 0x11; 0xfb; (* ADC (% r11) (% r15) *) + 0x4c; 0x11; 0xc0; (* ADC (% rax) (% r8) *) + 0x4c; 0x0f; 0x42; 0xe1; (* CMOVB (% r12) (% rcx) *) + 0x4c; 0x0f; 0x42; 0xea; (* CMOVB (% r13) (% rdx) *) + 0x4d; 0x0f; 0x42; 0xf1; (* CMOVB (% r14) (% r9) *) + 0x4d; 0x0f; 0x42; 0xfb; (* CMOVB (% r15) (% r11) *) + 0x4c; 0x89; 0xa4; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,128))) (% r12) *) + 0x4c; 0x89; 0xac; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,136))) (% r13) *) + 0x4c; 0x89; 0xb4; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,144))) (% r14) *) + 0x4c; 0x89; 0xbc; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,152))) (% r15) *) + 0x45; 0x31; 0xed; (* XOR (% r13d) (% r13d) *) + 0x48; 0x8b; 0x54; 0x24; 0x40; + (* MOV (% rdx) (Memop Quadword (%% (rsp,64))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x4c; 0x24; 0x60; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x54; 0x24; 0x68; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x64; 0x24; 0x78; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x4d; 0x11; 0xec; (* ADC (% r12) (% r13) *) + 0x48; 0x8b; 0x54; 0x24; 0x48; + (* MOV (% rdx) (Memop Quadword (%% (rsp,72))) *) + 0x45; 0x31; 0xf6; (* XOR (% r14d) (% r14d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4d; 0x11; 0xf5; (* ADC (% r13) (% r14) *) + 0x45; 0x31; 0xff; (* XOR (% r15d) (% r15d) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0xf7; 0xd2; (* NOT (% rdx) *) + 0x48; 0x8d; 0x52; 0x02; (* LEA (% rdx) (%% (rdx,2)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xef; + (* ADCX (% r13) (% r15) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf7; + (* ADOX (% r14) (% r15) *) + 0x4d; 0x11; 0xfe; (* ADC (% r14) (% r15) *) + 0x48; 0x8b; 0x54; 0x24; 0x50; + (* MOV (% rdx) (Memop Quadword (%% (rsp,80))) *) + 0x45; 0x31; 0xc0; (* XOR (% r8d) (% r8d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% r8) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x49; 0x11; 0xc5; (* ADC (% r13) (% rax) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0x4d; 0x11; 0xc7; (* ADC (% r15) (% r8) *) + 0x48; 0x8b; 0x54; 0x24; 0x58; + (* MOV (% rdx) (Memop Quadword (%% (rsp,88))) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x49; 0x11; 0xc6; (* ADC (% r14) (% rax) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x4d; 0x11; 0xc8; (* ADC (% r8) (% r9) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0xf7; 0xd2; (* NOT (% rdx) *) + 0x48; 0x8d; 0x52; 0x02; (* LEA (% rdx) (%% (rdx,2)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% r9) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xc1; + (* ADOX (% r8) (% r9) *) + 0x4d; 0x11; 0xc8; (* ADC (% r8) (% r9) *) + 0xb9; 0x01; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 1)) *) + 0x4c; 0x01; 0xe1; (* ADD (% rcx) (% r12) *) + 0x48; 0xff; 0xca; (* DEC (% rdx) *) + 0x4c; 0x11; 0xea; (* ADC (% rdx) (% r13) *) + 0x49; 0xff; 0xc9; (* DEC (% r9) *) + 0x4c; 0x89; 0xc8; (* MOV (% rax) (% r9) *) + 0x4d; 0x11; 0xf1; (* ADC (% r9) (% r14) *) + 0x41; 0xbb; 0xfe; 0xff; 0xff; 0xff; + (* MOV (% r11d) (Imm32 (word 4294967294)) *) + 0x4d; 0x11; 0xfb; (* ADC (% r11) (% r15) *) + 0x4c; 0x11; 0xc0; (* ADC (% rax) (% r8) *) + 0x4c; 0x0f; 0x42; 0xe1; (* CMOVB (% r12) (% rcx) *) + 0x4c; 0x0f; 0x42; 0xea; (* CMOVB (% r13) (% rdx) *) + 0x4d; 0x0f; 0x42; 0xf1; (* CMOVB (% r14) (% r9) *) + 0x4d; 0x0f; 0x42; 0xfb; (* CMOVB (% r15) (% r11) *) + 0x4c; 0x89; 0x64; 0x24; 0x40; + (* MOV (Memop Quadword (%% (rsp,64))) (% r12) *) + 0x4c; 0x89; 0x6c; 0x24; 0x48; + (* MOV (Memop Quadword (%% (rsp,72))) (% r13) *) + 0x4c; 0x89; 0x74; 0x24; 0x50; + (* MOV (Memop Quadword (%% (rsp,80))) (% r14) *) + 0x4c; 0x89; 0x7c; 0x24; 0x58; + (* MOV (Memop Quadword (%% (rsp,88))) (% r15) *) + 0x48; 0x8b; 0x04; 0x24; (* MOV (% rax) (Memop Quadword (%% (rsp,0))) *) + 0x48; 0x2b; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; + (* SUB (% rax) (Memop Quadword (%% (rsp,128))) *) + 0x48; 0x8b; 0x4c; 0x24; 0x08; + (* MOV (% rcx) (Memop Quadword (%% (rsp,8))) *) + 0x48; 0x1b; 0x8c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* SBB (% rcx) (Memop Quadword (%% (rsp,136))) *) + 0x4c; 0x8b; 0x44; 0x24; 0x10; + (* MOV (% r8) (Memop Quadword (%% (rsp,16))) *) + 0x4c; 0x1b; 0x84; 0x24; 0x90; 0x00; 0x00; 0x00; + (* SBB (% r8) (Memop Quadword (%% (rsp,144))) *) + 0x4c; 0x8b; 0x4c; 0x24; 0x18; + (* MOV (% r9) (Memop Quadword (%% (rsp,24))) *) + 0x4c; 0x1b; 0x8c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* SBB (% r9) (Memop Quadword (%% (rsp,152))) *) + 0x41; 0xba; 0xff; 0xff; 0xff; 0xff; + (* MOV (% r10d) (Imm32 (word 4294967295)) *) + 0x4d; 0x19; 0xdb; (* SBB (% r11) (% r11) *) + 0x48; 0x31; 0xd2; (* XOR (% rdx) (% rdx) *) + 0x4d; 0x21; 0xda; (* AND (% r10) (% r11) *) + 0x4c; 0x29; 0xd2; (* SUB (% rdx) (% r10) *) + 0x4c; 0x01; 0xd8; (* ADD (% rax) (% r11) *) + 0x48; 0x89; 0x07; (* MOV (Memop Quadword (%% (rdi,0))) (% rax) *) + 0x4c; 0x11; 0xd1; (* ADC (% rcx) (% r10) *) + 0x48; 0x89; 0x4f; 0x08; (* MOV (Memop Quadword (%% (rdi,8))) (% rcx) *) + 0x49; 0x83; 0xd0; 0x00; (* ADC (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x47; 0x10; (* MOV (Memop Quadword (%% (rdi,16))) (% r8) *) + 0x49; 0x11; 0xd1; (* ADC (% r9) (% rdx) *) + 0x4c; 0x89; 0x4f; 0x18; (* MOV (Memop Quadword (%% (rdi,24))) (% r9) *) + 0x48; 0x8b; 0x44; 0x24; 0x40; + (* MOV (% rax) (Memop Quadword (%% (rsp,64))) *) + 0x48; 0x2b; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; + (* SUB (% rax) (Memop Quadword (%% (rsp,128))) *) + 0x48; 0x8b; 0x4c; 0x24; 0x48; + (* MOV (% rcx) (Memop Quadword (%% (rsp,72))) *) + 0x48; 0x1b; 0x8c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* SBB (% rcx) (Memop Quadword (%% (rsp,136))) *) + 0x4c; 0x8b; 0x44; 0x24; 0x50; + (* MOV (% r8) (Memop Quadword (%% (rsp,80))) *) + 0x4c; 0x1b; 0x84; 0x24; 0x90; 0x00; 0x00; 0x00; + (* SBB (% r8) (Memop Quadword (%% (rsp,144))) *) + 0x4c; 0x8b; 0x4c; 0x24; 0x58; + (* MOV (% r9) (Memop Quadword (%% (rsp,88))) *) + 0x4c; 0x1b; 0x8c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* SBB (% r9) (Memop Quadword (%% (rsp,152))) *) + 0x41; 0xba; 0xff; 0xff; 0xff; 0xff; + (* MOV (% r10d) (Imm32 (word 4294967295)) *) + 0x4d; 0x19; 0xdb; (* SBB (% r11) (% r11) *) + 0x48; 0x31; 0xd2; (* XOR (% rdx) (% rdx) *) + 0x4d; 0x21; 0xda; (* AND (% r10) (% r11) *) + 0x4c; 0x29; 0xd2; (* SUB (% rdx) (% r10) *) + 0x4c; 0x01; 0xd8; (* ADD (% rax) (% r11) *) + 0x48; 0x89; 0x44; 0x24; 0x60; + (* MOV (Memop Quadword (%% (rsp,96))) (% rax) *) + 0x4c; 0x11; 0xd1; (* ADC (% rcx) (% r10) *) + 0x48; 0x89; 0x4c; 0x24; 0x68; + (* MOV (Memop Quadword (%% (rsp,104))) (% rcx) *) + 0x49; 0x83; 0xd0; 0x00; (* ADC (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x44; 0x24; 0x70; + (* MOV (Memop Quadword (%% (rsp,112))) (% r8) *) + 0x49; 0x11; 0xd1; (* ADC (% r9) (% rdx) *) + 0x4c; 0x89; 0x4c; 0x24; 0x78; + (* MOV (Memop Quadword (%% (rsp,120))) (% r9) *) + 0x45; 0x31; 0xed; (* XOR (% r13d) (% r13d) *) + 0x48; 0x8b; 0x56; 0x40; (* MOV (% rdx) (Memop Quadword (%% (rsi,64))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x8c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x94; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xa4; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x4d; 0x11; 0xec; (* ADC (% r12) (% r13) *) + 0x48; 0x8b; 0x56; 0x48; (* MOV (% rdx) (Memop Quadword (%% (rsi,72))) *) + 0x45; 0x31; 0xf6; (* XOR (% r14d) (% r14d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4d; 0x11; 0xf5; (* ADC (% r13) (% r14) *) + 0x45; 0x31; 0xff; (* XOR (% r15d) (% r15d) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0xf7; 0xd2; (* NOT (% rdx) *) + 0x48; 0x8d; 0x52; 0x02; (* LEA (% rdx) (%% (rdx,2)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xef; + (* ADCX (% r13) (% r15) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf7; + (* ADOX (% r14) (% r15) *) + 0x4d; 0x11; 0xfe; (* ADC (% r14) (% r15) *) + 0x48; 0x8b; 0x56; 0x50; (* MOV (% rdx) (Memop Quadword (%% (rsi,80))) *) + 0x45; 0x31; 0xc0; (* XOR (% r8d) (% r8d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% r8) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xc5; (* ADC (% r13) (% rax) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0x4d; 0x11; 0xc7; (* ADC (% r15) (% r8) *) + 0x48; 0x8b; 0x56; 0x58; (* MOV (% rdx) (Memop Quadword (%% (rsi,88))) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xc6; (* ADC (% r14) (% rax) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x4d; 0x11; 0xc8; (* ADC (% r8) (% r9) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0xf7; 0xd2; (* NOT (% rdx) *) + 0x48; 0x8d; 0x52; 0x02; (* LEA (% rdx) (%% (rdx,2)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% r9) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xc1; + (* ADOX (% r8) (% r9) *) + 0x4d; 0x11; 0xc8; (* ADC (% r8) (% r9) *) + 0xb9; 0x01; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 1)) *) + 0x4c; 0x01; 0xe1; (* ADD (% rcx) (% r12) *) + 0x48; 0xff; 0xca; (* DEC (% rdx) *) + 0x4c; 0x11; 0xea; (* ADC (% rdx) (% r13) *) + 0x49; 0xff; 0xc9; (* DEC (% r9) *) + 0x4c; 0x89; 0xc8; (* MOV (% rax) (% r9) *) + 0x4d; 0x11; 0xf1; (* ADC (% r9) (% r14) *) + 0x41; 0xbb; 0xfe; 0xff; 0xff; 0xff; + (* MOV (% r11d) (Imm32 (word 4294967294)) *) + 0x4d; 0x11; 0xfb; (* ADC (% r11) (% r15) *) + 0x4c; 0x11; 0xc0; (* ADC (% rax) (% r8) *) + 0x4c; 0x0f; 0x42; 0xe1; (* CMOVB (% r12) (% rcx) *) + 0x4c; 0x0f; 0x42; 0xea; (* CMOVB (% r13) (% rdx) *) + 0x4d; 0x0f; 0x42; 0xf1; (* CMOVB (% r14) (% r9) *) + 0x4d; 0x0f; 0x42; 0xfb; (* CMOVB (% r15) (% r11) *) + 0x4c; 0x89; 0x67; 0x40; (* MOV (Memop Quadword (%% (rdi,64))) (% r12) *) + 0x4c; 0x89; 0x6f; 0x48; (* MOV (Memop Quadword (%% (rdi,72))) (% r13) *) + 0x4c; 0x89; 0x77; 0x50; (* MOV (Memop Quadword (%% (rdi,80))) (% r14) *) + 0x4c; 0x89; 0x7f; 0x58; (* MOV (Memop Quadword (%% (rdi,88))) (% r15) *) + 0x48; 0x8b; 0x07; (* MOV (% rax) (Memop Quadword (%% (rdi,0))) *) + 0x48; 0x2b; 0x44; 0x24; 0x40; + (* SUB (% rax) (Memop Quadword (%% (rsp,64))) *) + 0x48; 0x8b; 0x4f; 0x08; (* MOV (% rcx) (Memop Quadword (%% (rdi,8))) *) + 0x48; 0x1b; 0x4c; 0x24; 0x48; + (* SBB (% rcx) (Memop Quadword (%% (rsp,72))) *) + 0x4c; 0x8b; 0x47; 0x10; (* MOV (% r8) (Memop Quadword (%% (rdi,16))) *) + 0x4c; 0x1b; 0x44; 0x24; 0x50; + (* SBB (% r8) (Memop Quadword (%% (rsp,80))) *) + 0x4c; 0x8b; 0x4f; 0x18; (* MOV (% r9) (Memop Quadword (%% (rdi,24))) *) + 0x4c; 0x1b; 0x4c; 0x24; 0x58; + (* SBB (% r9) (Memop Quadword (%% (rsp,88))) *) + 0x41; 0xba; 0xff; 0xff; 0xff; 0xff; + (* MOV (% r10d) (Imm32 (word 4294967295)) *) + 0x4d; 0x19; 0xdb; (* SBB (% r11) (% r11) *) + 0x48; 0x31; 0xd2; (* XOR (% rdx) (% rdx) *) + 0x4d; 0x21; 0xda; (* AND (% r10) (% r11) *) + 0x4c; 0x29; 0xd2; (* SUB (% rdx) (% r10) *) + 0x4c; 0x01; 0xd8; (* ADD (% rax) (% r11) *) + 0x48; 0x89; 0x07; (* MOV (Memop Quadword (%% (rdi,0))) (% rax) *) + 0x4c; 0x11; 0xd1; (* ADC (% rcx) (% r10) *) + 0x48; 0x89; 0x4f; 0x08; (* MOV (Memop Quadword (%% (rdi,8))) (% rcx) *) + 0x49; 0x83; 0xd0; 0x00; (* ADC (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x47; 0x10; (* MOV (Memop Quadword (%% (rdi,16))) (% r8) *) + 0x49; 0x11; 0xd1; (* ADC (% r9) (% rdx) *) + 0x4c; 0x89; 0x4f; 0x18; (* MOV (Memop Quadword (%% (rdi,24))) (% r9) *) + 0x48; 0x8b; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,128))) *) + 0x48; 0x2b; 0x07; (* SUB (% rax) (Memop Quadword (%% (rdi,0))) *) + 0x48; 0x8b; 0x8c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (% rcx) (Memop Quadword (%% (rsp,136))) *) + 0x48; 0x1b; 0x4f; 0x08; (* SBB (% rcx) (Memop Quadword (%% (rdi,8))) *) + 0x4c; 0x8b; 0x84; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (% r8) (Memop Quadword (%% (rsp,144))) *) + 0x4c; 0x1b; 0x47; 0x10; (* SBB (% r8) (Memop Quadword (%% (rdi,16))) *) + 0x4c; 0x8b; 0x8c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (% r9) (Memop Quadword (%% (rsp,152))) *) + 0x4c; 0x1b; 0x4f; 0x18; (* SBB (% r9) (Memop Quadword (%% (rdi,24))) *) + 0x41; 0xba; 0xff; 0xff; 0xff; 0xff; + (* MOV (% r10d) (Imm32 (word 4294967295)) *) + 0x4d; 0x19; 0xdb; (* SBB (% r11) (% r11) *) + 0x48; 0x31; 0xd2; (* XOR (% rdx) (% rdx) *) + 0x4d; 0x21; 0xda; (* AND (% r10) (% r11) *) + 0x4c; 0x29; 0xd2; (* SUB (% rdx) (% r10) *) + 0x4c; 0x01; 0xd8; (* ADD (% rax) (% r11) *) + 0x48; 0x89; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,128))) (% rax) *) + 0x4c; 0x11; 0xd1; (* ADC (% rcx) (% r10) *) + 0x48; 0x89; 0x8c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,136))) (% rcx) *) + 0x49; 0x83; 0xd0; 0x00; (* ADC (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x84; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,144))) (% r8) *) + 0x49; 0x11; 0xd1; (* ADC (% r9) (% rdx) *) + 0x4c; 0x89; 0x8c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,152))) (% r9) *) + 0x45; 0x31; 0xed; (* XOR (% r13d) (% r13d) *) + 0x48; 0x8b; 0x56; 0x20; (* MOV (% rdx) (Memop Quadword (%% (rsi,32))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x4c; 0x24; 0x60; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x54; 0x24; 0x68; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x64; 0x24; 0x78; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x4d; 0x11; 0xec; (* ADC (% r12) (% r13) *) + 0x48; 0x8b; 0x56; 0x28; (* MOV (% rdx) (Memop Quadword (%% (rsi,40))) *) + 0x45; 0x31; 0xf6; (* XOR (% r14d) (% r14d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4d; 0x11; 0xf5; (* ADC (% r13) (% r14) *) + 0x45; 0x31; 0xff; (* XOR (% r15d) (% r15d) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0xf7; 0xd2; (* NOT (% rdx) *) + 0x48; 0x8d; 0x52; 0x02; (* LEA (% rdx) (%% (rdx,2)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xef; + (* ADCX (% r13) (% r15) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf7; + (* ADOX (% r14) (% r15) *) + 0x4d; 0x11; 0xfe; (* ADC (% r14) (% r15) *) + 0x48; 0x8b; 0x56; 0x30; (* MOV (% rdx) (Memop Quadword (%% (rsi,48))) *) + 0x45; 0x31; 0xc0; (* XOR (% r8d) (% r8d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% r8) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x49; 0x11; 0xc5; (* ADC (% r13) (% rax) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0x4d; 0x11; 0xc7; (* ADC (% r15) (% r8) *) + 0x48; 0x8b; 0x56; 0x38; (* MOV (% rdx) (Memop Quadword (%% (rsi,56))) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x49; 0x11; 0xc6; (* ADC (% r14) (% rax) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x4d; 0x11; 0xc8; (* ADC (% r8) (% r9) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0xf7; 0xd2; (* NOT (% rdx) *) + 0x48; 0x8d; 0x52; 0x02; (* LEA (% rdx) (%% (rdx,2)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% r9) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xc1; + (* ADOX (% r8) (% r9) *) + 0x4d; 0x11; 0xc8; (* ADC (% r8) (% r9) *) + 0xb9; 0x01; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 1)) *) + 0x4c; 0x01; 0xe1; (* ADD (% rcx) (% r12) *) + 0x48; 0xff; 0xca; (* DEC (% rdx) *) + 0x4c; 0x11; 0xea; (* ADC (% rdx) (% r13) *) + 0x49; 0xff; 0xc9; (* DEC (% r9) *) + 0x4c; 0x89; 0xc8; (* MOV (% rax) (% r9) *) + 0x4d; 0x11; 0xf1; (* ADC (% r9) (% r14) *) + 0x41; 0xbb; 0xfe; 0xff; 0xff; 0xff; + (* MOV (% r11d) (Imm32 (word 4294967294)) *) + 0x4d; 0x11; 0xfb; (* ADC (% r11) (% r15) *) + 0x4c; 0x11; 0xc0; (* ADC (% rax) (% r8) *) + 0x4c; 0x0f; 0x42; 0xe1; (* CMOVB (% r12) (% rcx) *) + 0x4c; 0x0f; 0x42; 0xea; (* CMOVB (% r13) (% rdx) *) + 0x4d; 0x0f; 0x42; 0xf1; (* CMOVB (% r14) (% r9) *) + 0x4d; 0x0f; 0x42; 0xfb; (* CMOVB (% r15) (% r11) *) + 0x4c; 0x89; 0x64; 0x24; 0x60; + (* MOV (Memop Quadword (%% (rsp,96))) (% r12) *) + 0x4c; 0x89; 0x6c; 0x24; 0x68; + (* MOV (Memop Quadword (%% (rsp,104))) (% r13) *) + 0x4c; 0x89; 0x74; 0x24; 0x70; + (* MOV (Memop Quadword (%% (rsp,112))) (% r14) *) + 0x4c; 0x89; 0x7c; 0x24; 0x78; + (* MOV (Memop Quadword (%% (rsp,120))) (% r15) *) + 0x45; 0x31; 0xed; (* XOR (% r13d) (% r13d) *) + 0x48; 0x8b; 0x94; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,128))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x4c; 0x24; 0x20; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x54; 0x24; 0x28; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x64; 0x24; 0x38; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x4d; 0x11; 0xec; (* ADC (% r12) (% r13) *) + 0x48; 0x8b; 0x94; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,136))) *) + 0x45; 0x31; 0xf6; (* XOR (% r14d) (% r14d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x38; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4d; 0x11; 0xf5; (* ADC (% r13) (% r14) *) + 0x45; 0x31; 0xff; (* XOR (% r15d) (% r15d) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0xf7; 0xd2; (* NOT (% rdx) *) + 0x48; 0x8d; 0x52; 0x02; (* LEA (% rdx) (%% (rdx,2)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd8; + (* MULX4 (% rbx,% rax) (% rdx,% r8) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xd9; + (* MULX4 (% rbx,% rax) (% rdx,% r9) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xef; + (* ADCX (% r13) (% r15) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf7; + (* ADOX (% r14) (% r15) *) + 0x4d; 0x11; 0xfe; (* ADC (% r14) (% r15) *) + 0x48; 0x8b; 0x94; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,144))) *) + 0x45; 0x31; 0xc0; (* XOR (% r8d) (% r8d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% r8) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x38; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x49; 0x11; 0xc5; (* ADC (% r13) (% rax) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0x4d; 0x11; 0xc7; (* ADC (% r15) (% r8) *) + 0x48; 0x8b; 0x94; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,152))) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x38; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x49; 0x11; 0xc6; (* ADC (% r14) (% rax) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x4d; 0x11; 0xc8; (* ADC (% r8) (% r9) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0x48; 0xba; 0x00; 0x00; 0x00; 0x00; 0x01; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm64 (word 4294967296)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0xf7; 0xd2; (* NOT (% rdx) *) + 0x48; 0x8d; 0x52; 0x02; (* LEA (% rdx) (%% (rdx,2)) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% r10) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xc2; 0xfb; 0xf6; 0xdb; + (* MULX4 (% rbx,% rax) (% rdx,% r11) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% r9) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xc1; + (* ADOX (% r8) (% r9) *) + 0x4d; 0x11; 0xc8; (* ADC (% r8) (% r9) *) + 0xb9; 0x01; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 1)) *) + 0x4c; 0x01; 0xe1; (* ADD (% rcx) (% r12) *) + 0x48; 0xff; 0xca; (* DEC (% rdx) *) + 0x4c; 0x11; 0xea; (* ADC (% rdx) (% r13) *) + 0x49; 0xff; 0xc9; (* DEC (% r9) *) + 0x4c; 0x89; 0xc8; (* MOV (% rax) (% r9) *) + 0x4d; 0x11; 0xf1; (* ADC (% r9) (% r14) *) + 0x41; 0xbb; 0xfe; 0xff; 0xff; 0xff; + (* MOV (% r11d) (Imm32 (word 4294967294)) *) + 0x4d; 0x11; 0xfb; (* ADC (% r11) (% r15) *) + 0x4c; 0x11; 0xc0; (* ADC (% rax) (% r8) *) + 0x4c; 0x0f; 0x42; 0xe1; (* CMOVB (% r12) (% rcx) *) + 0x4c; 0x0f; 0x42; 0xea; (* CMOVB (% r13) (% rdx) *) + 0x4d; 0x0f; 0x42; 0xf1; (* CMOVB (% r14) (% r9) *) + 0x4d; 0x0f; 0x42; 0xfb; (* CMOVB (% r15) (% r11) *) + 0x4c; 0x89; 0xa4; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,128))) (% r12) *) + 0x4c; 0x89; 0xac; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,136))) (% r13) *) + 0x4c; 0x89; 0xb4; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,144))) (% r14) *) + 0x4c; 0x89; 0xbc; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,152))) (% r15) *) + 0x48; 0x8b; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,128))) *) + 0x48; 0x2b; 0x44; 0x24; 0x60; + (* SUB (% rax) (Memop Quadword (%% (rsp,96))) *) + 0x48; 0x8b; 0x8c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (% rcx) (Memop Quadword (%% (rsp,136))) *) + 0x48; 0x1b; 0x4c; 0x24; 0x68; + (* SBB (% rcx) (Memop Quadword (%% (rsp,104))) *) + 0x4c; 0x8b; 0x84; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (% r8) (Memop Quadword (%% (rsp,144))) *) + 0x4c; 0x1b; 0x44; 0x24; 0x70; + (* SBB (% r8) (Memop Quadword (%% (rsp,112))) *) + 0x4c; 0x8b; 0x8c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (% r9) (Memop Quadword (%% (rsp,152))) *) + 0x4c; 0x1b; 0x4c; 0x24; 0x78; + (* SBB (% r9) (Memop Quadword (%% (rsp,120))) *) + 0x41; 0xba; 0xff; 0xff; 0xff; 0xff; + (* MOV (% r10d) (Imm32 (word 4294967295)) *) + 0x4d; 0x19; 0xdb; (* SBB (% r11) (% r11) *) + 0x48; 0x31; 0xd2; (* XOR (% rdx) (% rdx) *) + 0x4d; 0x21; 0xda; (* AND (% r10) (% r11) *) + 0x4c; 0x29; 0xd2; (* SUB (% rdx) (% r10) *) + 0x4c; 0x01; 0xd8; (* ADD (% rax) (% r11) *) + 0x48; 0x89; 0x47; 0x20; (* MOV (Memop Quadword (%% (rdi,32))) (% rax) *) + 0x4c; 0x11; 0xd1; (* ADC (% rcx) (% r10) *) + 0x48; 0x89; 0x4f; 0x28; (* MOV (Memop Quadword (%% (rdi,40))) (% rcx) *) + 0x49; 0x83; 0xd0; 0x00; (* ADC (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x47; 0x30; (* MOV (Memop Quadword (%% (rdi,48))) (% r8) *) + 0x49; 0x11; 0xd1; (* ADC (% r9) (% rdx) *) + 0x4c; 0x89; 0x4f; 0x38; (* MOV (Memop Quadword (%% (rdi,56))) (% r9) *) + 0x48; 0x81; 0xc4; 0xc0; 0x00; 0x00; 0x00; + (* ADD (% rsp) (Imm32 (word 192)) *) + 0x41; 0x5f; (* POP (% r15) *) + 0x41; 0x5e; (* POP (% r14) *) + 0x41; 0x5d; (* POP (% r13) *) + 0x41; 0x5c; (* POP (% r12) *) + 0x5d; (* POP (% rbp) *) + 0x5b; (* POP (% rbx) *) + 0xc3 (* RET *) +];; + +let P256_MONTJMIXADD_EXEC = X86_MK_CORE_EXEC_RULE p256_montjmixadd_mc;; + +(* ------------------------------------------------------------------------- *) +(* Common supporting definitions and lemmas for component proofs. *) +(* ------------------------------------------------------------------------- *) + +let p_256 = new_definition `p_256 = 115792089210356248762697446949407573530086143415290314195533631308867097853951`;; + +let nistp256 = define + `nistp256 = + (integer_mod_ring p_256, + ring_neg (integer_mod_ring p_256) (&3), + &b_256:int)`;; + +let nistp256_encode = new_definition + `nistp256_encode = montgomery_encode(256,p_256)`;; + +let nintlemma = prove + (`&(num_of_int(x rem &p_256)) = x rem &p_256`, + MATCH_MP_TAC INT_OF_NUM_OF_INT THEN MATCH_MP_TAC INT_REM_POS THEN + REWRITE_TAC[INT_OF_NUM_EQ; p_256] THEN CONV_TAC NUM_REDUCE_CONV);; + +let unilemma0 = prove + (`x = a MOD p_256 ==> x < p_256 /\ &x = &a rem &p_256`, + REWRITE_TAC[INT_OF_NUM_REM; p_256] THEN ARITH_TAC);; + +let unilemma1 = prove + (`&x = a rem &p_256 ==> x < p_256 /\ &x = a rem &p_256`, + SIMP_TAC[GSYM INT_OF_NUM_LT; INT_LT_REM_EQ; p_256] THEN INT_ARITH_TAC);; + +let unilemma2 = prove + (`X = num_of_int(x rem &p_256) ==> X < p_256 /\ &X = x rem &p_256`, + DISCH_THEN SUBST1_TAC THEN + REWRITE_TAC[GSYM INT_OF_NUM_LT; nintlemma; INT_LT_REM_EQ] THEN + REWRITE_TAC[INT_OF_NUM_LT; p_256] THEN CONV_TAC NUM_REDUCE_CONV);; + +let lemont = prove + (`(&i * x * y) rem &p_256 = (&i * x rem &p_256 * y rem &p_256) rem &p_256`, + CONV_TAC INT_REM_DOWN_CONV THEN REWRITE_TAC[]);; + +let pumont = prove + (`(&(inverse_mod p_256 (2 EXP 256)) * + (&2 pow 256 * x) rem &p_256 * (&2 pow 256 * y) rem &p_256) rem &p_256 = + (&2 pow 256 * x * y) rem &p_256`, + CONV_TAC INT_REM_DOWN_CONV THEN REWRITE_TAC[INT_REM_EQ] THEN + MATCH_MP_TAC(INTEGER_RULE + `(i * t:int == &1) (mod p) + ==> (i * (t * x) * (t * y) == t * x * y) (mod p)`) THEN + REWRITE_TAC[GSYM num_congruent; INT_OF_NUM_CLAUSES] THEN + REWRITE_TAC[INVERSE_MOD_LMUL_EQ; COPRIME_REXP; COPRIME_2; p_256] THEN + CONV_TAC NUM_REDUCE_CONV);; + +let lvs = + ["x_1",[`RSI`;`0`]; + "y_1",[`RSI`;`32`]; + "z_1",[`RSI`;`64`]; + "x_2",[`RBP`;`0`]; + "y_2",[`RBP`;`32`]; + "z_2",[`RBP`;`64`]; + "x_3",[`RDI`;`0`]; + "y_3",[`RDI`;`32`]; + "z_3",[`RDI`;`64`]; + "zp2",[`RSP`;`0`]; + "ww",[`RSP`;`0`]; + "yd",[`RSP`;`32`]; + "y2a",[`RSP`;`32`]; + "x2a",[`RSP`;`64`]; + "zzx2",[`RSP`;`64`]; + "zz",[`RSP`;`96`]; + "t1",[`RSP`;`96`]; + "t2",[`RSP`;`128`]; + "zzx1",[`RSP`;`128`]; + "xd",[`RSP`;`160`]];; + +(* ------------------------------------------------------------------------- *) +(* Instances of montsqr. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_MONTSQR_P256_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE p256_montjmixadd_mc) 100 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1. + !a. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = a + ==> + nonoverlapping (word pc,0x1b84) (word_add (read p3 t) (word n3),32) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST p256_montjmixadd_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read RBP s = read RBP t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) s = + a) + (\s. read RIP s = pcout /\ + (a EXP 2 <= 2 EXP 256 * p_256 + ==> read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 4)) s = + (inverse_mod p_256 (2 EXP 256) * a EXP 2) MOD p_256)) + (MAYCHANGE [RIP; RAX; RBX; RBP; RCX; RDX; + R8; R9; R10; R11; R12; R13; R14; R15] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 4)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + (*** Globalize the a EXP 2 <= 2 EXP 256 * p_256 assumption ***) + + ASM_CASES_TAC `a EXP 2 <= 2 EXP 256 * p_256` THENL + [ASM_REWRITE_TAC[]; X86_SIM_TAC P256_MONTJMIXADD_EXEC (1--100)] THEN + ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "x_" o lhand o concl) THEN + + (*** Simulate the core pre-reduced result accumulation ***) + + X86_ACCSTEPS_TAC P256_MONTJMIXADD_EXEC (1--82) (1--82) THEN + ABBREV_TAC + `t = bignum_of_wordlist [sum_s71; sum_s75; sum_s78; sum_s80; sum_s82]` THEN + SUBGOAL_THEN + `t < 2 * p_256 /\ (2 EXP 256 * t == a EXP 2) (mod p_256)` + STRIP_ASSUME_TAC THENL + [RULE_ASSUM_TAC(REWRITE_RULE[VAL_WORD_BITVAL]) THEN + ACCUMULATOR_POP_ASSUM_LIST + (STRIP_ASSUME_TAC o end_itlist CONJ o DECARRY_RULE) THEN + CONJ_TAC THENL + [FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP (ARITH_RULE + `ab <= 2 EXP 256 * p + ==> 2 EXP 256 * t < ab + 2 EXP 256 * p ==> t < 2 * p`)) THEN + MAP_EVERY EXPAND_TAC ["a"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + REWRITE_TAC[p_256; REAL_ARITH `a:real < b + c <=> a - b < c`] THEN + ASM_REWRITE_TAC[] THEN BOUNDER_TAC[]; + REWRITE_TAC[REAL_CONGRUENCE; p_256] THEN CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["a"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ASM_REWRITE_TAC[] THEN REAL_INTEGER_TAC]; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Final correction stage ***) + + X86_ACCSTEPS_TAC P256_MONTJMIXADD_EXEC [84;86;89;91;92] (83--100) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + TRANS_TAC EQ_TRANS `t MOD p_256` THEN CONJ_TAC THENL + [ALL_TAC; + REWRITE_TAC[GSYM CONG] THEN FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP + (NUMBER_RULE + `(e * t == a EXP 2) (mod p) + ==> (e * i == 1) (mod p) ==> (t == i * a EXP 2) (mod p)`)) THEN + REWRITE_TAC[INVERSE_MOD_RMUL_EQ; COPRIME_REXP; COPRIME_2] THEN + REWRITE_TAC[p_256] THEN CONV_TAC NUM_REDUCE_CONV] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC EQUAL_FROM_CONGRUENT_MOD_MOD THEN + MAP_EVERY EXISTS_TAC + [`256`; `if t < p_256 then &t:real else &t - &p_256`] THEN + REPEAT CONJ_TAC THENL + [REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN BOUNDER_TAC[]; + REWRITE_TAC[p_256] THEN ARITH_TAC; + REWRITE_TAC[p_256] THEN ARITH_TAC; + ALL_TAC; + ASM_SIMP_TAC[MOD_CASES] THEN + GEN_REWRITE_TAC LAND_CONV [COND_RAND] THEN + SIMP_TAC[REAL_OF_NUM_SUB; GSYM NOT_LT]] THEN + SUBGOAL_THEN `carry_s92 <=> p_256 <= t` SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LE THEN EXISTS_TAC `320` THEN + EXPAND_TAC "t" THEN + REWRITE_TAC[p_256; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + CONV_TAC NUM_REDUCE_CONV THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + REWRITE_TAC[GSYM NOT_LT; COND_SWAP]] THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[] THEN EXPAND_TAC "t" THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist; p_256] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + ASM_REWRITE_TAC[BITVAL_CLAUSES; VAL_WORD_BITVAL] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instances of montmul. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_MONTMUL_P256_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE p256_montjmixadd_mc) 113 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1 p2 n2. + !a. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = a + ==> + !b. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) t = b + ==> + nonoverlapping (word pc,0x1b84) (word_add (read p3 t) (word n3),32) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST p256_montjmixadd_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read RBP s = read RBP t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) s = + a /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) s = + b) + (\s. read RIP s = pcout /\ + (a * b <= 2 EXP 256 * p_256 + ==> read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 4)) s = + (inverse_mod p_256 (2 EXP 256) * a * b) MOD p_256)) + (MAYCHANGE [RIP; RAX; RBX; RCX; RDX; + R8; R9; R10; R11; R12; R13; R14; R15] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 4)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + (*** Globalize the a * b <= 2 EXP 256 * p_256 assumption ***) + + ASM_CASES_TAC `a * b <= 2 EXP 256 * p_256` THENL + [ASM_REWRITE_TAC[]; X86_SIM_TAC P256_MONTJMIXADD_EXEC (1--113)] THEN + ENSURES_INIT_TAC "s1" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "y_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "x_" o lhand o concl) THEN + + (*** Simulate the core pre-reduced result accumulation ***) + + X86_ACCSTEPS_TAC P256_MONTJMIXADD_EXEC (2--96) (2--96) THEN + ABBREV_TAC + `t = bignum_of_wordlist [sum_s84; sum_s89; sum_s92; sum_s94; sum_s96]` THEN + SUBGOAL_THEN + `t < 2 * p_256 /\ (2 EXP 256 * t == a * b) (mod p_256)` + STRIP_ASSUME_TAC THENL + [ACCUMULATOR_POP_ASSUM_LIST + (STRIP_ASSUME_TAC o end_itlist CONJ o DECARRY_RULE) THEN + CONJ_TAC THENL + [FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP (ARITH_RULE + `ab <= 2 EXP 256 * p + ==> 2 EXP 256 * t < ab + 2 EXP 256 * p ==> t < 2 * p`)) THEN + MAP_EVERY EXPAND_TAC ["a"; "b"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + REWRITE_TAC[p_256; REAL_ARITH `a:real < b + c <=> a - b < c`] THEN + ASM_REWRITE_TAC[] THEN BOUNDER_TAC[]; + REWRITE_TAC[REAL_CONGRUENCE; p_256] THEN CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["a"; "b"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ASM_REWRITE_TAC[] THEN REAL_INTEGER_TAC]; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Final correction stage ***) + + X86_ACCSTEPS_TAC P256_MONTJMIXADD_EXEC [98;100;103;105;106] (97--114) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + TRANS_TAC EQ_TRANS `t MOD p_256` THEN CONJ_TAC THENL + [ALL_TAC; + REWRITE_TAC[GSYM CONG] THEN FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP + (NUMBER_RULE + `(e * t == a * b) (mod p) + ==> (e * i == 1) (mod p) ==> (t == i * a * b) (mod p)`)) THEN + REWRITE_TAC[INVERSE_MOD_RMUL_EQ; COPRIME_REXP; COPRIME_2] THEN + REWRITE_TAC[p_256] THEN CONV_TAC NUM_REDUCE_CONV] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC EQUAL_FROM_CONGRUENT_MOD_MOD THEN + MAP_EVERY EXISTS_TAC + [`256`; `if t < p_256 then &t:real else &t - &p_256`] THEN + REPEAT CONJ_TAC THENL + [REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN BOUNDER_TAC[]; + REWRITE_TAC[p_256] THEN ARITH_TAC; + REWRITE_TAC[p_256] THEN ARITH_TAC; + ALL_TAC; + ASM_SIMP_TAC[MOD_CASES] THEN + GEN_REWRITE_TAC LAND_CONV [COND_RAND] THEN + SIMP_TAC[REAL_OF_NUM_SUB; GSYM NOT_LT]] THEN + SUBGOAL_THEN `carry_s106 <=> p_256 <= t` SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LE THEN EXISTS_TAC `320` THEN + EXPAND_TAC "t" THEN + REWRITE_TAC[p_256; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + CONV_TAC NUM_REDUCE_CONV THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + REWRITE_TAC[GSYM NOT_LT; COND_SWAP]] THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[] THEN EXPAND_TAC "t" THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist; p_256] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + ASM_REWRITE_TAC[BITVAL_CLAUSES; VAL_WORD_BITVAL] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instances of sub. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_SUB_P256_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE p256_montjmixadd_mc) 21 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) t = n + ==> + nonoverlapping (word pc,0x1b84) (word_add (read p3 t) (word n3),32) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST p256_montjmixadd_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read RBP s = read RBP t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 4)) s = + n) + (\s. read RIP s = pcout /\ + (m < p_256 /\ n < p_256 + ==> &(read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 4)) s) = (&m - &n) rem &p_256)) + (MAYCHANGE [RIP; RAX; RDX; RCX; R8; R9; R10; R11] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 4)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "m_" o lhand o concl) THEN + + X86_ACCSTEPS_TAC P256_MONTJMIXADD_EXEC (1--8) (1--8) THEN + + SUBGOAL_THEN `carry_s8 <=> m < n` SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN EXISTS_TAC `256` THEN + MAP_EVERY EXPAND_TAC ["m"; "n"] THEN REWRITE_TAC[GSYM REAL_OF_NUM_ADD] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_MUL; GSYM REAL_OF_NUM_POW] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ALL_TAC] THEN + + X86_ACCSTEPS_TAC P256_MONTJMIXADD_EXEC (14--21) (9--21) THEN + + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN STRIP_TAC THEN + CONV_TAC(LAND_CONV(RAND_CONV BIGNUM_EXPAND_CONV)) THEN + ASM_REWRITE_TAC[] THEN DISCARD_STATE_TAC "s21" THEN + + CONV_TAC SYM_CONV THEN MATCH_MP_TAC INT_REM_UNIQ THEN + EXISTS_TAC `--(&(bitval(m < n))):int` THEN REWRITE_TAC[INT_ABS_NUM] THEN + REWRITE_TAC[INT_ARITH `m - n:int = --b * p + z <=> z = b * p + m - n`] THEN + REWRITE_TAC[int_eq; int_le; int_lt] THEN + REWRITE_TAC[int_add_th; int_mul_th; int_of_num_th; int_sub_th] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_ADD; GSYM REAL_OF_NUM_MUL; + GSYM REAL_OF_NUM_POW] THEN + MATCH_MP_TAC(REAL_ARITH + `!t:real. p < t /\ + (&0 <= a /\ a < p) /\ + (&0 <= z /\ z < t) /\ + ((&0 <= z /\ z < t) /\ (&0 <= a /\ a < t) ==> z = a) + ==> z = a /\ &0 <= z /\ z < p`) THEN + EXISTS_TAC `(&2:real) pow 256` THEN + + CONJ_TAC THENL [REWRITE_TAC[p_256] THEN REAL_ARITH_TAC; ALL_TAC] THEN + CONJ_TAC THENL + [MAP_EVERY UNDISCH_TAC [`m < p_256`; `n < p_256`] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_LT] THEN + ASM_CASES_TAC `&m:real < &n` THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + POP_ASSUM MP_TAC THEN REWRITE_TAC[p_256] THEN REAL_ARITH_TAC; + ALL_TAC] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; STRIP_TAC] THEN + + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`256`; `&0:real`] THEN + ASM_REWRITE_TAC[] THEN + CONJ_TAC THENL [REAL_INTEGER_TAC; ALL_TAC] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + REWRITE_TAC[WORD_AND_MASK] THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC WORD_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["m"; "n"] THEN REWRITE_TAC[GSYM REAL_OF_NUM_ADD] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_MUL; GSYM REAL_OF_NUM_POW; p_256] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instances of amontsqr. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_AMONTSQR_P256_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE p256_montjmixadd_mc) 98 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1. + !a. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) t = a + ==> + nonoverlapping (word pc,0x1b84) (word_add (read p3 t) (word n3),32) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST p256_montjmixadd_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read RBP s = read RBP t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 4)) s = + a) + (\s. read RIP s = pcout /\ + read(memory :> bytes(word_add (read p3 t) (word n3),8 * 4)) s + < 2 EXP 256 /\ + (read(memory :> bytes(word_add (read p3 t) (word n3),8 * 4)) s == + inverse_mod p_256 (2 EXP 256) * a EXP 2) (mod p_256)) + (MAYCHANGE [RIP; RAX; RBX; RCX; RDX; + R8; R9; R10; R11; R12; R13; R14; R15] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 4)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "x_" o lhand o concl) THEN + + X86_ACCSTEPS_TAC P256_MONTJMIXADD_EXEC (1--82) (1--82) THEN + + SUBGOAL_THEN + `word_add sum_s81 (word (bitval carry_s80)):int64 = sum_s82` + SUBST_ALL_TAC THENL + [ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o hd) THEN + REWRITE_TAC[GSYM VAL_CONG; REAL_OF_NUM_CLAUSES; DIMINDEX_64] THEN + REWRITE_TAC[VAL_WORD_ADD; DIMINDEX_64; CONG; VAL_WORD_BITVAL] THEN + CONV_TAC MOD_DOWN_CONV THEN REWRITE_TAC[GSYM CONG] THEN + SPEC_TAC(`2 EXP 64`,`p:num`) THEN CONV_TAC NUMBER_RULE; + ALL_TAC] THEN + + ABBREV_TAC + `t = bignum_of_wordlist [sum_s71; sum_s75; sum_s78; sum_s80; sum_s82]` THEN + SUBGOAL_THEN + `t < 2 EXP 256 + p_256 /\ (2 EXP 256 * t == a EXP 2) (mod p_256)` + STRIP_ASSUME_TAC THENL + [RULE_ASSUM_TAC(REWRITE_RULE[VAL_WORD_BITVAL]) THEN + ACCUMULATOR_POP_ASSUM_LIST + (STRIP_ASSUME_TAC o end_itlist CONJ o DECARRY_RULE) THEN + CONJ_TAC THENL + [MATCH_MP_TAC(ARITH_RULE + `2 EXP 256 * t <= (2 EXP 256 - 1) EXP 2 + (2 EXP 256 - 1) * p + ==> t < 2 EXP 256 + p`) THEN + REWRITE_TAC[p_256] THEN CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["a"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + REWRITE_TAC[p_256; REAL_ARITH `a:real < b + c <=> a - b < c`] THEN + ASM_REWRITE_TAC[] THEN BOUNDER_TAC[]; + REWRITE_TAC[REAL_CONGRUENCE; p_256] THEN CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["a"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ASM_REWRITE_TAC[] THEN REAL_INTEGER_TAC]; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Final correction stage ***) + + X86_ACCSTEPS_TAC P256_MONTJMIXADD_EXEC (91--94) (83--98) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONJ_TAC THENL + [CONV_TAC(ONCE_DEPTH_CONV BIGNUM_EXPAND_CONV) THEN + ASM_REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN BOUNDER_TAC[]; + ALL_TAC] THEN + FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP + (NUMBER_RULE + `(e * t == ab) (mod p) + ==> (e * i == 1) (mod p) /\ (s == t) (mod p) + ==> (s == i * ab) (mod p)`)) THEN + REWRITE_TAC[INVERSE_MOD_RMUL_EQ; COPRIME_REXP; COPRIME_2] THEN + CONJ_TAC THENL + [REWRITE_TAC[p_256] THEN CONV_TAC NUM_REDUCE_CONV; ALL_TAC] THEN + SUBGOAL_THEN `val(sum_s82:int64) = 0 <=> ~(2 EXP 256 <= t)` + SUBST_ALL_TAC THENL + [REWRITE_TAC[NOT_LE] THEN EXPAND_TAC "t" THEN + REWRITE_TAC[BIGNUM_OF_WORDLIST_SPLIT_RULE(4,1)] THEN + REWRITE_TAC[BIGNUM_OF_WORDLIST_SING] THEN MATCH_MP_TAC(ARITH_RULE + `l < 2 EXP 256 ==> (h = 0 <=> l + 2 EXP 256 * h < 2 EXP 256)`) THEN + CONV_TAC NUM_REDUCE_CONV THEN BOUNDER_TAC[]; + ABBREV_TAC `b <=> 2 EXP 256 <= t`] THEN + MATCH_MP_TAC(NUMBER_RULE `!b:num. x + b * p = y ==> (x == y) (mod p)`) THEN + EXISTS_TAC `bitval b` THEN REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN + ONCE_REWRITE_TAC[REAL_ARITH `a + b:real = c <=> c - b = a`] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`256`; `&0:real`] THEN CONJ_TAC THENL + [EXPAND_TAC "b" THEN UNDISCH_TAC `t < 2 EXP 256 + p_256` THEN + REWRITE_TAC[bitval; p_256; GSYM REAL_OF_NUM_CLAUSES] THEN REAL_ARITH_TAC; + REWRITE_TAC[INTEGER_CLOSED]] THEN + CONJ_TAC THENL + [CONV_TAC(ONCE_DEPTH_CONV BIGNUM_EXPAND_CONV) THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN BOUNDER_TAC[]; + ALL_TAC] THEN + CONV_TAC(ONCE_DEPTH_CONV BIGNUM_EXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + EXPAND_TAC "t" THEN REWRITE_TAC[bignum_of_wordlist] THEN + ASM_REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN + ACCUMULATOR_POP_ASSUM_LIST (MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + BOOL_CASES_TAC `b:bool` THEN REWRITE_TAC[BITVAL_CLAUSES; p_256] THEN + CONV_TAC WORD_REDUCE_CONV THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Overall point operation proof. *) +(* ------------------------------------------------------------------------- *) + +let P256_MONTJMIXADD_CORRECT = time prove + (`!p3 p1 t1 p2 t2 pc stackpointer. + ALLPAIRS nonoverlapping + [(p3,96); (stackpointer,192)] + [(word pc,0x1b84); (p1,96); (p2,96)] /\ + nonoverlapping (p3,96) (stackpointer,192) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST p256_montjmixadd_mc) /\ + read RIP s = word(pc + 0x11) /\ + read RSP s = stackpointer /\ + C_ARGUMENTS [p3; p1; p2] s /\ + bignum_triple_from_memory (p1,4) s = t1 /\ + bignum_pair_from_memory (p2,4) s = t2) + (\s. read RIP s = word (pc + 0x1b72) /\ + (!x1 y1 z1 x2 y2 z2. + ~(z1 = &0) /\ z2 = &1 /\ + ~(jacobian_eq (integer_mod_ring p_256) + (x1,y1,z1) (x2,y2,z2)) /\ + ~(jacobian_eq (integer_mod_ring p_256) + (jacobian_neg nistp256 (x1,y1,z1)) + (x2,y2,z2)) /\ + t1 = tripled nistp256_encode (x1,y1,z1) /\ + t2 = paired nistp256_encode (x2,y2) + ==> bignum_triple_from_memory(p3,4) s = + tripled nistp256_encode + (jacobian_add nistp256 (x1,y1,z1) (x2,y2,z2)))) + (MAYCHANGE [RIP; RAX; RBX; RCX; RDX; RBP; + R8; R9; R10; R11; R12; R13; R14; R15] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,96); + memory :> bytes(stackpointer,192)])`, + REWRITE_TAC[FORALL_PAIR_THM] THEN + MAP_EVERY X_GEN_TAC + [`p3:int64`; `p1:int64`; `x1:num`; `y1:num`; `z1:num`; `p2:int64`; + `x2:num`; `y2:num`; `pc:num`; `stackpointer:int64`] THEN + REWRITE_TAC[ALLPAIRS; ALL; NONOVERLAPPING_CLAUSES] THEN STRIP_TAC THEN + REWRITE_TAC[C_ARGUMENTS; SOME_FLAGS; PAIR_EQ; + bignum_pair_from_memory; bignum_triple_from_memory] THEN + CONV_TAC(ONCE_DEPTH_CONV NUM_MULT_CONV) THEN + CONV_TAC(ONCE_DEPTH_CONV NORMALIZE_RELATIVE_ADDRESS_CONV) THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + + LOCAL_AMONTSQR_P256_TAC 1 ["zp2";"z_1"] THEN + LOCAL_MONTMUL_P256_TAC 0 ["y2a";"z_1";"y_2"] THEN + LOCAL_MONTMUL_P256_TAC 0 ["x2a";"zp2";"x_2"] THEN + LOCAL_MONTMUL_P256_TAC 0 ["y2a";"zp2";"y2a"] THEN + LOCAL_SUB_P256_TAC 0 ["xd";"x2a";"x_1"] THEN + LOCAL_SUB_P256_TAC 0 ["yd";"y2a";"y_1"] THEN + LOCAL_AMONTSQR_P256_TAC 0 ["zz";"xd"] THEN + LOCAL_MONTSQR_P256_TAC 0 ["ww";"yd"] THEN + LOCAL_MONTMUL_P256_TAC 0 ["zzx1";"zz";"x_1"] THEN + LOCAL_MONTMUL_P256_TAC 0 ["zzx2";"zz";"x2a"] THEN + LOCAL_SUB_P256_TAC 0 ["x_3";"ww";"zzx1"] THEN + LOCAL_SUB_P256_TAC 0 ["t1";"zzx2";"zzx1"] THEN + LOCAL_MONTMUL_P256_TAC 0 ["z_3";"xd";"z_1"] THEN + LOCAL_SUB_P256_TAC 0 ["x_3";"x_3";"zzx2"] THEN + LOCAL_SUB_P256_TAC 0 ["t2";"zzx1";"x_3"] THEN + LOCAL_MONTMUL_P256_TAC 0 ["t1";"t1";"y_1"] THEN + LOCAL_MONTMUL_P256_TAC 0 ["t2";"yd";"t2"] THEN + LOCAL_SUB_P256_TAC 0 ["y_3";"t2";"t1"] THEN + + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + DISCARD_STATE_TAC "s19" THEN + DISCARD_MATCHING_ASSUMPTIONS [`nonoverlapping_modulo a b c`] THEN + + MAP_EVERY X_GEN_TAC + [`x1':int`; `y1':int`; `z1':int`; `x2':int`; `y2':int`; `z2':int`] THEN + DISCH_THEN(CONJUNCTS_THEN2 ASSUME_TAC MP_TAC) THEN + GEN_REWRITE_TAC I [IMP_CONJ] THEN DISCH_THEN SUBST_ALL_TAC THEN + REPLICATE_TAC 2 (DISCH_THEN(CONJUNCTS_THEN2 ASSUME_TAC MP_TAC)) THEN + REWRITE_TAC[tripled; paired; nistp256_encode; + montgomery_encode; PAIR_EQ] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN + (STRIP_ASSUME_TAC o MATCH_MP unilemma2)) THEN + + REPEAT(FIRST_X_ASSUM(MP_TAC o check (is_imp o concl))) THEN + REPEAT(ANTS_TAC THENL + [REWRITE_TAC[p_256] THEN RULE_ASSUM_TAC(REWRITE_RULE[p_256]) THEN + CONV_TAC NUM_REDUCE_CONV THEN ASM BOUNDER_TAC[]; + (DISCH_THEN(STRIP_ASSUME_TAC o MATCH_MP unilemma0) ORELSE + DISCH_THEN(STRIP_ASSUME_TAC o MATCH_MP unilemma1))]) THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o GEN_REWRITE_RULE I [GSYM NOT_LE])) THEN + + RULE_ASSUM_TAC(REWRITE_RULE + [num_congruent; GSYM INT_OF_NUM_CLAUSES; GSYM INT_OF_NUM_REM]) THEN + RULE_ASSUM_TAC(REWRITE_RULE[GSYM INT_REM_EQ]) THEN + RULE_ASSUM_TAC(ONCE_REWRITE_RULE[GSYM INT_SUB_REM; GSYM INT_ADD_REM]) THEN + RULE_ASSUM_TAC(REWRITE_RULE[INT_POW_2]) THEN + RULE_ASSUM_TAC(GEN_REWRITE_RULE (RAND_CONV o TRY_CONV) [lemont]) THEN + + ASM_REWRITE_TAC[jacobian_add; nistp256] THEN + ASM_REWRITE_TAC[GSYM nistp256] THEN + REWRITE_TAC[INTEGER_MOD_RING_CLAUSES] THEN + CONV_TAC INT_REDUCE_CONV THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN + CONV_TAC INT_REM_DOWN_CONV THEN + REWRITE_TAC[tripled; paired; nistp256_encode; montgomery_encode] THEN + REWRITE_TAC[PAIR_EQ; GSYM INT_OF_NUM_EQ; nintlemma] THEN + CONV_TAC INT_REM_DOWN_CONV THEN + + ASM_REWRITE_TAC[pumont; INT_REM_REM; GSYM INT_ADD_LDISTRIB; + GSYM INT_ADD_LDISTRIB; GSYM INT_SUB_LDISTRIB; + INT_SUB_REM; INT_ADD_REM] THEN + + REPEAT CONJ_TAC THEN AP_THM_TAC THEN AP_TERM_TAC THEN AP_TERM_TAC THEN + INT_ARITH_TAC);; + +let P256_MONTJMIXADD_SUBROUTINE_CORRECT = time prove + (`!p3 p1 t1 p2 t2 pc stackpointer returnaddress. + ALLPAIRS nonoverlapping + [(p3,96); (word_sub stackpointer (word 240),240)] + [(word pc,0x1b84); (p1,96); (p2,96)] /\ + nonoverlapping (p3,96) (word_sub stackpointer (word 240),248) + ==> ensures x86 + (\s. bytes_loaded s (word pc) p256_montjmixadd_mc /\ + read RIP s = word pc /\ + read RSP s = stackpointer /\ + read (memory :> bytes64 stackpointer) s = returnaddress /\ + C_ARGUMENTS [p3; p1; p2] s /\ + bignum_triple_from_memory (p1,4) s = t1 /\ + bignum_pair_from_memory (p2,4) s = t2) + (\s. read RIP s = returnaddress /\ + read RSP s = word_add stackpointer (word 8) /\ + (!x1 y1 z1 x2 y2 z2. + ~(z1 = &0) /\ z2 = &1 /\ + ~(jacobian_eq (integer_mod_ring p_256) + (x1,y1,z1) (x2,y2,z2)) /\ + ~(jacobian_eq (integer_mod_ring p_256) + (jacobian_neg nistp256 (x1,y1,z1)) + (x2,y2,z2)) /\ + t1 = tripled nistp256_encode (x1,y1,z1) /\ + t2 = paired nistp256_encode (x2,y2) + ==> bignum_triple_from_memory(p3,4) s = + tripled nistp256_encode + (jacobian_add nistp256 (x1,y1,z1) (x2,y2,z2)))) + (MAYCHANGE [RIP; RSP; RAX; RCX; RDX; R8; R9; R10; R11] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,96); + memory :> bytes(word_sub stackpointer (word 240),240)])`, + X86_PROMOTE_RETURN_STACK_TAC p256_montjmixadd_mc P256_MONTJMIXADD_CORRECT + `[RBX; RBP; R12; R13; R14; R15]` 240);; + +(* ------------------------------------------------------------------------- *) +(* Correctness of Windows ABI version. *) +(* ------------------------------------------------------------------------- *) + +let windows_p256_montjmixadd_mc = define_from_elf "windows_p256_montjmixadd_mc" + "x86/p256/p256_montjmixadd.obj";; + +let WINDOWS_P256_MONTJMIXADD_SUBROUTINE_CORRECT = time prove + (`!p3 p1 t1 p2 t2 pc stackpointer returnaddress. + ALLPAIRS nonoverlapping + [(p3,96); (word_sub stackpointer (word 256),256)] + [(word pc,0x1b91); (p1,96); (p2,96)] /\ + nonoverlapping (p3,96) (word_sub stackpointer (word 256),264) + ==> ensures x86 + (\s. bytes_loaded s (word pc) windows_p256_montjmixadd_mc /\ + read RIP s = word pc /\ + read RSP s = stackpointer /\ + read (memory :> bytes64 stackpointer) s = returnaddress /\ + WINDOWS_C_ARGUMENTS [p3; p1; p2] s /\ + bignum_triple_from_memory (p1,4) s = t1 /\ + bignum_pair_from_memory (p2,4) s = t2) + (\s. read RIP s = returnaddress /\ + read RSP s = word_add stackpointer (word 8) /\ + (!x1 y1 z1 x2 y2 z2. + ~(z1 = &0) /\ z2 = &1 /\ + ~(jacobian_eq (integer_mod_ring p_256) + (x1,y1,z1) (x2,y2,z2)) /\ + ~(jacobian_eq (integer_mod_ring p_256) + (jacobian_neg nistp256 (x1,y1,z1)) + (x2,y2,z2)) /\ + t1 = tripled nistp256_encode (x1,y1,z1) /\ + t2 = paired nistp256_encode (x2,y2) + ==> bignum_triple_from_memory(p3,4) s = + tripled nistp256_encode + (jacobian_add nistp256 (x1,y1,z1) (x2,y2,z2)))) + (MAYCHANGE [RIP; RSP; RAX; RCX; RDX; R8; R9; R10; R11] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,96); + memory :> bytes(word_sub stackpointer (word 256),256)])`, + WINDOWS_X86_WRAP_STACK_TAC + windows_p256_montjmixadd_mc p256_montjmixadd_mc + P256_MONTJMIXADD_CORRECT + `[RBX; RBP; R12; R13; R14; R15]` 240);; diff --git a/x86/yesbmi_functions b/x86/yesbmi_functions index 8415f979cf..89b1421b09 100644 --- a/x86/yesbmi_functions +++ b/x86/yesbmi_functions @@ -45,6 +45,9 @@ bignum_triple_p256k1 bignum_triple_p384 bignum_triple_p521 curve25519_ladderstep +p256_montjadd +p256_montjdouble +p256_montjmixadd secp256k1_jadd secp256k1_jdouble secp256k1_jmixadd diff --git a/x86_att/Makefile b/x86_att/Makefile index 833ef7cfa0..d420f705b6 100644 --- a/x86_att/Makefile +++ b/x86_att/Makefile @@ -140,6 +140,9 @@ OBJ = curve25519/bignum_add_p25519.o \ p256/bignum_tomont_p256_alt.o \ p256/bignum_triple_p256.o \ p256/bignum_triple_p256_alt.o \ + p256/p256_montjadd.o \ + p256/p256_montjdouble.o \ + p256/p256_montjmixadd.o \ p384/bignum_add_p384.o \ p384/bignum_bigendian_6.o \ p384/bignum_cmul_p384.o \ diff --git a/x86_att/p256/p256_montjadd.S b/x86_att/p256/p256_montjadd.S new file mode 100644 index 0000000000..57aa56c42c --- /dev/null +++ b/x86_att/p256/p256_montjadd.S @@ -0,0 +1,526 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +// ---------------------------------------------------------------------------- +// Point mixed addition on NIST curve P-256 in Montgomery-Jacobian coordinates +// +// extern void p256_montjadd +// (uint64_t p3[static 12],uint64_t p1[static 12],uint64_t p2[static 12]); +// +// Does p3 := p1 + p2 where all points are regarded as Jacobian triples with +// each coordinate in the Montgomery domain, i.e. x' = (2^256 * x) mod p_256. +// A Jacobian triple (x',y',z') represents affine point (x/z^2,y/z^3). +// +// Standard x86-64 ABI: RDI = p3, RSI = p1, RDX = p2 +// Microsoft x64 ABI: RCX = p3, RDX = p1, R8 = p2 +// ---------------------------------------------------------------------------- +#include "_internal_s2n_bignum.h" + + + S2N_BN_SYM_VISIBILITY_DIRECTIVE(p256_montjadd) + S2N_BN_SYM_PRIVACY_DIRECTIVE(p256_montjadd) + .text + +// Size of individual field elements + +#define NUMSIZE 32 + +// Pointer-offset pairs for inputs and outputs +// These assume %rdi = p3, %rsi = p1 and %rbp = p2, +// which needs to be set up explicitly before use +// As it happens none of the code macros modify +// either %rdi or %rsi so we just need to take care +// over %rbp. That is set up early and lasts for the +// places where it's needed but not the full code; +// it gets destroyed by montsqr_p256 calls. That's +// when we restore it from input_y near the end. + +#define x_1 0(%rsi) +#define y_1 NUMSIZE(%rsi) +#define z_1 (2*NUMSIZE)(%rsi) + +#define x_2 0(%rbp) +#define y_2 NUMSIZE(%rbp) +#define z_2 (2*NUMSIZE)(%rbp) + +#define x_3 0(%rdi) +#define y_3 NUMSIZE(%rdi) +#define z_3 (2*NUMSIZE)(%rdi) + +// Pointer-offset pairs for temporaries, with some aliasing +// NSPACE is the total stack needed for these temporaries + +#define z1sq (NUMSIZE*0)(%rsp) +#define ww (NUMSIZE*0)(%rsp) + +#define yd (NUMSIZE*1)(%rsp) +#define y2a (NUMSIZE*1)(%rsp) + +#define x2a (NUMSIZE*2)(%rsp) +#define zzx2 (NUMSIZE*2)(%rsp) + +#define zz (NUMSIZE*3)(%rsp) +#define t1 (NUMSIZE*3)(%rsp) + +#define t2 (NUMSIZE*4)(%rsp) +#define x1a (NUMSIZE*4)(%rsp) +#define zzx1 (NUMSIZE*4)(%rsp) + +#define xd (NUMSIZE*5)(%rsp) +#define z2sq (NUMSIZE*5)(%rsp) + +#define y1a (NUMSIZE*6)(%rsp) + +// Temporary for input pointer y + +#define input_y (NUMSIZE*7)(%rsp) + +#define NSPACE (NUMSIZE*7+8) + +// Corresponds exactly to bignum_montmul_p256 + +#define montmul_p256(P0,P1,P2) \ + xorl %r13d, %r13d ; \ + movq P2, %rdx ; \ + mulxq P1, %r8, %r9 ; \ + mulxq 0x8+P1, %rbx, %r10 ; \ + adcq %rbx, %r9 ; \ + mulxq 0x10+P1, %rbx, %r11 ; \ + adcq %rbx, %r10 ; \ + mulxq 0x18+P1, %rbx, %r12 ; \ + adcq %rbx, %r11 ; \ + adcq %r13, %r12 ; \ + movq 0x8+P2, %rdx ; \ + xorl %r14d, %r14d ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + adcq %r14, %r13 ; \ + xorl %r15d, %r15d ; \ + movabsq $0x100000000, %rdx ; \ + mulxq %r8, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq %r9, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + notq %rdx; \ + leaq 0x2(%rdx), %rdx ; \ + mulxq %r8, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq %r9, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + adcxq %r15, %r13 ; \ + adoxq %r15, %r14 ; \ + adcq %r15, %r14 ; \ + movq 0x10+P2, %rdx ; \ + xorl %r8d, %r8d ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + adoxq %r8, %r14 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcq %rax, %r13 ; \ + adcq %rbx, %r14 ; \ + adcq %r8, %r15 ; \ + movq 0x18+P2, %rdx ; \ + xorl %r9d, %r9d ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + adoxq %r9, %r15 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcq %rax, %r14 ; \ + adcq %rbx, %r15 ; \ + adcq %r9, %r8 ; \ + xorl %r9d, %r9d ; \ + movabsq $0x100000000, %rdx ; \ + mulxq %r10, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq %r11, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + notq %rdx; \ + leaq 0x2(%rdx), %rdx ; \ + mulxq %r10, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq %r11, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + adcxq %r9, %r15 ; \ + adoxq %r9, %r8 ; \ + adcq %r9, %r8 ; \ + movl $0x1, %ecx ; \ + addq %r12, %rcx ; \ + decq %rdx; \ + adcq %r13, %rdx ; \ + decq %r9; \ + movq %r9, %rax ; \ + adcq %r14, %r9 ; \ + movl $0xfffffffe, %r11d ; \ + adcq %r15, %r11 ; \ + adcq %r8, %rax ; \ + cmovbq %rcx, %r12 ; \ + cmovbq %rdx, %r13 ; \ + cmovbq %r9, %r14 ; \ + cmovbq %r11, %r15 ; \ + movq %r12, P0 ; \ + movq %r13, 0x8+P0 ; \ + movq %r14, 0x10+P0 ; \ + movq %r15, 0x18+P0 + +// Corresponds exactly to bignum_montsqr_p256 + +#define montsqr_p256(P0,P1) \ + movq P1, %rdx ; \ + mulxq %rdx, %r8, %r15 ; \ + mulxq 0x8+P1, %r9, %r10 ; \ + mulxq 0x18+P1, %r11, %r12 ; \ + movq 0x10+P1, %rdx ; \ + mulxq 0x18+P1, %r13, %r14 ; \ + xorl %ebp, %ebp ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + movq 0x18+P1, %rdx ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + adcxq %rbp, %r13 ; \ + adoxq %rbp, %r14 ; \ + adcq %rbp, %r14 ; \ + xorl %ebp, %ebp ; \ + adcxq %r9, %r9 ; \ + adoxq %r15, %r9 ; \ + movq 0x8+P1, %rdx ; \ + mulxq %rdx, %rax, %rdx ; \ + adcxq %r10, %r10 ; \ + adoxq %rax, %r10 ; \ + adcxq %r11, %r11 ; \ + adoxq %rdx, %r11 ; \ + movq 0x10+P1, %rdx ; \ + mulxq %rdx, %rax, %rdx ; \ + adcxq %r12, %r12 ; \ + adoxq %rax, %r12 ; \ + adcxq %r13, %r13 ; \ + adoxq %rdx, %r13 ; \ + movq 0x18+P1, %rdx ; \ + mulxq %rdx, %rax, %r15 ; \ + adcxq %r14, %r14 ; \ + adoxq %rax, %r14 ; \ + adcxq %rbp, %r15 ; \ + adoxq %rbp, %r15 ; \ + xorl %ebp, %ebp ; \ + movabsq $0x100000000, %rdx ; \ + mulxq %r8, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq %r9, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + movabsq $0xffffffff00000001, %rdx ; \ + mulxq %r8, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq %r9, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + adcxq %rbp, %r13 ; \ + movl %ebp, %r9d ; \ + adoxq %rbp, %r9 ; \ + adcxq %rbp, %r9 ; \ + addq %r9, %r14 ; \ + adcq %rbp, %r15 ; \ + movl %ebp, %r8d ; \ + adcq %rbp, %r8 ; \ + xorl %ebp, %ebp ; \ + movabsq $0x100000000, %rdx ; \ + mulxq %r10, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq %r11, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + movabsq $0xffffffff00000001, %rdx ; \ + mulxq %r10, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq %r11, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + adcxq %rbp, %r15 ; \ + adoxq %rbp, %r8 ; \ + adcq %rbp, %r8 ; \ + movl $0x1, %ecx ; \ + addq %r12, %rcx ; \ + leaq -0x1(%rdx), %rdx ; \ + adcq %r13, %rdx ; \ + leaq -0x1(%rbp), %rbp ; \ + movq %rbp, %rax ; \ + adcq %r14, %rbp ; \ + movl $0xfffffffe, %r11d ; \ + adcq %r15, %r11 ; \ + adcq %r8, %rax ; \ + cmovbq %rcx, %r12 ; \ + cmovbq %rdx, %r13 ; \ + cmovbq %rbp, %r14 ; \ + cmovbq %r11, %r15 ; \ + movq %r12, P0 ; \ + movq %r13, 0x8+P0 ; \ + movq %r14, 0x10+P0 ; \ + movq %r15, 0x18+P0 + +// Almost-Montgomery variant which we use when an input to other muls +// with the other argument fully reduced (which is always safe). +// It's also tweaked to avoid modifying %rbp so that we can use that +// for the y input while it is needed. + +#define amontsqr_p256(P0,P1) \ + movq P1, %rdx ; \ + mulxq %rdx, %r8, %r15 ; \ + mulxq 0x8+P1, %r9, %r10 ; \ + mulxq 0x18+P1, %r11, %r12 ; \ + movq 0x10+P1, %rdx ; \ + mulxq 0x18+P1, %r13, %r14 ; \ + xorl %ecx, %ecx ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + movq 0x18+P1, %rdx ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + adcxq %rcx, %r13 ; \ + adoxq %rcx, %r14 ; \ + adcq %rcx, %r14 ; \ + xorl %ecx, %ecx ; \ + adcxq %r9, %r9 ; \ + adoxq %r15, %r9 ; \ + movq 0x8+P1, %rdx ; \ + mulxq %rdx, %rax, %rdx ; \ + adcxq %r10, %r10 ; \ + adoxq %rax, %r10 ; \ + adcxq %r11, %r11 ; \ + adoxq %rdx, %r11 ; \ + movq 0x10+P1, %rdx ; \ + mulxq %rdx, %rax, %rdx ; \ + adcxq %r12, %r12 ; \ + adoxq %rax, %r12 ; \ + adcxq %r13, %r13 ; \ + adoxq %rdx, %r13 ; \ + movq 0x18+P1, %rdx ; \ + mulxq %rdx, %rax, %r15 ; \ + adcxq %r14, %r14 ; \ + adoxq %rax, %r14 ; \ + adcxq %rcx, %r15 ; \ + adoxq %rcx, %r15 ; \ + xorl %ecx, %ecx ; \ + movabsq $0x100000000, %rdx ; \ + mulxq %r8, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq %r9, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + movabsq $0xffffffff00000001, %rdx ; \ + mulxq %r8, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq %r9, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + adcxq %rcx, %r13 ; \ + movl %ecx, %r9d ; \ + adoxq %rcx, %r9 ; \ + adcxq %rcx, %r9 ; \ + addq %r9, %r14 ; \ + adcq %rcx, %r15 ; \ + movl %ecx, %r8d ; \ + adcq %rcx, %r8 ; \ + xorl %ecx, %ecx ; \ + movabsq $0x100000000, %rdx ; \ + mulxq %r10, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq %r11, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + movabsq $0xffffffff00000001, %rdx ; \ + mulxq %r10, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq %r11, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + adcxq %rcx, %r15 ; \ + adoxq %rcx, %r8 ; \ + adcq %rcx, %r8 ; \ + movl $0x1, %r8d ; \ + leaq -0x1(%rdx), %rdx ; \ + leaq -0x1(%rcx), %rax ; \ + movl $0xfffffffe, %r11d ; \ + cmovzq %rcx, %r8 ; \ + cmovzq %rcx, %rdx ; \ + cmovzq %rcx, %rax ; \ + cmovzq %rcx, %r11 ; \ + addq %r8, %r12 ; \ + adcq %rdx, %r13 ; \ + adcq %rax, %r14 ; \ + adcq %r11, %r15 ; \ + movq %r12, P0 ; \ + movq %r13, 0x8+P0 ; \ + movq %r14, 0x10+P0 ; \ + movq %r15, 0x18+P0 + +// Corresponds exactly to bignum_sub_p256 + +#define sub_p256(P0,P1,P2) \ + movq P1, %rax ; \ + subq P2, %rax ; \ + movq 0x8+P1, %rcx ; \ + sbbq 0x8+P2, %rcx ; \ + movq 0x10+P1, %r8 ; \ + sbbq 0x10+P2, %r8 ; \ + movq 0x18+P1, %r9 ; \ + sbbq 0x18+P2, %r9 ; \ + movl $0xffffffff, %r10d ; \ + sbbq %r11, %r11 ; \ + xorq %rdx, %rdx ; \ + andq %r11, %r10 ; \ + subq %r10, %rdx ; \ + addq %r11, %rax ; \ + movq %rax, P0 ; \ + adcq %r10, %rcx ; \ + movq %rcx, 0x8+P0 ; \ + adcq $0x0, %r8 ; \ + movq %r8, 0x10+P0 ; \ + adcq %rdx, %r9 ; \ + movq %r9, 0x18+P0 + +S2N_BN_SYMBOL(p256_montjadd): + +#if WINDOWS_ABI + pushq %rdi + pushq %rsi + movq %rcx, %rdi + movq %rdx, %rsi + movq %r8, %rdx +#endif + +// Save registers and make room on stack for temporary variables +// Put the input y in %rbp where it lasts as long as it's needed. + + pushq %rbx + pushq %rbp + pushq %r12 + pushq %r13 + pushq %r14 + pushq %r15 + + subq $NSPACE, %rsp + + movq %rdx, %rbp + movq %rdx, input_y + +// Main code, just a sequence of basic field operations +// 12 * multiply + 4 * square + 7 * subtract + + amontsqr_p256(z1sq,z_1) + amontsqr_p256(z2sq,z_2) + + montmul_p256(y1a,z_2,y_1) + montmul_p256(y2a,z_1,y_2) + + montmul_p256(x2a,z1sq,x_2) + montmul_p256(x1a,z2sq,x_1) + montmul_p256(y2a,z1sq,y2a) + montmul_p256(y1a,z2sq,y1a) + + sub_p256(xd,x2a,x1a) + sub_p256(yd,y2a,y1a) + + amontsqr_p256(zz,xd) + montsqr_p256(ww,yd) + + montmul_p256(zzx1,zz,x1a) + montmul_p256(zzx2,zz,x2a) + + sub_p256(x_3,ww,zzx1) + sub_p256(t1,zzx2,zzx1) + + montmul_p256(xd,xd,z_1) + + sub_p256(x_3,x_3,zzx2) + + sub_p256(t2,zzx1,x_3) + + montmul_p256(t1,t1,y1a) + + movq input_y, %rbp + montmul_p256(z_3,xd,z_2) + montmul_p256(t2,yd,t2) + + sub_p256(y_3,t2,t1) + +// Restore stack and registers + + addq $NSPACE, %rsp + popq %r15 + popq %r14 + popq %r13 + popq %r12 + popq %rbp + popq %rbx + +#if WINDOWS_ABI + popq %rsi + popq %rdi +#endif + ret + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack, "", %progbits +#endif diff --git a/x86_att/p256/p256_montjdouble.S b/x86_att/p256/p256_montjdouble.S new file mode 100644 index 0000000000..a10230ee6d --- /dev/null +++ b/x86_att/p256/p256_montjdouble.S @@ -0,0 +1,641 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +// ---------------------------------------------------------------------------- +// Point doubling on NIST curve P-256 in Montgomery-Jacobian coordinates +// +// extern void p256_montjdouble +// (uint64_t p3[static 12],uint64_t p1[static 12]); +// +// Does p3 := 2 * p1 where all points are regarded as Jacobian triples with +// each coordinate in the Montgomery domain, i.e. x' = (2^256 * x) mod p_256. +// A Jacobian triple (x',y',z') represents affine point (x/z^2,y/z^3). +// +// Standard x86-64 ABI: RDI = p3, RSI = p1 +// Microsoft x64 ABI: RCX = p3, RDX = p1 +// ---------------------------------------------------------------------------- +#include "_internal_s2n_bignum.h" + + + S2N_BN_SYM_VISIBILITY_DIRECTIVE(p256_montjdouble) + S2N_BN_SYM_PRIVACY_DIRECTIVE(p256_montjdouble) + .text + .balign 4 + +// Size of individual field elements + +#define NUMSIZE 32 + +// Pointer-offset pairs for inputs and outputs +// These assume %rdi = p3, %rsi = p1, which is true when the +// arguments come in initially and is not disturbed throughout. + +#define x_1 0(%rsi) +#define y_1 NUMSIZE(%rsi) +#define z_1 (2*NUMSIZE)(%rsi) + +#define x_3 0(%rdi) +#define y_3 NUMSIZE(%rdi) +#define z_3 (2*NUMSIZE)(%rdi) + +// Pointer-offset pairs for temporaries, with some aliasing +// NSPACE is the total stack needed for these temporaries + +#define z2 (NUMSIZE*0)(%rsp) +#define y2 (NUMSIZE*1)(%rsp) +#define x2p (NUMSIZE*2)(%rsp) +#define xy2 (NUMSIZE*3)(%rsp) + +#define y4 (NUMSIZE*4)(%rsp) +#define t2 (NUMSIZE*4)(%rsp) + +#define dx2 (NUMSIZE*5)(%rsp) +#define t1 (NUMSIZE*5)(%rsp) + +#define d (NUMSIZE*6)(%rsp) +#define x4p (NUMSIZE*6)(%rsp) + +#define NSPACE (NUMSIZE*7) + +// Corresponds exactly to bignum_montmul_p256 + +#define montmul_p256(P0,P1,P2) \ + xorl %r13d, %r13d ; \ + movq P2, %rdx ; \ + mulxq P1, %r8, %r9 ; \ + mulxq 0x8+P1, %rbx, %r10 ; \ + adcq %rbx, %r9 ; \ + mulxq 0x10+P1, %rbx, %r11 ; \ + adcq %rbx, %r10 ; \ + mulxq 0x18+P1, %rbx, %r12 ; \ + adcq %rbx, %r11 ; \ + adcq %r13, %r12 ; \ + movq 0x8+P2, %rdx ; \ + xorl %r14d, %r14d ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + adcq %r14, %r13 ; \ + xorl %r15d, %r15d ; \ + movabsq $0x100000000, %rdx ; \ + mulxq %r8, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq %r9, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + notq %rdx; \ + leaq 0x2(%rdx), %rdx ; \ + mulxq %r8, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq %r9, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + adcxq %r15, %r13 ; \ + adoxq %r15, %r14 ; \ + adcq %r15, %r14 ; \ + movq 0x10+P2, %rdx ; \ + xorl %r8d, %r8d ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + adoxq %r8, %r14 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcq %rax, %r13 ; \ + adcq %rbx, %r14 ; \ + adcq %r8, %r15 ; \ + movq 0x18+P2, %rdx ; \ + xorl %r9d, %r9d ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + adoxq %r9, %r15 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcq %rax, %r14 ; \ + adcq %rbx, %r15 ; \ + adcq %r9, %r8 ; \ + xorl %r9d, %r9d ; \ + movabsq $0x100000000, %rdx ; \ + mulxq %r10, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq %r11, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + notq %rdx; \ + leaq 0x2(%rdx), %rdx ; \ + mulxq %r10, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq %r11, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + adcxq %r9, %r15 ; \ + adoxq %r9, %r8 ; \ + adcq %r9, %r8 ; \ + movl $0x1, %ecx ; \ + addq %r12, %rcx ; \ + decq %rdx; \ + adcq %r13, %rdx ; \ + decq %r9; \ + movq %r9, %rax ; \ + adcq %r14, %r9 ; \ + movl $0xfffffffe, %r11d ; \ + adcq %r15, %r11 ; \ + adcq %r8, %rax ; \ + cmovbq %rcx, %r12 ; \ + cmovbq %rdx, %r13 ; \ + cmovbq %r9, %r14 ; \ + cmovbq %r11, %r15 ; \ + movq %r12, P0 ; \ + movq %r13, 0x8+P0 ; \ + movq %r14, 0x10+P0 ; \ + movq %r15, 0x18+P0 + +// Corresponds exactly to bignum_montsqr_p256 + +#define montsqr_p256(P0,P1) \ + movq P1, %rdx ; \ + mulxq %rdx, %r8, %r15 ; \ + mulxq 0x8+P1, %r9, %r10 ; \ + mulxq 0x18+P1, %r11, %r12 ; \ + movq 0x10+P1, %rdx ; \ + mulxq 0x18+P1, %r13, %r14 ; \ + xorl %ebp, %ebp ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + movq 0x18+P1, %rdx ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + adcxq %rbp, %r13 ; \ + adoxq %rbp, %r14 ; \ + adcq %rbp, %r14 ; \ + xorl %ebp, %ebp ; \ + adcxq %r9, %r9 ; \ + adoxq %r15, %r9 ; \ + movq 0x8+P1, %rdx ; \ + mulxq %rdx, %rax, %rdx ; \ + adcxq %r10, %r10 ; \ + adoxq %rax, %r10 ; \ + adcxq %r11, %r11 ; \ + adoxq %rdx, %r11 ; \ + movq 0x10+P1, %rdx ; \ + mulxq %rdx, %rax, %rdx ; \ + adcxq %r12, %r12 ; \ + adoxq %rax, %r12 ; \ + adcxq %r13, %r13 ; \ + adoxq %rdx, %r13 ; \ + movq 0x18+P1, %rdx ; \ + mulxq %rdx, %rax, %r15 ; \ + adcxq %r14, %r14 ; \ + adoxq %rax, %r14 ; \ + adcxq %rbp, %r15 ; \ + adoxq %rbp, %r15 ; \ + xorl %ebp, %ebp ; \ + movabsq $0x100000000, %rdx ; \ + mulxq %r8, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq %r9, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + movabsq $0xffffffff00000001, %rdx ; \ + mulxq %r8, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq %r9, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + adcxq %rbp, %r13 ; \ + movl %ebp, %r9d ; \ + adoxq %rbp, %r9 ; \ + adcxq %rbp, %r9 ; \ + addq %r9, %r14 ; \ + adcq %rbp, %r15 ; \ + movl %ebp, %r8d ; \ + adcq %rbp, %r8 ; \ + xorl %ebp, %ebp ; \ + movabsq $0x100000000, %rdx ; \ + mulxq %r10, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq %r11, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + movabsq $0xffffffff00000001, %rdx ; \ + mulxq %r10, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq %r11, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + adcxq %rbp, %r15 ; \ + adoxq %rbp, %r8 ; \ + adcq %rbp, %r8 ; \ + movl $0x1, %ecx ; \ + addq %r12, %rcx ; \ + leaq -0x1(%rdx), %rdx ; \ + adcq %r13, %rdx ; \ + leaq -0x1(%rbp), %rbp ; \ + movq %rbp, %rax ; \ + adcq %r14, %rbp ; \ + movl $0xfffffffe, %r11d ; \ + adcq %r15, %r11 ; \ + adcq %r8, %rax ; \ + cmovbq %rcx, %r12 ; \ + cmovbq %rdx, %r13 ; \ + cmovbq %rbp, %r14 ; \ + cmovbq %r11, %r15 ; \ + movq %r12, P0 ; \ + movq %r13, 0x8+P0 ; \ + movq %r14, 0x10+P0 ; \ + movq %r15, 0x18+P0 + +// Corresponds exactly to bignum_sub_p256 + +#define sub_p256(P0,P1,P2) \ + movq P1, %rax ; \ + subq P2, %rax ; \ + movq 0x8+P1, %rcx ; \ + sbbq 0x8+P2, %rcx ; \ + movq 0x10+P1, %r8 ; \ + sbbq 0x10+P2, %r8 ; \ + movq 0x18+P1, %r9 ; \ + sbbq 0x18+P2, %r9 ; \ + movl $0xffffffff, %r10d ; \ + sbbq %r11, %r11 ; \ + xorq %rdx, %rdx ; \ + andq %r11, %r10 ; \ + subq %r10, %rdx ; \ + addq %r11, %rax ; \ + movq %rax, P0 ; \ + adcq %r10, %rcx ; \ + movq %rcx, 0x8+P0 ; \ + adcq $0x0, %r8 ; \ + movq %r8, 0x10+P0 ; \ + adcq %rdx, %r9 ; \ + movq %r9, 0x18+P0 + +// Corresponds exactly to bignum_add_p256 + +#define add_p256(P0,P1,P2) \ + xorq %r11, %r11 ; \ + movq P1, %rax ; \ + addq P2, %rax ; \ + movq 0x8+P1, %rcx ; \ + adcq 0x8+P2, %rcx ; \ + movq 0x10+P1, %r8 ; \ + adcq 0x10+P2, %r8 ; \ + movq 0x18+P1, %r9 ; \ + adcq 0x18+P2, %r9 ; \ + adcq %r11, %r11 ; \ + subq $0xffffffffffffffff, %rax ; \ + movl $0xffffffff, %r10d ; \ + sbbq %r10, %rcx ; \ + sbbq $0x0, %r8 ; \ + movq $0xffffffff00000001, %rdx ; \ + sbbq %rdx, %r9 ; \ + sbbq $0x0, %r11 ; \ + andq %r11, %r10 ; \ + andq %r11, %rdx ; \ + addq %r11, %rax ; \ + movq %rax, P0 ; \ + adcq %r10, %rcx ; \ + movq %rcx, 0x8+P0 ; \ + adcq $0x0, %r8 ; \ + movq %r8, 0x10+P0 ; \ + adcq %rdx, %r9 ; \ + movq %r9, 0x18+P0 + +// A weak version of add that only guarantees sum in 4 digits + +#define weakadd_p256(P0,P1,P2) \ + movq P1, %rax ; \ + addq P2, %rax ; \ + movq 0x8+P1, %rcx ; \ + adcq 0x8+P2, %rcx ; \ + movq 0x10+P1, %r8 ; \ + adcq 0x10+P2, %r8 ; \ + movq 0x18+P1, %r9 ; \ + adcq 0x18+P2, %r9 ; \ + movl $0xffffffff, %r10d ; \ + sbbq %r11, %r11 ; \ + xorq %rdx, %rdx ; \ + andq %r11, %r10 ; \ + subq %r10, %rdx ; \ + subq %r11, %rax ; \ + movq %rax, P0 ; \ + sbbq %r10, %rcx ; \ + movq %rcx, 0x8+P0 ; \ + sbbq $0x0, %r8 ; \ + movq %r8, 0x10+P0 ; \ + sbbq %rdx, %r9 ; \ + movq %r9, 0x18+P0 + +// P0 = C * P1 - D * P2 computed as d * (p_256 - P2) + c * P1 +// Quotient estimation is done just as q = h + 1 as in bignum_triple_p256 +// This also applies to the other functions following. + +#define cmsub_p256(P0,C,P1,D,P2) \ + /* First (%r11;%r10;%r9;%r8) = p_256 - P2 */ \ + movq $0xffffffffffffffff, %r8 ; \ + xorl %r10d, %r10d ; \ + subq P2, %r8 ; \ + movq $0x00000000ffffffff, %r9 ; \ + sbbq 0x8+P2, %r9 ; \ + sbbq 0x10+P2, %r10 ; \ + movq $0xffffffff00000001, %r11 ; \ + sbbq 0x18+P2, %r11 ; \ + /* (%r12;%r11;%r10;%r9;%r8) = D * (p_256 - P2) */ \ + xorl %r12d, %r12d ; \ + movq $D, %rdx ; \ + mulxq %r8, %r8, %rax ; \ + mulxq %r9, %r9, %rcx ; \ + addq %rax, %r9 ; \ + mulxq %r10, %r10, %rax ; \ + adcq %rcx, %r10 ; \ + mulxq %r11, %r11, %rcx ; \ + adcq %rax, %r11 ; \ + adcq %rcx, %r12 ; \ + /* (%rdx;%r11;%r10;%r9;%r8) = 2^256 + C * P1 + D * (p_256 - P2) */ \ + movq $C, %rdx ; \ + xorl %eax, %eax ; \ + mulxq P1, %rax, %rcx ; \ + adcxq %rax, %r8 ; \ + adoxq %rcx, %r9 ; \ + mulxq 0x8+P1, %rax, %rcx ; \ + adcxq %rax, %r9 ; \ + adoxq %rcx, %r10 ; \ + mulxq 0x10+P1, %rax, %rcx ; \ + adcxq %rax, %r10 ; \ + adoxq %rcx, %r11 ; \ + mulxq 0x18+P1, %rax, %rdx ; \ + adcxq %rax, %r11 ; \ + adoxq %r12, %rdx ; \ + adcq $1, %rdx ; \ + /* Now the tail for modular reduction from tripling */ \ + addq %rdx, %r8 ; \ + movq $0x100000000, %rax ; \ + mulxq %rax, %rax, %rcx ; \ + sbbq $0x0, %rax ; \ + sbbq $0x0, %rcx ; \ + subq %rax, %r9 ; \ + sbbq %rcx, %r10 ; \ + movq $0xffffffff00000001, %rax ; \ + mulxq %rax, %rax, %rcx ; \ + sbbq %rax, %r11 ; \ + sbbq %rcx, %rdx ; \ + decq %rdx; \ + movl $0xffffffff, %eax ; \ + andq %rdx, %rax ; \ + xorl %ecx, %ecx ; \ + subq %rax, %rcx ; \ + addq %rdx, %r8 ; \ + movq %r8, P0 ; \ + adcq %rax, %r9 ; \ + movq %r9, 0x8+P0 ; \ + adcq $0x0, %r10 ; \ + movq %r10, 0x10+P0 ; \ + adcq %rcx, %r11 ; \ + movq %r11, 0x18+P0 + +// P0 = 3 * P1 - 8 * P2, computed as (p_256 - P2) << 3 + 3 * P1 + +#define cmsub38_p256(P0,P1,P2) \ + /* First (%r11;%r10;%r9;%r8) = p_256 - P2 */ \ + movq $0xffffffffffffffff, %r8 ; \ + xorl %r10d, %r10d ; \ + subq P2, %r8 ; \ + movq $0x00000000ffffffff, %r9 ; \ + sbbq 0x8+P2, %r9 ; \ + sbbq 0x10+P2, %r10 ; \ + movq $0xffffffff00000001, %r11 ; \ + sbbq 0x18+P2, %r11 ; \ + /* (%r12;%r11;%r10;%r9;%r8) = (p_256 - P2) << 3 */ \ + movq %r11, %r12 ; \ + shldq $3, %r10, %r11 ; \ + shldq $3, %r9, %r10 ; \ + shldq $3, %r8, %r9 ; \ + shlq $3, %r8 ; \ + shrq $61, %r12 ; \ + /* (%rdx;%r11;%r10;%r9;%r8) = 2^256 + 3 * P1 + 8 * (p_256 - P2) */ \ + movq $3, %rdx ; \ + xorl %eax, %eax ; \ + mulxq P1, %rax, %rcx ; \ + adcxq %rax, %r8 ; \ + adoxq %rcx, %r9 ; \ + mulxq 0x8+P1, %rax, %rcx ; \ + adcxq %rax, %r9 ; \ + adoxq %rcx, %r10 ; \ + mulxq 0x10+P1, %rax, %rcx ; \ + adcxq %rax, %r10 ; \ + adoxq %rcx, %r11 ; \ + mulxq 0x18+P1, %rax, %rdx ; \ + adcxq %rax, %r11 ; \ + adoxq %r12, %rdx ; \ + adcq $1, %rdx ; \ + /* Now the tail for modular reduction from tripling */ \ + addq %rdx, %r8 ; \ + movq $0x100000000, %rax ; \ + mulxq %rax, %rax, %rcx ; \ + sbbq $0x0, %rax ; \ + sbbq $0x0, %rcx ; \ + subq %rax, %r9 ; \ + sbbq %rcx, %r10 ; \ + movq $0xffffffff00000001, %rax ; \ + mulxq %rax, %rax, %rcx ; \ + sbbq %rax, %r11 ; \ + sbbq %rcx, %rdx ; \ + decq %rdx; \ + movl $0xffffffff, %eax ; \ + andq %rdx, %rax ; \ + xorl %ecx, %ecx ; \ + subq %rax, %rcx ; \ + addq %rdx, %r8 ; \ + movq %r8, P0 ; \ + adcq %rax, %r9 ; \ + movq %r9, 0x8+P0 ; \ + adcq $0x0, %r10 ; \ + movq %r10, 0x10+P0 ; \ + adcq %rcx, %r11 ; \ + movq %r11, 0x18+P0 + +// P0 = 4 * P1 - P2, by direct subtraction of P2, +// since the quotient estimate still works safely +// for initial value > -p_256 + +#define cmsub41_p256(P0,P1,P2) \ + movq 0x18+P1, %r11 ; \ + movq %r11, %rdx ; \ + movq 0x10+P1, %r10 ; \ + shldq $2, %r10, %r11 ; \ + movq 0x8+P1, %r9 ; \ + shldq $2, %r9, %r10 ; \ + movq P1, %r8 ; \ + shldq $2, %r8, %r9 ; \ + shlq $2, %r8 ; \ + shrq $62, %rdx ; \ + addq $1, %rdx ; \ + subq P2, %r8 ; \ + sbbq 0x8+P2, %r9 ; \ + sbbq 0x10+P2, %r10 ; \ + sbbq 0x18+P2, %r11 ; \ + sbbq $0, %rdx ; \ + /* Now the tail for modular reduction from tripling */ \ + addq %rdx, %r8 ; \ + movq $0x100000000, %rax ; \ + mulxq %rax, %rax, %rcx ; \ + sbbq $0x0, %rax ; \ + sbbq $0x0, %rcx ; \ + subq %rax, %r9 ; \ + sbbq %rcx, %r10 ; \ + movq $0xffffffff00000001, %rax ; \ + mulxq %rax, %rax, %rcx ; \ + sbbq %rax, %r11 ; \ + sbbq %rcx, %rdx ; \ + decq %rdx; \ + movl $0xffffffff, %eax ; \ + andq %rdx, %rax ; \ + xorl %ecx, %ecx ; \ + subq %rax, %rcx ; \ + addq %rdx, %r8 ; \ + movq %r8, P0 ; \ + adcq %rax, %r9 ; \ + movq %r9, 0x8+P0 ; \ + adcq $0x0, %r10 ; \ + movq %r10, 0x10+P0 ; \ + adcq %rcx, %r11 ; \ + movq %r11, 0x18+P0 + +S2N_BN_SYMBOL(p256_montjdouble): + +#if WINDOWS_ABI + pushq %rdi + pushq %rsi + movq %rcx, %rdi + movq %rdx, %rsi +#endif + +// Save registers and make room on stack for temporary variables +// Save the outpuy pointer %rdi which gets overwritten in earlier +// operations before it is used. + + pushq %rbx + pushq %rbp + pushq %r12 + pushq %r13 + pushq %r14 + pushq %r15 + + subq $NSPACE, %rsp + +// Main code, just a sequence of basic field operations + +// z2 = z^2 +// y2 = y^2 + + montsqr_p256(z2,z_1) + montsqr_p256(y2,y_1) + +// x2p = x^2 - z^4 = (x + z^2) * (x - z^2) + + weakadd_p256(t1,x_1,z2) + sub_p256(t2,x_1,z2) + montmul_p256(x2p,t1,t2) + +// t1 = y + z +// x4p = x2p^2 +// xy2 = x * y^2 + + add_p256(t1,y_1,z_1) + montsqr_p256(x4p,x2p) + montmul_p256(xy2,x_1,y2) + +// t2 = (y + z)^2 + + montsqr_p256(t2,t1) + +// d = 12 * xy2 - 9 * x4p +// t1 = y^2 + 2 * y * z + + cmsub_p256(d,12,xy2,9,x4p) + sub_p256(t1,t2,z2) + +// y4 = y^4 + + montsqr_p256(y4,y2) + +// Restore the output pointer to write to x_3, y_3 and z_3. + +// z_3' = 2 * y * z +// dx2 = d * x2p + + sub_p256(z_3,t1,y2) + montmul_p256(dx2,d,x2p) + +// x' = 4 * xy2 - d + + cmsub41_p256(x_3,xy2,d) + +// y' = 3 * dx2 - 8 * y4 + + cmsub38_p256(y_3,dx2,y4) + +// Restore stack and registers + + addq $NSPACE, %rsp + popq %r15 + popq %r14 + popq %r13 + popq %r12 + popq %rbp + popq %rbx + +#if WINDOWS_ABI + popq %rsi + popq %rdi +#endif + ret + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack, "", %progbits +#endif diff --git a/x86_att/p256/p256_montjmixadd.S b/x86_att/p256/p256_montjmixadd.S new file mode 100644 index 0000000000..12ed3ab5b4 --- /dev/null +++ b/x86_att/p256/p256_montjmixadd.S @@ -0,0 +1,510 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +// ---------------------------------------------------------------------------- +// Point mixed addition on NIST curve P-256 in Montgomery-Jacobian coordinates +// +// extern void p256_montjmixadd +// (uint64_t p3[static 12],uint64_t p1[static 12],uint64_t p2[static 8]); +// +// Does p3 := p1 + p2 where all points are regarded as Jacobian triples with +// each coordinate in the Montgomery domain, i.e. x' = (2^256 * x) mod p_256. +// A Jacobian triple (x',y',z') represents affine point (x/z^2,y/z^3). +// The "mixed" part means that p2 only has x and y coordinates, with the +// implicit z coordinate assumed to be the identity. +// +// Standard x86-64 ABI: RDI = p3, RSI = p1, RDX = p2 +// Microsoft x64 ABI: RCX = p3, RDX = p1, R8 = p2 +// ---------------------------------------------------------------------------- +#include "_internal_s2n_bignum.h" + + + S2N_BN_SYM_VISIBILITY_DIRECTIVE(p256_montjmixadd) + S2N_BN_SYM_PRIVACY_DIRECTIVE(p256_montjmixadd) + .text + +// Size of individual field elements + +#define NUMSIZE 32 + +// Pointer-offset pairs for inputs and outputs +// These assume %rdi = p3, %rsi = p1 and %rbp = p2, +// which needs to be set up explicitly before use +// As it happens none of the code macros modify +// either %rdi or %rsi so we just need to take care +// over %rbp. That is set up early and lasts for the +// places where it's needed but not the full code; +// it gets destroyed by montsqr_p256 calls. + +#define x_1 0(%rsi) +#define y_1 NUMSIZE(%rsi) +#define z_1 (2*NUMSIZE)(%rsi) + +#define x_2 0(%rbp) +#define y_2 NUMSIZE(%rbp) + +#define x_3 0(%rdi) +#define y_3 NUMSIZE(%rdi) +#define z_3 (2*NUMSIZE)(%rdi) + +// Pointer-offset pairs for temporaries, with some aliasing +// NSPACE is the total stack needed for these temporaries + +#define zp2 (NUMSIZE*0)(%rsp) +#define ww (NUMSIZE*0)(%rsp) + +#define yd (NUMSIZE*1)(%rsp) +#define y2a (NUMSIZE*1)(%rsp) + +#define x2a (NUMSIZE*2)(%rsp) +#define zzx2 (NUMSIZE*2)(%rsp) + +#define zz (NUMSIZE*3)(%rsp) +#define t1 (NUMSIZE*3)(%rsp) + +#define t2 (NUMSIZE*4)(%rsp) +#define zzx1 (NUMSIZE*4)(%rsp) + +#define xd (NUMSIZE*5)(%rsp) + +#define NSPACE (NUMSIZE*6) + +// Corresponds exactly to bignum_montmul_p256 + +#define montmul_p256(P0,P1,P2) \ + xorl %r13d, %r13d ; \ + movq P2, %rdx ; \ + mulxq P1, %r8, %r9 ; \ + mulxq 0x8+P1, %rbx, %r10 ; \ + adcq %rbx, %r9 ; \ + mulxq 0x10+P1, %rbx, %r11 ; \ + adcq %rbx, %r10 ; \ + mulxq 0x18+P1, %rbx, %r12 ; \ + adcq %rbx, %r11 ; \ + adcq %r13, %r12 ; \ + movq 0x8+P2, %rdx ; \ + xorl %r14d, %r14d ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + adcq %r14, %r13 ; \ + xorl %r15d, %r15d ; \ + movabsq $0x100000000, %rdx ; \ + mulxq %r8, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq %r9, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + notq %rdx; \ + leaq 0x2(%rdx), %rdx ; \ + mulxq %r8, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq %r9, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + adcxq %r15, %r13 ; \ + adoxq %r15, %r14 ; \ + adcq %r15, %r14 ; \ + movq 0x10+P2, %rdx ; \ + xorl %r8d, %r8d ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + adoxq %r8, %r14 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcq %rax, %r13 ; \ + adcq %rbx, %r14 ; \ + adcq %r8, %r15 ; \ + movq 0x18+P2, %rdx ; \ + xorl %r9d, %r9d ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + adoxq %r9, %r15 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcq %rax, %r14 ; \ + adcq %rbx, %r15 ; \ + adcq %r9, %r8 ; \ + xorl %r9d, %r9d ; \ + movabsq $0x100000000, %rdx ; \ + mulxq %r10, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq %r11, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + notq %rdx; \ + leaq 0x2(%rdx), %rdx ; \ + mulxq %r10, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq %r11, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + adcxq %r9, %r15 ; \ + adoxq %r9, %r8 ; \ + adcq %r9, %r8 ; \ + movl $0x1, %ecx ; \ + addq %r12, %rcx ; \ + decq %rdx; \ + adcq %r13, %rdx ; \ + decq %r9; \ + movq %r9, %rax ; \ + adcq %r14, %r9 ; \ + movl $0xfffffffe, %r11d ; \ + adcq %r15, %r11 ; \ + adcq %r8, %rax ; \ + cmovbq %rcx, %r12 ; \ + cmovbq %rdx, %r13 ; \ + cmovbq %r9, %r14 ; \ + cmovbq %r11, %r15 ; \ + movq %r12, P0 ; \ + movq %r13, 0x8+P0 ; \ + movq %r14, 0x10+P0 ; \ + movq %r15, 0x18+P0 + +// Corresponds exactly to bignum_montsqr_p256 + +#define montsqr_p256(P0,P1) \ + movq P1, %rdx ; \ + mulxq %rdx, %r8, %r15 ; \ + mulxq 0x8+P1, %r9, %r10 ; \ + mulxq 0x18+P1, %r11, %r12 ; \ + movq 0x10+P1, %rdx ; \ + mulxq 0x18+P1, %r13, %r14 ; \ + xorl %ebp, %ebp ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + movq 0x18+P1, %rdx ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + adcxq %rbp, %r13 ; \ + adoxq %rbp, %r14 ; \ + adcq %rbp, %r14 ; \ + xorl %ebp, %ebp ; \ + adcxq %r9, %r9 ; \ + adoxq %r15, %r9 ; \ + movq 0x8+P1, %rdx ; \ + mulxq %rdx, %rax, %rdx ; \ + adcxq %r10, %r10 ; \ + adoxq %rax, %r10 ; \ + adcxq %r11, %r11 ; \ + adoxq %rdx, %r11 ; \ + movq 0x10+P1, %rdx ; \ + mulxq %rdx, %rax, %rdx ; \ + adcxq %r12, %r12 ; \ + adoxq %rax, %r12 ; \ + adcxq %r13, %r13 ; \ + adoxq %rdx, %r13 ; \ + movq 0x18+P1, %rdx ; \ + mulxq %rdx, %rax, %r15 ; \ + adcxq %r14, %r14 ; \ + adoxq %rax, %r14 ; \ + adcxq %rbp, %r15 ; \ + adoxq %rbp, %r15 ; \ + xorl %ebp, %ebp ; \ + movabsq $0x100000000, %rdx ; \ + mulxq %r8, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq %r9, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + movabsq $0xffffffff00000001, %rdx ; \ + mulxq %r8, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq %r9, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + adcxq %rbp, %r13 ; \ + movl %ebp, %r9d ; \ + adoxq %rbp, %r9 ; \ + adcxq %rbp, %r9 ; \ + addq %r9, %r14 ; \ + adcq %rbp, %r15 ; \ + movl %ebp, %r8d ; \ + adcq %rbp, %r8 ; \ + xorl %ebp, %ebp ; \ + movabsq $0x100000000, %rdx ; \ + mulxq %r10, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq %r11, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + movabsq $0xffffffff00000001, %rdx ; \ + mulxq %r10, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq %r11, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + adcxq %rbp, %r15 ; \ + adoxq %rbp, %r8 ; \ + adcq %rbp, %r8 ; \ + movl $0x1, %ecx ; \ + addq %r12, %rcx ; \ + leaq -0x1(%rdx), %rdx ; \ + adcq %r13, %rdx ; \ + leaq -0x1(%rbp), %rbp ; \ + movq %rbp, %rax ; \ + adcq %r14, %rbp ; \ + movl $0xfffffffe, %r11d ; \ + adcq %r15, %r11 ; \ + adcq %r8, %rax ; \ + cmovbq %rcx, %r12 ; \ + cmovbq %rdx, %r13 ; \ + cmovbq %rbp, %r14 ; \ + cmovbq %r11, %r15 ; \ + movq %r12, P0 ; \ + movq %r13, 0x8+P0 ; \ + movq %r14, 0x10+P0 ; \ + movq %r15, 0x18+P0 + +// Almost-Montgomery variant which we use when an input to other muls +// with the other argument fully reduced (which is always safe). +// It's also tweaked to avoid modifying %rbp so that we can use that +// for the y input while it is needed. + +#define amontsqr_p256(P0,P1) \ + movq P1, %rdx ; \ + mulxq %rdx, %r8, %r15 ; \ + mulxq 0x8+P1, %r9, %r10 ; \ + mulxq 0x18+P1, %r11, %r12 ; \ + movq 0x10+P1, %rdx ; \ + mulxq 0x18+P1, %r13, %r14 ; \ + xorl %ecx, %ecx ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + movq 0x18+P1, %rdx ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + adcxq %rcx, %r13 ; \ + adoxq %rcx, %r14 ; \ + adcq %rcx, %r14 ; \ + xorl %ecx, %ecx ; \ + adcxq %r9, %r9 ; \ + adoxq %r15, %r9 ; \ + movq 0x8+P1, %rdx ; \ + mulxq %rdx, %rax, %rdx ; \ + adcxq %r10, %r10 ; \ + adoxq %rax, %r10 ; \ + adcxq %r11, %r11 ; \ + adoxq %rdx, %r11 ; \ + movq 0x10+P1, %rdx ; \ + mulxq %rdx, %rax, %rdx ; \ + adcxq %r12, %r12 ; \ + adoxq %rax, %r12 ; \ + adcxq %r13, %r13 ; \ + adoxq %rdx, %r13 ; \ + movq 0x18+P1, %rdx ; \ + mulxq %rdx, %rax, %r15 ; \ + adcxq %r14, %r14 ; \ + adoxq %rax, %r14 ; \ + adcxq %rcx, %r15 ; \ + adoxq %rcx, %r15 ; \ + xorl %ecx, %ecx ; \ + movabsq $0x100000000, %rdx ; \ + mulxq %r8, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq %r9, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + movabsq $0xffffffff00000001, %rdx ; \ + mulxq %r8, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq %r9, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + adcxq %rcx, %r13 ; \ + movl %ecx, %r9d ; \ + adoxq %rcx, %r9 ; \ + adcxq %rcx, %r9 ; \ + addq %r9, %r14 ; \ + adcq %rcx, %r15 ; \ + movl %ecx, %r8d ; \ + adcq %rcx, %r8 ; \ + xorl %ecx, %ecx ; \ + movabsq $0x100000000, %rdx ; \ + mulxq %r10, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq %r11, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + movabsq $0xffffffff00000001, %rdx ; \ + mulxq %r10, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq %r11, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + adcxq %rcx, %r15 ; \ + adoxq %rcx, %r8 ; \ + adcq %rcx, %r8 ; \ + movl $0x1, %r8d ; \ + leaq -0x1(%rdx), %rdx ; \ + leaq -0x1(%rcx), %rax ; \ + movl $0xfffffffe, %r11d ; \ + cmovzq %rcx, %r8 ; \ + cmovzq %rcx, %rdx ; \ + cmovzq %rcx, %rax ; \ + cmovzq %rcx, %r11 ; \ + addq %r8, %r12 ; \ + adcq %rdx, %r13 ; \ + adcq %rax, %r14 ; \ + adcq %r11, %r15 ; \ + movq %r12, P0 ; \ + movq %r13, 0x8+P0 ; \ + movq %r14, 0x10+P0 ; \ + movq %r15, 0x18+P0 + +// Corresponds exactly to bignum_sub_p256 + +#define sub_p256(P0,P1,P2) \ + movq P1, %rax ; \ + subq P2, %rax ; \ + movq 0x8+P1, %rcx ; \ + sbbq 0x8+P2, %rcx ; \ + movq 0x10+P1, %r8 ; \ + sbbq 0x10+P2, %r8 ; \ + movq 0x18+P1, %r9 ; \ + sbbq 0x18+P2, %r9 ; \ + movl $0xffffffff, %r10d ; \ + sbbq %r11, %r11 ; \ + xorq %rdx, %rdx ; \ + andq %r11, %r10 ; \ + subq %r10, %rdx ; \ + addq %r11, %rax ; \ + movq %rax, P0 ; \ + adcq %r10, %rcx ; \ + movq %rcx, 0x8+P0 ; \ + adcq $0x0, %r8 ; \ + movq %r8, 0x10+P0 ; \ + adcq %rdx, %r9 ; \ + movq %r9, 0x18+P0 + +S2N_BN_SYMBOL(p256_montjmixadd): + +#if WINDOWS_ABI + pushq %rdi + pushq %rsi + movq %rcx, %rdi + movq %rdx, %rsi + movq %r8, %rdx +#endif + +// Save registers and make room on stack for temporary variables +// Put the input y in %rbp where it lasts as long as it's needed. + + pushq %rbx + pushq %rbp + pushq %r12 + pushq %r13 + pushq %r14 + pushq %r15 + + subq $NSPACE, %rsp + + movq %rdx, %rbp + +// Main code, just a sequence of basic field operations +// 8 * multiply + 3 * square + 7 * subtract + + amontsqr_p256(zp2,z_1) + + montmul_p256(y2a,z_1,y_2) + montmul_p256(x2a,zp2,x_2) + montmul_p256(y2a,zp2,y2a) + + sub_p256(xd,x2a,x_1) + + sub_p256(yd,y2a,y_1) + + amontsqr_p256(zz,xd) + montsqr_p256(ww,yd) + + montmul_p256(zzx1,zz,x_1) + montmul_p256(zzx2,zz,x2a) + + sub_p256(x_3,ww,zzx1) + sub_p256(t1,zzx2,zzx1) + + montmul_p256(z_3,xd,z_1) + + sub_p256(x_3,x_3,zzx2) + + sub_p256(t2,zzx1,x_3) + + montmul_p256(t1,t1,y_1) + montmul_p256(t2,yd,t2) + + sub_p256(y_3,t2,t1) + +// Restore stack and registers + + addq $NSPACE, %rsp + popq %r15 + popq %r14 + popq %r13 + popq %r12 + popq %rbp + popq %rbx + +#if WINDOWS_ABI + popq %rsi + popq %rdi +#endif + ret + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack, "", %progbits +#endif From df8e913c542e5392a9f9cb6cd42fc90c5a02f72e Mon Sep 17 00:00:00 2001 From: John Harrison Date: Fri, 1 Jul 2022 20:50:08 -0500 Subject: [PATCH 4/6] Add basic NIST P-384 point operations A point doubling function, point addition function, and point mixed addition function for the P-384 curve, all using Jacobian coordinates in a Montgomery representation, with input nondegeneracy assumed. Once again, the addition and mixed addition functions offer only marginal efficiency gains over just calling a sequence of basic field operations, but the doubling has some beneficial mathematically equivalent short-cutting of the intermediate modular reductions. --- arm/Makefile | 3 + arm/p384/Makefile | 5 +- arm/p384/p384_montjadd.S | 893 ++++ arm/p384/p384_montjdouble.S | 963 ++++ arm/p384/p384_montjmixadd.S | 884 ++++ arm/proofs/p384_montjadd.ml | 5068 +++++++++++++++++++++ arm/proofs/p384_montjdouble.ml | 3635 ++++++++++++++++ arm/proofs/p384_montjmixadd.ml | 3768 ++++++++++++++++ benchmarks/benchmark.c | 7 + include/s2n-bignum-c89.h | 12 + include/s2n-bignum.h | 12 + tests/test.c | 126 + x86/Makefile | 3 + x86/p384/Makefile | 5 +- x86/p384/p384_montjadd.S | 955 ++++ x86/p384/p384_montjdouble.S | 1014 +++++ x86/p384/p384_montjmixadd.S | 941 ++++ x86/proofs/p384_montjadd.ml | 7248 +++++++++++++++++++++++++++++++ x86/proofs/p384_montjdouble.ml | 4895 +++++++++++++++++++++ x86/proofs/p384_montjmixadd.ml | 5319 +++++++++++++++++++++++ x86/yesbmi_functions | 3 + x86_att/Makefile | 3 + x86_att/p384/p384_montjadd.S | 955 ++++ x86_att/p384/p384_montjdouble.S | 1014 +++++ x86_att/p384/p384_montjmixadd.S | 941 ++++ 25 files changed, 38670 insertions(+), 2 deletions(-) create mode 100644 arm/p384/p384_montjadd.S create mode 100644 arm/p384/p384_montjdouble.S create mode 100644 arm/p384/p384_montjmixadd.S create mode 100644 arm/proofs/p384_montjadd.ml create mode 100644 arm/proofs/p384_montjdouble.ml create mode 100644 arm/proofs/p384_montjmixadd.ml create mode 100644 x86/p384/p384_montjadd.S create mode 100644 x86/p384/p384_montjdouble.S create mode 100644 x86/p384/p384_montjmixadd.S create mode 100644 x86/proofs/p384_montjadd.ml create mode 100644 x86/proofs/p384_montjdouble.ml create mode 100644 x86/proofs/p384_montjmixadd.ml create mode 100644 x86_att/p384/p384_montjadd.S create mode 100644 x86_att/p384/p384_montjdouble.S create mode 100644 x86_att/p384/p384_montjmixadd.S diff --git a/arm/Makefile b/arm/Makefile index 692de061cb..7465649f6d 100644 --- a/arm/Makefile +++ b/arm/Makefile @@ -217,6 +217,9 @@ OBJ = curve25519/bignum_add_p25519.o \ p384/bignum_sub_p384.o \ p384/bignum_tomont_p384.o \ p384/bignum_triple_p384.o \ + p384/p384_montjadd.o \ + p384/p384_montjdouble.o \ + p384/p384_montjmixadd.o \ p521/bignum_add_p521.o \ p521/bignum_cmul_p521.o \ p521/bignum_deamont_p521.o \ diff --git a/arm/p384/Makefile b/arm/p384/Makefile index 469a20ff12..11a5605504 100644 --- a/arm/p384/Makefile +++ b/arm/p384/Makefile @@ -53,7 +53,10 @@ OBJ = bignum_add_p384.o \ bignum_optneg_p384.o \ bignum_sub_p384.o \ bignum_tomont_p384.o \ - bignum_triple_p384.o + bignum_triple_p384.o \ + p384_montjadd.o \ + p384_montjdouble.o \ + p384_montjmixadd.o %.o : %.S ; $(CC) -E -I../../include $< | $(GAS) -o $@ - diff --git a/arm/p384/p384_montjadd.S b/arm/p384/p384_montjadd.S new file mode 100644 index 0000000000..138afa9dc3 --- /dev/null +++ b/arm/p384/p384_montjadd.S @@ -0,0 +1,893 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +// ---------------------------------------------------------------------------- +// Point addition on NIST curve P-384 in Montgomery-Jacobian coordinates +// +// extern void p384_montjadd +// (uint64_t p3[static 18],uint64_t p1[static 18],uint64_t p2[static 18]); +// +// Does p3 := p1 + p2 where all points are regarded as Jacobian triples with +// each coordinate in the Montgomery domain, i.e. x' = (2^384 * x) mod p_384. +// A Jacobian triple (x',y',z') represents affine point (x/z^2,y/z^3). +// +// Standard ARM ABI: X0 = p3, X1 = p1, X2 = p2 +// ---------------------------------------------------------------------------- +#include "_internal_s2n_bignum.h" + + S2N_BN_SYM_VISIBILITY_DIRECTIVE(p384_montjadd) + S2N_BN_SYM_PRIVACY_DIRECTIVE(p384_montjadd) + .text + .balign 4 + +// Size of individual field elements + +#define NUMSIZE 48 + +// Stable homes for input arguments during main code sequence + +#define input_z x24 +#define input_x x25 +#define input_y x26 + +// Pointer-offset pairs for inputs and outputs + +#define x_1 input_x, #0 +#define y_1 input_x, #NUMSIZE +#define z_1 input_x, #(2*NUMSIZE) + +#define x_2 input_y, #0 +#define y_2 input_y, #NUMSIZE +#define z_2 input_y, #(2*NUMSIZE) + +#define x_3 input_z, #0 +#define y_3 input_z, #NUMSIZE +#define z_3 input_z, #(2*NUMSIZE) + +// Pointer-offset pairs for temporaries, with some aliasing +// NSPACE is the total stack needed for these temporaries + +#define z1sq sp, #(NUMSIZE*0) +#define ww sp, #(NUMSIZE*0) + +#define yd sp, #(NUMSIZE*1) +#define y2a sp, #(NUMSIZE*1) + +#define x2a sp, #(NUMSIZE*2) +#define zzx2 sp, #(NUMSIZE*2) + +#define zz sp, #(NUMSIZE*3) +#define t1 sp, #(NUMSIZE*3) + +#define t2 sp, #(NUMSIZE*4) +#define x1a sp, #(NUMSIZE*4) +#define zzx1 sp, #(NUMSIZE*4) + +#define xd sp, #(NUMSIZE*5) +#define z2sq sp, #(NUMSIZE*5) + +#define y1a sp, #(NUMSIZE*6) + +#define NSPACE (NUMSIZE*7) + +// Corresponds exactly to bignum_montmul_p384_alt + +#define montmul_p384(P0,P1,P2) \ + ldp x3, x4, [P1]; \ + ldp x5, x6, [P2]; \ + mul x12, x3, x5; \ + umulh x13, x3, x5; \ + mul x11, x3, x6; \ + umulh x14, x3, x6; \ + adds x13, x13, x11; \ + ldp x7, x8, [P2+16]; \ + mul x11, x3, x7; \ + umulh x15, x3, x7; \ + adcs x14, x14, x11; \ + mul x11, x3, x8; \ + umulh x16, x3, x8; \ + adcs x15, x15, x11; \ + ldp x9, x10, [P2+32]; \ + mul x11, x3, x9; \ + umulh x17, x3, x9; \ + adcs x16, x16, x11; \ + mul x11, x3, x10; \ + umulh x19, x3, x10; \ + adcs x17, x17, x11; \ + adc x19, x19, xzr; \ + mul x11, x4, x5; \ + adds x13, x13, x11; \ + mul x11, x4, x6; \ + adcs x14, x14, x11; \ + mul x11, x4, x7; \ + adcs x15, x15, x11; \ + mul x11, x4, x8; \ + adcs x16, x16, x11; \ + mul x11, x4, x9; \ + adcs x17, x17, x11; \ + mul x11, x4, x10; \ + adcs x19, x19, x11; \ + cset x20, cs; \ + umulh x11, x4, x5; \ + adds x14, x14, x11; \ + umulh x11, x4, x6; \ + adcs x15, x15, x11; \ + umulh x11, x4, x7; \ + adcs x16, x16, x11; \ + umulh x11, x4, x8; \ + adcs x17, x17, x11; \ + umulh x11, x4, x9; \ + adcs x19, x19, x11; \ + umulh x11, x4, x10; \ + adc x20, x20, x11; \ + ldp x3, x4, [P1+16]; \ + mul x11, x3, x5; \ + adds x14, x14, x11; \ + mul x11, x3, x6; \ + adcs x15, x15, x11; \ + mul x11, x3, x7; \ + adcs x16, x16, x11; \ + mul x11, x3, x8; \ + adcs x17, x17, x11; \ + mul x11, x3, x9; \ + adcs x19, x19, x11; \ + mul x11, x3, x10; \ + adcs x20, x20, x11; \ + cset x21, cs; \ + umulh x11, x3, x5; \ + adds x15, x15, x11; \ + umulh x11, x3, x6; \ + adcs x16, x16, x11; \ + umulh x11, x3, x7; \ + adcs x17, x17, x11; \ + umulh x11, x3, x8; \ + adcs x19, x19, x11; \ + umulh x11, x3, x9; \ + adcs x20, x20, x11; \ + umulh x11, x3, x10; \ + adc x21, x21, x11; \ + mul x11, x4, x5; \ + adds x15, x15, x11; \ + mul x11, x4, x6; \ + adcs x16, x16, x11; \ + mul x11, x4, x7; \ + adcs x17, x17, x11; \ + mul x11, x4, x8; \ + adcs x19, x19, x11; \ + mul x11, x4, x9; \ + adcs x20, x20, x11; \ + mul x11, x4, x10; \ + adcs x21, x21, x11; \ + cset x22, cs; \ + umulh x11, x4, x5; \ + adds x16, x16, x11; \ + umulh x11, x4, x6; \ + adcs x17, x17, x11; \ + umulh x11, x4, x7; \ + adcs x19, x19, x11; \ + umulh x11, x4, x8; \ + adcs x20, x20, x11; \ + umulh x11, x4, x9; \ + adcs x21, x21, x11; \ + umulh x11, x4, x10; \ + adc x22, x22, x11; \ + ldp x3, x4, [P1+32]; \ + mul x11, x3, x5; \ + adds x16, x16, x11; \ + mul x11, x3, x6; \ + adcs x17, x17, x11; \ + mul x11, x3, x7; \ + adcs x19, x19, x11; \ + mul x11, x3, x8; \ + adcs x20, x20, x11; \ + mul x11, x3, x9; \ + adcs x21, x21, x11; \ + mul x11, x3, x10; \ + adcs x22, x22, x11; \ + cset x2, cs; \ + umulh x11, x3, x5; \ + adds x17, x17, x11; \ + umulh x11, x3, x6; \ + adcs x19, x19, x11; \ + umulh x11, x3, x7; \ + adcs x20, x20, x11; \ + umulh x11, x3, x8; \ + adcs x21, x21, x11; \ + umulh x11, x3, x9; \ + adcs x22, x22, x11; \ + umulh x11, x3, x10; \ + adc x2, x2, x11; \ + mul x11, x4, x5; \ + adds x17, x17, x11; \ + mul x11, x4, x6; \ + adcs x19, x19, x11; \ + mul x11, x4, x7; \ + adcs x20, x20, x11; \ + mul x11, x4, x8; \ + adcs x21, x21, x11; \ + mul x11, x4, x9; \ + adcs x22, x22, x11; \ + mul x11, x4, x10; \ + adcs x2, x2, x11; \ + cset x1, cs; \ + umulh x11, x4, x5; \ + adds x19, x19, x11; \ + umulh x11, x4, x6; \ + adcs x20, x20, x11; \ + umulh x11, x4, x7; \ + adcs x21, x21, x11; \ + umulh x11, x4, x8; \ + adcs x22, x22, x11; \ + umulh x11, x4, x9; \ + adcs x2, x2, x11; \ + umulh x11, x4, x10; \ + adc x1, x1, x11; \ + lsl x7, x12, #32; \ + add x12, x7, x12; \ + mov x7, #0xffffffff00000001; \ + umulh x7, x7, x12; \ + mov x6, #0xffffffff; \ + mul x5, x6, x12; \ + umulh x6, x6, x12; \ + adds x7, x7, x5; \ + adcs x6, x6, x12; \ + adc x5, xzr, xzr; \ + subs x13, x13, x7; \ + sbcs x14, x14, x6; \ + sbcs x15, x15, x5; \ + sbcs x16, x16, xzr; \ + sbcs x17, x17, xzr; \ + sbc x12, x12, xzr; \ + lsl x7, x13, #32; \ + add x13, x7, x13; \ + mov x7, #0xffffffff00000001; \ + umulh x7, x7, x13; \ + mov x6, #0xffffffff; \ + mul x5, x6, x13; \ + umulh x6, x6, x13; \ + adds x7, x7, x5; \ + adcs x6, x6, x13; \ + adc x5, xzr, xzr; \ + subs x14, x14, x7; \ + sbcs x15, x15, x6; \ + sbcs x16, x16, x5; \ + sbcs x17, x17, xzr; \ + sbcs x12, x12, xzr; \ + sbc x13, x13, xzr; \ + lsl x7, x14, #32; \ + add x14, x7, x14; \ + mov x7, #0xffffffff00000001; \ + umulh x7, x7, x14; \ + mov x6, #0xffffffff; \ + mul x5, x6, x14; \ + umulh x6, x6, x14; \ + adds x7, x7, x5; \ + adcs x6, x6, x14; \ + adc x5, xzr, xzr; \ + subs x15, x15, x7; \ + sbcs x16, x16, x6; \ + sbcs x17, x17, x5; \ + sbcs x12, x12, xzr; \ + sbcs x13, x13, xzr; \ + sbc x14, x14, xzr; \ + lsl x7, x15, #32; \ + add x15, x7, x15; \ + mov x7, #0xffffffff00000001; \ + umulh x7, x7, x15; \ + mov x6, #0xffffffff; \ + mul x5, x6, x15; \ + umulh x6, x6, x15; \ + adds x7, x7, x5; \ + adcs x6, x6, x15; \ + adc x5, xzr, xzr; \ + subs x16, x16, x7; \ + sbcs x17, x17, x6; \ + sbcs x12, x12, x5; \ + sbcs x13, x13, xzr; \ + sbcs x14, x14, xzr; \ + sbc x15, x15, xzr; \ + lsl x7, x16, #32; \ + add x16, x7, x16; \ + mov x7, #0xffffffff00000001; \ + umulh x7, x7, x16; \ + mov x6, #0xffffffff; \ + mul x5, x6, x16; \ + umulh x6, x6, x16; \ + adds x7, x7, x5; \ + adcs x6, x6, x16; \ + adc x5, xzr, xzr; \ + subs x17, x17, x7; \ + sbcs x12, x12, x6; \ + sbcs x13, x13, x5; \ + sbcs x14, x14, xzr; \ + sbcs x15, x15, xzr; \ + sbc x16, x16, xzr; \ + lsl x7, x17, #32; \ + add x17, x7, x17; \ + mov x7, #0xffffffff00000001; \ + umulh x7, x7, x17; \ + mov x6, #0xffffffff; \ + mul x5, x6, x17; \ + umulh x6, x6, x17; \ + adds x7, x7, x5; \ + adcs x6, x6, x17; \ + adc x5, xzr, xzr; \ + subs x12, x12, x7; \ + sbcs x13, x13, x6; \ + sbcs x14, x14, x5; \ + sbcs x15, x15, xzr; \ + sbcs x16, x16, xzr; \ + sbc x17, x17, xzr; \ + adds x12, x12, x19; \ + adcs x13, x13, x20; \ + adcs x14, x14, x21; \ + adcs x15, x15, x22; \ + adcs x16, x16, x2; \ + adcs x17, x17, x1; \ + adc x10, xzr, xzr; \ + mov x11, #0xffffffff00000001; \ + adds x19, x12, x11; \ + mov x11, #0xffffffff; \ + adcs x20, x13, x11; \ + mov x11, #0x1; \ + adcs x21, x14, x11; \ + adcs x22, x15, xzr; \ + adcs x2, x16, xzr; \ + adcs x1, x17, xzr; \ + adcs x10, x10, xzr; \ + csel x12, x12, x19, eq; \ + csel x13, x13, x20, eq; \ + csel x14, x14, x21, eq; \ + csel x15, x15, x22, eq; \ + csel x16, x16, x2, eq; \ + csel x17, x17, x1, eq; \ + stp x12, x13, [P0]; \ + stp x14, x15, [P0+16]; \ + stp x16, x17, [P0+32] + +// Corresponds exactly to bignum_montsqr_p384_alt + +#define montsqr_p384(P0,P1) \ + ldp x2, x3, [P1]; \ + mul x9, x2, x3; \ + umulh x10, x2, x3; \ + ldp x4, x5, [P1+16]; \ + mul x8, x2, x4; \ + adds x10, x10, x8; \ + mul x11, x2, x5; \ + mul x8, x3, x4; \ + adcs x11, x11, x8; \ + umulh x12, x2, x5; \ + mul x8, x3, x5; \ + adcs x12, x12, x8; \ + ldp x6, x7, [P1+32]; \ + mul x13, x2, x7; \ + mul x8, x3, x6; \ + adcs x13, x13, x8; \ + umulh x14, x2, x7; \ + mul x8, x3, x7; \ + adcs x14, x14, x8; \ + mul x15, x5, x6; \ + adcs x15, x15, xzr; \ + umulh x16, x5, x6; \ + adc x16, x16, xzr; \ + umulh x8, x2, x4; \ + adds x11, x11, x8; \ + umulh x8, x3, x4; \ + adcs x12, x12, x8; \ + umulh x8, x3, x5; \ + adcs x13, x13, x8; \ + umulh x8, x3, x6; \ + adcs x14, x14, x8; \ + umulh x8, x3, x7; \ + adcs x15, x15, x8; \ + adc x16, x16, xzr; \ + mul x8, x2, x6; \ + adds x12, x12, x8; \ + mul x8, x4, x5; \ + adcs x13, x13, x8; \ + mul x8, x4, x6; \ + adcs x14, x14, x8; \ + mul x8, x4, x7; \ + adcs x15, x15, x8; \ + mul x8, x5, x7; \ + adcs x16, x16, x8; \ + mul x17, x6, x7; \ + adcs x17, x17, xzr; \ + umulh x19, x6, x7; \ + adc x19, x19, xzr; \ + umulh x8, x2, x6; \ + adds x13, x13, x8; \ + umulh x8, x4, x5; \ + adcs x14, x14, x8; \ + umulh x8, x4, x6; \ + adcs x15, x15, x8; \ + umulh x8, x4, x7; \ + adcs x16, x16, x8; \ + umulh x8, x5, x7; \ + adcs x17, x17, x8; \ + adc x19, x19, xzr; \ + adds x9, x9, x9; \ + adcs x10, x10, x10; \ + adcs x11, x11, x11; \ + adcs x12, x12, x12; \ + adcs x13, x13, x13; \ + adcs x14, x14, x14; \ + adcs x15, x15, x15; \ + adcs x16, x16, x16; \ + adcs x17, x17, x17; \ + adcs x19, x19, x19; \ + cset x20, hs; \ + umulh x8, x2, x2; \ + mul x2, x2, x2; \ + adds x9, x9, x8; \ + mul x8, x3, x3; \ + adcs x10, x10, x8; \ + umulh x8, x3, x3; \ + adcs x11, x11, x8; \ + mul x8, x4, x4; \ + adcs x12, x12, x8; \ + umulh x8, x4, x4; \ + adcs x13, x13, x8; \ + mul x8, x5, x5; \ + adcs x14, x14, x8; \ + umulh x8, x5, x5; \ + adcs x15, x15, x8; \ + mul x8, x6, x6; \ + adcs x16, x16, x8; \ + umulh x8, x6, x6; \ + adcs x17, x17, x8; \ + mul x8, x7, x7; \ + adcs x19, x19, x8; \ + umulh x8, x7, x7; \ + adc x20, x20, x8; \ + lsl x5, x2, #32; \ + add x2, x5, x2; \ + mov x5, #-4294967295; \ + umulh x5, x5, x2; \ + mov x4, #4294967295; \ + mul x3, x4, x2; \ + umulh x4, x4, x2; \ + adds x5, x5, x3; \ + adcs x4, x4, x2; \ + adc x3, xzr, xzr; \ + subs x9, x9, x5; \ + sbcs x10, x10, x4; \ + sbcs x11, x11, x3; \ + sbcs x12, x12, xzr; \ + sbcs x13, x13, xzr; \ + sbc x2, x2, xzr; \ + lsl x5, x9, #32; \ + add x9, x5, x9; \ + mov x5, #-4294967295; \ + umulh x5, x5, x9; \ + mov x4, #4294967295; \ + mul x3, x4, x9; \ + umulh x4, x4, x9; \ + adds x5, x5, x3; \ + adcs x4, x4, x9; \ + adc x3, xzr, xzr; \ + subs x10, x10, x5; \ + sbcs x11, x11, x4; \ + sbcs x12, x12, x3; \ + sbcs x13, x13, xzr; \ + sbcs x2, x2, xzr; \ + sbc x9, x9, xzr; \ + lsl x5, x10, #32; \ + add x10, x5, x10; \ + mov x5, #-4294967295; \ + umulh x5, x5, x10; \ + mov x4, #4294967295; \ + mul x3, x4, x10; \ + umulh x4, x4, x10; \ + adds x5, x5, x3; \ + adcs x4, x4, x10; \ + adc x3, xzr, xzr; \ + subs x11, x11, x5; \ + sbcs x12, x12, x4; \ + sbcs x13, x13, x3; \ + sbcs x2, x2, xzr; \ + sbcs x9, x9, xzr; \ + sbc x10, x10, xzr; \ + lsl x5, x11, #32; \ + add x11, x5, x11; \ + mov x5, #-4294967295; \ + umulh x5, x5, x11; \ + mov x4, #4294967295; \ + mul x3, x4, x11; \ + umulh x4, x4, x11; \ + adds x5, x5, x3; \ + adcs x4, x4, x11; \ + adc x3, xzr, xzr; \ + subs x12, x12, x5; \ + sbcs x13, x13, x4; \ + sbcs x2, x2, x3; \ + sbcs x9, x9, xzr; \ + sbcs x10, x10, xzr; \ + sbc x11, x11, xzr; \ + lsl x5, x12, #32; \ + add x12, x5, x12; \ + mov x5, #-4294967295; \ + umulh x5, x5, x12; \ + mov x4, #4294967295; \ + mul x3, x4, x12; \ + umulh x4, x4, x12; \ + adds x5, x5, x3; \ + adcs x4, x4, x12; \ + adc x3, xzr, xzr; \ + subs x13, x13, x5; \ + sbcs x2, x2, x4; \ + sbcs x9, x9, x3; \ + sbcs x10, x10, xzr; \ + sbcs x11, x11, xzr; \ + sbc x12, x12, xzr; \ + lsl x5, x13, #32; \ + add x13, x5, x13; \ + mov x5, #-4294967295; \ + umulh x5, x5, x13; \ + mov x4, #4294967295; \ + mul x3, x4, x13; \ + umulh x4, x4, x13; \ + adds x5, x5, x3; \ + adcs x4, x4, x13; \ + adc x3, xzr, xzr; \ + subs x2, x2, x5; \ + sbcs x9, x9, x4; \ + sbcs x10, x10, x3; \ + sbcs x11, x11, xzr; \ + sbcs x12, x12, xzr; \ + sbc x13, x13, xzr; \ + adds x2, x2, x14; \ + adcs x9, x9, x15; \ + adcs x10, x10, x16; \ + adcs x11, x11, x17; \ + adcs x12, x12, x19; \ + adcs x13, x13, x20; \ + adc x6, xzr, xzr; \ + mov x8, #-4294967295; \ + adds x14, x2, x8; \ + mov x8, #4294967295; \ + adcs x15, x9, x8; \ + mov x8, #1; \ + adcs x16, x10, x8; \ + adcs x17, x11, xzr; \ + adcs x19, x12, xzr; \ + adcs x20, x13, xzr; \ + adcs x6, x6, xzr; \ + csel x2, x2, x14, eq; \ + csel x9, x9, x15, eq; \ + csel x10, x10, x16, eq; \ + csel x11, x11, x17, eq; \ + csel x12, x12, x19, eq; \ + csel x13, x13, x20, eq; \ + stp x2, x9, [P0]; \ + stp x10, x11, [P0+16]; \ + stp x12, x13, [P0+32] + +// Almost-Montgomery variant which we use when an input to other muls +// with the other argument fully reduced (which is always safe). In +// fact, with the Karatsuba-based Montgomery mul here, we don't even +// *need* the restriction that the other argument is reduced. + +#define amontsqr_p384(P0,P1) \ + ldp x2, x3, [P1]; \ + mul x9, x2, x3; \ + umulh x10, x2, x3; \ + ldp x4, x5, [P1+16]; \ + mul x8, x2, x4; \ + adds x10, x10, x8; \ + mul x11, x2, x5; \ + mul x8, x3, x4; \ + adcs x11, x11, x8; \ + umulh x12, x2, x5; \ + mul x8, x3, x5; \ + adcs x12, x12, x8; \ + ldp x6, x7, [P1+32]; \ + mul x13, x2, x7; \ + mul x8, x3, x6; \ + adcs x13, x13, x8; \ + umulh x14, x2, x7; \ + mul x8, x3, x7; \ + adcs x14, x14, x8; \ + mul x15, x5, x6; \ + adcs x15, x15, xzr; \ + umulh x16, x5, x6; \ + adc x16, x16, xzr; \ + umulh x8, x2, x4; \ + adds x11, x11, x8; \ + umulh x8, x3, x4; \ + adcs x12, x12, x8; \ + umulh x8, x3, x5; \ + adcs x13, x13, x8; \ + umulh x8, x3, x6; \ + adcs x14, x14, x8; \ + umulh x8, x3, x7; \ + adcs x15, x15, x8; \ + adc x16, x16, xzr; \ + mul x8, x2, x6; \ + adds x12, x12, x8; \ + mul x8, x4, x5; \ + adcs x13, x13, x8; \ + mul x8, x4, x6; \ + adcs x14, x14, x8; \ + mul x8, x4, x7; \ + adcs x15, x15, x8; \ + mul x8, x5, x7; \ + adcs x16, x16, x8; \ + mul x17, x6, x7; \ + adcs x17, x17, xzr; \ + umulh x19, x6, x7; \ + adc x19, x19, xzr; \ + umulh x8, x2, x6; \ + adds x13, x13, x8; \ + umulh x8, x4, x5; \ + adcs x14, x14, x8; \ + umulh x8, x4, x6; \ + adcs x15, x15, x8; \ + umulh x8, x4, x7; \ + adcs x16, x16, x8; \ + umulh x8, x5, x7; \ + adcs x17, x17, x8; \ + adc x19, x19, xzr; \ + adds x9, x9, x9; \ + adcs x10, x10, x10; \ + adcs x11, x11, x11; \ + adcs x12, x12, x12; \ + adcs x13, x13, x13; \ + adcs x14, x14, x14; \ + adcs x15, x15, x15; \ + adcs x16, x16, x16; \ + adcs x17, x17, x17; \ + adcs x19, x19, x19; \ + cset x20, hs; \ + umulh x8, x2, x2; \ + mul x2, x2, x2; \ + adds x9, x9, x8; \ + mul x8, x3, x3; \ + adcs x10, x10, x8; \ + umulh x8, x3, x3; \ + adcs x11, x11, x8; \ + mul x8, x4, x4; \ + adcs x12, x12, x8; \ + umulh x8, x4, x4; \ + adcs x13, x13, x8; \ + mul x8, x5, x5; \ + adcs x14, x14, x8; \ + umulh x8, x5, x5; \ + adcs x15, x15, x8; \ + mul x8, x6, x6; \ + adcs x16, x16, x8; \ + umulh x8, x6, x6; \ + adcs x17, x17, x8; \ + mul x8, x7, x7; \ + adcs x19, x19, x8; \ + umulh x8, x7, x7; \ + adc x20, x20, x8; \ + lsl x5, x2, #32; \ + add x2, x5, x2; \ + mov x5, #-4294967295; \ + umulh x5, x5, x2; \ + mov x4, #4294967295; \ + mul x3, x4, x2; \ + umulh x4, x4, x2; \ + adds x5, x5, x3; \ + adcs x4, x4, x2; \ + adc x3, xzr, xzr; \ + subs x9, x9, x5; \ + sbcs x10, x10, x4; \ + sbcs x11, x11, x3; \ + sbcs x12, x12, xzr; \ + sbcs x13, x13, xzr; \ + sbc x2, x2, xzr; \ + lsl x5, x9, #32; \ + add x9, x5, x9; \ + mov x5, #-4294967295; \ + umulh x5, x5, x9; \ + mov x4, #4294967295; \ + mul x3, x4, x9; \ + umulh x4, x4, x9; \ + adds x5, x5, x3; \ + adcs x4, x4, x9; \ + adc x3, xzr, xzr; \ + subs x10, x10, x5; \ + sbcs x11, x11, x4; \ + sbcs x12, x12, x3; \ + sbcs x13, x13, xzr; \ + sbcs x2, x2, xzr; \ + sbc x9, x9, xzr; \ + lsl x5, x10, #32; \ + add x10, x5, x10; \ + mov x5, #-4294967295; \ + umulh x5, x5, x10; \ + mov x4, #4294967295; \ + mul x3, x4, x10; \ + umulh x4, x4, x10; \ + adds x5, x5, x3; \ + adcs x4, x4, x10; \ + adc x3, xzr, xzr; \ + subs x11, x11, x5; \ + sbcs x12, x12, x4; \ + sbcs x13, x13, x3; \ + sbcs x2, x2, xzr; \ + sbcs x9, x9, xzr; \ + sbc x10, x10, xzr; \ + lsl x5, x11, #32; \ + add x11, x5, x11; \ + mov x5, #-4294967295; \ + umulh x5, x5, x11; \ + mov x4, #4294967295; \ + mul x3, x4, x11; \ + umulh x4, x4, x11; \ + adds x5, x5, x3; \ + adcs x4, x4, x11; \ + adc x3, xzr, xzr; \ + subs x12, x12, x5; \ + sbcs x13, x13, x4; \ + sbcs x2, x2, x3; \ + sbcs x9, x9, xzr; \ + sbcs x10, x10, xzr; \ + sbc x11, x11, xzr; \ + lsl x5, x12, #32; \ + add x12, x5, x12; \ + mov x5, #-4294967295; \ + umulh x5, x5, x12; \ + mov x4, #4294967295; \ + mul x3, x4, x12; \ + umulh x4, x4, x12; \ + adds x5, x5, x3; \ + adcs x4, x4, x12; \ + adc x3, xzr, xzr; \ + subs x13, x13, x5; \ + sbcs x2, x2, x4; \ + sbcs x9, x9, x3; \ + sbcs x10, x10, xzr; \ + sbcs x11, x11, xzr; \ + sbc x12, x12, xzr; \ + lsl x5, x13, #32; \ + add x13, x5, x13; \ + mov x5, #-4294967295; \ + umulh x5, x5, x13; \ + mov x4, #4294967295; \ + mul x3, x4, x13; \ + umulh x4, x4, x13; \ + adds x5, x5, x3; \ + adcs x4, x4, x13; \ + adc x3, xzr, xzr; \ + subs x2, x2, x5; \ + sbcs x9, x9, x4; \ + sbcs x10, x10, x3; \ + sbcs x11, x11, xzr; \ + sbcs x12, x12, xzr; \ + sbc x13, x13, xzr; \ + adds x2, x2, x14; \ + adcs x9, x9, x15; \ + adcs x10, x10, x16; \ + adcs x11, x11, x17; \ + adcs x12, x12, x19; \ + adcs x13, x13, x20; \ + mov x14, #-4294967295; \ + mov x15, #4294967295; \ + csel x14, x14, xzr, cs; \ + csel x15, x15, xzr, cs; \ + cset x16, cs; \ + adds x2, x2, x14; \ + adcs x9, x9, x15; \ + adcs x10, x10, x16; \ + adcs x11, x11, xzr; \ + adcs x12, x12, xzr; \ + adc x13, x13, xzr; \ + stp x2, x9, [P0]; \ + stp x10, x11, [P0+16]; \ + stp x12, x13, [P0+32] + +// Corresponds exactly to bignum_sub_p384 + +#define sub_p384(P0,P1,P2) \ + ldp x5, x6, [P1]; \ + ldp x4, x3, [P2]; \ + subs x5, x5, x4; \ + sbcs x6, x6, x3; \ + ldp x7, x8, [P1+16]; \ + ldp x4, x3, [P2+16]; \ + sbcs x7, x7, x4; \ + sbcs x8, x8, x3; \ + ldp x9, x10, [P1+32]; \ + ldp x4, x3, [P2+32]; \ + sbcs x9, x9, x4; \ + sbcs x10, x10, x3; \ + csetm x3, lo; \ + mov x4, #4294967295; \ + and x4, x4, x3; \ + adds x5, x5, x4; \ + eor x4, x4, x3; \ + adcs x6, x6, x4; \ + mov x4, #-2; \ + and x4, x4, x3; \ + adcs x7, x7, x4; \ + adcs x8, x8, x3; \ + adcs x9, x9, x3; \ + adc x10, x10, x3; \ + stp x5, x6, [P0]; \ + stp x7, x8, [P0+16]; \ + stp x9, x10, [P0+32] + +S2N_BN_SYMBOL(p384_montjadd): + +// Save regs and make room on stack for temporary variables + + stp x19, x20, [sp, #-16]! + stp x21, x22, [sp, #-16]! + stp x23, x24, [sp, #-16]! + stp x25, x26, [sp, #-16]! + sub sp, sp, NSPACE + +// Move the input arguments to stable places + + mov input_z, x0 + mov input_x, x1 + mov input_y, x2 + +// Main code, just a sequence of basic field operations +// 8 * multiply + 3 * square + 7 * subtract + + amontsqr_p384(z1sq,z_1) + amontsqr_p384(z2sq,z_2) + + montmul_p384(y1a,z_2,y_1) + montmul_p384(y2a,z_1,y_2) + + montmul_p384(x2a,z1sq,x_2) + montmul_p384(x1a,z2sq,x_1) + montmul_p384(y2a,z1sq,y2a) + montmul_p384(y1a,z2sq,y1a) + + sub_p384(xd,x2a,x1a) + sub_p384(yd,y2a,y1a) + + amontsqr_p384(zz,xd) + montsqr_p384(ww,yd) + + montmul_p384(zzx1,zz,x1a) + montmul_p384(zzx2,zz,x2a) + + sub_p384(x_3,ww,zzx1) + sub_p384(t1,zzx2,zzx1) + + montmul_p384(xd,xd,z_1) + + sub_p384(x_3,x_3,zzx2) + + sub_p384(t2,zzx1,x_3) + + montmul_p384(t1,t1,y1a) + montmul_p384(z_3,xd,z_2) + montmul_p384(t2,yd,t2) + + sub_p384(y_3,t2,t1) + +// Restore stack and registers + + add sp, sp, NSPACE + + ldp x25, x26, [sp], 16 + ldp x23, x24, [sp], 16 + ldp x21, x22, [sp], 16 + ldp x19, x20, [sp], 16 + + ret + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack, "", %progbits +#endif diff --git a/arm/p384/p384_montjdouble.S b/arm/p384/p384_montjdouble.S new file mode 100644 index 0000000000..8fa2ad3234 --- /dev/null +++ b/arm/p384/p384_montjdouble.S @@ -0,0 +1,963 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +// ---------------------------------------------------------------------------- +// Point doubling on NIST curve P-384 in Montgomery-Jacobian coordinates +// +// extern void p384_montjdouble +// (uint64_t p3[static 18],uint64_t p1[static 18]); +// +// Does p3 := 2 * p1 where all points are regarded as Jacobian triples with +// each coordinate in the Montgomery domain, i.e. x' = (2^384 * x) mod p_384. +// A Jacobian triple (x',y',z') represents affine point (x/z^2,y/z^3). +// +// Standard ARM ABI: X0 = p3, X1 = p1 +// ---------------------------------------------------------------------------- +#include "_internal_s2n_bignum.h" + + S2N_BN_SYM_VISIBILITY_DIRECTIVE(p384_montjdouble) + S2N_BN_SYM_PRIVACY_DIRECTIVE(p384_montjdouble) + .text + .balign 4 + +// Size of individual field elements + +#define NUMSIZE 48 + +// Stable homes for input arguments during main code sequence + +#define input_z x23 +#define input_x x24 + +// Pointer-offset pairs for inputs and outputs + +#define x_1 input_x, #0 +#define y_1 input_x, #NUMSIZE +#define z_1 input_x, #(2*NUMSIZE) + +#define x_3 input_z, #0 +#define y_3 input_z, #NUMSIZE +#define z_3 input_z, #(2*NUMSIZE) + +// Pointer-offset pairs for temporaries, with some aliasing +// NSPACE is the total stack needed for these temporaries + +#define z2 sp, #(NUMSIZE*0) +#define y2 sp, #(NUMSIZE*1) +#define x2p sp, #(NUMSIZE*2) +#define xy2 sp, #(NUMSIZE*3) + +#define y4 sp, #(NUMSIZE*4) +#define t2 sp, #(NUMSIZE*4) + +#define dx2 sp, #(NUMSIZE*5) +#define t1 sp, #(NUMSIZE*5) + +#define d sp, #(NUMSIZE*6) +#define x4p sp, #(NUMSIZE*6) + +#define NSPACE (NUMSIZE*7) + +// Corresponds exactly to bignum_montmul_p384_alt + +#define montmul_p384(P0,P1,P2) \ + ldp x3, x4, [P1]; \ + ldp x5, x6, [P2]; \ + mul x12, x3, x5; \ + umulh x13, x3, x5; \ + mul x11, x3, x6; \ + umulh x14, x3, x6; \ + adds x13, x13, x11; \ + ldp x7, x8, [P2+16]; \ + mul x11, x3, x7; \ + umulh x15, x3, x7; \ + adcs x14, x14, x11; \ + mul x11, x3, x8; \ + umulh x16, x3, x8; \ + adcs x15, x15, x11; \ + ldp x9, x10, [P2+32]; \ + mul x11, x3, x9; \ + umulh x17, x3, x9; \ + adcs x16, x16, x11; \ + mul x11, x3, x10; \ + umulh x19, x3, x10; \ + adcs x17, x17, x11; \ + adc x19, x19, xzr; \ + mul x11, x4, x5; \ + adds x13, x13, x11; \ + mul x11, x4, x6; \ + adcs x14, x14, x11; \ + mul x11, x4, x7; \ + adcs x15, x15, x11; \ + mul x11, x4, x8; \ + adcs x16, x16, x11; \ + mul x11, x4, x9; \ + adcs x17, x17, x11; \ + mul x11, x4, x10; \ + adcs x19, x19, x11; \ + cset x20, cs; \ + umulh x11, x4, x5; \ + adds x14, x14, x11; \ + umulh x11, x4, x6; \ + adcs x15, x15, x11; \ + umulh x11, x4, x7; \ + adcs x16, x16, x11; \ + umulh x11, x4, x8; \ + adcs x17, x17, x11; \ + umulh x11, x4, x9; \ + adcs x19, x19, x11; \ + umulh x11, x4, x10; \ + adc x20, x20, x11; \ + ldp x3, x4, [P1+16]; \ + mul x11, x3, x5; \ + adds x14, x14, x11; \ + mul x11, x3, x6; \ + adcs x15, x15, x11; \ + mul x11, x3, x7; \ + adcs x16, x16, x11; \ + mul x11, x3, x8; \ + adcs x17, x17, x11; \ + mul x11, x3, x9; \ + adcs x19, x19, x11; \ + mul x11, x3, x10; \ + adcs x20, x20, x11; \ + cset x21, cs; \ + umulh x11, x3, x5; \ + adds x15, x15, x11; \ + umulh x11, x3, x6; \ + adcs x16, x16, x11; \ + umulh x11, x3, x7; \ + adcs x17, x17, x11; \ + umulh x11, x3, x8; \ + adcs x19, x19, x11; \ + umulh x11, x3, x9; \ + adcs x20, x20, x11; \ + umulh x11, x3, x10; \ + adc x21, x21, x11; \ + mul x11, x4, x5; \ + adds x15, x15, x11; \ + mul x11, x4, x6; \ + adcs x16, x16, x11; \ + mul x11, x4, x7; \ + adcs x17, x17, x11; \ + mul x11, x4, x8; \ + adcs x19, x19, x11; \ + mul x11, x4, x9; \ + adcs x20, x20, x11; \ + mul x11, x4, x10; \ + adcs x21, x21, x11; \ + cset x22, cs; \ + umulh x11, x4, x5; \ + adds x16, x16, x11; \ + umulh x11, x4, x6; \ + adcs x17, x17, x11; \ + umulh x11, x4, x7; \ + adcs x19, x19, x11; \ + umulh x11, x4, x8; \ + adcs x20, x20, x11; \ + umulh x11, x4, x9; \ + adcs x21, x21, x11; \ + umulh x11, x4, x10; \ + adc x22, x22, x11; \ + ldp x3, x4, [P1+32]; \ + mul x11, x3, x5; \ + adds x16, x16, x11; \ + mul x11, x3, x6; \ + adcs x17, x17, x11; \ + mul x11, x3, x7; \ + adcs x19, x19, x11; \ + mul x11, x3, x8; \ + adcs x20, x20, x11; \ + mul x11, x3, x9; \ + adcs x21, x21, x11; \ + mul x11, x3, x10; \ + adcs x22, x22, x11; \ + cset x2, cs; \ + umulh x11, x3, x5; \ + adds x17, x17, x11; \ + umulh x11, x3, x6; \ + adcs x19, x19, x11; \ + umulh x11, x3, x7; \ + adcs x20, x20, x11; \ + umulh x11, x3, x8; \ + adcs x21, x21, x11; \ + umulh x11, x3, x9; \ + adcs x22, x22, x11; \ + umulh x11, x3, x10; \ + adc x2, x2, x11; \ + mul x11, x4, x5; \ + adds x17, x17, x11; \ + mul x11, x4, x6; \ + adcs x19, x19, x11; \ + mul x11, x4, x7; \ + adcs x20, x20, x11; \ + mul x11, x4, x8; \ + adcs x21, x21, x11; \ + mul x11, x4, x9; \ + adcs x22, x22, x11; \ + mul x11, x4, x10; \ + adcs x2, x2, x11; \ + cset x1, cs; \ + umulh x11, x4, x5; \ + adds x19, x19, x11; \ + umulh x11, x4, x6; \ + adcs x20, x20, x11; \ + umulh x11, x4, x7; \ + adcs x21, x21, x11; \ + umulh x11, x4, x8; \ + adcs x22, x22, x11; \ + umulh x11, x4, x9; \ + adcs x2, x2, x11; \ + umulh x11, x4, x10; \ + adc x1, x1, x11; \ + lsl x7, x12, #32; \ + add x12, x7, x12; \ + mov x7, #0xffffffff00000001; \ + umulh x7, x7, x12; \ + mov x6, #0xffffffff; \ + mul x5, x6, x12; \ + umulh x6, x6, x12; \ + adds x7, x7, x5; \ + adcs x6, x6, x12; \ + adc x5, xzr, xzr; \ + subs x13, x13, x7; \ + sbcs x14, x14, x6; \ + sbcs x15, x15, x5; \ + sbcs x16, x16, xzr; \ + sbcs x17, x17, xzr; \ + sbc x12, x12, xzr; \ + lsl x7, x13, #32; \ + add x13, x7, x13; \ + mov x7, #0xffffffff00000001; \ + umulh x7, x7, x13; \ + mov x6, #0xffffffff; \ + mul x5, x6, x13; \ + umulh x6, x6, x13; \ + adds x7, x7, x5; \ + adcs x6, x6, x13; \ + adc x5, xzr, xzr; \ + subs x14, x14, x7; \ + sbcs x15, x15, x6; \ + sbcs x16, x16, x5; \ + sbcs x17, x17, xzr; \ + sbcs x12, x12, xzr; \ + sbc x13, x13, xzr; \ + lsl x7, x14, #32; \ + add x14, x7, x14; \ + mov x7, #0xffffffff00000001; \ + umulh x7, x7, x14; \ + mov x6, #0xffffffff; \ + mul x5, x6, x14; \ + umulh x6, x6, x14; \ + adds x7, x7, x5; \ + adcs x6, x6, x14; \ + adc x5, xzr, xzr; \ + subs x15, x15, x7; \ + sbcs x16, x16, x6; \ + sbcs x17, x17, x5; \ + sbcs x12, x12, xzr; \ + sbcs x13, x13, xzr; \ + sbc x14, x14, xzr; \ + lsl x7, x15, #32; \ + add x15, x7, x15; \ + mov x7, #0xffffffff00000001; \ + umulh x7, x7, x15; \ + mov x6, #0xffffffff; \ + mul x5, x6, x15; \ + umulh x6, x6, x15; \ + adds x7, x7, x5; \ + adcs x6, x6, x15; \ + adc x5, xzr, xzr; \ + subs x16, x16, x7; \ + sbcs x17, x17, x6; \ + sbcs x12, x12, x5; \ + sbcs x13, x13, xzr; \ + sbcs x14, x14, xzr; \ + sbc x15, x15, xzr; \ + lsl x7, x16, #32; \ + add x16, x7, x16; \ + mov x7, #0xffffffff00000001; \ + umulh x7, x7, x16; \ + mov x6, #0xffffffff; \ + mul x5, x6, x16; \ + umulh x6, x6, x16; \ + adds x7, x7, x5; \ + adcs x6, x6, x16; \ + adc x5, xzr, xzr; \ + subs x17, x17, x7; \ + sbcs x12, x12, x6; \ + sbcs x13, x13, x5; \ + sbcs x14, x14, xzr; \ + sbcs x15, x15, xzr; \ + sbc x16, x16, xzr; \ + lsl x7, x17, #32; \ + add x17, x7, x17; \ + mov x7, #0xffffffff00000001; \ + umulh x7, x7, x17; \ + mov x6, #0xffffffff; \ + mul x5, x6, x17; \ + umulh x6, x6, x17; \ + adds x7, x7, x5; \ + adcs x6, x6, x17; \ + adc x5, xzr, xzr; \ + subs x12, x12, x7; \ + sbcs x13, x13, x6; \ + sbcs x14, x14, x5; \ + sbcs x15, x15, xzr; \ + sbcs x16, x16, xzr; \ + sbc x17, x17, xzr; \ + adds x12, x12, x19; \ + adcs x13, x13, x20; \ + adcs x14, x14, x21; \ + adcs x15, x15, x22; \ + adcs x16, x16, x2; \ + adcs x17, x17, x1; \ + adc x10, xzr, xzr; \ + mov x11, #0xffffffff00000001; \ + adds x19, x12, x11; \ + mov x11, #0xffffffff; \ + adcs x20, x13, x11; \ + mov x11, #0x1; \ + adcs x21, x14, x11; \ + adcs x22, x15, xzr; \ + adcs x2, x16, xzr; \ + adcs x1, x17, xzr; \ + adcs x10, x10, xzr; \ + csel x12, x12, x19, eq; \ + csel x13, x13, x20, eq; \ + csel x14, x14, x21, eq; \ + csel x15, x15, x22, eq; \ + csel x16, x16, x2, eq; \ + csel x17, x17, x1, eq; \ + stp x12, x13, [P0]; \ + stp x14, x15, [P0+16]; \ + stp x16, x17, [P0+32] + +// Corresponds exactly to bignum_montsqr_p384_alt + +#define montsqr_p384(P0,P1) \ + ldp x2, x3, [P1]; \ + mul x9, x2, x3; \ + umulh x10, x2, x3; \ + ldp x4, x5, [P1+16]; \ + mul x8, x2, x4; \ + adds x10, x10, x8; \ + mul x11, x2, x5; \ + mul x8, x3, x4; \ + adcs x11, x11, x8; \ + umulh x12, x2, x5; \ + mul x8, x3, x5; \ + adcs x12, x12, x8; \ + ldp x6, x7, [P1+32]; \ + mul x13, x2, x7; \ + mul x8, x3, x6; \ + adcs x13, x13, x8; \ + umulh x14, x2, x7; \ + mul x8, x3, x7; \ + adcs x14, x14, x8; \ + mul x15, x5, x6; \ + adcs x15, x15, xzr; \ + umulh x16, x5, x6; \ + adc x16, x16, xzr; \ + umulh x8, x2, x4; \ + adds x11, x11, x8; \ + umulh x8, x3, x4; \ + adcs x12, x12, x8; \ + umulh x8, x3, x5; \ + adcs x13, x13, x8; \ + umulh x8, x3, x6; \ + adcs x14, x14, x8; \ + umulh x8, x3, x7; \ + adcs x15, x15, x8; \ + adc x16, x16, xzr; \ + mul x8, x2, x6; \ + adds x12, x12, x8; \ + mul x8, x4, x5; \ + adcs x13, x13, x8; \ + mul x8, x4, x6; \ + adcs x14, x14, x8; \ + mul x8, x4, x7; \ + adcs x15, x15, x8; \ + mul x8, x5, x7; \ + adcs x16, x16, x8; \ + mul x17, x6, x7; \ + adcs x17, x17, xzr; \ + umulh x19, x6, x7; \ + adc x19, x19, xzr; \ + umulh x8, x2, x6; \ + adds x13, x13, x8; \ + umulh x8, x4, x5; \ + adcs x14, x14, x8; \ + umulh x8, x4, x6; \ + adcs x15, x15, x8; \ + umulh x8, x4, x7; \ + adcs x16, x16, x8; \ + umulh x8, x5, x7; \ + adcs x17, x17, x8; \ + adc x19, x19, xzr; \ + adds x9, x9, x9; \ + adcs x10, x10, x10; \ + adcs x11, x11, x11; \ + adcs x12, x12, x12; \ + adcs x13, x13, x13; \ + adcs x14, x14, x14; \ + adcs x15, x15, x15; \ + adcs x16, x16, x16; \ + adcs x17, x17, x17; \ + adcs x19, x19, x19; \ + cset x20, hs; \ + umulh x8, x2, x2; \ + mul x2, x2, x2; \ + adds x9, x9, x8; \ + mul x8, x3, x3; \ + adcs x10, x10, x8; \ + umulh x8, x3, x3; \ + adcs x11, x11, x8; \ + mul x8, x4, x4; \ + adcs x12, x12, x8; \ + umulh x8, x4, x4; \ + adcs x13, x13, x8; \ + mul x8, x5, x5; \ + adcs x14, x14, x8; \ + umulh x8, x5, x5; \ + adcs x15, x15, x8; \ + mul x8, x6, x6; \ + adcs x16, x16, x8; \ + umulh x8, x6, x6; \ + adcs x17, x17, x8; \ + mul x8, x7, x7; \ + adcs x19, x19, x8; \ + umulh x8, x7, x7; \ + adc x20, x20, x8; \ + lsl x5, x2, #32; \ + add x2, x5, x2; \ + mov x5, #-4294967295; \ + umulh x5, x5, x2; \ + mov x4, #4294967295; \ + mul x3, x4, x2; \ + umulh x4, x4, x2; \ + adds x5, x5, x3; \ + adcs x4, x4, x2; \ + adc x3, xzr, xzr; \ + subs x9, x9, x5; \ + sbcs x10, x10, x4; \ + sbcs x11, x11, x3; \ + sbcs x12, x12, xzr; \ + sbcs x13, x13, xzr; \ + sbc x2, x2, xzr; \ + lsl x5, x9, #32; \ + add x9, x5, x9; \ + mov x5, #-4294967295; \ + umulh x5, x5, x9; \ + mov x4, #4294967295; \ + mul x3, x4, x9; \ + umulh x4, x4, x9; \ + adds x5, x5, x3; \ + adcs x4, x4, x9; \ + adc x3, xzr, xzr; \ + subs x10, x10, x5; \ + sbcs x11, x11, x4; \ + sbcs x12, x12, x3; \ + sbcs x13, x13, xzr; \ + sbcs x2, x2, xzr; \ + sbc x9, x9, xzr; \ + lsl x5, x10, #32; \ + add x10, x5, x10; \ + mov x5, #-4294967295; \ + umulh x5, x5, x10; \ + mov x4, #4294967295; \ + mul x3, x4, x10; \ + umulh x4, x4, x10; \ + adds x5, x5, x3; \ + adcs x4, x4, x10; \ + adc x3, xzr, xzr; \ + subs x11, x11, x5; \ + sbcs x12, x12, x4; \ + sbcs x13, x13, x3; \ + sbcs x2, x2, xzr; \ + sbcs x9, x9, xzr; \ + sbc x10, x10, xzr; \ + lsl x5, x11, #32; \ + add x11, x5, x11; \ + mov x5, #-4294967295; \ + umulh x5, x5, x11; \ + mov x4, #4294967295; \ + mul x3, x4, x11; \ + umulh x4, x4, x11; \ + adds x5, x5, x3; \ + adcs x4, x4, x11; \ + adc x3, xzr, xzr; \ + subs x12, x12, x5; \ + sbcs x13, x13, x4; \ + sbcs x2, x2, x3; \ + sbcs x9, x9, xzr; \ + sbcs x10, x10, xzr; \ + sbc x11, x11, xzr; \ + lsl x5, x12, #32; \ + add x12, x5, x12; \ + mov x5, #-4294967295; \ + umulh x5, x5, x12; \ + mov x4, #4294967295; \ + mul x3, x4, x12; \ + umulh x4, x4, x12; \ + adds x5, x5, x3; \ + adcs x4, x4, x12; \ + adc x3, xzr, xzr; \ + subs x13, x13, x5; \ + sbcs x2, x2, x4; \ + sbcs x9, x9, x3; \ + sbcs x10, x10, xzr; \ + sbcs x11, x11, xzr; \ + sbc x12, x12, xzr; \ + lsl x5, x13, #32; \ + add x13, x5, x13; \ + mov x5, #-4294967295; \ + umulh x5, x5, x13; \ + mov x4, #4294967295; \ + mul x3, x4, x13; \ + umulh x4, x4, x13; \ + adds x5, x5, x3; \ + adcs x4, x4, x13; \ + adc x3, xzr, xzr; \ + subs x2, x2, x5; \ + sbcs x9, x9, x4; \ + sbcs x10, x10, x3; \ + sbcs x11, x11, xzr; \ + sbcs x12, x12, xzr; \ + sbc x13, x13, xzr; \ + adds x2, x2, x14; \ + adcs x9, x9, x15; \ + adcs x10, x10, x16; \ + adcs x11, x11, x17; \ + adcs x12, x12, x19; \ + adcs x13, x13, x20; \ + adc x6, xzr, xzr; \ + mov x8, #-4294967295; \ + adds x14, x2, x8; \ + mov x8, #4294967295; \ + adcs x15, x9, x8; \ + mov x8, #1; \ + adcs x16, x10, x8; \ + adcs x17, x11, xzr; \ + adcs x19, x12, xzr; \ + adcs x20, x13, xzr; \ + adcs x6, x6, xzr; \ + csel x2, x2, x14, eq; \ + csel x9, x9, x15, eq; \ + csel x10, x10, x16, eq; \ + csel x11, x11, x17, eq; \ + csel x12, x12, x19, eq; \ + csel x13, x13, x20, eq; \ + stp x2, x9, [P0]; \ + stp x10, x11, [P0+16]; \ + stp x12, x13, [P0+32] + +// Corresponds exactly to bignum_sub_p384 + +#define sub_p384(P0,P1,P2) \ + ldp x5, x6, [P1]; \ + ldp x4, x3, [P2]; \ + subs x5, x5, x4; \ + sbcs x6, x6, x3; \ + ldp x7, x8, [P1+16]; \ + ldp x4, x3, [P2+16]; \ + sbcs x7, x7, x4; \ + sbcs x8, x8, x3; \ + ldp x9, x10, [P1+32]; \ + ldp x4, x3, [P2+32]; \ + sbcs x9, x9, x4; \ + sbcs x10, x10, x3; \ + csetm x3, lo; \ + mov x4, #4294967295; \ + and x4, x4, x3; \ + adds x5, x5, x4; \ + eor x4, x4, x3; \ + adcs x6, x6, x4; \ + mov x4, #-2; \ + and x4, x4, x3; \ + adcs x7, x7, x4; \ + adcs x8, x8, x3; \ + adcs x9, x9, x3; \ + adc x10, x10, x3; \ + stp x5, x6, [P0]; \ + stp x7, x8, [P0+16]; \ + stp x9, x10, [P0+32] + +// Corresponds exactly to bignum_add_p384 + +#define add_p384(P0,P1,P2) \ + ldp x5, x6, [P1]; \ + ldp x4, x3, [P2]; \ + adds x5, x5, x4; \ + adcs x6, x6, x3; \ + ldp x7, x8, [P1+16]; \ + ldp x4, x3, [P2+16]; \ + adcs x7, x7, x4; \ + adcs x8, x8, x3; \ + ldp x9, x10, [P1+32]; \ + ldp x4, x3, [P2+32]; \ + adcs x9, x9, x4; \ + adcs x10, x10, x3; \ + adc x3, xzr, xzr; \ + mov x4, #0xffffffff; \ + cmp x5, x4; \ + mov x4, #0xffffffff00000000; \ + sbcs xzr, x6, x4; \ + mov x4, #0xfffffffffffffffe; \ + sbcs xzr, x7, x4; \ + adcs xzr, x8, xzr; \ + adcs xzr, x9, xzr; \ + adcs xzr, x10, xzr; \ + adcs x3, x3, xzr; \ + csetm x3, ne; \ + mov x4, #0xffffffff; \ + and x4, x4, x3; \ + subs x5, x5, x4; \ + eor x4, x4, x3; \ + sbcs x6, x6, x4; \ + mov x4, #0xfffffffffffffffe; \ + and x4, x4, x3; \ + sbcs x7, x7, x4; \ + sbcs x8, x8, x3; \ + sbcs x9, x9, x3; \ + sbc x10, x10, x3; \ + stp x5, x6, [P0]; \ + stp x7, x8, [P0+16]; \ + stp x9, x10, [P0+32] + +// P0 = 4 * P1 - P2 + +#define cmsub41_p384(P0,P1,P2) \ + ldp x1, x2, [P1]; \ + ldp x3, x4, [P1+16]; \ + ldp x5, x6, [P1+32]; \ + lsl x0, x1, #2; \ + ldp x7, x8, [P2]; \ + subs x0, x0, x7; \ + extr x1, x2, x1, #62; \ + sbcs x1, x1, x8; \ + ldp x7, x8, [P2+16]; \ + extr x2, x3, x2, #62; \ + sbcs x2, x2, x7; \ + extr x3, x4, x3, #62; \ + sbcs x3, x3, x8; \ + extr x4, x5, x4, #62; \ + ldp x7, x8, [P2+32]; \ + sbcs x4, x4, x7; \ + extr x5, x6, x5, #62; \ + sbcs x5, x5, x8; \ + lsr x6, x6, #62; \ + adc x6, x6, xzr; \ + lsl x7, x6, #32; \ + subs x8, x6, x7; \ + sbc x7, x7, xzr; \ + adds x0, x0, x8; \ + adcs x1, x1, x7; \ + adcs x2, x2, x6; \ + adcs x3, x3, xzr; \ + adcs x4, x4, xzr; \ + adcs x5, x5, xzr; \ + csetm x8, cc; \ + mov x9, #0xffffffff; \ + and x9, x9, x8; \ + adds x0, x0, x9; \ + eor x9, x9, x8; \ + adcs x1, x1, x9; \ + mov x9, #0xfffffffffffffffe; \ + and x9, x9, x8; \ + adcs x2, x2, x9; \ + adcs x3, x3, x8; \ + adcs x4, x4, x8; \ + adc x5, x5, x8; \ + stp x0, x1, [P0]; \ + stp x2, x3, [P0+16]; \ + stp x4, x5, [P0+32] + +// P0 = C * P1 - D * P2 + +#define cmsub_p384(P0,C,P1,D,P2) \ + ldp x0, x1, [P2]; \ + mov x6, #0x00000000ffffffff; \ + subs x6, x6, x0; \ + mov x7, #0xffffffff00000000; \ + sbcs x7, x7, x1; \ + ldp x0, x1, [P2+16]; \ + mov x8, #0xfffffffffffffffe; \ + sbcs x8, x8, x0; \ + mov x13, #0xffffffffffffffff; \ + sbcs x9, x13, x1; \ + ldp x0, x1, [P2+32]; \ + sbcs x10, x13, x0; \ + sbc x11, x13, x1; \ + mov x12, D; \ + mul x0, x12, x6; \ + mul x1, x12, x7; \ + mul x2, x12, x8; \ + mul x3, x12, x9; \ + mul x4, x12, x10; \ + mul x5, x12, x11; \ + umulh x6, x12, x6; \ + umulh x7, x12, x7; \ + umulh x8, x12, x8; \ + umulh x9, x12, x9; \ + umulh x10, x12, x10; \ + umulh x12, x12, x11; \ + adds x1, x1, x6; \ + adcs x2, x2, x7; \ + adcs x3, x3, x8; \ + adcs x4, x4, x9; \ + adcs x5, x5, x10; \ + mov x6, #1; \ + adc x6, x12, x6; \ + ldp x8, x9, [P1]; \ + ldp x10, x11, [P1+16]; \ + ldp x12, x13, [P1+32]; \ + mov x14, C; \ + mul x15, x14, x8; \ + umulh x8, x14, x8; \ + adds x0, x0, x15; \ + mul x15, x14, x9; \ + umulh x9, x14, x9; \ + adcs x1, x1, x15; \ + mul x15, x14, x10; \ + umulh x10, x14, x10; \ + adcs x2, x2, x15; \ + mul x15, x14, x11; \ + umulh x11, x14, x11; \ + adcs x3, x3, x15; \ + mul x15, x14, x12; \ + umulh x12, x14, x12; \ + adcs x4, x4, x15; \ + mul x15, x14, x13; \ + umulh x13, x14, x13; \ + adcs x5, x5, x15; \ + adc x6, x6, xzr; \ + adds x1, x1, x8; \ + adcs x2, x2, x9; \ + adcs x3, x3, x10; \ + adcs x4, x4, x11; \ + adcs x5, x5, x12; \ + adcs x6, x6, x13; \ + lsl x7, x6, #32; \ + subs x8, x6, x7; \ + sbc x7, x7, xzr; \ + adds x0, x0, x8; \ + adcs x1, x1, x7; \ + adcs x2, x2, x6; \ + adcs x3, x3, xzr; \ + adcs x4, x4, xzr; \ + adcs x5, x5, xzr; \ + csetm x6, cc; \ + mov x7, #0xffffffff; \ + and x7, x7, x6; \ + adds x0, x0, x7; \ + eor x7, x7, x6; \ + adcs x1, x1, x7; \ + mov x7, #0xfffffffffffffffe; \ + and x7, x7, x6; \ + adcs x2, x2, x7; \ + adcs x3, x3, x6; \ + adcs x4, x4, x6; \ + adc x5, x5, x6; \ + stp x0, x1, [P0]; \ + stp x2, x3, [P0+16]; \ + stp x4, x5, [P0+32] + +// A weak version of add that only guarantees sum in 6 digits + +#define weakadd_p384(P0,P1,P2) \ + ldp x5, x6, [P1]; \ + ldp x4, x3, [P2]; \ + adds x5, x5, x4; \ + adcs x6, x6, x3; \ + ldp x7, x8, [P1+16]; \ + ldp x4, x3, [P2+16]; \ + adcs x7, x7, x4; \ + adcs x8, x8, x3; \ + ldp x9, x10, [P1+32]; \ + ldp x4, x3, [P2+32]; \ + adcs x9, x9, x4; \ + adcs x10, x10, x3; \ + csetm x3, cs; \ + mov x4, #0xffffffff; \ + and x4, x4, x3; \ + subs x5, x5, x4; \ + eor x4, x4, x3; \ + sbcs x6, x6, x4; \ + mov x4, #0xfffffffffffffffe; \ + and x4, x4, x3; \ + sbcs x7, x7, x4; \ + sbcs x8, x8, x3; \ + sbcs x9, x9, x3; \ + sbc x10, x10, x3; \ + stp x5, x6, [P0]; \ + stp x7, x8, [P0+16]; \ + stp x9, x10, [P0+32] + +// P0 = 3 * P1 - 8 * P2 + +#define cmsub38_p384(P0,P1,P2) \ + ldp x0, x1, [P2]; \ + mov x6, #0x00000000ffffffff; \ + subs x6, x6, x0; \ + mov x7, #0xffffffff00000000; \ + sbcs x7, x7, x1; \ + ldp x0, x1, [P2+16]; \ + mov x8, #0xfffffffffffffffe; \ + sbcs x8, x8, x0; \ + mov x13, #0xffffffffffffffff; \ + sbcs x9, x13, x1; \ + ldp x0, x1, [P2+32]; \ + sbcs x10, x13, x0; \ + sbc x11, x13, x1; \ + lsl x0, x6, #3; \ + extr x1, x7, x6, #61; \ + extr x2, x8, x7, #61; \ + extr x3, x9, x8, #61; \ + extr x4, x10, x9, #61; \ + extr x5, x11, x10, #61; \ + lsr x6, x11, #61; \ + add x6, x6, #1; \ + ldp x8, x9, [P1]; \ + ldp x10, x11, [P1+16]; \ + ldp x12, x13, [P1+32]; \ + mov x14, 3; \ + mul x15, x14, x8; \ + umulh x8, x14, x8; \ + adds x0, x0, x15; \ + mul x15, x14, x9; \ + umulh x9, x14, x9; \ + adcs x1, x1, x15; \ + mul x15, x14, x10; \ + umulh x10, x14, x10; \ + adcs x2, x2, x15; \ + mul x15, x14, x11; \ + umulh x11, x14, x11; \ + adcs x3, x3, x15; \ + mul x15, x14, x12; \ + umulh x12, x14, x12; \ + adcs x4, x4, x15; \ + mul x15, x14, x13; \ + umulh x13, x14, x13; \ + adcs x5, x5, x15; \ + adc x6, x6, xzr; \ + adds x1, x1, x8; \ + adcs x2, x2, x9; \ + adcs x3, x3, x10; \ + adcs x4, x4, x11; \ + adcs x5, x5, x12; \ + adcs x6, x6, x13; \ + lsl x7, x6, #32; \ + subs x8, x6, x7; \ + sbc x7, x7, xzr; \ + adds x0, x0, x8; \ + adcs x1, x1, x7; \ + adcs x2, x2, x6; \ + adcs x3, x3, xzr; \ + adcs x4, x4, xzr; \ + adcs x5, x5, xzr; \ + csetm x6, cc; \ + mov x7, #0xffffffff; \ + and x7, x7, x6; \ + adds x0, x0, x7; \ + eor x7, x7, x6; \ + adcs x1, x1, x7; \ + mov x7, #0xfffffffffffffffe; \ + and x7, x7, x6; \ + adcs x2, x2, x7; \ + adcs x3, x3, x6; \ + adcs x4, x4, x6; \ + adc x5, x5, x6; \ + stp x0, x1, [P0]; \ + stp x2, x3, [P0+16]; \ + stp x4, x5, [P0+32] + +S2N_BN_SYMBOL(p384_montjdouble): + +// Save regs and make room on stack for temporary variables + + stp x19, x20, [sp, #-16]! + stp x21, x22, [sp, #-16]! + stp x23, x24, [sp, #-16]! + sub sp, sp, NSPACE + +// Move the input arguments to stable places + + mov input_z, x0 + mov input_x, x1 + +// Main code, just a sequence of basic field operations + +// z2 = z^2 +// y2 = y^2 + + montsqr_p384(z2,z_1) + montsqr_p384(y2,y_1) + +// x2p = x^2 - z^4 = (x + z^2) * (x - z^2) + + weakadd_p384(t1,x_1,z2) + sub_p384(t2,x_1,z2) + montmul_p384(x2p,t1,t2) + +// t1 = y + z +// x4p = x2p^2 +// xy2 = x * y^2 + + add_p384(t1,y_1,z_1) + montsqr_p384(x4p,x2p) + montmul_p384(xy2,x_1,y2) + +// t2 = (y + z)^2 + + montsqr_p384(t2,t1) + +// d = 12 * xy2 - 9 * x4p +// t1 = y^2 + 2 * y * z + + cmsub_p384(d,12,xy2,9,x4p) + sub_p384(t1,t2,z2) + +// y4 = y^4 + + montsqr_p384(y4,y2) + +// z_3' = 2 * y * z +// dx2 = d * x2p + + sub_p384(z_3,t1,y2) + montmul_p384(dx2,d,x2p) + +// x' = 4 * xy2 - d + + cmsub41_p384(x_3,xy2,d) + +// y' = 3 * dx2 - 8 * y4 + + cmsub38_p384(y_3,dx2,y4) + +// Restore stack and registers + + add sp, sp, NSPACE + + ldp x23, x24, [sp], 16 + ldp x21, x22, [sp], 16 + ldp x19, x20, [sp], 16 + + ret + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack, "", %progbits +#endif diff --git a/arm/p384/p384_montjmixadd.S b/arm/p384/p384_montjmixadd.S new file mode 100644 index 0000000000..f7467be289 --- /dev/null +++ b/arm/p384/p384_montjmixadd.S @@ -0,0 +1,884 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +// ---------------------------------------------------------------------------- +// Point mixed addition on NIST curve P-384 in Montgomery-Jacobian coordinates +// +// extern void p384_montjmixadd +// (uint64_t p3[static 18],uint64_t p1[static 18],uint64_t p2[static 12]); +// +// Does p3 := p1 + p2 where all points are regarded as Jacobian triples with +// each coordinate in the Montgomery domain, i.e. x' = (2^384 * x) mod p_384. +// A Jacobian triple (x',y',z') represents affine point (x/z^2,y/z^3). +// The "mixed" part means that p2 only has x and y coordinates, with the +// implicit z coordinate assumed to be the identity. +// +// Standard ARM ABI: X0 = p3, X1 = p1, X2 = p2 +// ---------------------------------------------------------------------------- +#include "_internal_s2n_bignum.h" + + S2N_BN_SYM_VISIBILITY_DIRECTIVE(p384_montjmixadd) + S2N_BN_SYM_PRIVACY_DIRECTIVE(p384_montjmixadd) + .text + .balign 4 + +// Size of individual field elements + +#define NUMSIZE 48 + +// Stable homes for input arguments during main code sequence + +#define input_z x24 +#define input_x x25 +#define input_y x26 + +// Pointer-offset pairs for inputs and outputs + +#define x_1 input_x, #0 +#define y_1 input_x, #NUMSIZE +#define z_1 input_x, #(2*NUMSIZE) + +#define x_2 input_y, #0 +#define y_2 input_y, #NUMSIZE + +#define x_3 input_z, #0 +#define y_3 input_z, #NUMSIZE +#define z_3 input_z, #(2*NUMSIZE) + +// Pointer-offset pairs for temporaries, with some aliasing +// NSPACE is the total stack needed for these temporaries + +#define zp2 sp, #(NUMSIZE*0) +#define ww sp, #(NUMSIZE*0) + +#define yd sp, #(NUMSIZE*1) +#define y2a sp, #(NUMSIZE*1) + +#define x2a sp, #(NUMSIZE*2) +#define zzx2 sp, #(NUMSIZE*2) + +#define zz sp, #(NUMSIZE*3) +#define t1 sp, #(NUMSIZE*3) + +#define t2 sp, #(NUMSIZE*4) +#define zzx1 sp, #(NUMSIZE*4) + +#define xd sp, #(NUMSIZE*5) + +#define NSPACE (NUMSIZE*6) + +// Corresponds exactly to bignum_montmul_p384_alt + +#define montmul_p384(P0,P1,P2) \ + ldp x3, x4, [P1]; \ + ldp x5, x6, [P2]; \ + mul x12, x3, x5; \ + umulh x13, x3, x5; \ + mul x11, x3, x6; \ + umulh x14, x3, x6; \ + adds x13, x13, x11; \ + ldp x7, x8, [P2+16]; \ + mul x11, x3, x7; \ + umulh x15, x3, x7; \ + adcs x14, x14, x11; \ + mul x11, x3, x8; \ + umulh x16, x3, x8; \ + adcs x15, x15, x11; \ + ldp x9, x10, [P2+32]; \ + mul x11, x3, x9; \ + umulh x17, x3, x9; \ + adcs x16, x16, x11; \ + mul x11, x3, x10; \ + umulh x19, x3, x10; \ + adcs x17, x17, x11; \ + adc x19, x19, xzr; \ + mul x11, x4, x5; \ + adds x13, x13, x11; \ + mul x11, x4, x6; \ + adcs x14, x14, x11; \ + mul x11, x4, x7; \ + adcs x15, x15, x11; \ + mul x11, x4, x8; \ + adcs x16, x16, x11; \ + mul x11, x4, x9; \ + adcs x17, x17, x11; \ + mul x11, x4, x10; \ + adcs x19, x19, x11; \ + cset x20, cs; \ + umulh x11, x4, x5; \ + adds x14, x14, x11; \ + umulh x11, x4, x6; \ + adcs x15, x15, x11; \ + umulh x11, x4, x7; \ + adcs x16, x16, x11; \ + umulh x11, x4, x8; \ + adcs x17, x17, x11; \ + umulh x11, x4, x9; \ + adcs x19, x19, x11; \ + umulh x11, x4, x10; \ + adc x20, x20, x11; \ + ldp x3, x4, [P1+16]; \ + mul x11, x3, x5; \ + adds x14, x14, x11; \ + mul x11, x3, x6; \ + adcs x15, x15, x11; \ + mul x11, x3, x7; \ + adcs x16, x16, x11; \ + mul x11, x3, x8; \ + adcs x17, x17, x11; \ + mul x11, x3, x9; \ + adcs x19, x19, x11; \ + mul x11, x3, x10; \ + adcs x20, x20, x11; \ + cset x21, cs; \ + umulh x11, x3, x5; \ + adds x15, x15, x11; \ + umulh x11, x3, x6; \ + adcs x16, x16, x11; \ + umulh x11, x3, x7; \ + adcs x17, x17, x11; \ + umulh x11, x3, x8; \ + adcs x19, x19, x11; \ + umulh x11, x3, x9; \ + adcs x20, x20, x11; \ + umulh x11, x3, x10; \ + adc x21, x21, x11; \ + mul x11, x4, x5; \ + adds x15, x15, x11; \ + mul x11, x4, x6; \ + adcs x16, x16, x11; \ + mul x11, x4, x7; \ + adcs x17, x17, x11; \ + mul x11, x4, x8; \ + adcs x19, x19, x11; \ + mul x11, x4, x9; \ + adcs x20, x20, x11; \ + mul x11, x4, x10; \ + adcs x21, x21, x11; \ + cset x22, cs; \ + umulh x11, x4, x5; \ + adds x16, x16, x11; \ + umulh x11, x4, x6; \ + adcs x17, x17, x11; \ + umulh x11, x4, x7; \ + adcs x19, x19, x11; \ + umulh x11, x4, x8; \ + adcs x20, x20, x11; \ + umulh x11, x4, x9; \ + adcs x21, x21, x11; \ + umulh x11, x4, x10; \ + adc x22, x22, x11; \ + ldp x3, x4, [P1+32]; \ + mul x11, x3, x5; \ + adds x16, x16, x11; \ + mul x11, x3, x6; \ + adcs x17, x17, x11; \ + mul x11, x3, x7; \ + adcs x19, x19, x11; \ + mul x11, x3, x8; \ + adcs x20, x20, x11; \ + mul x11, x3, x9; \ + adcs x21, x21, x11; \ + mul x11, x3, x10; \ + adcs x22, x22, x11; \ + cset x2, cs; \ + umulh x11, x3, x5; \ + adds x17, x17, x11; \ + umulh x11, x3, x6; \ + adcs x19, x19, x11; \ + umulh x11, x3, x7; \ + adcs x20, x20, x11; \ + umulh x11, x3, x8; \ + adcs x21, x21, x11; \ + umulh x11, x3, x9; \ + adcs x22, x22, x11; \ + umulh x11, x3, x10; \ + adc x2, x2, x11; \ + mul x11, x4, x5; \ + adds x17, x17, x11; \ + mul x11, x4, x6; \ + adcs x19, x19, x11; \ + mul x11, x4, x7; \ + adcs x20, x20, x11; \ + mul x11, x4, x8; \ + adcs x21, x21, x11; \ + mul x11, x4, x9; \ + adcs x22, x22, x11; \ + mul x11, x4, x10; \ + adcs x2, x2, x11; \ + cset x1, cs; \ + umulh x11, x4, x5; \ + adds x19, x19, x11; \ + umulh x11, x4, x6; \ + adcs x20, x20, x11; \ + umulh x11, x4, x7; \ + adcs x21, x21, x11; \ + umulh x11, x4, x8; \ + adcs x22, x22, x11; \ + umulh x11, x4, x9; \ + adcs x2, x2, x11; \ + umulh x11, x4, x10; \ + adc x1, x1, x11; \ + lsl x7, x12, #32; \ + add x12, x7, x12; \ + mov x7, #0xffffffff00000001; \ + umulh x7, x7, x12; \ + mov x6, #0xffffffff; \ + mul x5, x6, x12; \ + umulh x6, x6, x12; \ + adds x7, x7, x5; \ + adcs x6, x6, x12; \ + adc x5, xzr, xzr; \ + subs x13, x13, x7; \ + sbcs x14, x14, x6; \ + sbcs x15, x15, x5; \ + sbcs x16, x16, xzr; \ + sbcs x17, x17, xzr; \ + sbc x12, x12, xzr; \ + lsl x7, x13, #32; \ + add x13, x7, x13; \ + mov x7, #0xffffffff00000001; \ + umulh x7, x7, x13; \ + mov x6, #0xffffffff; \ + mul x5, x6, x13; \ + umulh x6, x6, x13; \ + adds x7, x7, x5; \ + adcs x6, x6, x13; \ + adc x5, xzr, xzr; \ + subs x14, x14, x7; \ + sbcs x15, x15, x6; \ + sbcs x16, x16, x5; \ + sbcs x17, x17, xzr; \ + sbcs x12, x12, xzr; \ + sbc x13, x13, xzr; \ + lsl x7, x14, #32; \ + add x14, x7, x14; \ + mov x7, #0xffffffff00000001; \ + umulh x7, x7, x14; \ + mov x6, #0xffffffff; \ + mul x5, x6, x14; \ + umulh x6, x6, x14; \ + adds x7, x7, x5; \ + adcs x6, x6, x14; \ + adc x5, xzr, xzr; \ + subs x15, x15, x7; \ + sbcs x16, x16, x6; \ + sbcs x17, x17, x5; \ + sbcs x12, x12, xzr; \ + sbcs x13, x13, xzr; \ + sbc x14, x14, xzr; \ + lsl x7, x15, #32; \ + add x15, x7, x15; \ + mov x7, #0xffffffff00000001; \ + umulh x7, x7, x15; \ + mov x6, #0xffffffff; \ + mul x5, x6, x15; \ + umulh x6, x6, x15; \ + adds x7, x7, x5; \ + adcs x6, x6, x15; \ + adc x5, xzr, xzr; \ + subs x16, x16, x7; \ + sbcs x17, x17, x6; \ + sbcs x12, x12, x5; \ + sbcs x13, x13, xzr; \ + sbcs x14, x14, xzr; \ + sbc x15, x15, xzr; \ + lsl x7, x16, #32; \ + add x16, x7, x16; \ + mov x7, #0xffffffff00000001; \ + umulh x7, x7, x16; \ + mov x6, #0xffffffff; \ + mul x5, x6, x16; \ + umulh x6, x6, x16; \ + adds x7, x7, x5; \ + adcs x6, x6, x16; \ + adc x5, xzr, xzr; \ + subs x17, x17, x7; \ + sbcs x12, x12, x6; \ + sbcs x13, x13, x5; \ + sbcs x14, x14, xzr; \ + sbcs x15, x15, xzr; \ + sbc x16, x16, xzr; \ + lsl x7, x17, #32; \ + add x17, x7, x17; \ + mov x7, #0xffffffff00000001; \ + umulh x7, x7, x17; \ + mov x6, #0xffffffff; \ + mul x5, x6, x17; \ + umulh x6, x6, x17; \ + adds x7, x7, x5; \ + adcs x6, x6, x17; \ + adc x5, xzr, xzr; \ + subs x12, x12, x7; \ + sbcs x13, x13, x6; \ + sbcs x14, x14, x5; \ + sbcs x15, x15, xzr; \ + sbcs x16, x16, xzr; \ + sbc x17, x17, xzr; \ + adds x12, x12, x19; \ + adcs x13, x13, x20; \ + adcs x14, x14, x21; \ + adcs x15, x15, x22; \ + adcs x16, x16, x2; \ + adcs x17, x17, x1; \ + adc x10, xzr, xzr; \ + mov x11, #0xffffffff00000001; \ + adds x19, x12, x11; \ + mov x11, #0xffffffff; \ + adcs x20, x13, x11; \ + mov x11, #0x1; \ + adcs x21, x14, x11; \ + adcs x22, x15, xzr; \ + adcs x2, x16, xzr; \ + adcs x1, x17, xzr; \ + adcs x10, x10, xzr; \ + csel x12, x12, x19, eq; \ + csel x13, x13, x20, eq; \ + csel x14, x14, x21, eq; \ + csel x15, x15, x22, eq; \ + csel x16, x16, x2, eq; \ + csel x17, x17, x1, eq; \ + stp x12, x13, [P0]; \ + stp x14, x15, [P0+16]; \ + stp x16, x17, [P0+32] + +// Corresponds exactly to bignum_montsqr_p384_alt + +#define montsqr_p384(P0,P1) \ + ldp x2, x3, [P1]; \ + mul x9, x2, x3; \ + umulh x10, x2, x3; \ + ldp x4, x5, [P1+16]; \ + mul x8, x2, x4; \ + adds x10, x10, x8; \ + mul x11, x2, x5; \ + mul x8, x3, x4; \ + adcs x11, x11, x8; \ + umulh x12, x2, x5; \ + mul x8, x3, x5; \ + adcs x12, x12, x8; \ + ldp x6, x7, [P1+32]; \ + mul x13, x2, x7; \ + mul x8, x3, x6; \ + adcs x13, x13, x8; \ + umulh x14, x2, x7; \ + mul x8, x3, x7; \ + adcs x14, x14, x8; \ + mul x15, x5, x6; \ + adcs x15, x15, xzr; \ + umulh x16, x5, x6; \ + adc x16, x16, xzr; \ + umulh x8, x2, x4; \ + adds x11, x11, x8; \ + umulh x8, x3, x4; \ + adcs x12, x12, x8; \ + umulh x8, x3, x5; \ + adcs x13, x13, x8; \ + umulh x8, x3, x6; \ + adcs x14, x14, x8; \ + umulh x8, x3, x7; \ + adcs x15, x15, x8; \ + adc x16, x16, xzr; \ + mul x8, x2, x6; \ + adds x12, x12, x8; \ + mul x8, x4, x5; \ + adcs x13, x13, x8; \ + mul x8, x4, x6; \ + adcs x14, x14, x8; \ + mul x8, x4, x7; \ + adcs x15, x15, x8; \ + mul x8, x5, x7; \ + adcs x16, x16, x8; \ + mul x17, x6, x7; \ + adcs x17, x17, xzr; \ + umulh x19, x6, x7; \ + adc x19, x19, xzr; \ + umulh x8, x2, x6; \ + adds x13, x13, x8; \ + umulh x8, x4, x5; \ + adcs x14, x14, x8; \ + umulh x8, x4, x6; \ + adcs x15, x15, x8; \ + umulh x8, x4, x7; \ + adcs x16, x16, x8; \ + umulh x8, x5, x7; \ + adcs x17, x17, x8; \ + adc x19, x19, xzr; \ + adds x9, x9, x9; \ + adcs x10, x10, x10; \ + adcs x11, x11, x11; \ + adcs x12, x12, x12; \ + adcs x13, x13, x13; \ + adcs x14, x14, x14; \ + adcs x15, x15, x15; \ + adcs x16, x16, x16; \ + adcs x17, x17, x17; \ + adcs x19, x19, x19; \ + cset x20, hs; \ + umulh x8, x2, x2; \ + mul x2, x2, x2; \ + adds x9, x9, x8; \ + mul x8, x3, x3; \ + adcs x10, x10, x8; \ + umulh x8, x3, x3; \ + adcs x11, x11, x8; \ + mul x8, x4, x4; \ + adcs x12, x12, x8; \ + umulh x8, x4, x4; \ + adcs x13, x13, x8; \ + mul x8, x5, x5; \ + adcs x14, x14, x8; \ + umulh x8, x5, x5; \ + adcs x15, x15, x8; \ + mul x8, x6, x6; \ + adcs x16, x16, x8; \ + umulh x8, x6, x6; \ + adcs x17, x17, x8; \ + mul x8, x7, x7; \ + adcs x19, x19, x8; \ + umulh x8, x7, x7; \ + adc x20, x20, x8; \ + lsl x5, x2, #32; \ + add x2, x5, x2; \ + mov x5, #-4294967295; \ + umulh x5, x5, x2; \ + mov x4, #4294967295; \ + mul x3, x4, x2; \ + umulh x4, x4, x2; \ + adds x5, x5, x3; \ + adcs x4, x4, x2; \ + adc x3, xzr, xzr; \ + subs x9, x9, x5; \ + sbcs x10, x10, x4; \ + sbcs x11, x11, x3; \ + sbcs x12, x12, xzr; \ + sbcs x13, x13, xzr; \ + sbc x2, x2, xzr; \ + lsl x5, x9, #32; \ + add x9, x5, x9; \ + mov x5, #-4294967295; \ + umulh x5, x5, x9; \ + mov x4, #4294967295; \ + mul x3, x4, x9; \ + umulh x4, x4, x9; \ + adds x5, x5, x3; \ + adcs x4, x4, x9; \ + adc x3, xzr, xzr; \ + subs x10, x10, x5; \ + sbcs x11, x11, x4; \ + sbcs x12, x12, x3; \ + sbcs x13, x13, xzr; \ + sbcs x2, x2, xzr; \ + sbc x9, x9, xzr; \ + lsl x5, x10, #32; \ + add x10, x5, x10; \ + mov x5, #-4294967295; \ + umulh x5, x5, x10; \ + mov x4, #4294967295; \ + mul x3, x4, x10; \ + umulh x4, x4, x10; \ + adds x5, x5, x3; \ + adcs x4, x4, x10; \ + adc x3, xzr, xzr; \ + subs x11, x11, x5; \ + sbcs x12, x12, x4; \ + sbcs x13, x13, x3; \ + sbcs x2, x2, xzr; \ + sbcs x9, x9, xzr; \ + sbc x10, x10, xzr; \ + lsl x5, x11, #32; \ + add x11, x5, x11; \ + mov x5, #-4294967295; \ + umulh x5, x5, x11; \ + mov x4, #4294967295; \ + mul x3, x4, x11; \ + umulh x4, x4, x11; \ + adds x5, x5, x3; \ + adcs x4, x4, x11; \ + adc x3, xzr, xzr; \ + subs x12, x12, x5; \ + sbcs x13, x13, x4; \ + sbcs x2, x2, x3; \ + sbcs x9, x9, xzr; \ + sbcs x10, x10, xzr; \ + sbc x11, x11, xzr; \ + lsl x5, x12, #32; \ + add x12, x5, x12; \ + mov x5, #-4294967295; \ + umulh x5, x5, x12; \ + mov x4, #4294967295; \ + mul x3, x4, x12; \ + umulh x4, x4, x12; \ + adds x5, x5, x3; \ + adcs x4, x4, x12; \ + adc x3, xzr, xzr; \ + subs x13, x13, x5; \ + sbcs x2, x2, x4; \ + sbcs x9, x9, x3; \ + sbcs x10, x10, xzr; \ + sbcs x11, x11, xzr; \ + sbc x12, x12, xzr; \ + lsl x5, x13, #32; \ + add x13, x5, x13; \ + mov x5, #-4294967295; \ + umulh x5, x5, x13; \ + mov x4, #4294967295; \ + mul x3, x4, x13; \ + umulh x4, x4, x13; \ + adds x5, x5, x3; \ + adcs x4, x4, x13; \ + adc x3, xzr, xzr; \ + subs x2, x2, x5; \ + sbcs x9, x9, x4; \ + sbcs x10, x10, x3; \ + sbcs x11, x11, xzr; \ + sbcs x12, x12, xzr; \ + sbc x13, x13, xzr; \ + adds x2, x2, x14; \ + adcs x9, x9, x15; \ + adcs x10, x10, x16; \ + adcs x11, x11, x17; \ + adcs x12, x12, x19; \ + adcs x13, x13, x20; \ + adc x6, xzr, xzr; \ + mov x8, #-4294967295; \ + adds x14, x2, x8; \ + mov x8, #4294967295; \ + adcs x15, x9, x8; \ + mov x8, #1; \ + adcs x16, x10, x8; \ + adcs x17, x11, xzr; \ + adcs x19, x12, xzr; \ + adcs x20, x13, xzr; \ + adcs x6, x6, xzr; \ + csel x2, x2, x14, eq; \ + csel x9, x9, x15, eq; \ + csel x10, x10, x16, eq; \ + csel x11, x11, x17, eq; \ + csel x12, x12, x19, eq; \ + csel x13, x13, x20, eq; \ + stp x2, x9, [P0]; \ + stp x10, x11, [P0+16]; \ + stp x12, x13, [P0+32] + +// Almost-Montgomery variant which we use when an input to other muls +// with the other argument fully reduced (which is always safe). In +// fact, with the Karatsuba-based Montgomery mul here, we don't even +// *need* the restriction that the other argument is reduced. + +#define amontsqr_p384(P0,P1) \ + ldp x2, x3, [P1]; \ + mul x9, x2, x3; \ + umulh x10, x2, x3; \ + ldp x4, x5, [P1+16]; \ + mul x8, x2, x4; \ + adds x10, x10, x8; \ + mul x11, x2, x5; \ + mul x8, x3, x4; \ + adcs x11, x11, x8; \ + umulh x12, x2, x5; \ + mul x8, x3, x5; \ + adcs x12, x12, x8; \ + ldp x6, x7, [P1+32]; \ + mul x13, x2, x7; \ + mul x8, x3, x6; \ + adcs x13, x13, x8; \ + umulh x14, x2, x7; \ + mul x8, x3, x7; \ + adcs x14, x14, x8; \ + mul x15, x5, x6; \ + adcs x15, x15, xzr; \ + umulh x16, x5, x6; \ + adc x16, x16, xzr; \ + umulh x8, x2, x4; \ + adds x11, x11, x8; \ + umulh x8, x3, x4; \ + adcs x12, x12, x8; \ + umulh x8, x3, x5; \ + adcs x13, x13, x8; \ + umulh x8, x3, x6; \ + adcs x14, x14, x8; \ + umulh x8, x3, x7; \ + adcs x15, x15, x8; \ + adc x16, x16, xzr; \ + mul x8, x2, x6; \ + adds x12, x12, x8; \ + mul x8, x4, x5; \ + adcs x13, x13, x8; \ + mul x8, x4, x6; \ + adcs x14, x14, x8; \ + mul x8, x4, x7; \ + adcs x15, x15, x8; \ + mul x8, x5, x7; \ + adcs x16, x16, x8; \ + mul x17, x6, x7; \ + adcs x17, x17, xzr; \ + umulh x19, x6, x7; \ + adc x19, x19, xzr; \ + umulh x8, x2, x6; \ + adds x13, x13, x8; \ + umulh x8, x4, x5; \ + adcs x14, x14, x8; \ + umulh x8, x4, x6; \ + adcs x15, x15, x8; \ + umulh x8, x4, x7; \ + adcs x16, x16, x8; \ + umulh x8, x5, x7; \ + adcs x17, x17, x8; \ + adc x19, x19, xzr; \ + adds x9, x9, x9; \ + adcs x10, x10, x10; \ + adcs x11, x11, x11; \ + adcs x12, x12, x12; \ + adcs x13, x13, x13; \ + adcs x14, x14, x14; \ + adcs x15, x15, x15; \ + adcs x16, x16, x16; \ + adcs x17, x17, x17; \ + adcs x19, x19, x19; \ + cset x20, hs; \ + umulh x8, x2, x2; \ + mul x2, x2, x2; \ + adds x9, x9, x8; \ + mul x8, x3, x3; \ + adcs x10, x10, x8; \ + umulh x8, x3, x3; \ + adcs x11, x11, x8; \ + mul x8, x4, x4; \ + adcs x12, x12, x8; \ + umulh x8, x4, x4; \ + adcs x13, x13, x8; \ + mul x8, x5, x5; \ + adcs x14, x14, x8; \ + umulh x8, x5, x5; \ + adcs x15, x15, x8; \ + mul x8, x6, x6; \ + adcs x16, x16, x8; \ + umulh x8, x6, x6; \ + adcs x17, x17, x8; \ + mul x8, x7, x7; \ + adcs x19, x19, x8; \ + umulh x8, x7, x7; \ + adc x20, x20, x8; \ + lsl x5, x2, #32; \ + add x2, x5, x2; \ + mov x5, #-4294967295; \ + umulh x5, x5, x2; \ + mov x4, #4294967295; \ + mul x3, x4, x2; \ + umulh x4, x4, x2; \ + adds x5, x5, x3; \ + adcs x4, x4, x2; \ + adc x3, xzr, xzr; \ + subs x9, x9, x5; \ + sbcs x10, x10, x4; \ + sbcs x11, x11, x3; \ + sbcs x12, x12, xzr; \ + sbcs x13, x13, xzr; \ + sbc x2, x2, xzr; \ + lsl x5, x9, #32; \ + add x9, x5, x9; \ + mov x5, #-4294967295; \ + umulh x5, x5, x9; \ + mov x4, #4294967295; \ + mul x3, x4, x9; \ + umulh x4, x4, x9; \ + adds x5, x5, x3; \ + adcs x4, x4, x9; \ + adc x3, xzr, xzr; \ + subs x10, x10, x5; \ + sbcs x11, x11, x4; \ + sbcs x12, x12, x3; \ + sbcs x13, x13, xzr; \ + sbcs x2, x2, xzr; \ + sbc x9, x9, xzr; \ + lsl x5, x10, #32; \ + add x10, x5, x10; \ + mov x5, #-4294967295; \ + umulh x5, x5, x10; \ + mov x4, #4294967295; \ + mul x3, x4, x10; \ + umulh x4, x4, x10; \ + adds x5, x5, x3; \ + adcs x4, x4, x10; \ + adc x3, xzr, xzr; \ + subs x11, x11, x5; \ + sbcs x12, x12, x4; \ + sbcs x13, x13, x3; \ + sbcs x2, x2, xzr; \ + sbcs x9, x9, xzr; \ + sbc x10, x10, xzr; \ + lsl x5, x11, #32; \ + add x11, x5, x11; \ + mov x5, #-4294967295; \ + umulh x5, x5, x11; \ + mov x4, #4294967295; \ + mul x3, x4, x11; \ + umulh x4, x4, x11; \ + adds x5, x5, x3; \ + adcs x4, x4, x11; \ + adc x3, xzr, xzr; \ + subs x12, x12, x5; \ + sbcs x13, x13, x4; \ + sbcs x2, x2, x3; \ + sbcs x9, x9, xzr; \ + sbcs x10, x10, xzr; \ + sbc x11, x11, xzr; \ + lsl x5, x12, #32; \ + add x12, x5, x12; \ + mov x5, #-4294967295; \ + umulh x5, x5, x12; \ + mov x4, #4294967295; \ + mul x3, x4, x12; \ + umulh x4, x4, x12; \ + adds x5, x5, x3; \ + adcs x4, x4, x12; \ + adc x3, xzr, xzr; \ + subs x13, x13, x5; \ + sbcs x2, x2, x4; \ + sbcs x9, x9, x3; \ + sbcs x10, x10, xzr; \ + sbcs x11, x11, xzr; \ + sbc x12, x12, xzr; \ + lsl x5, x13, #32; \ + add x13, x5, x13; \ + mov x5, #-4294967295; \ + umulh x5, x5, x13; \ + mov x4, #4294967295; \ + mul x3, x4, x13; \ + umulh x4, x4, x13; \ + adds x5, x5, x3; \ + adcs x4, x4, x13; \ + adc x3, xzr, xzr; \ + subs x2, x2, x5; \ + sbcs x9, x9, x4; \ + sbcs x10, x10, x3; \ + sbcs x11, x11, xzr; \ + sbcs x12, x12, xzr; \ + sbc x13, x13, xzr; \ + adds x2, x2, x14; \ + adcs x9, x9, x15; \ + adcs x10, x10, x16; \ + adcs x11, x11, x17; \ + adcs x12, x12, x19; \ + adcs x13, x13, x20; \ + mov x14, #-4294967295; \ + mov x15, #4294967295; \ + csel x14, x14, xzr, cs; \ + csel x15, x15, xzr, cs; \ + cset x16, cs; \ + adds x2, x2, x14; \ + adcs x9, x9, x15; \ + adcs x10, x10, x16; \ + adcs x11, x11, xzr; \ + adcs x12, x12, xzr; \ + adc x13, x13, xzr; \ + stp x2, x9, [P0]; \ + stp x10, x11, [P0+16]; \ + stp x12, x13, [P0+32] + +// Corresponds exactly to bignum_sub_p384 + +#define sub_p384(P0,P1,P2) \ + ldp x5, x6, [P1]; \ + ldp x4, x3, [P2]; \ + subs x5, x5, x4; \ + sbcs x6, x6, x3; \ + ldp x7, x8, [P1+16]; \ + ldp x4, x3, [P2+16]; \ + sbcs x7, x7, x4; \ + sbcs x8, x8, x3; \ + ldp x9, x10, [P1+32]; \ + ldp x4, x3, [P2+32]; \ + sbcs x9, x9, x4; \ + sbcs x10, x10, x3; \ + csetm x3, lo; \ + mov x4, #4294967295; \ + and x4, x4, x3; \ + adds x5, x5, x4; \ + eor x4, x4, x3; \ + adcs x6, x6, x4; \ + mov x4, #-2; \ + and x4, x4, x3; \ + adcs x7, x7, x4; \ + adcs x8, x8, x3; \ + adcs x9, x9, x3; \ + adc x10, x10, x3; \ + stp x5, x6, [P0]; \ + stp x7, x8, [P0+16]; \ + stp x9, x10, [P0+32] + +S2N_BN_SYMBOL(p384_montjmixadd): + +// Save regs and make room on stack for temporary variables + + stp x19, x20, [sp, #-16]! + stp x21, x22, [sp, #-16]! + stp x23, x24, [sp, #-16]! + stp x25, x26, [sp, #-16]! + sub sp, sp, NSPACE + +// Move the input arguments to stable places + + mov input_z, x0 + mov input_x, x1 + mov input_y, x2 + +// Main code, just a sequence of basic field operations +// 8 * multiply + 3 * square + 7 * subtract + + amontsqr_p384(zp2,z_1) + montmul_p384(y2a,z_1,y_2) + + montmul_p384(x2a,zp2,x_2) + montmul_p384(y2a,zp2,y2a) + + sub_p384(xd,x2a,x_1) + sub_p384(yd,y2a,y_1) + + amontsqr_p384(zz,xd) + montsqr_p384(ww,yd) + + montmul_p384(zzx1,zz,x_1) + montmul_p384(zzx2,zz,x2a) + + sub_p384(x_3,ww,zzx1) + sub_p384(t1,zzx2,zzx1) + + montmul_p384(z_3,xd,z_1) + + sub_p384(x_3,x_3,zzx2) + + sub_p384(t2,zzx1,x_3) + + montmul_p384(t1,t1,y_1) + montmul_p384(t2,yd,t2) + + sub_p384(y_3,t2,t1) + +// Restore stack and registers + + add sp, sp, NSPACE + + ldp x25, x26, [sp], 16 + ldp x23, x24, [sp], 16 + ldp x21, x22, [sp], 16 + ldp x19, x20, [sp], 16 + + ret + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack, "", %progbits +#endif diff --git a/arm/proofs/p384_montjadd.ml b/arm/proofs/p384_montjadd.ml new file mode 100644 index 0000000000..a7c61119e4 --- /dev/null +++ b/arm/proofs/p384_montjadd.ml @@ -0,0 +1,5068 @@ +(* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + *) + +(* ========================================================================= *) +(* Point addition in Montgomery-Jacobian coordinates for NIST P-384 curve. *) +(* ========================================================================= *) + +needs "arm/proofs/base.ml";; +needs "common/ecencoding.ml";; +needs "EC/jacobian.ml";; +needs "EC/nistp384.ml";; + +prioritize_int();; +prioritize_real();; +prioritize_num();; + +(**** print_literal_from_elf "arm/p384/p384_montjadd.o";; + ****) + +let p384_montjadd_mc = define_assert_from_elf + "p384_montjadd_mc" "arm/p384/p384_montjadd.o" +[ + 0xa9bf53f3; (* arm_STP X19 X20 SP (Preimmediate_Offset (iword (-- &16))) *) + 0xa9bf5bf5; (* arm_STP X21 X22 SP (Preimmediate_Offset (iword (-- &16))) *) + 0xa9bf63f7; (* arm_STP X23 X24 SP (Preimmediate_Offset (iword (-- &16))) *) + 0xa9bf6bf9; (* arm_STP X25 X26 SP (Preimmediate_Offset (iword (-- &16))) *) + 0xd10543ff; (* arm_SUB SP SP (rvalue (word 336)) *) + 0xaa0003f8; (* arm_MOV X24 X0 *) + 0xaa0103f9; (* arm_MOV X25 X1 *) + 0xaa0203fa; (* arm_MOV X26 X2 *) + 0xa9460f22; (* arm_LDP X2 X3 X25 (Immediate_Offset (iword (&96))) *) + 0x9b037c49; (* arm_MUL X9 X2 X3 *) + 0x9bc37c4a; (* arm_UMULH X10 X2 X3 *) + 0xa9471724; (* arm_LDP X4 X5 X25 (Immediate_Offset (iword (&112))) *) + 0x9b047c48; (* arm_MUL X8 X2 X4 *) + 0xab08014a; (* arm_ADDS X10 X10 X8 *) + 0x9b057c4b; (* arm_MUL X11 X2 X5 *) + 0x9b047c68; (* arm_MUL X8 X3 X4 *) + 0xba08016b; (* arm_ADCS X11 X11 X8 *) + 0x9bc57c4c; (* arm_UMULH X12 X2 X5 *) + 0x9b057c68; (* arm_MUL X8 X3 X5 *) + 0xba08018c; (* arm_ADCS X12 X12 X8 *) + 0xa9481f26; (* arm_LDP X6 X7 X25 (Immediate_Offset (iword (&128))) *) + 0x9b077c4d; (* arm_MUL X13 X2 X7 *) + 0x9b067c68; (* arm_MUL X8 X3 X6 *) + 0xba0801ad; (* arm_ADCS X13 X13 X8 *) + 0x9bc77c4e; (* arm_UMULH X14 X2 X7 *) + 0x9b077c68; (* arm_MUL X8 X3 X7 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9b067caf; (* arm_MUL X15 X5 X6 *) + 0xba1f01ef; (* arm_ADCS X15 X15 XZR *) + 0x9bc67cb0; (* arm_UMULH X16 X5 X6 *) + 0x9a1f0210; (* arm_ADC X16 X16 XZR *) + 0x9bc47c48; (* arm_UMULH X8 X2 X4 *) + 0xab08016b; (* arm_ADDS X11 X11 X8 *) + 0x9bc47c68; (* arm_UMULH X8 X3 X4 *) + 0xba08018c; (* arm_ADCS X12 X12 X8 *) + 0x9bc57c68; (* arm_UMULH X8 X3 X5 *) + 0xba0801ad; (* arm_ADCS X13 X13 X8 *) + 0x9bc67c68; (* arm_UMULH X8 X3 X6 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9bc77c68; (* arm_UMULH X8 X3 X7 *) + 0xba0801ef; (* arm_ADCS X15 X15 X8 *) + 0x9a1f0210; (* arm_ADC X16 X16 XZR *) + 0x9b067c48; (* arm_MUL X8 X2 X6 *) + 0xab08018c; (* arm_ADDS X12 X12 X8 *) + 0x9b057c88; (* arm_MUL X8 X4 X5 *) + 0xba0801ad; (* arm_ADCS X13 X13 X8 *) + 0x9b067c88; (* arm_MUL X8 X4 X6 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9b077c88; (* arm_MUL X8 X4 X7 *) + 0xba0801ef; (* arm_ADCS X15 X15 X8 *) + 0x9b077ca8; (* arm_MUL X8 X5 X7 *) + 0xba080210; (* arm_ADCS X16 X16 X8 *) + 0x9b077cd1; (* arm_MUL X17 X6 X7 *) + 0xba1f0231; (* arm_ADCS X17 X17 XZR *) + 0x9bc77cd3; (* arm_UMULH X19 X6 X7 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0x9bc67c48; (* arm_UMULH X8 X2 X6 *) + 0xab0801ad; (* arm_ADDS X13 X13 X8 *) + 0x9bc57c88; (* arm_UMULH X8 X4 X5 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9bc67c88; (* arm_UMULH X8 X4 X6 *) + 0xba0801ef; (* arm_ADCS X15 X15 X8 *) + 0x9bc77c88; (* arm_UMULH X8 X4 X7 *) + 0xba080210; (* arm_ADCS X16 X16 X8 *) + 0x9bc77ca8; (* arm_UMULH X8 X5 X7 *) + 0xba080231; (* arm_ADCS X17 X17 X8 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0xab090129; (* arm_ADDS X9 X9 X9 *) + 0xba0a014a; (* arm_ADCS X10 X10 X10 *) + 0xba0b016b; (* arm_ADCS X11 X11 X11 *) + 0xba0c018c; (* arm_ADCS X12 X12 X12 *) + 0xba0d01ad; (* arm_ADCS X13 X13 X13 *) + 0xba0e01ce; (* arm_ADCS X14 X14 X14 *) + 0xba0f01ef; (* arm_ADCS X15 X15 X15 *) + 0xba100210; (* arm_ADCS X16 X16 X16 *) + 0xba110231; (* arm_ADCS X17 X17 X17 *) + 0xba130273; (* arm_ADCS X19 X19 X19 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc27c48; (* arm_UMULH X8 X2 X2 *) + 0x9b027c42; (* arm_MUL X2 X2 X2 *) + 0xab080129; (* arm_ADDS X9 X9 X8 *) + 0x9b037c68; (* arm_MUL X8 X3 X3 *) + 0xba08014a; (* arm_ADCS X10 X10 X8 *) + 0x9bc37c68; (* arm_UMULH X8 X3 X3 *) + 0xba08016b; (* arm_ADCS X11 X11 X8 *) + 0x9b047c88; (* arm_MUL X8 X4 X4 *) + 0xba08018c; (* arm_ADCS X12 X12 X8 *) + 0x9bc47c88; (* arm_UMULH X8 X4 X4 *) + 0xba0801ad; (* arm_ADCS X13 X13 X8 *) + 0x9b057ca8; (* arm_MUL X8 X5 X5 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9bc57ca8; (* arm_UMULH X8 X5 X5 *) + 0xba0801ef; (* arm_ADCS X15 X15 X8 *) + 0x9b067cc8; (* arm_MUL X8 X6 X6 *) + 0xba080210; (* arm_ADCS X16 X16 X8 *) + 0x9bc67cc8; (* arm_UMULH X8 X6 X6 *) + 0xba080231; (* arm_ADCS X17 X17 X8 *) + 0x9b077ce8; (* arm_MUL X8 X7 X7 *) + 0xba080273; (* arm_ADCS X19 X19 X8 *) + 0x9bc77ce8; (* arm_UMULH X8 X7 X7 *) + 0x9a080294; (* arm_ADC X20 X20 X8 *) + 0xd3607c45; (* arm_LSL X5 X2 32 *) + 0x8b0200a2; (* arm_ADD X2 X5 X2 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bc27ca5; (* arm_UMULH X5 X5 X2 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b027c83; (* arm_MUL X3 X4 X2 *) + 0x9bc27c84; (* arm_UMULH X4 X4 X2 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba020084; (* arm_ADCS X4 X4 X2 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb050129; (* arm_SUBS X9 X9 X5 *) + 0xfa04014a; (* arm_SBCS X10 X10 X4 *) + 0xfa03016b; (* arm_SBCS X11 X11 X3 *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xda1f0042; (* arm_SBC X2 X2 XZR *) + 0xd3607d25; (* arm_LSL X5 X9 32 *) + 0x8b0900a9; (* arm_ADD X9 X5 X9 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bc97ca5; (* arm_UMULH X5 X5 X9 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b097c83; (* arm_MUL X3 X4 X9 *) + 0x9bc97c84; (* arm_UMULH X4 X4 X9 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba090084; (* arm_ADCS X4 X4 X9 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb05014a; (* arm_SUBS X10 X10 X5 *) + 0xfa04016b; (* arm_SBCS X11 X11 X4 *) + 0xfa03018c; (* arm_SBCS X12 X12 X3 *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f0042; (* arm_SBCS X2 X2 XZR *) + 0xda1f0129; (* arm_SBC X9 X9 XZR *) + 0xd3607d45; (* arm_LSL X5 X10 32 *) + 0x8b0a00aa; (* arm_ADD X10 X5 X10 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bca7ca5; (* arm_UMULH X5 X5 X10 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b0a7c83; (* arm_MUL X3 X4 X10 *) + 0x9bca7c84; (* arm_UMULH X4 X4 X10 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba0a0084; (* arm_ADCS X4 X4 X10 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb05016b; (* arm_SUBS X11 X11 X5 *) + 0xfa04018c; (* arm_SBCS X12 X12 X4 *) + 0xfa0301ad; (* arm_SBCS X13 X13 X3 *) + 0xfa1f0042; (* arm_SBCS X2 X2 XZR *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xda1f014a; (* arm_SBC X10 X10 XZR *) + 0xd3607d65; (* arm_LSL X5 X11 32 *) + 0x8b0b00ab; (* arm_ADD X11 X5 X11 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bcb7ca5; (* arm_UMULH X5 X5 X11 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b0b7c83; (* arm_MUL X3 X4 X11 *) + 0x9bcb7c84; (* arm_UMULH X4 X4 X11 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb05018c; (* arm_SUBS X12 X12 X5 *) + 0xfa0401ad; (* arm_SBCS X13 X13 X4 *) + 0xfa030042; (* arm_SBCS X2 X2 X3 *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xda1f016b; (* arm_SBC X11 X11 XZR *) + 0xd3607d85; (* arm_LSL X5 X12 32 *) + 0x8b0c00ac; (* arm_ADD X12 X5 X12 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bcc7ca5; (* arm_UMULH X5 X5 X12 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b0c7c83; (* arm_MUL X3 X4 X12 *) + 0x9bcc7c84; (* arm_UMULH X4 X4 X12 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba0c0084; (* arm_ADCS X4 X4 X12 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb0501ad; (* arm_SUBS X13 X13 X5 *) + 0xfa040042; (* arm_SBCS X2 X2 X4 *) + 0xfa030129; (* arm_SBCS X9 X9 X3 *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xda1f018c; (* arm_SBC X12 X12 XZR *) + 0xd3607da5; (* arm_LSL X5 X13 32 *) + 0x8b0d00ad; (* arm_ADD X13 X5 X13 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bcd7ca5; (* arm_UMULH X5 X5 X13 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b0d7c83; (* arm_MUL X3 X4 X13 *) + 0x9bcd7c84; (* arm_UMULH X4 X4 X13 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba0d0084; (* arm_ADCS X4 X4 X13 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb050042; (* arm_SUBS X2 X2 X5 *) + 0xfa040129; (* arm_SBCS X9 X9 X4 *) + 0xfa03014a; (* arm_SBCS X10 X10 X3 *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda1f01ad; (* arm_SBC X13 X13 XZR *) + 0xab0e0042; (* arm_ADDS X2 X2 X14 *) + 0xba0f0129; (* arm_ADCS X9 X9 X15 *) + 0xba10014a; (* arm_ADCS X10 X10 X16 *) + 0xba11016b; (* arm_ADCS X11 X11 X17 *) + 0xba13018c; (* arm_ADCS X12 X12 X19 *) + 0xba1401ad; (* arm_ADCS X13 X13 X20 *) + 0xb26083ee; (* arm_MOV X14 (rvalue (word 18446744069414584321)) *) + 0xb2407fef; (* arm_MOV X15 (rvalue (word 4294967295)) *) + 0x9a9f21ce; (* arm_CSEL X14 X14 XZR Condition_CS *) + 0x9a9f21ef; (* arm_CSEL X15 X15 XZR Condition_CS *) + 0x9a9f37f0; (* arm_CSET X16 Condition_CS *) + 0xab0e0042; (* arm_ADDS X2 X2 X14 *) + 0xba0f0129; (* arm_ADCS X9 X9 X15 *) + 0xba10014a; (* arm_ADCS X10 X10 X16 *) + 0xba1f016b; (* arm_ADCS X11 X11 XZR *) + 0xba1f018c; (* arm_ADCS X12 X12 XZR *) + 0x9a1f01ad; (* arm_ADC X13 X13 XZR *) + 0xa90027e2; (* arm_STP X2 X9 SP (Immediate_Offset (iword (&0))) *) + 0xa9012fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&16))) *) + 0xa90237ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&32))) *) + 0xa9460f42; (* arm_LDP X2 X3 X26 (Immediate_Offset (iword (&96))) *) + 0x9b037c49; (* arm_MUL X9 X2 X3 *) + 0x9bc37c4a; (* arm_UMULH X10 X2 X3 *) + 0xa9471744; (* arm_LDP X4 X5 X26 (Immediate_Offset (iword (&112))) *) + 0x9b047c48; (* arm_MUL X8 X2 X4 *) + 0xab08014a; (* arm_ADDS X10 X10 X8 *) + 0x9b057c4b; (* arm_MUL X11 X2 X5 *) + 0x9b047c68; (* arm_MUL X8 X3 X4 *) + 0xba08016b; (* arm_ADCS X11 X11 X8 *) + 0x9bc57c4c; (* arm_UMULH X12 X2 X5 *) + 0x9b057c68; (* arm_MUL X8 X3 X5 *) + 0xba08018c; (* arm_ADCS X12 X12 X8 *) + 0xa9481f46; (* arm_LDP X6 X7 X26 (Immediate_Offset (iword (&128))) *) + 0x9b077c4d; (* arm_MUL X13 X2 X7 *) + 0x9b067c68; (* arm_MUL X8 X3 X6 *) + 0xba0801ad; (* arm_ADCS X13 X13 X8 *) + 0x9bc77c4e; (* arm_UMULH X14 X2 X7 *) + 0x9b077c68; (* arm_MUL X8 X3 X7 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9b067caf; (* arm_MUL X15 X5 X6 *) + 0xba1f01ef; (* arm_ADCS X15 X15 XZR *) + 0x9bc67cb0; (* arm_UMULH X16 X5 X6 *) + 0x9a1f0210; (* arm_ADC X16 X16 XZR *) + 0x9bc47c48; (* arm_UMULH X8 X2 X4 *) + 0xab08016b; (* arm_ADDS X11 X11 X8 *) + 0x9bc47c68; (* arm_UMULH X8 X3 X4 *) + 0xba08018c; (* arm_ADCS X12 X12 X8 *) + 0x9bc57c68; (* arm_UMULH X8 X3 X5 *) + 0xba0801ad; (* arm_ADCS X13 X13 X8 *) + 0x9bc67c68; (* arm_UMULH X8 X3 X6 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9bc77c68; (* arm_UMULH X8 X3 X7 *) + 0xba0801ef; (* arm_ADCS X15 X15 X8 *) + 0x9a1f0210; (* arm_ADC X16 X16 XZR *) + 0x9b067c48; (* arm_MUL X8 X2 X6 *) + 0xab08018c; (* arm_ADDS X12 X12 X8 *) + 0x9b057c88; (* arm_MUL X8 X4 X5 *) + 0xba0801ad; (* arm_ADCS X13 X13 X8 *) + 0x9b067c88; (* arm_MUL X8 X4 X6 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9b077c88; (* arm_MUL X8 X4 X7 *) + 0xba0801ef; (* arm_ADCS X15 X15 X8 *) + 0x9b077ca8; (* arm_MUL X8 X5 X7 *) + 0xba080210; (* arm_ADCS X16 X16 X8 *) + 0x9b077cd1; (* arm_MUL X17 X6 X7 *) + 0xba1f0231; (* arm_ADCS X17 X17 XZR *) + 0x9bc77cd3; (* arm_UMULH X19 X6 X7 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0x9bc67c48; (* arm_UMULH X8 X2 X6 *) + 0xab0801ad; (* arm_ADDS X13 X13 X8 *) + 0x9bc57c88; (* arm_UMULH X8 X4 X5 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9bc67c88; (* arm_UMULH X8 X4 X6 *) + 0xba0801ef; (* arm_ADCS X15 X15 X8 *) + 0x9bc77c88; (* arm_UMULH X8 X4 X7 *) + 0xba080210; (* arm_ADCS X16 X16 X8 *) + 0x9bc77ca8; (* arm_UMULH X8 X5 X7 *) + 0xba080231; (* arm_ADCS X17 X17 X8 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0xab090129; (* arm_ADDS X9 X9 X9 *) + 0xba0a014a; (* arm_ADCS X10 X10 X10 *) + 0xba0b016b; (* arm_ADCS X11 X11 X11 *) + 0xba0c018c; (* arm_ADCS X12 X12 X12 *) + 0xba0d01ad; (* arm_ADCS X13 X13 X13 *) + 0xba0e01ce; (* arm_ADCS X14 X14 X14 *) + 0xba0f01ef; (* arm_ADCS X15 X15 X15 *) + 0xba100210; (* arm_ADCS X16 X16 X16 *) + 0xba110231; (* arm_ADCS X17 X17 X17 *) + 0xba130273; (* arm_ADCS X19 X19 X19 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc27c48; (* arm_UMULH X8 X2 X2 *) + 0x9b027c42; (* arm_MUL X2 X2 X2 *) + 0xab080129; (* arm_ADDS X9 X9 X8 *) + 0x9b037c68; (* arm_MUL X8 X3 X3 *) + 0xba08014a; (* arm_ADCS X10 X10 X8 *) + 0x9bc37c68; (* arm_UMULH X8 X3 X3 *) + 0xba08016b; (* arm_ADCS X11 X11 X8 *) + 0x9b047c88; (* arm_MUL X8 X4 X4 *) + 0xba08018c; (* arm_ADCS X12 X12 X8 *) + 0x9bc47c88; (* arm_UMULH X8 X4 X4 *) + 0xba0801ad; (* arm_ADCS X13 X13 X8 *) + 0x9b057ca8; (* arm_MUL X8 X5 X5 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9bc57ca8; (* arm_UMULH X8 X5 X5 *) + 0xba0801ef; (* arm_ADCS X15 X15 X8 *) + 0x9b067cc8; (* arm_MUL X8 X6 X6 *) + 0xba080210; (* arm_ADCS X16 X16 X8 *) + 0x9bc67cc8; (* arm_UMULH X8 X6 X6 *) + 0xba080231; (* arm_ADCS X17 X17 X8 *) + 0x9b077ce8; (* arm_MUL X8 X7 X7 *) + 0xba080273; (* arm_ADCS X19 X19 X8 *) + 0x9bc77ce8; (* arm_UMULH X8 X7 X7 *) + 0x9a080294; (* arm_ADC X20 X20 X8 *) + 0xd3607c45; (* arm_LSL X5 X2 32 *) + 0x8b0200a2; (* arm_ADD X2 X5 X2 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bc27ca5; (* arm_UMULH X5 X5 X2 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b027c83; (* arm_MUL X3 X4 X2 *) + 0x9bc27c84; (* arm_UMULH X4 X4 X2 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba020084; (* arm_ADCS X4 X4 X2 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb050129; (* arm_SUBS X9 X9 X5 *) + 0xfa04014a; (* arm_SBCS X10 X10 X4 *) + 0xfa03016b; (* arm_SBCS X11 X11 X3 *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xda1f0042; (* arm_SBC X2 X2 XZR *) + 0xd3607d25; (* arm_LSL X5 X9 32 *) + 0x8b0900a9; (* arm_ADD X9 X5 X9 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bc97ca5; (* arm_UMULH X5 X5 X9 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b097c83; (* arm_MUL X3 X4 X9 *) + 0x9bc97c84; (* arm_UMULH X4 X4 X9 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba090084; (* arm_ADCS X4 X4 X9 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb05014a; (* arm_SUBS X10 X10 X5 *) + 0xfa04016b; (* arm_SBCS X11 X11 X4 *) + 0xfa03018c; (* arm_SBCS X12 X12 X3 *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f0042; (* arm_SBCS X2 X2 XZR *) + 0xda1f0129; (* arm_SBC X9 X9 XZR *) + 0xd3607d45; (* arm_LSL X5 X10 32 *) + 0x8b0a00aa; (* arm_ADD X10 X5 X10 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bca7ca5; (* arm_UMULH X5 X5 X10 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b0a7c83; (* arm_MUL X3 X4 X10 *) + 0x9bca7c84; (* arm_UMULH X4 X4 X10 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba0a0084; (* arm_ADCS X4 X4 X10 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb05016b; (* arm_SUBS X11 X11 X5 *) + 0xfa04018c; (* arm_SBCS X12 X12 X4 *) + 0xfa0301ad; (* arm_SBCS X13 X13 X3 *) + 0xfa1f0042; (* arm_SBCS X2 X2 XZR *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xda1f014a; (* arm_SBC X10 X10 XZR *) + 0xd3607d65; (* arm_LSL X5 X11 32 *) + 0x8b0b00ab; (* arm_ADD X11 X5 X11 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bcb7ca5; (* arm_UMULH X5 X5 X11 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b0b7c83; (* arm_MUL X3 X4 X11 *) + 0x9bcb7c84; (* arm_UMULH X4 X4 X11 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb05018c; (* arm_SUBS X12 X12 X5 *) + 0xfa0401ad; (* arm_SBCS X13 X13 X4 *) + 0xfa030042; (* arm_SBCS X2 X2 X3 *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xda1f016b; (* arm_SBC X11 X11 XZR *) + 0xd3607d85; (* arm_LSL X5 X12 32 *) + 0x8b0c00ac; (* arm_ADD X12 X5 X12 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bcc7ca5; (* arm_UMULH X5 X5 X12 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b0c7c83; (* arm_MUL X3 X4 X12 *) + 0x9bcc7c84; (* arm_UMULH X4 X4 X12 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba0c0084; (* arm_ADCS X4 X4 X12 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb0501ad; (* arm_SUBS X13 X13 X5 *) + 0xfa040042; (* arm_SBCS X2 X2 X4 *) + 0xfa030129; (* arm_SBCS X9 X9 X3 *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xda1f018c; (* arm_SBC X12 X12 XZR *) + 0xd3607da5; (* arm_LSL X5 X13 32 *) + 0x8b0d00ad; (* arm_ADD X13 X5 X13 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bcd7ca5; (* arm_UMULH X5 X5 X13 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b0d7c83; (* arm_MUL X3 X4 X13 *) + 0x9bcd7c84; (* arm_UMULH X4 X4 X13 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba0d0084; (* arm_ADCS X4 X4 X13 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb050042; (* arm_SUBS X2 X2 X5 *) + 0xfa040129; (* arm_SBCS X9 X9 X4 *) + 0xfa03014a; (* arm_SBCS X10 X10 X3 *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda1f01ad; (* arm_SBC X13 X13 XZR *) + 0xab0e0042; (* arm_ADDS X2 X2 X14 *) + 0xba0f0129; (* arm_ADCS X9 X9 X15 *) + 0xba10014a; (* arm_ADCS X10 X10 X16 *) + 0xba11016b; (* arm_ADCS X11 X11 X17 *) + 0xba13018c; (* arm_ADCS X12 X12 X19 *) + 0xba1401ad; (* arm_ADCS X13 X13 X20 *) + 0xb26083ee; (* arm_MOV X14 (rvalue (word 18446744069414584321)) *) + 0xb2407fef; (* arm_MOV X15 (rvalue (word 4294967295)) *) + 0x9a9f21ce; (* arm_CSEL X14 X14 XZR Condition_CS *) + 0x9a9f21ef; (* arm_CSEL X15 X15 XZR Condition_CS *) + 0x9a9f37f0; (* arm_CSET X16 Condition_CS *) + 0xab0e0042; (* arm_ADDS X2 X2 X14 *) + 0xba0f0129; (* arm_ADCS X9 X9 X15 *) + 0xba10014a; (* arm_ADCS X10 X10 X16 *) + 0xba1f016b; (* arm_ADCS X11 X11 XZR *) + 0xba1f018c; (* arm_ADCS X12 X12 XZR *) + 0x9a1f01ad; (* arm_ADC X13 X13 XZR *) + 0xa90f27e2; (* arm_STP X2 X9 SP (Immediate_Offset (iword (&240))) *) + 0xa9102fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&256))) *) + 0xa91137ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&272))) *) + 0xa9461343; (* arm_LDP X3 X4 X26 (Immediate_Offset (iword (&96))) *) + 0xa9431b25; (* arm_LDP X5 X6 X25 (Immediate_Offset (iword (&48))) *) + 0x9b057c6c; (* arm_MUL X12 X3 X5 *) + 0x9bc57c6d; (* arm_UMULH X13 X3 X5 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa9442327; (* arm_LDP X7 X8 X25 (Immediate_Offset (iword (&64))) *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0x9bc77c6f; (* arm_UMULH X15 X3 X7 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c70; (* arm_UMULH X16 X3 X8 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0xa9452b29; (* arm_LDP X9 X10 X25 (Immediate_Offset (iword (&80))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c71; (* arm_UMULH X17 X3 X9 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c73; (* arm_UMULH X19 X3 X10 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b0294; (* arm_ADC X20 X20 X11 *) + 0xa9471343; (* arm_LDP X3 X4 X26 (Immediate_Offset (iword (&112))) *) + 0x9b057c6b; (* arm_MUL X11 X3 X5 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9a9f37f5; (* arm_CSET X21 Condition_CS *) + 0x9bc57c6b; (* arm_UMULH X11 X3 X5 *) + 0xab0b01ef; (* arm_ADDS X15 X15 X11 *) + 0x9bc67c6b; (* arm_UMULH X11 X3 X6 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9bc77c6b; (* arm_UMULH X11 X3 X7 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc87c6b; (* arm_UMULH X11 X3 X8 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc97c6b; (* arm_UMULH X11 X3 X9 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bca7c6b; (* arm_UMULH X11 X3 X10 *) + 0x9a0b02b5; (* arm_ADC X21 X21 X11 *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b01ef; (* arm_ADDS X15 X15 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9a9f37f6; (* arm_CSET X22 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b0210; (* arm_ADDS X16 X16 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b02d6; (* arm_ADC X22 X22 X11 *) + 0xa9481343; (* arm_LDP X3 X4 X26 (Immediate_Offset (iword (&128))) *) + 0x9b057c6b; (* arm_MUL X11 X3 X5 *) + 0xab0b0210; (* arm_ADDS X16 X16 X11 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9a9f37e2; (* arm_CSET X2 Condition_CS *) + 0x9bc57c6b; (* arm_UMULH X11 X3 X5 *) + 0xab0b0231; (* arm_ADDS X17 X17 X11 *) + 0x9bc67c6b; (* arm_UMULH X11 X3 X6 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc77c6b; (* arm_UMULH X11 X3 X7 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc87c6b; (* arm_UMULH X11 X3 X8 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bc97c6b; (* arm_UMULH X11 X3 X9 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9bca7c6b; (* arm_UMULH X11 X3 X10 *) + 0x9a0b0042; (* arm_ADC X2 X2 X11 *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b0231; (* arm_ADDS X17 X17 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0042; (* arm_ADCS X2 X2 X11 *) + 0x9a9f37e1; (* arm_CSET X1 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b0273; (* arm_ADDS X19 X19 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0042; (* arm_ADCS X2 X2 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b0021; (* arm_ADC X1 X1 X11 *) + 0xd3607d87; (* arm_LSL X7 X12 32 *) + 0x8b0c00ec; (* arm_ADD X12 X7 X12 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcc7ce7; (* arm_UMULH X7 X7 X12 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0c7cc5; (* arm_MUL X5 X6 X12 *) + 0x9bcc7cc6; (* arm_UMULH X6 X6 X12 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0c00c6; (* arm_ADCS X6 X6 X12 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ad; (* arm_SUBS X13 X13 X7 *) + 0xfa0601ce; (* arm_SBCS X14 X14 X6 *) + 0xfa0501ef; (* arm_SBCS X15 X15 X5 *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xda1f018c; (* arm_SBC X12 X12 XZR *) + 0xd3607da7; (* arm_LSL X7 X13 32 *) + 0x8b0d00ed; (* arm_ADD X13 X7 X13 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcd7ce7; (* arm_UMULH X7 X7 X13 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0d7cc5; (* arm_MUL X5 X6 X13 *) + 0x9bcd7cc6; (* arm_UMULH X6 X6 X13 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0d00c6; (* arm_ADCS X6 X6 X13 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ce; (* arm_SUBS X14 X14 X7 *) + 0xfa0601ef; (* arm_SBCS X15 X15 X6 *) + 0xfa050210; (* arm_SBCS X16 X16 X5 *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda1f01ad; (* arm_SBC X13 X13 XZR *) + 0xd3607dc7; (* arm_LSL X7 X14 32 *) + 0x8b0e00ee; (* arm_ADD X14 X7 X14 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bce7ce7; (* arm_UMULH X7 X7 X14 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0e7cc5; (* arm_MUL X5 X6 X14 *) + 0x9bce7cc6; (* arm_UMULH X6 X6 X14 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0e00c6; (* arm_ADCS X6 X6 X14 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ef; (* arm_SUBS X15 X15 X7 *) + 0xfa060210; (* arm_SBCS X16 X16 X6 *) + 0xfa050231; (* arm_SBCS X17 X17 X5 *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xda1f01ce; (* arm_SBC X14 X14 XZR *) + 0xd3607de7; (* arm_LSL X7 X15 32 *) + 0x8b0f00ef; (* arm_ADD X15 X7 X15 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcf7ce7; (* arm_UMULH X7 X7 X15 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0f7cc5; (* arm_MUL X5 X6 X15 *) + 0x9bcf7cc6; (* arm_UMULH X6 X6 X15 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0f00c6; (* arm_ADCS X6 X6 X15 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb070210; (* arm_SUBS X16 X16 X7 *) + 0xfa060231; (* arm_SBCS X17 X17 X6 *) + 0xfa05018c; (* arm_SBCS X12 X12 X5 *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xda1f01ef; (* arm_SBC X15 X15 XZR *) + 0xd3607e07; (* arm_LSL X7 X16 32 *) + 0x8b1000f0; (* arm_ADD X16 X7 X16 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bd07ce7; (* arm_UMULH X7 X7 X16 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b107cc5; (* arm_MUL X5 X6 X16 *) + 0x9bd07cc6; (* arm_UMULH X6 X6 X16 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba1000c6; (* arm_ADCS X6 X6 X16 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb070231; (* arm_SUBS X17 X17 X7 *) + 0xfa06018c; (* arm_SBCS X12 X12 X6 *) + 0xfa0501ad; (* arm_SBCS X13 X13 X5 *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xda1f0210; (* arm_SBC X16 X16 XZR *) + 0xd3607e27; (* arm_LSL X7 X17 32 *) + 0x8b1100f1; (* arm_ADD X17 X7 X17 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bd17ce7; (* arm_UMULH X7 X7 X17 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b117cc5; (* arm_MUL X5 X6 X17 *) + 0x9bd17cc6; (* arm_UMULH X6 X6 X17 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba1100c6; (* arm_ADCS X6 X6 X17 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb07018c; (* arm_SUBS X12 X12 X7 *) + 0xfa0601ad; (* arm_SBCS X13 X13 X6 *) + 0xfa0501ce; (* arm_SBCS X14 X14 X5 *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xda1f0231; (* arm_SBC X17 X17 XZR *) + 0xab13018c; (* arm_ADDS X12 X12 X19 *) + 0xba1401ad; (* arm_ADCS X13 X13 X20 *) + 0xba1501ce; (* arm_ADCS X14 X14 X21 *) + 0xba1601ef; (* arm_ADCS X15 X15 X22 *) + 0xba020210; (* arm_ADCS X16 X16 X2 *) + 0xba010231; (* arm_ADCS X17 X17 X1 *) + 0x9a1f03ea; (* arm_ADC X10 XZR XZR *) + 0xb26083eb; (* arm_MOV X11 (rvalue (word 18446744069414584321)) *) + 0xab0b0193; (* arm_ADDS X19 X12 X11 *) + 0xb2407feb; (* arm_MOV X11 (rvalue (word 4294967295)) *) + 0xba0b01b4; (* arm_ADCS X20 X13 X11 *) + 0xd280002b; (* arm_MOV X11 (rvalue (word 1)) *) + 0xba0b01d5; (* arm_ADCS X21 X14 X11 *) + 0xba1f01f6; (* arm_ADCS X22 X15 XZR *) + 0xba1f0202; (* arm_ADCS X2 X16 XZR *) + 0xba1f0221; (* arm_ADCS X1 X17 XZR *) + 0xba1f014a; (* arm_ADCS X10 X10 XZR *) + 0x9a93018c; (* arm_CSEL X12 X12 X19 Condition_EQ *) + 0x9a9401ad; (* arm_CSEL X13 X13 X20 Condition_EQ *) + 0x9a9501ce; (* arm_CSEL X14 X14 X21 Condition_EQ *) + 0x9a9601ef; (* arm_CSEL X15 X15 X22 Condition_EQ *) + 0x9a820210; (* arm_CSEL X16 X16 X2 Condition_EQ *) + 0x9a810231; (* arm_CSEL X17 X17 X1 Condition_EQ *) + 0xa91237ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&288))) *) + 0xa9133fee; (* arm_STP X14 X15 SP (Immediate_Offset (iword (&304))) *) + 0xa91447f0; (* arm_STP X16 X17 SP (Immediate_Offset (iword (&320))) *) + 0xa9461323; (* arm_LDP X3 X4 X25 (Immediate_Offset (iword (&96))) *) + 0xa9431b45; (* arm_LDP X5 X6 X26 (Immediate_Offset (iword (&48))) *) + 0x9b057c6c; (* arm_MUL X12 X3 X5 *) + 0x9bc57c6d; (* arm_UMULH X13 X3 X5 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa9442347; (* arm_LDP X7 X8 X26 (Immediate_Offset (iword (&64))) *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0x9bc77c6f; (* arm_UMULH X15 X3 X7 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c70; (* arm_UMULH X16 X3 X8 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0xa9452b49; (* arm_LDP X9 X10 X26 (Immediate_Offset (iword (&80))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c71; (* arm_UMULH X17 X3 X9 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c73; (* arm_UMULH X19 X3 X10 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b0294; (* arm_ADC X20 X20 X11 *) + 0xa9471323; (* arm_LDP X3 X4 X25 (Immediate_Offset (iword (&112))) *) + 0x9b057c6b; (* arm_MUL X11 X3 X5 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9a9f37f5; (* arm_CSET X21 Condition_CS *) + 0x9bc57c6b; (* arm_UMULH X11 X3 X5 *) + 0xab0b01ef; (* arm_ADDS X15 X15 X11 *) + 0x9bc67c6b; (* arm_UMULH X11 X3 X6 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9bc77c6b; (* arm_UMULH X11 X3 X7 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc87c6b; (* arm_UMULH X11 X3 X8 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc97c6b; (* arm_UMULH X11 X3 X9 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bca7c6b; (* arm_UMULH X11 X3 X10 *) + 0x9a0b02b5; (* arm_ADC X21 X21 X11 *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b01ef; (* arm_ADDS X15 X15 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9a9f37f6; (* arm_CSET X22 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b0210; (* arm_ADDS X16 X16 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b02d6; (* arm_ADC X22 X22 X11 *) + 0xa9481323; (* arm_LDP X3 X4 X25 (Immediate_Offset (iword (&128))) *) + 0x9b057c6b; (* arm_MUL X11 X3 X5 *) + 0xab0b0210; (* arm_ADDS X16 X16 X11 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9a9f37e2; (* arm_CSET X2 Condition_CS *) + 0x9bc57c6b; (* arm_UMULH X11 X3 X5 *) + 0xab0b0231; (* arm_ADDS X17 X17 X11 *) + 0x9bc67c6b; (* arm_UMULH X11 X3 X6 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc77c6b; (* arm_UMULH X11 X3 X7 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc87c6b; (* arm_UMULH X11 X3 X8 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bc97c6b; (* arm_UMULH X11 X3 X9 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9bca7c6b; (* arm_UMULH X11 X3 X10 *) + 0x9a0b0042; (* arm_ADC X2 X2 X11 *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b0231; (* arm_ADDS X17 X17 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0042; (* arm_ADCS X2 X2 X11 *) + 0x9a9f37e1; (* arm_CSET X1 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b0273; (* arm_ADDS X19 X19 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0042; (* arm_ADCS X2 X2 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b0021; (* arm_ADC X1 X1 X11 *) + 0xd3607d87; (* arm_LSL X7 X12 32 *) + 0x8b0c00ec; (* arm_ADD X12 X7 X12 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcc7ce7; (* arm_UMULH X7 X7 X12 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0c7cc5; (* arm_MUL X5 X6 X12 *) + 0x9bcc7cc6; (* arm_UMULH X6 X6 X12 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0c00c6; (* arm_ADCS X6 X6 X12 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ad; (* arm_SUBS X13 X13 X7 *) + 0xfa0601ce; (* arm_SBCS X14 X14 X6 *) + 0xfa0501ef; (* arm_SBCS X15 X15 X5 *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xda1f018c; (* arm_SBC X12 X12 XZR *) + 0xd3607da7; (* arm_LSL X7 X13 32 *) + 0x8b0d00ed; (* arm_ADD X13 X7 X13 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcd7ce7; (* arm_UMULH X7 X7 X13 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0d7cc5; (* arm_MUL X5 X6 X13 *) + 0x9bcd7cc6; (* arm_UMULH X6 X6 X13 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0d00c6; (* arm_ADCS X6 X6 X13 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ce; (* arm_SUBS X14 X14 X7 *) + 0xfa0601ef; (* arm_SBCS X15 X15 X6 *) + 0xfa050210; (* arm_SBCS X16 X16 X5 *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda1f01ad; (* arm_SBC X13 X13 XZR *) + 0xd3607dc7; (* arm_LSL X7 X14 32 *) + 0x8b0e00ee; (* arm_ADD X14 X7 X14 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bce7ce7; (* arm_UMULH X7 X7 X14 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0e7cc5; (* arm_MUL X5 X6 X14 *) + 0x9bce7cc6; (* arm_UMULH X6 X6 X14 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0e00c6; (* arm_ADCS X6 X6 X14 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ef; (* arm_SUBS X15 X15 X7 *) + 0xfa060210; (* arm_SBCS X16 X16 X6 *) + 0xfa050231; (* arm_SBCS X17 X17 X5 *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xda1f01ce; (* arm_SBC X14 X14 XZR *) + 0xd3607de7; (* arm_LSL X7 X15 32 *) + 0x8b0f00ef; (* arm_ADD X15 X7 X15 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcf7ce7; (* arm_UMULH X7 X7 X15 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0f7cc5; (* arm_MUL X5 X6 X15 *) + 0x9bcf7cc6; (* arm_UMULH X6 X6 X15 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0f00c6; (* arm_ADCS X6 X6 X15 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb070210; (* arm_SUBS X16 X16 X7 *) + 0xfa060231; (* arm_SBCS X17 X17 X6 *) + 0xfa05018c; (* arm_SBCS X12 X12 X5 *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xda1f01ef; (* arm_SBC X15 X15 XZR *) + 0xd3607e07; (* arm_LSL X7 X16 32 *) + 0x8b1000f0; (* arm_ADD X16 X7 X16 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bd07ce7; (* arm_UMULH X7 X7 X16 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b107cc5; (* arm_MUL X5 X6 X16 *) + 0x9bd07cc6; (* arm_UMULH X6 X6 X16 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba1000c6; (* arm_ADCS X6 X6 X16 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb070231; (* arm_SUBS X17 X17 X7 *) + 0xfa06018c; (* arm_SBCS X12 X12 X6 *) + 0xfa0501ad; (* arm_SBCS X13 X13 X5 *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xda1f0210; (* arm_SBC X16 X16 XZR *) + 0xd3607e27; (* arm_LSL X7 X17 32 *) + 0x8b1100f1; (* arm_ADD X17 X7 X17 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bd17ce7; (* arm_UMULH X7 X7 X17 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b117cc5; (* arm_MUL X5 X6 X17 *) + 0x9bd17cc6; (* arm_UMULH X6 X6 X17 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba1100c6; (* arm_ADCS X6 X6 X17 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb07018c; (* arm_SUBS X12 X12 X7 *) + 0xfa0601ad; (* arm_SBCS X13 X13 X6 *) + 0xfa0501ce; (* arm_SBCS X14 X14 X5 *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xda1f0231; (* arm_SBC X17 X17 XZR *) + 0xab13018c; (* arm_ADDS X12 X12 X19 *) + 0xba1401ad; (* arm_ADCS X13 X13 X20 *) + 0xba1501ce; (* arm_ADCS X14 X14 X21 *) + 0xba1601ef; (* arm_ADCS X15 X15 X22 *) + 0xba020210; (* arm_ADCS X16 X16 X2 *) + 0xba010231; (* arm_ADCS X17 X17 X1 *) + 0x9a1f03ea; (* arm_ADC X10 XZR XZR *) + 0xb26083eb; (* arm_MOV X11 (rvalue (word 18446744069414584321)) *) + 0xab0b0193; (* arm_ADDS X19 X12 X11 *) + 0xb2407feb; (* arm_MOV X11 (rvalue (word 4294967295)) *) + 0xba0b01b4; (* arm_ADCS X20 X13 X11 *) + 0xd280002b; (* arm_MOV X11 (rvalue (word 1)) *) + 0xba0b01d5; (* arm_ADCS X21 X14 X11 *) + 0xba1f01f6; (* arm_ADCS X22 X15 XZR *) + 0xba1f0202; (* arm_ADCS X2 X16 XZR *) + 0xba1f0221; (* arm_ADCS X1 X17 XZR *) + 0xba1f014a; (* arm_ADCS X10 X10 XZR *) + 0x9a93018c; (* arm_CSEL X12 X12 X19 Condition_EQ *) + 0x9a9401ad; (* arm_CSEL X13 X13 X20 Condition_EQ *) + 0x9a9501ce; (* arm_CSEL X14 X14 X21 Condition_EQ *) + 0x9a9601ef; (* arm_CSEL X15 X15 X22 Condition_EQ *) + 0x9a820210; (* arm_CSEL X16 X16 X2 Condition_EQ *) + 0x9a810231; (* arm_CSEL X17 X17 X1 Condition_EQ *) + 0xa90337ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&48))) *) + 0xa9043fee; (* arm_STP X14 X15 SP (Immediate_Offset (iword (&64))) *) + 0xa90547f0; (* arm_STP X16 X17 SP (Immediate_Offset (iword (&80))) *) + 0xa94013e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&0))) *) + 0xa9401b45; (* arm_LDP X5 X6 X26 (Immediate_Offset (iword (&0))) *) + 0x9b057c6c; (* arm_MUL X12 X3 X5 *) + 0x9bc57c6d; (* arm_UMULH X13 X3 X5 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa9412347; (* arm_LDP X7 X8 X26 (Immediate_Offset (iword (&16))) *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0x9bc77c6f; (* arm_UMULH X15 X3 X7 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c70; (* arm_UMULH X16 X3 X8 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0xa9422b49; (* arm_LDP X9 X10 X26 (Immediate_Offset (iword (&32))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c71; (* arm_UMULH X17 X3 X9 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c73; (* arm_UMULH X19 X3 X10 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b0294; (* arm_ADC X20 X20 X11 *) + 0xa94113e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&16))) *) + 0x9b057c6b; (* arm_MUL X11 X3 X5 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9a9f37f5; (* arm_CSET X21 Condition_CS *) + 0x9bc57c6b; (* arm_UMULH X11 X3 X5 *) + 0xab0b01ef; (* arm_ADDS X15 X15 X11 *) + 0x9bc67c6b; (* arm_UMULH X11 X3 X6 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9bc77c6b; (* arm_UMULH X11 X3 X7 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc87c6b; (* arm_UMULH X11 X3 X8 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc97c6b; (* arm_UMULH X11 X3 X9 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bca7c6b; (* arm_UMULH X11 X3 X10 *) + 0x9a0b02b5; (* arm_ADC X21 X21 X11 *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b01ef; (* arm_ADDS X15 X15 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9a9f37f6; (* arm_CSET X22 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b0210; (* arm_ADDS X16 X16 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b02d6; (* arm_ADC X22 X22 X11 *) + 0xa94213e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&32))) *) + 0x9b057c6b; (* arm_MUL X11 X3 X5 *) + 0xab0b0210; (* arm_ADDS X16 X16 X11 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9a9f37e2; (* arm_CSET X2 Condition_CS *) + 0x9bc57c6b; (* arm_UMULH X11 X3 X5 *) + 0xab0b0231; (* arm_ADDS X17 X17 X11 *) + 0x9bc67c6b; (* arm_UMULH X11 X3 X6 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc77c6b; (* arm_UMULH X11 X3 X7 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc87c6b; (* arm_UMULH X11 X3 X8 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bc97c6b; (* arm_UMULH X11 X3 X9 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9bca7c6b; (* arm_UMULH X11 X3 X10 *) + 0x9a0b0042; (* arm_ADC X2 X2 X11 *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b0231; (* arm_ADDS X17 X17 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0042; (* arm_ADCS X2 X2 X11 *) + 0x9a9f37e1; (* arm_CSET X1 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b0273; (* arm_ADDS X19 X19 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0042; (* arm_ADCS X2 X2 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b0021; (* arm_ADC X1 X1 X11 *) + 0xd3607d87; (* arm_LSL X7 X12 32 *) + 0x8b0c00ec; (* arm_ADD X12 X7 X12 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcc7ce7; (* arm_UMULH X7 X7 X12 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0c7cc5; (* arm_MUL X5 X6 X12 *) + 0x9bcc7cc6; (* arm_UMULH X6 X6 X12 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0c00c6; (* arm_ADCS X6 X6 X12 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ad; (* arm_SUBS X13 X13 X7 *) + 0xfa0601ce; (* arm_SBCS X14 X14 X6 *) + 0xfa0501ef; (* arm_SBCS X15 X15 X5 *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xda1f018c; (* arm_SBC X12 X12 XZR *) + 0xd3607da7; (* arm_LSL X7 X13 32 *) + 0x8b0d00ed; (* arm_ADD X13 X7 X13 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcd7ce7; (* arm_UMULH X7 X7 X13 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0d7cc5; (* arm_MUL X5 X6 X13 *) + 0x9bcd7cc6; (* arm_UMULH X6 X6 X13 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0d00c6; (* arm_ADCS X6 X6 X13 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ce; (* arm_SUBS X14 X14 X7 *) + 0xfa0601ef; (* arm_SBCS X15 X15 X6 *) + 0xfa050210; (* arm_SBCS X16 X16 X5 *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda1f01ad; (* arm_SBC X13 X13 XZR *) + 0xd3607dc7; (* arm_LSL X7 X14 32 *) + 0x8b0e00ee; (* arm_ADD X14 X7 X14 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bce7ce7; (* arm_UMULH X7 X7 X14 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0e7cc5; (* arm_MUL X5 X6 X14 *) + 0x9bce7cc6; (* arm_UMULH X6 X6 X14 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0e00c6; (* arm_ADCS X6 X6 X14 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ef; (* arm_SUBS X15 X15 X7 *) + 0xfa060210; (* arm_SBCS X16 X16 X6 *) + 0xfa050231; (* arm_SBCS X17 X17 X5 *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xda1f01ce; (* arm_SBC X14 X14 XZR *) + 0xd3607de7; (* arm_LSL X7 X15 32 *) + 0x8b0f00ef; (* arm_ADD X15 X7 X15 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcf7ce7; (* arm_UMULH X7 X7 X15 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0f7cc5; (* arm_MUL X5 X6 X15 *) + 0x9bcf7cc6; (* arm_UMULH X6 X6 X15 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0f00c6; (* arm_ADCS X6 X6 X15 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb070210; (* arm_SUBS X16 X16 X7 *) + 0xfa060231; (* arm_SBCS X17 X17 X6 *) + 0xfa05018c; (* arm_SBCS X12 X12 X5 *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xda1f01ef; (* arm_SBC X15 X15 XZR *) + 0xd3607e07; (* arm_LSL X7 X16 32 *) + 0x8b1000f0; (* arm_ADD X16 X7 X16 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bd07ce7; (* arm_UMULH X7 X7 X16 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b107cc5; (* arm_MUL X5 X6 X16 *) + 0x9bd07cc6; (* arm_UMULH X6 X6 X16 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba1000c6; (* arm_ADCS X6 X6 X16 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb070231; (* arm_SUBS X17 X17 X7 *) + 0xfa06018c; (* arm_SBCS X12 X12 X6 *) + 0xfa0501ad; (* arm_SBCS X13 X13 X5 *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xda1f0210; (* arm_SBC X16 X16 XZR *) + 0xd3607e27; (* arm_LSL X7 X17 32 *) + 0x8b1100f1; (* arm_ADD X17 X7 X17 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bd17ce7; (* arm_UMULH X7 X7 X17 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b117cc5; (* arm_MUL X5 X6 X17 *) + 0x9bd17cc6; (* arm_UMULH X6 X6 X17 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba1100c6; (* arm_ADCS X6 X6 X17 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb07018c; (* arm_SUBS X12 X12 X7 *) + 0xfa0601ad; (* arm_SBCS X13 X13 X6 *) + 0xfa0501ce; (* arm_SBCS X14 X14 X5 *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xda1f0231; (* arm_SBC X17 X17 XZR *) + 0xab13018c; (* arm_ADDS X12 X12 X19 *) + 0xba1401ad; (* arm_ADCS X13 X13 X20 *) + 0xba1501ce; (* arm_ADCS X14 X14 X21 *) + 0xba1601ef; (* arm_ADCS X15 X15 X22 *) + 0xba020210; (* arm_ADCS X16 X16 X2 *) + 0xba010231; (* arm_ADCS X17 X17 X1 *) + 0x9a1f03ea; (* arm_ADC X10 XZR XZR *) + 0xb26083eb; (* arm_MOV X11 (rvalue (word 18446744069414584321)) *) + 0xab0b0193; (* arm_ADDS X19 X12 X11 *) + 0xb2407feb; (* arm_MOV X11 (rvalue (word 4294967295)) *) + 0xba0b01b4; (* arm_ADCS X20 X13 X11 *) + 0xd280002b; (* arm_MOV X11 (rvalue (word 1)) *) + 0xba0b01d5; (* arm_ADCS X21 X14 X11 *) + 0xba1f01f6; (* arm_ADCS X22 X15 XZR *) + 0xba1f0202; (* arm_ADCS X2 X16 XZR *) + 0xba1f0221; (* arm_ADCS X1 X17 XZR *) + 0xba1f014a; (* arm_ADCS X10 X10 XZR *) + 0x9a93018c; (* arm_CSEL X12 X12 X19 Condition_EQ *) + 0x9a9401ad; (* arm_CSEL X13 X13 X20 Condition_EQ *) + 0x9a9501ce; (* arm_CSEL X14 X14 X21 Condition_EQ *) + 0x9a9601ef; (* arm_CSEL X15 X15 X22 Condition_EQ *) + 0x9a820210; (* arm_CSEL X16 X16 X2 Condition_EQ *) + 0x9a810231; (* arm_CSEL X17 X17 X1 Condition_EQ *) + 0xa90637ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&96))) *) + 0xa9073fee; (* arm_STP X14 X15 SP (Immediate_Offset (iword (&112))) *) + 0xa90847f0; (* arm_STP X16 X17 SP (Immediate_Offset (iword (&128))) *) + 0xa94f13e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&240))) *) + 0xa9401b25; (* arm_LDP X5 X6 X25 (Immediate_Offset (iword (&0))) *) + 0x9b057c6c; (* arm_MUL X12 X3 X5 *) + 0x9bc57c6d; (* arm_UMULH X13 X3 X5 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa9412327; (* arm_LDP X7 X8 X25 (Immediate_Offset (iword (&16))) *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0x9bc77c6f; (* arm_UMULH X15 X3 X7 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c70; (* arm_UMULH X16 X3 X8 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0xa9422b29; (* arm_LDP X9 X10 X25 (Immediate_Offset (iword (&32))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c71; (* arm_UMULH X17 X3 X9 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c73; (* arm_UMULH X19 X3 X10 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b0294; (* arm_ADC X20 X20 X11 *) + 0xa95013e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&256))) *) + 0x9b057c6b; (* arm_MUL X11 X3 X5 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9a9f37f5; (* arm_CSET X21 Condition_CS *) + 0x9bc57c6b; (* arm_UMULH X11 X3 X5 *) + 0xab0b01ef; (* arm_ADDS X15 X15 X11 *) + 0x9bc67c6b; (* arm_UMULH X11 X3 X6 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9bc77c6b; (* arm_UMULH X11 X3 X7 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc87c6b; (* arm_UMULH X11 X3 X8 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc97c6b; (* arm_UMULH X11 X3 X9 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bca7c6b; (* arm_UMULH X11 X3 X10 *) + 0x9a0b02b5; (* arm_ADC X21 X21 X11 *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b01ef; (* arm_ADDS X15 X15 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9a9f37f6; (* arm_CSET X22 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b0210; (* arm_ADDS X16 X16 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b02d6; (* arm_ADC X22 X22 X11 *) + 0xa95113e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&272))) *) + 0x9b057c6b; (* arm_MUL X11 X3 X5 *) + 0xab0b0210; (* arm_ADDS X16 X16 X11 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9a9f37e2; (* arm_CSET X2 Condition_CS *) + 0x9bc57c6b; (* arm_UMULH X11 X3 X5 *) + 0xab0b0231; (* arm_ADDS X17 X17 X11 *) + 0x9bc67c6b; (* arm_UMULH X11 X3 X6 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc77c6b; (* arm_UMULH X11 X3 X7 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc87c6b; (* arm_UMULH X11 X3 X8 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bc97c6b; (* arm_UMULH X11 X3 X9 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9bca7c6b; (* arm_UMULH X11 X3 X10 *) + 0x9a0b0042; (* arm_ADC X2 X2 X11 *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b0231; (* arm_ADDS X17 X17 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0042; (* arm_ADCS X2 X2 X11 *) + 0x9a9f37e1; (* arm_CSET X1 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b0273; (* arm_ADDS X19 X19 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0042; (* arm_ADCS X2 X2 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b0021; (* arm_ADC X1 X1 X11 *) + 0xd3607d87; (* arm_LSL X7 X12 32 *) + 0x8b0c00ec; (* arm_ADD X12 X7 X12 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcc7ce7; (* arm_UMULH X7 X7 X12 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0c7cc5; (* arm_MUL X5 X6 X12 *) + 0x9bcc7cc6; (* arm_UMULH X6 X6 X12 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0c00c6; (* arm_ADCS X6 X6 X12 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ad; (* arm_SUBS X13 X13 X7 *) + 0xfa0601ce; (* arm_SBCS X14 X14 X6 *) + 0xfa0501ef; (* arm_SBCS X15 X15 X5 *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xda1f018c; (* arm_SBC X12 X12 XZR *) + 0xd3607da7; (* arm_LSL X7 X13 32 *) + 0x8b0d00ed; (* arm_ADD X13 X7 X13 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcd7ce7; (* arm_UMULH X7 X7 X13 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0d7cc5; (* arm_MUL X5 X6 X13 *) + 0x9bcd7cc6; (* arm_UMULH X6 X6 X13 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0d00c6; (* arm_ADCS X6 X6 X13 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ce; (* arm_SUBS X14 X14 X7 *) + 0xfa0601ef; (* arm_SBCS X15 X15 X6 *) + 0xfa050210; (* arm_SBCS X16 X16 X5 *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda1f01ad; (* arm_SBC X13 X13 XZR *) + 0xd3607dc7; (* arm_LSL X7 X14 32 *) + 0x8b0e00ee; (* arm_ADD X14 X7 X14 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bce7ce7; (* arm_UMULH X7 X7 X14 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0e7cc5; (* arm_MUL X5 X6 X14 *) + 0x9bce7cc6; (* arm_UMULH X6 X6 X14 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0e00c6; (* arm_ADCS X6 X6 X14 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ef; (* arm_SUBS X15 X15 X7 *) + 0xfa060210; (* arm_SBCS X16 X16 X6 *) + 0xfa050231; (* arm_SBCS X17 X17 X5 *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xda1f01ce; (* arm_SBC X14 X14 XZR *) + 0xd3607de7; (* arm_LSL X7 X15 32 *) + 0x8b0f00ef; (* arm_ADD X15 X7 X15 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcf7ce7; (* arm_UMULH X7 X7 X15 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0f7cc5; (* arm_MUL X5 X6 X15 *) + 0x9bcf7cc6; (* arm_UMULH X6 X6 X15 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0f00c6; (* arm_ADCS X6 X6 X15 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb070210; (* arm_SUBS X16 X16 X7 *) + 0xfa060231; (* arm_SBCS X17 X17 X6 *) + 0xfa05018c; (* arm_SBCS X12 X12 X5 *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xda1f01ef; (* arm_SBC X15 X15 XZR *) + 0xd3607e07; (* arm_LSL X7 X16 32 *) + 0x8b1000f0; (* arm_ADD X16 X7 X16 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bd07ce7; (* arm_UMULH X7 X7 X16 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b107cc5; (* arm_MUL X5 X6 X16 *) + 0x9bd07cc6; (* arm_UMULH X6 X6 X16 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba1000c6; (* arm_ADCS X6 X6 X16 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb070231; (* arm_SUBS X17 X17 X7 *) + 0xfa06018c; (* arm_SBCS X12 X12 X6 *) + 0xfa0501ad; (* arm_SBCS X13 X13 X5 *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xda1f0210; (* arm_SBC X16 X16 XZR *) + 0xd3607e27; (* arm_LSL X7 X17 32 *) + 0x8b1100f1; (* arm_ADD X17 X7 X17 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bd17ce7; (* arm_UMULH X7 X7 X17 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b117cc5; (* arm_MUL X5 X6 X17 *) + 0x9bd17cc6; (* arm_UMULH X6 X6 X17 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba1100c6; (* arm_ADCS X6 X6 X17 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb07018c; (* arm_SUBS X12 X12 X7 *) + 0xfa0601ad; (* arm_SBCS X13 X13 X6 *) + 0xfa0501ce; (* arm_SBCS X14 X14 X5 *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xda1f0231; (* arm_SBC X17 X17 XZR *) + 0xab13018c; (* arm_ADDS X12 X12 X19 *) + 0xba1401ad; (* arm_ADCS X13 X13 X20 *) + 0xba1501ce; (* arm_ADCS X14 X14 X21 *) + 0xba1601ef; (* arm_ADCS X15 X15 X22 *) + 0xba020210; (* arm_ADCS X16 X16 X2 *) + 0xba010231; (* arm_ADCS X17 X17 X1 *) + 0x9a1f03ea; (* arm_ADC X10 XZR XZR *) + 0xb26083eb; (* arm_MOV X11 (rvalue (word 18446744069414584321)) *) + 0xab0b0193; (* arm_ADDS X19 X12 X11 *) + 0xb2407feb; (* arm_MOV X11 (rvalue (word 4294967295)) *) + 0xba0b01b4; (* arm_ADCS X20 X13 X11 *) + 0xd280002b; (* arm_MOV X11 (rvalue (word 1)) *) + 0xba0b01d5; (* arm_ADCS X21 X14 X11 *) + 0xba1f01f6; (* arm_ADCS X22 X15 XZR *) + 0xba1f0202; (* arm_ADCS X2 X16 XZR *) + 0xba1f0221; (* arm_ADCS X1 X17 XZR *) + 0xba1f014a; (* arm_ADCS X10 X10 XZR *) + 0x9a93018c; (* arm_CSEL X12 X12 X19 Condition_EQ *) + 0x9a9401ad; (* arm_CSEL X13 X13 X20 Condition_EQ *) + 0x9a9501ce; (* arm_CSEL X14 X14 X21 Condition_EQ *) + 0x9a9601ef; (* arm_CSEL X15 X15 X22 Condition_EQ *) + 0x9a820210; (* arm_CSEL X16 X16 X2 Condition_EQ *) + 0x9a810231; (* arm_CSEL X17 X17 X1 Condition_EQ *) + 0xa90c37ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&192))) *) + 0xa90d3fee; (* arm_STP X14 X15 SP (Immediate_Offset (iword (&208))) *) + 0xa90e47f0; (* arm_STP X16 X17 SP (Immediate_Offset (iword (&224))) *) + 0xa94013e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&0))) *) + 0xa9431be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&48))) *) + 0x9b057c6c; (* arm_MUL X12 X3 X5 *) + 0x9bc57c6d; (* arm_UMULH X13 X3 X5 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa94423e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&64))) *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0x9bc77c6f; (* arm_UMULH X15 X3 X7 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c70; (* arm_UMULH X16 X3 X8 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0xa9452be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&80))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c71; (* arm_UMULH X17 X3 X9 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c73; (* arm_UMULH X19 X3 X10 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b0294; (* arm_ADC X20 X20 X11 *) + 0xa94113e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&16))) *) + 0x9b057c6b; (* arm_MUL X11 X3 X5 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9a9f37f5; (* arm_CSET X21 Condition_CS *) + 0x9bc57c6b; (* arm_UMULH X11 X3 X5 *) + 0xab0b01ef; (* arm_ADDS X15 X15 X11 *) + 0x9bc67c6b; (* arm_UMULH X11 X3 X6 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9bc77c6b; (* arm_UMULH X11 X3 X7 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc87c6b; (* arm_UMULH X11 X3 X8 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc97c6b; (* arm_UMULH X11 X3 X9 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bca7c6b; (* arm_UMULH X11 X3 X10 *) + 0x9a0b02b5; (* arm_ADC X21 X21 X11 *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b01ef; (* arm_ADDS X15 X15 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9a9f37f6; (* arm_CSET X22 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b0210; (* arm_ADDS X16 X16 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b02d6; (* arm_ADC X22 X22 X11 *) + 0xa94213e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&32))) *) + 0x9b057c6b; (* arm_MUL X11 X3 X5 *) + 0xab0b0210; (* arm_ADDS X16 X16 X11 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9a9f37e2; (* arm_CSET X2 Condition_CS *) + 0x9bc57c6b; (* arm_UMULH X11 X3 X5 *) + 0xab0b0231; (* arm_ADDS X17 X17 X11 *) + 0x9bc67c6b; (* arm_UMULH X11 X3 X6 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc77c6b; (* arm_UMULH X11 X3 X7 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc87c6b; (* arm_UMULH X11 X3 X8 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bc97c6b; (* arm_UMULH X11 X3 X9 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9bca7c6b; (* arm_UMULH X11 X3 X10 *) + 0x9a0b0042; (* arm_ADC X2 X2 X11 *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b0231; (* arm_ADDS X17 X17 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0042; (* arm_ADCS X2 X2 X11 *) + 0x9a9f37e1; (* arm_CSET X1 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b0273; (* arm_ADDS X19 X19 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0042; (* arm_ADCS X2 X2 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b0021; (* arm_ADC X1 X1 X11 *) + 0xd3607d87; (* arm_LSL X7 X12 32 *) + 0x8b0c00ec; (* arm_ADD X12 X7 X12 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcc7ce7; (* arm_UMULH X7 X7 X12 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0c7cc5; (* arm_MUL X5 X6 X12 *) + 0x9bcc7cc6; (* arm_UMULH X6 X6 X12 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0c00c6; (* arm_ADCS X6 X6 X12 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ad; (* arm_SUBS X13 X13 X7 *) + 0xfa0601ce; (* arm_SBCS X14 X14 X6 *) + 0xfa0501ef; (* arm_SBCS X15 X15 X5 *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xda1f018c; (* arm_SBC X12 X12 XZR *) + 0xd3607da7; (* arm_LSL X7 X13 32 *) + 0x8b0d00ed; (* arm_ADD X13 X7 X13 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcd7ce7; (* arm_UMULH X7 X7 X13 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0d7cc5; (* arm_MUL X5 X6 X13 *) + 0x9bcd7cc6; (* arm_UMULH X6 X6 X13 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0d00c6; (* arm_ADCS X6 X6 X13 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ce; (* arm_SUBS X14 X14 X7 *) + 0xfa0601ef; (* arm_SBCS X15 X15 X6 *) + 0xfa050210; (* arm_SBCS X16 X16 X5 *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda1f01ad; (* arm_SBC X13 X13 XZR *) + 0xd3607dc7; (* arm_LSL X7 X14 32 *) + 0x8b0e00ee; (* arm_ADD X14 X7 X14 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bce7ce7; (* arm_UMULH X7 X7 X14 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0e7cc5; (* arm_MUL X5 X6 X14 *) + 0x9bce7cc6; (* arm_UMULH X6 X6 X14 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0e00c6; (* arm_ADCS X6 X6 X14 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ef; (* arm_SUBS X15 X15 X7 *) + 0xfa060210; (* arm_SBCS X16 X16 X6 *) + 0xfa050231; (* arm_SBCS X17 X17 X5 *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xda1f01ce; (* arm_SBC X14 X14 XZR *) + 0xd3607de7; (* arm_LSL X7 X15 32 *) + 0x8b0f00ef; (* arm_ADD X15 X7 X15 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcf7ce7; (* arm_UMULH X7 X7 X15 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0f7cc5; (* arm_MUL X5 X6 X15 *) + 0x9bcf7cc6; (* arm_UMULH X6 X6 X15 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0f00c6; (* arm_ADCS X6 X6 X15 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb070210; (* arm_SUBS X16 X16 X7 *) + 0xfa060231; (* arm_SBCS X17 X17 X6 *) + 0xfa05018c; (* arm_SBCS X12 X12 X5 *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xda1f01ef; (* arm_SBC X15 X15 XZR *) + 0xd3607e07; (* arm_LSL X7 X16 32 *) + 0x8b1000f0; (* arm_ADD X16 X7 X16 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bd07ce7; (* arm_UMULH X7 X7 X16 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b107cc5; (* arm_MUL X5 X6 X16 *) + 0x9bd07cc6; (* arm_UMULH X6 X6 X16 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba1000c6; (* arm_ADCS X6 X6 X16 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb070231; (* arm_SUBS X17 X17 X7 *) + 0xfa06018c; (* arm_SBCS X12 X12 X6 *) + 0xfa0501ad; (* arm_SBCS X13 X13 X5 *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xda1f0210; (* arm_SBC X16 X16 XZR *) + 0xd3607e27; (* arm_LSL X7 X17 32 *) + 0x8b1100f1; (* arm_ADD X17 X7 X17 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bd17ce7; (* arm_UMULH X7 X7 X17 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b117cc5; (* arm_MUL X5 X6 X17 *) + 0x9bd17cc6; (* arm_UMULH X6 X6 X17 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba1100c6; (* arm_ADCS X6 X6 X17 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb07018c; (* arm_SUBS X12 X12 X7 *) + 0xfa0601ad; (* arm_SBCS X13 X13 X6 *) + 0xfa0501ce; (* arm_SBCS X14 X14 X5 *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xda1f0231; (* arm_SBC X17 X17 XZR *) + 0xab13018c; (* arm_ADDS X12 X12 X19 *) + 0xba1401ad; (* arm_ADCS X13 X13 X20 *) + 0xba1501ce; (* arm_ADCS X14 X14 X21 *) + 0xba1601ef; (* arm_ADCS X15 X15 X22 *) + 0xba020210; (* arm_ADCS X16 X16 X2 *) + 0xba010231; (* arm_ADCS X17 X17 X1 *) + 0x9a1f03ea; (* arm_ADC X10 XZR XZR *) + 0xb26083eb; (* arm_MOV X11 (rvalue (word 18446744069414584321)) *) + 0xab0b0193; (* arm_ADDS X19 X12 X11 *) + 0xb2407feb; (* arm_MOV X11 (rvalue (word 4294967295)) *) + 0xba0b01b4; (* arm_ADCS X20 X13 X11 *) + 0xd280002b; (* arm_MOV X11 (rvalue (word 1)) *) + 0xba0b01d5; (* arm_ADCS X21 X14 X11 *) + 0xba1f01f6; (* arm_ADCS X22 X15 XZR *) + 0xba1f0202; (* arm_ADCS X2 X16 XZR *) + 0xba1f0221; (* arm_ADCS X1 X17 XZR *) + 0xba1f014a; (* arm_ADCS X10 X10 XZR *) + 0x9a93018c; (* arm_CSEL X12 X12 X19 Condition_EQ *) + 0x9a9401ad; (* arm_CSEL X13 X13 X20 Condition_EQ *) + 0x9a9501ce; (* arm_CSEL X14 X14 X21 Condition_EQ *) + 0x9a9601ef; (* arm_CSEL X15 X15 X22 Condition_EQ *) + 0x9a820210; (* arm_CSEL X16 X16 X2 Condition_EQ *) + 0x9a810231; (* arm_CSEL X17 X17 X1 Condition_EQ *) + 0xa90337ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&48))) *) + 0xa9043fee; (* arm_STP X14 X15 SP (Immediate_Offset (iword (&64))) *) + 0xa90547f0; (* arm_STP X16 X17 SP (Immediate_Offset (iword (&80))) *) + 0xa94f13e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&240))) *) + 0xa9521be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&288))) *) + 0x9b057c6c; (* arm_MUL X12 X3 X5 *) + 0x9bc57c6d; (* arm_UMULH X13 X3 X5 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa95323e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&304))) *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0x9bc77c6f; (* arm_UMULH X15 X3 X7 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c70; (* arm_UMULH X16 X3 X8 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0xa9542be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&320))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c71; (* arm_UMULH X17 X3 X9 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c73; (* arm_UMULH X19 X3 X10 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b0294; (* arm_ADC X20 X20 X11 *) + 0xa95013e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&256))) *) + 0x9b057c6b; (* arm_MUL X11 X3 X5 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9a9f37f5; (* arm_CSET X21 Condition_CS *) + 0x9bc57c6b; (* arm_UMULH X11 X3 X5 *) + 0xab0b01ef; (* arm_ADDS X15 X15 X11 *) + 0x9bc67c6b; (* arm_UMULH X11 X3 X6 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9bc77c6b; (* arm_UMULH X11 X3 X7 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc87c6b; (* arm_UMULH X11 X3 X8 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc97c6b; (* arm_UMULH X11 X3 X9 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bca7c6b; (* arm_UMULH X11 X3 X10 *) + 0x9a0b02b5; (* arm_ADC X21 X21 X11 *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b01ef; (* arm_ADDS X15 X15 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9a9f37f6; (* arm_CSET X22 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b0210; (* arm_ADDS X16 X16 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b02d6; (* arm_ADC X22 X22 X11 *) + 0xa95113e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&272))) *) + 0x9b057c6b; (* arm_MUL X11 X3 X5 *) + 0xab0b0210; (* arm_ADDS X16 X16 X11 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9a9f37e2; (* arm_CSET X2 Condition_CS *) + 0x9bc57c6b; (* arm_UMULH X11 X3 X5 *) + 0xab0b0231; (* arm_ADDS X17 X17 X11 *) + 0x9bc67c6b; (* arm_UMULH X11 X3 X6 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc77c6b; (* arm_UMULH X11 X3 X7 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc87c6b; (* arm_UMULH X11 X3 X8 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bc97c6b; (* arm_UMULH X11 X3 X9 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9bca7c6b; (* arm_UMULH X11 X3 X10 *) + 0x9a0b0042; (* arm_ADC X2 X2 X11 *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b0231; (* arm_ADDS X17 X17 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0042; (* arm_ADCS X2 X2 X11 *) + 0x9a9f37e1; (* arm_CSET X1 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b0273; (* arm_ADDS X19 X19 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0042; (* arm_ADCS X2 X2 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b0021; (* arm_ADC X1 X1 X11 *) + 0xd3607d87; (* arm_LSL X7 X12 32 *) + 0x8b0c00ec; (* arm_ADD X12 X7 X12 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcc7ce7; (* arm_UMULH X7 X7 X12 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0c7cc5; (* arm_MUL X5 X6 X12 *) + 0x9bcc7cc6; (* arm_UMULH X6 X6 X12 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0c00c6; (* arm_ADCS X6 X6 X12 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ad; (* arm_SUBS X13 X13 X7 *) + 0xfa0601ce; (* arm_SBCS X14 X14 X6 *) + 0xfa0501ef; (* arm_SBCS X15 X15 X5 *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xda1f018c; (* arm_SBC X12 X12 XZR *) + 0xd3607da7; (* arm_LSL X7 X13 32 *) + 0x8b0d00ed; (* arm_ADD X13 X7 X13 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcd7ce7; (* arm_UMULH X7 X7 X13 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0d7cc5; (* arm_MUL X5 X6 X13 *) + 0x9bcd7cc6; (* arm_UMULH X6 X6 X13 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0d00c6; (* arm_ADCS X6 X6 X13 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ce; (* arm_SUBS X14 X14 X7 *) + 0xfa0601ef; (* arm_SBCS X15 X15 X6 *) + 0xfa050210; (* arm_SBCS X16 X16 X5 *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda1f01ad; (* arm_SBC X13 X13 XZR *) + 0xd3607dc7; (* arm_LSL X7 X14 32 *) + 0x8b0e00ee; (* arm_ADD X14 X7 X14 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bce7ce7; (* arm_UMULH X7 X7 X14 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0e7cc5; (* arm_MUL X5 X6 X14 *) + 0x9bce7cc6; (* arm_UMULH X6 X6 X14 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0e00c6; (* arm_ADCS X6 X6 X14 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ef; (* arm_SUBS X15 X15 X7 *) + 0xfa060210; (* arm_SBCS X16 X16 X6 *) + 0xfa050231; (* arm_SBCS X17 X17 X5 *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xda1f01ce; (* arm_SBC X14 X14 XZR *) + 0xd3607de7; (* arm_LSL X7 X15 32 *) + 0x8b0f00ef; (* arm_ADD X15 X7 X15 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcf7ce7; (* arm_UMULH X7 X7 X15 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0f7cc5; (* arm_MUL X5 X6 X15 *) + 0x9bcf7cc6; (* arm_UMULH X6 X6 X15 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0f00c6; (* arm_ADCS X6 X6 X15 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb070210; (* arm_SUBS X16 X16 X7 *) + 0xfa060231; (* arm_SBCS X17 X17 X6 *) + 0xfa05018c; (* arm_SBCS X12 X12 X5 *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xda1f01ef; (* arm_SBC X15 X15 XZR *) + 0xd3607e07; (* arm_LSL X7 X16 32 *) + 0x8b1000f0; (* arm_ADD X16 X7 X16 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bd07ce7; (* arm_UMULH X7 X7 X16 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b107cc5; (* arm_MUL X5 X6 X16 *) + 0x9bd07cc6; (* arm_UMULH X6 X6 X16 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba1000c6; (* arm_ADCS X6 X6 X16 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb070231; (* arm_SUBS X17 X17 X7 *) + 0xfa06018c; (* arm_SBCS X12 X12 X6 *) + 0xfa0501ad; (* arm_SBCS X13 X13 X5 *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xda1f0210; (* arm_SBC X16 X16 XZR *) + 0xd3607e27; (* arm_LSL X7 X17 32 *) + 0x8b1100f1; (* arm_ADD X17 X7 X17 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bd17ce7; (* arm_UMULH X7 X7 X17 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b117cc5; (* arm_MUL X5 X6 X17 *) + 0x9bd17cc6; (* arm_UMULH X6 X6 X17 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba1100c6; (* arm_ADCS X6 X6 X17 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb07018c; (* arm_SUBS X12 X12 X7 *) + 0xfa0601ad; (* arm_SBCS X13 X13 X6 *) + 0xfa0501ce; (* arm_SBCS X14 X14 X5 *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xda1f0231; (* arm_SBC X17 X17 XZR *) + 0xab13018c; (* arm_ADDS X12 X12 X19 *) + 0xba1401ad; (* arm_ADCS X13 X13 X20 *) + 0xba1501ce; (* arm_ADCS X14 X14 X21 *) + 0xba1601ef; (* arm_ADCS X15 X15 X22 *) + 0xba020210; (* arm_ADCS X16 X16 X2 *) + 0xba010231; (* arm_ADCS X17 X17 X1 *) + 0x9a1f03ea; (* arm_ADC X10 XZR XZR *) + 0xb26083eb; (* arm_MOV X11 (rvalue (word 18446744069414584321)) *) + 0xab0b0193; (* arm_ADDS X19 X12 X11 *) + 0xb2407feb; (* arm_MOV X11 (rvalue (word 4294967295)) *) + 0xba0b01b4; (* arm_ADCS X20 X13 X11 *) + 0xd280002b; (* arm_MOV X11 (rvalue (word 1)) *) + 0xba0b01d5; (* arm_ADCS X21 X14 X11 *) + 0xba1f01f6; (* arm_ADCS X22 X15 XZR *) + 0xba1f0202; (* arm_ADCS X2 X16 XZR *) + 0xba1f0221; (* arm_ADCS X1 X17 XZR *) + 0xba1f014a; (* arm_ADCS X10 X10 XZR *) + 0x9a93018c; (* arm_CSEL X12 X12 X19 Condition_EQ *) + 0x9a9401ad; (* arm_CSEL X13 X13 X20 Condition_EQ *) + 0x9a9501ce; (* arm_CSEL X14 X14 X21 Condition_EQ *) + 0x9a9601ef; (* arm_CSEL X15 X15 X22 Condition_EQ *) + 0x9a820210; (* arm_CSEL X16 X16 X2 Condition_EQ *) + 0x9a810231; (* arm_CSEL X17 X17 X1 Condition_EQ *) + 0xa91237ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&288))) *) + 0xa9133fee; (* arm_STP X14 X15 SP (Immediate_Offset (iword (&304))) *) + 0xa91447f0; (* arm_STP X16 X17 SP (Immediate_Offset (iword (&320))) *) + 0xa9461be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&96))) *) + 0xa94c0fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&192))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa94723e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&112))) *) + 0xa94d0fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&208))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xa9482be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&128))) *) + 0xa94e0fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&224))) *) + 0xfa040129; (* arm_SBCS X9 X9 X4 *) + 0xfa03014a; (* arm_SBCS X10 X10 X3 *) + 0xda9f23e3; (* arm_CSETM X3 Condition_CC *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0xab0400a5; (* arm_ADDS X5 X5 X4 *) + 0xca030084; (* arm_EOR X4 X4 X3 *) + 0xba0400c6; (* arm_ADCS X6 X6 X4 *) + 0x92800024; (* arm_MOVN X4 (word 1) 0 *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0xba0400e7; (* arm_ADCS X7 X7 X4 *) + 0xba030108; (* arm_ADCS X8 X8 X3 *) + 0xba030129; (* arm_ADCS X9 X9 X3 *) + 0x9a03014a; (* arm_ADC X10 X10 X3 *) + 0xa90f1be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&240))) *) + 0xa91023e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&256))) *) + 0xa9112be9; (* arm_STP X9 X10 SP (Immediate_Offset (iword (&272))) *) + 0xa9431be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&48))) *) + 0xa9520fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&288))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa94423e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&64))) *) + 0xa9530fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&304))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xa9452be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&80))) *) + 0xa9540fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&320))) *) + 0xfa040129; (* arm_SBCS X9 X9 X4 *) + 0xfa03014a; (* arm_SBCS X10 X10 X3 *) + 0xda9f23e3; (* arm_CSETM X3 Condition_CC *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0xab0400a5; (* arm_ADDS X5 X5 X4 *) + 0xca030084; (* arm_EOR X4 X4 X3 *) + 0xba0400c6; (* arm_ADCS X6 X6 X4 *) + 0x92800024; (* arm_MOVN X4 (word 1) 0 *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0xba0400e7; (* arm_ADCS X7 X7 X4 *) + 0xba030108; (* arm_ADCS X8 X8 X3 *) + 0xba030129; (* arm_ADCS X9 X9 X3 *) + 0x9a03014a; (* arm_ADC X10 X10 X3 *) + 0xa9031be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&48))) *) + 0xa90423e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&64))) *) + 0xa9052be9; (* arm_STP X9 X10 SP (Immediate_Offset (iword (&80))) *) + 0xa94f0fe2; (* arm_LDP X2 X3 SP (Immediate_Offset (iword (&240))) *) + 0x9b037c49; (* arm_MUL X9 X2 X3 *) + 0x9bc37c4a; (* arm_UMULH X10 X2 X3 *) + 0xa95017e4; (* arm_LDP X4 X5 SP (Immediate_Offset (iword (&256))) *) + 0x9b047c48; (* arm_MUL X8 X2 X4 *) + 0xab08014a; (* arm_ADDS X10 X10 X8 *) + 0x9b057c4b; (* arm_MUL X11 X2 X5 *) + 0x9b047c68; (* arm_MUL X8 X3 X4 *) + 0xba08016b; (* arm_ADCS X11 X11 X8 *) + 0x9bc57c4c; (* arm_UMULH X12 X2 X5 *) + 0x9b057c68; (* arm_MUL X8 X3 X5 *) + 0xba08018c; (* arm_ADCS X12 X12 X8 *) + 0xa9511fe6; (* arm_LDP X6 X7 SP (Immediate_Offset (iword (&272))) *) + 0x9b077c4d; (* arm_MUL X13 X2 X7 *) + 0x9b067c68; (* arm_MUL X8 X3 X6 *) + 0xba0801ad; (* arm_ADCS X13 X13 X8 *) + 0x9bc77c4e; (* arm_UMULH X14 X2 X7 *) + 0x9b077c68; (* arm_MUL X8 X3 X7 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9b067caf; (* arm_MUL X15 X5 X6 *) + 0xba1f01ef; (* arm_ADCS X15 X15 XZR *) + 0x9bc67cb0; (* arm_UMULH X16 X5 X6 *) + 0x9a1f0210; (* arm_ADC X16 X16 XZR *) + 0x9bc47c48; (* arm_UMULH X8 X2 X4 *) + 0xab08016b; (* arm_ADDS X11 X11 X8 *) + 0x9bc47c68; (* arm_UMULH X8 X3 X4 *) + 0xba08018c; (* arm_ADCS X12 X12 X8 *) + 0x9bc57c68; (* arm_UMULH X8 X3 X5 *) + 0xba0801ad; (* arm_ADCS X13 X13 X8 *) + 0x9bc67c68; (* arm_UMULH X8 X3 X6 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9bc77c68; (* arm_UMULH X8 X3 X7 *) + 0xba0801ef; (* arm_ADCS X15 X15 X8 *) + 0x9a1f0210; (* arm_ADC X16 X16 XZR *) + 0x9b067c48; (* arm_MUL X8 X2 X6 *) + 0xab08018c; (* arm_ADDS X12 X12 X8 *) + 0x9b057c88; (* arm_MUL X8 X4 X5 *) + 0xba0801ad; (* arm_ADCS X13 X13 X8 *) + 0x9b067c88; (* arm_MUL X8 X4 X6 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9b077c88; (* arm_MUL X8 X4 X7 *) + 0xba0801ef; (* arm_ADCS X15 X15 X8 *) + 0x9b077ca8; (* arm_MUL X8 X5 X7 *) + 0xba080210; (* arm_ADCS X16 X16 X8 *) + 0x9b077cd1; (* arm_MUL X17 X6 X7 *) + 0xba1f0231; (* arm_ADCS X17 X17 XZR *) + 0x9bc77cd3; (* arm_UMULH X19 X6 X7 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0x9bc67c48; (* arm_UMULH X8 X2 X6 *) + 0xab0801ad; (* arm_ADDS X13 X13 X8 *) + 0x9bc57c88; (* arm_UMULH X8 X4 X5 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9bc67c88; (* arm_UMULH X8 X4 X6 *) + 0xba0801ef; (* arm_ADCS X15 X15 X8 *) + 0x9bc77c88; (* arm_UMULH X8 X4 X7 *) + 0xba080210; (* arm_ADCS X16 X16 X8 *) + 0x9bc77ca8; (* arm_UMULH X8 X5 X7 *) + 0xba080231; (* arm_ADCS X17 X17 X8 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0xab090129; (* arm_ADDS X9 X9 X9 *) + 0xba0a014a; (* arm_ADCS X10 X10 X10 *) + 0xba0b016b; (* arm_ADCS X11 X11 X11 *) + 0xba0c018c; (* arm_ADCS X12 X12 X12 *) + 0xba0d01ad; (* arm_ADCS X13 X13 X13 *) + 0xba0e01ce; (* arm_ADCS X14 X14 X14 *) + 0xba0f01ef; (* arm_ADCS X15 X15 X15 *) + 0xba100210; (* arm_ADCS X16 X16 X16 *) + 0xba110231; (* arm_ADCS X17 X17 X17 *) + 0xba130273; (* arm_ADCS X19 X19 X19 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc27c48; (* arm_UMULH X8 X2 X2 *) + 0x9b027c42; (* arm_MUL X2 X2 X2 *) + 0xab080129; (* arm_ADDS X9 X9 X8 *) + 0x9b037c68; (* arm_MUL X8 X3 X3 *) + 0xba08014a; (* arm_ADCS X10 X10 X8 *) + 0x9bc37c68; (* arm_UMULH X8 X3 X3 *) + 0xba08016b; (* arm_ADCS X11 X11 X8 *) + 0x9b047c88; (* arm_MUL X8 X4 X4 *) + 0xba08018c; (* arm_ADCS X12 X12 X8 *) + 0x9bc47c88; (* arm_UMULH X8 X4 X4 *) + 0xba0801ad; (* arm_ADCS X13 X13 X8 *) + 0x9b057ca8; (* arm_MUL X8 X5 X5 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9bc57ca8; (* arm_UMULH X8 X5 X5 *) + 0xba0801ef; (* arm_ADCS X15 X15 X8 *) + 0x9b067cc8; (* arm_MUL X8 X6 X6 *) + 0xba080210; (* arm_ADCS X16 X16 X8 *) + 0x9bc67cc8; (* arm_UMULH X8 X6 X6 *) + 0xba080231; (* arm_ADCS X17 X17 X8 *) + 0x9b077ce8; (* arm_MUL X8 X7 X7 *) + 0xba080273; (* arm_ADCS X19 X19 X8 *) + 0x9bc77ce8; (* arm_UMULH X8 X7 X7 *) + 0x9a080294; (* arm_ADC X20 X20 X8 *) + 0xd3607c45; (* arm_LSL X5 X2 32 *) + 0x8b0200a2; (* arm_ADD X2 X5 X2 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bc27ca5; (* arm_UMULH X5 X5 X2 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b027c83; (* arm_MUL X3 X4 X2 *) + 0x9bc27c84; (* arm_UMULH X4 X4 X2 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba020084; (* arm_ADCS X4 X4 X2 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb050129; (* arm_SUBS X9 X9 X5 *) + 0xfa04014a; (* arm_SBCS X10 X10 X4 *) + 0xfa03016b; (* arm_SBCS X11 X11 X3 *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xda1f0042; (* arm_SBC X2 X2 XZR *) + 0xd3607d25; (* arm_LSL X5 X9 32 *) + 0x8b0900a9; (* arm_ADD X9 X5 X9 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bc97ca5; (* arm_UMULH X5 X5 X9 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b097c83; (* arm_MUL X3 X4 X9 *) + 0x9bc97c84; (* arm_UMULH X4 X4 X9 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba090084; (* arm_ADCS X4 X4 X9 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb05014a; (* arm_SUBS X10 X10 X5 *) + 0xfa04016b; (* arm_SBCS X11 X11 X4 *) + 0xfa03018c; (* arm_SBCS X12 X12 X3 *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f0042; (* arm_SBCS X2 X2 XZR *) + 0xda1f0129; (* arm_SBC X9 X9 XZR *) + 0xd3607d45; (* arm_LSL X5 X10 32 *) + 0x8b0a00aa; (* arm_ADD X10 X5 X10 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bca7ca5; (* arm_UMULH X5 X5 X10 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b0a7c83; (* arm_MUL X3 X4 X10 *) + 0x9bca7c84; (* arm_UMULH X4 X4 X10 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba0a0084; (* arm_ADCS X4 X4 X10 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb05016b; (* arm_SUBS X11 X11 X5 *) + 0xfa04018c; (* arm_SBCS X12 X12 X4 *) + 0xfa0301ad; (* arm_SBCS X13 X13 X3 *) + 0xfa1f0042; (* arm_SBCS X2 X2 XZR *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xda1f014a; (* arm_SBC X10 X10 XZR *) + 0xd3607d65; (* arm_LSL X5 X11 32 *) + 0x8b0b00ab; (* arm_ADD X11 X5 X11 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bcb7ca5; (* arm_UMULH X5 X5 X11 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b0b7c83; (* arm_MUL X3 X4 X11 *) + 0x9bcb7c84; (* arm_UMULH X4 X4 X11 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb05018c; (* arm_SUBS X12 X12 X5 *) + 0xfa0401ad; (* arm_SBCS X13 X13 X4 *) + 0xfa030042; (* arm_SBCS X2 X2 X3 *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xda1f016b; (* arm_SBC X11 X11 XZR *) + 0xd3607d85; (* arm_LSL X5 X12 32 *) + 0x8b0c00ac; (* arm_ADD X12 X5 X12 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bcc7ca5; (* arm_UMULH X5 X5 X12 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b0c7c83; (* arm_MUL X3 X4 X12 *) + 0x9bcc7c84; (* arm_UMULH X4 X4 X12 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba0c0084; (* arm_ADCS X4 X4 X12 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb0501ad; (* arm_SUBS X13 X13 X5 *) + 0xfa040042; (* arm_SBCS X2 X2 X4 *) + 0xfa030129; (* arm_SBCS X9 X9 X3 *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xda1f018c; (* arm_SBC X12 X12 XZR *) + 0xd3607da5; (* arm_LSL X5 X13 32 *) + 0x8b0d00ad; (* arm_ADD X13 X5 X13 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bcd7ca5; (* arm_UMULH X5 X5 X13 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b0d7c83; (* arm_MUL X3 X4 X13 *) + 0x9bcd7c84; (* arm_UMULH X4 X4 X13 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba0d0084; (* arm_ADCS X4 X4 X13 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb050042; (* arm_SUBS X2 X2 X5 *) + 0xfa040129; (* arm_SBCS X9 X9 X4 *) + 0xfa03014a; (* arm_SBCS X10 X10 X3 *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda1f01ad; (* arm_SBC X13 X13 XZR *) + 0xab0e0042; (* arm_ADDS X2 X2 X14 *) + 0xba0f0129; (* arm_ADCS X9 X9 X15 *) + 0xba10014a; (* arm_ADCS X10 X10 X16 *) + 0xba11016b; (* arm_ADCS X11 X11 X17 *) + 0xba13018c; (* arm_ADCS X12 X12 X19 *) + 0xba1401ad; (* arm_ADCS X13 X13 X20 *) + 0xb26083ee; (* arm_MOV X14 (rvalue (word 18446744069414584321)) *) + 0xb2407fef; (* arm_MOV X15 (rvalue (word 4294967295)) *) + 0x9a9f21ce; (* arm_CSEL X14 X14 XZR Condition_CS *) + 0x9a9f21ef; (* arm_CSEL X15 X15 XZR Condition_CS *) + 0x9a9f37f0; (* arm_CSET X16 Condition_CS *) + 0xab0e0042; (* arm_ADDS X2 X2 X14 *) + 0xba0f0129; (* arm_ADCS X9 X9 X15 *) + 0xba10014a; (* arm_ADCS X10 X10 X16 *) + 0xba1f016b; (* arm_ADCS X11 X11 XZR *) + 0xba1f018c; (* arm_ADCS X12 X12 XZR *) + 0x9a1f01ad; (* arm_ADC X13 X13 XZR *) + 0xa90927e2; (* arm_STP X2 X9 SP (Immediate_Offset (iword (&144))) *) + 0xa90a2fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&160))) *) + 0xa90b37ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&176))) *) + 0xa9430fe2; (* arm_LDP X2 X3 SP (Immediate_Offset (iword (&48))) *) + 0x9b037c49; (* arm_MUL X9 X2 X3 *) + 0x9bc37c4a; (* arm_UMULH X10 X2 X3 *) + 0xa94417e4; (* arm_LDP X4 X5 SP (Immediate_Offset (iword (&64))) *) + 0x9b047c48; (* arm_MUL X8 X2 X4 *) + 0xab08014a; (* arm_ADDS X10 X10 X8 *) + 0x9b057c4b; (* arm_MUL X11 X2 X5 *) + 0x9b047c68; (* arm_MUL X8 X3 X4 *) + 0xba08016b; (* arm_ADCS X11 X11 X8 *) + 0x9bc57c4c; (* arm_UMULH X12 X2 X5 *) + 0x9b057c68; (* arm_MUL X8 X3 X5 *) + 0xba08018c; (* arm_ADCS X12 X12 X8 *) + 0xa9451fe6; (* arm_LDP X6 X7 SP (Immediate_Offset (iword (&80))) *) + 0x9b077c4d; (* arm_MUL X13 X2 X7 *) + 0x9b067c68; (* arm_MUL X8 X3 X6 *) + 0xba0801ad; (* arm_ADCS X13 X13 X8 *) + 0x9bc77c4e; (* arm_UMULH X14 X2 X7 *) + 0x9b077c68; (* arm_MUL X8 X3 X7 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9b067caf; (* arm_MUL X15 X5 X6 *) + 0xba1f01ef; (* arm_ADCS X15 X15 XZR *) + 0x9bc67cb0; (* arm_UMULH X16 X5 X6 *) + 0x9a1f0210; (* arm_ADC X16 X16 XZR *) + 0x9bc47c48; (* arm_UMULH X8 X2 X4 *) + 0xab08016b; (* arm_ADDS X11 X11 X8 *) + 0x9bc47c68; (* arm_UMULH X8 X3 X4 *) + 0xba08018c; (* arm_ADCS X12 X12 X8 *) + 0x9bc57c68; (* arm_UMULH X8 X3 X5 *) + 0xba0801ad; (* arm_ADCS X13 X13 X8 *) + 0x9bc67c68; (* arm_UMULH X8 X3 X6 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9bc77c68; (* arm_UMULH X8 X3 X7 *) + 0xba0801ef; (* arm_ADCS X15 X15 X8 *) + 0x9a1f0210; (* arm_ADC X16 X16 XZR *) + 0x9b067c48; (* arm_MUL X8 X2 X6 *) + 0xab08018c; (* arm_ADDS X12 X12 X8 *) + 0x9b057c88; (* arm_MUL X8 X4 X5 *) + 0xba0801ad; (* arm_ADCS X13 X13 X8 *) + 0x9b067c88; (* arm_MUL X8 X4 X6 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9b077c88; (* arm_MUL X8 X4 X7 *) + 0xba0801ef; (* arm_ADCS X15 X15 X8 *) + 0x9b077ca8; (* arm_MUL X8 X5 X7 *) + 0xba080210; (* arm_ADCS X16 X16 X8 *) + 0x9b077cd1; (* arm_MUL X17 X6 X7 *) + 0xba1f0231; (* arm_ADCS X17 X17 XZR *) + 0x9bc77cd3; (* arm_UMULH X19 X6 X7 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0x9bc67c48; (* arm_UMULH X8 X2 X6 *) + 0xab0801ad; (* arm_ADDS X13 X13 X8 *) + 0x9bc57c88; (* arm_UMULH X8 X4 X5 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9bc67c88; (* arm_UMULH X8 X4 X6 *) + 0xba0801ef; (* arm_ADCS X15 X15 X8 *) + 0x9bc77c88; (* arm_UMULH X8 X4 X7 *) + 0xba080210; (* arm_ADCS X16 X16 X8 *) + 0x9bc77ca8; (* arm_UMULH X8 X5 X7 *) + 0xba080231; (* arm_ADCS X17 X17 X8 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0xab090129; (* arm_ADDS X9 X9 X9 *) + 0xba0a014a; (* arm_ADCS X10 X10 X10 *) + 0xba0b016b; (* arm_ADCS X11 X11 X11 *) + 0xba0c018c; (* arm_ADCS X12 X12 X12 *) + 0xba0d01ad; (* arm_ADCS X13 X13 X13 *) + 0xba0e01ce; (* arm_ADCS X14 X14 X14 *) + 0xba0f01ef; (* arm_ADCS X15 X15 X15 *) + 0xba100210; (* arm_ADCS X16 X16 X16 *) + 0xba110231; (* arm_ADCS X17 X17 X17 *) + 0xba130273; (* arm_ADCS X19 X19 X19 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc27c48; (* arm_UMULH X8 X2 X2 *) + 0x9b027c42; (* arm_MUL X2 X2 X2 *) + 0xab080129; (* arm_ADDS X9 X9 X8 *) + 0x9b037c68; (* arm_MUL X8 X3 X3 *) + 0xba08014a; (* arm_ADCS X10 X10 X8 *) + 0x9bc37c68; (* arm_UMULH X8 X3 X3 *) + 0xba08016b; (* arm_ADCS X11 X11 X8 *) + 0x9b047c88; (* arm_MUL X8 X4 X4 *) + 0xba08018c; (* arm_ADCS X12 X12 X8 *) + 0x9bc47c88; (* arm_UMULH X8 X4 X4 *) + 0xba0801ad; (* arm_ADCS X13 X13 X8 *) + 0x9b057ca8; (* arm_MUL X8 X5 X5 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9bc57ca8; (* arm_UMULH X8 X5 X5 *) + 0xba0801ef; (* arm_ADCS X15 X15 X8 *) + 0x9b067cc8; (* arm_MUL X8 X6 X6 *) + 0xba080210; (* arm_ADCS X16 X16 X8 *) + 0x9bc67cc8; (* arm_UMULH X8 X6 X6 *) + 0xba080231; (* arm_ADCS X17 X17 X8 *) + 0x9b077ce8; (* arm_MUL X8 X7 X7 *) + 0xba080273; (* arm_ADCS X19 X19 X8 *) + 0x9bc77ce8; (* arm_UMULH X8 X7 X7 *) + 0x9a080294; (* arm_ADC X20 X20 X8 *) + 0xd3607c45; (* arm_LSL X5 X2 32 *) + 0x8b0200a2; (* arm_ADD X2 X5 X2 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bc27ca5; (* arm_UMULH X5 X5 X2 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b027c83; (* arm_MUL X3 X4 X2 *) + 0x9bc27c84; (* arm_UMULH X4 X4 X2 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba020084; (* arm_ADCS X4 X4 X2 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb050129; (* arm_SUBS X9 X9 X5 *) + 0xfa04014a; (* arm_SBCS X10 X10 X4 *) + 0xfa03016b; (* arm_SBCS X11 X11 X3 *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xda1f0042; (* arm_SBC X2 X2 XZR *) + 0xd3607d25; (* arm_LSL X5 X9 32 *) + 0x8b0900a9; (* arm_ADD X9 X5 X9 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bc97ca5; (* arm_UMULH X5 X5 X9 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b097c83; (* arm_MUL X3 X4 X9 *) + 0x9bc97c84; (* arm_UMULH X4 X4 X9 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba090084; (* arm_ADCS X4 X4 X9 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb05014a; (* arm_SUBS X10 X10 X5 *) + 0xfa04016b; (* arm_SBCS X11 X11 X4 *) + 0xfa03018c; (* arm_SBCS X12 X12 X3 *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f0042; (* arm_SBCS X2 X2 XZR *) + 0xda1f0129; (* arm_SBC X9 X9 XZR *) + 0xd3607d45; (* arm_LSL X5 X10 32 *) + 0x8b0a00aa; (* arm_ADD X10 X5 X10 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bca7ca5; (* arm_UMULH X5 X5 X10 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b0a7c83; (* arm_MUL X3 X4 X10 *) + 0x9bca7c84; (* arm_UMULH X4 X4 X10 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba0a0084; (* arm_ADCS X4 X4 X10 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb05016b; (* arm_SUBS X11 X11 X5 *) + 0xfa04018c; (* arm_SBCS X12 X12 X4 *) + 0xfa0301ad; (* arm_SBCS X13 X13 X3 *) + 0xfa1f0042; (* arm_SBCS X2 X2 XZR *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xda1f014a; (* arm_SBC X10 X10 XZR *) + 0xd3607d65; (* arm_LSL X5 X11 32 *) + 0x8b0b00ab; (* arm_ADD X11 X5 X11 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bcb7ca5; (* arm_UMULH X5 X5 X11 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b0b7c83; (* arm_MUL X3 X4 X11 *) + 0x9bcb7c84; (* arm_UMULH X4 X4 X11 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb05018c; (* arm_SUBS X12 X12 X5 *) + 0xfa0401ad; (* arm_SBCS X13 X13 X4 *) + 0xfa030042; (* arm_SBCS X2 X2 X3 *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xda1f016b; (* arm_SBC X11 X11 XZR *) + 0xd3607d85; (* arm_LSL X5 X12 32 *) + 0x8b0c00ac; (* arm_ADD X12 X5 X12 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bcc7ca5; (* arm_UMULH X5 X5 X12 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b0c7c83; (* arm_MUL X3 X4 X12 *) + 0x9bcc7c84; (* arm_UMULH X4 X4 X12 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba0c0084; (* arm_ADCS X4 X4 X12 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb0501ad; (* arm_SUBS X13 X13 X5 *) + 0xfa040042; (* arm_SBCS X2 X2 X4 *) + 0xfa030129; (* arm_SBCS X9 X9 X3 *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xda1f018c; (* arm_SBC X12 X12 XZR *) + 0xd3607da5; (* arm_LSL X5 X13 32 *) + 0x8b0d00ad; (* arm_ADD X13 X5 X13 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bcd7ca5; (* arm_UMULH X5 X5 X13 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b0d7c83; (* arm_MUL X3 X4 X13 *) + 0x9bcd7c84; (* arm_UMULH X4 X4 X13 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba0d0084; (* arm_ADCS X4 X4 X13 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb050042; (* arm_SUBS X2 X2 X5 *) + 0xfa040129; (* arm_SBCS X9 X9 X4 *) + 0xfa03014a; (* arm_SBCS X10 X10 X3 *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda1f01ad; (* arm_SBC X13 X13 XZR *) + 0xab0e0042; (* arm_ADDS X2 X2 X14 *) + 0xba0f0129; (* arm_ADCS X9 X9 X15 *) + 0xba10014a; (* arm_ADCS X10 X10 X16 *) + 0xba11016b; (* arm_ADCS X11 X11 X17 *) + 0xba13018c; (* arm_ADCS X12 X12 X19 *) + 0xba1401ad; (* arm_ADCS X13 X13 X20 *) + 0x9a1f03e6; (* arm_ADC X6 XZR XZR *) + 0xb26083e8; (* arm_MOV X8 (rvalue (word 18446744069414584321)) *) + 0xab08004e; (* arm_ADDS X14 X2 X8 *) + 0xb2407fe8; (* arm_MOV X8 (rvalue (word 4294967295)) *) + 0xba08012f; (* arm_ADCS X15 X9 X8 *) + 0xd2800028; (* arm_MOV X8 (rvalue (word 1)) *) + 0xba080150; (* arm_ADCS X16 X10 X8 *) + 0xba1f0171; (* arm_ADCS X17 X11 XZR *) + 0xba1f0193; (* arm_ADCS X19 X12 XZR *) + 0xba1f01b4; (* arm_ADCS X20 X13 XZR *) + 0xba1f00c6; (* arm_ADCS X6 X6 XZR *) + 0x9a8e0042; (* arm_CSEL X2 X2 X14 Condition_EQ *) + 0x9a8f0129; (* arm_CSEL X9 X9 X15 Condition_EQ *) + 0x9a90014a; (* arm_CSEL X10 X10 X16 Condition_EQ *) + 0x9a91016b; (* arm_CSEL X11 X11 X17 Condition_EQ *) + 0x9a93018c; (* arm_CSEL X12 X12 X19 Condition_EQ *) + 0x9a9401ad; (* arm_CSEL X13 X13 X20 Condition_EQ *) + 0xa90027e2; (* arm_STP X2 X9 SP (Immediate_Offset (iword (&0))) *) + 0xa9012fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&16))) *) + 0xa90237ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&32))) *) + 0xa94913e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&144))) *) + 0xa94c1be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&192))) *) + 0x9b057c6c; (* arm_MUL X12 X3 X5 *) + 0x9bc57c6d; (* arm_UMULH X13 X3 X5 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa94d23e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&208))) *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0x9bc77c6f; (* arm_UMULH X15 X3 X7 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c70; (* arm_UMULH X16 X3 X8 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0xa94e2be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&224))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c71; (* arm_UMULH X17 X3 X9 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c73; (* arm_UMULH X19 X3 X10 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b0294; (* arm_ADC X20 X20 X11 *) + 0xa94a13e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&160))) *) + 0x9b057c6b; (* arm_MUL X11 X3 X5 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9a9f37f5; (* arm_CSET X21 Condition_CS *) + 0x9bc57c6b; (* arm_UMULH X11 X3 X5 *) + 0xab0b01ef; (* arm_ADDS X15 X15 X11 *) + 0x9bc67c6b; (* arm_UMULH X11 X3 X6 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9bc77c6b; (* arm_UMULH X11 X3 X7 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc87c6b; (* arm_UMULH X11 X3 X8 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc97c6b; (* arm_UMULH X11 X3 X9 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bca7c6b; (* arm_UMULH X11 X3 X10 *) + 0x9a0b02b5; (* arm_ADC X21 X21 X11 *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b01ef; (* arm_ADDS X15 X15 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9a9f37f6; (* arm_CSET X22 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b0210; (* arm_ADDS X16 X16 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b02d6; (* arm_ADC X22 X22 X11 *) + 0xa94b13e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&176))) *) + 0x9b057c6b; (* arm_MUL X11 X3 X5 *) + 0xab0b0210; (* arm_ADDS X16 X16 X11 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9a9f37e2; (* arm_CSET X2 Condition_CS *) + 0x9bc57c6b; (* arm_UMULH X11 X3 X5 *) + 0xab0b0231; (* arm_ADDS X17 X17 X11 *) + 0x9bc67c6b; (* arm_UMULH X11 X3 X6 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc77c6b; (* arm_UMULH X11 X3 X7 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc87c6b; (* arm_UMULH X11 X3 X8 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bc97c6b; (* arm_UMULH X11 X3 X9 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9bca7c6b; (* arm_UMULH X11 X3 X10 *) + 0x9a0b0042; (* arm_ADC X2 X2 X11 *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b0231; (* arm_ADDS X17 X17 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0042; (* arm_ADCS X2 X2 X11 *) + 0x9a9f37e1; (* arm_CSET X1 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b0273; (* arm_ADDS X19 X19 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0042; (* arm_ADCS X2 X2 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b0021; (* arm_ADC X1 X1 X11 *) + 0xd3607d87; (* arm_LSL X7 X12 32 *) + 0x8b0c00ec; (* arm_ADD X12 X7 X12 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcc7ce7; (* arm_UMULH X7 X7 X12 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0c7cc5; (* arm_MUL X5 X6 X12 *) + 0x9bcc7cc6; (* arm_UMULH X6 X6 X12 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0c00c6; (* arm_ADCS X6 X6 X12 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ad; (* arm_SUBS X13 X13 X7 *) + 0xfa0601ce; (* arm_SBCS X14 X14 X6 *) + 0xfa0501ef; (* arm_SBCS X15 X15 X5 *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xda1f018c; (* arm_SBC X12 X12 XZR *) + 0xd3607da7; (* arm_LSL X7 X13 32 *) + 0x8b0d00ed; (* arm_ADD X13 X7 X13 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcd7ce7; (* arm_UMULH X7 X7 X13 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0d7cc5; (* arm_MUL X5 X6 X13 *) + 0x9bcd7cc6; (* arm_UMULH X6 X6 X13 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0d00c6; (* arm_ADCS X6 X6 X13 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ce; (* arm_SUBS X14 X14 X7 *) + 0xfa0601ef; (* arm_SBCS X15 X15 X6 *) + 0xfa050210; (* arm_SBCS X16 X16 X5 *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda1f01ad; (* arm_SBC X13 X13 XZR *) + 0xd3607dc7; (* arm_LSL X7 X14 32 *) + 0x8b0e00ee; (* arm_ADD X14 X7 X14 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bce7ce7; (* arm_UMULH X7 X7 X14 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0e7cc5; (* arm_MUL X5 X6 X14 *) + 0x9bce7cc6; (* arm_UMULH X6 X6 X14 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0e00c6; (* arm_ADCS X6 X6 X14 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ef; (* arm_SUBS X15 X15 X7 *) + 0xfa060210; (* arm_SBCS X16 X16 X6 *) + 0xfa050231; (* arm_SBCS X17 X17 X5 *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xda1f01ce; (* arm_SBC X14 X14 XZR *) + 0xd3607de7; (* arm_LSL X7 X15 32 *) + 0x8b0f00ef; (* arm_ADD X15 X7 X15 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcf7ce7; (* arm_UMULH X7 X7 X15 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0f7cc5; (* arm_MUL X5 X6 X15 *) + 0x9bcf7cc6; (* arm_UMULH X6 X6 X15 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0f00c6; (* arm_ADCS X6 X6 X15 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb070210; (* arm_SUBS X16 X16 X7 *) + 0xfa060231; (* arm_SBCS X17 X17 X6 *) + 0xfa05018c; (* arm_SBCS X12 X12 X5 *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xda1f01ef; (* arm_SBC X15 X15 XZR *) + 0xd3607e07; (* arm_LSL X7 X16 32 *) + 0x8b1000f0; (* arm_ADD X16 X7 X16 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bd07ce7; (* arm_UMULH X7 X7 X16 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b107cc5; (* arm_MUL X5 X6 X16 *) + 0x9bd07cc6; (* arm_UMULH X6 X6 X16 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba1000c6; (* arm_ADCS X6 X6 X16 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb070231; (* arm_SUBS X17 X17 X7 *) + 0xfa06018c; (* arm_SBCS X12 X12 X6 *) + 0xfa0501ad; (* arm_SBCS X13 X13 X5 *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xda1f0210; (* arm_SBC X16 X16 XZR *) + 0xd3607e27; (* arm_LSL X7 X17 32 *) + 0x8b1100f1; (* arm_ADD X17 X7 X17 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bd17ce7; (* arm_UMULH X7 X7 X17 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b117cc5; (* arm_MUL X5 X6 X17 *) + 0x9bd17cc6; (* arm_UMULH X6 X6 X17 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba1100c6; (* arm_ADCS X6 X6 X17 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb07018c; (* arm_SUBS X12 X12 X7 *) + 0xfa0601ad; (* arm_SBCS X13 X13 X6 *) + 0xfa0501ce; (* arm_SBCS X14 X14 X5 *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xda1f0231; (* arm_SBC X17 X17 XZR *) + 0xab13018c; (* arm_ADDS X12 X12 X19 *) + 0xba1401ad; (* arm_ADCS X13 X13 X20 *) + 0xba1501ce; (* arm_ADCS X14 X14 X21 *) + 0xba1601ef; (* arm_ADCS X15 X15 X22 *) + 0xba020210; (* arm_ADCS X16 X16 X2 *) + 0xba010231; (* arm_ADCS X17 X17 X1 *) + 0x9a1f03ea; (* arm_ADC X10 XZR XZR *) + 0xb26083eb; (* arm_MOV X11 (rvalue (word 18446744069414584321)) *) + 0xab0b0193; (* arm_ADDS X19 X12 X11 *) + 0xb2407feb; (* arm_MOV X11 (rvalue (word 4294967295)) *) + 0xba0b01b4; (* arm_ADCS X20 X13 X11 *) + 0xd280002b; (* arm_MOV X11 (rvalue (word 1)) *) + 0xba0b01d5; (* arm_ADCS X21 X14 X11 *) + 0xba1f01f6; (* arm_ADCS X22 X15 XZR *) + 0xba1f0202; (* arm_ADCS X2 X16 XZR *) + 0xba1f0221; (* arm_ADCS X1 X17 XZR *) + 0xba1f014a; (* arm_ADCS X10 X10 XZR *) + 0x9a93018c; (* arm_CSEL X12 X12 X19 Condition_EQ *) + 0x9a9401ad; (* arm_CSEL X13 X13 X20 Condition_EQ *) + 0x9a9501ce; (* arm_CSEL X14 X14 X21 Condition_EQ *) + 0x9a9601ef; (* arm_CSEL X15 X15 X22 Condition_EQ *) + 0x9a820210; (* arm_CSEL X16 X16 X2 Condition_EQ *) + 0x9a810231; (* arm_CSEL X17 X17 X1 Condition_EQ *) + 0xa90c37ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&192))) *) + 0xa90d3fee; (* arm_STP X14 X15 SP (Immediate_Offset (iword (&208))) *) + 0xa90e47f0; (* arm_STP X16 X17 SP (Immediate_Offset (iword (&224))) *) + 0xa94913e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&144))) *) + 0xa9461be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&96))) *) + 0x9b057c6c; (* arm_MUL X12 X3 X5 *) + 0x9bc57c6d; (* arm_UMULH X13 X3 X5 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa94723e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&112))) *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0x9bc77c6f; (* arm_UMULH X15 X3 X7 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c70; (* arm_UMULH X16 X3 X8 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0xa9482be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&128))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c71; (* arm_UMULH X17 X3 X9 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c73; (* arm_UMULH X19 X3 X10 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b0294; (* arm_ADC X20 X20 X11 *) + 0xa94a13e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&160))) *) + 0x9b057c6b; (* arm_MUL X11 X3 X5 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9a9f37f5; (* arm_CSET X21 Condition_CS *) + 0x9bc57c6b; (* arm_UMULH X11 X3 X5 *) + 0xab0b01ef; (* arm_ADDS X15 X15 X11 *) + 0x9bc67c6b; (* arm_UMULH X11 X3 X6 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9bc77c6b; (* arm_UMULH X11 X3 X7 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc87c6b; (* arm_UMULH X11 X3 X8 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc97c6b; (* arm_UMULH X11 X3 X9 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bca7c6b; (* arm_UMULH X11 X3 X10 *) + 0x9a0b02b5; (* arm_ADC X21 X21 X11 *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b01ef; (* arm_ADDS X15 X15 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9a9f37f6; (* arm_CSET X22 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b0210; (* arm_ADDS X16 X16 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b02d6; (* arm_ADC X22 X22 X11 *) + 0xa94b13e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&176))) *) + 0x9b057c6b; (* arm_MUL X11 X3 X5 *) + 0xab0b0210; (* arm_ADDS X16 X16 X11 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9a9f37e2; (* arm_CSET X2 Condition_CS *) + 0x9bc57c6b; (* arm_UMULH X11 X3 X5 *) + 0xab0b0231; (* arm_ADDS X17 X17 X11 *) + 0x9bc67c6b; (* arm_UMULH X11 X3 X6 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc77c6b; (* arm_UMULH X11 X3 X7 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc87c6b; (* arm_UMULH X11 X3 X8 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bc97c6b; (* arm_UMULH X11 X3 X9 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9bca7c6b; (* arm_UMULH X11 X3 X10 *) + 0x9a0b0042; (* arm_ADC X2 X2 X11 *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b0231; (* arm_ADDS X17 X17 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0042; (* arm_ADCS X2 X2 X11 *) + 0x9a9f37e1; (* arm_CSET X1 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b0273; (* arm_ADDS X19 X19 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0042; (* arm_ADCS X2 X2 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b0021; (* arm_ADC X1 X1 X11 *) + 0xd3607d87; (* arm_LSL X7 X12 32 *) + 0x8b0c00ec; (* arm_ADD X12 X7 X12 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcc7ce7; (* arm_UMULH X7 X7 X12 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0c7cc5; (* arm_MUL X5 X6 X12 *) + 0x9bcc7cc6; (* arm_UMULH X6 X6 X12 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0c00c6; (* arm_ADCS X6 X6 X12 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ad; (* arm_SUBS X13 X13 X7 *) + 0xfa0601ce; (* arm_SBCS X14 X14 X6 *) + 0xfa0501ef; (* arm_SBCS X15 X15 X5 *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xda1f018c; (* arm_SBC X12 X12 XZR *) + 0xd3607da7; (* arm_LSL X7 X13 32 *) + 0x8b0d00ed; (* arm_ADD X13 X7 X13 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcd7ce7; (* arm_UMULH X7 X7 X13 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0d7cc5; (* arm_MUL X5 X6 X13 *) + 0x9bcd7cc6; (* arm_UMULH X6 X6 X13 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0d00c6; (* arm_ADCS X6 X6 X13 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ce; (* arm_SUBS X14 X14 X7 *) + 0xfa0601ef; (* arm_SBCS X15 X15 X6 *) + 0xfa050210; (* arm_SBCS X16 X16 X5 *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda1f01ad; (* arm_SBC X13 X13 XZR *) + 0xd3607dc7; (* arm_LSL X7 X14 32 *) + 0x8b0e00ee; (* arm_ADD X14 X7 X14 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bce7ce7; (* arm_UMULH X7 X7 X14 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0e7cc5; (* arm_MUL X5 X6 X14 *) + 0x9bce7cc6; (* arm_UMULH X6 X6 X14 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0e00c6; (* arm_ADCS X6 X6 X14 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ef; (* arm_SUBS X15 X15 X7 *) + 0xfa060210; (* arm_SBCS X16 X16 X6 *) + 0xfa050231; (* arm_SBCS X17 X17 X5 *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xda1f01ce; (* arm_SBC X14 X14 XZR *) + 0xd3607de7; (* arm_LSL X7 X15 32 *) + 0x8b0f00ef; (* arm_ADD X15 X7 X15 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcf7ce7; (* arm_UMULH X7 X7 X15 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0f7cc5; (* arm_MUL X5 X6 X15 *) + 0x9bcf7cc6; (* arm_UMULH X6 X6 X15 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0f00c6; (* arm_ADCS X6 X6 X15 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb070210; (* arm_SUBS X16 X16 X7 *) + 0xfa060231; (* arm_SBCS X17 X17 X6 *) + 0xfa05018c; (* arm_SBCS X12 X12 X5 *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xda1f01ef; (* arm_SBC X15 X15 XZR *) + 0xd3607e07; (* arm_LSL X7 X16 32 *) + 0x8b1000f0; (* arm_ADD X16 X7 X16 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bd07ce7; (* arm_UMULH X7 X7 X16 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b107cc5; (* arm_MUL X5 X6 X16 *) + 0x9bd07cc6; (* arm_UMULH X6 X6 X16 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba1000c6; (* arm_ADCS X6 X6 X16 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb070231; (* arm_SUBS X17 X17 X7 *) + 0xfa06018c; (* arm_SBCS X12 X12 X6 *) + 0xfa0501ad; (* arm_SBCS X13 X13 X5 *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xda1f0210; (* arm_SBC X16 X16 XZR *) + 0xd3607e27; (* arm_LSL X7 X17 32 *) + 0x8b1100f1; (* arm_ADD X17 X7 X17 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bd17ce7; (* arm_UMULH X7 X7 X17 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b117cc5; (* arm_MUL X5 X6 X17 *) + 0x9bd17cc6; (* arm_UMULH X6 X6 X17 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba1100c6; (* arm_ADCS X6 X6 X17 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb07018c; (* arm_SUBS X12 X12 X7 *) + 0xfa0601ad; (* arm_SBCS X13 X13 X6 *) + 0xfa0501ce; (* arm_SBCS X14 X14 X5 *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xda1f0231; (* arm_SBC X17 X17 XZR *) + 0xab13018c; (* arm_ADDS X12 X12 X19 *) + 0xba1401ad; (* arm_ADCS X13 X13 X20 *) + 0xba1501ce; (* arm_ADCS X14 X14 X21 *) + 0xba1601ef; (* arm_ADCS X15 X15 X22 *) + 0xba020210; (* arm_ADCS X16 X16 X2 *) + 0xba010231; (* arm_ADCS X17 X17 X1 *) + 0x9a1f03ea; (* arm_ADC X10 XZR XZR *) + 0xb26083eb; (* arm_MOV X11 (rvalue (word 18446744069414584321)) *) + 0xab0b0193; (* arm_ADDS X19 X12 X11 *) + 0xb2407feb; (* arm_MOV X11 (rvalue (word 4294967295)) *) + 0xba0b01b4; (* arm_ADCS X20 X13 X11 *) + 0xd280002b; (* arm_MOV X11 (rvalue (word 1)) *) + 0xba0b01d5; (* arm_ADCS X21 X14 X11 *) + 0xba1f01f6; (* arm_ADCS X22 X15 XZR *) + 0xba1f0202; (* arm_ADCS X2 X16 XZR *) + 0xba1f0221; (* arm_ADCS X1 X17 XZR *) + 0xba1f014a; (* arm_ADCS X10 X10 XZR *) + 0x9a93018c; (* arm_CSEL X12 X12 X19 Condition_EQ *) + 0x9a9401ad; (* arm_CSEL X13 X13 X20 Condition_EQ *) + 0x9a9501ce; (* arm_CSEL X14 X14 X21 Condition_EQ *) + 0x9a9601ef; (* arm_CSEL X15 X15 X22 Condition_EQ *) + 0x9a820210; (* arm_CSEL X16 X16 X2 Condition_EQ *) + 0x9a810231; (* arm_CSEL X17 X17 X1 Condition_EQ *) + 0xa90637ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&96))) *) + 0xa9073fee; (* arm_STP X14 X15 SP (Immediate_Offset (iword (&112))) *) + 0xa90847f0; (* arm_STP X16 X17 SP (Immediate_Offset (iword (&128))) *) + 0xa9401be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&0))) *) + 0xa94c0fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&192))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa94123e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&16))) *) + 0xa94d0fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&208))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xa9422be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&32))) *) + 0xa94e0fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&224))) *) + 0xfa040129; (* arm_SBCS X9 X9 X4 *) + 0xfa03014a; (* arm_SBCS X10 X10 X3 *) + 0xda9f23e3; (* arm_CSETM X3 Condition_CC *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0xab0400a5; (* arm_ADDS X5 X5 X4 *) + 0xca030084; (* arm_EOR X4 X4 X3 *) + 0xba0400c6; (* arm_ADCS X6 X6 X4 *) + 0x92800024; (* arm_MOVN X4 (word 1) 0 *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0xba0400e7; (* arm_ADCS X7 X7 X4 *) + 0xba030108; (* arm_ADCS X8 X8 X3 *) + 0xba030129; (* arm_ADCS X9 X9 X3 *) + 0x9a03014a; (* arm_ADC X10 X10 X3 *) + 0xa9001b05; (* arm_STP X5 X6 X24 (Immediate_Offset (iword (&0))) *) + 0xa9012307; (* arm_STP X7 X8 X24 (Immediate_Offset (iword (&16))) *) + 0xa9022b09; (* arm_STP X9 X10 X24 (Immediate_Offset (iword (&32))) *) + 0xa9461be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&96))) *) + 0xa94c0fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&192))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa94723e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&112))) *) + 0xa94d0fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&208))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xa9482be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&128))) *) + 0xa94e0fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&224))) *) + 0xfa040129; (* arm_SBCS X9 X9 X4 *) + 0xfa03014a; (* arm_SBCS X10 X10 X3 *) + 0xda9f23e3; (* arm_CSETM X3 Condition_CC *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0xab0400a5; (* arm_ADDS X5 X5 X4 *) + 0xca030084; (* arm_EOR X4 X4 X3 *) + 0xba0400c6; (* arm_ADCS X6 X6 X4 *) + 0x92800024; (* arm_MOVN X4 (word 1) 0 *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0xba0400e7; (* arm_ADCS X7 X7 X4 *) + 0xba030108; (* arm_ADCS X8 X8 X3 *) + 0xba030129; (* arm_ADCS X9 X9 X3 *) + 0x9a03014a; (* arm_ADC X10 X10 X3 *) + 0xa9091be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&144))) *) + 0xa90a23e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&160))) *) + 0xa90b2be9; (* arm_STP X9 X10 SP (Immediate_Offset (iword (&176))) *) + 0xa94f13e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&240))) *) + 0xa9461b25; (* arm_LDP X5 X6 X25 (Immediate_Offset (iword (&96))) *) + 0x9b057c6c; (* arm_MUL X12 X3 X5 *) + 0x9bc57c6d; (* arm_UMULH X13 X3 X5 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa9472327; (* arm_LDP X7 X8 X25 (Immediate_Offset (iword (&112))) *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0x9bc77c6f; (* arm_UMULH X15 X3 X7 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c70; (* arm_UMULH X16 X3 X8 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0xa9482b29; (* arm_LDP X9 X10 X25 (Immediate_Offset (iword (&128))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c71; (* arm_UMULH X17 X3 X9 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c73; (* arm_UMULH X19 X3 X10 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b0294; (* arm_ADC X20 X20 X11 *) + 0xa95013e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&256))) *) + 0x9b057c6b; (* arm_MUL X11 X3 X5 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9a9f37f5; (* arm_CSET X21 Condition_CS *) + 0x9bc57c6b; (* arm_UMULH X11 X3 X5 *) + 0xab0b01ef; (* arm_ADDS X15 X15 X11 *) + 0x9bc67c6b; (* arm_UMULH X11 X3 X6 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9bc77c6b; (* arm_UMULH X11 X3 X7 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc87c6b; (* arm_UMULH X11 X3 X8 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc97c6b; (* arm_UMULH X11 X3 X9 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bca7c6b; (* arm_UMULH X11 X3 X10 *) + 0x9a0b02b5; (* arm_ADC X21 X21 X11 *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b01ef; (* arm_ADDS X15 X15 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9a9f37f6; (* arm_CSET X22 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b0210; (* arm_ADDS X16 X16 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b02d6; (* arm_ADC X22 X22 X11 *) + 0xa95113e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&272))) *) + 0x9b057c6b; (* arm_MUL X11 X3 X5 *) + 0xab0b0210; (* arm_ADDS X16 X16 X11 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9a9f37e2; (* arm_CSET X2 Condition_CS *) + 0x9bc57c6b; (* arm_UMULH X11 X3 X5 *) + 0xab0b0231; (* arm_ADDS X17 X17 X11 *) + 0x9bc67c6b; (* arm_UMULH X11 X3 X6 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc77c6b; (* arm_UMULH X11 X3 X7 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc87c6b; (* arm_UMULH X11 X3 X8 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bc97c6b; (* arm_UMULH X11 X3 X9 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9bca7c6b; (* arm_UMULH X11 X3 X10 *) + 0x9a0b0042; (* arm_ADC X2 X2 X11 *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b0231; (* arm_ADDS X17 X17 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0042; (* arm_ADCS X2 X2 X11 *) + 0x9a9f37e1; (* arm_CSET X1 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b0273; (* arm_ADDS X19 X19 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0042; (* arm_ADCS X2 X2 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b0021; (* arm_ADC X1 X1 X11 *) + 0xd3607d87; (* arm_LSL X7 X12 32 *) + 0x8b0c00ec; (* arm_ADD X12 X7 X12 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcc7ce7; (* arm_UMULH X7 X7 X12 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0c7cc5; (* arm_MUL X5 X6 X12 *) + 0x9bcc7cc6; (* arm_UMULH X6 X6 X12 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0c00c6; (* arm_ADCS X6 X6 X12 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ad; (* arm_SUBS X13 X13 X7 *) + 0xfa0601ce; (* arm_SBCS X14 X14 X6 *) + 0xfa0501ef; (* arm_SBCS X15 X15 X5 *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xda1f018c; (* arm_SBC X12 X12 XZR *) + 0xd3607da7; (* arm_LSL X7 X13 32 *) + 0x8b0d00ed; (* arm_ADD X13 X7 X13 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcd7ce7; (* arm_UMULH X7 X7 X13 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0d7cc5; (* arm_MUL X5 X6 X13 *) + 0x9bcd7cc6; (* arm_UMULH X6 X6 X13 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0d00c6; (* arm_ADCS X6 X6 X13 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ce; (* arm_SUBS X14 X14 X7 *) + 0xfa0601ef; (* arm_SBCS X15 X15 X6 *) + 0xfa050210; (* arm_SBCS X16 X16 X5 *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda1f01ad; (* arm_SBC X13 X13 XZR *) + 0xd3607dc7; (* arm_LSL X7 X14 32 *) + 0x8b0e00ee; (* arm_ADD X14 X7 X14 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bce7ce7; (* arm_UMULH X7 X7 X14 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0e7cc5; (* arm_MUL X5 X6 X14 *) + 0x9bce7cc6; (* arm_UMULH X6 X6 X14 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0e00c6; (* arm_ADCS X6 X6 X14 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ef; (* arm_SUBS X15 X15 X7 *) + 0xfa060210; (* arm_SBCS X16 X16 X6 *) + 0xfa050231; (* arm_SBCS X17 X17 X5 *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xda1f01ce; (* arm_SBC X14 X14 XZR *) + 0xd3607de7; (* arm_LSL X7 X15 32 *) + 0x8b0f00ef; (* arm_ADD X15 X7 X15 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcf7ce7; (* arm_UMULH X7 X7 X15 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0f7cc5; (* arm_MUL X5 X6 X15 *) + 0x9bcf7cc6; (* arm_UMULH X6 X6 X15 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0f00c6; (* arm_ADCS X6 X6 X15 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb070210; (* arm_SUBS X16 X16 X7 *) + 0xfa060231; (* arm_SBCS X17 X17 X6 *) + 0xfa05018c; (* arm_SBCS X12 X12 X5 *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xda1f01ef; (* arm_SBC X15 X15 XZR *) + 0xd3607e07; (* arm_LSL X7 X16 32 *) + 0x8b1000f0; (* arm_ADD X16 X7 X16 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bd07ce7; (* arm_UMULH X7 X7 X16 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b107cc5; (* arm_MUL X5 X6 X16 *) + 0x9bd07cc6; (* arm_UMULH X6 X6 X16 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba1000c6; (* arm_ADCS X6 X6 X16 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb070231; (* arm_SUBS X17 X17 X7 *) + 0xfa06018c; (* arm_SBCS X12 X12 X6 *) + 0xfa0501ad; (* arm_SBCS X13 X13 X5 *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xda1f0210; (* arm_SBC X16 X16 XZR *) + 0xd3607e27; (* arm_LSL X7 X17 32 *) + 0x8b1100f1; (* arm_ADD X17 X7 X17 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bd17ce7; (* arm_UMULH X7 X7 X17 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b117cc5; (* arm_MUL X5 X6 X17 *) + 0x9bd17cc6; (* arm_UMULH X6 X6 X17 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba1100c6; (* arm_ADCS X6 X6 X17 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb07018c; (* arm_SUBS X12 X12 X7 *) + 0xfa0601ad; (* arm_SBCS X13 X13 X6 *) + 0xfa0501ce; (* arm_SBCS X14 X14 X5 *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xda1f0231; (* arm_SBC X17 X17 XZR *) + 0xab13018c; (* arm_ADDS X12 X12 X19 *) + 0xba1401ad; (* arm_ADCS X13 X13 X20 *) + 0xba1501ce; (* arm_ADCS X14 X14 X21 *) + 0xba1601ef; (* arm_ADCS X15 X15 X22 *) + 0xba020210; (* arm_ADCS X16 X16 X2 *) + 0xba010231; (* arm_ADCS X17 X17 X1 *) + 0x9a1f03ea; (* arm_ADC X10 XZR XZR *) + 0xb26083eb; (* arm_MOV X11 (rvalue (word 18446744069414584321)) *) + 0xab0b0193; (* arm_ADDS X19 X12 X11 *) + 0xb2407feb; (* arm_MOV X11 (rvalue (word 4294967295)) *) + 0xba0b01b4; (* arm_ADCS X20 X13 X11 *) + 0xd280002b; (* arm_MOV X11 (rvalue (word 1)) *) + 0xba0b01d5; (* arm_ADCS X21 X14 X11 *) + 0xba1f01f6; (* arm_ADCS X22 X15 XZR *) + 0xba1f0202; (* arm_ADCS X2 X16 XZR *) + 0xba1f0221; (* arm_ADCS X1 X17 XZR *) + 0xba1f014a; (* arm_ADCS X10 X10 XZR *) + 0x9a93018c; (* arm_CSEL X12 X12 X19 Condition_EQ *) + 0x9a9401ad; (* arm_CSEL X13 X13 X20 Condition_EQ *) + 0x9a9501ce; (* arm_CSEL X14 X14 X21 Condition_EQ *) + 0x9a9601ef; (* arm_CSEL X15 X15 X22 Condition_EQ *) + 0x9a820210; (* arm_CSEL X16 X16 X2 Condition_EQ *) + 0x9a810231; (* arm_CSEL X17 X17 X1 Condition_EQ *) + 0xa90f37ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&240))) *) + 0xa9103fee; (* arm_STP X14 X15 SP (Immediate_Offset (iword (&256))) *) + 0xa91147f0; (* arm_STP X16 X17 SP (Immediate_Offset (iword (&272))) *) + 0xa9401b05; (* arm_LDP X5 X6 X24 (Immediate_Offset (iword (&0))) *) + 0xa9460fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&96))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa9412307; (* arm_LDP X7 X8 X24 (Immediate_Offset (iword (&16))) *) + 0xa9470fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&112))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xa9422b09; (* arm_LDP X9 X10 X24 (Immediate_Offset (iword (&32))) *) + 0xa9480fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&128))) *) + 0xfa040129; (* arm_SBCS X9 X9 X4 *) + 0xfa03014a; (* arm_SBCS X10 X10 X3 *) + 0xda9f23e3; (* arm_CSETM X3 Condition_CC *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0xab0400a5; (* arm_ADDS X5 X5 X4 *) + 0xca030084; (* arm_EOR X4 X4 X3 *) + 0xba0400c6; (* arm_ADCS X6 X6 X4 *) + 0x92800024; (* arm_MOVN X4 (word 1) 0 *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0xba0400e7; (* arm_ADCS X7 X7 X4 *) + 0xba030108; (* arm_ADCS X8 X8 X3 *) + 0xba030129; (* arm_ADCS X9 X9 X3 *) + 0x9a03014a; (* arm_ADC X10 X10 X3 *) + 0xa9001b05; (* arm_STP X5 X6 X24 (Immediate_Offset (iword (&0))) *) + 0xa9012307; (* arm_STP X7 X8 X24 (Immediate_Offset (iword (&16))) *) + 0xa9022b09; (* arm_STP X9 X10 X24 (Immediate_Offset (iword (&32))) *) + 0xa94c1be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&192))) *) + 0xa9400f04; (* arm_LDP X4 X3 X24 (Immediate_Offset (iword (&0))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa94d23e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&208))) *) + 0xa9410f04; (* arm_LDP X4 X3 X24 (Immediate_Offset (iword (&16))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xa94e2be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&224))) *) + 0xa9420f04; (* arm_LDP X4 X3 X24 (Immediate_Offset (iword (&32))) *) + 0xfa040129; (* arm_SBCS X9 X9 X4 *) + 0xfa03014a; (* arm_SBCS X10 X10 X3 *) + 0xda9f23e3; (* arm_CSETM X3 Condition_CC *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0xab0400a5; (* arm_ADDS X5 X5 X4 *) + 0xca030084; (* arm_EOR X4 X4 X3 *) + 0xba0400c6; (* arm_ADCS X6 X6 X4 *) + 0x92800024; (* arm_MOVN X4 (word 1) 0 *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0xba0400e7; (* arm_ADCS X7 X7 X4 *) + 0xba030108; (* arm_ADCS X8 X8 X3 *) + 0xba030129; (* arm_ADCS X9 X9 X3 *) + 0x9a03014a; (* arm_ADC X10 X10 X3 *) + 0xa90c1be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&192))) *) + 0xa90d23e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&208))) *) + 0xa90e2be9; (* arm_STP X9 X10 SP (Immediate_Offset (iword (&224))) *) + 0xa94913e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&144))) *) + 0xa9521be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&288))) *) + 0x9b057c6c; (* arm_MUL X12 X3 X5 *) + 0x9bc57c6d; (* arm_UMULH X13 X3 X5 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa95323e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&304))) *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0x9bc77c6f; (* arm_UMULH X15 X3 X7 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c70; (* arm_UMULH X16 X3 X8 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0xa9542be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&320))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c71; (* arm_UMULH X17 X3 X9 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c73; (* arm_UMULH X19 X3 X10 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b0294; (* arm_ADC X20 X20 X11 *) + 0xa94a13e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&160))) *) + 0x9b057c6b; (* arm_MUL X11 X3 X5 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9a9f37f5; (* arm_CSET X21 Condition_CS *) + 0x9bc57c6b; (* arm_UMULH X11 X3 X5 *) + 0xab0b01ef; (* arm_ADDS X15 X15 X11 *) + 0x9bc67c6b; (* arm_UMULH X11 X3 X6 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9bc77c6b; (* arm_UMULH X11 X3 X7 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc87c6b; (* arm_UMULH X11 X3 X8 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc97c6b; (* arm_UMULH X11 X3 X9 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bca7c6b; (* arm_UMULH X11 X3 X10 *) + 0x9a0b02b5; (* arm_ADC X21 X21 X11 *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b01ef; (* arm_ADDS X15 X15 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9a9f37f6; (* arm_CSET X22 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b0210; (* arm_ADDS X16 X16 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b02d6; (* arm_ADC X22 X22 X11 *) + 0xa94b13e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&176))) *) + 0x9b057c6b; (* arm_MUL X11 X3 X5 *) + 0xab0b0210; (* arm_ADDS X16 X16 X11 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9a9f37e2; (* arm_CSET X2 Condition_CS *) + 0x9bc57c6b; (* arm_UMULH X11 X3 X5 *) + 0xab0b0231; (* arm_ADDS X17 X17 X11 *) + 0x9bc67c6b; (* arm_UMULH X11 X3 X6 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc77c6b; (* arm_UMULH X11 X3 X7 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc87c6b; (* arm_UMULH X11 X3 X8 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bc97c6b; (* arm_UMULH X11 X3 X9 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9bca7c6b; (* arm_UMULH X11 X3 X10 *) + 0x9a0b0042; (* arm_ADC X2 X2 X11 *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b0231; (* arm_ADDS X17 X17 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0042; (* arm_ADCS X2 X2 X11 *) + 0x9a9f37e1; (* arm_CSET X1 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b0273; (* arm_ADDS X19 X19 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0042; (* arm_ADCS X2 X2 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b0021; (* arm_ADC X1 X1 X11 *) + 0xd3607d87; (* arm_LSL X7 X12 32 *) + 0x8b0c00ec; (* arm_ADD X12 X7 X12 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcc7ce7; (* arm_UMULH X7 X7 X12 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0c7cc5; (* arm_MUL X5 X6 X12 *) + 0x9bcc7cc6; (* arm_UMULH X6 X6 X12 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0c00c6; (* arm_ADCS X6 X6 X12 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ad; (* arm_SUBS X13 X13 X7 *) + 0xfa0601ce; (* arm_SBCS X14 X14 X6 *) + 0xfa0501ef; (* arm_SBCS X15 X15 X5 *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xda1f018c; (* arm_SBC X12 X12 XZR *) + 0xd3607da7; (* arm_LSL X7 X13 32 *) + 0x8b0d00ed; (* arm_ADD X13 X7 X13 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcd7ce7; (* arm_UMULH X7 X7 X13 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0d7cc5; (* arm_MUL X5 X6 X13 *) + 0x9bcd7cc6; (* arm_UMULH X6 X6 X13 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0d00c6; (* arm_ADCS X6 X6 X13 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ce; (* arm_SUBS X14 X14 X7 *) + 0xfa0601ef; (* arm_SBCS X15 X15 X6 *) + 0xfa050210; (* arm_SBCS X16 X16 X5 *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda1f01ad; (* arm_SBC X13 X13 XZR *) + 0xd3607dc7; (* arm_LSL X7 X14 32 *) + 0x8b0e00ee; (* arm_ADD X14 X7 X14 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bce7ce7; (* arm_UMULH X7 X7 X14 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0e7cc5; (* arm_MUL X5 X6 X14 *) + 0x9bce7cc6; (* arm_UMULH X6 X6 X14 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0e00c6; (* arm_ADCS X6 X6 X14 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ef; (* arm_SUBS X15 X15 X7 *) + 0xfa060210; (* arm_SBCS X16 X16 X6 *) + 0xfa050231; (* arm_SBCS X17 X17 X5 *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xda1f01ce; (* arm_SBC X14 X14 XZR *) + 0xd3607de7; (* arm_LSL X7 X15 32 *) + 0x8b0f00ef; (* arm_ADD X15 X7 X15 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcf7ce7; (* arm_UMULH X7 X7 X15 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0f7cc5; (* arm_MUL X5 X6 X15 *) + 0x9bcf7cc6; (* arm_UMULH X6 X6 X15 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0f00c6; (* arm_ADCS X6 X6 X15 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb070210; (* arm_SUBS X16 X16 X7 *) + 0xfa060231; (* arm_SBCS X17 X17 X6 *) + 0xfa05018c; (* arm_SBCS X12 X12 X5 *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xda1f01ef; (* arm_SBC X15 X15 XZR *) + 0xd3607e07; (* arm_LSL X7 X16 32 *) + 0x8b1000f0; (* arm_ADD X16 X7 X16 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bd07ce7; (* arm_UMULH X7 X7 X16 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b107cc5; (* arm_MUL X5 X6 X16 *) + 0x9bd07cc6; (* arm_UMULH X6 X6 X16 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba1000c6; (* arm_ADCS X6 X6 X16 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb070231; (* arm_SUBS X17 X17 X7 *) + 0xfa06018c; (* arm_SBCS X12 X12 X6 *) + 0xfa0501ad; (* arm_SBCS X13 X13 X5 *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xda1f0210; (* arm_SBC X16 X16 XZR *) + 0xd3607e27; (* arm_LSL X7 X17 32 *) + 0x8b1100f1; (* arm_ADD X17 X7 X17 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bd17ce7; (* arm_UMULH X7 X7 X17 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b117cc5; (* arm_MUL X5 X6 X17 *) + 0x9bd17cc6; (* arm_UMULH X6 X6 X17 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba1100c6; (* arm_ADCS X6 X6 X17 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb07018c; (* arm_SUBS X12 X12 X7 *) + 0xfa0601ad; (* arm_SBCS X13 X13 X6 *) + 0xfa0501ce; (* arm_SBCS X14 X14 X5 *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xda1f0231; (* arm_SBC X17 X17 XZR *) + 0xab13018c; (* arm_ADDS X12 X12 X19 *) + 0xba1401ad; (* arm_ADCS X13 X13 X20 *) + 0xba1501ce; (* arm_ADCS X14 X14 X21 *) + 0xba1601ef; (* arm_ADCS X15 X15 X22 *) + 0xba020210; (* arm_ADCS X16 X16 X2 *) + 0xba010231; (* arm_ADCS X17 X17 X1 *) + 0x9a1f03ea; (* arm_ADC X10 XZR XZR *) + 0xb26083eb; (* arm_MOV X11 (rvalue (word 18446744069414584321)) *) + 0xab0b0193; (* arm_ADDS X19 X12 X11 *) + 0xb2407feb; (* arm_MOV X11 (rvalue (word 4294967295)) *) + 0xba0b01b4; (* arm_ADCS X20 X13 X11 *) + 0xd280002b; (* arm_MOV X11 (rvalue (word 1)) *) + 0xba0b01d5; (* arm_ADCS X21 X14 X11 *) + 0xba1f01f6; (* arm_ADCS X22 X15 XZR *) + 0xba1f0202; (* arm_ADCS X2 X16 XZR *) + 0xba1f0221; (* arm_ADCS X1 X17 XZR *) + 0xba1f014a; (* arm_ADCS X10 X10 XZR *) + 0x9a93018c; (* arm_CSEL X12 X12 X19 Condition_EQ *) + 0x9a9401ad; (* arm_CSEL X13 X13 X20 Condition_EQ *) + 0x9a9501ce; (* arm_CSEL X14 X14 X21 Condition_EQ *) + 0x9a9601ef; (* arm_CSEL X15 X15 X22 Condition_EQ *) + 0x9a820210; (* arm_CSEL X16 X16 X2 Condition_EQ *) + 0x9a810231; (* arm_CSEL X17 X17 X1 Condition_EQ *) + 0xa90937ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&144))) *) + 0xa90a3fee; (* arm_STP X14 X15 SP (Immediate_Offset (iword (&160))) *) + 0xa90b47f0; (* arm_STP X16 X17 SP (Immediate_Offset (iword (&176))) *) + 0xa94f13e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&240))) *) + 0xa9461b45; (* arm_LDP X5 X6 X26 (Immediate_Offset (iword (&96))) *) + 0x9b057c6c; (* arm_MUL X12 X3 X5 *) + 0x9bc57c6d; (* arm_UMULH X13 X3 X5 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa9472347; (* arm_LDP X7 X8 X26 (Immediate_Offset (iword (&112))) *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0x9bc77c6f; (* arm_UMULH X15 X3 X7 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c70; (* arm_UMULH X16 X3 X8 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0xa9482b49; (* arm_LDP X9 X10 X26 (Immediate_Offset (iword (&128))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c71; (* arm_UMULH X17 X3 X9 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c73; (* arm_UMULH X19 X3 X10 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b0294; (* arm_ADC X20 X20 X11 *) + 0xa95013e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&256))) *) + 0x9b057c6b; (* arm_MUL X11 X3 X5 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9a9f37f5; (* arm_CSET X21 Condition_CS *) + 0x9bc57c6b; (* arm_UMULH X11 X3 X5 *) + 0xab0b01ef; (* arm_ADDS X15 X15 X11 *) + 0x9bc67c6b; (* arm_UMULH X11 X3 X6 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9bc77c6b; (* arm_UMULH X11 X3 X7 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc87c6b; (* arm_UMULH X11 X3 X8 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc97c6b; (* arm_UMULH X11 X3 X9 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bca7c6b; (* arm_UMULH X11 X3 X10 *) + 0x9a0b02b5; (* arm_ADC X21 X21 X11 *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b01ef; (* arm_ADDS X15 X15 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9a9f37f6; (* arm_CSET X22 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b0210; (* arm_ADDS X16 X16 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b02d6; (* arm_ADC X22 X22 X11 *) + 0xa95113e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&272))) *) + 0x9b057c6b; (* arm_MUL X11 X3 X5 *) + 0xab0b0210; (* arm_ADDS X16 X16 X11 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9a9f37e2; (* arm_CSET X2 Condition_CS *) + 0x9bc57c6b; (* arm_UMULH X11 X3 X5 *) + 0xab0b0231; (* arm_ADDS X17 X17 X11 *) + 0x9bc67c6b; (* arm_UMULH X11 X3 X6 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc77c6b; (* arm_UMULH X11 X3 X7 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc87c6b; (* arm_UMULH X11 X3 X8 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bc97c6b; (* arm_UMULH X11 X3 X9 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9bca7c6b; (* arm_UMULH X11 X3 X10 *) + 0x9a0b0042; (* arm_ADC X2 X2 X11 *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b0231; (* arm_ADDS X17 X17 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0042; (* arm_ADCS X2 X2 X11 *) + 0x9a9f37e1; (* arm_CSET X1 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b0273; (* arm_ADDS X19 X19 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0042; (* arm_ADCS X2 X2 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b0021; (* arm_ADC X1 X1 X11 *) + 0xd3607d87; (* arm_LSL X7 X12 32 *) + 0x8b0c00ec; (* arm_ADD X12 X7 X12 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcc7ce7; (* arm_UMULH X7 X7 X12 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0c7cc5; (* arm_MUL X5 X6 X12 *) + 0x9bcc7cc6; (* arm_UMULH X6 X6 X12 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0c00c6; (* arm_ADCS X6 X6 X12 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ad; (* arm_SUBS X13 X13 X7 *) + 0xfa0601ce; (* arm_SBCS X14 X14 X6 *) + 0xfa0501ef; (* arm_SBCS X15 X15 X5 *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xda1f018c; (* arm_SBC X12 X12 XZR *) + 0xd3607da7; (* arm_LSL X7 X13 32 *) + 0x8b0d00ed; (* arm_ADD X13 X7 X13 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcd7ce7; (* arm_UMULH X7 X7 X13 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0d7cc5; (* arm_MUL X5 X6 X13 *) + 0x9bcd7cc6; (* arm_UMULH X6 X6 X13 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0d00c6; (* arm_ADCS X6 X6 X13 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ce; (* arm_SUBS X14 X14 X7 *) + 0xfa0601ef; (* arm_SBCS X15 X15 X6 *) + 0xfa050210; (* arm_SBCS X16 X16 X5 *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda1f01ad; (* arm_SBC X13 X13 XZR *) + 0xd3607dc7; (* arm_LSL X7 X14 32 *) + 0x8b0e00ee; (* arm_ADD X14 X7 X14 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bce7ce7; (* arm_UMULH X7 X7 X14 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0e7cc5; (* arm_MUL X5 X6 X14 *) + 0x9bce7cc6; (* arm_UMULH X6 X6 X14 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0e00c6; (* arm_ADCS X6 X6 X14 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ef; (* arm_SUBS X15 X15 X7 *) + 0xfa060210; (* arm_SBCS X16 X16 X6 *) + 0xfa050231; (* arm_SBCS X17 X17 X5 *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xda1f01ce; (* arm_SBC X14 X14 XZR *) + 0xd3607de7; (* arm_LSL X7 X15 32 *) + 0x8b0f00ef; (* arm_ADD X15 X7 X15 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcf7ce7; (* arm_UMULH X7 X7 X15 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0f7cc5; (* arm_MUL X5 X6 X15 *) + 0x9bcf7cc6; (* arm_UMULH X6 X6 X15 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0f00c6; (* arm_ADCS X6 X6 X15 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb070210; (* arm_SUBS X16 X16 X7 *) + 0xfa060231; (* arm_SBCS X17 X17 X6 *) + 0xfa05018c; (* arm_SBCS X12 X12 X5 *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xda1f01ef; (* arm_SBC X15 X15 XZR *) + 0xd3607e07; (* arm_LSL X7 X16 32 *) + 0x8b1000f0; (* arm_ADD X16 X7 X16 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bd07ce7; (* arm_UMULH X7 X7 X16 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b107cc5; (* arm_MUL X5 X6 X16 *) + 0x9bd07cc6; (* arm_UMULH X6 X6 X16 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba1000c6; (* arm_ADCS X6 X6 X16 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb070231; (* arm_SUBS X17 X17 X7 *) + 0xfa06018c; (* arm_SBCS X12 X12 X6 *) + 0xfa0501ad; (* arm_SBCS X13 X13 X5 *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xda1f0210; (* arm_SBC X16 X16 XZR *) + 0xd3607e27; (* arm_LSL X7 X17 32 *) + 0x8b1100f1; (* arm_ADD X17 X7 X17 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bd17ce7; (* arm_UMULH X7 X7 X17 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b117cc5; (* arm_MUL X5 X6 X17 *) + 0x9bd17cc6; (* arm_UMULH X6 X6 X17 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba1100c6; (* arm_ADCS X6 X6 X17 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb07018c; (* arm_SUBS X12 X12 X7 *) + 0xfa0601ad; (* arm_SBCS X13 X13 X6 *) + 0xfa0501ce; (* arm_SBCS X14 X14 X5 *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xda1f0231; (* arm_SBC X17 X17 XZR *) + 0xab13018c; (* arm_ADDS X12 X12 X19 *) + 0xba1401ad; (* arm_ADCS X13 X13 X20 *) + 0xba1501ce; (* arm_ADCS X14 X14 X21 *) + 0xba1601ef; (* arm_ADCS X15 X15 X22 *) + 0xba020210; (* arm_ADCS X16 X16 X2 *) + 0xba010231; (* arm_ADCS X17 X17 X1 *) + 0x9a1f03ea; (* arm_ADC X10 XZR XZR *) + 0xb26083eb; (* arm_MOV X11 (rvalue (word 18446744069414584321)) *) + 0xab0b0193; (* arm_ADDS X19 X12 X11 *) + 0xb2407feb; (* arm_MOV X11 (rvalue (word 4294967295)) *) + 0xba0b01b4; (* arm_ADCS X20 X13 X11 *) + 0xd280002b; (* arm_MOV X11 (rvalue (word 1)) *) + 0xba0b01d5; (* arm_ADCS X21 X14 X11 *) + 0xba1f01f6; (* arm_ADCS X22 X15 XZR *) + 0xba1f0202; (* arm_ADCS X2 X16 XZR *) + 0xba1f0221; (* arm_ADCS X1 X17 XZR *) + 0xba1f014a; (* arm_ADCS X10 X10 XZR *) + 0x9a93018c; (* arm_CSEL X12 X12 X19 Condition_EQ *) + 0x9a9401ad; (* arm_CSEL X13 X13 X20 Condition_EQ *) + 0x9a9501ce; (* arm_CSEL X14 X14 X21 Condition_EQ *) + 0x9a9601ef; (* arm_CSEL X15 X15 X22 Condition_EQ *) + 0x9a820210; (* arm_CSEL X16 X16 X2 Condition_EQ *) + 0x9a810231; (* arm_CSEL X17 X17 X1 Condition_EQ *) + 0xa906370c; (* arm_STP X12 X13 X24 (Immediate_Offset (iword (&96))) *) + 0xa9073f0e; (* arm_STP X14 X15 X24 (Immediate_Offset (iword (&112))) *) + 0xa9084710; (* arm_STP X16 X17 X24 (Immediate_Offset (iword (&128))) *) + 0xa94313e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&48))) *) + 0xa94c1be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&192))) *) + 0x9b057c6c; (* arm_MUL X12 X3 X5 *) + 0x9bc57c6d; (* arm_UMULH X13 X3 X5 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa94d23e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&208))) *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0x9bc77c6f; (* arm_UMULH X15 X3 X7 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c70; (* arm_UMULH X16 X3 X8 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0xa94e2be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&224))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c71; (* arm_UMULH X17 X3 X9 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c73; (* arm_UMULH X19 X3 X10 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b0294; (* arm_ADC X20 X20 X11 *) + 0xa94413e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&64))) *) + 0x9b057c6b; (* arm_MUL X11 X3 X5 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9a9f37f5; (* arm_CSET X21 Condition_CS *) + 0x9bc57c6b; (* arm_UMULH X11 X3 X5 *) + 0xab0b01ef; (* arm_ADDS X15 X15 X11 *) + 0x9bc67c6b; (* arm_UMULH X11 X3 X6 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9bc77c6b; (* arm_UMULH X11 X3 X7 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc87c6b; (* arm_UMULH X11 X3 X8 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc97c6b; (* arm_UMULH X11 X3 X9 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bca7c6b; (* arm_UMULH X11 X3 X10 *) + 0x9a0b02b5; (* arm_ADC X21 X21 X11 *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b01ef; (* arm_ADDS X15 X15 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9a9f37f6; (* arm_CSET X22 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b0210; (* arm_ADDS X16 X16 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b02d6; (* arm_ADC X22 X22 X11 *) + 0xa94513e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&80))) *) + 0x9b057c6b; (* arm_MUL X11 X3 X5 *) + 0xab0b0210; (* arm_ADDS X16 X16 X11 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9a9f37e2; (* arm_CSET X2 Condition_CS *) + 0x9bc57c6b; (* arm_UMULH X11 X3 X5 *) + 0xab0b0231; (* arm_ADDS X17 X17 X11 *) + 0x9bc67c6b; (* arm_UMULH X11 X3 X6 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc77c6b; (* arm_UMULH X11 X3 X7 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc87c6b; (* arm_UMULH X11 X3 X8 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bc97c6b; (* arm_UMULH X11 X3 X9 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9bca7c6b; (* arm_UMULH X11 X3 X10 *) + 0x9a0b0042; (* arm_ADC X2 X2 X11 *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b0231; (* arm_ADDS X17 X17 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0042; (* arm_ADCS X2 X2 X11 *) + 0x9a9f37e1; (* arm_CSET X1 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b0273; (* arm_ADDS X19 X19 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0042; (* arm_ADCS X2 X2 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b0021; (* arm_ADC X1 X1 X11 *) + 0xd3607d87; (* arm_LSL X7 X12 32 *) + 0x8b0c00ec; (* arm_ADD X12 X7 X12 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcc7ce7; (* arm_UMULH X7 X7 X12 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0c7cc5; (* arm_MUL X5 X6 X12 *) + 0x9bcc7cc6; (* arm_UMULH X6 X6 X12 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0c00c6; (* arm_ADCS X6 X6 X12 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ad; (* arm_SUBS X13 X13 X7 *) + 0xfa0601ce; (* arm_SBCS X14 X14 X6 *) + 0xfa0501ef; (* arm_SBCS X15 X15 X5 *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xda1f018c; (* arm_SBC X12 X12 XZR *) + 0xd3607da7; (* arm_LSL X7 X13 32 *) + 0x8b0d00ed; (* arm_ADD X13 X7 X13 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcd7ce7; (* arm_UMULH X7 X7 X13 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0d7cc5; (* arm_MUL X5 X6 X13 *) + 0x9bcd7cc6; (* arm_UMULH X6 X6 X13 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0d00c6; (* arm_ADCS X6 X6 X13 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ce; (* arm_SUBS X14 X14 X7 *) + 0xfa0601ef; (* arm_SBCS X15 X15 X6 *) + 0xfa050210; (* arm_SBCS X16 X16 X5 *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda1f01ad; (* arm_SBC X13 X13 XZR *) + 0xd3607dc7; (* arm_LSL X7 X14 32 *) + 0x8b0e00ee; (* arm_ADD X14 X7 X14 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bce7ce7; (* arm_UMULH X7 X7 X14 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0e7cc5; (* arm_MUL X5 X6 X14 *) + 0x9bce7cc6; (* arm_UMULH X6 X6 X14 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0e00c6; (* arm_ADCS X6 X6 X14 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ef; (* arm_SUBS X15 X15 X7 *) + 0xfa060210; (* arm_SBCS X16 X16 X6 *) + 0xfa050231; (* arm_SBCS X17 X17 X5 *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xda1f01ce; (* arm_SBC X14 X14 XZR *) + 0xd3607de7; (* arm_LSL X7 X15 32 *) + 0x8b0f00ef; (* arm_ADD X15 X7 X15 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcf7ce7; (* arm_UMULH X7 X7 X15 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0f7cc5; (* arm_MUL X5 X6 X15 *) + 0x9bcf7cc6; (* arm_UMULH X6 X6 X15 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0f00c6; (* arm_ADCS X6 X6 X15 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb070210; (* arm_SUBS X16 X16 X7 *) + 0xfa060231; (* arm_SBCS X17 X17 X6 *) + 0xfa05018c; (* arm_SBCS X12 X12 X5 *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xda1f01ef; (* arm_SBC X15 X15 XZR *) + 0xd3607e07; (* arm_LSL X7 X16 32 *) + 0x8b1000f0; (* arm_ADD X16 X7 X16 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bd07ce7; (* arm_UMULH X7 X7 X16 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b107cc5; (* arm_MUL X5 X6 X16 *) + 0x9bd07cc6; (* arm_UMULH X6 X6 X16 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba1000c6; (* arm_ADCS X6 X6 X16 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb070231; (* arm_SUBS X17 X17 X7 *) + 0xfa06018c; (* arm_SBCS X12 X12 X6 *) + 0xfa0501ad; (* arm_SBCS X13 X13 X5 *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xda1f0210; (* arm_SBC X16 X16 XZR *) + 0xd3607e27; (* arm_LSL X7 X17 32 *) + 0x8b1100f1; (* arm_ADD X17 X7 X17 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bd17ce7; (* arm_UMULH X7 X7 X17 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b117cc5; (* arm_MUL X5 X6 X17 *) + 0x9bd17cc6; (* arm_UMULH X6 X6 X17 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba1100c6; (* arm_ADCS X6 X6 X17 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb07018c; (* arm_SUBS X12 X12 X7 *) + 0xfa0601ad; (* arm_SBCS X13 X13 X6 *) + 0xfa0501ce; (* arm_SBCS X14 X14 X5 *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xda1f0231; (* arm_SBC X17 X17 XZR *) + 0xab13018c; (* arm_ADDS X12 X12 X19 *) + 0xba1401ad; (* arm_ADCS X13 X13 X20 *) + 0xba1501ce; (* arm_ADCS X14 X14 X21 *) + 0xba1601ef; (* arm_ADCS X15 X15 X22 *) + 0xba020210; (* arm_ADCS X16 X16 X2 *) + 0xba010231; (* arm_ADCS X17 X17 X1 *) + 0x9a1f03ea; (* arm_ADC X10 XZR XZR *) + 0xb26083eb; (* arm_MOV X11 (rvalue (word 18446744069414584321)) *) + 0xab0b0193; (* arm_ADDS X19 X12 X11 *) + 0xb2407feb; (* arm_MOV X11 (rvalue (word 4294967295)) *) + 0xba0b01b4; (* arm_ADCS X20 X13 X11 *) + 0xd280002b; (* arm_MOV X11 (rvalue (word 1)) *) + 0xba0b01d5; (* arm_ADCS X21 X14 X11 *) + 0xba1f01f6; (* arm_ADCS X22 X15 XZR *) + 0xba1f0202; (* arm_ADCS X2 X16 XZR *) + 0xba1f0221; (* arm_ADCS X1 X17 XZR *) + 0xba1f014a; (* arm_ADCS X10 X10 XZR *) + 0x9a93018c; (* arm_CSEL X12 X12 X19 Condition_EQ *) + 0x9a9401ad; (* arm_CSEL X13 X13 X20 Condition_EQ *) + 0x9a9501ce; (* arm_CSEL X14 X14 X21 Condition_EQ *) + 0x9a9601ef; (* arm_CSEL X15 X15 X22 Condition_EQ *) + 0x9a820210; (* arm_CSEL X16 X16 X2 Condition_EQ *) + 0x9a810231; (* arm_CSEL X17 X17 X1 Condition_EQ *) + 0xa90c37ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&192))) *) + 0xa90d3fee; (* arm_STP X14 X15 SP (Immediate_Offset (iword (&208))) *) + 0xa90e47f0; (* arm_STP X16 X17 SP (Immediate_Offset (iword (&224))) *) + 0xa94c1be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&192))) *) + 0xa9490fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&144))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa94d23e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&208))) *) + 0xa94a0fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&160))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xa94e2be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&224))) *) + 0xa94b0fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&176))) *) + 0xfa040129; (* arm_SBCS X9 X9 X4 *) + 0xfa03014a; (* arm_SBCS X10 X10 X3 *) + 0xda9f23e3; (* arm_CSETM X3 Condition_CC *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0xab0400a5; (* arm_ADDS X5 X5 X4 *) + 0xca030084; (* arm_EOR X4 X4 X3 *) + 0xba0400c6; (* arm_ADCS X6 X6 X4 *) + 0x92800024; (* arm_MOVN X4 (word 1) 0 *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0xba0400e7; (* arm_ADCS X7 X7 X4 *) + 0xba030108; (* arm_ADCS X8 X8 X3 *) + 0xba030129; (* arm_ADCS X9 X9 X3 *) + 0x9a03014a; (* arm_ADC X10 X10 X3 *) + 0xa9031b05; (* arm_STP X5 X6 X24 (Immediate_Offset (iword (&48))) *) + 0xa9042307; (* arm_STP X7 X8 X24 (Immediate_Offset (iword (&64))) *) + 0xa9052b09; (* arm_STP X9 X10 X24 (Immediate_Offset (iword (&80))) *) + 0x910543ff; (* arm_ADD SP SP (rvalue (word 336)) *) + 0xa8c16bf9; (* arm_LDP X25 X26 SP (Postimmediate_Offset (iword (&16))) *) + 0xa8c163f7; (* arm_LDP X23 X24 SP (Postimmediate_Offset (iword (&16))) *) + 0xa8c15bf5; (* arm_LDP X21 X22 SP (Postimmediate_Offset (iword (&16))) *) + 0xa8c153f3; (* arm_LDP X19 X20 SP (Postimmediate_Offset (iword (&16))) *) + 0xd65f03c0 (* arm_RET X30 *) +];; + +let P384_MONTJADD_EXEC = ARM_MK_EXEC_RULE p384_montjadd_mc;; + +(* ------------------------------------------------------------------------- *) +(* Common supporting definitions and lemmas for component proofs. *) +(* ------------------------------------------------------------------------- *) + +let p_384 = new_definition `p_384 = 39402006196394479212279040100143613805079739270465446667948293404245721771496870329047266088258938001861606973112319`;; + +let nistp384 = define + `nistp384 = + (integer_mod_ring p_384, + ring_neg (integer_mod_ring p_384) (&3), + &b_384:int)`;; + +let nistp384_encode = new_definition + `nistp384_encode = montgomery_encode(384,p_384)`;; + +let swlemma = WORD_RULE + `word_add (word_shl x 32) x:int64 = word(4294967297 * val x)`;; + +let mmlemma = prove + (`!h (l:int64) (x:int64). + &2 pow 64 * &h + &(val(l:int64)):real = + &18446744069414584321 * + &(val(word_add (word_shl x 32) x:int64)) + ==> &2 pow 64 * &h + &(val(x:int64)):real = + &18446744069414584321 * + &(val(word_add (word_shl x 32) x:int64))`, + REPEAT GEN_TAC THEN REWRITE_TAC[REAL_OF_NUM_CLAUSES] THEN + REPEAT STRIP_TAC THEN FIRST_ASSUM(SUBST1_TAC o SYM) THEN + AP_TERM_TAC THEN AP_TERM_TAC THEN + REWRITE_TAC[GSYM VAL_CONG; DIMINDEX_64] THEN FIRST_X_ASSUM(MATCH_MP_TAC o + MATCH_MP (NUMBER_RULE + `p * h + l:num = y ==> (y == x) (mod p) ==> (x == l) (mod p)`)) THEN + REWRITE_TAC[WORD_RULE + `word_add (word_shl x 32) x:int64 = word(4294967297 * val x)`] THEN + REWRITE_TAC[CONG; VAL_WORD; DIMINDEX_64] THEN CONV_TAC MOD_DOWN_CONV THEN + REWRITE_TAC[GSYM CONG] THEN MATCH_MP_TAC(NUMBER_RULE + `(a * b == 1) (mod p) ==> (a * (b * x) == x) (mod p)`) THEN + REWRITE_TAC[CONG] THEN CONV_TAC NUM_REDUCE_CONV);; + +let nintlemma = prove + (`&(num_of_int(x rem &p_384)) = x rem &p_384`, + MATCH_MP_TAC INT_OF_NUM_OF_INT THEN MATCH_MP_TAC INT_REM_POS THEN + REWRITE_TAC[INT_OF_NUM_EQ; p_384] THEN CONV_TAC NUM_REDUCE_CONV);; + +let unilemma0 = prove + (`x = a MOD p_384 ==> x < p_384 /\ &x = &a rem &p_384`, + REWRITE_TAC[INT_OF_NUM_REM; p_384] THEN ARITH_TAC);; + +let unilemma1 = prove + (`&x = a rem &p_384 ==> x < p_384 /\ &x = a rem &p_384`, + SIMP_TAC[GSYM INT_OF_NUM_LT; INT_LT_REM_EQ; p_384] THEN INT_ARITH_TAC);; + +let unilemma2 = prove + (`X = num_of_int(x rem &p_384) ==> X < p_384 /\ &X = x rem &p_384`, + DISCH_THEN SUBST1_TAC THEN + REWRITE_TAC[GSYM INT_OF_NUM_LT; nintlemma; INT_LT_REM_EQ] THEN + REWRITE_TAC[INT_OF_NUM_LT; p_384] THEN CONV_TAC NUM_REDUCE_CONV);; + +let lemont = prove + (`(&i * x * y) rem &p_384 = (&i * x rem &p_384 * y rem &p_384) rem &p_384`, + CONV_TAC INT_REM_DOWN_CONV THEN REWRITE_TAC[]);; + +let pumont = prove + (`(&(inverse_mod p_384 (2 EXP 384)) * + (&2 pow 384 * x) rem &p_384 * (&2 pow 384 * y) rem &p_384) rem &p_384 = + (&2 pow 384 * x * y) rem &p_384`, + CONV_TAC INT_REM_DOWN_CONV THEN REWRITE_TAC[INT_REM_EQ] THEN + MATCH_MP_TAC(INTEGER_RULE + `(i * t:int == &1) (mod p) + ==> (i * (t * x) * (t * y) == t * x * y) (mod p)`) THEN + REWRITE_TAC[GSYM num_congruent; INT_OF_NUM_CLAUSES] THEN + REWRITE_TAC[INVERSE_MOD_LMUL_EQ; COPRIME_REXP; COPRIME_2; p_384] THEN + CONV_TAC NUM_REDUCE_CONV);; + +let lvs = + ["x_1",[`X25`;`0`]; + "y_1",[`X25`;`48`]; + "z_1",[`X25`;`96`]; + "x_2",[`X26`;`0`]; + "y_2",[`X26`;`48`]; + "z_2",[`X26`;`96`]; + "x_3",[`X24`;`0`]; + "y_3",[`X24`;`48`]; + "z_3",[`X24`;`96`]; + "z1sq",[`SP`;`0`]; + "ww",[`SP`;`0`]; + "yd",[`SP`;`48`]; + "y2a",[`SP`;`48`]; + "x2a",[`SP`;`96`]; + "zzx2",[`SP`;`96`]; + "zz",[`SP`;`144`]; + "t1",[`SP`;`144`]; + "t2",[`SP`;`192`]; + "x1a",[`SP`;`192`]; + "zzx1",[`SP`;`192`]; + "xd",[`SP`;`240`]; + "z2sq",[`SP`;`240`]; + "y1a",[`SP`;`288`]];; + +(* ------------------------------------------------------------------------- *) +(* Instances of montsqr. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_MONTSQR_P384_TAC = + ARM_MACRO_SIM_ABBREV_TAC p384_montjadd_mc 215 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1. + !a. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) t = a + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0x4324) (word_add (read p3 t) (word n3),48) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p384_montjadd_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X24 s = read X24 t /\ + read X25 s = read X25 t /\ + read X26 s = read X26 t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) s = + a) + (\s. read PC s = pcout /\ + (a EXP 2 <= 2 EXP 384 * p_384 + ==> read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 6)) s = + (inverse_mod p_384 (2 EXP 384) * a EXP 2) MOD p_384)) + (MAYCHANGE [PC; X2; X3; X4; X5; X6; X7; X8; X9; X10; + X11; X12; X13; X14; X15; X16; X17; X19; X20] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 6)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + (*** Globalize the a EXP 2 <= 2 EXP 384 * p_384 assumption ***) + + ASM_CASES_TAC `a EXP 2 <= 2 EXP 384 * p_384` THENL + [ASM_REWRITE_TAC[]; ARM_SIM_TAC P384_MONTJADD_EXEC (1--215)] THEN + ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "x_" o lhand o concl) THEN + + (*** Main squaring block ***) + + ARM_ACCSTEPS_TAC P384_MONTJADD_EXEC (1--93) (1--93) THEN + + (*** Main Montgomery reduction block ***) + + ARM_ACCSTEPS_TAC P384_MONTJADD_EXEC + (allpairs (fun i j -> 16 * i + j) (0--5) + [97;99;101;102;104;105;106;107;108;109] @ + (190--196)) + (94--196) THEN + RULE_ASSUM_TAC(REWRITE_RULE[ADD_CLAUSES; COND_SWAP; GSYM WORD_BITVAL]) THEN + RULE_ASSUM_TAC(fun th -> try MATCH_MP mmlemma th with Failure _ -> th) THEN + + (*** Key properties of pre-reduced result ***) + + ABBREV_TAC + `t = bignum_of_wordlist + [sum_s190; sum_s191; sum_s192; sum_s193; sum_s194; sum_s195; + word(bitval carry_s195)]` THEN + SUBGOAL_THEN + `t < 2 * p_384 /\ (2 EXP 384 * t == a EXP 2) (mod p_384)` + STRIP_ASSUME_TAC THENL + [RULE_ASSUM_TAC(REWRITE_RULE[VAL_WORD_BITVAL]) THEN + ACCUMULATOR_POP_ASSUM_LIST + (STRIP_ASSUME_TAC o end_itlist CONJ o DECARRY_RULE) THEN + CONJ_TAC THENL + [FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP (ARITH_RULE + `ab <= 2 EXP 384 * p + ==> 2 EXP 384 * t < ab + 2 EXP 384 * p ==> t < 2 * p`)) THEN + MAP_EVERY EXPAND_TAC ["a"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + REWRITE_TAC[p_384; REAL_ARITH `a:real < b + c <=> a - b < c`] THEN + ASM_REWRITE_TAC[VAL_WORD_BITVAL] THEN BOUNDER_TAC[]; + REWRITE_TAC[REAL_CONGRUENCE; p_384] THEN CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["a"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ASM_REWRITE_TAC[VAL_WORD_BITVAL] THEN REAL_INTEGER_TAC]; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Final correction stage ***) + + ARM_ACCSTEPS_TAC P384_MONTJADD_EXEC + [198;200;202;203;204;205;206] (197--215) THEN + RULE_ASSUM_TAC(REWRITE_RULE + [GSYM WORD_BITVAL; COND_SWAP; REAL_BITVAL_NOT]) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + TRANS_TAC EQ_TRANS `t MOD p_384` THEN CONJ_TAC THENL + [ALL_TAC; + REWRITE_TAC[GSYM CONG] THEN FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP + (NUMBER_RULE + `(e * t == a EXP 2) (mod p) + ==> (e * i == 1) (mod p) ==> (t == i * a EXP 2) (mod p)`)) THEN + REWRITE_TAC[INVERSE_MOD_RMUL_EQ; COPRIME_REXP; COPRIME_2] THEN + REWRITE_TAC[p_384] THEN CONV_TAC NUM_REDUCE_CONV] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC EQUAL_FROM_CONGRUENT_MOD_MOD THEN + MAP_EVERY EXISTS_TAC + [`384`; `if t < p_384 then &t:real else &t - &p_384`] THEN + REPEAT CONJ_TAC THENL + [REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN BOUNDER_TAC[]; + REWRITE_TAC[p_384] THEN ARITH_TAC; + REWRITE_TAC[p_384] THEN ARITH_TAC; + ALL_TAC; + ASM_SIMP_TAC[MOD_CASES] THEN + GEN_REWRITE_TAC LAND_CONV [COND_RAND] THEN + SIMP_TAC[REAL_OF_NUM_SUB; GSYM NOT_LT]] THEN + SUBGOAL_THEN + `val(word_add (word(bitval carry_s195)) + (word(bitval carry_s205)):int64) = 0 <=> + t < p_384` + SUBST_ALL_TAC THENL + [REWRITE_TAC[VAL_WORD_ADD_CASES; VAL_WORD_BITVAL; DIMINDEX_64] THEN + SIMP_TAC[ADD_EQ_0; BITVAL_EQ_0; BITVAL_BOUND; ARITH_RULE + `a <= 1 /\ b <= 1 ==> a + b < 2 EXP 64`] THEN + EXPAND_TAC "t" THEN REWRITE_TAC[bignum_of_wordlist; VAL_WORD_BITVAL] THEN + ASM_CASES_TAC `carry_s195:bool` THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THENL + [REWRITE_TAC[p_384] THEN ARITH_TAC; ALL_TAC] THEN + REWRITE_TAC[ADD_CLAUSES; MULT_CLAUSES; GSYM NOT_LE] THEN AP_TERM_TAC THEN + MATCH_MP_TAC FLAG_FROM_CARRY_LE THEN EXISTS_TAC `384` THEN + REWRITE_TAC[bignum_of_wordlist; MULT_CLAUSES; ADD_CLAUSES] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; p_384] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ALL_TAC] THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[] THEN EXPAND_TAC "t" THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist; p_384] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + ASM_REWRITE_TAC[BITVAL_CLAUSES; VAL_WORD_BITVAL] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instances of montmul. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_MONTMUL_P384_TAC = + ARM_MACRO_SIM_ABBREV_TAC p384_montjadd_mc 271 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1 p2 n2. + !a. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) t = a + ==> + !b. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 6)) t = b + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0x4324) (word_add (read p3 t) (word n3),48) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p384_montjadd_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X24 s = read X24 t /\ + read X25 s = read X25 t /\ + read X26 s = read X26 t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) s = + a /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 6)) s = + b) + (\s. read PC s = pcout /\ + (a * b <= 2 EXP 384 * p_384 + ==> read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 6)) s = + (inverse_mod p_384 (2 EXP 384) * a * b) MOD p_384)) + (MAYCHANGE [PC; X1; X2; X3; X4; X5; X6; X7; X8; X9; + X10; X11; X12; X13; X14; X15; X16; X17; X19; + X20; X21; X22] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 6)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + (*** Globalize the a * b <= 2 EXP 384 * p_384 assumption ***) + + ASM_CASES_TAC `a * b <= 2 EXP 384 * p_384` THENL + [ASM_REWRITE_TAC[]; ARM_SIM_TAC P384_MONTJADD_EXEC (1--271)] THEN + ENSURES_INIT_TAC "s0" THEN + + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "y_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "x_" o lhand o concl) THEN + + (*** Main multiplication block ***) + + ARM_ACCSTEPS_TAC P384_MONTJADD_EXEC (1--149) (1--149) THEN + + (*** Main Montgomery reduction block ***) + + ARM_ACCSTEPS_TAC P384_MONTJADD_EXEC + (allpairs (fun i j -> 16 * i + j) (0--5) + [153;155;157;158;160;161;162;163;164;165] @ + (246--252)) + (150--252) THEN + RULE_ASSUM_TAC(REWRITE_RULE[ADD_CLAUSES; COND_SWAP; GSYM WORD_BITVAL]) THEN + RULE_ASSUM_TAC(fun th -> try MATCH_MP mmlemma th with Failure _ -> th) THEN + + (*** Key properties of pre-reduced result ***) + + ABBREV_TAC + `t = bignum_of_wordlist + [sum_s246; sum_s247; sum_s248; sum_s249; sum_s250; sum_s251; + word(bitval carry_s251)]` THEN + SUBGOAL_THEN + `t < 2 * p_384 /\ (2 EXP 384 * t == a * b) (mod p_384)` + STRIP_ASSUME_TAC THENL + [RULE_ASSUM_TAC(REWRITE_RULE[VAL_WORD_BITVAL]) THEN + ACCUMULATOR_POP_ASSUM_LIST + (STRIP_ASSUME_TAC o end_itlist CONJ o DECARRY_RULE) THEN + CONJ_TAC THENL + [FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP (ARITH_RULE + `ab <= 2 EXP 384 * p + ==> 2 EXP 384 * t < ab + 2 EXP 384 * p ==> t < 2 * p`)) THEN + MAP_EVERY EXPAND_TAC ["a"; "b"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + REWRITE_TAC[p_384; REAL_ARITH `a:real < b + c <=> a - b < c`] THEN + ASM_REWRITE_TAC[VAL_WORD_BITVAL] THEN BOUNDER_TAC[]; + REWRITE_TAC[REAL_CONGRUENCE; p_384] THEN CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["a"; "b"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ASM_REWRITE_TAC[VAL_WORD_BITVAL] THEN REAL_INTEGER_TAC]; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Final correction stage ***) + + ARM_ACCSTEPS_TAC P384_MONTJADD_EXEC + [254;256;258;259;260;261;262] (253--271) THEN + RULE_ASSUM_TAC(REWRITE_RULE + [GSYM WORD_BITVAL; COND_SWAP; REAL_BITVAL_NOT]) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + TRANS_TAC EQ_TRANS `t MOD p_384` THEN CONJ_TAC THENL + [ALL_TAC; + REWRITE_TAC[GSYM CONG] THEN FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP + (NUMBER_RULE + `(e * t == a * b) (mod p) + ==> (e * i == 1) (mod p) ==> (t == i * a * b) (mod p)`)) THEN + REWRITE_TAC[INVERSE_MOD_RMUL_EQ; COPRIME_REXP; COPRIME_2] THEN + REWRITE_TAC[p_384] THEN CONV_TAC NUM_REDUCE_CONV] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC EQUAL_FROM_CONGRUENT_MOD_MOD THEN + MAP_EVERY EXISTS_TAC + [`384`; `if t < p_384 then &t:real else &t - &p_384`] THEN + REPEAT CONJ_TAC THENL + [REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN BOUNDER_TAC[]; + REWRITE_TAC[p_384] THEN ARITH_TAC; + REWRITE_TAC[p_384] THEN ARITH_TAC; + ALL_TAC; + ASM_SIMP_TAC[MOD_CASES] THEN + GEN_REWRITE_TAC LAND_CONV [COND_RAND] THEN + SIMP_TAC[REAL_OF_NUM_SUB; GSYM NOT_LT]] THEN + SUBGOAL_THEN + `val(word_add (word(bitval carry_s251)) + (word(bitval carry_s261)):int64) = 0 <=> + t < p_384` + SUBST_ALL_TAC THENL + [REWRITE_TAC[VAL_WORD_ADD_CASES; VAL_WORD_BITVAL; DIMINDEX_64] THEN + SIMP_TAC[ADD_EQ_0; BITVAL_EQ_0; BITVAL_BOUND; ARITH_RULE + `a <= 1 /\ b <= 1 ==> a + b < 2 EXP 64`] THEN + EXPAND_TAC "t" THEN REWRITE_TAC[bignum_of_wordlist; VAL_WORD_BITVAL] THEN + ASM_CASES_TAC `carry_s251:bool` THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THENL + [REWRITE_TAC[p_384] THEN ARITH_TAC; ALL_TAC] THEN + REWRITE_TAC[ADD_CLAUSES; MULT_CLAUSES; GSYM NOT_LE] THEN AP_TERM_TAC THEN + MATCH_MP_TAC FLAG_FROM_CARRY_LE THEN EXISTS_TAC `384` THEN + REWRITE_TAC[bignum_of_wordlist; MULT_CLAUSES; ADD_CLAUSES] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; p_384] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ALL_TAC] THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[] THEN EXPAND_TAC "t" THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist; p_384] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + ASM_REWRITE_TAC[BITVAL_CLAUSES; VAL_WORD_BITVAL] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instances of sub. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_SUB_P384_TAC = + ARM_MACRO_SIM_ABBREV_TAC p384_montjadd_mc 27 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 6)) t = n + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0x4324) (word_add (read p3 t) (word n3),48) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p384_montjadd_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X24 s = read X24 t /\ + read X25 s = read X25 t /\ + read X26 s = read X26 t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 6)) s = + n) + (\s. read PC s = pcout /\ + (m < p_384 /\ n < p_384 + ==> &(read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 6)) s) = (&m - &n) rem &p_384)) + (MAYCHANGE [PC; X3; X4; X5; X6; X7; X8; X9; X10] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 6)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "m_" o lhand o concl) THEN + + ARM_ACCSTEPS_TAC P384_MONTJADD_EXEC (1--12) (1--12) THEN + + SUBGOAL_THEN `carry_s12 <=> m < n` SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN EXISTS_TAC `384` THEN + MAP_EVERY EXPAND_TAC ["m"; "n"] THEN REWRITE_TAC[GSYM REAL_OF_NUM_ADD] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_MUL; GSYM REAL_OF_NUM_POW] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ALL_TAC] THEN + + ARM_STEPS_TAC P384_MONTJADD_EXEC [13] THEN + RULE_ASSUM_TAC(REWRITE_RULE[WORD_UNMASK_64; NOT_LE]) THEN + + ARM_ACCSTEPS_TAC P384_MONTJADD_EXEC (14--27) (14--27) THEN + + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN STRIP_TAC THEN + CONV_TAC(LAND_CONV(RAND_CONV BIGNUM_EXPAND_CONV)) THEN + ASM_REWRITE_TAC[] THEN DISCARD_STATE_TAC "s27" THEN + + CONV_TAC SYM_CONV THEN MATCH_MP_TAC INT_REM_UNIQ THEN + EXISTS_TAC `--(&(bitval(m < n))):int` THEN REWRITE_TAC[INT_ABS_NUM] THEN + REWRITE_TAC[INT_ARITH `m - n:int = --b * p + z <=> z = b * p + m - n`] THEN + REWRITE_TAC[int_eq; int_le; int_lt] THEN + REWRITE_TAC[int_add_th; int_mul_th; int_of_num_th; int_sub_th] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_ADD; GSYM REAL_OF_NUM_MUL; + GSYM REAL_OF_NUM_POW] THEN + MATCH_MP_TAC(REAL_ARITH + `!t:real. p < t /\ + (&0 <= a /\ a < p) /\ + (&0 <= z /\ z < t) /\ + ((&0 <= z /\ z < t) /\ (&0 <= a /\ a < t) ==> z = a) + ==> z = a /\ &0 <= z /\ z < p`) THEN + EXISTS_TAC `(&2:real) pow 384` THEN + + CONJ_TAC THENL [REWRITE_TAC[p_384] THEN REAL_ARITH_TAC; ALL_TAC] THEN + CONJ_TAC THENL + [MAP_EVERY UNDISCH_TAC [`m < p_384`; `n < p_384`] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_LT] THEN + ASM_CASES_TAC `&m:real < &n` THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + POP_ASSUM MP_TAC THEN REWRITE_TAC[p_384] THEN REAL_ARITH_TAC; + ALL_TAC] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; STRIP_TAC] THEN + + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`384`; `&0:real`] THEN + ASM_REWRITE_TAC[] THEN + CONJ_TAC THENL [REAL_INTEGER_TAC; ALL_TAC] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + REWRITE_TAC[WORD_AND_MASK] THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC WORD_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["m"; "n"] THEN REWRITE_TAC[GSYM REAL_OF_NUM_ADD] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_MUL; GSYM REAL_OF_NUM_POW; p_384] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + CONV_TAC(RAND_CONV REAL_POLY_CONV) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instances of amontsqr. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_AMONTSQR_P384_TAC = + ARM_MACRO_SIM_ABBREV_TAC p384_montjadd_mc 209 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1. + !a. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) t = a + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0x4324) (word_add (read p3 t) (word n3),48) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p384_montjadd_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X24 s = read X24 t /\ + read X25 s = read X25 t /\ + read X26 s = read X26 t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) s = + a) + (\s. read PC s = pcout /\ + read(memory :> bytes(word_add (read p3 t) (word n3),8 * 6)) s + < 2 EXP 384 /\ + (read(memory :> bytes(word_add (read p3 t) (word n3),8 * 6)) s == + inverse_mod p_384 (2 EXP 384) * a EXP 2) (mod p_384)) + (MAYCHANGE [PC; X2; X3; X4; X5; X6; X7; X8; X9; X10; + X11; X12; X13; X14; X15; X16; X17; X19; X20] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 6)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "x_" o lhand o concl) THEN + + (*** Main squaring block ***) + + ARM_ACCSTEPS_TAC P384_MONTJADD_EXEC (1--93) (1--93) THEN + + (*** Main Montgomery reduction block ***) + + ARM_ACCSTEPS_TAC P384_MONTJADD_EXEC + (allpairs (fun i j -> 16 * i + j) (0--5) + [97;99;101;102;104;105;106;107;108;109] @ + (190--196)) + (94--196) THEN + RULE_ASSUM_TAC(REWRITE_RULE[ADD_CLAUSES; COND_SWAP; GSYM WORD_BITVAL]) THEN + RULE_ASSUM_TAC(fun th -> try MATCH_MP mmlemma th with Failure _ -> th) THEN + + (*** Key properties of pre-reduced result ***) + + ABBREV_TAC + `t = bignum_of_wordlist + [sum_s190; sum_s191; sum_s192; sum_s193; sum_s194; sum_s195; + word(bitval carry_s195)]` THEN + SUBGOAL_THEN + `t < 2 EXP 384 + p_384 /\ (2 EXP 384 * t == a EXP 2) (mod p_384)` + STRIP_ASSUME_TAC THENL + [RULE_ASSUM_TAC(REWRITE_RULE[VAL_WORD_BITVAL]) THEN + ACCUMULATOR_POP_ASSUM_LIST + (STRIP_ASSUME_TAC o end_itlist CONJ o DECARRY_RULE) THEN + CONJ_TAC THENL + [MATCH_MP_TAC(ARITH_RULE + `2 EXP 384 * t <= (2 EXP 384 - 1) EXP 2 + (2 EXP 384 - 1) * p + ==> t < 2 EXP 384 + p`) THEN + REWRITE_TAC[p_384] THEN CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["a"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + REWRITE_TAC[p_384; REAL_ARITH `a:real < b + c <=> a - b < c`] THEN + ASM_REWRITE_TAC[VAL_WORD_BITVAL] THEN BOUNDER_TAC[]; + REWRITE_TAC[REAL_CONGRUENCE; p_384] THEN CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["a"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ASM_REWRITE_TAC[VAL_WORD_BITVAL] THEN REAL_INTEGER_TAC]; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Final correction stage ***) + + ARM_ACCSTEPS_TAC P384_MONTJADD_EXEC (201--206) (197--209) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONJ_TAC THENL + [CONV_TAC(ONCE_DEPTH_CONV BIGNUM_EXPAND_CONV) THEN + ASM_REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN BOUNDER_TAC[]; + ALL_TAC] THEN + + FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP + (NUMBER_RULE + `(e * t == ab) (mod p) + ==> (e * i == 1) (mod p) /\ (s == t) (mod p) + ==> (s == i * ab) (mod p)`)) THEN + REWRITE_TAC[INVERSE_MOD_RMUL_EQ; COPRIME_REXP; COPRIME_2] THEN + CONJ_TAC THENL + [REWRITE_TAC[p_384] THEN CONV_TAC NUM_REDUCE_CONV; ALL_TAC] THEN + SUBGOAL_THEN `carry_s195 <=> 2 EXP 384 <= t` SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LE THEN EXISTS_TAC `384` THEN + EXPAND_TAC "t" THEN + REWRITE_TAC[p_384; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + REWRITE_TAC[VAL_WORD_BITVAL] THEN BOUNDER_TAC[]; + ABBREV_TAC `b <=> 2 EXP 384 <= t`] THEN + MATCH_MP_TAC(NUMBER_RULE `!b:num. x + b * p = y ==> (x == y) (mod p)`) THEN + EXISTS_TAC `bitval b` THEN REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN + ONCE_REWRITE_TAC[REAL_ARITH `a + b:real = c <=> c - b = a`] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`384`; `&0:real`] THEN CONJ_TAC THENL + [EXPAND_TAC "b" THEN UNDISCH_TAC `t < 2 EXP 384 + p_384` THEN + REWRITE_TAC[bitval; p_384; GSYM REAL_OF_NUM_CLAUSES] THEN REAL_ARITH_TAC; + REWRITE_TAC[INTEGER_CLOSED]] THEN + CONJ_TAC THENL + [CONV_TAC(ONCE_DEPTH_CONV BIGNUM_EXPAND_CONV) THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN BOUNDER_TAC[]; + ALL_TAC] THEN + CONV_TAC(ONCE_DEPTH_CONV BIGNUM_EXPAND_CONV) THEN + EXPAND_TAC "t" THEN REWRITE_TAC[bignum_of_wordlist] THEN + ASM_REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN + ACCUMULATOR_POP_ASSUM_LIST (MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + BOOL_CASES_TAC `b:bool` THEN REWRITE_TAC[BITVAL_CLAUSES; p_384] THEN + CONV_TAC WORD_REDUCE_CONV THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Overall point operation proof. *) +(* ------------------------------------------------------------------------- *) + +let P384_MONTJADD_CORRECT = time prove + (`!p3 p1 t1 p2 t2 pc stackpointer. + aligned 16 stackpointer /\ + ALLPAIRS nonoverlapping + [(p3,144); (stackpointer,336)] + [(word pc,0x4324); (p1,144); (p2,144)] /\ + nonoverlapping (p3,144) (stackpointer,336) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p384_montjadd_mc /\ + read PC s = word(pc + 0x14) /\ + read SP s = stackpointer /\ + C_ARGUMENTS [p3; p1; p2] s /\ + bignum_triple_from_memory (p1,6) s = t1 /\ + bignum_triple_from_memory (p2,6) s = t2) + (\s. read PC s = word (pc + 0x430c) /\ + (!x1 y1 z1 x2 y2 z2. + ~(z1 = &0) /\ ~(z2 = &0) /\ + ~(jacobian_eq (integer_mod_ring p_384) + (x1,y1,z1) (x2,y2,z2)) /\ + ~(jacobian_eq (integer_mod_ring p_384) + (jacobian_neg nistp384 (x1,y1,z1)) + (x2,y2,z2)) /\ + t1 = tripled nistp384_encode (x1,y1,z1) /\ + t2 = tripled nistp384_encode (x2,y2,z2) + ==> bignum_triple_from_memory(p3,6) s = + tripled nistp384_encode + (jacobian_add nistp384 (x1,y1,z1) (x2,y2,z2)))) + (MAYCHANGE [PC; X0; X1; X2; X3; X4; X5; X6; X7; X8; X9; X10; + X11; X12; X13; X14; X15; X16; X17; X19; X20; + X21; X22; X23; X24; X25; X26] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,144); + memory :> bytes(stackpointer,336)])`, + REWRITE_TAC[FORALL_PAIR_THM] THEN + MAP_EVERY X_GEN_TAC + [`p3:int64`; `p1:int64`; `x1:num`; `y1:num`; `z1:num`; `p2:int64`; + `x2:num`; `y2:num`; `z2:num`; `pc:num`; `stackpointer:int64`] THEN + REWRITE_TAC[ALLPAIRS; ALL; NONOVERLAPPING_CLAUSES] THEN STRIP_TAC THEN + REWRITE_TAC[C_ARGUMENTS; SOME_FLAGS; PAIR_EQ; bignum_triple_from_memory] THEN + CONV_TAC(ONCE_DEPTH_CONV NUM_MULT_CONV) THEN + CONV_TAC(ONCE_DEPTH_CONV NORMALIZE_RELATIVE_ADDRESS_CONV) THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + + LOCAL_AMONTSQR_P384_TAC 3 ["z1sq";"z_1"] THEN + LOCAL_AMONTSQR_P384_TAC 0 ["z2sq";"z_2"] THEN + LOCAL_MONTMUL_P384_TAC 0 ["y1a";"z_2";"y_1"] THEN + LOCAL_MONTMUL_P384_TAC 0 ["y2a";"z_1";"y_2"] THEN + LOCAL_MONTMUL_P384_TAC 0 ["x2a";"z1sq";"x_2"] THEN + LOCAL_MONTMUL_P384_TAC 0 ["x1a";"z2sq";"x_1"] THEN + LOCAL_MONTMUL_P384_TAC 0 ["y2a";"z1sq";"y2a"] THEN + LOCAL_MONTMUL_P384_TAC 0 ["y1a";"z2sq";"y1a"] THEN + LOCAL_SUB_P384_TAC 0 ["xd";"x2a";"x1a"] THEN + LOCAL_SUB_P384_TAC 0 ["yd";"y2a";"y1a"] THEN + LOCAL_AMONTSQR_P384_TAC 0 ["zz";"xd"] THEN + LOCAL_MONTSQR_P384_TAC 0 ["ww";"yd"] THEN + LOCAL_MONTMUL_P384_TAC 0 ["zzx1";"zz";"x1a"] THEN + LOCAL_MONTMUL_P384_TAC 0 ["zzx2";"zz";"x2a"] THEN + LOCAL_SUB_P384_TAC 0 ["x_3";"ww";"zzx1"] THEN + LOCAL_SUB_P384_TAC 0 ["t1";"zzx2";"zzx1"] THEN + LOCAL_MONTMUL_P384_TAC 0 ["xd";"xd";"z_1"] THEN + LOCAL_SUB_P384_TAC 0 ["x_3";"x_3";"zzx2"] THEN + LOCAL_SUB_P384_TAC 0 ["t2";"zzx1";"x_3"] THEN + LOCAL_MONTMUL_P384_TAC 0 ["t1";"t1";"y1a"] THEN + LOCAL_MONTMUL_P384_TAC 0 ["z_3";"xd";"z_2"] THEN + LOCAL_MONTMUL_P384_TAC 0 ["t2";"yd";"t2"] THEN + LOCAL_SUB_P384_TAC 0 ["y_3";"t2";"t1"] THEN + + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + DISCARD_STATE_TAC "s26" THEN + DISCARD_MATCHING_ASSUMPTIONS [`nonoverlapping_modulo a b c`] THEN + + MAP_EVERY X_GEN_TAC + [`x1':int`; `y1':int`; `z1':int`; `x2':int`; `y2':int`; `z2':int`] THEN + REPLICATE_TAC 4 (DISCH_THEN(CONJUNCTS_THEN2 ASSUME_TAC MP_TAC)) THEN + REWRITE_TAC[tripled; nistp384_encode; montgomery_encode; PAIR_EQ] THEN + + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN + (STRIP_ASSUME_TAC o MATCH_MP unilemma2)) THEN + + REPEAT(FIRST_X_ASSUM(MP_TAC o check (is_imp o concl))) THEN + REPEAT(ANTS_TAC THENL + [REWRITE_TAC[p_384] THEN RULE_ASSUM_TAC(REWRITE_RULE[p_384]) THEN + CONV_TAC NUM_REDUCE_CONV THEN ASM BOUNDER_TAC[]; + (DISCH_THEN(STRIP_ASSUME_TAC o MATCH_MP unilemma0) ORELSE + DISCH_THEN(STRIP_ASSUME_TAC o MATCH_MP unilemma1))]) THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o GEN_REWRITE_RULE I [GSYM NOT_LE])) THEN + + RULE_ASSUM_TAC(REWRITE_RULE + [num_congruent; GSYM INT_OF_NUM_CLAUSES; GSYM INT_OF_NUM_REM]) THEN + RULE_ASSUM_TAC(REWRITE_RULE[GSYM INT_REM_EQ]) THEN + RULE_ASSUM_TAC(ONCE_REWRITE_RULE[GSYM INT_SUB_REM; GSYM INT_ADD_REM]) THEN + RULE_ASSUM_TAC(REWRITE_RULE[INT_POW_2]) THEN + RULE_ASSUM_TAC(GEN_REWRITE_RULE (RAND_CONV o TRY_CONV) [lemont]) THEN + + ASM_REWRITE_TAC[jacobian_add; nistp384] THEN + ASM_REWRITE_TAC[GSYM nistp384] THEN + REWRITE_TAC[INTEGER_MOD_RING_CLAUSES] THEN + CONV_TAC INT_REDUCE_CONV THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN + CONV_TAC INT_REM_DOWN_CONV THEN + REWRITE_TAC[tripled; nistp384_encode; montgomery_encode] THEN + REWRITE_TAC[PAIR_EQ; GSYM INT_OF_NUM_EQ; nintlemma] THEN + CONV_TAC INT_REM_DOWN_CONV THEN + + ASM_REWRITE_TAC[pumont; INT_REM_REM; GSYM INT_ADD_LDISTRIB; + GSYM INT_ADD_LDISTRIB; GSYM INT_SUB_LDISTRIB; + INT_SUB_REM; INT_ADD_REM] THEN + + REPEAT CONJ_TAC THEN AP_THM_TAC THEN AP_TERM_TAC THEN AP_TERM_TAC THEN + INT_ARITH_TAC);; + +let P384_MONTJADD_SUBROUTINE_CORRECT = time prove + (`!p3 p1 t1 p2 t2 pc stackpointer returnaddress. + aligned 16 stackpointer /\ + ALLPAIRS nonoverlapping + [(p3,144); (word_sub stackpointer (word 400),400)] + [(word pc,0x4324); (p1,144); (p2,144)] /\ + nonoverlapping (p3,144) (word_sub stackpointer (word 400),400) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p384_montjadd_mc /\ + read PC s = word pc /\ + read SP s = stackpointer /\ + read X30 s = returnaddress /\ + C_ARGUMENTS [p3; p1; p2] s /\ + bignum_triple_from_memory (p1,6) s = t1 /\ + bignum_triple_from_memory (p2,6) s = t2) + (\s. read PC s = returnaddress /\ + (!x1 y1 z1 x2 y2 z2. + ~(z1 = &0) /\ ~(z2 = &0) /\ + ~(jacobian_eq (integer_mod_ring p_384) + (x1,y1,z1) (x2,y2,z2)) /\ + ~(jacobian_eq (integer_mod_ring p_384) + (jacobian_neg nistp384 (x1,y1,z1)) + (x2,y2,z2)) /\ + t1 = tripled nistp384_encode (x1,y1,z1) /\ + t2 = tripled nistp384_encode (x2,y2,z2) + ==> bignum_triple_from_memory(p3,6) s = + tripled nistp384_encode + (jacobian_add nistp384 (x1,y1,z1) (x2,y2,z2)))) + (MAYCHANGE [PC; X0; X1; X2; X3; X4; X5; X6; X7; X8; X9; X10; + X11; X12; X13; X14; X15; X16; X17] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,144); + memory :> bytes(word_sub stackpointer (word 400),400)])`, + ARM_ADD_RETURN_STACK_TAC P384_MONTJADD_EXEC + P384_MONTJADD_CORRECT + `[X19; X20; X21; X22; X23; X24; X25; X26]` 400);; diff --git a/arm/proofs/p384_montjdouble.ml b/arm/proofs/p384_montjdouble.ml new file mode 100644 index 0000000000..903b426f5d --- /dev/null +++ b/arm/proofs/p384_montjdouble.ml @@ -0,0 +1,3635 @@ +(* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + *) + +(* ========================================================================= *) +(* Point doubling in Montgomery-Jacobian coordinates for NIST P-384 curve. *) +(* ========================================================================= *) + +needs "arm/proofs/base.ml";; +needs "common/ecencoding.ml";; +needs "EC/jacobian.ml";; +needs "EC/nistp384.ml";; + +prioritize_int();; +prioritize_real();; +prioritize_num();; + +(**** print_literal_from_elf "arm/p384/p384_montjdouble.o";; + ****) + +let p384_montjdouble_mc = define_assert_from_elf + "p384_montjdouble_mc" "arm/p384/p384_montjdouble.o" +[ + 0xa9bf53f3; (* arm_STP X19 X20 SP (Preimmediate_Offset (iword (-- &16))) *) + 0xa9bf5bf5; (* arm_STP X21 X22 SP (Preimmediate_Offset (iword (-- &16))) *) + 0xa9bf63f7; (* arm_STP X23 X24 SP (Preimmediate_Offset (iword (-- &16))) *) + 0xd10543ff; (* arm_SUB SP SP (rvalue (word 336)) *) + 0xaa0003f7; (* arm_MOV X23 X0 *) + 0xaa0103f8; (* arm_MOV X24 X1 *) + 0xa9460f02; (* arm_LDP X2 X3 X24 (Immediate_Offset (iword (&96))) *) + 0x9b037c49; (* arm_MUL X9 X2 X3 *) + 0x9bc37c4a; (* arm_UMULH X10 X2 X3 *) + 0xa9471704; (* arm_LDP X4 X5 X24 (Immediate_Offset (iword (&112))) *) + 0x9b047c48; (* arm_MUL X8 X2 X4 *) + 0xab08014a; (* arm_ADDS X10 X10 X8 *) + 0x9b057c4b; (* arm_MUL X11 X2 X5 *) + 0x9b047c68; (* arm_MUL X8 X3 X4 *) + 0xba08016b; (* arm_ADCS X11 X11 X8 *) + 0x9bc57c4c; (* arm_UMULH X12 X2 X5 *) + 0x9b057c68; (* arm_MUL X8 X3 X5 *) + 0xba08018c; (* arm_ADCS X12 X12 X8 *) + 0xa9481f06; (* arm_LDP X6 X7 X24 (Immediate_Offset (iword (&128))) *) + 0x9b077c4d; (* arm_MUL X13 X2 X7 *) + 0x9b067c68; (* arm_MUL X8 X3 X6 *) + 0xba0801ad; (* arm_ADCS X13 X13 X8 *) + 0x9bc77c4e; (* arm_UMULH X14 X2 X7 *) + 0x9b077c68; (* arm_MUL X8 X3 X7 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9b067caf; (* arm_MUL X15 X5 X6 *) + 0xba1f01ef; (* arm_ADCS X15 X15 XZR *) + 0x9bc67cb0; (* arm_UMULH X16 X5 X6 *) + 0x9a1f0210; (* arm_ADC X16 X16 XZR *) + 0x9bc47c48; (* arm_UMULH X8 X2 X4 *) + 0xab08016b; (* arm_ADDS X11 X11 X8 *) + 0x9bc47c68; (* arm_UMULH X8 X3 X4 *) + 0xba08018c; (* arm_ADCS X12 X12 X8 *) + 0x9bc57c68; (* arm_UMULH X8 X3 X5 *) + 0xba0801ad; (* arm_ADCS X13 X13 X8 *) + 0x9bc67c68; (* arm_UMULH X8 X3 X6 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9bc77c68; (* arm_UMULH X8 X3 X7 *) + 0xba0801ef; (* arm_ADCS X15 X15 X8 *) + 0x9a1f0210; (* arm_ADC X16 X16 XZR *) + 0x9b067c48; (* arm_MUL X8 X2 X6 *) + 0xab08018c; (* arm_ADDS X12 X12 X8 *) + 0x9b057c88; (* arm_MUL X8 X4 X5 *) + 0xba0801ad; (* arm_ADCS X13 X13 X8 *) + 0x9b067c88; (* arm_MUL X8 X4 X6 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9b077c88; (* arm_MUL X8 X4 X7 *) + 0xba0801ef; (* arm_ADCS X15 X15 X8 *) + 0x9b077ca8; (* arm_MUL X8 X5 X7 *) + 0xba080210; (* arm_ADCS X16 X16 X8 *) + 0x9b077cd1; (* arm_MUL X17 X6 X7 *) + 0xba1f0231; (* arm_ADCS X17 X17 XZR *) + 0x9bc77cd3; (* arm_UMULH X19 X6 X7 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0x9bc67c48; (* arm_UMULH X8 X2 X6 *) + 0xab0801ad; (* arm_ADDS X13 X13 X8 *) + 0x9bc57c88; (* arm_UMULH X8 X4 X5 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9bc67c88; (* arm_UMULH X8 X4 X6 *) + 0xba0801ef; (* arm_ADCS X15 X15 X8 *) + 0x9bc77c88; (* arm_UMULH X8 X4 X7 *) + 0xba080210; (* arm_ADCS X16 X16 X8 *) + 0x9bc77ca8; (* arm_UMULH X8 X5 X7 *) + 0xba080231; (* arm_ADCS X17 X17 X8 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0xab090129; (* arm_ADDS X9 X9 X9 *) + 0xba0a014a; (* arm_ADCS X10 X10 X10 *) + 0xba0b016b; (* arm_ADCS X11 X11 X11 *) + 0xba0c018c; (* arm_ADCS X12 X12 X12 *) + 0xba0d01ad; (* arm_ADCS X13 X13 X13 *) + 0xba0e01ce; (* arm_ADCS X14 X14 X14 *) + 0xba0f01ef; (* arm_ADCS X15 X15 X15 *) + 0xba100210; (* arm_ADCS X16 X16 X16 *) + 0xba110231; (* arm_ADCS X17 X17 X17 *) + 0xba130273; (* arm_ADCS X19 X19 X19 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc27c48; (* arm_UMULH X8 X2 X2 *) + 0x9b027c42; (* arm_MUL X2 X2 X2 *) + 0xab080129; (* arm_ADDS X9 X9 X8 *) + 0x9b037c68; (* arm_MUL X8 X3 X3 *) + 0xba08014a; (* arm_ADCS X10 X10 X8 *) + 0x9bc37c68; (* arm_UMULH X8 X3 X3 *) + 0xba08016b; (* arm_ADCS X11 X11 X8 *) + 0x9b047c88; (* arm_MUL X8 X4 X4 *) + 0xba08018c; (* arm_ADCS X12 X12 X8 *) + 0x9bc47c88; (* arm_UMULH X8 X4 X4 *) + 0xba0801ad; (* arm_ADCS X13 X13 X8 *) + 0x9b057ca8; (* arm_MUL X8 X5 X5 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9bc57ca8; (* arm_UMULH X8 X5 X5 *) + 0xba0801ef; (* arm_ADCS X15 X15 X8 *) + 0x9b067cc8; (* arm_MUL X8 X6 X6 *) + 0xba080210; (* arm_ADCS X16 X16 X8 *) + 0x9bc67cc8; (* arm_UMULH X8 X6 X6 *) + 0xba080231; (* arm_ADCS X17 X17 X8 *) + 0x9b077ce8; (* arm_MUL X8 X7 X7 *) + 0xba080273; (* arm_ADCS X19 X19 X8 *) + 0x9bc77ce8; (* arm_UMULH X8 X7 X7 *) + 0x9a080294; (* arm_ADC X20 X20 X8 *) + 0xd3607c45; (* arm_LSL X5 X2 32 *) + 0x8b0200a2; (* arm_ADD X2 X5 X2 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bc27ca5; (* arm_UMULH X5 X5 X2 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b027c83; (* arm_MUL X3 X4 X2 *) + 0x9bc27c84; (* arm_UMULH X4 X4 X2 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba020084; (* arm_ADCS X4 X4 X2 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb050129; (* arm_SUBS X9 X9 X5 *) + 0xfa04014a; (* arm_SBCS X10 X10 X4 *) + 0xfa03016b; (* arm_SBCS X11 X11 X3 *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xda1f0042; (* arm_SBC X2 X2 XZR *) + 0xd3607d25; (* arm_LSL X5 X9 32 *) + 0x8b0900a9; (* arm_ADD X9 X5 X9 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bc97ca5; (* arm_UMULH X5 X5 X9 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b097c83; (* arm_MUL X3 X4 X9 *) + 0x9bc97c84; (* arm_UMULH X4 X4 X9 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba090084; (* arm_ADCS X4 X4 X9 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb05014a; (* arm_SUBS X10 X10 X5 *) + 0xfa04016b; (* arm_SBCS X11 X11 X4 *) + 0xfa03018c; (* arm_SBCS X12 X12 X3 *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f0042; (* arm_SBCS X2 X2 XZR *) + 0xda1f0129; (* arm_SBC X9 X9 XZR *) + 0xd3607d45; (* arm_LSL X5 X10 32 *) + 0x8b0a00aa; (* arm_ADD X10 X5 X10 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bca7ca5; (* arm_UMULH X5 X5 X10 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b0a7c83; (* arm_MUL X3 X4 X10 *) + 0x9bca7c84; (* arm_UMULH X4 X4 X10 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba0a0084; (* arm_ADCS X4 X4 X10 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb05016b; (* arm_SUBS X11 X11 X5 *) + 0xfa04018c; (* arm_SBCS X12 X12 X4 *) + 0xfa0301ad; (* arm_SBCS X13 X13 X3 *) + 0xfa1f0042; (* arm_SBCS X2 X2 XZR *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xda1f014a; (* arm_SBC X10 X10 XZR *) + 0xd3607d65; (* arm_LSL X5 X11 32 *) + 0x8b0b00ab; (* arm_ADD X11 X5 X11 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bcb7ca5; (* arm_UMULH X5 X5 X11 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b0b7c83; (* arm_MUL X3 X4 X11 *) + 0x9bcb7c84; (* arm_UMULH X4 X4 X11 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb05018c; (* arm_SUBS X12 X12 X5 *) + 0xfa0401ad; (* arm_SBCS X13 X13 X4 *) + 0xfa030042; (* arm_SBCS X2 X2 X3 *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xda1f016b; (* arm_SBC X11 X11 XZR *) + 0xd3607d85; (* arm_LSL X5 X12 32 *) + 0x8b0c00ac; (* arm_ADD X12 X5 X12 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bcc7ca5; (* arm_UMULH X5 X5 X12 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b0c7c83; (* arm_MUL X3 X4 X12 *) + 0x9bcc7c84; (* arm_UMULH X4 X4 X12 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba0c0084; (* arm_ADCS X4 X4 X12 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb0501ad; (* arm_SUBS X13 X13 X5 *) + 0xfa040042; (* arm_SBCS X2 X2 X4 *) + 0xfa030129; (* arm_SBCS X9 X9 X3 *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xda1f018c; (* arm_SBC X12 X12 XZR *) + 0xd3607da5; (* arm_LSL X5 X13 32 *) + 0x8b0d00ad; (* arm_ADD X13 X5 X13 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bcd7ca5; (* arm_UMULH X5 X5 X13 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b0d7c83; (* arm_MUL X3 X4 X13 *) + 0x9bcd7c84; (* arm_UMULH X4 X4 X13 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba0d0084; (* arm_ADCS X4 X4 X13 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb050042; (* arm_SUBS X2 X2 X5 *) + 0xfa040129; (* arm_SBCS X9 X9 X4 *) + 0xfa03014a; (* arm_SBCS X10 X10 X3 *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda1f01ad; (* arm_SBC X13 X13 XZR *) + 0xab0e0042; (* arm_ADDS X2 X2 X14 *) + 0xba0f0129; (* arm_ADCS X9 X9 X15 *) + 0xba10014a; (* arm_ADCS X10 X10 X16 *) + 0xba11016b; (* arm_ADCS X11 X11 X17 *) + 0xba13018c; (* arm_ADCS X12 X12 X19 *) + 0xba1401ad; (* arm_ADCS X13 X13 X20 *) + 0x9a1f03e6; (* arm_ADC X6 XZR XZR *) + 0xb26083e8; (* arm_MOV X8 (rvalue (word 18446744069414584321)) *) + 0xab08004e; (* arm_ADDS X14 X2 X8 *) + 0xb2407fe8; (* arm_MOV X8 (rvalue (word 4294967295)) *) + 0xba08012f; (* arm_ADCS X15 X9 X8 *) + 0xd2800028; (* arm_MOV X8 (rvalue (word 1)) *) + 0xba080150; (* arm_ADCS X16 X10 X8 *) + 0xba1f0171; (* arm_ADCS X17 X11 XZR *) + 0xba1f0193; (* arm_ADCS X19 X12 XZR *) + 0xba1f01b4; (* arm_ADCS X20 X13 XZR *) + 0xba1f00c6; (* arm_ADCS X6 X6 XZR *) + 0x9a8e0042; (* arm_CSEL X2 X2 X14 Condition_EQ *) + 0x9a8f0129; (* arm_CSEL X9 X9 X15 Condition_EQ *) + 0x9a90014a; (* arm_CSEL X10 X10 X16 Condition_EQ *) + 0x9a91016b; (* arm_CSEL X11 X11 X17 Condition_EQ *) + 0x9a93018c; (* arm_CSEL X12 X12 X19 Condition_EQ *) + 0x9a9401ad; (* arm_CSEL X13 X13 X20 Condition_EQ *) + 0xa90027e2; (* arm_STP X2 X9 SP (Immediate_Offset (iword (&0))) *) + 0xa9012fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&16))) *) + 0xa90237ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&32))) *) + 0xa9430f02; (* arm_LDP X2 X3 X24 (Immediate_Offset (iword (&48))) *) + 0x9b037c49; (* arm_MUL X9 X2 X3 *) + 0x9bc37c4a; (* arm_UMULH X10 X2 X3 *) + 0xa9441704; (* arm_LDP X4 X5 X24 (Immediate_Offset (iword (&64))) *) + 0x9b047c48; (* arm_MUL X8 X2 X4 *) + 0xab08014a; (* arm_ADDS X10 X10 X8 *) + 0x9b057c4b; (* arm_MUL X11 X2 X5 *) + 0x9b047c68; (* arm_MUL X8 X3 X4 *) + 0xba08016b; (* arm_ADCS X11 X11 X8 *) + 0x9bc57c4c; (* arm_UMULH X12 X2 X5 *) + 0x9b057c68; (* arm_MUL X8 X3 X5 *) + 0xba08018c; (* arm_ADCS X12 X12 X8 *) + 0xa9451f06; (* arm_LDP X6 X7 X24 (Immediate_Offset (iword (&80))) *) + 0x9b077c4d; (* arm_MUL X13 X2 X7 *) + 0x9b067c68; (* arm_MUL X8 X3 X6 *) + 0xba0801ad; (* arm_ADCS X13 X13 X8 *) + 0x9bc77c4e; (* arm_UMULH X14 X2 X7 *) + 0x9b077c68; (* arm_MUL X8 X3 X7 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9b067caf; (* arm_MUL X15 X5 X6 *) + 0xba1f01ef; (* arm_ADCS X15 X15 XZR *) + 0x9bc67cb0; (* arm_UMULH X16 X5 X6 *) + 0x9a1f0210; (* arm_ADC X16 X16 XZR *) + 0x9bc47c48; (* arm_UMULH X8 X2 X4 *) + 0xab08016b; (* arm_ADDS X11 X11 X8 *) + 0x9bc47c68; (* arm_UMULH X8 X3 X4 *) + 0xba08018c; (* arm_ADCS X12 X12 X8 *) + 0x9bc57c68; (* arm_UMULH X8 X3 X5 *) + 0xba0801ad; (* arm_ADCS X13 X13 X8 *) + 0x9bc67c68; (* arm_UMULH X8 X3 X6 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9bc77c68; (* arm_UMULH X8 X3 X7 *) + 0xba0801ef; (* arm_ADCS X15 X15 X8 *) + 0x9a1f0210; (* arm_ADC X16 X16 XZR *) + 0x9b067c48; (* arm_MUL X8 X2 X6 *) + 0xab08018c; (* arm_ADDS X12 X12 X8 *) + 0x9b057c88; (* arm_MUL X8 X4 X5 *) + 0xba0801ad; (* arm_ADCS X13 X13 X8 *) + 0x9b067c88; (* arm_MUL X8 X4 X6 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9b077c88; (* arm_MUL X8 X4 X7 *) + 0xba0801ef; (* arm_ADCS X15 X15 X8 *) + 0x9b077ca8; (* arm_MUL X8 X5 X7 *) + 0xba080210; (* arm_ADCS X16 X16 X8 *) + 0x9b077cd1; (* arm_MUL X17 X6 X7 *) + 0xba1f0231; (* arm_ADCS X17 X17 XZR *) + 0x9bc77cd3; (* arm_UMULH X19 X6 X7 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0x9bc67c48; (* arm_UMULH X8 X2 X6 *) + 0xab0801ad; (* arm_ADDS X13 X13 X8 *) + 0x9bc57c88; (* arm_UMULH X8 X4 X5 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9bc67c88; (* arm_UMULH X8 X4 X6 *) + 0xba0801ef; (* arm_ADCS X15 X15 X8 *) + 0x9bc77c88; (* arm_UMULH X8 X4 X7 *) + 0xba080210; (* arm_ADCS X16 X16 X8 *) + 0x9bc77ca8; (* arm_UMULH X8 X5 X7 *) + 0xba080231; (* arm_ADCS X17 X17 X8 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0xab090129; (* arm_ADDS X9 X9 X9 *) + 0xba0a014a; (* arm_ADCS X10 X10 X10 *) + 0xba0b016b; (* arm_ADCS X11 X11 X11 *) + 0xba0c018c; (* arm_ADCS X12 X12 X12 *) + 0xba0d01ad; (* arm_ADCS X13 X13 X13 *) + 0xba0e01ce; (* arm_ADCS X14 X14 X14 *) + 0xba0f01ef; (* arm_ADCS X15 X15 X15 *) + 0xba100210; (* arm_ADCS X16 X16 X16 *) + 0xba110231; (* arm_ADCS X17 X17 X17 *) + 0xba130273; (* arm_ADCS X19 X19 X19 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc27c48; (* arm_UMULH X8 X2 X2 *) + 0x9b027c42; (* arm_MUL X2 X2 X2 *) + 0xab080129; (* arm_ADDS X9 X9 X8 *) + 0x9b037c68; (* arm_MUL X8 X3 X3 *) + 0xba08014a; (* arm_ADCS X10 X10 X8 *) + 0x9bc37c68; (* arm_UMULH X8 X3 X3 *) + 0xba08016b; (* arm_ADCS X11 X11 X8 *) + 0x9b047c88; (* arm_MUL X8 X4 X4 *) + 0xba08018c; (* arm_ADCS X12 X12 X8 *) + 0x9bc47c88; (* arm_UMULH X8 X4 X4 *) + 0xba0801ad; (* arm_ADCS X13 X13 X8 *) + 0x9b057ca8; (* arm_MUL X8 X5 X5 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9bc57ca8; (* arm_UMULH X8 X5 X5 *) + 0xba0801ef; (* arm_ADCS X15 X15 X8 *) + 0x9b067cc8; (* arm_MUL X8 X6 X6 *) + 0xba080210; (* arm_ADCS X16 X16 X8 *) + 0x9bc67cc8; (* arm_UMULH X8 X6 X6 *) + 0xba080231; (* arm_ADCS X17 X17 X8 *) + 0x9b077ce8; (* arm_MUL X8 X7 X7 *) + 0xba080273; (* arm_ADCS X19 X19 X8 *) + 0x9bc77ce8; (* arm_UMULH X8 X7 X7 *) + 0x9a080294; (* arm_ADC X20 X20 X8 *) + 0xd3607c45; (* arm_LSL X5 X2 32 *) + 0x8b0200a2; (* arm_ADD X2 X5 X2 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bc27ca5; (* arm_UMULH X5 X5 X2 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b027c83; (* arm_MUL X3 X4 X2 *) + 0x9bc27c84; (* arm_UMULH X4 X4 X2 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba020084; (* arm_ADCS X4 X4 X2 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb050129; (* arm_SUBS X9 X9 X5 *) + 0xfa04014a; (* arm_SBCS X10 X10 X4 *) + 0xfa03016b; (* arm_SBCS X11 X11 X3 *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xda1f0042; (* arm_SBC X2 X2 XZR *) + 0xd3607d25; (* arm_LSL X5 X9 32 *) + 0x8b0900a9; (* arm_ADD X9 X5 X9 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bc97ca5; (* arm_UMULH X5 X5 X9 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b097c83; (* arm_MUL X3 X4 X9 *) + 0x9bc97c84; (* arm_UMULH X4 X4 X9 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba090084; (* arm_ADCS X4 X4 X9 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb05014a; (* arm_SUBS X10 X10 X5 *) + 0xfa04016b; (* arm_SBCS X11 X11 X4 *) + 0xfa03018c; (* arm_SBCS X12 X12 X3 *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f0042; (* arm_SBCS X2 X2 XZR *) + 0xda1f0129; (* arm_SBC X9 X9 XZR *) + 0xd3607d45; (* arm_LSL X5 X10 32 *) + 0x8b0a00aa; (* arm_ADD X10 X5 X10 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bca7ca5; (* arm_UMULH X5 X5 X10 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b0a7c83; (* arm_MUL X3 X4 X10 *) + 0x9bca7c84; (* arm_UMULH X4 X4 X10 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba0a0084; (* arm_ADCS X4 X4 X10 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb05016b; (* arm_SUBS X11 X11 X5 *) + 0xfa04018c; (* arm_SBCS X12 X12 X4 *) + 0xfa0301ad; (* arm_SBCS X13 X13 X3 *) + 0xfa1f0042; (* arm_SBCS X2 X2 XZR *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xda1f014a; (* arm_SBC X10 X10 XZR *) + 0xd3607d65; (* arm_LSL X5 X11 32 *) + 0x8b0b00ab; (* arm_ADD X11 X5 X11 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bcb7ca5; (* arm_UMULH X5 X5 X11 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b0b7c83; (* arm_MUL X3 X4 X11 *) + 0x9bcb7c84; (* arm_UMULH X4 X4 X11 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb05018c; (* arm_SUBS X12 X12 X5 *) + 0xfa0401ad; (* arm_SBCS X13 X13 X4 *) + 0xfa030042; (* arm_SBCS X2 X2 X3 *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xda1f016b; (* arm_SBC X11 X11 XZR *) + 0xd3607d85; (* arm_LSL X5 X12 32 *) + 0x8b0c00ac; (* arm_ADD X12 X5 X12 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bcc7ca5; (* arm_UMULH X5 X5 X12 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b0c7c83; (* arm_MUL X3 X4 X12 *) + 0x9bcc7c84; (* arm_UMULH X4 X4 X12 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba0c0084; (* arm_ADCS X4 X4 X12 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb0501ad; (* arm_SUBS X13 X13 X5 *) + 0xfa040042; (* arm_SBCS X2 X2 X4 *) + 0xfa030129; (* arm_SBCS X9 X9 X3 *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xda1f018c; (* arm_SBC X12 X12 XZR *) + 0xd3607da5; (* arm_LSL X5 X13 32 *) + 0x8b0d00ad; (* arm_ADD X13 X5 X13 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bcd7ca5; (* arm_UMULH X5 X5 X13 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b0d7c83; (* arm_MUL X3 X4 X13 *) + 0x9bcd7c84; (* arm_UMULH X4 X4 X13 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba0d0084; (* arm_ADCS X4 X4 X13 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb050042; (* arm_SUBS X2 X2 X5 *) + 0xfa040129; (* arm_SBCS X9 X9 X4 *) + 0xfa03014a; (* arm_SBCS X10 X10 X3 *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda1f01ad; (* arm_SBC X13 X13 XZR *) + 0xab0e0042; (* arm_ADDS X2 X2 X14 *) + 0xba0f0129; (* arm_ADCS X9 X9 X15 *) + 0xba10014a; (* arm_ADCS X10 X10 X16 *) + 0xba11016b; (* arm_ADCS X11 X11 X17 *) + 0xba13018c; (* arm_ADCS X12 X12 X19 *) + 0xba1401ad; (* arm_ADCS X13 X13 X20 *) + 0x9a1f03e6; (* arm_ADC X6 XZR XZR *) + 0xb26083e8; (* arm_MOV X8 (rvalue (word 18446744069414584321)) *) + 0xab08004e; (* arm_ADDS X14 X2 X8 *) + 0xb2407fe8; (* arm_MOV X8 (rvalue (word 4294967295)) *) + 0xba08012f; (* arm_ADCS X15 X9 X8 *) + 0xd2800028; (* arm_MOV X8 (rvalue (word 1)) *) + 0xba080150; (* arm_ADCS X16 X10 X8 *) + 0xba1f0171; (* arm_ADCS X17 X11 XZR *) + 0xba1f0193; (* arm_ADCS X19 X12 XZR *) + 0xba1f01b4; (* arm_ADCS X20 X13 XZR *) + 0xba1f00c6; (* arm_ADCS X6 X6 XZR *) + 0x9a8e0042; (* arm_CSEL X2 X2 X14 Condition_EQ *) + 0x9a8f0129; (* arm_CSEL X9 X9 X15 Condition_EQ *) + 0x9a90014a; (* arm_CSEL X10 X10 X16 Condition_EQ *) + 0x9a91016b; (* arm_CSEL X11 X11 X17 Condition_EQ *) + 0x9a93018c; (* arm_CSEL X12 X12 X19 Condition_EQ *) + 0x9a9401ad; (* arm_CSEL X13 X13 X20 Condition_EQ *) + 0xa90327e2; (* arm_STP X2 X9 SP (Immediate_Offset (iword (&48))) *) + 0xa9042fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&64))) *) + 0xa90537ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&80))) *) + 0xa9401b05; (* arm_LDP X5 X6 X24 (Immediate_Offset (iword (&0))) *) + 0xa9400fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&0))) *) + 0xab0400a5; (* arm_ADDS X5 X5 X4 *) + 0xba0300c6; (* arm_ADCS X6 X6 X3 *) + 0xa9412307; (* arm_LDP X7 X8 X24 (Immediate_Offset (iword (&16))) *) + 0xa9410fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&16))) *) + 0xba0400e7; (* arm_ADCS X7 X7 X4 *) + 0xba030108; (* arm_ADCS X8 X8 X3 *) + 0xa9422b09; (* arm_LDP X9 X10 X24 (Immediate_Offset (iword (&32))) *) + 0xa9420fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&32))) *) + 0xba040129; (* arm_ADCS X9 X9 X4 *) + 0xba03014a; (* arm_ADCS X10 X10 X3 *) + 0xda9f33e3; (* arm_CSETM X3 Condition_CS *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xca030084; (* arm_EOR X4 X4 X3 *) + 0xfa0400c6; (* arm_SBCS X6 X6 X4 *) + 0x92800024; (* arm_MOVN X4 (word 1) 0 *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xfa030129; (* arm_SBCS X9 X9 X3 *) + 0xda03014a; (* arm_SBC X10 X10 X3 *) + 0xa90f1be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&240))) *) + 0xa91023e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&256))) *) + 0xa9112be9; (* arm_STP X9 X10 SP (Immediate_Offset (iword (&272))) *) + 0xa9401b05; (* arm_LDP X5 X6 X24 (Immediate_Offset (iword (&0))) *) + 0xa9400fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&0))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa9412307; (* arm_LDP X7 X8 X24 (Immediate_Offset (iword (&16))) *) + 0xa9410fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&16))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xa9422b09; (* arm_LDP X9 X10 X24 (Immediate_Offset (iword (&32))) *) + 0xa9420fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&32))) *) + 0xfa040129; (* arm_SBCS X9 X9 X4 *) + 0xfa03014a; (* arm_SBCS X10 X10 X3 *) + 0xda9f23e3; (* arm_CSETM X3 Condition_CC *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0xab0400a5; (* arm_ADDS X5 X5 X4 *) + 0xca030084; (* arm_EOR X4 X4 X3 *) + 0xba0400c6; (* arm_ADCS X6 X6 X4 *) + 0x92800024; (* arm_MOVN X4 (word 1) 0 *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0xba0400e7; (* arm_ADCS X7 X7 X4 *) + 0xba030108; (* arm_ADCS X8 X8 X3 *) + 0xba030129; (* arm_ADCS X9 X9 X3 *) + 0x9a03014a; (* arm_ADC X10 X10 X3 *) + 0xa90c1be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&192))) *) + 0xa90d23e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&208))) *) + 0xa90e2be9; (* arm_STP X9 X10 SP (Immediate_Offset (iword (&224))) *) + 0xa94f13e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&240))) *) + 0xa94c1be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&192))) *) + 0x9b057c6c; (* arm_MUL X12 X3 X5 *) + 0x9bc57c6d; (* arm_UMULH X13 X3 X5 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa94d23e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&208))) *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0x9bc77c6f; (* arm_UMULH X15 X3 X7 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c70; (* arm_UMULH X16 X3 X8 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0xa94e2be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&224))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c71; (* arm_UMULH X17 X3 X9 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c73; (* arm_UMULH X19 X3 X10 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b0294; (* arm_ADC X20 X20 X11 *) + 0xa95013e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&256))) *) + 0x9b057c6b; (* arm_MUL X11 X3 X5 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9a9f37f5; (* arm_CSET X21 Condition_CS *) + 0x9bc57c6b; (* arm_UMULH X11 X3 X5 *) + 0xab0b01ef; (* arm_ADDS X15 X15 X11 *) + 0x9bc67c6b; (* arm_UMULH X11 X3 X6 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9bc77c6b; (* arm_UMULH X11 X3 X7 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc87c6b; (* arm_UMULH X11 X3 X8 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc97c6b; (* arm_UMULH X11 X3 X9 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bca7c6b; (* arm_UMULH X11 X3 X10 *) + 0x9a0b02b5; (* arm_ADC X21 X21 X11 *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b01ef; (* arm_ADDS X15 X15 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9a9f37f6; (* arm_CSET X22 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b0210; (* arm_ADDS X16 X16 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b02d6; (* arm_ADC X22 X22 X11 *) + 0xa95113e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&272))) *) + 0x9b057c6b; (* arm_MUL X11 X3 X5 *) + 0xab0b0210; (* arm_ADDS X16 X16 X11 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9a9f37e2; (* arm_CSET X2 Condition_CS *) + 0x9bc57c6b; (* arm_UMULH X11 X3 X5 *) + 0xab0b0231; (* arm_ADDS X17 X17 X11 *) + 0x9bc67c6b; (* arm_UMULH X11 X3 X6 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc77c6b; (* arm_UMULH X11 X3 X7 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc87c6b; (* arm_UMULH X11 X3 X8 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bc97c6b; (* arm_UMULH X11 X3 X9 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9bca7c6b; (* arm_UMULH X11 X3 X10 *) + 0x9a0b0042; (* arm_ADC X2 X2 X11 *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b0231; (* arm_ADDS X17 X17 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0042; (* arm_ADCS X2 X2 X11 *) + 0x9a9f37e1; (* arm_CSET X1 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b0273; (* arm_ADDS X19 X19 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0042; (* arm_ADCS X2 X2 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b0021; (* arm_ADC X1 X1 X11 *) + 0xd3607d87; (* arm_LSL X7 X12 32 *) + 0x8b0c00ec; (* arm_ADD X12 X7 X12 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcc7ce7; (* arm_UMULH X7 X7 X12 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0c7cc5; (* arm_MUL X5 X6 X12 *) + 0x9bcc7cc6; (* arm_UMULH X6 X6 X12 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0c00c6; (* arm_ADCS X6 X6 X12 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ad; (* arm_SUBS X13 X13 X7 *) + 0xfa0601ce; (* arm_SBCS X14 X14 X6 *) + 0xfa0501ef; (* arm_SBCS X15 X15 X5 *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xda1f018c; (* arm_SBC X12 X12 XZR *) + 0xd3607da7; (* arm_LSL X7 X13 32 *) + 0x8b0d00ed; (* arm_ADD X13 X7 X13 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcd7ce7; (* arm_UMULH X7 X7 X13 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0d7cc5; (* arm_MUL X5 X6 X13 *) + 0x9bcd7cc6; (* arm_UMULH X6 X6 X13 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0d00c6; (* arm_ADCS X6 X6 X13 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ce; (* arm_SUBS X14 X14 X7 *) + 0xfa0601ef; (* arm_SBCS X15 X15 X6 *) + 0xfa050210; (* arm_SBCS X16 X16 X5 *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda1f01ad; (* arm_SBC X13 X13 XZR *) + 0xd3607dc7; (* arm_LSL X7 X14 32 *) + 0x8b0e00ee; (* arm_ADD X14 X7 X14 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bce7ce7; (* arm_UMULH X7 X7 X14 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0e7cc5; (* arm_MUL X5 X6 X14 *) + 0x9bce7cc6; (* arm_UMULH X6 X6 X14 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0e00c6; (* arm_ADCS X6 X6 X14 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ef; (* arm_SUBS X15 X15 X7 *) + 0xfa060210; (* arm_SBCS X16 X16 X6 *) + 0xfa050231; (* arm_SBCS X17 X17 X5 *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xda1f01ce; (* arm_SBC X14 X14 XZR *) + 0xd3607de7; (* arm_LSL X7 X15 32 *) + 0x8b0f00ef; (* arm_ADD X15 X7 X15 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcf7ce7; (* arm_UMULH X7 X7 X15 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0f7cc5; (* arm_MUL X5 X6 X15 *) + 0x9bcf7cc6; (* arm_UMULH X6 X6 X15 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0f00c6; (* arm_ADCS X6 X6 X15 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb070210; (* arm_SUBS X16 X16 X7 *) + 0xfa060231; (* arm_SBCS X17 X17 X6 *) + 0xfa05018c; (* arm_SBCS X12 X12 X5 *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xda1f01ef; (* arm_SBC X15 X15 XZR *) + 0xd3607e07; (* arm_LSL X7 X16 32 *) + 0x8b1000f0; (* arm_ADD X16 X7 X16 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bd07ce7; (* arm_UMULH X7 X7 X16 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b107cc5; (* arm_MUL X5 X6 X16 *) + 0x9bd07cc6; (* arm_UMULH X6 X6 X16 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba1000c6; (* arm_ADCS X6 X6 X16 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb070231; (* arm_SUBS X17 X17 X7 *) + 0xfa06018c; (* arm_SBCS X12 X12 X6 *) + 0xfa0501ad; (* arm_SBCS X13 X13 X5 *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xda1f0210; (* arm_SBC X16 X16 XZR *) + 0xd3607e27; (* arm_LSL X7 X17 32 *) + 0x8b1100f1; (* arm_ADD X17 X7 X17 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bd17ce7; (* arm_UMULH X7 X7 X17 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b117cc5; (* arm_MUL X5 X6 X17 *) + 0x9bd17cc6; (* arm_UMULH X6 X6 X17 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba1100c6; (* arm_ADCS X6 X6 X17 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb07018c; (* arm_SUBS X12 X12 X7 *) + 0xfa0601ad; (* arm_SBCS X13 X13 X6 *) + 0xfa0501ce; (* arm_SBCS X14 X14 X5 *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xda1f0231; (* arm_SBC X17 X17 XZR *) + 0xab13018c; (* arm_ADDS X12 X12 X19 *) + 0xba1401ad; (* arm_ADCS X13 X13 X20 *) + 0xba1501ce; (* arm_ADCS X14 X14 X21 *) + 0xba1601ef; (* arm_ADCS X15 X15 X22 *) + 0xba020210; (* arm_ADCS X16 X16 X2 *) + 0xba010231; (* arm_ADCS X17 X17 X1 *) + 0x9a1f03ea; (* arm_ADC X10 XZR XZR *) + 0xb26083eb; (* arm_MOV X11 (rvalue (word 18446744069414584321)) *) + 0xab0b0193; (* arm_ADDS X19 X12 X11 *) + 0xb2407feb; (* arm_MOV X11 (rvalue (word 4294967295)) *) + 0xba0b01b4; (* arm_ADCS X20 X13 X11 *) + 0xd280002b; (* arm_MOV X11 (rvalue (word 1)) *) + 0xba0b01d5; (* arm_ADCS X21 X14 X11 *) + 0xba1f01f6; (* arm_ADCS X22 X15 XZR *) + 0xba1f0202; (* arm_ADCS X2 X16 XZR *) + 0xba1f0221; (* arm_ADCS X1 X17 XZR *) + 0xba1f014a; (* arm_ADCS X10 X10 XZR *) + 0x9a93018c; (* arm_CSEL X12 X12 X19 Condition_EQ *) + 0x9a9401ad; (* arm_CSEL X13 X13 X20 Condition_EQ *) + 0x9a9501ce; (* arm_CSEL X14 X14 X21 Condition_EQ *) + 0x9a9601ef; (* arm_CSEL X15 X15 X22 Condition_EQ *) + 0x9a820210; (* arm_CSEL X16 X16 X2 Condition_EQ *) + 0x9a810231; (* arm_CSEL X17 X17 X1 Condition_EQ *) + 0xa90637ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&96))) *) + 0xa9073fee; (* arm_STP X14 X15 SP (Immediate_Offset (iword (&112))) *) + 0xa90847f0; (* arm_STP X16 X17 SP (Immediate_Offset (iword (&128))) *) + 0xa9431b05; (* arm_LDP X5 X6 X24 (Immediate_Offset (iword (&48))) *) + 0xa9460f04; (* arm_LDP X4 X3 X24 (Immediate_Offset (iword (&96))) *) + 0xab0400a5; (* arm_ADDS X5 X5 X4 *) + 0xba0300c6; (* arm_ADCS X6 X6 X3 *) + 0xa9442307; (* arm_LDP X7 X8 X24 (Immediate_Offset (iword (&64))) *) + 0xa9470f04; (* arm_LDP X4 X3 X24 (Immediate_Offset (iword (&112))) *) + 0xba0400e7; (* arm_ADCS X7 X7 X4 *) + 0xba030108; (* arm_ADCS X8 X8 X3 *) + 0xa9452b09; (* arm_LDP X9 X10 X24 (Immediate_Offset (iword (&80))) *) + 0xa9480f04; (* arm_LDP X4 X3 X24 (Immediate_Offset (iword (&128))) *) + 0xba040129; (* arm_ADCS X9 X9 X4 *) + 0xba03014a; (* arm_ADCS X10 X10 X3 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0xeb0400bf; (* arm_CMP X5 X4 *) + 0xb2607fe4; (* arm_MOV X4 (rvalue (word 18446744069414584320)) *) + 0xfa0400df; (* arm_SBCS XZR X6 X4 *) + 0x92800024; (* arm_MOVN X4 (word 1) 0 *) + 0xfa0400ff; (* arm_SBCS XZR X7 X4 *) + 0xba1f011f; (* arm_ADCS XZR X8 XZR *) + 0xba1f013f; (* arm_ADCS XZR X9 XZR *) + 0xba1f015f; (* arm_ADCS XZR X10 XZR *) + 0xba1f0063; (* arm_ADCS X3 X3 XZR *) + 0xda9f03e3; (* arm_CSETM X3 Condition_NE *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xca030084; (* arm_EOR X4 X4 X3 *) + 0xfa0400c6; (* arm_SBCS X6 X6 X4 *) + 0x92800024; (* arm_MOVN X4 (word 1) 0 *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xfa030129; (* arm_SBCS X9 X9 X3 *) + 0xda03014a; (* arm_SBC X10 X10 X3 *) + 0xa90f1be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&240))) *) + 0xa91023e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&256))) *) + 0xa9112be9; (* arm_STP X9 X10 SP (Immediate_Offset (iword (&272))) *) + 0xa9460fe2; (* arm_LDP X2 X3 SP (Immediate_Offset (iword (&96))) *) + 0x9b037c49; (* arm_MUL X9 X2 X3 *) + 0x9bc37c4a; (* arm_UMULH X10 X2 X3 *) + 0xa94717e4; (* arm_LDP X4 X5 SP (Immediate_Offset (iword (&112))) *) + 0x9b047c48; (* arm_MUL X8 X2 X4 *) + 0xab08014a; (* arm_ADDS X10 X10 X8 *) + 0x9b057c4b; (* arm_MUL X11 X2 X5 *) + 0x9b047c68; (* arm_MUL X8 X3 X4 *) + 0xba08016b; (* arm_ADCS X11 X11 X8 *) + 0x9bc57c4c; (* arm_UMULH X12 X2 X5 *) + 0x9b057c68; (* arm_MUL X8 X3 X5 *) + 0xba08018c; (* arm_ADCS X12 X12 X8 *) + 0xa9481fe6; (* arm_LDP X6 X7 SP (Immediate_Offset (iword (&128))) *) + 0x9b077c4d; (* arm_MUL X13 X2 X7 *) + 0x9b067c68; (* arm_MUL X8 X3 X6 *) + 0xba0801ad; (* arm_ADCS X13 X13 X8 *) + 0x9bc77c4e; (* arm_UMULH X14 X2 X7 *) + 0x9b077c68; (* arm_MUL X8 X3 X7 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9b067caf; (* arm_MUL X15 X5 X6 *) + 0xba1f01ef; (* arm_ADCS X15 X15 XZR *) + 0x9bc67cb0; (* arm_UMULH X16 X5 X6 *) + 0x9a1f0210; (* arm_ADC X16 X16 XZR *) + 0x9bc47c48; (* arm_UMULH X8 X2 X4 *) + 0xab08016b; (* arm_ADDS X11 X11 X8 *) + 0x9bc47c68; (* arm_UMULH X8 X3 X4 *) + 0xba08018c; (* arm_ADCS X12 X12 X8 *) + 0x9bc57c68; (* arm_UMULH X8 X3 X5 *) + 0xba0801ad; (* arm_ADCS X13 X13 X8 *) + 0x9bc67c68; (* arm_UMULH X8 X3 X6 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9bc77c68; (* arm_UMULH X8 X3 X7 *) + 0xba0801ef; (* arm_ADCS X15 X15 X8 *) + 0x9a1f0210; (* arm_ADC X16 X16 XZR *) + 0x9b067c48; (* arm_MUL X8 X2 X6 *) + 0xab08018c; (* arm_ADDS X12 X12 X8 *) + 0x9b057c88; (* arm_MUL X8 X4 X5 *) + 0xba0801ad; (* arm_ADCS X13 X13 X8 *) + 0x9b067c88; (* arm_MUL X8 X4 X6 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9b077c88; (* arm_MUL X8 X4 X7 *) + 0xba0801ef; (* arm_ADCS X15 X15 X8 *) + 0x9b077ca8; (* arm_MUL X8 X5 X7 *) + 0xba080210; (* arm_ADCS X16 X16 X8 *) + 0x9b077cd1; (* arm_MUL X17 X6 X7 *) + 0xba1f0231; (* arm_ADCS X17 X17 XZR *) + 0x9bc77cd3; (* arm_UMULH X19 X6 X7 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0x9bc67c48; (* arm_UMULH X8 X2 X6 *) + 0xab0801ad; (* arm_ADDS X13 X13 X8 *) + 0x9bc57c88; (* arm_UMULH X8 X4 X5 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9bc67c88; (* arm_UMULH X8 X4 X6 *) + 0xba0801ef; (* arm_ADCS X15 X15 X8 *) + 0x9bc77c88; (* arm_UMULH X8 X4 X7 *) + 0xba080210; (* arm_ADCS X16 X16 X8 *) + 0x9bc77ca8; (* arm_UMULH X8 X5 X7 *) + 0xba080231; (* arm_ADCS X17 X17 X8 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0xab090129; (* arm_ADDS X9 X9 X9 *) + 0xba0a014a; (* arm_ADCS X10 X10 X10 *) + 0xba0b016b; (* arm_ADCS X11 X11 X11 *) + 0xba0c018c; (* arm_ADCS X12 X12 X12 *) + 0xba0d01ad; (* arm_ADCS X13 X13 X13 *) + 0xba0e01ce; (* arm_ADCS X14 X14 X14 *) + 0xba0f01ef; (* arm_ADCS X15 X15 X15 *) + 0xba100210; (* arm_ADCS X16 X16 X16 *) + 0xba110231; (* arm_ADCS X17 X17 X17 *) + 0xba130273; (* arm_ADCS X19 X19 X19 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc27c48; (* arm_UMULH X8 X2 X2 *) + 0x9b027c42; (* arm_MUL X2 X2 X2 *) + 0xab080129; (* arm_ADDS X9 X9 X8 *) + 0x9b037c68; (* arm_MUL X8 X3 X3 *) + 0xba08014a; (* arm_ADCS X10 X10 X8 *) + 0x9bc37c68; (* arm_UMULH X8 X3 X3 *) + 0xba08016b; (* arm_ADCS X11 X11 X8 *) + 0x9b047c88; (* arm_MUL X8 X4 X4 *) + 0xba08018c; (* arm_ADCS X12 X12 X8 *) + 0x9bc47c88; (* arm_UMULH X8 X4 X4 *) + 0xba0801ad; (* arm_ADCS X13 X13 X8 *) + 0x9b057ca8; (* arm_MUL X8 X5 X5 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9bc57ca8; (* arm_UMULH X8 X5 X5 *) + 0xba0801ef; (* arm_ADCS X15 X15 X8 *) + 0x9b067cc8; (* arm_MUL X8 X6 X6 *) + 0xba080210; (* arm_ADCS X16 X16 X8 *) + 0x9bc67cc8; (* arm_UMULH X8 X6 X6 *) + 0xba080231; (* arm_ADCS X17 X17 X8 *) + 0x9b077ce8; (* arm_MUL X8 X7 X7 *) + 0xba080273; (* arm_ADCS X19 X19 X8 *) + 0x9bc77ce8; (* arm_UMULH X8 X7 X7 *) + 0x9a080294; (* arm_ADC X20 X20 X8 *) + 0xd3607c45; (* arm_LSL X5 X2 32 *) + 0x8b0200a2; (* arm_ADD X2 X5 X2 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bc27ca5; (* arm_UMULH X5 X5 X2 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b027c83; (* arm_MUL X3 X4 X2 *) + 0x9bc27c84; (* arm_UMULH X4 X4 X2 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba020084; (* arm_ADCS X4 X4 X2 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb050129; (* arm_SUBS X9 X9 X5 *) + 0xfa04014a; (* arm_SBCS X10 X10 X4 *) + 0xfa03016b; (* arm_SBCS X11 X11 X3 *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xda1f0042; (* arm_SBC X2 X2 XZR *) + 0xd3607d25; (* arm_LSL X5 X9 32 *) + 0x8b0900a9; (* arm_ADD X9 X5 X9 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bc97ca5; (* arm_UMULH X5 X5 X9 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b097c83; (* arm_MUL X3 X4 X9 *) + 0x9bc97c84; (* arm_UMULH X4 X4 X9 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba090084; (* arm_ADCS X4 X4 X9 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb05014a; (* arm_SUBS X10 X10 X5 *) + 0xfa04016b; (* arm_SBCS X11 X11 X4 *) + 0xfa03018c; (* arm_SBCS X12 X12 X3 *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f0042; (* arm_SBCS X2 X2 XZR *) + 0xda1f0129; (* arm_SBC X9 X9 XZR *) + 0xd3607d45; (* arm_LSL X5 X10 32 *) + 0x8b0a00aa; (* arm_ADD X10 X5 X10 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bca7ca5; (* arm_UMULH X5 X5 X10 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b0a7c83; (* arm_MUL X3 X4 X10 *) + 0x9bca7c84; (* arm_UMULH X4 X4 X10 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba0a0084; (* arm_ADCS X4 X4 X10 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb05016b; (* arm_SUBS X11 X11 X5 *) + 0xfa04018c; (* arm_SBCS X12 X12 X4 *) + 0xfa0301ad; (* arm_SBCS X13 X13 X3 *) + 0xfa1f0042; (* arm_SBCS X2 X2 XZR *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xda1f014a; (* arm_SBC X10 X10 XZR *) + 0xd3607d65; (* arm_LSL X5 X11 32 *) + 0x8b0b00ab; (* arm_ADD X11 X5 X11 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bcb7ca5; (* arm_UMULH X5 X5 X11 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b0b7c83; (* arm_MUL X3 X4 X11 *) + 0x9bcb7c84; (* arm_UMULH X4 X4 X11 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb05018c; (* arm_SUBS X12 X12 X5 *) + 0xfa0401ad; (* arm_SBCS X13 X13 X4 *) + 0xfa030042; (* arm_SBCS X2 X2 X3 *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xda1f016b; (* arm_SBC X11 X11 XZR *) + 0xd3607d85; (* arm_LSL X5 X12 32 *) + 0x8b0c00ac; (* arm_ADD X12 X5 X12 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bcc7ca5; (* arm_UMULH X5 X5 X12 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b0c7c83; (* arm_MUL X3 X4 X12 *) + 0x9bcc7c84; (* arm_UMULH X4 X4 X12 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba0c0084; (* arm_ADCS X4 X4 X12 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb0501ad; (* arm_SUBS X13 X13 X5 *) + 0xfa040042; (* arm_SBCS X2 X2 X4 *) + 0xfa030129; (* arm_SBCS X9 X9 X3 *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xda1f018c; (* arm_SBC X12 X12 XZR *) + 0xd3607da5; (* arm_LSL X5 X13 32 *) + 0x8b0d00ad; (* arm_ADD X13 X5 X13 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bcd7ca5; (* arm_UMULH X5 X5 X13 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b0d7c83; (* arm_MUL X3 X4 X13 *) + 0x9bcd7c84; (* arm_UMULH X4 X4 X13 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba0d0084; (* arm_ADCS X4 X4 X13 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb050042; (* arm_SUBS X2 X2 X5 *) + 0xfa040129; (* arm_SBCS X9 X9 X4 *) + 0xfa03014a; (* arm_SBCS X10 X10 X3 *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda1f01ad; (* arm_SBC X13 X13 XZR *) + 0xab0e0042; (* arm_ADDS X2 X2 X14 *) + 0xba0f0129; (* arm_ADCS X9 X9 X15 *) + 0xba10014a; (* arm_ADCS X10 X10 X16 *) + 0xba11016b; (* arm_ADCS X11 X11 X17 *) + 0xba13018c; (* arm_ADCS X12 X12 X19 *) + 0xba1401ad; (* arm_ADCS X13 X13 X20 *) + 0x9a1f03e6; (* arm_ADC X6 XZR XZR *) + 0xb26083e8; (* arm_MOV X8 (rvalue (word 18446744069414584321)) *) + 0xab08004e; (* arm_ADDS X14 X2 X8 *) + 0xb2407fe8; (* arm_MOV X8 (rvalue (word 4294967295)) *) + 0xba08012f; (* arm_ADCS X15 X9 X8 *) + 0xd2800028; (* arm_MOV X8 (rvalue (word 1)) *) + 0xba080150; (* arm_ADCS X16 X10 X8 *) + 0xba1f0171; (* arm_ADCS X17 X11 XZR *) + 0xba1f0193; (* arm_ADCS X19 X12 XZR *) + 0xba1f01b4; (* arm_ADCS X20 X13 XZR *) + 0xba1f00c6; (* arm_ADCS X6 X6 XZR *) + 0x9a8e0042; (* arm_CSEL X2 X2 X14 Condition_EQ *) + 0x9a8f0129; (* arm_CSEL X9 X9 X15 Condition_EQ *) + 0x9a90014a; (* arm_CSEL X10 X10 X16 Condition_EQ *) + 0x9a91016b; (* arm_CSEL X11 X11 X17 Condition_EQ *) + 0x9a93018c; (* arm_CSEL X12 X12 X19 Condition_EQ *) + 0x9a9401ad; (* arm_CSEL X13 X13 X20 Condition_EQ *) + 0xa91227e2; (* arm_STP X2 X9 SP (Immediate_Offset (iword (&288))) *) + 0xa9132fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&304))) *) + 0xa91437ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&320))) *) + 0xa9401303; (* arm_LDP X3 X4 X24 (Immediate_Offset (iword (&0))) *) + 0xa9431be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&48))) *) + 0x9b057c6c; (* arm_MUL X12 X3 X5 *) + 0x9bc57c6d; (* arm_UMULH X13 X3 X5 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa94423e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&64))) *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0x9bc77c6f; (* arm_UMULH X15 X3 X7 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c70; (* arm_UMULH X16 X3 X8 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0xa9452be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&80))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c71; (* arm_UMULH X17 X3 X9 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c73; (* arm_UMULH X19 X3 X10 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b0294; (* arm_ADC X20 X20 X11 *) + 0xa9411303; (* arm_LDP X3 X4 X24 (Immediate_Offset (iword (&16))) *) + 0x9b057c6b; (* arm_MUL X11 X3 X5 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9a9f37f5; (* arm_CSET X21 Condition_CS *) + 0x9bc57c6b; (* arm_UMULH X11 X3 X5 *) + 0xab0b01ef; (* arm_ADDS X15 X15 X11 *) + 0x9bc67c6b; (* arm_UMULH X11 X3 X6 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9bc77c6b; (* arm_UMULH X11 X3 X7 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc87c6b; (* arm_UMULH X11 X3 X8 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc97c6b; (* arm_UMULH X11 X3 X9 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bca7c6b; (* arm_UMULH X11 X3 X10 *) + 0x9a0b02b5; (* arm_ADC X21 X21 X11 *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b01ef; (* arm_ADDS X15 X15 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9a9f37f6; (* arm_CSET X22 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b0210; (* arm_ADDS X16 X16 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b02d6; (* arm_ADC X22 X22 X11 *) + 0xa9421303; (* arm_LDP X3 X4 X24 (Immediate_Offset (iword (&32))) *) + 0x9b057c6b; (* arm_MUL X11 X3 X5 *) + 0xab0b0210; (* arm_ADDS X16 X16 X11 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9a9f37e2; (* arm_CSET X2 Condition_CS *) + 0x9bc57c6b; (* arm_UMULH X11 X3 X5 *) + 0xab0b0231; (* arm_ADDS X17 X17 X11 *) + 0x9bc67c6b; (* arm_UMULH X11 X3 X6 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc77c6b; (* arm_UMULH X11 X3 X7 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc87c6b; (* arm_UMULH X11 X3 X8 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bc97c6b; (* arm_UMULH X11 X3 X9 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9bca7c6b; (* arm_UMULH X11 X3 X10 *) + 0x9a0b0042; (* arm_ADC X2 X2 X11 *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b0231; (* arm_ADDS X17 X17 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0042; (* arm_ADCS X2 X2 X11 *) + 0x9a9f37e1; (* arm_CSET X1 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b0273; (* arm_ADDS X19 X19 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0042; (* arm_ADCS X2 X2 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b0021; (* arm_ADC X1 X1 X11 *) + 0xd3607d87; (* arm_LSL X7 X12 32 *) + 0x8b0c00ec; (* arm_ADD X12 X7 X12 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcc7ce7; (* arm_UMULH X7 X7 X12 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0c7cc5; (* arm_MUL X5 X6 X12 *) + 0x9bcc7cc6; (* arm_UMULH X6 X6 X12 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0c00c6; (* arm_ADCS X6 X6 X12 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ad; (* arm_SUBS X13 X13 X7 *) + 0xfa0601ce; (* arm_SBCS X14 X14 X6 *) + 0xfa0501ef; (* arm_SBCS X15 X15 X5 *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xda1f018c; (* arm_SBC X12 X12 XZR *) + 0xd3607da7; (* arm_LSL X7 X13 32 *) + 0x8b0d00ed; (* arm_ADD X13 X7 X13 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcd7ce7; (* arm_UMULH X7 X7 X13 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0d7cc5; (* arm_MUL X5 X6 X13 *) + 0x9bcd7cc6; (* arm_UMULH X6 X6 X13 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0d00c6; (* arm_ADCS X6 X6 X13 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ce; (* arm_SUBS X14 X14 X7 *) + 0xfa0601ef; (* arm_SBCS X15 X15 X6 *) + 0xfa050210; (* arm_SBCS X16 X16 X5 *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda1f01ad; (* arm_SBC X13 X13 XZR *) + 0xd3607dc7; (* arm_LSL X7 X14 32 *) + 0x8b0e00ee; (* arm_ADD X14 X7 X14 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bce7ce7; (* arm_UMULH X7 X7 X14 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0e7cc5; (* arm_MUL X5 X6 X14 *) + 0x9bce7cc6; (* arm_UMULH X6 X6 X14 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0e00c6; (* arm_ADCS X6 X6 X14 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ef; (* arm_SUBS X15 X15 X7 *) + 0xfa060210; (* arm_SBCS X16 X16 X6 *) + 0xfa050231; (* arm_SBCS X17 X17 X5 *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xda1f01ce; (* arm_SBC X14 X14 XZR *) + 0xd3607de7; (* arm_LSL X7 X15 32 *) + 0x8b0f00ef; (* arm_ADD X15 X7 X15 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcf7ce7; (* arm_UMULH X7 X7 X15 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0f7cc5; (* arm_MUL X5 X6 X15 *) + 0x9bcf7cc6; (* arm_UMULH X6 X6 X15 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0f00c6; (* arm_ADCS X6 X6 X15 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb070210; (* arm_SUBS X16 X16 X7 *) + 0xfa060231; (* arm_SBCS X17 X17 X6 *) + 0xfa05018c; (* arm_SBCS X12 X12 X5 *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xda1f01ef; (* arm_SBC X15 X15 XZR *) + 0xd3607e07; (* arm_LSL X7 X16 32 *) + 0x8b1000f0; (* arm_ADD X16 X7 X16 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bd07ce7; (* arm_UMULH X7 X7 X16 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b107cc5; (* arm_MUL X5 X6 X16 *) + 0x9bd07cc6; (* arm_UMULH X6 X6 X16 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba1000c6; (* arm_ADCS X6 X6 X16 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb070231; (* arm_SUBS X17 X17 X7 *) + 0xfa06018c; (* arm_SBCS X12 X12 X6 *) + 0xfa0501ad; (* arm_SBCS X13 X13 X5 *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xda1f0210; (* arm_SBC X16 X16 XZR *) + 0xd3607e27; (* arm_LSL X7 X17 32 *) + 0x8b1100f1; (* arm_ADD X17 X7 X17 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bd17ce7; (* arm_UMULH X7 X7 X17 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b117cc5; (* arm_MUL X5 X6 X17 *) + 0x9bd17cc6; (* arm_UMULH X6 X6 X17 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba1100c6; (* arm_ADCS X6 X6 X17 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb07018c; (* arm_SUBS X12 X12 X7 *) + 0xfa0601ad; (* arm_SBCS X13 X13 X6 *) + 0xfa0501ce; (* arm_SBCS X14 X14 X5 *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xda1f0231; (* arm_SBC X17 X17 XZR *) + 0xab13018c; (* arm_ADDS X12 X12 X19 *) + 0xba1401ad; (* arm_ADCS X13 X13 X20 *) + 0xba1501ce; (* arm_ADCS X14 X14 X21 *) + 0xba1601ef; (* arm_ADCS X15 X15 X22 *) + 0xba020210; (* arm_ADCS X16 X16 X2 *) + 0xba010231; (* arm_ADCS X17 X17 X1 *) + 0x9a1f03ea; (* arm_ADC X10 XZR XZR *) + 0xb26083eb; (* arm_MOV X11 (rvalue (word 18446744069414584321)) *) + 0xab0b0193; (* arm_ADDS X19 X12 X11 *) + 0xb2407feb; (* arm_MOV X11 (rvalue (word 4294967295)) *) + 0xba0b01b4; (* arm_ADCS X20 X13 X11 *) + 0xd280002b; (* arm_MOV X11 (rvalue (word 1)) *) + 0xba0b01d5; (* arm_ADCS X21 X14 X11 *) + 0xba1f01f6; (* arm_ADCS X22 X15 XZR *) + 0xba1f0202; (* arm_ADCS X2 X16 XZR *) + 0xba1f0221; (* arm_ADCS X1 X17 XZR *) + 0xba1f014a; (* arm_ADCS X10 X10 XZR *) + 0x9a93018c; (* arm_CSEL X12 X12 X19 Condition_EQ *) + 0x9a9401ad; (* arm_CSEL X13 X13 X20 Condition_EQ *) + 0x9a9501ce; (* arm_CSEL X14 X14 X21 Condition_EQ *) + 0x9a9601ef; (* arm_CSEL X15 X15 X22 Condition_EQ *) + 0x9a820210; (* arm_CSEL X16 X16 X2 Condition_EQ *) + 0x9a810231; (* arm_CSEL X17 X17 X1 Condition_EQ *) + 0xa90937ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&144))) *) + 0xa90a3fee; (* arm_STP X14 X15 SP (Immediate_Offset (iword (&160))) *) + 0xa90b47f0; (* arm_STP X16 X17 SP (Immediate_Offset (iword (&176))) *) + 0xa94f0fe2; (* arm_LDP X2 X3 SP (Immediate_Offset (iword (&240))) *) + 0x9b037c49; (* arm_MUL X9 X2 X3 *) + 0x9bc37c4a; (* arm_UMULH X10 X2 X3 *) + 0xa95017e4; (* arm_LDP X4 X5 SP (Immediate_Offset (iword (&256))) *) + 0x9b047c48; (* arm_MUL X8 X2 X4 *) + 0xab08014a; (* arm_ADDS X10 X10 X8 *) + 0x9b057c4b; (* arm_MUL X11 X2 X5 *) + 0x9b047c68; (* arm_MUL X8 X3 X4 *) + 0xba08016b; (* arm_ADCS X11 X11 X8 *) + 0x9bc57c4c; (* arm_UMULH X12 X2 X5 *) + 0x9b057c68; (* arm_MUL X8 X3 X5 *) + 0xba08018c; (* arm_ADCS X12 X12 X8 *) + 0xa9511fe6; (* arm_LDP X6 X7 SP (Immediate_Offset (iword (&272))) *) + 0x9b077c4d; (* arm_MUL X13 X2 X7 *) + 0x9b067c68; (* arm_MUL X8 X3 X6 *) + 0xba0801ad; (* arm_ADCS X13 X13 X8 *) + 0x9bc77c4e; (* arm_UMULH X14 X2 X7 *) + 0x9b077c68; (* arm_MUL X8 X3 X7 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9b067caf; (* arm_MUL X15 X5 X6 *) + 0xba1f01ef; (* arm_ADCS X15 X15 XZR *) + 0x9bc67cb0; (* arm_UMULH X16 X5 X6 *) + 0x9a1f0210; (* arm_ADC X16 X16 XZR *) + 0x9bc47c48; (* arm_UMULH X8 X2 X4 *) + 0xab08016b; (* arm_ADDS X11 X11 X8 *) + 0x9bc47c68; (* arm_UMULH X8 X3 X4 *) + 0xba08018c; (* arm_ADCS X12 X12 X8 *) + 0x9bc57c68; (* arm_UMULH X8 X3 X5 *) + 0xba0801ad; (* arm_ADCS X13 X13 X8 *) + 0x9bc67c68; (* arm_UMULH X8 X3 X6 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9bc77c68; (* arm_UMULH X8 X3 X7 *) + 0xba0801ef; (* arm_ADCS X15 X15 X8 *) + 0x9a1f0210; (* arm_ADC X16 X16 XZR *) + 0x9b067c48; (* arm_MUL X8 X2 X6 *) + 0xab08018c; (* arm_ADDS X12 X12 X8 *) + 0x9b057c88; (* arm_MUL X8 X4 X5 *) + 0xba0801ad; (* arm_ADCS X13 X13 X8 *) + 0x9b067c88; (* arm_MUL X8 X4 X6 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9b077c88; (* arm_MUL X8 X4 X7 *) + 0xba0801ef; (* arm_ADCS X15 X15 X8 *) + 0x9b077ca8; (* arm_MUL X8 X5 X7 *) + 0xba080210; (* arm_ADCS X16 X16 X8 *) + 0x9b077cd1; (* arm_MUL X17 X6 X7 *) + 0xba1f0231; (* arm_ADCS X17 X17 XZR *) + 0x9bc77cd3; (* arm_UMULH X19 X6 X7 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0x9bc67c48; (* arm_UMULH X8 X2 X6 *) + 0xab0801ad; (* arm_ADDS X13 X13 X8 *) + 0x9bc57c88; (* arm_UMULH X8 X4 X5 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9bc67c88; (* arm_UMULH X8 X4 X6 *) + 0xba0801ef; (* arm_ADCS X15 X15 X8 *) + 0x9bc77c88; (* arm_UMULH X8 X4 X7 *) + 0xba080210; (* arm_ADCS X16 X16 X8 *) + 0x9bc77ca8; (* arm_UMULH X8 X5 X7 *) + 0xba080231; (* arm_ADCS X17 X17 X8 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0xab090129; (* arm_ADDS X9 X9 X9 *) + 0xba0a014a; (* arm_ADCS X10 X10 X10 *) + 0xba0b016b; (* arm_ADCS X11 X11 X11 *) + 0xba0c018c; (* arm_ADCS X12 X12 X12 *) + 0xba0d01ad; (* arm_ADCS X13 X13 X13 *) + 0xba0e01ce; (* arm_ADCS X14 X14 X14 *) + 0xba0f01ef; (* arm_ADCS X15 X15 X15 *) + 0xba100210; (* arm_ADCS X16 X16 X16 *) + 0xba110231; (* arm_ADCS X17 X17 X17 *) + 0xba130273; (* arm_ADCS X19 X19 X19 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc27c48; (* arm_UMULH X8 X2 X2 *) + 0x9b027c42; (* arm_MUL X2 X2 X2 *) + 0xab080129; (* arm_ADDS X9 X9 X8 *) + 0x9b037c68; (* arm_MUL X8 X3 X3 *) + 0xba08014a; (* arm_ADCS X10 X10 X8 *) + 0x9bc37c68; (* arm_UMULH X8 X3 X3 *) + 0xba08016b; (* arm_ADCS X11 X11 X8 *) + 0x9b047c88; (* arm_MUL X8 X4 X4 *) + 0xba08018c; (* arm_ADCS X12 X12 X8 *) + 0x9bc47c88; (* arm_UMULH X8 X4 X4 *) + 0xba0801ad; (* arm_ADCS X13 X13 X8 *) + 0x9b057ca8; (* arm_MUL X8 X5 X5 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9bc57ca8; (* arm_UMULH X8 X5 X5 *) + 0xba0801ef; (* arm_ADCS X15 X15 X8 *) + 0x9b067cc8; (* arm_MUL X8 X6 X6 *) + 0xba080210; (* arm_ADCS X16 X16 X8 *) + 0x9bc67cc8; (* arm_UMULH X8 X6 X6 *) + 0xba080231; (* arm_ADCS X17 X17 X8 *) + 0x9b077ce8; (* arm_MUL X8 X7 X7 *) + 0xba080273; (* arm_ADCS X19 X19 X8 *) + 0x9bc77ce8; (* arm_UMULH X8 X7 X7 *) + 0x9a080294; (* arm_ADC X20 X20 X8 *) + 0xd3607c45; (* arm_LSL X5 X2 32 *) + 0x8b0200a2; (* arm_ADD X2 X5 X2 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bc27ca5; (* arm_UMULH X5 X5 X2 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b027c83; (* arm_MUL X3 X4 X2 *) + 0x9bc27c84; (* arm_UMULH X4 X4 X2 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba020084; (* arm_ADCS X4 X4 X2 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb050129; (* arm_SUBS X9 X9 X5 *) + 0xfa04014a; (* arm_SBCS X10 X10 X4 *) + 0xfa03016b; (* arm_SBCS X11 X11 X3 *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xda1f0042; (* arm_SBC X2 X2 XZR *) + 0xd3607d25; (* arm_LSL X5 X9 32 *) + 0x8b0900a9; (* arm_ADD X9 X5 X9 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bc97ca5; (* arm_UMULH X5 X5 X9 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b097c83; (* arm_MUL X3 X4 X9 *) + 0x9bc97c84; (* arm_UMULH X4 X4 X9 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba090084; (* arm_ADCS X4 X4 X9 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb05014a; (* arm_SUBS X10 X10 X5 *) + 0xfa04016b; (* arm_SBCS X11 X11 X4 *) + 0xfa03018c; (* arm_SBCS X12 X12 X3 *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f0042; (* arm_SBCS X2 X2 XZR *) + 0xda1f0129; (* arm_SBC X9 X9 XZR *) + 0xd3607d45; (* arm_LSL X5 X10 32 *) + 0x8b0a00aa; (* arm_ADD X10 X5 X10 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bca7ca5; (* arm_UMULH X5 X5 X10 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b0a7c83; (* arm_MUL X3 X4 X10 *) + 0x9bca7c84; (* arm_UMULH X4 X4 X10 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba0a0084; (* arm_ADCS X4 X4 X10 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb05016b; (* arm_SUBS X11 X11 X5 *) + 0xfa04018c; (* arm_SBCS X12 X12 X4 *) + 0xfa0301ad; (* arm_SBCS X13 X13 X3 *) + 0xfa1f0042; (* arm_SBCS X2 X2 XZR *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xda1f014a; (* arm_SBC X10 X10 XZR *) + 0xd3607d65; (* arm_LSL X5 X11 32 *) + 0x8b0b00ab; (* arm_ADD X11 X5 X11 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bcb7ca5; (* arm_UMULH X5 X5 X11 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b0b7c83; (* arm_MUL X3 X4 X11 *) + 0x9bcb7c84; (* arm_UMULH X4 X4 X11 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb05018c; (* arm_SUBS X12 X12 X5 *) + 0xfa0401ad; (* arm_SBCS X13 X13 X4 *) + 0xfa030042; (* arm_SBCS X2 X2 X3 *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xda1f016b; (* arm_SBC X11 X11 XZR *) + 0xd3607d85; (* arm_LSL X5 X12 32 *) + 0x8b0c00ac; (* arm_ADD X12 X5 X12 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bcc7ca5; (* arm_UMULH X5 X5 X12 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b0c7c83; (* arm_MUL X3 X4 X12 *) + 0x9bcc7c84; (* arm_UMULH X4 X4 X12 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba0c0084; (* arm_ADCS X4 X4 X12 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb0501ad; (* arm_SUBS X13 X13 X5 *) + 0xfa040042; (* arm_SBCS X2 X2 X4 *) + 0xfa030129; (* arm_SBCS X9 X9 X3 *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xda1f018c; (* arm_SBC X12 X12 XZR *) + 0xd3607da5; (* arm_LSL X5 X13 32 *) + 0x8b0d00ad; (* arm_ADD X13 X5 X13 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bcd7ca5; (* arm_UMULH X5 X5 X13 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b0d7c83; (* arm_MUL X3 X4 X13 *) + 0x9bcd7c84; (* arm_UMULH X4 X4 X13 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba0d0084; (* arm_ADCS X4 X4 X13 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb050042; (* arm_SUBS X2 X2 X5 *) + 0xfa040129; (* arm_SBCS X9 X9 X4 *) + 0xfa03014a; (* arm_SBCS X10 X10 X3 *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda1f01ad; (* arm_SBC X13 X13 XZR *) + 0xab0e0042; (* arm_ADDS X2 X2 X14 *) + 0xba0f0129; (* arm_ADCS X9 X9 X15 *) + 0xba10014a; (* arm_ADCS X10 X10 X16 *) + 0xba11016b; (* arm_ADCS X11 X11 X17 *) + 0xba13018c; (* arm_ADCS X12 X12 X19 *) + 0xba1401ad; (* arm_ADCS X13 X13 X20 *) + 0x9a1f03e6; (* arm_ADC X6 XZR XZR *) + 0xb26083e8; (* arm_MOV X8 (rvalue (word 18446744069414584321)) *) + 0xab08004e; (* arm_ADDS X14 X2 X8 *) + 0xb2407fe8; (* arm_MOV X8 (rvalue (word 4294967295)) *) + 0xba08012f; (* arm_ADCS X15 X9 X8 *) + 0xd2800028; (* arm_MOV X8 (rvalue (word 1)) *) + 0xba080150; (* arm_ADCS X16 X10 X8 *) + 0xba1f0171; (* arm_ADCS X17 X11 XZR *) + 0xba1f0193; (* arm_ADCS X19 X12 XZR *) + 0xba1f01b4; (* arm_ADCS X20 X13 XZR *) + 0xba1f00c6; (* arm_ADCS X6 X6 XZR *) + 0x9a8e0042; (* arm_CSEL X2 X2 X14 Condition_EQ *) + 0x9a8f0129; (* arm_CSEL X9 X9 X15 Condition_EQ *) + 0x9a90014a; (* arm_CSEL X10 X10 X16 Condition_EQ *) + 0x9a91016b; (* arm_CSEL X11 X11 X17 Condition_EQ *) + 0x9a93018c; (* arm_CSEL X12 X12 X19 Condition_EQ *) + 0x9a9401ad; (* arm_CSEL X13 X13 X20 Condition_EQ *) + 0xa90c27e2; (* arm_STP X2 X9 SP (Immediate_Offset (iword (&192))) *) + 0xa90d2fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&208))) *) + 0xa90e37ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&224))) *) + 0xa95207e0; (* arm_LDP X0 X1 SP (Immediate_Offset (iword (&288))) *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0xeb0000c6; (* arm_SUBS X6 X6 X0 *) + 0xb2607fe7; (* arm_MOV X7 (rvalue (word 18446744069414584320)) *) + 0xfa0100e7; (* arm_SBCS X7 X7 X1 *) + 0xa95307e0; (* arm_LDP X0 X1 SP (Immediate_Offset (iword (&304))) *) + 0x92800028; (* arm_MOVN X8 (word 1) 0 *) + 0xfa000108; (* arm_SBCS X8 X8 X0 *) + 0x9280000d; (* arm_MOVN X13 (word 0) 0 *) + 0xfa0101a9; (* arm_SBCS X9 X13 X1 *) + 0xa95407e0; (* arm_LDP X0 X1 SP (Immediate_Offset (iword (&320))) *) + 0xfa0001aa; (* arm_SBCS X10 X13 X0 *) + 0xda0101ab; (* arm_SBC X11 X13 X1 *) + 0xd280012c; (* arm_MOV X12 (rvalue (word 9)) *) + 0x9b067d80; (* arm_MUL X0 X12 X6 *) + 0x9b077d81; (* arm_MUL X1 X12 X7 *) + 0x9b087d82; (* arm_MUL X2 X12 X8 *) + 0x9b097d83; (* arm_MUL X3 X12 X9 *) + 0x9b0a7d84; (* arm_MUL X4 X12 X10 *) + 0x9b0b7d85; (* arm_MUL X5 X12 X11 *) + 0x9bc67d86; (* arm_UMULH X6 X12 X6 *) + 0x9bc77d87; (* arm_UMULH X7 X12 X7 *) + 0x9bc87d88; (* arm_UMULH X8 X12 X8 *) + 0x9bc97d89; (* arm_UMULH X9 X12 X9 *) + 0x9bca7d8a; (* arm_UMULH X10 X12 X10 *) + 0x9bcb7d8c; (* arm_UMULH X12 X12 X11 *) + 0xab060021; (* arm_ADDS X1 X1 X6 *) + 0xba070042; (* arm_ADCS X2 X2 X7 *) + 0xba080063; (* arm_ADCS X3 X3 X8 *) + 0xba090084; (* arm_ADCS X4 X4 X9 *) + 0xba0a00a5; (* arm_ADCS X5 X5 X10 *) + 0xd2800026; (* arm_MOV X6 (rvalue (word 1)) *) + 0x9a060186; (* arm_ADC X6 X12 X6 *) + 0xa94927e8; (* arm_LDP X8 X9 SP (Immediate_Offset (iword (&144))) *) + 0xa94a2fea; (* arm_LDP X10 X11 SP (Immediate_Offset (iword (&160))) *) + 0xa94b37ec; (* arm_LDP X12 X13 SP (Immediate_Offset (iword (&176))) *) + 0xd280018e; (* arm_MOV X14 (rvalue (word 12)) *) + 0x9b087dcf; (* arm_MUL X15 X14 X8 *) + 0x9bc87dc8; (* arm_UMULH X8 X14 X8 *) + 0xab0f0000; (* arm_ADDS X0 X0 X15 *) + 0x9b097dcf; (* arm_MUL X15 X14 X9 *) + 0x9bc97dc9; (* arm_UMULH X9 X14 X9 *) + 0xba0f0021; (* arm_ADCS X1 X1 X15 *) + 0x9b0a7dcf; (* arm_MUL X15 X14 X10 *) + 0x9bca7dca; (* arm_UMULH X10 X14 X10 *) + 0xba0f0042; (* arm_ADCS X2 X2 X15 *) + 0x9b0b7dcf; (* arm_MUL X15 X14 X11 *) + 0x9bcb7dcb; (* arm_UMULH X11 X14 X11 *) + 0xba0f0063; (* arm_ADCS X3 X3 X15 *) + 0x9b0c7dcf; (* arm_MUL X15 X14 X12 *) + 0x9bcc7dcc; (* arm_UMULH X12 X14 X12 *) + 0xba0f0084; (* arm_ADCS X4 X4 X15 *) + 0x9b0d7dcf; (* arm_MUL X15 X14 X13 *) + 0x9bcd7dcd; (* arm_UMULH X13 X14 X13 *) + 0xba0f00a5; (* arm_ADCS X5 X5 X15 *) + 0x9a1f00c6; (* arm_ADC X6 X6 XZR *) + 0xab080021; (* arm_ADDS X1 X1 X8 *) + 0xba090042; (* arm_ADCS X2 X2 X9 *) + 0xba0a0063; (* arm_ADCS X3 X3 X10 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0xba0c00a5; (* arm_ADCS X5 X5 X12 *) + 0xba0d00c6; (* arm_ADCS X6 X6 X13 *) + 0xd3607cc7; (* arm_LSL X7 X6 32 *) + 0xeb0700c8; (* arm_SUBS X8 X6 X7 *) + 0xda1f00e7; (* arm_SBC X7 X7 XZR *) + 0xab080000; (* arm_ADDS X0 X0 X8 *) + 0xba070021; (* arm_ADCS X1 X1 X7 *) + 0xba060042; (* arm_ADCS X2 X2 X6 *) + 0xba1f0063; (* arm_ADCS X3 X3 XZR *) + 0xba1f0084; (* arm_ADCS X4 X4 XZR *) + 0xba1f00a5; (* arm_ADCS X5 X5 XZR *) + 0xda9f23e6; (* arm_CSETM X6 Condition_CC *) + 0xb2407fe7; (* arm_MOV X7 (rvalue (word 4294967295)) *) + 0x8a0600e7; (* arm_AND X7 X7 X6 *) + 0xab070000; (* arm_ADDS X0 X0 X7 *) + 0xca0600e7; (* arm_EOR X7 X7 X6 *) + 0xba070021; (* arm_ADCS X1 X1 X7 *) + 0x92800027; (* arm_MOVN X7 (word 1) 0 *) + 0x8a0600e7; (* arm_AND X7 X7 X6 *) + 0xba070042; (* arm_ADCS X2 X2 X7 *) + 0xba060063; (* arm_ADCS X3 X3 X6 *) + 0xba060084; (* arm_ADCS X4 X4 X6 *) + 0x9a0600a5; (* arm_ADC X5 X5 X6 *) + 0xa91207e0; (* arm_STP X0 X1 SP (Immediate_Offset (iword (&288))) *) + 0xa9130fe2; (* arm_STP X2 X3 SP (Immediate_Offset (iword (&304))) *) + 0xa91417e4; (* arm_STP X4 X5 SP (Immediate_Offset (iword (&320))) *) + 0xa94c1be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&192))) *) + 0xa9400fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&0))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa94d23e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&208))) *) + 0xa9410fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&16))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xa94e2be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&224))) *) + 0xa9420fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&32))) *) + 0xfa040129; (* arm_SBCS X9 X9 X4 *) + 0xfa03014a; (* arm_SBCS X10 X10 X3 *) + 0xda9f23e3; (* arm_CSETM X3 Condition_CC *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0xab0400a5; (* arm_ADDS X5 X5 X4 *) + 0xca030084; (* arm_EOR X4 X4 X3 *) + 0xba0400c6; (* arm_ADCS X6 X6 X4 *) + 0x92800024; (* arm_MOVN X4 (word 1) 0 *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0xba0400e7; (* arm_ADCS X7 X7 X4 *) + 0xba030108; (* arm_ADCS X8 X8 X3 *) + 0xba030129; (* arm_ADCS X9 X9 X3 *) + 0x9a03014a; (* arm_ADC X10 X10 X3 *) + 0xa90f1be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&240))) *) + 0xa91023e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&256))) *) + 0xa9112be9; (* arm_STP X9 X10 SP (Immediate_Offset (iword (&272))) *) + 0xa9430fe2; (* arm_LDP X2 X3 SP (Immediate_Offset (iword (&48))) *) + 0x9b037c49; (* arm_MUL X9 X2 X3 *) + 0x9bc37c4a; (* arm_UMULH X10 X2 X3 *) + 0xa94417e4; (* arm_LDP X4 X5 SP (Immediate_Offset (iword (&64))) *) + 0x9b047c48; (* arm_MUL X8 X2 X4 *) + 0xab08014a; (* arm_ADDS X10 X10 X8 *) + 0x9b057c4b; (* arm_MUL X11 X2 X5 *) + 0x9b047c68; (* arm_MUL X8 X3 X4 *) + 0xba08016b; (* arm_ADCS X11 X11 X8 *) + 0x9bc57c4c; (* arm_UMULH X12 X2 X5 *) + 0x9b057c68; (* arm_MUL X8 X3 X5 *) + 0xba08018c; (* arm_ADCS X12 X12 X8 *) + 0xa9451fe6; (* arm_LDP X6 X7 SP (Immediate_Offset (iword (&80))) *) + 0x9b077c4d; (* arm_MUL X13 X2 X7 *) + 0x9b067c68; (* arm_MUL X8 X3 X6 *) + 0xba0801ad; (* arm_ADCS X13 X13 X8 *) + 0x9bc77c4e; (* arm_UMULH X14 X2 X7 *) + 0x9b077c68; (* arm_MUL X8 X3 X7 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9b067caf; (* arm_MUL X15 X5 X6 *) + 0xba1f01ef; (* arm_ADCS X15 X15 XZR *) + 0x9bc67cb0; (* arm_UMULH X16 X5 X6 *) + 0x9a1f0210; (* arm_ADC X16 X16 XZR *) + 0x9bc47c48; (* arm_UMULH X8 X2 X4 *) + 0xab08016b; (* arm_ADDS X11 X11 X8 *) + 0x9bc47c68; (* arm_UMULH X8 X3 X4 *) + 0xba08018c; (* arm_ADCS X12 X12 X8 *) + 0x9bc57c68; (* arm_UMULH X8 X3 X5 *) + 0xba0801ad; (* arm_ADCS X13 X13 X8 *) + 0x9bc67c68; (* arm_UMULH X8 X3 X6 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9bc77c68; (* arm_UMULH X8 X3 X7 *) + 0xba0801ef; (* arm_ADCS X15 X15 X8 *) + 0x9a1f0210; (* arm_ADC X16 X16 XZR *) + 0x9b067c48; (* arm_MUL X8 X2 X6 *) + 0xab08018c; (* arm_ADDS X12 X12 X8 *) + 0x9b057c88; (* arm_MUL X8 X4 X5 *) + 0xba0801ad; (* arm_ADCS X13 X13 X8 *) + 0x9b067c88; (* arm_MUL X8 X4 X6 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9b077c88; (* arm_MUL X8 X4 X7 *) + 0xba0801ef; (* arm_ADCS X15 X15 X8 *) + 0x9b077ca8; (* arm_MUL X8 X5 X7 *) + 0xba080210; (* arm_ADCS X16 X16 X8 *) + 0x9b077cd1; (* arm_MUL X17 X6 X7 *) + 0xba1f0231; (* arm_ADCS X17 X17 XZR *) + 0x9bc77cd3; (* arm_UMULH X19 X6 X7 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0x9bc67c48; (* arm_UMULH X8 X2 X6 *) + 0xab0801ad; (* arm_ADDS X13 X13 X8 *) + 0x9bc57c88; (* arm_UMULH X8 X4 X5 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9bc67c88; (* arm_UMULH X8 X4 X6 *) + 0xba0801ef; (* arm_ADCS X15 X15 X8 *) + 0x9bc77c88; (* arm_UMULH X8 X4 X7 *) + 0xba080210; (* arm_ADCS X16 X16 X8 *) + 0x9bc77ca8; (* arm_UMULH X8 X5 X7 *) + 0xba080231; (* arm_ADCS X17 X17 X8 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0xab090129; (* arm_ADDS X9 X9 X9 *) + 0xba0a014a; (* arm_ADCS X10 X10 X10 *) + 0xba0b016b; (* arm_ADCS X11 X11 X11 *) + 0xba0c018c; (* arm_ADCS X12 X12 X12 *) + 0xba0d01ad; (* arm_ADCS X13 X13 X13 *) + 0xba0e01ce; (* arm_ADCS X14 X14 X14 *) + 0xba0f01ef; (* arm_ADCS X15 X15 X15 *) + 0xba100210; (* arm_ADCS X16 X16 X16 *) + 0xba110231; (* arm_ADCS X17 X17 X17 *) + 0xba130273; (* arm_ADCS X19 X19 X19 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc27c48; (* arm_UMULH X8 X2 X2 *) + 0x9b027c42; (* arm_MUL X2 X2 X2 *) + 0xab080129; (* arm_ADDS X9 X9 X8 *) + 0x9b037c68; (* arm_MUL X8 X3 X3 *) + 0xba08014a; (* arm_ADCS X10 X10 X8 *) + 0x9bc37c68; (* arm_UMULH X8 X3 X3 *) + 0xba08016b; (* arm_ADCS X11 X11 X8 *) + 0x9b047c88; (* arm_MUL X8 X4 X4 *) + 0xba08018c; (* arm_ADCS X12 X12 X8 *) + 0x9bc47c88; (* arm_UMULH X8 X4 X4 *) + 0xba0801ad; (* arm_ADCS X13 X13 X8 *) + 0x9b057ca8; (* arm_MUL X8 X5 X5 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9bc57ca8; (* arm_UMULH X8 X5 X5 *) + 0xba0801ef; (* arm_ADCS X15 X15 X8 *) + 0x9b067cc8; (* arm_MUL X8 X6 X6 *) + 0xba080210; (* arm_ADCS X16 X16 X8 *) + 0x9bc67cc8; (* arm_UMULH X8 X6 X6 *) + 0xba080231; (* arm_ADCS X17 X17 X8 *) + 0x9b077ce8; (* arm_MUL X8 X7 X7 *) + 0xba080273; (* arm_ADCS X19 X19 X8 *) + 0x9bc77ce8; (* arm_UMULH X8 X7 X7 *) + 0x9a080294; (* arm_ADC X20 X20 X8 *) + 0xd3607c45; (* arm_LSL X5 X2 32 *) + 0x8b0200a2; (* arm_ADD X2 X5 X2 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bc27ca5; (* arm_UMULH X5 X5 X2 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b027c83; (* arm_MUL X3 X4 X2 *) + 0x9bc27c84; (* arm_UMULH X4 X4 X2 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba020084; (* arm_ADCS X4 X4 X2 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb050129; (* arm_SUBS X9 X9 X5 *) + 0xfa04014a; (* arm_SBCS X10 X10 X4 *) + 0xfa03016b; (* arm_SBCS X11 X11 X3 *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xda1f0042; (* arm_SBC X2 X2 XZR *) + 0xd3607d25; (* arm_LSL X5 X9 32 *) + 0x8b0900a9; (* arm_ADD X9 X5 X9 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bc97ca5; (* arm_UMULH X5 X5 X9 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b097c83; (* arm_MUL X3 X4 X9 *) + 0x9bc97c84; (* arm_UMULH X4 X4 X9 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba090084; (* arm_ADCS X4 X4 X9 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb05014a; (* arm_SUBS X10 X10 X5 *) + 0xfa04016b; (* arm_SBCS X11 X11 X4 *) + 0xfa03018c; (* arm_SBCS X12 X12 X3 *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f0042; (* arm_SBCS X2 X2 XZR *) + 0xda1f0129; (* arm_SBC X9 X9 XZR *) + 0xd3607d45; (* arm_LSL X5 X10 32 *) + 0x8b0a00aa; (* arm_ADD X10 X5 X10 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bca7ca5; (* arm_UMULH X5 X5 X10 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b0a7c83; (* arm_MUL X3 X4 X10 *) + 0x9bca7c84; (* arm_UMULH X4 X4 X10 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba0a0084; (* arm_ADCS X4 X4 X10 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb05016b; (* arm_SUBS X11 X11 X5 *) + 0xfa04018c; (* arm_SBCS X12 X12 X4 *) + 0xfa0301ad; (* arm_SBCS X13 X13 X3 *) + 0xfa1f0042; (* arm_SBCS X2 X2 XZR *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xda1f014a; (* arm_SBC X10 X10 XZR *) + 0xd3607d65; (* arm_LSL X5 X11 32 *) + 0x8b0b00ab; (* arm_ADD X11 X5 X11 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bcb7ca5; (* arm_UMULH X5 X5 X11 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b0b7c83; (* arm_MUL X3 X4 X11 *) + 0x9bcb7c84; (* arm_UMULH X4 X4 X11 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb05018c; (* arm_SUBS X12 X12 X5 *) + 0xfa0401ad; (* arm_SBCS X13 X13 X4 *) + 0xfa030042; (* arm_SBCS X2 X2 X3 *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xda1f016b; (* arm_SBC X11 X11 XZR *) + 0xd3607d85; (* arm_LSL X5 X12 32 *) + 0x8b0c00ac; (* arm_ADD X12 X5 X12 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bcc7ca5; (* arm_UMULH X5 X5 X12 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b0c7c83; (* arm_MUL X3 X4 X12 *) + 0x9bcc7c84; (* arm_UMULH X4 X4 X12 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba0c0084; (* arm_ADCS X4 X4 X12 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb0501ad; (* arm_SUBS X13 X13 X5 *) + 0xfa040042; (* arm_SBCS X2 X2 X4 *) + 0xfa030129; (* arm_SBCS X9 X9 X3 *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xda1f018c; (* arm_SBC X12 X12 XZR *) + 0xd3607da5; (* arm_LSL X5 X13 32 *) + 0x8b0d00ad; (* arm_ADD X13 X5 X13 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bcd7ca5; (* arm_UMULH X5 X5 X13 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b0d7c83; (* arm_MUL X3 X4 X13 *) + 0x9bcd7c84; (* arm_UMULH X4 X4 X13 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba0d0084; (* arm_ADCS X4 X4 X13 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb050042; (* arm_SUBS X2 X2 X5 *) + 0xfa040129; (* arm_SBCS X9 X9 X4 *) + 0xfa03014a; (* arm_SBCS X10 X10 X3 *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda1f01ad; (* arm_SBC X13 X13 XZR *) + 0xab0e0042; (* arm_ADDS X2 X2 X14 *) + 0xba0f0129; (* arm_ADCS X9 X9 X15 *) + 0xba10014a; (* arm_ADCS X10 X10 X16 *) + 0xba11016b; (* arm_ADCS X11 X11 X17 *) + 0xba13018c; (* arm_ADCS X12 X12 X19 *) + 0xba1401ad; (* arm_ADCS X13 X13 X20 *) + 0x9a1f03e6; (* arm_ADC X6 XZR XZR *) + 0xb26083e8; (* arm_MOV X8 (rvalue (word 18446744069414584321)) *) + 0xab08004e; (* arm_ADDS X14 X2 X8 *) + 0xb2407fe8; (* arm_MOV X8 (rvalue (word 4294967295)) *) + 0xba08012f; (* arm_ADCS X15 X9 X8 *) + 0xd2800028; (* arm_MOV X8 (rvalue (word 1)) *) + 0xba080150; (* arm_ADCS X16 X10 X8 *) + 0xba1f0171; (* arm_ADCS X17 X11 XZR *) + 0xba1f0193; (* arm_ADCS X19 X12 XZR *) + 0xba1f01b4; (* arm_ADCS X20 X13 XZR *) + 0xba1f00c6; (* arm_ADCS X6 X6 XZR *) + 0x9a8e0042; (* arm_CSEL X2 X2 X14 Condition_EQ *) + 0x9a8f0129; (* arm_CSEL X9 X9 X15 Condition_EQ *) + 0x9a90014a; (* arm_CSEL X10 X10 X16 Condition_EQ *) + 0x9a91016b; (* arm_CSEL X11 X11 X17 Condition_EQ *) + 0x9a93018c; (* arm_CSEL X12 X12 X19 Condition_EQ *) + 0x9a9401ad; (* arm_CSEL X13 X13 X20 Condition_EQ *) + 0xa90c27e2; (* arm_STP X2 X9 SP (Immediate_Offset (iword (&192))) *) + 0xa90d2fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&208))) *) + 0xa90e37ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&224))) *) + 0xa94f1be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&240))) *) + 0xa9430fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&48))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa95023e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&256))) *) + 0xa9440fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&64))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xa9512be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&272))) *) + 0xa9450fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&80))) *) + 0xfa040129; (* arm_SBCS X9 X9 X4 *) + 0xfa03014a; (* arm_SBCS X10 X10 X3 *) + 0xda9f23e3; (* arm_CSETM X3 Condition_CC *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0xab0400a5; (* arm_ADDS X5 X5 X4 *) + 0xca030084; (* arm_EOR X4 X4 X3 *) + 0xba0400c6; (* arm_ADCS X6 X6 X4 *) + 0x92800024; (* arm_MOVN X4 (word 1) 0 *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0xba0400e7; (* arm_ADCS X7 X7 X4 *) + 0xba030108; (* arm_ADCS X8 X8 X3 *) + 0xba030129; (* arm_ADCS X9 X9 X3 *) + 0x9a03014a; (* arm_ADC X10 X10 X3 *) + 0xa9061ae5; (* arm_STP X5 X6 X23 (Immediate_Offset (iword (&96))) *) + 0xa90722e7; (* arm_STP X7 X8 X23 (Immediate_Offset (iword (&112))) *) + 0xa9082ae9; (* arm_STP X9 X10 X23 (Immediate_Offset (iword (&128))) *) + 0xa95213e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&288))) *) + 0xa9461be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&96))) *) + 0x9b057c6c; (* arm_MUL X12 X3 X5 *) + 0x9bc57c6d; (* arm_UMULH X13 X3 X5 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa94723e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&112))) *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0x9bc77c6f; (* arm_UMULH X15 X3 X7 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c70; (* arm_UMULH X16 X3 X8 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0xa9482be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&128))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c71; (* arm_UMULH X17 X3 X9 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c73; (* arm_UMULH X19 X3 X10 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b0294; (* arm_ADC X20 X20 X11 *) + 0xa95313e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&304))) *) + 0x9b057c6b; (* arm_MUL X11 X3 X5 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9a9f37f5; (* arm_CSET X21 Condition_CS *) + 0x9bc57c6b; (* arm_UMULH X11 X3 X5 *) + 0xab0b01ef; (* arm_ADDS X15 X15 X11 *) + 0x9bc67c6b; (* arm_UMULH X11 X3 X6 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9bc77c6b; (* arm_UMULH X11 X3 X7 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc87c6b; (* arm_UMULH X11 X3 X8 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc97c6b; (* arm_UMULH X11 X3 X9 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bca7c6b; (* arm_UMULH X11 X3 X10 *) + 0x9a0b02b5; (* arm_ADC X21 X21 X11 *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b01ef; (* arm_ADDS X15 X15 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9a9f37f6; (* arm_CSET X22 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b0210; (* arm_ADDS X16 X16 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b02d6; (* arm_ADC X22 X22 X11 *) + 0xa95413e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&320))) *) + 0x9b057c6b; (* arm_MUL X11 X3 X5 *) + 0xab0b0210; (* arm_ADDS X16 X16 X11 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9a9f37e2; (* arm_CSET X2 Condition_CS *) + 0x9bc57c6b; (* arm_UMULH X11 X3 X5 *) + 0xab0b0231; (* arm_ADDS X17 X17 X11 *) + 0x9bc67c6b; (* arm_UMULH X11 X3 X6 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc77c6b; (* arm_UMULH X11 X3 X7 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc87c6b; (* arm_UMULH X11 X3 X8 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bc97c6b; (* arm_UMULH X11 X3 X9 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9bca7c6b; (* arm_UMULH X11 X3 X10 *) + 0x9a0b0042; (* arm_ADC X2 X2 X11 *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b0231; (* arm_ADDS X17 X17 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0042; (* arm_ADCS X2 X2 X11 *) + 0x9a9f37e1; (* arm_CSET X1 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b0273; (* arm_ADDS X19 X19 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0042; (* arm_ADCS X2 X2 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b0021; (* arm_ADC X1 X1 X11 *) + 0xd3607d87; (* arm_LSL X7 X12 32 *) + 0x8b0c00ec; (* arm_ADD X12 X7 X12 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcc7ce7; (* arm_UMULH X7 X7 X12 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0c7cc5; (* arm_MUL X5 X6 X12 *) + 0x9bcc7cc6; (* arm_UMULH X6 X6 X12 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0c00c6; (* arm_ADCS X6 X6 X12 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ad; (* arm_SUBS X13 X13 X7 *) + 0xfa0601ce; (* arm_SBCS X14 X14 X6 *) + 0xfa0501ef; (* arm_SBCS X15 X15 X5 *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xda1f018c; (* arm_SBC X12 X12 XZR *) + 0xd3607da7; (* arm_LSL X7 X13 32 *) + 0x8b0d00ed; (* arm_ADD X13 X7 X13 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcd7ce7; (* arm_UMULH X7 X7 X13 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0d7cc5; (* arm_MUL X5 X6 X13 *) + 0x9bcd7cc6; (* arm_UMULH X6 X6 X13 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0d00c6; (* arm_ADCS X6 X6 X13 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ce; (* arm_SUBS X14 X14 X7 *) + 0xfa0601ef; (* arm_SBCS X15 X15 X6 *) + 0xfa050210; (* arm_SBCS X16 X16 X5 *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda1f01ad; (* arm_SBC X13 X13 XZR *) + 0xd3607dc7; (* arm_LSL X7 X14 32 *) + 0x8b0e00ee; (* arm_ADD X14 X7 X14 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bce7ce7; (* arm_UMULH X7 X7 X14 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0e7cc5; (* arm_MUL X5 X6 X14 *) + 0x9bce7cc6; (* arm_UMULH X6 X6 X14 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0e00c6; (* arm_ADCS X6 X6 X14 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ef; (* arm_SUBS X15 X15 X7 *) + 0xfa060210; (* arm_SBCS X16 X16 X6 *) + 0xfa050231; (* arm_SBCS X17 X17 X5 *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xda1f01ce; (* arm_SBC X14 X14 XZR *) + 0xd3607de7; (* arm_LSL X7 X15 32 *) + 0x8b0f00ef; (* arm_ADD X15 X7 X15 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcf7ce7; (* arm_UMULH X7 X7 X15 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0f7cc5; (* arm_MUL X5 X6 X15 *) + 0x9bcf7cc6; (* arm_UMULH X6 X6 X15 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0f00c6; (* arm_ADCS X6 X6 X15 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb070210; (* arm_SUBS X16 X16 X7 *) + 0xfa060231; (* arm_SBCS X17 X17 X6 *) + 0xfa05018c; (* arm_SBCS X12 X12 X5 *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xda1f01ef; (* arm_SBC X15 X15 XZR *) + 0xd3607e07; (* arm_LSL X7 X16 32 *) + 0x8b1000f0; (* arm_ADD X16 X7 X16 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bd07ce7; (* arm_UMULH X7 X7 X16 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b107cc5; (* arm_MUL X5 X6 X16 *) + 0x9bd07cc6; (* arm_UMULH X6 X6 X16 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba1000c6; (* arm_ADCS X6 X6 X16 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb070231; (* arm_SUBS X17 X17 X7 *) + 0xfa06018c; (* arm_SBCS X12 X12 X6 *) + 0xfa0501ad; (* arm_SBCS X13 X13 X5 *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xda1f0210; (* arm_SBC X16 X16 XZR *) + 0xd3607e27; (* arm_LSL X7 X17 32 *) + 0x8b1100f1; (* arm_ADD X17 X7 X17 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bd17ce7; (* arm_UMULH X7 X7 X17 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b117cc5; (* arm_MUL X5 X6 X17 *) + 0x9bd17cc6; (* arm_UMULH X6 X6 X17 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba1100c6; (* arm_ADCS X6 X6 X17 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb07018c; (* arm_SUBS X12 X12 X7 *) + 0xfa0601ad; (* arm_SBCS X13 X13 X6 *) + 0xfa0501ce; (* arm_SBCS X14 X14 X5 *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xda1f0231; (* arm_SBC X17 X17 XZR *) + 0xab13018c; (* arm_ADDS X12 X12 X19 *) + 0xba1401ad; (* arm_ADCS X13 X13 X20 *) + 0xba1501ce; (* arm_ADCS X14 X14 X21 *) + 0xba1601ef; (* arm_ADCS X15 X15 X22 *) + 0xba020210; (* arm_ADCS X16 X16 X2 *) + 0xba010231; (* arm_ADCS X17 X17 X1 *) + 0x9a1f03ea; (* arm_ADC X10 XZR XZR *) + 0xb26083eb; (* arm_MOV X11 (rvalue (word 18446744069414584321)) *) + 0xab0b0193; (* arm_ADDS X19 X12 X11 *) + 0xb2407feb; (* arm_MOV X11 (rvalue (word 4294967295)) *) + 0xba0b01b4; (* arm_ADCS X20 X13 X11 *) + 0xd280002b; (* arm_MOV X11 (rvalue (word 1)) *) + 0xba0b01d5; (* arm_ADCS X21 X14 X11 *) + 0xba1f01f6; (* arm_ADCS X22 X15 XZR *) + 0xba1f0202; (* arm_ADCS X2 X16 XZR *) + 0xba1f0221; (* arm_ADCS X1 X17 XZR *) + 0xba1f014a; (* arm_ADCS X10 X10 XZR *) + 0x9a93018c; (* arm_CSEL X12 X12 X19 Condition_EQ *) + 0x9a9401ad; (* arm_CSEL X13 X13 X20 Condition_EQ *) + 0x9a9501ce; (* arm_CSEL X14 X14 X21 Condition_EQ *) + 0x9a9601ef; (* arm_CSEL X15 X15 X22 Condition_EQ *) + 0x9a820210; (* arm_CSEL X16 X16 X2 Condition_EQ *) + 0x9a810231; (* arm_CSEL X17 X17 X1 Condition_EQ *) + 0xa90f37ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&240))) *) + 0xa9103fee; (* arm_STP X14 X15 SP (Immediate_Offset (iword (&256))) *) + 0xa91147f0; (* arm_STP X16 X17 SP (Immediate_Offset (iword (&272))) *) + 0xa9490be1; (* arm_LDP X1 X2 SP (Immediate_Offset (iword (&144))) *) + 0xa94a13e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&160))) *) + 0xa94b1be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&176))) *) + 0xd37ef420; (* arm_LSL X0 X1 2 *) + 0xa95223e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&288))) *) + 0xeb070000; (* arm_SUBS X0 X0 X7 *) + 0x93c1f841; (* arm_EXTR X1 X2 X1 62 *) + 0xfa080021; (* arm_SBCS X1 X1 X8 *) + 0xa95323e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&304))) *) + 0x93c2f862; (* arm_EXTR X2 X3 X2 62 *) + 0xfa070042; (* arm_SBCS X2 X2 X7 *) + 0x93c3f883; (* arm_EXTR X3 X4 X3 62 *) + 0xfa080063; (* arm_SBCS X3 X3 X8 *) + 0x93c4f8a4; (* arm_EXTR X4 X5 X4 62 *) + 0xa95423e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&320))) *) + 0xfa070084; (* arm_SBCS X4 X4 X7 *) + 0x93c5f8c5; (* arm_EXTR X5 X6 X5 62 *) + 0xfa0800a5; (* arm_SBCS X5 X5 X8 *) + 0xd37efcc6; (* arm_LSR X6 X6 62 *) + 0x9a1f00c6; (* arm_ADC X6 X6 XZR *) + 0xd3607cc7; (* arm_LSL X7 X6 32 *) + 0xeb0700c8; (* arm_SUBS X8 X6 X7 *) + 0xda1f00e7; (* arm_SBC X7 X7 XZR *) + 0xab080000; (* arm_ADDS X0 X0 X8 *) + 0xba070021; (* arm_ADCS X1 X1 X7 *) + 0xba060042; (* arm_ADCS X2 X2 X6 *) + 0xba1f0063; (* arm_ADCS X3 X3 XZR *) + 0xba1f0084; (* arm_ADCS X4 X4 XZR *) + 0xba1f00a5; (* arm_ADCS X5 X5 XZR *) + 0xda9f23e8; (* arm_CSETM X8 Condition_CC *) + 0xb2407fe9; (* arm_MOV X9 (rvalue (word 4294967295)) *) + 0x8a080129; (* arm_AND X9 X9 X8 *) + 0xab090000; (* arm_ADDS X0 X0 X9 *) + 0xca080129; (* arm_EOR X9 X9 X8 *) + 0xba090021; (* arm_ADCS X1 X1 X9 *) + 0x92800029; (* arm_MOVN X9 (word 1) 0 *) + 0x8a080129; (* arm_AND X9 X9 X8 *) + 0xba090042; (* arm_ADCS X2 X2 X9 *) + 0xba080063; (* arm_ADCS X3 X3 X8 *) + 0xba080084; (* arm_ADCS X4 X4 X8 *) + 0x9a0800a5; (* arm_ADC X5 X5 X8 *) + 0xa90006e0; (* arm_STP X0 X1 X23 (Immediate_Offset (iword (&0))) *) + 0xa9010ee2; (* arm_STP X2 X3 X23 (Immediate_Offset (iword (&16))) *) + 0xa90216e4; (* arm_STP X4 X5 X23 (Immediate_Offset (iword (&32))) *) + 0xa94c07e0; (* arm_LDP X0 X1 SP (Immediate_Offset (iword (&192))) *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0xeb0000c6; (* arm_SUBS X6 X6 X0 *) + 0xb2607fe7; (* arm_MOV X7 (rvalue (word 18446744069414584320)) *) + 0xfa0100e7; (* arm_SBCS X7 X7 X1 *) + 0xa94d07e0; (* arm_LDP X0 X1 SP (Immediate_Offset (iword (&208))) *) + 0x92800028; (* arm_MOVN X8 (word 1) 0 *) + 0xfa000108; (* arm_SBCS X8 X8 X0 *) + 0x9280000d; (* arm_MOVN X13 (word 0) 0 *) + 0xfa0101a9; (* arm_SBCS X9 X13 X1 *) + 0xa94e07e0; (* arm_LDP X0 X1 SP (Immediate_Offset (iword (&224))) *) + 0xfa0001aa; (* arm_SBCS X10 X13 X0 *) + 0xda0101ab; (* arm_SBC X11 X13 X1 *) + 0xd37df0c0; (* arm_LSL X0 X6 3 *) + 0x93c6f4e1; (* arm_EXTR X1 X7 X6 61 *) + 0x93c7f502; (* arm_EXTR X2 X8 X7 61 *) + 0x93c8f523; (* arm_EXTR X3 X9 X8 61 *) + 0x93c9f544; (* arm_EXTR X4 X10 X9 61 *) + 0x93caf565; (* arm_EXTR X5 X11 X10 61 *) + 0xd37dfd66; (* arm_LSR X6 X11 61 *) + 0x910004c6; (* arm_ADD X6 X6 (rvalue (word 1)) *) + 0xa94f27e8; (* arm_LDP X8 X9 SP (Immediate_Offset (iword (&240))) *) + 0xa9502fea; (* arm_LDP X10 X11 SP (Immediate_Offset (iword (&256))) *) + 0xa95137ec; (* arm_LDP X12 X13 SP (Immediate_Offset (iword (&272))) *) + 0xd280006e; (* arm_MOV X14 (rvalue (word 3)) *) + 0x9b087dcf; (* arm_MUL X15 X14 X8 *) + 0x9bc87dc8; (* arm_UMULH X8 X14 X8 *) + 0xab0f0000; (* arm_ADDS X0 X0 X15 *) + 0x9b097dcf; (* arm_MUL X15 X14 X9 *) + 0x9bc97dc9; (* arm_UMULH X9 X14 X9 *) + 0xba0f0021; (* arm_ADCS X1 X1 X15 *) + 0x9b0a7dcf; (* arm_MUL X15 X14 X10 *) + 0x9bca7dca; (* arm_UMULH X10 X14 X10 *) + 0xba0f0042; (* arm_ADCS X2 X2 X15 *) + 0x9b0b7dcf; (* arm_MUL X15 X14 X11 *) + 0x9bcb7dcb; (* arm_UMULH X11 X14 X11 *) + 0xba0f0063; (* arm_ADCS X3 X3 X15 *) + 0x9b0c7dcf; (* arm_MUL X15 X14 X12 *) + 0x9bcc7dcc; (* arm_UMULH X12 X14 X12 *) + 0xba0f0084; (* arm_ADCS X4 X4 X15 *) + 0x9b0d7dcf; (* arm_MUL X15 X14 X13 *) + 0x9bcd7dcd; (* arm_UMULH X13 X14 X13 *) + 0xba0f00a5; (* arm_ADCS X5 X5 X15 *) + 0x9a1f00c6; (* arm_ADC X6 X6 XZR *) + 0xab080021; (* arm_ADDS X1 X1 X8 *) + 0xba090042; (* arm_ADCS X2 X2 X9 *) + 0xba0a0063; (* arm_ADCS X3 X3 X10 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0xba0c00a5; (* arm_ADCS X5 X5 X12 *) + 0xba0d00c6; (* arm_ADCS X6 X6 X13 *) + 0xd3607cc7; (* arm_LSL X7 X6 32 *) + 0xeb0700c8; (* arm_SUBS X8 X6 X7 *) + 0xda1f00e7; (* arm_SBC X7 X7 XZR *) + 0xab080000; (* arm_ADDS X0 X0 X8 *) + 0xba070021; (* arm_ADCS X1 X1 X7 *) + 0xba060042; (* arm_ADCS X2 X2 X6 *) + 0xba1f0063; (* arm_ADCS X3 X3 XZR *) + 0xba1f0084; (* arm_ADCS X4 X4 XZR *) + 0xba1f00a5; (* arm_ADCS X5 X5 XZR *) + 0xda9f23e6; (* arm_CSETM X6 Condition_CC *) + 0xb2407fe7; (* arm_MOV X7 (rvalue (word 4294967295)) *) + 0x8a0600e7; (* arm_AND X7 X7 X6 *) + 0xab070000; (* arm_ADDS X0 X0 X7 *) + 0xca0600e7; (* arm_EOR X7 X7 X6 *) + 0xba070021; (* arm_ADCS X1 X1 X7 *) + 0x92800027; (* arm_MOVN X7 (word 1) 0 *) + 0x8a0600e7; (* arm_AND X7 X7 X6 *) + 0xba070042; (* arm_ADCS X2 X2 X7 *) + 0xba060063; (* arm_ADCS X3 X3 X6 *) + 0xba060084; (* arm_ADCS X4 X4 X6 *) + 0x9a0600a5; (* arm_ADC X5 X5 X6 *) + 0xa90306e0; (* arm_STP X0 X1 X23 (Immediate_Offset (iword (&48))) *) + 0xa9040ee2; (* arm_STP X2 X3 X23 (Immediate_Offset (iword (&64))) *) + 0xa90516e4; (* arm_STP X4 X5 X23 (Immediate_Offset (iword (&80))) *) + 0x910543ff; (* arm_ADD SP SP (rvalue (word 336)) *) + 0xa8c163f7; (* arm_LDP X23 X24 SP (Postimmediate_Offset (iword (&16))) *) + 0xa8c15bf5; (* arm_LDP X21 X22 SP (Postimmediate_Offset (iword (&16))) *) + 0xa8c153f3; (* arm_LDP X19 X20 SP (Postimmediate_Offset (iword (&16))) *) + 0xd65f03c0 (* arm_RET X30 *) +];; + +let P384_MONTJDOUBLE_EXEC = ARM_MK_EXEC_RULE p384_montjdouble_mc;; + +(* ------------------------------------------------------------------------- *) +(* Common supporting definitions and lemmas for component proofs. *) +(* ------------------------------------------------------------------------- *) + +let p_384 = new_definition `p_384 = 39402006196394479212279040100143613805079739270465446667948293404245721771496870329047266088258938001861606973112319`;; + +let nistp384 = define + `nistp384 = + (integer_mod_ring p_384, + ring_neg (integer_mod_ring p_384) (&3), + &b_384:int)`;; + +let nistp384_encode = new_definition + `nistp384_encode = montgomery_encode(384,p_384)`;; + +let p384shortishredlemma = prove + (`!n. n <= 24 * (p_384 - 1) + ==> let q = n DIV 2 EXP 384 + 1 in + q < 25 /\ + q < 2 EXP 64 /\ + q * p_384 <= n + p_384 /\ + n < q * p_384 + p_384`, + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN REWRITE_TAC[p_384] THEN ARITH_TAC);; + +let FORALL_INT_CASES' = prove + (`!P. (!x:int. P x) <=> (!n. P(&n)) /\ (!n. ~(n = 0) ==> P(-- &n))`, + GEN_TAC THEN GEN_REWRITE_TAC LAND_CONV [FORALL_INT_CASES] THEN + MESON_TAC[INT_NEG_EQ_0; INT_OF_NUM_EQ]);; + +let p384shortintredlemma = prove + (`!n. --(&p_384) <= n /\ n <= &5 * &p_384 + ==> let q = (&2 pow 384 + n) div &2 pow 384 in + &0 <= q /\ q < &25 /\ + q < &2 pow 64 /\ + q * &p_384 <= n + &p_384 /\ + n < q * &p_384 + &p_384`, + ONCE_REWRITE_TAC[INT_ARITH `&2 pow 384 + n:int = &1 * &2 pow 384 + n`] THEN + SIMP_TAC[INT_DIV_MUL_ADD; INT_POW_EQ_0; INT_OF_NUM_EQ; ARITH_EQ] THEN + REWRITE_TAC[FORALL_INT_CASES'; INT_DIV_LNEG] THEN + CONV_TAC(ONCE_DEPTH_CONV let_CONV) THEN + REWRITE_TAC[INT_OF_NUM_CLAUSES; INT_OF_NUM_DIV; INT_OF_NUM_REM] THEN + CONJ_TAC THENL [REWRITE_TAC[p_384] THEN ARITH_TAC; ALL_TAC] THEN + X_GEN_TAC `n:num` THEN DISCH_TAC THEN + REWRITE_TAC[INT_LE_NEG2; INT_OF_NUM_CLAUSES] THEN + DISCH_THEN(ASSUME_TAC o CONJUNCT1) THEN + SUBGOAL_THEN `n < 2 EXP 384` ASSUME_TAC THENL + [UNDISCH_TAC `n <= p_384` THEN REWRITE_TAC[p_384] THEN ARITH_TAC; + ASM_SIMP_TAC[DIV_LT; MOD_LT]] THEN + UNDISCH_TAC `n <= p_384` THEN + REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES] THEN CONV_TAC INT_REDUCE_CONV THEN + REWRITE_TAC[p_384] THEN INT_ARITH_TAC);; + +let swlemma = WORD_RULE + `word_add (word_shl x 32) x:int64 = word(4294967297 * val x)`;; + +let mmlemma = prove + (`!h (l:int64) (x:int64). + &2 pow 64 * &h + &(val(l:int64)):real = + &18446744069414584321 * + &(val(word_add (word_shl x 32) x:int64)) + ==> &2 pow 64 * &h + &(val(x:int64)):real = + &18446744069414584321 * + &(val(word_add (word_shl x 32) x:int64))`, + REPEAT GEN_TAC THEN REWRITE_TAC[REAL_OF_NUM_CLAUSES] THEN + REPEAT STRIP_TAC THEN FIRST_ASSUM(SUBST1_TAC o SYM) THEN + AP_TERM_TAC THEN AP_TERM_TAC THEN + REWRITE_TAC[GSYM VAL_CONG; DIMINDEX_64] THEN FIRST_X_ASSUM(MATCH_MP_TAC o + MATCH_MP (NUMBER_RULE + `p * h + l:num = y ==> (y == x) (mod p) ==> (x == l) (mod p)`)) THEN + REWRITE_TAC[WORD_RULE + `word_add (word_shl x 32) x:int64 = word(4294967297 * val x)`] THEN + REWRITE_TAC[CONG; VAL_WORD; DIMINDEX_64] THEN CONV_TAC MOD_DOWN_CONV THEN + REWRITE_TAC[GSYM CONG] THEN MATCH_MP_TAC(NUMBER_RULE + `(a * b == 1) (mod p) ==> (a * (b * x) == x) (mod p)`) THEN + REWRITE_TAC[CONG] THEN CONV_TAC NUM_REDUCE_CONV);; + +let nintlemma = prove + (`&(num_of_int(x rem &p_384)) = x rem &p_384`, + MATCH_MP_TAC INT_OF_NUM_OF_INT THEN MATCH_MP_TAC INT_REM_POS THEN + REWRITE_TAC[INT_OF_NUM_EQ; p_384] THEN CONV_TAC NUM_REDUCE_CONV);; + +let unilemma0 = prove + (`x = a MOD p_384 ==> x < p_384 /\ &x = &a rem &p_384`, + REWRITE_TAC[INT_OF_NUM_REM; p_384] THEN ARITH_TAC);; + +let unilemma1 = prove + (`&x = a rem &p_384 ==> x < p_384 /\ &x = a rem &p_384`, + SIMP_TAC[GSYM INT_OF_NUM_LT; INT_LT_REM_EQ; p_384] THEN INT_ARITH_TAC);; + +let unilemma2 = prove + (`X = num_of_int(x rem &p_384) ==> X < p_384 /\ &X = x rem &p_384`, + DISCH_THEN SUBST1_TAC THEN + REWRITE_TAC[GSYM INT_OF_NUM_LT; nintlemma; INT_LT_REM_EQ] THEN + REWRITE_TAC[INT_OF_NUM_LT; p_384] THEN CONV_TAC NUM_REDUCE_CONV);; + +let lemont = prove + (`(&i * x * y) rem &p_384 = (&i * x rem &p_384 * y rem &p_384) rem &p_384`, + CONV_TAC INT_REM_DOWN_CONV THEN REWRITE_TAC[]);; + +let pumont = prove + (`(&(inverse_mod p_384 (2 EXP 384)) * + (&2 pow 384 * x) rem &p_384 * (&2 pow 384 * y) rem &p_384) rem &p_384 = + (&2 pow 384 * x * y) rem &p_384`, + CONV_TAC INT_REM_DOWN_CONV THEN REWRITE_TAC[INT_REM_EQ] THEN + MATCH_MP_TAC(INTEGER_RULE + `(i * t:int == &1) (mod p) + ==> (i * (t * x) * (t * y) == t * x * y) (mod p)`) THEN + REWRITE_TAC[GSYM num_congruent; INT_OF_NUM_CLAUSES] THEN + REWRITE_TAC[INVERSE_MOD_LMUL_EQ; COPRIME_REXP; COPRIME_2; p_384] THEN + CONV_TAC NUM_REDUCE_CONV);; + +let silemma = prove + (`(&12 * (e * x) rem p - &9 * (e * y) rem p) rem p = + (e * (&12 * x - &9 * y)) rem p`, + CONV_TAC INT_REM_DOWN_CONV THEN + AP_THM_TAC THEN AP_TERM_TAC THEN INT_ARITH_TAC);; + +let lvs = + ["x_1",[`X24`; `0`]; + "y_1",[`X24`; `48`]; + "z_1",[`X24`; `96`]; + "x_3",[`X23`; `0`]; + "y_3",[`X23`; `48`]; + "z_3",[`X23`; `96`]; + "z2",[`SP`; `0`]; + "y2",[`SP`; `48`]; + "x2p",[`SP`; `96`]; + "xy2",[`SP`; `144`]; + "y4",[`SP`; `192`]; + "t2",[`SP`; `192`]; + "dx2",[`SP`; `240`]; + "t1",[`SP`; `240`]; + "d",[`SP`; `288`]; + "x4p",[`SP`; `288`]];; + +(* ------------------------------------------------------------------------- *) +(* Instances of montsqr. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_MONTSQR_P384_TAC = + ARM_MACRO_SIM_ABBREV_TAC p384_montjdouble_mc 215 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1. + !a. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) t = a + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0x2324) (word_add (read p3 t) (word n3),48) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p384_montjdouble_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X23 s = read X23 t /\ + read X24 s = read X24 t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) s = + a) + (\s. read PC s = pcout /\ + (a EXP 2 <= 2 EXP 384 * p_384 + ==> read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 6)) s = + (inverse_mod p_384 (2 EXP 384) * a EXP 2) MOD p_384)) + (MAYCHANGE [PC; X2; X3; X4; X5; X6; X7; X8; X9; X10; + X11; X12; X13; X14; X15; X16; X17; X19; X20] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 6)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + (*** Globalize the a EXP 2 <= 2 EXP 384 * p_384 assumption ***) + + ASM_CASES_TAC `a EXP 2 <= 2 EXP 384 * p_384` THENL + [ASM_REWRITE_TAC[]; ARM_SIM_TAC P384_MONTJDOUBLE_EXEC (1--215)] THEN + ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "x_" o lhand o concl) THEN + + (*** Main squaring block ***) + + ARM_ACCSTEPS_TAC P384_MONTJDOUBLE_EXEC (1--93) (1--93) THEN + + (*** Main Montgomery reduction block ***) + + ARM_ACCSTEPS_TAC P384_MONTJDOUBLE_EXEC + (allpairs (fun i j -> 16 * i + j) (0--5) + [97;99;101;102;104;105;106;107;108;109] @ + (190--196)) + (94--196) THEN + RULE_ASSUM_TAC(REWRITE_RULE[ADD_CLAUSES; COND_SWAP; GSYM WORD_BITVAL]) THEN + RULE_ASSUM_TAC(fun th -> try MATCH_MP mmlemma th with Failure _ -> th) THEN + + (*** Key properties of pre-reduced result ***) + + ABBREV_TAC + `t = bignum_of_wordlist + [sum_s190; sum_s191; sum_s192; sum_s193; sum_s194; sum_s195; + word(bitval carry_s195)]` THEN + SUBGOAL_THEN + `t < 2 * p_384 /\ (2 EXP 384 * t == a EXP 2) (mod p_384)` + STRIP_ASSUME_TAC THENL + [RULE_ASSUM_TAC(REWRITE_RULE[VAL_WORD_BITVAL]) THEN + ACCUMULATOR_POP_ASSUM_LIST + (STRIP_ASSUME_TAC o end_itlist CONJ o DECARRY_RULE) THEN + CONJ_TAC THENL + [FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP (ARITH_RULE + `ab <= 2 EXP 384 * p + ==> 2 EXP 384 * t < ab + 2 EXP 384 * p ==> t < 2 * p`)) THEN + MAP_EVERY EXPAND_TAC ["a"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + REWRITE_TAC[p_384; REAL_ARITH `a:real < b + c <=> a - b < c`] THEN + ASM_REWRITE_TAC[VAL_WORD_BITVAL] THEN BOUNDER_TAC[]; + REWRITE_TAC[REAL_CONGRUENCE; p_384] THEN CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["a"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ASM_REWRITE_TAC[VAL_WORD_BITVAL] THEN REAL_INTEGER_TAC]; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Final correction stage ***) + + ARM_ACCSTEPS_TAC P384_MONTJDOUBLE_EXEC + [198;200;202;203;204;205;206] (197--215) THEN + RULE_ASSUM_TAC(REWRITE_RULE + [GSYM WORD_BITVAL; COND_SWAP; REAL_BITVAL_NOT]) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + TRANS_TAC EQ_TRANS `t MOD p_384` THEN CONJ_TAC THENL + [ALL_TAC; + REWRITE_TAC[GSYM CONG] THEN FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP + (NUMBER_RULE + `(e * t == a EXP 2) (mod p) + ==> (e * i == 1) (mod p) ==> (t == i * a EXP 2) (mod p)`)) THEN + REWRITE_TAC[INVERSE_MOD_RMUL_EQ; COPRIME_REXP; COPRIME_2] THEN + REWRITE_TAC[p_384] THEN CONV_TAC NUM_REDUCE_CONV] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC EQUAL_FROM_CONGRUENT_MOD_MOD THEN + MAP_EVERY EXISTS_TAC + [`384`; `if t < p_384 then &t:real else &t - &p_384`] THEN + REPEAT CONJ_TAC THENL + [REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN BOUNDER_TAC[]; + REWRITE_TAC[p_384] THEN ARITH_TAC; + REWRITE_TAC[p_384] THEN ARITH_TAC; + ALL_TAC; + ASM_SIMP_TAC[MOD_CASES] THEN + GEN_REWRITE_TAC LAND_CONV [COND_RAND] THEN + SIMP_TAC[REAL_OF_NUM_SUB; GSYM NOT_LT]] THEN + SUBGOAL_THEN + `val(word_add (word(bitval carry_s195)) + (word(bitval carry_s205)):int64) = 0 <=> + t < p_384` + SUBST_ALL_TAC THENL + [REWRITE_TAC[VAL_WORD_ADD_CASES; VAL_WORD_BITVAL; DIMINDEX_64] THEN + SIMP_TAC[ADD_EQ_0; BITVAL_EQ_0; BITVAL_BOUND; ARITH_RULE + `a <= 1 /\ b <= 1 ==> a + b < 2 EXP 64`] THEN + EXPAND_TAC "t" THEN REWRITE_TAC[bignum_of_wordlist; VAL_WORD_BITVAL] THEN + ASM_CASES_TAC `carry_s195:bool` THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THENL + [REWRITE_TAC[p_384] THEN ARITH_TAC; ALL_TAC] THEN + REWRITE_TAC[ADD_CLAUSES; MULT_CLAUSES; GSYM NOT_LE] THEN AP_TERM_TAC THEN + MATCH_MP_TAC FLAG_FROM_CARRY_LE THEN EXISTS_TAC `384` THEN + REWRITE_TAC[bignum_of_wordlist; MULT_CLAUSES; ADD_CLAUSES] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; p_384] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ALL_TAC] THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[] THEN EXPAND_TAC "t" THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist; p_384] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + ASM_REWRITE_TAC[BITVAL_CLAUSES; VAL_WORD_BITVAL] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instances of montmul. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_MONTMUL_P384_TAC = + ARM_MACRO_SIM_ABBREV_TAC p384_montjdouble_mc 271 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1 p2 n2. + !a. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) t = a + ==> + !b. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 6)) t = b + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0x2324) (word_add (read p3 t) (word n3),48) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p384_montjdouble_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X23 s = read X23 t /\ + read X24 s = read X24 t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) s = + a /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 6)) s = + b) + (\s. read PC s = pcout /\ + (a * b <= 2 EXP 384 * p_384 + ==> read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 6)) s = + (inverse_mod p_384 (2 EXP 384) * a * b) MOD p_384)) + (MAYCHANGE [PC; X1; X2; X3; X4; X5; X6; X7; X8; X9; + X10; X11; X12; X13; X14; X15; X16; X17; X19; + X20; X21; X22] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 6)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + (*** Globalize the a * b <= 2 EXP 384 * p_384 assumption ***) + + ASM_CASES_TAC `a * b <= 2 EXP 384 * p_384` THENL + [ASM_REWRITE_TAC[]; ARM_SIM_TAC P384_MONTJDOUBLE_EXEC (1--271)] THEN + ENSURES_INIT_TAC "s0" THEN + + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "y_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "x_" o lhand o concl) THEN + + (*** Main multiplication block ***) + + ARM_ACCSTEPS_TAC P384_MONTJDOUBLE_EXEC (1--149) (1--149) THEN + + (*** Main Montgomery reduction block ***) + + ARM_ACCSTEPS_TAC P384_MONTJDOUBLE_EXEC + (allpairs (fun i j -> 16 * i + j) (0--5) + [153;155;157;158;160;161;162;163;164;165] @ + (246--252)) + (150--252) THEN + RULE_ASSUM_TAC(REWRITE_RULE[ADD_CLAUSES; COND_SWAP; GSYM WORD_BITVAL]) THEN + RULE_ASSUM_TAC(fun th -> try MATCH_MP mmlemma th with Failure _ -> th) THEN + + (*** Key properties of pre-reduced result ***) + + ABBREV_TAC + `t = bignum_of_wordlist + [sum_s246; sum_s247; sum_s248; sum_s249; sum_s250; sum_s251; + word(bitval carry_s251)]` THEN + SUBGOAL_THEN + `t < 2 * p_384 /\ (2 EXP 384 * t == a * b) (mod p_384)` + STRIP_ASSUME_TAC THENL + [RULE_ASSUM_TAC(REWRITE_RULE[VAL_WORD_BITVAL]) THEN + ACCUMULATOR_POP_ASSUM_LIST + (STRIP_ASSUME_TAC o end_itlist CONJ o DECARRY_RULE) THEN + CONJ_TAC THENL + [FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP (ARITH_RULE + `ab <= 2 EXP 384 * p + ==> 2 EXP 384 * t < ab + 2 EXP 384 * p ==> t < 2 * p`)) THEN + MAP_EVERY EXPAND_TAC ["a"; "b"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + REWRITE_TAC[p_384; REAL_ARITH `a:real < b + c <=> a - b < c`] THEN + ASM_REWRITE_TAC[VAL_WORD_BITVAL] THEN BOUNDER_TAC[]; + REWRITE_TAC[REAL_CONGRUENCE; p_384] THEN CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["a"; "b"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ASM_REWRITE_TAC[VAL_WORD_BITVAL] THEN REAL_INTEGER_TAC]; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Final correction stage ***) + + ARM_ACCSTEPS_TAC P384_MONTJDOUBLE_EXEC + [254;256;258;259;260;261;262] (253--271) THEN + RULE_ASSUM_TAC(REWRITE_RULE + [GSYM WORD_BITVAL; COND_SWAP; REAL_BITVAL_NOT]) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + TRANS_TAC EQ_TRANS `t MOD p_384` THEN CONJ_TAC THENL + [ALL_TAC; + REWRITE_TAC[GSYM CONG] THEN FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP + (NUMBER_RULE + `(e * t == a * b) (mod p) + ==> (e * i == 1) (mod p) ==> (t == i * a * b) (mod p)`)) THEN + REWRITE_TAC[INVERSE_MOD_RMUL_EQ; COPRIME_REXP; COPRIME_2] THEN + REWRITE_TAC[p_384] THEN CONV_TAC NUM_REDUCE_CONV] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC EQUAL_FROM_CONGRUENT_MOD_MOD THEN + MAP_EVERY EXISTS_TAC + [`384`; `if t < p_384 then &t:real else &t - &p_384`] THEN + REPEAT CONJ_TAC THENL + [REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN BOUNDER_TAC[]; + REWRITE_TAC[p_384] THEN ARITH_TAC; + REWRITE_TAC[p_384] THEN ARITH_TAC; + ALL_TAC; + ASM_SIMP_TAC[MOD_CASES] THEN + GEN_REWRITE_TAC LAND_CONV [COND_RAND] THEN + SIMP_TAC[REAL_OF_NUM_SUB; GSYM NOT_LT]] THEN + SUBGOAL_THEN + `val(word_add (word(bitval carry_s251)) + (word(bitval carry_s261)):int64) = 0 <=> + t < p_384` + SUBST_ALL_TAC THENL + [REWRITE_TAC[VAL_WORD_ADD_CASES; VAL_WORD_BITVAL; DIMINDEX_64] THEN + SIMP_TAC[ADD_EQ_0; BITVAL_EQ_0; BITVAL_BOUND; ARITH_RULE + `a <= 1 /\ b <= 1 ==> a + b < 2 EXP 64`] THEN + EXPAND_TAC "t" THEN REWRITE_TAC[bignum_of_wordlist; VAL_WORD_BITVAL] THEN + ASM_CASES_TAC `carry_s251:bool` THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THENL + [REWRITE_TAC[p_384] THEN ARITH_TAC; ALL_TAC] THEN + REWRITE_TAC[ADD_CLAUSES; MULT_CLAUSES; GSYM NOT_LE] THEN AP_TERM_TAC THEN + MATCH_MP_TAC FLAG_FROM_CARRY_LE THEN EXISTS_TAC `384` THEN + REWRITE_TAC[bignum_of_wordlist; MULT_CLAUSES; ADD_CLAUSES] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; p_384] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ALL_TAC] THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[] THEN EXPAND_TAC "t" THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist; p_384] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + ASM_REWRITE_TAC[BITVAL_CLAUSES; VAL_WORD_BITVAL] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instances of sub. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_SUB_P384_TAC = + ARM_MACRO_SIM_ABBREV_TAC p384_montjdouble_mc 27 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 6)) t = n + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0x2324) (word_add (read p3 t) (word n3),48) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p384_montjdouble_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X23 s = read X23 t /\ + read X24 s = read X24 t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 6)) s = + n) + (\s. read PC s = pcout /\ + (m < p_384 /\ n < p_384 + ==> &(read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 6)) s) = (&m - &n) rem &p_384)) + (MAYCHANGE [PC; X3; X4; X5; X6; X7; X8; X9; X10] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 6)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "m_" o lhand o concl) THEN + + ARM_ACCSTEPS_TAC P384_MONTJDOUBLE_EXEC (1--12) (1--12) THEN + + SUBGOAL_THEN `carry_s12 <=> m < n` SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN EXISTS_TAC `384` THEN + MAP_EVERY EXPAND_TAC ["m"; "n"] THEN REWRITE_TAC[GSYM REAL_OF_NUM_ADD] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_MUL; GSYM REAL_OF_NUM_POW] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ALL_TAC] THEN + + ARM_STEPS_TAC P384_MONTJDOUBLE_EXEC [13] THEN + RULE_ASSUM_TAC(REWRITE_RULE[WORD_UNMASK_64; NOT_LE]) THEN + + ARM_ACCSTEPS_TAC P384_MONTJDOUBLE_EXEC (14--27) (14--27) THEN + + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN STRIP_TAC THEN + CONV_TAC(LAND_CONV(RAND_CONV BIGNUM_EXPAND_CONV)) THEN + ASM_REWRITE_TAC[] THEN DISCARD_STATE_TAC "s27" THEN + + CONV_TAC SYM_CONV THEN MATCH_MP_TAC INT_REM_UNIQ THEN + EXISTS_TAC `--(&(bitval(m < n))):int` THEN REWRITE_TAC[INT_ABS_NUM] THEN + REWRITE_TAC[INT_ARITH `m - n:int = --b * p + z <=> z = b * p + m - n`] THEN + REWRITE_TAC[int_eq; int_le; int_lt] THEN + REWRITE_TAC[int_add_th; int_mul_th; int_of_num_th; int_sub_th] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_ADD; GSYM REAL_OF_NUM_MUL; + GSYM REAL_OF_NUM_POW] THEN + MATCH_MP_TAC(REAL_ARITH + `!t:real. p < t /\ + (&0 <= a /\ a < p) /\ + (&0 <= z /\ z < t) /\ + ((&0 <= z /\ z < t) /\ (&0 <= a /\ a < t) ==> z = a) + ==> z = a /\ &0 <= z /\ z < p`) THEN + EXISTS_TAC `(&2:real) pow 384` THEN + + CONJ_TAC THENL [REWRITE_TAC[p_384] THEN REAL_ARITH_TAC; ALL_TAC] THEN + CONJ_TAC THENL + [MAP_EVERY UNDISCH_TAC [`m < p_384`; `n < p_384`] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_LT] THEN + ASM_CASES_TAC `&m:real < &n` THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + POP_ASSUM MP_TAC THEN REWRITE_TAC[p_384] THEN REAL_ARITH_TAC; + ALL_TAC] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; STRIP_TAC] THEN + + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`384`; `&0:real`] THEN + ASM_REWRITE_TAC[] THEN + CONJ_TAC THENL [REAL_INTEGER_TAC; ALL_TAC] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + REWRITE_TAC[WORD_AND_MASK] THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC WORD_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["m"; "n"] THEN REWRITE_TAC[GSYM REAL_OF_NUM_ADD] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_MUL; GSYM REAL_OF_NUM_POW; p_384] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + CONV_TAC(RAND_CONV REAL_POLY_CONV) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instances of weakadd *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_WEAKADD_P384_TAC = + ARM_MACRO_SIM_ABBREV_TAC p384_montjdouble_mc 27 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 6)) t = n + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0x2324) (word_add (read p3 t) (word n3),48) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p384_montjdouble_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X23 s = read X23 t /\ + read X24 s = read X24 t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 6)) s = + n) + (\s. read PC s = pcout /\ + (m + n < 2 EXP 384 + p_384 + ==> read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 6)) s < 2 EXP 384 /\ + (&(read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 6)) s):int == &m + &n) (mod &p_384))) + (MAYCHANGE [PC; X3; X4; X5; X6; X7; X8; X9; X10] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 6)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "m_" o lhand o concl) THEN + + ARM_ACCSTEPS_TAC P384_MONTJDOUBLE_EXEC (1--12) (1--12) THEN + SUBGOAL_THEN `carry_s12 <=> 2 EXP 384 <= m + n` SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LE THEN EXISTS_TAC `384` THEN + MAP_EVERY EXPAND_TAC ["m"; "n"] THEN REWRITE_TAC[GSYM REAL_OF_NUM_ADD] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_MUL; GSYM REAL_OF_NUM_POW] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ALL_TAC] THEN + ARM_STEPS_TAC P384_MONTJDOUBLE_EXEC [13] THEN + RULE_ASSUM_TAC(REWRITE_RULE[WORD_UNMASK_64; NOT_LE]) THEN + ARM_ACCSTEPS_TAC P384_MONTJDOUBLE_EXEC (14--27) (14--27) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN STRIP_TAC THEN + MATCH_MP_TAC(MESON[] + `!x. (x < 2 EXP 384 /\ P x) /\ y = x ==> y < 2 EXP 384 /\ P y`) THEN + EXISTS_TAC `if m + n < 2 EXP 384 then m + n else (m + n) - p_384` THEN + REPEAT CONJ_TAC THENL + [UNDISCH_TAC `m + n < 2 EXP 384 + p_384` THEN + REWRITE_TAC[p_384] THEN ARITH_TAC; + COND_CASES_TAC THEN + ASM_REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES; INT_CONG_REFL] THEN + MATCH_MP_TAC(INTEGER_RULE `y - p:int = x ==> (x == y) (mod p)`) THEN + REWRITE_TAC[INT_OF_NUM_CLAUSES] THEN MATCH_MP_TAC INT_OF_NUM_SUB THEN + FIRST_X_ASSUM(MP_TAC o GEN_REWRITE_RULE I [NOT_LT]) THEN + REWRITE_TAC[p_384] THEN ARITH_TAC; + ALL_TAC] THEN + RULE_ASSUM_TAC(REWRITE_RULE[SYM(NUM_REDUCE_CONV `2 EXP 384`)]) THEN + ABBREV_TAC `b <=> 2 EXP 384 <= m + n` THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN + ASM_REWRITE_TAC[GSYM NOT_LE] THEN DISCARD_STATE_TAC "s27" THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; COND_SWAP] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`384`; `&0:real`] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN CONJ_TAC THENL + [REWRITE_TAC[REAL_OF_NUM_CLAUSES] THEN + UNDISCH_TAC `m + n < 2 EXP 384 + p_384` THEN + EXPAND_TAC "b" THEN ARITH_TAC; + REWRITE_TAC[INTEGER_CLOSED]] THEN + SUBGOAL_THEN + `&(if b then (m + n) - p_384 else m + n):real = + if b then (&m + &n) - &p_384 else &m + &n` + SUBST1_TAC THENL + [COND_CASES_TAC THEN ASM_REWRITE_TAC[REAL_OF_NUM_CLAUSES] THEN + MATCH_MP_TAC(GSYM REAL_OF_NUM_SUB) THEN + UNDISCH_TAC `b:bool` THEN EXPAND_TAC "b" THEN + REWRITE_TAC[p_384] THEN ARITH_TAC; + ALL_TAC] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC WORD_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["m"; "n"] THEN REWRITE_TAC[GSYM REAL_OF_NUM_ADD] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_MUL; GSYM REAL_OF_NUM_POW; p_384] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + CONV_TAC(RAND_CONV REAL_POLY_CONV) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instances of add. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_ADD_P384_TAC = + ARM_MACRO_SIM_ABBREV_TAC p384_montjdouble_mc 38 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 6)) t = n + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0x2324) (word_add (read p3 t) (word n3),48) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p384_montjdouble_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X23 s = read X23 t /\ + read X24 s = read X24 t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 6)) s = + n) + (\s. read PC s = pcout /\ + (m < p_384 /\ n < p_384 + ==> read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 6)) s = (m + n) MOD p_384)) + (MAYCHANGE [PC; X3; X4; X5; X6; X7; X8; X9; X10] ,, + MAYCHANGE [memory :> bytes(word_add (read p3 t) (word n3),8 * 6)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "m_" o lhand o concl) THEN + + ARM_ACCSTEPS_TAC P384_MONTJDOUBLE_EXEC (1--13) (1--13) THEN + + SUBGOAL_THEN + `2 EXP 384 * bitval carry_s12 + + bignum_of_wordlist [sum_s3; sum_s4; sum_s7; sum_s8; sum_s11; sum_s12] = + m + n` + ASSUME_TAC THENL + [REWRITE_TAC[bignum_of_wordlist; MULT_CLAUSES; ADD_CLAUSES] THEN + MAP_EVERY EXPAND_TAC ["m"; "n"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_EQ; GSYM REAL_OF_NUM_ADD; + GSYM REAL_OF_NUM_MUL; GSYM REAL_OF_NUM_POW] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_ARITH_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + ARM_ACCSTEPS_TAC P384_MONTJDOUBLE_EXEC (14--22) (14--22) THEN + RULE_ASSUM_TAC(REWRITE_RULE[REAL_BITVAL_NOT]) THEN + + SUBGOAL_THEN + `carry_s22 <=> + p_384 <= + bignum_of_wordlist [sum_s3; sum_s4; sum_s7; sum_s8; sum_s11; sum_s12]` + SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LE THEN EXISTS_TAC `384` THEN + REWRITE_TAC[bignum_of_wordlist; MULT_CLAUSES; ADD_CLAUSES] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_EQ; GSYM REAL_OF_NUM_ADD; p_384; + GSYM REAL_OF_NUM_MUL; GSYM REAL_OF_NUM_POW] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + ARM_STEPS_TAC P384_MONTJDOUBLE_EXEC [23;24] THEN + + FIRST_X_ASSUM(MP_TAC o + SPEC `word_neg(word(bitval(p_384 <= m + n))):int64` o + MATCH_MP (MESON[] `read X3 s = z ==> !a. z = a ==> read X3 s = a`)) THEN + ANTS_TAC THENL + [REWRITE_TAC[GSYM WORD_ADD; ADD_CLAUSES; VAL_WORD; DIMINDEX_64] THEN + SIMP_TAC[BITVAL_BOUND; MOD_LT; ADD_EQ_0; BITVAL_EQ_0; + ARITH_RULE `a <= 1 /\ b <= 1 ==> a + b < 2 EXP 64`] THEN + FIRST_X_ASSUM(fun th -> GEN_REWRITE_TAC (funpow 5 RAND_CONV) [SYM th]) THEN + BOOL_CASES_TAC `carry_s12:bool` THEN + REWRITE_TAC[BITVAL_CLAUSES; ADD_CLAUSES; COND_SWAP; MULT_CLAUSES; + ADD_CLAUSES; WORD_MASK] THEN + CONV_TAC WORD_REDUCE_CONV THEN + ONCE_REWRITE_TAC[COND_RAND] THEN CONV_TAC WORD_REDUCE_CONV THEN + REWRITE_TAC[p_384] THEN ARITH_TAC; + DISCH_TAC] THEN + + ARM_ACCSTEPS_TAC P384_MONTJDOUBLE_EXEC (25--38) (25--38) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN STRIP_TAC THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN + ASM_REWRITE_TAC[] THEN DISCARD_STATE_TAC "s38" THEN + + ASM_SIMP_TAC[MOD_CASES; ARITH_RULE `m < p /\ n < p ==> m + n < 2 * p`] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_EQ] THEN ONCE_REWRITE_TAC[COND_RAND] THEN + SIMP_TAC[GSYM REAL_OF_NUM_SUB; GSYM NOT_LT] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_ADD; GSYM REAL_OF_NUM_MUL; + GSYM REAL_OF_NUM_POW] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`384`; `&0:real`] THEN + ASM_REWRITE_TAC[] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN + CONJ_TAC THENL + [MAP_EVERY UNDISCH_TAC [`m < p_384`; `n < p_384`] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_LT; GSYM REAL_OF_NUM_ADD] THEN + REWRITE_TAC[p_384] THEN REAL_ARITH_TAC; + ALL_TAC] THEN + CONJ_TAC THENL [REAL_INTEGER_TAC; ALL_TAC] THEN + FIRST_X_ASSUM(SUBST1_TAC o MATCH_MP (MESON[REAL_OF_NUM_ADD; REAL_OF_NUM_EQ] + `a:num = m + n ==> &m + &n = &a`)) THEN + REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_ADD; GSYM REAL_OF_NUM_MUL; + GSYM REAL_OF_NUM_POW] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + REWRITE_TAC[WORD_AND_MASK] THEN REWRITE_TAC[GSYM NOT_LE; COND_SWAP] THEN + REWRITE_TAC[WORD_MASK] THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC WORD_REDUCE_CONV THEN + REWRITE_TAC[GSYM REAL_OF_NUM_MUL; GSYM REAL_OF_NUM_POW; p_384] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + CONV_TAC(RAND_CONV REAL_POLY_CONV) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instance (12,9) of cmsub (the only one used in this code). *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_CMSUBC9_P384_TAC = + ARM_MACRO_SIM_ABBREV_TAC p384_montjdouble_mc 86 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 6)) t = n + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0x2324) (word_add (read p3 t) (word n3),48) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p384_montjdouble_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X23 s = read X23 t /\ + read X24 s = read X24 t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 6)) s = + n) + (\s. read PC s = pcout /\ + (n <= p_384 + ==> &(read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 6)) s) = (&12 * &m - &9 * &n) rem &p_384)) + (MAYCHANGE [PC; X0; X1; X2; X3; X4; X5; X6; X7; X8; X9; + X10; X11; X12; X13; X14; X15] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 6)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + ASM_CASES_TAC `n <= p_384` THENL + [ASM_REWRITE_TAC[]; ARM_SIM_TAC P384_MONTJDOUBLE_EXEC (1--86)] THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "m_" o lhand o concl) THEN + + SUBGOAL_THEN + `(&12 * &m - &9 * &n) rem &p_384 = + (&12 * &m + &9 * (&p_384 - &n)) rem &p_384` + SUBST1_TAC THENL + [REWRITE_TAC[INT_REM_EQ] THEN CONV_TAC INTEGER_RULE; + ASM_SIMP_TAC[INT_OF_NUM_CLAUSES; INT_OF_NUM_SUB; INT_OF_NUM_REM]] THEN + + (*** Initial negation of n ***) + + ARM_ACCSTEPS_TAC P384_MONTJDOUBLE_EXEC (1--13) (1--13) THEN + ABBREV_TAC + `n' = bignum_of_wordlist + [sum_s3; sum_s5; sum_s8; sum_s10; sum_s12; sum_s13]` THEN + SUBGOAL_THEN `p_384 - n = n'` SUBST1_TAC THENL + [ASM_SIMP_TAC[GSYM REAL_OF_NUM_CLAUSES; GSYM REAL_OF_NUM_SUB] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`384`; `&0:real`] THEN CONJ_TAC THENL + [UNDISCH_TAC `n <= p_384` THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; p_384] THEN REAL_ARITH_TAC; + MAP_EVERY EXPAND_TAC ["n"; "n'"] THEN + REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES]] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; REWRITE_TAC[INTEGER_CLOSED]] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th; p_384]) THEN REAL_INTEGER_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Instantiate the quotient approximation lemma ***) + + MP_TAC(SPEC `12 * m + 9 * n'` p384shortishredlemma) THEN ANTS_TAC THENL + [MAP_EVERY EXPAND_TAC ["m"; "n'"] THEN REWRITE_TAC[p_384] THEN + CONV_TAC NUM_REDUCE_CONV THEN BOUNDER_TAC[]; + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN STRIP_TAC] THEN + RULE_ASSUM_TAC(REWRITE_RULE[ARITH_RULE + `x DIV 2 EXP 384 + 1 = (2 EXP 384 + x) DIV 2 EXP 384`]) THEN + + (*** Main sum of products computation +1 ***) + + ARM_ACCSTEPS_TAC P384_MONTJDOUBLE_EXEC (14--62) (14--62) THEN + ABBREV_TAC `ca = bignum_of_wordlist + [sum_s40; sum_s57; sum_s58; sum_s59; sum_s60; sum_s61; sum_s62]` THEN + SUBGOAL_THEN `2 EXP 384 + 12 * m + 9 * n'= ca` MP_TAC THENL + [MAP_EVERY EXPAND_TAC ["m"; "n'"; "ca"] THEN + REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_ARITH_TAC; + DISCH_THEN(fun th -> POP_ASSUM MP_TAC THEN + SUBST_ALL_TAC th THEN ASSUME_TAC th THEN DISCH_TAC) THEN + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Quotient estimate is just the top word after the +1 ***) + + ABBREV_TAC `q:int64 = sum_s62` THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o + check (free_in `sum_s46:int64` o concl))) THEN + SUBGOAL_THEN `ca DIV 2 EXP 384 = val(q:int64)` SUBST_ALL_TAC THENL + [EXPAND_TAC "ca" THEN CONV_TAC(LAND_CONV BIGNUM_OF_WORDLIST_DIV_CONV) THEN + REFL_TAC; + ALL_TAC] THEN + + (*** The rest of the computation ***) + + ARM_ACCSTEPS_TAC P384_MONTJDOUBLE_EXEC + [64;65;66;67;68;69;70;71; 75;77;80;81;82;83] + (63--86) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC MOD_UNIQ_BALANCED_REAL THEN + MAP_EVERY EXISTS_TAC [`val(q:int64)`; `384`] THEN ASM_REWRITE_TAC[] THEN + CONJ_TAC THENL [REWRITE_TAC[p_384] THEN ARITH_TAC; ALL_TAC] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN + + (*** Explicitly observe that the small quotient mul works ***) + + SUBGOAL_THEN `&(val (word_shl q 32)):real = &2 pow 32 * &(val(q:int64))` + SUBST_ALL_TAC THENL + [REWRITE_TAC[REAL_OF_NUM_CLAUSES; VAL_WORD_SHL; DIMINDEX_64] THEN + MATCH_MP_TAC MOD_LT THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN ASM BOUNDER_TAC[]; + ALL_TAC] THEN + + (*** Comparison computation and then the rest is easy ***) + + SUBGOAL_THEN `12 * m + 9 * n' < val(q:int64) * p_384 <=> ~carry_s71` + SUBST1_TAC THENL + [ONCE_REWRITE_TAC[ARITH_RULE `a < b <=> 2 EXP 384 + a < b + 2 EXP 384`] THEN + ASM_REWRITE_TAC[] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN + EXISTS_TAC `384` THEN EXPAND_TAC "ca" THEN + REWRITE_TAC[p_384; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + REWRITE_TAC[REAL_BITVAL_NOT] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ONCE_REWRITE_TAC[REAL_ARITH + `&(12 * m + 9 * n'):real = + (&2 pow 384 + &(12 * m + 9 * n')) - &2 pow 384`] THEN + ASM_REWRITE_TAC[REAL_OF_NUM_CLAUSES] THEN EXPAND_TAC "ca" THEN + REWRITE_TAC[REAL_BITVAL_NOT] THEN + REWRITE_TAC[p_384; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + RULE_ASSUM_TAC(REWRITE_RULE[WORD_UNMASK_64]) THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + REWRITE_TAC[WORD_AND_MASK; WORD_XOR_MASK] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + ASM_CASES_TAC `carry_s71:bool` THEN + ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN CONV_TAC WORD_REDUCE_CONV THEN + CONV_TAC(RAND_CONV REAL_POLY_CONV) THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o + filter (is_ratconst o rand o concl) o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC]);; + +(* ------------------------------------------------------------------------- *) +(* Instance of cmsub41_p384 (actually there is only one). *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_CMSUB41_P384_TAC = + ARM_MACRO_SIM_ABBREV_TAC p384_montjdouble_mc 44 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 6)) t = n + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0x2324) (word_add (read p3 t) (word n3),48) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p384_montjdouble_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X23 s = read X23 t /\ + read X24 s = read X24 t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 6)) s = + n) + (\s. read PC s = pcout /\ + (n <= p_384 + ==> &(read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 6)) s) = (&4 * &m - &n) rem &p_384)) + (MAYCHANGE [PC; X0; X1; X2; X3; X4; X5; X6; X7; X8; X9] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 6)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + (*** Globalize the n <= p_384 assumption ***) + + ASM_CASES_TAC `n <= p_384` THENL + [ASM_REWRITE_TAC[]; ARM_SIM_TAC P384_MONTJDOUBLE_EXEC (1--44)] THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "m_" o lhand o concl) THEN + + (*** Instantiate the (integer) quotient approximation lemma ***) + + MP_TAC(SPEC `&4 * &m - &n:int` p384shortintredlemma) THEN ANTS_TAC THENL + [CONJ_TAC THENL + [UNDISCH_TAC `n <= p_384` THEN REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES] THEN + INT_ARITH_TAC; + MAP_EVERY EXPAND_TAC ["m"; "n"] THEN REWRITE_TAC[p_384] THEN + CONV_TAC NUM_REDUCE_CONV THEN BOUNDER_TAC[]]; + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN STRIP_TAC] THEN + + (*** Main shift-subtract block ***) + + ARM_ACCSTEPS_TAC P384_MONTJDOUBLE_EXEC [6;8;11;13;16;18;20] (1--20) THEN + ABBREV_TAC `ca = bignum_of_wordlist + [sum_s6; sum_s8; sum_s11; sum_s13; sum_s16; sum_s18; sum_s20]` THEN + SUBGOAL_THEN `&2 pow 384 + &4 * &m - &n:int = &ca` + (fun th -> SUBST_ALL_TAC th THEN ASSUME_TAC th) + THENL + [REWRITE_TAC[int_eq; int_add_th; int_sub_th; int_pow_th; + int_mul_th; int_of_num_th] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`448`; `&0:real`] THEN + REPLICATE_TAC 2 + (CONJ_TAC THENL + [MAP_EVERY EXPAND_TAC ["m"; "n"; "ca"] THEN + REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + BOUNDER_TAC[]; + ALL_TAC]) THEN + REWRITE_TAC[INTEGER_CLOSED] THEN + SUBGOAL_THEN + `&4 * &m:real = + &(bignum_of_wordlist + [word_shl m_0 2; + word_subword ((word_join:int64->int64->int128) m_1 m_0) (62,64); + word_subword ((word_join:int64->int64->int128) m_2 m_1) (62,64); + word_subword ((word_join:int64->int64->int128) m_3 m_2) (62,64); + word_subword ((word_join:int64->int64->int128) m_4 m_3) (62,64); + word_subword ((word_join:int64->int64->int128) m_5 m_4) (62,64); + word_ushr m_5 62])` + SUBST1_TAC THENL + [EXPAND_TAC "m" THEN + REWRITE_TAC[bignum_of_wordlist; REAL_OF_NUM_CLAUSES] THEN + REWRITE_TAC[val_def; DIMINDEX_64; bignum_of_wordlist] THEN + REWRITE_TAC[ARITH_RULE `i < 64 <=> 0 <= i /\ i <= 63`] THEN + REWRITE_TAC[GSYM IN_NUMSEG; IN_GSPEC] THEN + REWRITE_TAC[BIT_WORD_SUBWORD; BIT_WORD_JOIN; BIT_WORD_USHR; + BIT_WORD_SHL; DIMINDEX_64; DIMINDEX_128] THEN + CONV_TAC NUM_REDUCE_CONV THEN + CONV_TAC(ONCE_DEPTH_CONV EXPAND_NSUM_CONV) THEN + CONV_TAC NUM_REDUCE_CONV THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC WORD_REDUCE_CONV THEN REWRITE_TAC[BITVAL_CLAUSES] THEN + ONCE_REWRITE_TAC[BIT_GUARD] THEN REWRITE_TAC[DIMINDEX_64] THEN + CONV_TAC NUM_REDUCE_CONV THEN REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC NUM_RING; + MAP_EVERY EXPAND_TAC ["n"; "ca"] THEN + REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + REWRITE_TAC[REAL_BITVAL_NOT] THEN REAL_INTEGER_TAC]; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Quotient estimate is just the top word after the +1 ***) + + ABBREV_TAC `q:int64 = sum_s20` THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o + check (free_in `sum_s20:int64` o concl))) THEN + SUBGOAL_THEN `&ca div &2 pow 384 = &(val(q:int64))` SUBST_ALL_TAC THENL + [REWRITE_TAC[INT_OF_NUM_CLAUSES; INT_OF_NUM_DIV] THEN + EXPAND_TAC "ca" THEN CONV_TAC(LAND_CONV BIGNUM_OF_WORDLIST_DIV_CONV) THEN + REFL_TAC; + ALL_TAC] THEN + + (*** The rest of the computation ***) + + ARM_ACCSTEPS_TAC P384_MONTJDOUBLE_EXEC + [22;23;24;25;26;27;28;29; 33;35;38;39;40;41] + (21--44) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(ONCE_DEPTH_CONV BIGNUM_LEXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + + CONV_TAC SYM_CONV THEN MATCH_MP_TAC INT_REM_UNIQ_BALANCED_MOD THEN + MAP_EVERY EXISTS_TAC [`&(val(q:int64)):int`; `384`] THEN + ASM_REWRITE_TAC[] THEN + REPEAT(CONJ_TAC THENL + [REWRITE_TAC[INT_OF_NUM_CLAUSES; p_384] THEN BOUNDER_TAC[]; ALL_TAC]) THEN + ONCE_REWRITE_TAC[INT_ARITH + `&4 * m - n:int = (&2 pow 384 + &4 * m - n) - &2 pow 384`] THEN + ASM_REWRITE_TAC[] THEN + + (*** Explicitly observe that the small quotient mul works ***) + + SUBGOAL_THEN `&(val (word_shl q 32)):real = &2 pow 32 * &(val(q:int64))` + SUBST_ALL_TAC THENL + [REWRITE_TAC[REAL_OF_NUM_CLAUSES; VAL_WORD_SHL; DIMINDEX_64] THEN + MATCH_MP_TAC MOD_LT THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN ASM BOUNDER_TAC[]; + ALL_TAC] THEN + + (*** Comparison computation and then the rest is easy ***) + + SUBGOAL_THEN + `(&ca - &2 pow 384):int < &(val(q:int64)) * &p_384 <=> ~carry_s29` + SUBST1_TAC THENL + [REWRITE_TAC[INT_LT_SUB_RADD; INT_OF_NUM_CLAUSES] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN + EXISTS_TAC `384` THEN EXPAND_TAC "ca" THEN + REWRITE_TAC[p_384; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + REWRITE_TAC[REAL_BITVAL_NOT] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + REWRITE_TAC[INTEGER_RULE + `(a:int == b + c - p) (mod p) <=> (a == b + c) (mod p)`] THEN + REWRITE_TAC[INT_OF_NUM_CLAUSES; GSYM num_congruent] THEN + REWRITE_TAC[REAL_CONGRUENCE; EXP_EQ_0; ARITH_EQ] THEN + EXPAND_TAC "ca" THEN REWRITE_TAC[REAL_BITVAL_NOT] THEN + REWRITE_TAC[p_384; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + RULE_ASSUM_TAC(REWRITE_RULE[WORD_UNMASK_64]) THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + REWRITE_TAC[WORD_AND_MASK; WORD_XOR_MASK] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + ASM_CASES_TAC `carry_s29:bool` THEN + ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN CONV_TAC WORD_REDUCE_CONV THEN + CONV_TAC(RAND_CONV REAL_POLY_CONV) THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o + filter (is_ratconst o rand o concl) o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC]);; + +(* ------------------------------------------------------------------------- *) +(* Instance of cmsub38 (there is only one). *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_CMSUB38_P384_TAC = + ARM_MACRO_SIM_ABBREV_TAC p384_montjdouble_mc 74 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 6)) t = n + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0x2324) (word_add (read p3 t) (word n3),48) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p384_montjdouble_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X23 s = read X23 t /\ + read X24 s = read X24 t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 6)) s = + n) + (\s. read PC s = pcout /\ + (n <= p_384 + ==> &(read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 6)) s) = (&3 * &m - &8 * &n) rem &p_384)) + (MAYCHANGE [PC; X0; X1; X2; X3; X4; X5; X6; X7; X8; X9; + X10; X11; X12; X13; X14; X15] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 6)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + ASM_CASES_TAC `n <= p_384` THENL + [ASM_REWRITE_TAC[]; ARM_SIM_TAC P384_MONTJDOUBLE_EXEC (1--74)] THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "m_" o lhand o concl) THEN + + SUBGOAL_THEN + `(&3 * &m - &8 * &n) rem &p_384 = + (&3 * &m + &8 * (&p_384 - &n)) rem &p_384` + SUBST1_TAC THENL + [REWRITE_TAC[INT_REM_EQ] THEN CONV_TAC INTEGER_RULE; + ASM_SIMP_TAC[INT_OF_NUM_CLAUSES; INT_OF_NUM_SUB; INT_OF_NUM_REM]] THEN + + (*** Initial negation of n ***) + + ARM_ACCSTEPS_TAC P384_MONTJDOUBLE_EXEC (1--13) (1--13) THEN + ABBREV_TAC + `n' = bignum_of_wordlist + [sum_s3; sum_s5; sum_s8; sum_s10; sum_s12; sum_s13]` THEN + SUBGOAL_THEN `p_384 - n = n'` SUBST1_TAC THENL + [ASM_SIMP_TAC[GSYM REAL_OF_NUM_CLAUSES; GSYM REAL_OF_NUM_SUB] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`384`; `&0:real`] THEN CONJ_TAC THENL + [UNDISCH_TAC `n <= p_384` THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; p_384] THEN REAL_ARITH_TAC; + MAP_EVERY EXPAND_TAC ["n"; "n'"] THEN + REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES]] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; REWRITE_TAC[INTEGER_CLOSED]] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th; p_384]) THEN REAL_INTEGER_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Instantiate the quotient approximation lemma ***) + + MP_TAC(SPEC `3 * m + 8 * n'` p384shortishredlemma) THEN ANTS_TAC THENL + [MAP_EVERY EXPAND_TAC ["m"; "n'"] THEN REWRITE_TAC[p_384] THEN + CONV_TAC NUM_REDUCE_CONV THEN BOUNDER_TAC[]; + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN STRIP_TAC] THEN + RULE_ASSUM_TAC(REWRITE_RULE[ARITH_RULE + `x DIV 2 EXP 384 + 1 = (2 EXP 384 + x) DIV 2 EXP 384`]) THEN + + (*** Main sum of products computation +1 ***) + + ARM_ACCSTEPS_TAC P384_MONTJDOUBLE_EXEC + [21; 26; 28; 29; 31; 32; 34; 35; 37; 38; + 40; 41; 43; 44; 45; 46; 47; 48; 49; 50] + (14--50) THEN + ABBREV_TAC `ca = bignum_of_wordlist + [sum_s28; sum_s45; sum_s46; sum_s47; sum_s48; sum_s49; sum_s50]` THEN + SUBGOAL_THEN `2 EXP 384 + 3 * m + 8 * n'= ca` MP_TAC THENL + [REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`448`; `&0:real`] THEN + REPLICATE_TAC 2 + (CONJ_TAC THENL + [MAP_EVERY EXPAND_TAC ["m"; "n'"; "ca"] THEN + REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + BOUNDER_TAC[]; + ALL_TAC]) THEN + REWRITE_TAC[INTEGER_CLOSED] THEN + SUBGOAL_THEN + `&8 * &n':real = + &(bignum_of_wordlist + [word_shl sum_s3 3; + word_subword ((word_join:int64->int64->int128) sum_s5 sum_s3) (61,64); + word_subword ((word_join:int64->int64->int128) sum_s8 sum_s5) (61,64); + word_subword ((word_join:int64->int64->int128) sum_s10 sum_s8) (61,64); + word_subword ((word_join:int64->int64->int128) sum_s12 sum_s10) (61,64); + word_subword ((word_join:int64->int64->int128) sum_s13 sum_s12) (61,64); + word_ushr sum_s13 61])` + SUBST1_TAC THENL + [EXPAND_TAC "n'" THEN + REWRITE_TAC[bignum_of_wordlist; REAL_OF_NUM_CLAUSES] THEN + REWRITE_TAC[val_def; DIMINDEX_64; bignum_of_wordlist] THEN + REWRITE_TAC[ARITH_RULE `i < 64 <=> 0 <= i /\ i <= 63`] THEN + REWRITE_TAC[GSYM IN_NUMSEG; IN_GSPEC] THEN + REWRITE_TAC[BIT_WORD_SUBWORD; BIT_WORD_JOIN; BIT_WORD_USHR; + BIT_WORD_SHL; DIMINDEX_64; DIMINDEX_128] THEN + CONV_TAC NUM_REDUCE_CONV THEN + CONV_TAC(ONCE_DEPTH_CONV EXPAND_NSUM_CONV) THEN + CONV_TAC NUM_REDUCE_CONV THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC WORD_REDUCE_CONV THEN REWRITE_TAC[BITVAL_CLAUSES] THEN + ONCE_REWRITE_TAC[BIT_GUARD] THEN REWRITE_TAC[DIMINDEX_64] THEN + CONV_TAC NUM_REDUCE_CONV THEN REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC NUM_RING; + MAP_EVERY EXPAND_TAC ["m"; "ca"] THEN + REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + REWRITE_TAC[REAL_BITVAL_NOT] THEN REAL_INTEGER_TAC]; + DISCH_THEN(fun th -> POP_ASSUM MP_TAC THEN + SUBST_ALL_TAC th THEN ASSUME_TAC th THEN DISCH_TAC) THEN + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Quotient estimate is just the top word after the +1 ***) + + ABBREV_TAC `q:int64 = sum_s50` THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o + check (free_in `sum_s50:int64` o concl))) THEN + SUBGOAL_THEN `ca DIV 2 EXP 384 = val(q:int64)` SUBST_ALL_TAC THENL + [EXPAND_TAC "ca" THEN CONV_TAC(LAND_CONV BIGNUM_OF_WORDLIST_DIV_CONV) THEN + REFL_TAC; + ALL_TAC] THEN + + (*** The rest of the computation ***) + + ARM_ACCSTEPS_TAC P384_MONTJDOUBLE_EXEC + [52; 53; 54; 55; 56; 57; 58; 59; 63; 65; 68; 69; 70; 71] + (51--74) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC MOD_UNIQ_BALANCED_REAL THEN + MAP_EVERY EXISTS_TAC [`val(q:int64)`; `384`] THEN ASM_REWRITE_TAC[] THEN + CONJ_TAC THENL [REWRITE_TAC[p_384] THEN ARITH_TAC; ALL_TAC] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN + + (*** Explicitly observe that the small quotient mul works ***) + + SUBGOAL_THEN `&(val (word_shl q 32)):real = &2 pow 32 * &(val(q:int64))` + SUBST_ALL_TAC THENL + [REWRITE_TAC[REAL_OF_NUM_CLAUSES; VAL_WORD_SHL; DIMINDEX_64] THEN + MATCH_MP_TAC MOD_LT THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN ASM BOUNDER_TAC[]; + ALL_TAC] THEN + + (*** Comparison computation and then the rest is easy ***) + + SUBGOAL_THEN `3 * m + 8 * n' < val(q:int64) * p_384 <=> ~carry_s59` + SUBST1_TAC THENL + [ONCE_REWRITE_TAC[ARITH_RULE `a < b <=> 2 EXP 384 + a < b + 2 EXP 384`] THEN + ASM_REWRITE_TAC[] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN + EXISTS_TAC `384` THEN EXPAND_TAC "ca" THEN + REWRITE_TAC[p_384; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + REWRITE_TAC[REAL_BITVAL_NOT] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ONCE_REWRITE_TAC[REAL_ARITH + `&(3 * m + 8 * n'):real = + (&2 pow 384 + &(3 * m + 8 * n')) - &2 pow 384`] THEN + ASM_REWRITE_TAC[REAL_OF_NUM_CLAUSES] THEN EXPAND_TAC "ca" THEN + REWRITE_TAC[REAL_BITVAL_NOT] THEN + REWRITE_TAC[p_384; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + RULE_ASSUM_TAC(REWRITE_RULE[WORD_UNMASK_64]) THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + REWRITE_TAC[WORD_AND_MASK; WORD_XOR_MASK] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + ASM_CASES_TAC `carry_s59:bool` THEN + ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN CONV_TAC WORD_REDUCE_CONV THEN + CONV_TAC(RAND_CONV REAL_POLY_CONV) THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o + filter (is_ratconst o rand o concl) o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC]);; + +(* ------------------------------------------------------------------------- *) +(* Overall point operation proof. *) +(* ------------------------------------------------------------------------- *) + +let P384_MONTJDOUBLE_CORRECT = time prove + (`!p3 p1 t1 pc stackpointer. + aligned 16 stackpointer /\ + ALLPAIRS nonoverlapping + [(p3,144); (stackpointer,336)] + [(word pc,0x2324); (p1,144)] /\ + nonoverlapping (p3,144) (stackpointer,336) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p384_montjdouble_mc /\ + read PC s = word(pc + 0x10) /\ + read SP s = stackpointer /\ + C_ARGUMENTS [p3; p1] s /\ + bignum_triple_from_memory (p1,6) s = t1) + (\s. read PC s = word (pc + 0x2310) /\ + (!x1 y1 z1. + ~(z1 = &0) /\ + t1 = tripled nistp384_encode (x1,y1,z1) + ==> bignum_triple_from_memory(p3,6) s = + tripled nistp384_encode + (jacobian_add nistp384 (x1,y1,z1) (x1,y1,z1)))) + (MAYCHANGE [PC; X0; X1; X2; X3; X4; X5; X6; X7; X8; X9; X10; + X11; X12; X13; X14; X15; X16; X17; X19; X20; + X21; X22; X23; X24] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,144); + memory :> bytes(stackpointer,336)])`, + REWRITE_TAC[FORALL_PAIR_THM] THEN + MAP_EVERY X_GEN_TAC + [`p3:int64`; `p1:int64`; `x1:num`; `y1:num`; `z1:num`; + `pc:num`; `stackpointer:int64`] THEN + REWRITE_TAC[ALLPAIRS; ALL; NONOVERLAPPING_CLAUSES] THEN STRIP_TAC THEN + REWRITE_TAC[C_ARGUMENTS; SOME_FLAGS; PAIR_EQ; bignum_triple_from_memory] THEN + CONV_TAC(ONCE_DEPTH_CONV NUM_MULT_CONV) THEN + CONV_TAC(ONCE_DEPTH_CONV NORMALIZE_RELATIVE_ADDRESS_CONV) THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + + LOCAL_MONTSQR_P384_TAC 2 ["z2";"z_1"] THEN + LOCAL_MONTSQR_P384_TAC 0 ["y2";"y_1"] THEN + LOCAL_WEAKADD_P384_TAC 0 ["t1";"x_1";"z2"] THEN + LOCAL_SUB_P384_TAC 0 ["t2";"x_1";"z2"] THEN + LOCAL_MONTMUL_P384_TAC 0 ["x2p";"t1";"t2"] THEN + LOCAL_ADD_P384_TAC 0 ["t1";"y_1";"z_1"] THEN + LOCAL_MONTSQR_P384_TAC 0 ["x4p";"x2p"] THEN + LOCAL_MONTMUL_P384_TAC 0 ["xy2";"x_1";"y2"] THEN + LOCAL_MONTSQR_P384_TAC 0 ["t2";"t1"] THEN + LOCAL_CMSUBC9_P384_TAC 0 ["d";"xy2";"x4p"] THEN + LOCAL_SUB_P384_TAC 0 ["t1";"t2";"z2"] THEN + LOCAL_MONTSQR_P384_TAC 0 ["y4";"y2"] THEN + LOCAL_SUB_P384_TAC 0 ["z_3";"t1";"y2"] THEN + LOCAL_MONTMUL_P384_TAC 0 ["dx2";"d";"x2p"] THEN + LOCAL_CMSUB41_P384_TAC 0 ["x_3";"xy2";"d"] THEN + LOCAL_CMSUB38_P384_TAC 0 ["y_3";"dx2";"y4"] THEN + + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + DISCARD_STATE_TAC "s18" THEN + DISCARD_MATCHING_ASSUMPTIONS [`nonoverlapping_modulo a b c`] THEN + + MAP_EVERY X_GEN_TAC [`x1':int`; `y1':int`; `z1':int`] THEN + DISCH_THEN(CONJUNCTS_THEN2 ASSUME_TAC MP_TAC) THEN + REWRITE_TAC[tripled; nistp384_encode; montgomery_encode; PAIR_EQ] THEN + + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN + (STRIP_ASSUME_TAC o MATCH_MP unilemma2)) THEN + + REPEAT(FIRST_X_ASSUM(MP_TAC o check (is_imp o concl))) THEN + REPEAT(ANTS_TAC THENL + [REWRITE_TAC[p_384] THEN RULE_ASSUM_TAC(REWRITE_RULE[p_384]) THEN + CONV_TAC NUM_REDUCE_CONV THEN ASM BOUNDER_TAC[]; + (DISCH_THEN(STRIP_ASSUME_TAC o MATCH_MP unilemma0) ORELSE + DISCH_THEN(STRIP_ASSUME_TAC o MATCH_MP unilemma1) ORELSE + STRIP_TAC)]) THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o GEN_REWRITE_RULE I [GSYM NOT_LE])) THEN + + RULE_ASSUM_TAC(REWRITE_RULE + [num_congruent; GSYM INT_OF_NUM_CLAUSES; GSYM INT_OF_NUM_REM]) THEN + RULE_ASSUM_TAC(REWRITE_RULE[GSYM INT_REM_EQ]) THEN + + RULE_ASSUM_TAC(ONCE_REWRITE_RULE[GSYM INT_SUB_REM; GSYM INT_ADD_REM]) THEN + RULE_ASSUM_TAC(REWRITE_RULE[INT_POW_2]) THEN + RULE_ASSUM_TAC(GEN_REWRITE_RULE (RAND_CONV o TRY_CONV) [lemont]) THEN + + ASM_REWRITE_TAC[jacobian_add; jacobian_eq; nistp384] THEN + ASM_REWRITE_TAC[GSYM nistp384] THEN + REWRITE_TAC[INTEGER_MOD_RING_CLAUSES] THEN + CONV_TAC INT_REDUCE_CONV THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN + CONV_TAC INT_REM_DOWN_CONV THEN + REWRITE_TAC[tripled; nistp384_encode; montgomery_encode] THEN + REWRITE_TAC[PAIR_EQ; GSYM INT_OF_NUM_EQ; nintlemma] THEN + CONV_TAC INT_REM_DOWN_CONV THEN + + ASM_REWRITE_TAC[pumont; INT_REM_REM; GSYM INT_ADD_LDISTRIB; + GSYM INT_ADD_LDISTRIB; GSYM INT_SUB_LDISTRIB; + INT_SUB_REM; INT_ADD_REM; silemma] THEN + + CONV_TAC INT_REM_DOWN_CONV THEN REPEAT CONJ_TAC THEN + AP_THM_TAC THEN AP_TERM_TAC THEN INT_ARITH_TAC);; + +let P384_MONTJDOUBLE_SUBROUTINE_CORRECT = time prove + (`!p3 p1 t1 pc stackpointer returnaddress. + aligned 16 stackpointer /\ + ALLPAIRS nonoverlapping + [(p3,144); (word_sub stackpointer (word 384),384)] + [(word pc,0x2324); (p1,144)] /\ + nonoverlapping (p3,144) (word_sub stackpointer (word 384),384) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p384_montjdouble_mc /\ + read PC s = word pc /\ + read SP s = stackpointer /\ + read X30 s = returnaddress /\ + C_ARGUMENTS [p3; p1] s /\ + bignum_triple_from_memory (p1,6) s = t1) + (\s. read PC s = returnaddress /\ + (!x1 y1 z1. + ~(z1 = &0) /\ + t1 = tripled nistp384_encode (x1,y1,z1) + ==> bignum_triple_from_memory(p3,6) s = + tripled nistp384_encode + (jacobian_add nistp384 (x1,y1,z1) (x1,y1,z1)))) + (MAYCHANGE [PC; X0; X1; X2; X3; X4; X5; X6; X7; X8; X9; X10; + X11; X12; X13; X14; X15; X16; X17] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,144); + memory :> bytes(word_sub stackpointer (word 384),384)])`, + ARM_ADD_RETURN_STACK_TAC P384_MONTJDOUBLE_EXEC + P384_MONTJDOUBLE_CORRECT + `[X19; X20; X21; X22; X23; X24]` 384);; diff --git a/arm/proofs/p384_montjmixadd.ml b/arm/proofs/p384_montjmixadd.ml new file mode 100644 index 0000000000..16cac3a965 --- /dev/null +++ b/arm/proofs/p384_montjmixadd.ml @@ -0,0 +1,3768 @@ +(* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + *) + +(* ========================================================================= *) +(* Mixed addition in Montgomery-Jacobian coordinates for NIST P-384 curve. *) +(* ========================================================================= *) + +needs "arm/proofs/base.ml";; +needs "common/ecencoding.ml";; +needs "EC/jacobian.ml";; +needs "EC/nistp384.ml";; + +prioritize_int();; +prioritize_real();; +prioritize_num();; + +(**** print_literal_from_elf "arm/p384/p384_montjmixadd.o";; + ****) + +let p384_montjmixadd_mc = define_assert_from_elf + "p384_montjmixadd_mc" "arm/p384/p384_montjmixadd.o" +[ + 0xa9bf53f3; (* arm_STP X19 X20 SP (Preimmediate_Offset (iword (-- &16))) *) + 0xa9bf5bf5; (* arm_STP X21 X22 SP (Preimmediate_Offset (iword (-- &16))) *) + 0xa9bf63f7; (* arm_STP X23 X24 SP (Preimmediate_Offset (iword (-- &16))) *) + 0xa9bf6bf9; (* arm_STP X25 X26 SP (Preimmediate_Offset (iword (-- &16))) *) + 0xd10483ff; (* arm_SUB SP SP (rvalue (word 288)) *) + 0xaa0003f8; (* arm_MOV X24 X0 *) + 0xaa0103f9; (* arm_MOV X25 X1 *) + 0xaa0203fa; (* arm_MOV X26 X2 *) + 0xa9460f22; (* arm_LDP X2 X3 X25 (Immediate_Offset (iword (&96))) *) + 0x9b037c49; (* arm_MUL X9 X2 X3 *) + 0x9bc37c4a; (* arm_UMULH X10 X2 X3 *) + 0xa9471724; (* arm_LDP X4 X5 X25 (Immediate_Offset (iword (&112))) *) + 0x9b047c48; (* arm_MUL X8 X2 X4 *) + 0xab08014a; (* arm_ADDS X10 X10 X8 *) + 0x9b057c4b; (* arm_MUL X11 X2 X5 *) + 0x9b047c68; (* arm_MUL X8 X3 X4 *) + 0xba08016b; (* arm_ADCS X11 X11 X8 *) + 0x9bc57c4c; (* arm_UMULH X12 X2 X5 *) + 0x9b057c68; (* arm_MUL X8 X3 X5 *) + 0xba08018c; (* arm_ADCS X12 X12 X8 *) + 0xa9481f26; (* arm_LDP X6 X7 X25 (Immediate_Offset (iword (&128))) *) + 0x9b077c4d; (* arm_MUL X13 X2 X7 *) + 0x9b067c68; (* arm_MUL X8 X3 X6 *) + 0xba0801ad; (* arm_ADCS X13 X13 X8 *) + 0x9bc77c4e; (* arm_UMULH X14 X2 X7 *) + 0x9b077c68; (* arm_MUL X8 X3 X7 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9b067caf; (* arm_MUL X15 X5 X6 *) + 0xba1f01ef; (* arm_ADCS X15 X15 XZR *) + 0x9bc67cb0; (* arm_UMULH X16 X5 X6 *) + 0x9a1f0210; (* arm_ADC X16 X16 XZR *) + 0x9bc47c48; (* arm_UMULH X8 X2 X4 *) + 0xab08016b; (* arm_ADDS X11 X11 X8 *) + 0x9bc47c68; (* arm_UMULH X8 X3 X4 *) + 0xba08018c; (* arm_ADCS X12 X12 X8 *) + 0x9bc57c68; (* arm_UMULH X8 X3 X5 *) + 0xba0801ad; (* arm_ADCS X13 X13 X8 *) + 0x9bc67c68; (* arm_UMULH X8 X3 X6 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9bc77c68; (* arm_UMULH X8 X3 X7 *) + 0xba0801ef; (* arm_ADCS X15 X15 X8 *) + 0x9a1f0210; (* arm_ADC X16 X16 XZR *) + 0x9b067c48; (* arm_MUL X8 X2 X6 *) + 0xab08018c; (* arm_ADDS X12 X12 X8 *) + 0x9b057c88; (* arm_MUL X8 X4 X5 *) + 0xba0801ad; (* arm_ADCS X13 X13 X8 *) + 0x9b067c88; (* arm_MUL X8 X4 X6 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9b077c88; (* arm_MUL X8 X4 X7 *) + 0xba0801ef; (* arm_ADCS X15 X15 X8 *) + 0x9b077ca8; (* arm_MUL X8 X5 X7 *) + 0xba080210; (* arm_ADCS X16 X16 X8 *) + 0x9b077cd1; (* arm_MUL X17 X6 X7 *) + 0xba1f0231; (* arm_ADCS X17 X17 XZR *) + 0x9bc77cd3; (* arm_UMULH X19 X6 X7 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0x9bc67c48; (* arm_UMULH X8 X2 X6 *) + 0xab0801ad; (* arm_ADDS X13 X13 X8 *) + 0x9bc57c88; (* arm_UMULH X8 X4 X5 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9bc67c88; (* arm_UMULH X8 X4 X6 *) + 0xba0801ef; (* arm_ADCS X15 X15 X8 *) + 0x9bc77c88; (* arm_UMULH X8 X4 X7 *) + 0xba080210; (* arm_ADCS X16 X16 X8 *) + 0x9bc77ca8; (* arm_UMULH X8 X5 X7 *) + 0xba080231; (* arm_ADCS X17 X17 X8 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0xab090129; (* arm_ADDS X9 X9 X9 *) + 0xba0a014a; (* arm_ADCS X10 X10 X10 *) + 0xba0b016b; (* arm_ADCS X11 X11 X11 *) + 0xba0c018c; (* arm_ADCS X12 X12 X12 *) + 0xba0d01ad; (* arm_ADCS X13 X13 X13 *) + 0xba0e01ce; (* arm_ADCS X14 X14 X14 *) + 0xba0f01ef; (* arm_ADCS X15 X15 X15 *) + 0xba100210; (* arm_ADCS X16 X16 X16 *) + 0xba110231; (* arm_ADCS X17 X17 X17 *) + 0xba130273; (* arm_ADCS X19 X19 X19 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc27c48; (* arm_UMULH X8 X2 X2 *) + 0x9b027c42; (* arm_MUL X2 X2 X2 *) + 0xab080129; (* arm_ADDS X9 X9 X8 *) + 0x9b037c68; (* arm_MUL X8 X3 X3 *) + 0xba08014a; (* arm_ADCS X10 X10 X8 *) + 0x9bc37c68; (* arm_UMULH X8 X3 X3 *) + 0xba08016b; (* arm_ADCS X11 X11 X8 *) + 0x9b047c88; (* arm_MUL X8 X4 X4 *) + 0xba08018c; (* arm_ADCS X12 X12 X8 *) + 0x9bc47c88; (* arm_UMULH X8 X4 X4 *) + 0xba0801ad; (* arm_ADCS X13 X13 X8 *) + 0x9b057ca8; (* arm_MUL X8 X5 X5 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9bc57ca8; (* arm_UMULH X8 X5 X5 *) + 0xba0801ef; (* arm_ADCS X15 X15 X8 *) + 0x9b067cc8; (* arm_MUL X8 X6 X6 *) + 0xba080210; (* arm_ADCS X16 X16 X8 *) + 0x9bc67cc8; (* arm_UMULH X8 X6 X6 *) + 0xba080231; (* arm_ADCS X17 X17 X8 *) + 0x9b077ce8; (* arm_MUL X8 X7 X7 *) + 0xba080273; (* arm_ADCS X19 X19 X8 *) + 0x9bc77ce8; (* arm_UMULH X8 X7 X7 *) + 0x9a080294; (* arm_ADC X20 X20 X8 *) + 0xd3607c45; (* arm_LSL X5 X2 32 *) + 0x8b0200a2; (* arm_ADD X2 X5 X2 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bc27ca5; (* arm_UMULH X5 X5 X2 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b027c83; (* arm_MUL X3 X4 X2 *) + 0x9bc27c84; (* arm_UMULH X4 X4 X2 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba020084; (* arm_ADCS X4 X4 X2 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb050129; (* arm_SUBS X9 X9 X5 *) + 0xfa04014a; (* arm_SBCS X10 X10 X4 *) + 0xfa03016b; (* arm_SBCS X11 X11 X3 *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xda1f0042; (* arm_SBC X2 X2 XZR *) + 0xd3607d25; (* arm_LSL X5 X9 32 *) + 0x8b0900a9; (* arm_ADD X9 X5 X9 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bc97ca5; (* arm_UMULH X5 X5 X9 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b097c83; (* arm_MUL X3 X4 X9 *) + 0x9bc97c84; (* arm_UMULH X4 X4 X9 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba090084; (* arm_ADCS X4 X4 X9 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb05014a; (* arm_SUBS X10 X10 X5 *) + 0xfa04016b; (* arm_SBCS X11 X11 X4 *) + 0xfa03018c; (* arm_SBCS X12 X12 X3 *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f0042; (* arm_SBCS X2 X2 XZR *) + 0xda1f0129; (* arm_SBC X9 X9 XZR *) + 0xd3607d45; (* arm_LSL X5 X10 32 *) + 0x8b0a00aa; (* arm_ADD X10 X5 X10 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bca7ca5; (* arm_UMULH X5 X5 X10 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b0a7c83; (* arm_MUL X3 X4 X10 *) + 0x9bca7c84; (* arm_UMULH X4 X4 X10 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba0a0084; (* arm_ADCS X4 X4 X10 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb05016b; (* arm_SUBS X11 X11 X5 *) + 0xfa04018c; (* arm_SBCS X12 X12 X4 *) + 0xfa0301ad; (* arm_SBCS X13 X13 X3 *) + 0xfa1f0042; (* arm_SBCS X2 X2 XZR *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xda1f014a; (* arm_SBC X10 X10 XZR *) + 0xd3607d65; (* arm_LSL X5 X11 32 *) + 0x8b0b00ab; (* arm_ADD X11 X5 X11 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bcb7ca5; (* arm_UMULH X5 X5 X11 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b0b7c83; (* arm_MUL X3 X4 X11 *) + 0x9bcb7c84; (* arm_UMULH X4 X4 X11 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb05018c; (* arm_SUBS X12 X12 X5 *) + 0xfa0401ad; (* arm_SBCS X13 X13 X4 *) + 0xfa030042; (* arm_SBCS X2 X2 X3 *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xda1f016b; (* arm_SBC X11 X11 XZR *) + 0xd3607d85; (* arm_LSL X5 X12 32 *) + 0x8b0c00ac; (* arm_ADD X12 X5 X12 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bcc7ca5; (* arm_UMULH X5 X5 X12 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b0c7c83; (* arm_MUL X3 X4 X12 *) + 0x9bcc7c84; (* arm_UMULH X4 X4 X12 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba0c0084; (* arm_ADCS X4 X4 X12 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb0501ad; (* arm_SUBS X13 X13 X5 *) + 0xfa040042; (* arm_SBCS X2 X2 X4 *) + 0xfa030129; (* arm_SBCS X9 X9 X3 *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xda1f018c; (* arm_SBC X12 X12 XZR *) + 0xd3607da5; (* arm_LSL X5 X13 32 *) + 0x8b0d00ad; (* arm_ADD X13 X5 X13 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bcd7ca5; (* arm_UMULH X5 X5 X13 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b0d7c83; (* arm_MUL X3 X4 X13 *) + 0x9bcd7c84; (* arm_UMULH X4 X4 X13 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba0d0084; (* arm_ADCS X4 X4 X13 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb050042; (* arm_SUBS X2 X2 X5 *) + 0xfa040129; (* arm_SBCS X9 X9 X4 *) + 0xfa03014a; (* arm_SBCS X10 X10 X3 *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda1f01ad; (* arm_SBC X13 X13 XZR *) + 0xab0e0042; (* arm_ADDS X2 X2 X14 *) + 0xba0f0129; (* arm_ADCS X9 X9 X15 *) + 0xba10014a; (* arm_ADCS X10 X10 X16 *) + 0xba11016b; (* arm_ADCS X11 X11 X17 *) + 0xba13018c; (* arm_ADCS X12 X12 X19 *) + 0xba1401ad; (* arm_ADCS X13 X13 X20 *) + 0xb26083ee; (* arm_MOV X14 (rvalue (word 18446744069414584321)) *) + 0xb2407fef; (* arm_MOV X15 (rvalue (word 4294967295)) *) + 0x9a9f21ce; (* arm_CSEL X14 X14 XZR Condition_CS *) + 0x9a9f21ef; (* arm_CSEL X15 X15 XZR Condition_CS *) + 0x9a9f37f0; (* arm_CSET X16 Condition_CS *) + 0xab0e0042; (* arm_ADDS X2 X2 X14 *) + 0xba0f0129; (* arm_ADCS X9 X9 X15 *) + 0xba10014a; (* arm_ADCS X10 X10 X16 *) + 0xba1f016b; (* arm_ADCS X11 X11 XZR *) + 0xba1f018c; (* arm_ADCS X12 X12 XZR *) + 0x9a1f01ad; (* arm_ADC X13 X13 XZR *) + 0xa90027e2; (* arm_STP X2 X9 SP (Immediate_Offset (iword (&0))) *) + 0xa9012fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&16))) *) + 0xa90237ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&32))) *) + 0xa9461323; (* arm_LDP X3 X4 X25 (Immediate_Offset (iword (&96))) *) + 0xa9431b45; (* arm_LDP X5 X6 X26 (Immediate_Offset (iword (&48))) *) + 0x9b057c6c; (* arm_MUL X12 X3 X5 *) + 0x9bc57c6d; (* arm_UMULH X13 X3 X5 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa9442347; (* arm_LDP X7 X8 X26 (Immediate_Offset (iword (&64))) *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0x9bc77c6f; (* arm_UMULH X15 X3 X7 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c70; (* arm_UMULH X16 X3 X8 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0xa9452b49; (* arm_LDP X9 X10 X26 (Immediate_Offset (iword (&80))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c71; (* arm_UMULH X17 X3 X9 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c73; (* arm_UMULH X19 X3 X10 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b0294; (* arm_ADC X20 X20 X11 *) + 0xa9471323; (* arm_LDP X3 X4 X25 (Immediate_Offset (iword (&112))) *) + 0x9b057c6b; (* arm_MUL X11 X3 X5 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9a9f37f5; (* arm_CSET X21 Condition_CS *) + 0x9bc57c6b; (* arm_UMULH X11 X3 X5 *) + 0xab0b01ef; (* arm_ADDS X15 X15 X11 *) + 0x9bc67c6b; (* arm_UMULH X11 X3 X6 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9bc77c6b; (* arm_UMULH X11 X3 X7 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc87c6b; (* arm_UMULH X11 X3 X8 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc97c6b; (* arm_UMULH X11 X3 X9 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bca7c6b; (* arm_UMULH X11 X3 X10 *) + 0x9a0b02b5; (* arm_ADC X21 X21 X11 *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b01ef; (* arm_ADDS X15 X15 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9a9f37f6; (* arm_CSET X22 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b0210; (* arm_ADDS X16 X16 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b02d6; (* arm_ADC X22 X22 X11 *) + 0xa9481323; (* arm_LDP X3 X4 X25 (Immediate_Offset (iword (&128))) *) + 0x9b057c6b; (* arm_MUL X11 X3 X5 *) + 0xab0b0210; (* arm_ADDS X16 X16 X11 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9a9f37e2; (* arm_CSET X2 Condition_CS *) + 0x9bc57c6b; (* arm_UMULH X11 X3 X5 *) + 0xab0b0231; (* arm_ADDS X17 X17 X11 *) + 0x9bc67c6b; (* arm_UMULH X11 X3 X6 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc77c6b; (* arm_UMULH X11 X3 X7 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc87c6b; (* arm_UMULH X11 X3 X8 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bc97c6b; (* arm_UMULH X11 X3 X9 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9bca7c6b; (* arm_UMULH X11 X3 X10 *) + 0x9a0b0042; (* arm_ADC X2 X2 X11 *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b0231; (* arm_ADDS X17 X17 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0042; (* arm_ADCS X2 X2 X11 *) + 0x9a9f37e1; (* arm_CSET X1 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b0273; (* arm_ADDS X19 X19 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0042; (* arm_ADCS X2 X2 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b0021; (* arm_ADC X1 X1 X11 *) + 0xd3607d87; (* arm_LSL X7 X12 32 *) + 0x8b0c00ec; (* arm_ADD X12 X7 X12 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcc7ce7; (* arm_UMULH X7 X7 X12 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0c7cc5; (* arm_MUL X5 X6 X12 *) + 0x9bcc7cc6; (* arm_UMULH X6 X6 X12 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0c00c6; (* arm_ADCS X6 X6 X12 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ad; (* arm_SUBS X13 X13 X7 *) + 0xfa0601ce; (* arm_SBCS X14 X14 X6 *) + 0xfa0501ef; (* arm_SBCS X15 X15 X5 *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xda1f018c; (* arm_SBC X12 X12 XZR *) + 0xd3607da7; (* arm_LSL X7 X13 32 *) + 0x8b0d00ed; (* arm_ADD X13 X7 X13 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcd7ce7; (* arm_UMULH X7 X7 X13 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0d7cc5; (* arm_MUL X5 X6 X13 *) + 0x9bcd7cc6; (* arm_UMULH X6 X6 X13 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0d00c6; (* arm_ADCS X6 X6 X13 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ce; (* arm_SUBS X14 X14 X7 *) + 0xfa0601ef; (* arm_SBCS X15 X15 X6 *) + 0xfa050210; (* arm_SBCS X16 X16 X5 *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda1f01ad; (* arm_SBC X13 X13 XZR *) + 0xd3607dc7; (* arm_LSL X7 X14 32 *) + 0x8b0e00ee; (* arm_ADD X14 X7 X14 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bce7ce7; (* arm_UMULH X7 X7 X14 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0e7cc5; (* arm_MUL X5 X6 X14 *) + 0x9bce7cc6; (* arm_UMULH X6 X6 X14 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0e00c6; (* arm_ADCS X6 X6 X14 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ef; (* arm_SUBS X15 X15 X7 *) + 0xfa060210; (* arm_SBCS X16 X16 X6 *) + 0xfa050231; (* arm_SBCS X17 X17 X5 *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xda1f01ce; (* arm_SBC X14 X14 XZR *) + 0xd3607de7; (* arm_LSL X7 X15 32 *) + 0x8b0f00ef; (* arm_ADD X15 X7 X15 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcf7ce7; (* arm_UMULH X7 X7 X15 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0f7cc5; (* arm_MUL X5 X6 X15 *) + 0x9bcf7cc6; (* arm_UMULH X6 X6 X15 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0f00c6; (* arm_ADCS X6 X6 X15 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb070210; (* arm_SUBS X16 X16 X7 *) + 0xfa060231; (* arm_SBCS X17 X17 X6 *) + 0xfa05018c; (* arm_SBCS X12 X12 X5 *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xda1f01ef; (* arm_SBC X15 X15 XZR *) + 0xd3607e07; (* arm_LSL X7 X16 32 *) + 0x8b1000f0; (* arm_ADD X16 X7 X16 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bd07ce7; (* arm_UMULH X7 X7 X16 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b107cc5; (* arm_MUL X5 X6 X16 *) + 0x9bd07cc6; (* arm_UMULH X6 X6 X16 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba1000c6; (* arm_ADCS X6 X6 X16 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb070231; (* arm_SUBS X17 X17 X7 *) + 0xfa06018c; (* arm_SBCS X12 X12 X6 *) + 0xfa0501ad; (* arm_SBCS X13 X13 X5 *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xda1f0210; (* arm_SBC X16 X16 XZR *) + 0xd3607e27; (* arm_LSL X7 X17 32 *) + 0x8b1100f1; (* arm_ADD X17 X7 X17 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bd17ce7; (* arm_UMULH X7 X7 X17 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b117cc5; (* arm_MUL X5 X6 X17 *) + 0x9bd17cc6; (* arm_UMULH X6 X6 X17 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba1100c6; (* arm_ADCS X6 X6 X17 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb07018c; (* arm_SUBS X12 X12 X7 *) + 0xfa0601ad; (* arm_SBCS X13 X13 X6 *) + 0xfa0501ce; (* arm_SBCS X14 X14 X5 *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xda1f0231; (* arm_SBC X17 X17 XZR *) + 0xab13018c; (* arm_ADDS X12 X12 X19 *) + 0xba1401ad; (* arm_ADCS X13 X13 X20 *) + 0xba1501ce; (* arm_ADCS X14 X14 X21 *) + 0xba1601ef; (* arm_ADCS X15 X15 X22 *) + 0xba020210; (* arm_ADCS X16 X16 X2 *) + 0xba010231; (* arm_ADCS X17 X17 X1 *) + 0x9a1f03ea; (* arm_ADC X10 XZR XZR *) + 0xb26083eb; (* arm_MOV X11 (rvalue (word 18446744069414584321)) *) + 0xab0b0193; (* arm_ADDS X19 X12 X11 *) + 0xb2407feb; (* arm_MOV X11 (rvalue (word 4294967295)) *) + 0xba0b01b4; (* arm_ADCS X20 X13 X11 *) + 0xd280002b; (* arm_MOV X11 (rvalue (word 1)) *) + 0xba0b01d5; (* arm_ADCS X21 X14 X11 *) + 0xba1f01f6; (* arm_ADCS X22 X15 XZR *) + 0xba1f0202; (* arm_ADCS X2 X16 XZR *) + 0xba1f0221; (* arm_ADCS X1 X17 XZR *) + 0xba1f014a; (* arm_ADCS X10 X10 XZR *) + 0x9a93018c; (* arm_CSEL X12 X12 X19 Condition_EQ *) + 0x9a9401ad; (* arm_CSEL X13 X13 X20 Condition_EQ *) + 0x9a9501ce; (* arm_CSEL X14 X14 X21 Condition_EQ *) + 0x9a9601ef; (* arm_CSEL X15 X15 X22 Condition_EQ *) + 0x9a820210; (* arm_CSEL X16 X16 X2 Condition_EQ *) + 0x9a810231; (* arm_CSEL X17 X17 X1 Condition_EQ *) + 0xa90337ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&48))) *) + 0xa9043fee; (* arm_STP X14 X15 SP (Immediate_Offset (iword (&64))) *) + 0xa90547f0; (* arm_STP X16 X17 SP (Immediate_Offset (iword (&80))) *) + 0xa94013e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&0))) *) + 0xa9401b45; (* arm_LDP X5 X6 X26 (Immediate_Offset (iword (&0))) *) + 0x9b057c6c; (* arm_MUL X12 X3 X5 *) + 0x9bc57c6d; (* arm_UMULH X13 X3 X5 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa9412347; (* arm_LDP X7 X8 X26 (Immediate_Offset (iword (&16))) *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0x9bc77c6f; (* arm_UMULH X15 X3 X7 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c70; (* arm_UMULH X16 X3 X8 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0xa9422b49; (* arm_LDP X9 X10 X26 (Immediate_Offset (iword (&32))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c71; (* arm_UMULH X17 X3 X9 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c73; (* arm_UMULH X19 X3 X10 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b0294; (* arm_ADC X20 X20 X11 *) + 0xa94113e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&16))) *) + 0x9b057c6b; (* arm_MUL X11 X3 X5 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9a9f37f5; (* arm_CSET X21 Condition_CS *) + 0x9bc57c6b; (* arm_UMULH X11 X3 X5 *) + 0xab0b01ef; (* arm_ADDS X15 X15 X11 *) + 0x9bc67c6b; (* arm_UMULH X11 X3 X6 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9bc77c6b; (* arm_UMULH X11 X3 X7 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc87c6b; (* arm_UMULH X11 X3 X8 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc97c6b; (* arm_UMULH X11 X3 X9 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bca7c6b; (* arm_UMULH X11 X3 X10 *) + 0x9a0b02b5; (* arm_ADC X21 X21 X11 *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b01ef; (* arm_ADDS X15 X15 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9a9f37f6; (* arm_CSET X22 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b0210; (* arm_ADDS X16 X16 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b02d6; (* arm_ADC X22 X22 X11 *) + 0xa94213e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&32))) *) + 0x9b057c6b; (* arm_MUL X11 X3 X5 *) + 0xab0b0210; (* arm_ADDS X16 X16 X11 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9a9f37e2; (* arm_CSET X2 Condition_CS *) + 0x9bc57c6b; (* arm_UMULH X11 X3 X5 *) + 0xab0b0231; (* arm_ADDS X17 X17 X11 *) + 0x9bc67c6b; (* arm_UMULH X11 X3 X6 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc77c6b; (* arm_UMULH X11 X3 X7 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc87c6b; (* arm_UMULH X11 X3 X8 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bc97c6b; (* arm_UMULH X11 X3 X9 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9bca7c6b; (* arm_UMULH X11 X3 X10 *) + 0x9a0b0042; (* arm_ADC X2 X2 X11 *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b0231; (* arm_ADDS X17 X17 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0042; (* arm_ADCS X2 X2 X11 *) + 0x9a9f37e1; (* arm_CSET X1 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b0273; (* arm_ADDS X19 X19 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0042; (* arm_ADCS X2 X2 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b0021; (* arm_ADC X1 X1 X11 *) + 0xd3607d87; (* arm_LSL X7 X12 32 *) + 0x8b0c00ec; (* arm_ADD X12 X7 X12 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcc7ce7; (* arm_UMULH X7 X7 X12 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0c7cc5; (* arm_MUL X5 X6 X12 *) + 0x9bcc7cc6; (* arm_UMULH X6 X6 X12 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0c00c6; (* arm_ADCS X6 X6 X12 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ad; (* arm_SUBS X13 X13 X7 *) + 0xfa0601ce; (* arm_SBCS X14 X14 X6 *) + 0xfa0501ef; (* arm_SBCS X15 X15 X5 *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xda1f018c; (* arm_SBC X12 X12 XZR *) + 0xd3607da7; (* arm_LSL X7 X13 32 *) + 0x8b0d00ed; (* arm_ADD X13 X7 X13 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcd7ce7; (* arm_UMULH X7 X7 X13 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0d7cc5; (* arm_MUL X5 X6 X13 *) + 0x9bcd7cc6; (* arm_UMULH X6 X6 X13 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0d00c6; (* arm_ADCS X6 X6 X13 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ce; (* arm_SUBS X14 X14 X7 *) + 0xfa0601ef; (* arm_SBCS X15 X15 X6 *) + 0xfa050210; (* arm_SBCS X16 X16 X5 *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda1f01ad; (* arm_SBC X13 X13 XZR *) + 0xd3607dc7; (* arm_LSL X7 X14 32 *) + 0x8b0e00ee; (* arm_ADD X14 X7 X14 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bce7ce7; (* arm_UMULH X7 X7 X14 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0e7cc5; (* arm_MUL X5 X6 X14 *) + 0x9bce7cc6; (* arm_UMULH X6 X6 X14 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0e00c6; (* arm_ADCS X6 X6 X14 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ef; (* arm_SUBS X15 X15 X7 *) + 0xfa060210; (* arm_SBCS X16 X16 X6 *) + 0xfa050231; (* arm_SBCS X17 X17 X5 *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xda1f01ce; (* arm_SBC X14 X14 XZR *) + 0xd3607de7; (* arm_LSL X7 X15 32 *) + 0x8b0f00ef; (* arm_ADD X15 X7 X15 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcf7ce7; (* arm_UMULH X7 X7 X15 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0f7cc5; (* arm_MUL X5 X6 X15 *) + 0x9bcf7cc6; (* arm_UMULH X6 X6 X15 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0f00c6; (* arm_ADCS X6 X6 X15 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb070210; (* arm_SUBS X16 X16 X7 *) + 0xfa060231; (* arm_SBCS X17 X17 X6 *) + 0xfa05018c; (* arm_SBCS X12 X12 X5 *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xda1f01ef; (* arm_SBC X15 X15 XZR *) + 0xd3607e07; (* arm_LSL X7 X16 32 *) + 0x8b1000f0; (* arm_ADD X16 X7 X16 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bd07ce7; (* arm_UMULH X7 X7 X16 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b107cc5; (* arm_MUL X5 X6 X16 *) + 0x9bd07cc6; (* arm_UMULH X6 X6 X16 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba1000c6; (* arm_ADCS X6 X6 X16 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb070231; (* arm_SUBS X17 X17 X7 *) + 0xfa06018c; (* arm_SBCS X12 X12 X6 *) + 0xfa0501ad; (* arm_SBCS X13 X13 X5 *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xda1f0210; (* arm_SBC X16 X16 XZR *) + 0xd3607e27; (* arm_LSL X7 X17 32 *) + 0x8b1100f1; (* arm_ADD X17 X7 X17 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bd17ce7; (* arm_UMULH X7 X7 X17 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b117cc5; (* arm_MUL X5 X6 X17 *) + 0x9bd17cc6; (* arm_UMULH X6 X6 X17 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba1100c6; (* arm_ADCS X6 X6 X17 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb07018c; (* arm_SUBS X12 X12 X7 *) + 0xfa0601ad; (* arm_SBCS X13 X13 X6 *) + 0xfa0501ce; (* arm_SBCS X14 X14 X5 *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xda1f0231; (* arm_SBC X17 X17 XZR *) + 0xab13018c; (* arm_ADDS X12 X12 X19 *) + 0xba1401ad; (* arm_ADCS X13 X13 X20 *) + 0xba1501ce; (* arm_ADCS X14 X14 X21 *) + 0xba1601ef; (* arm_ADCS X15 X15 X22 *) + 0xba020210; (* arm_ADCS X16 X16 X2 *) + 0xba010231; (* arm_ADCS X17 X17 X1 *) + 0x9a1f03ea; (* arm_ADC X10 XZR XZR *) + 0xb26083eb; (* arm_MOV X11 (rvalue (word 18446744069414584321)) *) + 0xab0b0193; (* arm_ADDS X19 X12 X11 *) + 0xb2407feb; (* arm_MOV X11 (rvalue (word 4294967295)) *) + 0xba0b01b4; (* arm_ADCS X20 X13 X11 *) + 0xd280002b; (* arm_MOV X11 (rvalue (word 1)) *) + 0xba0b01d5; (* arm_ADCS X21 X14 X11 *) + 0xba1f01f6; (* arm_ADCS X22 X15 XZR *) + 0xba1f0202; (* arm_ADCS X2 X16 XZR *) + 0xba1f0221; (* arm_ADCS X1 X17 XZR *) + 0xba1f014a; (* arm_ADCS X10 X10 XZR *) + 0x9a93018c; (* arm_CSEL X12 X12 X19 Condition_EQ *) + 0x9a9401ad; (* arm_CSEL X13 X13 X20 Condition_EQ *) + 0x9a9501ce; (* arm_CSEL X14 X14 X21 Condition_EQ *) + 0x9a9601ef; (* arm_CSEL X15 X15 X22 Condition_EQ *) + 0x9a820210; (* arm_CSEL X16 X16 X2 Condition_EQ *) + 0x9a810231; (* arm_CSEL X17 X17 X1 Condition_EQ *) + 0xa90637ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&96))) *) + 0xa9073fee; (* arm_STP X14 X15 SP (Immediate_Offset (iword (&112))) *) + 0xa90847f0; (* arm_STP X16 X17 SP (Immediate_Offset (iword (&128))) *) + 0xa94013e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&0))) *) + 0xa9431be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&48))) *) + 0x9b057c6c; (* arm_MUL X12 X3 X5 *) + 0x9bc57c6d; (* arm_UMULH X13 X3 X5 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa94423e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&64))) *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0x9bc77c6f; (* arm_UMULH X15 X3 X7 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c70; (* arm_UMULH X16 X3 X8 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0xa9452be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&80))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c71; (* arm_UMULH X17 X3 X9 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c73; (* arm_UMULH X19 X3 X10 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b0294; (* arm_ADC X20 X20 X11 *) + 0xa94113e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&16))) *) + 0x9b057c6b; (* arm_MUL X11 X3 X5 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9a9f37f5; (* arm_CSET X21 Condition_CS *) + 0x9bc57c6b; (* arm_UMULH X11 X3 X5 *) + 0xab0b01ef; (* arm_ADDS X15 X15 X11 *) + 0x9bc67c6b; (* arm_UMULH X11 X3 X6 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9bc77c6b; (* arm_UMULH X11 X3 X7 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc87c6b; (* arm_UMULH X11 X3 X8 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc97c6b; (* arm_UMULH X11 X3 X9 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bca7c6b; (* arm_UMULH X11 X3 X10 *) + 0x9a0b02b5; (* arm_ADC X21 X21 X11 *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b01ef; (* arm_ADDS X15 X15 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9a9f37f6; (* arm_CSET X22 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b0210; (* arm_ADDS X16 X16 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b02d6; (* arm_ADC X22 X22 X11 *) + 0xa94213e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&32))) *) + 0x9b057c6b; (* arm_MUL X11 X3 X5 *) + 0xab0b0210; (* arm_ADDS X16 X16 X11 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9a9f37e2; (* arm_CSET X2 Condition_CS *) + 0x9bc57c6b; (* arm_UMULH X11 X3 X5 *) + 0xab0b0231; (* arm_ADDS X17 X17 X11 *) + 0x9bc67c6b; (* arm_UMULH X11 X3 X6 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc77c6b; (* arm_UMULH X11 X3 X7 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc87c6b; (* arm_UMULH X11 X3 X8 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bc97c6b; (* arm_UMULH X11 X3 X9 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9bca7c6b; (* arm_UMULH X11 X3 X10 *) + 0x9a0b0042; (* arm_ADC X2 X2 X11 *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b0231; (* arm_ADDS X17 X17 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0042; (* arm_ADCS X2 X2 X11 *) + 0x9a9f37e1; (* arm_CSET X1 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b0273; (* arm_ADDS X19 X19 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0042; (* arm_ADCS X2 X2 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b0021; (* arm_ADC X1 X1 X11 *) + 0xd3607d87; (* arm_LSL X7 X12 32 *) + 0x8b0c00ec; (* arm_ADD X12 X7 X12 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcc7ce7; (* arm_UMULH X7 X7 X12 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0c7cc5; (* arm_MUL X5 X6 X12 *) + 0x9bcc7cc6; (* arm_UMULH X6 X6 X12 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0c00c6; (* arm_ADCS X6 X6 X12 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ad; (* arm_SUBS X13 X13 X7 *) + 0xfa0601ce; (* arm_SBCS X14 X14 X6 *) + 0xfa0501ef; (* arm_SBCS X15 X15 X5 *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xda1f018c; (* arm_SBC X12 X12 XZR *) + 0xd3607da7; (* arm_LSL X7 X13 32 *) + 0x8b0d00ed; (* arm_ADD X13 X7 X13 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcd7ce7; (* arm_UMULH X7 X7 X13 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0d7cc5; (* arm_MUL X5 X6 X13 *) + 0x9bcd7cc6; (* arm_UMULH X6 X6 X13 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0d00c6; (* arm_ADCS X6 X6 X13 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ce; (* arm_SUBS X14 X14 X7 *) + 0xfa0601ef; (* arm_SBCS X15 X15 X6 *) + 0xfa050210; (* arm_SBCS X16 X16 X5 *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda1f01ad; (* arm_SBC X13 X13 XZR *) + 0xd3607dc7; (* arm_LSL X7 X14 32 *) + 0x8b0e00ee; (* arm_ADD X14 X7 X14 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bce7ce7; (* arm_UMULH X7 X7 X14 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0e7cc5; (* arm_MUL X5 X6 X14 *) + 0x9bce7cc6; (* arm_UMULH X6 X6 X14 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0e00c6; (* arm_ADCS X6 X6 X14 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ef; (* arm_SUBS X15 X15 X7 *) + 0xfa060210; (* arm_SBCS X16 X16 X6 *) + 0xfa050231; (* arm_SBCS X17 X17 X5 *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xda1f01ce; (* arm_SBC X14 X14 XZR *) + 0xd3607de7; (* arm_LSL X7 X15 32 *) + 0x8b0f00ef; (* arm_ADD X15 X7 X15 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcf7ce7; (* arm_UMULH X7 X7 X15 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0f7cc5; (* arm_MUL X5 X6 X15 *) + 0x9bcf7cc6; (* arm_UMULH X6 X6 X15 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0f00c6; (* arm_ADCS X6 X6 X15 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb070210; (* arm_SUBS X16 X16 X7 *) + 0xfa060231; (* arm_SBCS X17 X17 X6 *) + 0xfa05018c; (* arm_SBCS X12 X12 X5 *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xda1f01ef; (* arm_SBC X15 X15 XZR *) + 0xd3607e07; (* arm_LSL X7 X16 32 *) + 0x8b1000f0; (* arm_ADD X16 X7 X16 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bd07ce7; (* arm_UMULH X7 X7 X16 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b107cc5; (* arm_MUL X5 X6 X16 *) + 0x9bd07cc6; (* arm_UMULH X6 X6 X16 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba1000c6; (* arm_ADCS X6 X6 X16 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb070231; (* arm_SUBS X17 X17 X7 *) + 0xfa06018c; (* arm_SBCS X12 X12 X6 *) + 0xfa0501ad; (* arm_SBCS X13 X13 X5 *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xda1f0210; (* arm_SBC X16 X16 XZR *) + 0xd3607e27; (* arm_LSL X7 X17 32 *) + 0x8b1100f1; (* arm_ADD X17 X7 X17 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bd17ce7; (* arm_UMULH X7 X7 X17 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b117cc5; (* arm_MUL X5 X6 X17 *) + 0x9bd17cc6; (* arm_UMULH X6 X6 X17 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba1100c6; (* arm_ADCS X6 X6 X17 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb07018c; (* arm_SUBS X12 X12 X7 *) + 0xfa0601ad; (* arm_SBCS X13 X13 X6 *) + 0xfa0501ce; (* arm_SBCS X14 X14 X5 *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xda1f0231; (* arm_SBC X17 X17 XZR *) + 0xab13018c; (* arm_ADDS X12 X12 X19 *) + 0xba1401ad; (* arm_ADCS X13 X13 X20 *) + 0xba1501ce; (* arm_ADCS X14 X14 X21 *) + 0xba1601ef; (* arm_ADCS X15 X15 X22 *) + 0xba020210; (* arm_ADCS X16 X16 X2 *) + 0xba010231; (* arm_ADCS X17 X17 X1 *) + 0x9a1f03ea; (* arm_ADC X10 XZR XZR *) + 0xb26083eb; (* arm_MOV X11 (rvalue (word 18446744069414584321)) *) + 0xab0b0193; (* arm_ADDS X19 X12 X11 *) + 0xb2407feb; (* arm_MOV X11 (rvalue (word 4294967295)) *) + 0xba0b01b4; (* arm_ADCS X20 X13 X11 *) + 0xd280002b; (* arm_MOV X11 (rvalue (word 1)) *) + 0xba0b01d5; (* arm_ADCS X21 X14 X11 *) + 0xba1f01f6; (* arm_ADCS X22 X15 XZR *) + 0xba1f0202; (* arm_ADCS X2 X16 XZR *) + 0xba1f0221; (* arm_ADCS X1 X17 XZR *) + 0xba1f014a; (* arm_ADCS X10 X10 XZR *) + 0x9a93018c; (* arm_CSEL X12 X12 X19 Condition_EQ *) + 0x9a9401ad; (* arm_CSEL X13 X13 X20 Condition_EQ *) + 0x9a9501ce; (* arm_CSEL X14 X14 X21 Condition_EQ *) + 0x9a9601ef; (* arm_CSEL X15 X15 X22 Condition_EQ *) + 0x9a820210; (* arm_CSEL X16 X16 X2 Condition_EQ *) + 0x9a810231; (* arm_CSEL X17 X17 X1 Condition_EQ *) + 0xa90337ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&48))) *) + 0xa9043fee; (* arm_STP X14 X15 SP (Immediate_Offset (iword (&64))) *) + 0xa90547f0; (* arm_STP X16 X17 SP (Immediate_Offset (iword (&80))) *) + 0xa9461be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&96))) *) + 0xa9400f24; (* arm_LDP X4 X3 X25 (Immediate_Offset (iword (&0))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa94723e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&112))) *) + 0xa9410f24; (* arm_LDP X4 X3 X25 (Immediate_Offset (iword (&16))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xa9482be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&128))) *) + 0xa9420f24; (* arm_LDP X4 X3 X25 (Immediate_Offset (iword (&32))) *) + 0xfa040129; (* arm_SBCS X9 X9 X4 *) + 0xfa03014a; (* arm_SBCS X10 X10 X3 *) + 0xda9f23e3; (* arm_CSETM X3 Condition_CC *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0xab0400a5; (* arm_ADDS X5 X5 X4 *) + 0xca030084; (* arm_EOR X4 X4 X3 *) + 0xba0400c6; (* arm_ADCS X6 X6 X4 *) + 0x92800024; (* arm_MOVN X4 (word 1) 0 *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0xba0400e7; (* arm_ADCS X7 X7 X4 *) + 0xba030108; (* arm_ADCS X8 X8 X3 *) + 0xba030129; (* arm_ADCS X9 X9 X3 *) + 0x9a03014a; (* arm_ADC X10 X10 X3 *) + 0xa90f1be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&240))) *) + 0xa91023e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&256))) *) + 0xa9112be9; (* arm_STP X9 X10 SP (Immediate_Offset (iword (&272))) *) + 0xa9431be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&48))) *) + 0xa9430f24; (* arm_LDP X4 X3 X25 (Immediate_Offset (iword (&48))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa94423e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&64))) *) + 0xa9440f24; (* arm_LDP X4 X3 X25 (Immediate_Offset (iword (&64))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xa9452be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&80))) *) + 0xa9450f24; (* arm_LDP X4 X3 X25 (Immediate_Offset (iword (&80))) *) + 0xfa040129; (* arm_SBCS X9 X9 X4 *) + 0xfa03014a; (* arm_SBCS X10 X10 X3 *) + 0xda9f23e3; (* arm_CSETM X3 Condition_CC *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0xab0400a5; (* arm_ADDS X5 X5 X4 *) + 0xca030084; (* arm_EOR X4 X4 X3 *) + 0xba0400c6; (* arm_ADCS X6 X6 X4 *) + 0x92800024; (* arm_MOVN X4 (word 1) 0 *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0xba0400e7; (* arm_ADCS X7 X7 X4 *) + 0xba030108; (* arm_ADCS X8 X8 X3 *) + 0xba030129; (* arm_ADCS X9 X9 X3 *) + 0x9a03014a; (* arm_ADC X10 X10 X3 *) + 0xa9031be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&48))) *) + 0xa90423e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&64))) *) + 0xa9052be9; (* arm_STP X9 X10 SP (Immediate_Offset (iword (&80))) *) + 0xa94f0fe2; (* arm_LDP X2 X3 SP (Immediate_Offset (iword (&240))) *) + 0x9b037c49; (* arm_MUL X9 X2 X3 *) + 0x9bc37c4a; (* arm_UMULH X10 X2 X3 *) + 0xa95017e4; (* arm_LDP X4 X5 SP (Immediate_Offset (iword (&256))) *) + 0x9b047c48; (* arm_MUL X8 X2 X4 *) + 0xab08014a; (* arm_ADDS X10 X10 X8 *) + 0x9b057c4b; (* arm_MUL X11 X2 X5 *) + 0x9b047c68; (* arm_MUL X8 X3 X4 *) + 0xba08016b; (* arm_ADCS X11 X11 X8 *) + 0x9bc57c4c; (* arm_UMULH X12 X2 X5 *) + 0x9b057c68; (* arm_MUL X8 X3 X5 *) + 0xba08018c; (* arm_ADCS X12 X12 X8 *) + 0xa9511fe6; (* arm_LDP X6 X7 SP (Immediate_Offset (iword (&272))) *) + 0x9b077c4d; (* arm_MUL X13 X2 X7 *) + 0x9b067c68; (* arm_MUL X8 X3 X6 *) + 0xba0801ad; (* arm_ADCS X13 X13 X8 *) + 0x9bc77c4e; (* arm_UMULH X14 X2 X7 *) + 0x9b077c68; (* arm_MUL X8 X3 X7 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9b067caf; (* arm_MUL X15 X5 X6 *) + 0xba1f01ef; (* arm_ADCS X15 X15 XZR *) + 0x9bc67cb0; (* arm_UMULH X16 X5 X6 *) + 0x9a1f0210; (* arm_ADC X16 X16 XZR *) + 0x9bc47c48; (* arm_UMULH X8 X2 X4 *) + 0xab08016b; (* arm_ADDS X11 X11 X8 *) + 0x9bc47c68; (* arm_UMULH X8 X3 X4 *) + 0xba08018c; (* arm_ADCS X12 X12 X8 *) + 0x9bc57c68; (* arm_UMULH X8 X3 X5 *) + 0xba0801ad; (* arm_ADCS X13 X13 X8 *) + 0x9bc67c68; (* arm_UMULH X8 X3 X6 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9bc77c68; (* arm_UMULH X8 X3 X7 *) + 0xba0801ef; (* arm_ADCS X15 X15 X8 *) + 0x9a1f0210; (* arm_ADC X16 X16 XZR *) + 0x9b067c48; (* arm_MUL X8 X2 X6 *) + 0xab08018c; (* arm_ADDS X12 X12 X8 *) + 0x9b057c88; (* arm_MUL X8 X4 X5 *) + 0xba0801ad; (* arm_ADCS X13 X13 X8 *) + 0x9b067c88; (* arm_MUL X8 X4 X6 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9b077c88; (* arm_MUL X8 X4 X7 *) + 0xba0801ef; (* arm_ADCS X15 X15 X8 *) + 0x9b077ca8; (* arm_MUL X8 X5 X7 *) + 0xba080210; (* arm_ADCS X16 X16 X8 *) + 0x9b077cd1; (* arm_MUL X17 X6 X7 *) + 0xba1f0231; (* arm_ADCS X17 X17 XZR *) + 0x9bc77cd3; (* arm_UMULH X19 X6 X7 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0x9bc67c48; (* arm_UMULH X8 X2 X6 *) + 0xab0801ad; (* arm_ADDS X13 X13 X8 *) + 0x9bc57c88; (* arm_UMULH X8 X4 X5 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9bc67c88; (* arm_UMULH X8 X4 X6 *) + 0xba0801ef; (* arm_ADCS X15 X15 X8 *) + 0x9bc77c88; (* arm_UMULH X8 X4 X7 *) + 0xba080210; (* arm_ADCS X16 X16 X8 *) + 0x9bc77ca8; (* arm_UMULH X8 X5 X7 *) + 0xba080231; (* arm_ADCS X17 X17 X8 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0xab090129; (* arm_ADDS X9 X9 X9 *) + 0xba0a014a; (* arm_ADCS X10 X10 X10 *) + 0xba0b016b; (* arm_ADCS X11 X11 X11 *) + 0xba0c018c; (* arm_ADCS X12 X12 X12 *) + 0xba0d01ad; (* arm_ADCS X13 X13 X13 *) + 0xba0e01ce; (* arm_ADCS X14 X14 X14 *) + 0xba0f01ef; (* arm_ADCS X15 X15 X15 *) + 0xba100210; (* arm_ADCS X16 X16 X16 *) + 0xba110231; (* arm_ADCS X17 X17 X17 *) + 0xba130273; (* arm_ADCS X19 X19 X19 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc27c48; (* arm_UMULH X8 X2 X2 *) + 0x9b027c42; (* arm_MUL X2 X2 X2 *) + 0xab080129; (* arm_ADDS X9 X9 X8 *) + 0x9b037c68; (* arm_MUL X8 X3 X3 *) + 0xba08014a; (* arm_ADCS X10 X10 X8 *) + 0x9bc37c68; (* arm_UMULH X8 X3 X3 *) + 0xba08016b; (* arm_ADCS X11 X11 X8 *) + 0x9b047c88; (* arm_MUL X8 X4 X4 *) + 0xba08018c; (* arm_ADCS X12 X12 X8 *) + 0x9bc47c88; (* arm_UMULH X8 X4 X4 *) + 0xba0801ad; (* arm_ADCS X13 X13 X8 *) + 0x9b057ca8; (* arm_MUL X8 X5 X5 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9bc57ca8; (* arm_UMULH X8 X5 X5 *) + 0xba0801ef; (* arm_ADCS X15 X15 X8 *) + 0x9b067cc8; (* arm_MUL X8 X6 X6 *) + 0xba080210; (* arm_ADCS X16 X16 X8 *) + 0x9bc67cc8; (* arm_UMULH X8 X6 X6 *) + 0xba080231; (* arm_ADCS X17 X17 X8 *) + 0x9b077ce8; (* arm_MUL X8 X7 X7 *) + 0xba080273; (* arm_ADCS X19 X19 X8 *) + 0x9bc77ce8; (* arm_UMULH X8 X7 X7 *) + 0x9a080294; (* arm_ADC X20 X20 X8 *) + 0xd3607c45; (* arm_LSL X5 X2 32 *) + 0x8b0200a2; (* arm_ADD X2 X5 X2 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bc27ca5; (* arm_UMULH X5 X5 X2 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b027c83; (* arm_MUL X3 X4 X2 *) + 0x9bc27c84; (* arm_UMULH X4 X4 X2 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba020084; (* arm_ADCS X4 X4 X2 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb050129; (* arm_SUBS X9 X9 X5 *) + 0xfa04014a; (* arm_SBCS X10 X10 X4 *) + 0xfa03016b; (* arm_SBCS X11 X11 X3 *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xda1f0042; (* arm_SBC X2 X2 XZR *) + 0xd3607d25; (* arm_LSL X5 X9 32 *) + 0x8b0900a9; (* arm_ADD X9 X5 X9 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bc97ca5; (* arm_UMULH X5 X5 X9 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b097c83; (* arm_MUL X3 X4 X9 *) + 0x9bc97c84; (* arm_UMULH X4 X4 X9 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba090084; (* arm_ADCS X4 X4 X9 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb05014a; (* arm_SUBS X10 X10 X5 *) + 0xfa04016b; (* arm_SBCS X11 X11 X4 *) + 0xfa03018c; (* arm_SBCS X12 X12 X3 *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f0042; (* arm_SBCS X2 X2 XZR *) + 0xda1f0129; (* arm_SBC X9 X9 XZR *) + 0xd3607d45; (* arm_LSL X5 X10 32 *) + 0x8b0a00aa; (* arm_ADD X10 X5 X10 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bca7ca5; (* arm_UMULH X5 X5 X10 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b0a7c83; (* arm_MUL X3 X4 X10 *) + 0x9bca7c84; (* arm_UMULH X4 X4 X10 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba0a0084; (* arm_ADCS X4 X4 X10 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb05016b; (* arm_SUBS X11 X11 X5 *) + 0xfa04018c; (* arm_SBCS X12 X12 X4 *) + 0xfa0301ad; (* arm_SBCS X13 X13 X3 *) + 0xfa1f0042; (* arm_SBCS X2 X2 XZR *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xda1f014a; (* arm_SBC X10 X10 XZR *) + 0xd3607d65; (* arm_LSL X5 X11 32 *) + 0x8b0b00ab; (* arm_ADD X11 X5 X11 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bcb7ca5; (* arm_UMULH X5 X5 X11 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b0b7c83; (* arm_MUL X3 X4 X11 *) + 0x9bcb7c84; (* arm_UMULH X4 X4 X11 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb05018c; (* arm_SUBS X12 X12 X5 *) + 0xfa0401ad; (* arm_SBCS X13 X13 X4 *) + 0xfa030042; (* arm_SBCS X2 X2 X3 *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xda1f016b; (* arm_SBC X11 X11 XZR *) + 0xd3607d85; (* arm_LSL X5 X12 32 *) + 0x8b0c00ac; (* arm_ADD X12 X5 X12 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bcc7ca5; (* arm_UMULH X5 X5 X12 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b0c7c83; (* arm_MUL X3 X4 X12 *) + 0x9bcc7c84; (* arm_UMULH X4 X4 X12 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba0c0084; (* arm_ADCS X4 X4 X12 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb0501ad; (* arm_SUBS X13 X13 X5 *) + 0xfa040042; (* arm_SBCS X2 X2 X4 *) + 0xfa030129; (* arm_SBCS X9 X9 X3 *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xda1f018c; (* arm_SBC X12 X12 XZR *) + 0xd3607da5; (* arm_LSL X5 X13 32 *) + 0x8b0d00ad; (* arm_ADD X13 X5 X13 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bcd7ca5; (* arm_UMULH X5 X5 X13 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b0d7c83; (* arm_MUL X3 X4 X13 *) + 0x9bcd7c84; (* arm_UMULH X4 X4 X13 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba0d0084; (* arm_ADCS X4 X4 X13 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb050042; (* arm_SUBS X2 X2 X5 *) + 0xfa040129; (* arm_SBCS X9 X9 X4 *) + 0xfa03014a; (* arm_SBCS X10 X10 X3 *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda1f01ad; (* arm_SBC X13 X13 XZR *) + 0xab0e0042; (* arm_ADDS X2 X2 X14 *) + 0xba0f0129; (* arm_ADCS X9 X9 X15 *) + 0xba10014a; (* arm_ADCS X10 X10 X16 *) + 0xba11016b; (* arm_ADCS X11 X11 X17 *) + 0xba13018c; (* arm_ADCS X12 X12 X19 *) + 0xba1401ad; (* arm_ADCS X13 X13 X20 *) + 0xb26083ee; (* arm_MOV X14 (rvalue (word 18446744069414584321)) *) + 0xb2407fef; (* arm_MOV X15 (rvalue (word 4294967295)) *) + 0x9a9f21ce; (* arm_CSEL X14 X14 XZR Condition_CS *) + 0x9a9f21ef; (* arm_CSEL X15 X15 XZR Condition_CS *) + 0x9a9f37f0; (* arm_CSET X16 Condition_CS *) + 0xab0e0042; (* arm_ADDS X2 X2 X14 *) + 0xba0f0129; (* arm_ADCS X9 X9 X15 *) + 0xba10014a; (* arm_ADCS X10 X10 X16 *) + 0xba1f016b; (* arm_ADCS X11 X11 XZR *) + 0xba1f018c; (* arm_ADCS X12 X12 XZR *) + 0x9a1f01ad; (* arm_ADC X13 X13 XZR *) + 0xa90927e2; (* arm_STP X2 X9 SP (Immediate_Offset (iword (&144))) *) + 0xa90a2fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&160))) *) + 0xa90b37ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&176))) *) + 0xa9430fe2; (* arm_LDP X2 X3 SP (Immediate_Offset (iword (&48))) *) + 0x9b037c49; (* arm_MUL X9 X2 X3 *) + 0x9bc37c4a; (* arm_UMULH X10 X2 X3 *) + 0xa94417e4; (* arm_LDP X4 X5 SP (Immediate_Offset (iword (&64))) *) + 0x9b047c48; (* arm_MUL X8 X2 X4 *) + 0xab08014a; (* arm_ADDS X10 X10 X8 *) + 0x9b057c4b; (* arm_MUL X11 X2 X5 *) + 0x9b047c68; (* arm_MUL X8 X3 X4 *) + 0xba08016b; (* arm_ADCS X11 X11 X8 *) + 0x9bc57c4c; (* arm_UMULH X12 X2 X5 *) + 0x9b057c68; (* arm_MUL X8 X3 X5 *) + 0xba08018c; (* arm_ADCS X12 X12 X8 *) + 0xa9451fe6; (* arm_LDP X6 X7 SP (Immediate_Offset (iword (&80))) *) + 0x9b077c4d; (* arm_MUL X13 X2 X7 *) + 0x9b067c68; (* arm_MUL X8 X3 X6 *) + 0xba0801ad; (* arm_ADCS X13 X13 X8 *) + 0x9bc77c4e; (* arm_UMULH X14 X2 X7 *) + 0x9b077c68; (* arm_MUL X8 X3 X7 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9b067caf; (* arm_MUL X15 X5 X6 *) + 0xba1f01ef; (* arm_ADCS X15 X15 XZR *) + 0x9bc67cb0; (* arm_UMULH X16 X5 X6 *) + 0x9a1f0210; (* arm_ADC X16 X16 XZR *) + 0x9bc47c48; (* arm_UMULH X8 X2 X4 *) + 0xab08016b; (* arm_ADDS X11 X11 X8 *) + 0x9bc47c68; (* arm_UMULH X8 X3 X4 *) + 0xba08018c; (* arm_ADCS X12 X12 X8 *) + 0x9bc57c68; (* arm_UMULH X8 X3 X5 *) + 0xba0801ad; (* arm_ADCS X13 X13 X8 *) + 0x9bc67c68; (* arm_UMULH X8 X3 X6 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9bc77c68; (* arm_UMULH X8 X3 X7 *) + 0xba0801ef; (* arm_ADCS X15 X15 X8 *) + 0x9a1f0210; (* arm_ADC X16 X16 XZR *) + 0x9b067c48; (* arm_MUL X8 X2 X6 *) + 0xab08018c; (* arm_ADDS X12 X12 X8 *) + 0x9b057c88; (* arm_MUL X8 X4 X5 *) + 0xba0801ad; (* arm_ADCS X13 X13 X8 *) + 0x9b067c88; (* arm_MUL X8 X4 X6 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9b077c88; (* arm_MUL X8 X4 X7 *) + 0xba0801ef; (* arm_ADCS X15 X15 X8 *) + 0x9b077ca8; (* arm_MUL X8 X5 X7 *) + 0xba080210; (* arm_ADCS X16 X16 X8 *) + 0x9b077cd1; (* arm_MUL X17 X6 X7 *) + 0xba1f0231; (* arm_ADCS X17 X17 XZR *) + 0x9bc77cd3; (* arm_UMULH X19 X6 X7 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0x9bc67c48; (* arm_UMULH X8 X2 X6 *) + 0xab0801ad; (* arm_ADDS X13 X13 X8 *) + 0x9bc57c88; (* arm_UMULH X8 X4 X5 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9bc67c88; (* arm_UMULH X8 X4 X6 *) + 0xba0801ef; (* arm_ADCS X15 X15 X8 *) + 0x9bc77c88; (* arm_UMULH X8 X4 X7 *) + 0xba080210; (* arm_ADCS X16 X16 X8 *) + 0x9bc77ca8; (* arm_UMULH X8 X5 X7 *) + 0xba080231; (* arm_ADCS X17 X17 X8 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0xab090129; (* arm_ADDS X9 X9 X9 *) + 0xba0a014a; (* arm_ADCS X10 X10 X10 *) + 0xba0b016b; (* arm_ADCS X11 X11 X11 *) + 0xba0c018c; (* arm_ADCS X12 X12 X12 *) + 0xba0d01ad; (* arm_ADCS X13 X13 X13 *) + 0xba0e01ce; (* arm_ADCS X14 X14 X14 *) + 0xba0f01ef; (* arm_ADCS X15 X15 X15 *) + 0xba100210; (* arm_ADCS X16 X16 X16 *) + 0xba110231; (* arm_ADCS X17 X17 X17 *) + 0xba130273; (* arm_ADCS X19 X19 X19 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc27c48; (* arm_UMULH X8 X2 X2 *) + 0x9b027c42; (* arm_MUL X2 X2 X2 *) + 0xab080129; (* arm_ADDS X9 X9 X8 *) + 0x9b037c68; (* arm_MUL X8 X3 X3 *) + 0xba08014a; (* arm_ADCS X10 X10 X8 *) + 0x9bc37c68; (* arm_UMULH X8 X3 X3 *) + 0xba08016b; (* arm_ADCS X11 X11 X8 *) + 0x9b047c88; (* arm_MUL X8 X4 X4 *) + 0xba08018c; (* arm_ADCS X12 X12 X8 *) + 0x9bc47c88; (* arm_UMULH X8 X4 X4 *) + 0xba0801ad; (* arm_ADCS X13 X13 X8 *) + 0x9b057ca8; (* arm_MUL X8 X5 X5 *) + 0xba0801ce; (* arm_ADCS X14 X14 X8 *) + 0x9bc57ca8; (* arm_UMULH X8 X5 X5 *) + 0xba0801ef; (* arm_ADCS X15 X15 X8 *) + 0x9b067cc8; (* arm_MUL X8 X6 X6 *) + 0xba080210; (* arm_ADCS X16 X16 X8 *) + 0x9bc67cc8; (* arm_UMULH X8 X6 X6 *) + 0xba080231; (* arm_ADCS X17 X17 X8 *) + 0x9b077ce8; (* arm_MUL X8 X7 X7 *) + 0xba080273; (* arm_ADCS X19 X19 X8 *) + 0x9bc77ce8; (* arm_UMULH X8 X7 X7 *) + 0x9a080294; (* arm_ADC X20 X20 X8 *) + 0xd3607c45; (* arm_LSL X5 X2 32 *) + 0x8b0200a2; (* arm_ADD X2 X5 X2 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bc27ca5; (* arm_UMULH X5 X5 X2 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b027c83; (* arm_MUL X3 X4 X2 *) + 0x9bc27c84; (* arm_UMULH X4 X4 X2 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba020084; (* arm_ADCS X4 X4 X2 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb050129; (* arm_SUBS X9 X9 X5 *) + 0xfa04014a; (* arm_SBCS X10 X10 X4 *) + 0xfa03016b; (* arm_SBCS X11 X11 X3 *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xda1f0042; (* arm_SBC X2 X2 XZR *) + 0xd3607d25; (* arm_LSL X5 X9 32 *) + 0x8b0900a9; (* arm_ADD X9 X5 X9 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bc97ca5; (* arm_UMULH X5 X5 X9 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b097c83; (* arm_MUL X3 X4 X9 *) + 0x9bc97c84; (* arm_UMULH X4 X4 X9 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba090084; (* arm_ADCS X4 X4 X9 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb05014a; (* arm_SUBS X10 X10 X5 *) + 0xfa04016b; (* arm_SBCS X11 X11 X4 *) + 0xfa03018c; (* arm_SBCS X12 X12 X3 *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f0042; (* arm_SBCS X2 X2 XZR *) + 0xda1f0129; (* arm_SBC X9 X9 XZR *) + 0xd3607d45; (* arm_LSL X5 X10 32 *) + 0x8b0a00aa; (* arm_ADD X10 X5 X10 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bca7ca5; (* arm_UMULH X5 X5 X10 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b0a7c83; (* arm_MUL X3 X4 X10 *) + 0x9bca7c84; (* arm_UMULH X4 X4 X10 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba0a0084; (* arm_ADCS X4 X4 X10 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb05016b; (* arm_SUBS X11 X11 X5 *) + 0xfa04018c; (* arm_SBCS X12 X12 X4 *) + 0xfa0301ad; (* arm_SBCS X13 X13 X3 *) + 0xfa1f0042; (* arm_SBCS X2 X2 XZR *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xda1f014a; (* arm_SBC X10 X10 XZR *) + 0xd3607d65; (* arm_LSL X5 X11 32 *) + 0x8b0b00ab; (* arm_ADD X11 X5 X11 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bcb7ca5; (* arm_UMULH X5 X5 X11 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b0b7c83; (* arm_MUL X3 X4 X11 *) + 0x9bcb7c84; (* arm_UMULH X4 X4 X11 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba0b0084; (* arm_ADCS X4 X4 X11 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb05018c; (* arm_SUBS X12 X12 X5 *) + 0xfa0401ad; (* arm_SBCS X13 X13 X4 *) + 0xfa030042; (* arm_SBCS X2 X2 X3 *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xda1f016b; (* arm_SBC X11 X11 XZR *) + 0xd3607d85; (* arm_LSL X5 X12 32 *) + 0x8b0c00ac; (* arm_ADD X12 X5 X12 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bcc7ca5; (* arm_UMULH X5 X5 X12 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b0c7c83; (* arm_MUL X3 X4 X12 *) + 0x9bcc7c84; (* arm_UMULH X4 X4 X12 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba0c0084; (* arm_ADCS X4 X4 X12 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb0501ad; (* arm_SUBS X13 X13 X5 *) + 0xfa040042; (* arm_SBCS X2 X2 X4 *) + 0xfa030129; (* arm_SBCS X9 X9 X3 *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xda1f018c; (* arm_SBC X12 X12 XZR *) + 0xd3607da5; (* arm_LSL X5 X13 32 *) + 0x8b0d00ad; (* arm_ADD X13 X5 X13 *) + 0xb26083e5; (* arm_MOV X5 (rvalue (word 18446744069414584321)) *) + 0x9bcd7ca5; (* arm_UMULH X5 X5 X13 *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x9b0d7c83; (* arm_MUL X3 X4 X13 *) + 0x9bcd7c84; (* arm_UMULH X4 X4 X13 *) + 0xab0300a5; (* arm_ADDS X5 X5 X3 *) + 0xba0d0084; (* arm_ADCS X4 X4 X13 *) + 0x9a1f03e3; (* arm_ADC X3 XZR XZR *) + 0xeb050042; (* arm_SUBS X2 X2 X5 *) + 0xfa040129; (* arm_SBCS X9 X9 X4 *) + 0xfa03014a; (* arm_SBCS X10 X10 X3 *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda1f01ad; (* arm_SBC X13 X13 XZR *) + 0xab0e0042; (* arm_ADDS X2 X2 X14 *) + 0xba0f0129; (* arm_ADCS X9 X9 X15 *) + 0xba10014a; (* arm_ADCS X10 X10 X16 *) + 0xba11016b; (* arm_ADCS X11 X11 X17 *) + 0xba13018c; (* arm_ADCS X12 X12 X19 *) + 0xba1401ad; (* arm_ADCS X13 X13 X20 *) + 0x9a1f03e6; (* arm_ADC X6 XZR XZR *) + 0xb26083e8; (* arm_MOV X8 (rvalue (word 18446744069414584321)) *) + 0xab08004e; (* arm_ADDS X14 X2 X8 *) + 0xb2407fe8; (* arm_MOV X8 (rvalue (word 4294967295)) *) + 0xba08012f; (* arm_ADCS X15 X9 X8 *) + 0xd2800028; (* arm_MOV X8 (rvalue (word 1)) *) + 0xba080150; (* arm_ADCS X16 X10 X8 *) + 0xba1f0171; (* arm_ADCS X17 X11 XZR *) + 0xba1f0193; (* arm_ADCS X19 X12 XZR *) + 0xba1f01b4; (* arm_ADCS X20 X13 XZR *) + 0xba1f00c6; (* arm_ADCS X6 X6 XZR *) + 0x9a8e0042; (* arm_CSEL X2 X2 X14 Condition_EQ *) + 0x9a8f0129; (* arm_CSEL X9 X9 X15 Condition_EQ *) + 0x9a90014a; (* arm_CSEL X10 X10 X16 Condition_EQ *) + 0x9a91016b; (* arm_CSEL X11 X11 X17 Condition_EQ *) + 0x9a93018c; (* arm_CSEL X12 X12 X19 Condition_EQ *) + 0x9a9401ad; (* arm_CSEL X13 X13 X20 Condition_EQ *) + 0xa90027e2; (* arm_STP X2 X9 SP (Immediate_Offset (iword (&0))) *) + 0xa9012fea; (* arm_STP X10 X11 SP (Immediate_Offset (iword (&16))) *) + 0xa90237ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&32))) *) + 0xa94913e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&144))) *) + 0xa9401b25; (* arm_LDP X5 X6 X25 (Immediate_Offset (iword (&0))) *) + 0x9b057c6c; (* arm_MUL X12 X3 X5 *) + 0x9bc57c6d; (* arm_UMULH X13 X3 X5 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa9412327; (* arm_LDP X7 X8 X25 (Immediate_Offset (iword (&16))) *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0x9bc77c6f; (* arm_UMULH X15 X3 X7 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c70; (* arm_UMULH X16 X3 X8 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0xa9422b29; (* arm_LDP X9 X10 X25 (Immediate_Offset (iword (&32))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c71; (* arm_UMULH X17 X3 X9 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c73; (* arm_UMULH X19 X3 X10 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b0294; (* arm_ADC X20 X20 X11 *) + 0xa94a13e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&160))) *) + 0x9b057c6b; (* arm_MUL X11 X3 X5 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9a9f37f5; (* arm_CSET X21 Condition_CS *) + 0x9bc57c6b; (* arm_UMULH X11 X3 X5 *) + 0xab0b01ef; (* arm_ADDS X15 X15 X11 *) + 0x9bc67c6b; (* arm_UMULH X11 X3 X6 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9bc77c6b; (* arm_UMULH X11 X3 X7 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc87c6b; (* arm_UMULH X11 X3 X8 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc97c6b; (* arm_UMULH X11 X3 X9 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bca7c6b; (* arm_UMULH X11 X3 X10 *) + 0x9a0b02b5; (* arm_ADC X21 X21 X11 *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b01ef; (* arm_ADDS X15 X15 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9a9f37f6; (* arm_CSET X22 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b0210; (* arm_ADDS X16 X16 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b02d6; (* arm_ADC X22 X22 X11 *) + 0xa94b13e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&176))) *) + 0x9b057c6b; (* arm_MUL X11 X3 X5 *) + 0xab0b0210; (* arm_ADDS X16 X16 X11 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9a9f37e2; (* arm_CSET X2 Condition_CS *) + 0x9bc57c6b; (* arm_UMULH X11 X3 X5 *) + 0xab0b0231; (* arm_ADDS X17 X17 X11 *) + 0x9bc67c6b; (* arm_UMULH X11 X3 X6 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc77c6b; (* arm_UMULH X11 X3 X7 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc87c6b; (* arm_UMULH X11 X3 X8 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bc97c6b; (* arm_UMULH X11 X3 X9 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9bca7c6b; (* arm_UMULH X11 X3 X10 *) + 0x9a0b0042; (* arm_ADC X2 X2 X11 *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b0231; (* arm_ADDS X17 X17 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0042; (* arm_ADCS X2 X2 X11 *) + 0x9a9f37e1; (* arm_CSET X1 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b0273; (* arm_ADDS X19 X19 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0042; (* arm_ADCS X2 X2 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b0021; (* arm_ADC X1 X1 X11 *) + 0xd3607d87; (* arm_LSL X7 X12 32 *) + 0x8b0c00ec; (* arm_ADD X12 X7 X12 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcc7ce7; (* arm_UMULH X7 X7 X12 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0c7cc5; (* arm_MUL X5 X6 X12 *) + 0x9bcc7cc6; (* arm_UMULH X6 X6 X12 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0c00c6; (* arm_ADCS X6 X6 X12 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ad; (* arm_SUBS X13 X13 X7 *) + 0xfa0601ce; (* arm_SBCS X14 X14 X6 *) + 0xfa0501ef; (* arm_SBCS X15 X15 X5 *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xda1f018c; (* arm_SBC X12 X12 XZR *) + 0xd3607da7; (* arm_LSL X7 X13 32 *) + 0x8b0d00ed; (* arm_ADD X13 X7 X13 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcd7ce7; (* arm_UMULH X7 X7 X13 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0d7cc5; (* arm_MUL X5 X6 X13 *) + 0x9bcd7cc6; (* arm_UMULH X6 X6 X13 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0d00c6; (* arm_ADCS X6 X6 X13 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ce; (* arm_SUBS X14 X14 X7 *) + 0xfa0601ef; (* arm_SBCS X15 X15 X6 *) + 0xfa050210; (* arm_SBCS X16 X16 X5 *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda1f01ad; (* arm_SBC X13 X13 XZR *) + 0xd3607dc7; (* arm_LSL X7 X14 32 *) + 0x8b0e00ee; (* arm_ADD X14 X7 X14 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bce7ce7; (* arm_UMULH X7 X7 X14 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0e7cc5; (* arm_MUL X5 X6 X14 *) + 0x9bce7cc6; (* arm_UMULH X6 X6 X14 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0e00c6; (* arm_ADCS X6 X6 X14 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ef; (* arm_SUBS X15 X15 X7 *) + 0xfa060210; (* arm_SBCS X16 X16 X6 *) + 0xfa050231; (* arm_SBCS X17 X17 X5 *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xda1f01ce; (* arm_SBC X14 X14 XZR *) + 0xd3607de7; (* arm_LSL X7 X15 32 *) + 0x8b0f00ef; (* arm_ADD X15 X7 X15 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcf7ce7; (* arm_UMULH X7 X7 X15 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0f7cc5; (* arm_MUL X5 X6 X15 *) + 0x9bcf7cc6; (* arm_UMULH X6 X6 X15 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0f00c6; (* arm_ADCS X6 X6 X15 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb070210; (* arm_SUBS X16 X16 X7 *) + 0xfa060231; (* arm_SBCS X17 X17 X6 *) + 0xfa05018c; (* arm_SBCS X12 X12 X5 *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xda1f01ef; (* arm_SBC X15 X15 XZR *) + 0xd3607e07; (* arm_LSL X7 X16 32 *) + 0x8b1000f0; (* arm_ADD X16 X7 X16 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bd07ce7; (* arm_UMULH X7 X7 X16 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b107cc5; (* arm_MUL X5 X6 X16 *) + 0x9bd07cc6; (* arm_UMULH X6 X6 X16 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba1000c6; (* arm_ADCS X6 X6 X16 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb070231; (* arm_SUBS X17 X17 X7 *) + 0xfa06018c; (* arm_SBCS X12 X12 X6 *) + 0xfa0501ad; (* arm_SBCS X13 X13 X5 *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xda1f0210; (* arm_SBC X16 X16 XZR *) + 0xd3607e27; (* arm_LSL X7 X17 32 *) + 0x8b1100f1; (* arm_ADD X17 X7 X17 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bd17ce7; (* arm_UMULH X7 X7 X17 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b117cc5; (* arm_MUL X5 X6 X17 *) + 0x9bd17cc6; (* arm_UMULH X6 X6 X17 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba1100c6; (* arm_ADCS X6 X6 X17 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb07018c; (* arm_SUBS X12 X12 X7 *) + 0xfa0601ad; (* arm_SBCS X13 X13 X6 *) + 0xfa0501ce; (* arm_SBCS X14 X14 X5 *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xda1f0231; (* arm_SBC X17 X17 XZR *) + 0xab13018c; (* arm_ADDS X12 X12 X19 *) + 0xba1401ad; (* arm_ADCS X13 X13 X20 *) + 0xba1501ce; (* arm_ADCS X14 X14 X21 *) + 0xba1601ef; (* arm_ADCS X15 X15 X22 *) + 0xba020210; (* arm_ADCS X16 X16 X2 *) + 0xba010231; (* arm_ADCS X17 X17 X1 *) + 0x9a1f03ea; (* arm_ADC X10 XZR XZR *) + 0xb26083eb; (* arm_MOV X11 (rvalue (word 18446744069414584321)) *) + 0xab0b0193; (* arm_ADDS X19 X12 X11 *) + 0xb2407feb; (* arm_MOV X11 (rvalue (word 4294967295)) *) + 0xba0b01b4; (* arm_ADCS X20 X13 X11 *) + 0xd280002b; (* arm_MOV X11 (rvalue (word 1)) *) + 0xba0b01d5; (* arm_ADCS X21 X14 X11 *) + 0xba1f01f6; (* arm_ADCS X22 X15 XZR *) + 0xba1f0202; (* arm_ADCS X2 X16 XZR *) + 0xba1f0221; (* arm_ADCS X1 X17 XZR *) + 0xba1f014a; (* arm_ADCS X10 X10 XZR *) + 0x9a93018c; (* arm_CSEL X12 X12 X19 Condition_EQ *) + 0x9a9401ad; (* arm_CSEL X13 X13 X20 Condition_EQ *) + 0x9a9501ce; (* arm_CSEL X14 X14 X21 Condition_EQ *) + 0x9a9601ef; (* arm_CSEL X15 X15 X22 Condition_EQ *) + 0x9a820210; (* arm_CSEL X16 X16 X2 Condition_EQ *) + 0x9a810231; (* arm_CSEL X17 X17 X1 Condition_EQ *) + 0xa90c37ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&192))) *) + 0xa90d3fee; (* arm_STP X14 X15 SP (Immediate_Offset (iword (&208))) *) + 0xa90e47f0; (* arm_STP X16 X17 SP (Immediate_Offset (iword (&224))) *) + 0xa94913e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&144))) *) + 0xa9461be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&96))) *) + 0x9b057c6c; (* arm_MUL X12 X3 X5 *) + 0x9bc57c6d; (* arm_UMULH X13 X3 X5 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa94723e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&112))) *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0x9bc77c6f; (* arm_UMULH X15 X3 X7 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c70; (* arm_UMULH X16 X3 X8 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0xa9482be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&128))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c71; (* arm_UMULH X17 X3 X9 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c73; (* arm_UMULH X19 X3 X10 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b0294; (* arm_ADC X20 X20 X11 *) + 0xa94a13e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&160))) *) + 0x9b057c6b; (* arm_MUL X11 X3 X5 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9a9f37f5; (* arm_CSET X21 Condition_CS *) + 0x9bc57c6b; (* arm_UMULH X11 X3 X5 *) + 0xab0b01ef; (* arm_ADDS X15 X15 X11 *) + 0x9bc67c6b; (* arm_UMULH X11 X3 X6 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9bc77c6b; (* arm_UMULH X11 X3 X7 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc87c6b; (* arm_UMULH X11 X3 X8 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc97c6b; (* arm_UMULH X11 X3 X9 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bca7c6b; (* arm_UMULH X11 X3 X10 *) + 0x9a0b02b5; (* arm_ADC X21 X21 X11 *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b01ef; (* arm_ADDS X15 X15 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9a9f37f6; (* arm_CSET X22 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b0210; (* arm_ADDS X16 X16 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b02d6; (* arm_ADC X22 X22 X11 *) + 0xa94b13e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&176))) *) + 0x9b057c6b; (* arm_MUL X11 X3 X5 *) + 0xab0b0210; (* arm_ADDS X16 X16 X11 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9a9f37e2; (* arm_CSET X2 Condition_CS *) + 0x9bc57c6b; (* arm_UMULH X11 X3 X5 *) + 0xab0b0231; (* arm_ADDS X17 X17 X11 *) + 0x9bc67c6b; (* arm_UMULH X11 X3 X6 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc77c6b; (* arm_UMULH X11 X3 X7 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc87c6b; (* arm_UMULH X11 X3 X8 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bc97c6b; (* arm_UMULH X11 X3 X9 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9bca7c6b; (* arm_UMULH X11 X3 X10 *) + 0x9a0b0042; (* arm_ADC X2 X2 X11 *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b0231; (* arm_ADDS X17 X17 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0042; (* arm_ADCS X2 X2 X11 *) + 0x9a9f37e1; (* arm_CSET X1 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b0273; (* arm_ADDS X19 X19 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0042; (* arm_ADCS X2 X2 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b0021; (* arm_ADC X1 X1 X11 *) + 0xd3607d87; (* arm_LSL X7 X12 32 *) + 0x8b0c00ec; (* arm_ADD X12 X7 X12 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcc7ce7; (* arm_UMULH X7 X7 X12 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0c7cc5; (* arm_MUL X5 X6 X12 *) + 0x9bcc7cc6; (* arm_UMULH X6 X6 X12 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0c00c6; (* arm_ADCS X6 X6 X12 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ad; (* arm_SUBS X13 X13 X7 *) + 0xfa0601ce; (* arm_SBCS X14 X14 X6 *) + 0xfa0501ef; (* arm_SBCS X15 X15 X5 *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xda1f018c; (* arm_SBC X12 X12 XZR *) + 0xd3607da7; (* arm_LSL X7 X13 32 *) + 0x8b0d00ed; (* arm_ADD X13 X7 X13 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcd7ce7; (* arm_UMULH X7 X7 X13 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0d7cc5; (* arm_MUL X5 X6 X13 *) + 0x9bcd7cc6; (* arm_UMULH X6 X6 X13 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0d00c6; (* arm_ADCS X6 X6 X13 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ce; (* arm_SUBS X14 X14 X7 *) + 0xfa0601ef; (* arm_SBCS X15 X15 X6 *) + 0xfa050210; (* arm_SBCS X16 X16 X5 *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda1f01ad; (* arm_SBC X13 X13 XZR *) + 0xd3607dc7; (* arm_LSL X7 X14 32 *) + 0x8b0e00ee; (* arm_ADD X14 X7 X14 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bce7ce7; (* arm_UMULH X7 X7 X14 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0e7cc5; (* arm_MUL X5 X6 X14 *) + 0x9bce7cc6; (* arm_UMULH X6 X6 X14 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0e00c6; (* arm_ADCS X6 X6 X14 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ef; (* arm_SUBS X15 X15 X7 *) + 0xfa060210; (* arm_SBCS X16 X16 X6 *) + 0xfa050231; (* arm_SBCS X17 X17 X5 *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xda1f01ce; (* arm_SBC X14 X14 XZR *) + 0xd3607de7; (* arm_LSL X7 X15 32 *) + 0x8b0f00ef; (* arm_ADD X15 X7 X15 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcf7ce7; (* arm_UMULH X7 X7 X15 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0f7cc5; (* arm_MUL X5 X6 X15 *) + 0x9bcf7cc6; (* arm_UMULH X6 X6 X15 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0f00c6; (* arm_ADCS X6 X6 X15 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb070210; (* arm_SUBS X16 X16 X7 *) + 0xfa060231; (* arm_SBCS X17 X17 X6 *) + 0xfa05018c; (* arm_SBCS X12 X12 X5 *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xda1f01ef; (* arm_SBC X15 X15 XZR *) + 0xd3607e07; (* arm_LSL X7 X16 32 *) + 0x8b1000f0; (* arm_ADD X16 X7 X16 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bd07ce7; (* arm_UMULH X7 X7 X16 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b107cc5; (* arm_MUL X5 X6 X16 *) + 0x9bd07cc6; (* arm_UMULH X6 X6 X16 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba1000c6; (* arm_ADCS X6 X6 X16 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb070231; (* arm_SUBS X17 X17 X7 *) + 0xfa06018c; (* arm_SBCS X12 X12 X6 *) + 0xfa0501ad; (* arm_SBCS X13 X13 X5 *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xda1f0210; (* arm_SBC X16 X16 XZR *) + 0xd3607e27; (* arm_LSL X7 X17 32 *) + 0x8b1100f1; (* arm_ADD X17 X7 X17 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bd17ce7; (* arm_UMULH X7 X7 X17 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b117cc5; (* arm_MUL X5 X6 X17 *) + 0x9bd17cc6; (* arm_UMULH X6 X6 X17 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba1100c6; (* arm_ADCS X6 X6 X17 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb07018c; (* arm_SUBS X12 X12 X7 *) + 0xfa0601ad; (* arm_SBCS X13 X13 X6 *) + 0xfa0501ce; (* arm_SBCS X14 X14 X5 *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xda1f0231; (* arm_SBC X17 X17 XZR *) + 0xab13018c; (* arm_ADDS X12 X12 X19 *) + 0xba1401ad; (* arm_ADCS X13 X13 X20 *) + 0xba1501ce; (* arm_ADCS X14 X14 X21 *) + 0xba1601ef; (* arm_ADCS X15 X15 X22 *) + 0xba020210; (* arm_ADCS X16 X16 X2 *) + 0xba010231; (* arm_ADCS X17 X17 X1 *) + 0x9a1f03ea; (* arm_ADC X10 XZR XZR *) + 0xb26083eb; (* arm_MOV X11 (rvalue (word 18446744069414584321)) *) + 0xab0b0193; (* arm_ADDS X19 X12 X11 *) + 0xb2407feb; (* arm_MOV X11 (rvalue (word 4294967295)) *) + 0xba0b01b4; (* arm_ADCS X20 X13 X11 *) + 0xd280002b; (* arm_MOV X11 (rvalue (word 1)) *) + 0xba0b01d5; (* arm_ADCS X21 X14 X11 *) + 0xba1f01f6; (* arm_ADCS X22 X15 XZR *) + 0xba1f0202; (* arm_ADCS X2 X16 XZR *) + 0xba1f0221; (* arm_ADCS X1 X17 XZR *) + 0xba1f014a; (* arm_ADCS X10 X10 XZR *) + 0x9a93018c; (* arm_CSEL X12 X12 X19 Condition_EQ *) + 0x9a9401ad; (* arm_CSEL X13 X13 X20 Condition_EQ *) + 0x9a9501ce; (* arm_CSEL X14 X14 X21 Condition_EQ *) + 0x9a9601ef; (* arm_CSEL X15 X15 X22 Condition_EQ *) + 0x9a820210; (* arm_CSEL X16 X16 X2 Condition_EQ *) + 0x9a810231; (* arm_CSEL X17 X17 X1 Condition_EQ *) + 0xa90637ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&96))) *) + 0xa9073fee; (* arm_STP X14 X15 SP (Immediate_Offset (iword (&112))) *) + 0xa90847f0; (* arm_STP X16 X17 SP (Immediate_Offset (iword (&128))) *) + 0xa9401be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&0))) *) + 0xa94c0fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&192))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa94123e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&16))) *) + 0xa94d0fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&208))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xa9422be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&32))) *) + 0xa94e0fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&224))) *) + 0xfa040129; (* arm_SBCS X9 X9 X4 *) + 0xfa03014a; (* arm_SBCS X10 X10 X3 *) + 0xda9f23e3; (* arm_CSETM X3 Condition_CC *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0xab0400a5; (* arm_ADDS X5 X5 X4 *) + 0xca030084; (* arm_EOR X4 X4 X3 *) + 0xba0400c6; (* arm_ADCS X6 X6 X4 *) + 0x92800024; (* arm_MOVN X4 (word 1) 0 *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0xba0400e7; (* arm_ADCS X7 X7 X4 *) + 0xba030108; (* arm_ADCS X8 X8 X3 *) + 0xba030129; (* arm_ADCS X9 X9 X3 *) + 0x9a03014a; (* arm_ADC X10 X10 X3 *) + 0xa9001b05; (* arm_STP X5 X6 X24 (Immediate_Offset (iword (&0))) *) + 0xa9012307; (* arm_STP X7 X8 X24 (Immediate_Offset (iword (&16))) *) + 0xa9022b09; (* arm_STP X9 X10 X24 (Immediate_Offset (iword (&32))) *) + 0xa9461be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&96))) *) + 0xa94c0fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&192))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa94723e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&112))) *) + 0xa94d0fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&208))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xa9482be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&128))) *) + 0xa94e0fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&224))) *) + 0xfa040129; (* arm_SBCS X9 X9 X4 *) + 0xfa03014a; (* arm_SBCS X10 X10 X3 *) + 0xda9f23e3; (* arm_CSETM X3 Condition_CC *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0xab0400a5; (* arm_ADDS X5 X5 X4 *) + 0xca030084; (* arm_EOR X4 X4 X3 *) + 0xba0400c6; (* arm_ADCS X6 X6 X4 *) + 0x92800024; (* arm_MOVN X4 (word 1) 0 *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0xba0400e7; (* arm_ADCS X7 X7 X4 *) + 0xba030108; (* arm_ADCS X8 X8 X3 *) + 0xba030129; (* arm_ADCS X9 X9 X3 *) + 0x9a03014a; (* arm_ADC X10 X10 X3 *) + 0xa9091be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&144))) *) + 0xa90a23e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&160))) *) + 0xa90b2be9; (* arm_STP X9 X10 SP (Immediate_Offset (iword (&176))) *) + 0xa94f13e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&240))) *) + 0xa9461b25; (* arm_LDP X5 X6 X25 (Immediate_Offset (iword (&96))) *) + 0x9b057c6c; (* arm_MUL X12 X3 X5 *) + 0x9bc57c6d; (* arm_UMULH X13 X3 X5 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa9472327; (* arm_LDP X7 X8 X25 (Immediate_Offset (iword (&112))) *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0x9bc77c6f; (* arm_UMULH X15 X3 X7 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c70; (* arm_UMULH X16 X3 X8 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0xa9482b29; (* arm_LDP X9 X10 X25 (Immediate_Offset (iword (&128))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c71; (* arm_UMULH X17 X3 X9 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c73; (* arm_UMULH X19 X3 X10 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b0294; (* arm_ADC X20 X20 X11 *) + 0xa95013e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&256))) *) + 0x9b057c6b; (* arm_MUL X11 X3 X5 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9a9f37f5; (* arm_CSET X21 Condition_CS *) + 0x9bc57c6b; (* arm_UMULH X11 X3 X5 *) + 0xab0b01ef; (* arm_ADDS X15 X15 X11 *) + 0x9bc67c6b; (* arm_UMULH X11 X3 X6 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9bc77c6b; (* arm_UMULH X11 X3 X7 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc87c6b; (* arm_UMULH X11 X3 X8 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc97c6b; (* arm_UMULH X11 X3 X9 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bca7c6b; (* arm_UMULH X11 X3 X10 *) + 0x9a0b02b5; (* arm_ADC X21 X21 X11 *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b01ef; (* arm_ADDS X15 X15 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9a9f37f6; (* arm_CSET X22 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b0210; (* arm_ADDS X16 X16 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b02d6; (* arm_ADC X22 X22 X11 *) + 0xa95113e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&272))) *) + 0x9b057c6b; (* arm_MUL X11 X3 X5 *) + 0xab0b0210; (* arm_ADDS X16 X16 X11 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9a9f37e2; (* arm_CSET X2 Condition_CS *) + 0x9bc57c6b; (* arm_UMULH X11 X3 X5 *) + 0xab0b0231; (* arm_ADDS X17 X17 X11 *) + 0x9bc67c6b; (* arm_UMULH X11 X3 X6 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc77c6b; (* arm_UMULH X11 X3 X7 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc87c6b; (* arm_UMULH X11 X3 X8 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bc97c6b; (* arm_UMULH X11 X3 X9 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9bca7c6b; (* arm_UMULH X11 X3 X10 *) + 0x9a0b0042; (* arm_ADC X2 X2 X11 *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b0231; (* arm_ADDS X17 X17 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0042; (* arm_ADCS X2 X2 X11 *) + 0x9a9f37e1; (* arm_CSET X1 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b0273; (* arm_ADDS X19 X19 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0042; (* arm_ADCS X2 X2 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b0021; (* arm_ADC X1 X1 X11 *) + 0xd3607d87; (* arm_LSL X7 X12 32 *) + 0x8b0c00ec; (* arm_ADD X12 X7 X12 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcc7ce7; (* arm_UMULH X7 X7 X12 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0c7cc5; (* arm_MUL X5 X6 X12 *) + 0x9bcc7cc6; (* arm_UMULH X6 X6 X12 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0c00c6; (* arm_ADCS X6 X6 X12 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ad; (* arm_SUBS X13 X13 X7 *) + 0xfa0601ce; (* arm_SBCS X14 X14 X6 *) + 0xfa0501ef; (* arm_SBCS X15 X15 X5 *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xda1f018c; (* arm_SBC X12 X12 XZR *) + 0xd3607da7; (* arm_LSL X7 X13 32 *) + 0x8b0d00ed; (* arm_ADD X13 X7 X13 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcd7ce7; (* arm_UMULH X7 X7 X13 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0d7cc5; (* arm_MUL X5 X6 X13 *) + 0x9bcd7cc6; (* arm_UMULH X6 X6 X13 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0d00c6; (* arm_ADCS X6 X6 X13 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ce; (* arm_SUBS X14 X14 X7 *) + 0xfa0601ef; (* arm_SBCS X15 X15 X6 *) + 0xfa050210; (* arm_SBCS X16 X16 X5 *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda1f01ad; (* arm_SBC X13 X13 XZR *) + 0xd3607dc7; (* arm_LSL X7 X14 32 *) + 0x8b0e00ee; (* arm_ADD X14 X7 X14 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bce7ce7; (* arm_UMULH X7 X7 X14 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0e7cc5; (* arm_MUL X5 X6 X14 *) + 0x9bce7cc6; (* arm_UMULH X6 X6 X14 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0e00c6; (* arm_ADCS X6 X6 X14 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ef; (* arm_SUBS X15 X15 X7 *) + 0xfa060210; (* arm_SBCS X16 X16 X6 *) + 0xfa050231; (* arm_SBCS X17 X17 X5 *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xda1f01ce; (* arm_SBC X14 X14 XZR *) + 0xd3607de7; (* arm_LSL X7 X15 32 *) + 0x8b0f00ef; (* arm_ADD X15 X7 X15 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcf7ce7; (* arm_UMULH X7 X7 X15 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0f7cc5; (* arm_MUL X5 X6 X15 *) + 0x9bcf7cc6; (* arm_UMULH X6 X6 X15 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0f00c6; (* arm_ADCS X6 X6 X15 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb070210; (* arm_SUBS X16 X16 X7 *) + 0xfa060231; (* arm_SBCS X17 X17 X6 *) + 0xfa05018c; (* arm_SBCS X12 X12 X5 *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xda1f01ef; (* arm_SBC X15 X15 XZR *) + 0xd3607e07; (* arm_LSL X7 X16 32 *) + 0x8b1000f0; (* arm_ADD X16 X7 X16 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bd07ce7; (* arm_UMULH X7 X7 X16 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b107cc5; (* arm_MUL X5 X6 X16 *) + 0x9bd07cc6; (* arm_UMULH X6 X6 X16 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba1000c6; (* arm_ADCS X6 X6 X16 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb070231; (* arm_SUBS X17 X17 X7 *) + 0xfa06018c; (* arm_SBCS X12 X12 X6 *) + 0xfa0501ad; (* arm_SBCS X13 X13 X5 *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xda1f0210; (* arm_SBC X16 X16 XZR *) + 0xd3607e27; (* arm_LSL X7 X17 32 *) + 0x8b1100f1; (* arm_ADD X17 X7 X17 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bd17ce7; (* arm_UMULH X7 X7 X17 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b117cc5; (* arm_MUL X5 X6 X17 *) + 0x9bd17cc6; (* arm_UMULH X6 X6 X17 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba1100c6; (* arm_ADCS X6 X6 X17 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb07018c; (* arm_SUBS X12 X12 X7 *) + 0xfa0601ad; (* arm_SBCS X13 X13 X6 *) + 0xfa0501ce; (* arm_SBCS X14 X14 X5 *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xda1f0231; (* arm_SBC X17 X17 XZR *) + 0xab13018c; (* arm_ADDS X12 X12 X19 *) + 0xba1401ad; (* arm_ADCS X13 X13 X20 *) + 0xba1501ce; (* arm_ADCS X14 X14 X21 *) + 0xba1601ef; (* arm_ADCS X15 X15 X22 *) + 0xba020210; (* arm_ADCS X16 X16 X2 *) + 0xba010231; (* arm_ADCS X17 X17 X1 *) + 0x9a1f03ea; (* arm_ADC X10 XZR XZR *) + 0xb26083eb; (* arm_MOV X11 (rvalue (word 18446744069414584321)) *) + 0xab0b0193; (* arm_ADDS X19 X12 X11 *) + 0xb2407feb; (* arm_MOV X11 (rvalue (word 4294967295)) *) + 0xba0b01b4; (* arm_ADCS X20 X13 X11 *) + 0xd280002b; (* arm_MOV X11 (rvalue (word 1)) *) + 0xba0b01d5; (* arm_ADCS X21 X14 X11 *) + 0xba1f01f6; (* arm_ADCS X22 X15 XZR *) + 0xba1f0202; (* arm_ADCS X2 X16 XZR *) + 0xba1f0221; (* arm_ADCS X1 X17 XZR *) + 0xba1f014a; (* arm_ADCS X10 X10 XZR *) + 0x9a93018c; (* arm_CSEL X12 X12 X19 Condition_EQ *) + 0x9a9401ad; (* arm_CSEL X13 X13 X20 Condition_EQ *) + 0x9a9501ce; (* arm_CSEL X14 X14 X21 Condition_EQ *) + 0x9a9601ef; (* arm_CSEL X15 X15 X22 Condition_EQ *) + 0x9a820210; (* arm_CSEL X16 X16 X2 Condition_EQ *) + 0x9a810231; (* arm_CSEL X17 X17 X1 Condition_EQ *) + 0xa906370c; (* arm_STP X12 X13 X24 (Immediate_Offset (iword (&96))) *) + 0xa9073f0e; (* arm_STP X14 X15 X24 (Immediate_Offset (iword (&112))) *) + 0xa9084710; (* arm_STP X16 X17 X24 (Immediate_Offset (iword (&128))) *) + 0xa9401b05; (* arm_LDP X5 X6 X24 (Immediate_Offset (iword (&0))) *) + 0xa9460fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&96))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa9412307; (* arm_LDP X7 X8 X24 (Immediate_Offset (iword (&16))) *) + 0xa9470fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&112))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xa9422b09; (* arm_LDP X9 X10 X24 (Immediate_Offset (iword (&32))) *) + 0xa9480fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&128))) *) + 0xfa040129; (* arm_SBCS X9 X9 X4 *) + 0xfa03014a; (* arm_SBCS X10 X10 X3 *) + 0xda9f23e3; (* arm_CSETM X3 Condition_CC *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0xab0400a5; (* arm_ADDS X5 X5 X4 *) + 0xca030084; (* arm_EOR X4 X4 X3 *) + 0xba0400c6; (* arm_ADCS X6 X6 X4 *) + 0x92800024; (* arm_MOVN X4 (word 1) 0 *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0xba0400e7; (* arm_ADCS X7 X7 X4 *) + 0xba030108; (* arm_ADCS X8 X8 X3 *) + 0xba030129; (* arm_ADCS X9 X9 X3 *) + 0x9a03014a; (* arm_ADC X10 X10 X3 *) + 0xa9001b05; (* arm_STP X5 X6 X24 (Immediate_Offset (iword (&0))) *) + 0xa9012307; (* arm_STP X7 X8 X24 (Immediate_Offset (iword (&16))) *) + 0xa9022b09; (* arm_STP X9 X10 X24 (Immediate_Offset (iword (&32))) *) + 0xa94c1be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&192))) *) + 0xa9400f04; (* arm_LDP X4 X3 X24 (Immediate_Offset (iword (&0))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa94d23e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&208))) *) + 0xa9410f04; (* arm_LDP X4 X3 X24 (Immediate_Offset (iword (&16))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xa94e2be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&224))) *) + 0xa9420f04; (* arm_LDP X4 X3 X24 (Immediate_Offset (iword (&32))) *) + 0xfa040129; (* arm_SBCS X9 X9 X4 *) + 0xfa03014a; (* arm_SBCS X10 X10 X3 *) + 0xda9f23e3; (* arm_CSETM X3 Condition_CC *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0xab0400a5; (* arm_ADDS X5 X5 X4 *) + 0xca030084; (* arm_EOR X4 X4 X3 *) + 0xba0400c6; (* arm_ADCS X6 X6 X4 *) + 0x92800024; (* arm_MOVN X4 (word 1) 0 *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0xba0400e7; (* arm_ADCS X7 X7 X4 *) + 0xba030108; (* arm_ADCS X8 X8 X3 *) + 0xba030129; (* arm_ADCS X9 X9 X3 *) + 0x9a03014a; (* arm_ADC X10 X10 X3 *) + 0xa90c1be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&192))) *) + 0xa90d23e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&208))) *) + 0xa90e2be9; (* arm_STP X9 X10 SP (Immediate_Offset (iword (&224))) *) + 0xa94913e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&144))) *) + 0xa9431b25; (* arm_LDP X5 X6 X25 (Immediate_Offset (iword (&48))) *) + 0x9b057c6c; (* arm_MUL X12 X3 X5 *) + 0x9bc57c6d; (* arm_UMULH X13 X3 X5 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa9442327; (* arm_LDP X7 X8 X25 (Immediate_Offset (iword (&64))) *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0x9bc77c6f; (* arm_UMULH X15 X3 X7 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c70; (* arm_UMULH X16 X3 X8 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0xa9452b29; (* arm_LDP X9 X10 X25 (Immediate_Offset (iword (&80))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c71; (* arm_UMULH X17 X3 X9 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c73; (* arm_UMULH X19 X3 X10 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b0294; (* arm_ADC X20 X20 X11 *) + 0xa94a13e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&160))) *) + 0x9b057c6b; (* arm_MUL X11 X3 X5 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9a9f37f5; (* arm_CSET X21 Condition_CS *) + 0x9bc57c6b; (* arm_UMULH X11 X3 X5 *) + 0xab0b01ef; (* arm_ADDS X15 X15 X11 *) + 0x9bc67c6b; (* arm_UMULH X11 X3 X6 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9bc77c6b; (* arm_UMULH X11 X3 X7 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc87c6b; (* arm_UMULH X11 X3 X8 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc97c6b; (* arm_UMULH X11 X3 X9 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bca7c6b; (* arm_UMULH X11 X3 X10 *) + 0x9a0b02b5; (* arm_ADC X21 X21 X11 *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b01ef; (* arm_ADDS X15 X15 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9a9f37f6; (* arm_CSET X22 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b0210; (* arm_ADDS X16 X16 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b02d6; (* arm_ADC X22 X22 X11 *) + 0xa94b13e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&176))) *) + 0x9b057c6b; (* arm_MUL X11 X3 X5 *) + 0xab0b0210; (* arm_ADDS X16 X16 X11 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9a9f37e2; (* arm_CSET X2 Condition_CS *) + 0x9bc57c6b; (* arm_UMULH X11 X3 X5 *) + 0xab0b0231; (* arm_ADDS X17 X17 X11 *) + 0x9bc67c6b; (* arm_UMULH X11 X3 X6 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc77c6b; (* arm_UMULH X11 X3 X7 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc87c6b; (* arm_UMULH X11 X3 X8 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bc97c6b; (* arm_UMULH X11 X3 X9 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9bca7c6b; (* arm_UMULH X11 X3 X10 *) + 0x9a0b0042; (* arm_ADC X2 X2 X11 *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b0231; (* arm_ADDS X17 X17 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0042; (* arm_ADCS X2 X2 X11 *) + 0x9a9f37e1; (* arm_CSET X1 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b0273; (* arm_ADDS X19 X19 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0042; (* arm_ADCS X2 X2 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b0021; (* arm_ADC X1 X1 X11 *) + 0xd3607d87; (* arm_LSL X7 X12 32 *) + 0x8b0c00ec; (* arm_ADD X12 X7 X12 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcc7ce7; (* arm_UMULH X7 X7 X12 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0c7cc5; (* arm_MUL X5 X6 X12 *) + 0x9bcc7cc6; (* arm_UMULH X6 X6 X12 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0c00c6; (* arm_ADCS X6 X6 X12 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ad; (* arm_SUBS X13 X13 X7 *) + 0xfa0601ce; (* arm_SBCS X14 X14 X6 *) + 0xfa0501ef; (* arm_SBCS X15 X15 X5 *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xda1f018c; (* arm_SBC X12 X12 XZR *) + 0xd3607da7; (* arm_LSL X7 X13 32 *) + 0x8b0d00ed; (* arm_ADD X13 X7 X13 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcd7ce7; (* arm_UMULH X7 X7 X13 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0d7cc5; (* arm_MUL X5 X6 X13 *) + 0x9bcd7cc6; (* arm_UMULH X6 X6 X13 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0d00c6; (* arm_ADCS X6 X6 X13 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ce; (* arm_SUBS X14 X14 X7 *) + 0xfa0601ef; (* arm_SBCS X15 X15 X6 *) + 0xfa050210; (* arm_SBCS X16 X16 X5 *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda1f01ad; (* arm_SBC X13 X13 XZR *) + 0xd3607dc7; (* arm_LSL X7 X14 32 *) + 0x8b0e00ee; (* arm_ADD X14 X7 X14 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bce7ce7; (* arm_UMULH X7 X7 X14 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0e7cc5; (* arm_MUL X5 X6 X14 *) + 0x9bce7cc6; (* arm_UMULH X6 X6 X14 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0e00c6; (* arm_ADCS X6 X6 X14 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ef; (* arm_SUBS X15 X15 X7 *) + 0xfa060210; (* arm_SBCS X16 X16 X6 *) + 0xfa050231; (* arm_SBCS X17 X17 X5 *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xda1f01ce; (* arm_SBC X14 X14 XZR *) + 0xd3607de7; (* arm_LSL X7 X15 32 *) + 0x8b0f00ef; (* arm_ADD X15 X7 X15 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcf7ce7; (* arm_UMULH X7 X7 X15 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0f7cc5; (* arm_MUL X5 X6 X15 *) + 0x9bcf7cc6; (* arm_UMULH X6 X6 X15 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0f00c6; (* arm_ADCS X6 X6 X15 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb070210; (* arm_SUBS X16 X16 X7 *) + 0xfa060231; (* arm_SBCS X17 X17 X6 *) + 0xfa05018c; (* arm_SBCS X12 X12 X5 *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xda1f01ef; (* arm_SBC X15 X15 XZR *) + 0xd3607e07; (* arm_LSL X7 X16 32 *) + 0x8b1000f0; (* arm_ADD X16 X7 X16 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bd07ce7; (* arm_UMULH X7 X7 X16 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b107cc5; (* arm_MUL X5 X6 X16 *) + 0x9bd07cc6; (* arm_UMULH X6 X6 X16 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba1000c6; (* arm_ADCS X6 X6 X16 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb070231; (* arm_SUBS X17 X17 X7 *) + 0xfa06018c; (* arm_SBCS X12 X12 X6 *) + 0xfa0501ad; (* arm_SBCS X13 X13 X5 *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xda1f0210; (* arm_SBC X16 X16 XZR *) + 0xd3607e27; (* arm_LSL X7 X17 32 *) + 0x8b1100f1; (* arm_ADD X17 X7 X17 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bd17ce7; (* arm_UMULH X7 X7 X17 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b117cc5; (* arm_MUL X5 X6 X17 *) + 0x9bd17cc6; (* arm_UMULH X6 X6 X17 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba1100c6; (* arm_ADCS X6 X6 X17 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb07018c; (* arm_SUBS X12 X12 X7 *) + 0xfa0601ad; (* arm_SBCS X13 X13 X6 *) + 0xfa0501ce; (* arm_SBCS X14 X14 X5 *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xda1f0231; (* arm_SBC X17 X17 XZR *) + 0xab13018c; (* arm_ADDS X12 X12 X19 *) + 0xba1401ad; (* arm_ADCS X13 X13 X20 *) + 0xba1501ce; (* arm_ADCS X14 X14 X21 *) + 0xba1601ef; (* arm_ADCS X15 X15 X22 *) + 0xba020210; (* arm_ADCS X16 X16 X2 *) + 0xba010231; (* arm_ADCS X17 X17 X1 *) + 0x9a1f03ea; (* arm_ADC X10 XZR XZR *) + 0xb26083eb; (* arm_MOV X11 (rvalue (word 18446744069414584321)) *) + 0xab0b0193; (* arm_ADDS X19 X12 X11 *) + 0xb2407feb; (* arm_MOV X11 (rvalue (word 4294967295)) *) + 0xba0b01b4; (* arm_ADCS X20 X13 X11 *) + 0xd280002b; (* arm_MOV X11 (rvalue (word 1)) *) + 0xba0b01d5; (* arm_ADCS X21 X14 X11 *) + 0xba1f01f6; (* arm_ADCS X22 X15 XZR *) + 0xba1f0202; (* arm_ADCS X2 X16 XZR *) + 0xba1f0221; (* arm_ADCS X1 X17 XZR *) + 0xba1f014a; (* arm_ADCS X10 X10 XZR *) + 0x9a93018c; (* arm_CSEL X12 X12 X19 Condition_EQ *) + 0x9a9401ad; (* arm_CSEL X13 X13 X20 Condition_EQ *) + 0x9a9501ce; (* arm_CSEL X14 X14 X21 Condition_EQ *) + 0x9a9601ef; (* arm_CSEL X15 X15 X22 Condition_EQ *) + 0x9a820210; (* arm_CSEL X16 X16 X2 Condition_EQ *) + 0x9a810231; (* arm_CSEL X17 X17 X1 Condition_EQ *) + 0xa90937ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&144))) *) + 0xa90a3fee; (* arm_STP X14 X15 SP (Immediate_Offset (iword (&160))) *) + 0xa90b47f0; (* arm_STP X16 X17 SP (Immediate_Offset (iword (&176))) *) + 0xa94313e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&48))) *) + 0xa94c1be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&192))) *) + 0x9b057c6c; (* arm_MUL X12 X3 X5 *) + 0x9bc57c6d; (* arm_UMULH X13 X3 X5 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0xa94d23e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&208))) *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0x9bc77c6f; (* arm_UMULH X15 X3 X7 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0x9bc87c70; (* arm_UMULH X16 X3 X8 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0xa94e2be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&224))) *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0x9bc97c71; (* arm_UMULH X17 X3 X9 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0x9bca7c73; (* arm_UMULH X19 X3 X10 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b01ad; (* arm_ADDS X13 X13 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b01ce; (* arm_ADCS X14 X14 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b0294; (* arm_ADC X20 X20 X11 *) + 0xa94413e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&64))) *) + 0x9b057c6b; (* arm_MUL X11 X3 X5 *) + 0xab0b01ce; (* arm_ADDS X14 X14 X11 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0xba0b01ef; (* arm_ADCS X15 X15 X11 *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9a9f37f5; (* arm_CSET X21 Condition_CS *) + 0x9bc57c6b; (* arm_UMULH X11 X3 X5 *) + 0xab0b01ef; (* arm_ADDS X15 X15 X11 *) + 0x9bc67c6b; (* arm_UMULH X11 X3 X6 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9bc77c6b; (* arm_UMULH X11 X3 X7 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc87c6b; (* arm_UMULH X11 X3 X8 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc97c6b; (* arm_UMULH X11 X3 X9 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bca7c6b; (* arm_UMULH X11 X3 X10 *) + 0x9a0b02b5; (* arm_ADC X21 X21 X11 *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b01ef; (* arm_ADDS X15 X15 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b0210; (* arm_ADCS X16 X16 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9a9f37f6; (* arm_CSET X22 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b0210; (* arm_ADDS X16 X16 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b02d6; (* arm_ADC X22 X22 X11 *) + 0xa94513e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&80))) *) + 0x9b057c6b; (* arm_MUL X11 X3 X5 *) + 0xab0b0210; (* arm_ADDS X16 X16 X11 *) + 0x9b067c6b; (* arm_MUL X11 X3 X6 *) + 0xba0b0231; (* arm_ADCS X17 X17 X11 *) + 0x9b077c6b; (* arm_MUL X11 X3 X7 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b087c6b; (* arm_MUL X11 X3 X8 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b097c6b; (* arm_MUL X11 X3 X9 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9b0a7c6b; (* arm_MUL X11 X3 X10 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9a9f37e2; (* arm_CSET X2 Condition_CS *) + 0x9bc57c6b; (* arm_UMULH X11 X3 X5 *) + 0xab0b0231; (* arm_ADDS X17 X17 X11 *) + 0x9bc67c6b; (* arm_UMULH X11 X3 X6 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9bc77c6b; (* arm_UMULH X11 X3 X7 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc87c6b; (* arm_UMULH X11 X3 X8 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bc97c6b; (* arm_UMULH X11 X3 X9 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9bca7c6b; (* arm_UMULH X11 X3 X10 *) + 0x9a0b0042; (* arm_ADC X2 X2 X11 *) + 0x9b057c8b; (* arm_MUL X11 X4 X5 *) + 0xab0b0231; (* arm_ADDS X17 X17 X11 *) + 0x9b067c8b; (* arm_MUL X11 X4 X6 *) + 0xba0b0273; (* arm_ADCS X19 X19 X11 *) + 0x9b077c8b; (* arm_MUL X11 X4 X7 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9b087c8b; (* arm_MUL X11 X4 X8 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9b097c8b; (* arm_MUL X11 X4 X9 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9b0a7c8b; (* arm_MUL X11 X4 X10 *) + 0xba0b0042; (* arm_ADCS X2 X2 X11 *) + 0x9a9f37e1; (* arm_CSET X1 Condition_CS *) + 0x9bc57c8b; (* arm_UMULH X11 X4 X5 *) + 0xab0b0273; (* arm_ADDS X19 X19 X11 *) + 0x9bc67c8b; (* arm_UMULH X11 X4 X6 *) + 0xba0b0294; (* arm_ADCS X20 X20 X11 *) + 0x9bc77c8b; (* arm_UMULH X11 X4 X7 *) + 0xba0b02b5; (* arm_ADCS X21 X21 X11 *) + 0x9bc87c8b; (* arm_UMULH X11 X4 X8 *) + 0xba0b02d6; (* arm_ADCS X22 X22 X11 *) + 0x9bc97c8b; (* arm_UMULH X11 X4 X9 *) + 0xba0b0042; (* arm_ADCS X2 X2 X11 *) + 0x9bca7c8b; (* arm_UMULH X11 X4 X10 *) + 0x9a0b0021; (* arm_ADC X1 X1 X11 *) + 0xd3607d87; (* arm_LSL X7 X12 32 *) + 0x8b0c00ec; (* arm_ADD X12 X7 X12 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcc7ce7; (* arm_UMULH X7 X7 X12 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0c7cc5; (* arm_MUL X5 X6 X12 *) + 0x9bcc7cc6; (* arm_UMULH X6 X6 X12 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0c00c6; (* arm_ADCS X6 X6 X12 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ad; (* arm_SUBS X13 X13 X7 *) + 0xfa0601ce; (* arm_SBCS X14 X14 X6 *) + 0xfa0501ef; (* arm_SBCS X15 X15 X5 *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xda1f018c; (* arm_SBC X12 X12 XZR *) + 0xd3607da7; (* arm_LSL X7 X13 32 *) + 0x8b0d00ed; (* arm_ADD X13 X7 X13 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcd7ce7; (* arm_UMULH X7 X7 X13 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0d7cc5; (* arm_MUL X5 X6 X13 *) + 0x9bcd7cc6; (* arm_UMULH X6 X6 X13 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0d00c6; (* arm_ADCS X6 X6 X13 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ce; (* arm_SUBS X14 X14 X7 *) + 0xfa0601ef; (* arm_SBCS X15 X15 X6 *) + 0xfa050210; (* arm_SBCS X16 X16 X5 *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda1f01ad; (* arm_SBC X13 X13 XZR *) + 0xd3607dc7; (* arm_LSL X7 X14 32 *) + 0x8b0e00ee; (* arm_ADD X14 X7 X14 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bce7ce7; (* arm_UMULH X7 X7 X14 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0e7cc5; (* arm_MUL X5 X6 X14 *) + 0x9bce7cc6; (* arm_UMULH X6 X6 X14 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0e00c6; (* arm_ADCS X6 X6 X14 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb0701ef; (* arm_SUBS X15 X15 X7 *) + 0xfa060210; (* arm_SBCS X16 X16 X6 *) + 0xfa050231; (* arm_SBCS X17 X17 X5 *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xda1f01ce; (* arm_SBC X14 X14 XZR *) + 0xd3607de7; (* arm_LSL X7 X15 32 *) + 0x8b0f00ef; (* arm_ADD X15 X7 X15 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bcf7ce7; (* arm_UMULH X7 X7 X15 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b0f7cc5; (* arm_MUL X5 X6 X15 *) + 0x9bcf7cc6; (* arm_UMULH X6 X6 X15 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba0f00c6; (* arm_ADCS X6 X6 X15 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb070210; (* arm_SUBS X16 X16 X7 *) + 0xfa060231; (* arm_SBCS X17 X17 X6 *) + 0xfa05018c; (* arm_SBCS X12 X12 X5 *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xda1f01ef; (* arm_SBC X15 X15 XZR *) + 0xd3607e07; (* arm_LSL X7 X16 32 *) + 0x8b1000f0; (* arm_ADD X16 X7 X16 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bd07ce7; (* arm_UMULH X7 X7 X16 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b107cc5; (* arm_MUL X5 X6 X16 *) + 0x9bd07cc6; (* arm_UMULH X6 X6 X16 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba1000c6; (* arm_ADCS X6 X6 X16 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb070231; (* arm_SUBS X17 X17 X7 *) + 0xfa06018c; (* arm_SBCS X12 X12 X6 *) + 0xfa0501ad; (* arm_SBCS X13 X13 X5 *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xda1f0210; (* arm_SBC X16 X16 XZR *) + 0xd3607e27; (* arm_LSL X7 X17 32 *) + 0x8b1100f1; (* arm_ADD X17 X7 X17 *) + 0xb26083e7; (* arm_MOV X7 (rvalue (word 18446744069414584321)) *) + 0x9bd17ce7; (* arm_UMULH X7 X7 X17 *) + 0xb2407fe6; (* arm_MOV X6 (rvalue (word 4294967295)) *) + 0x9b117cc5; (* arm_MUL X5 X6 X17 *) + 0x9bd17cc6; (* arm_UMULH X6 X6 X17 *) + 0xab0500e7; (* arm_ADDS X7 X7 X5 *) + 0xba1100c6; (* arm_ADCS X6 X6 X17 *) + 0x9a1f03e5; (* arm_ADC X5 XZR XZR *) + 0xeb07018c; (* arm_SUBS X12 X12 X7 *) + 0xfa0601ad; (* arm_SBCS X13 X13 X6 *) + 0xfa0501ce; (* arm_SBCS X14 X14 X5 *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xda1f0231; (* arm_SBC X17 X17 XZR *) + 0xab13018c; (* arm_ADDS X12 X12 X19 *) + 0xba1401ad; (* arm_ADCS X13 X13 X20 *) + 0xba1501ce; (* arm_ADCS X14 X14 X21 *) + 0xba1601ef; (* arm_ADCS X15 X15 X22 *) + 0xba020210; (* arm_ADCS X16 X16 X2 *) + 0xba010231; (* arm_ADCS X17 X17 X1 *) + 0x9a1f03ea; (* arm_ADC X10 XZR XZR *) + 0xb26083eb; (* arm_MOV X11 (rvalue (word 18446744069414584321)) *) + 0xab0b0193; (* arm_ADDS X19 X12 X11 *) + 0xb2407feb; (* arm_MOV X11 (rvalue (word 4294967295)) *) + 0xba0b01b4; (* arm_ADCS X20 X13 X11 *) + 0xd280002b; (* arm_MOV X11 (rvalue (word 1)) *) + 0xba0b01d5; (* arm_ADCS X21 X14 X11 *) + 0xba1f01f6; (* arm_ADCS X22 X15 XZR *) + 0xba1f0202; (* arm_ADCS X2 X16 XZR *) + 0xba1f0221; (* arm_ADCS X1 X17 XZR *) + 0xba1f014a; (* arm_ADCS X10 X10 XZR *) + 0x9a93018c; (* arm_CSEL X12 X12 X19 Condition_EQ *) + 0x9a9401ad; (* arm_CSEL X13 X13 X20 Condition_EQ *) + 0x9a9501ce; (* arm_CSEL X14 X14 X21 Condition_EQ *) + 0x9a9601ef; (* arm_CSEL X15 X15 X22 Condition_EQ *) + 0x9a820210; (* arm_CSEL X16 X16 X2 Condition_EQ *) + 0x9a810231; (* arm_CSEL X17 X17 X1 Condition_EQ *) + 0xa90c37ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&192))) *) + 0xa90d3fee; (* arm_STP X14 X15 SP (Immediate_Offset (iword (&208))) *) + 0xa90e47f0; (* arm_STP X16 X17 SP (Immediate_Offset (iword (&224))) *) + 0xa94c1be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&192))) *) + 0xa9490fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&144))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa94d23e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&208))) *) + 0xa94a0fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&160))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xa94e2be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&224))) *) + 0xa94b0fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&176))) *) + 0xfa040129; (* arm_SBCS X9 X9 X4 *) + 0xfa03014a; (* arm_SBCS X10 X10 X3 *) + 0xda9f23e3; (* arm_CSETM X3 Condition_CC *) + 0xb2407fe4; (* arm_MOV X4 (rvalue (word 4294967295)) *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0xab0400a5; (* arm_ADDS X5 X5 X4 *) + 0xca030084; (* arm_EOR X4 X4 X3 *) + 0xba0400c6; (* arm_ADCS X6 X6 X4 *) + 0x92800024; (* arm_MOVN X4 (word 1) 0 *) + 0x8a030084; (* arm_AND X4 X4 X3 *) + 0xba0400e7; (* arm_ADCS X7 X7 X4 *) + 0xba030108; (* arm_ADCS X8 X8 X3 *) + 0xba030129; (* arm_ADCS X9 X9 X3 *) + 0x9a03014a; (* arm_ADC X10 X10 X3 *) + 0xa9031b05; (* arm_STP X5 X6 X24 (Immediate_Offset (iword (&48))) *) + 0xa9042307; (* arm_STP X7 X8 X24 (Immediate_Offset (iword (&64))) *) + 0xa9052b09; (* arm_STP X9 X10 X24 (Immediate_Offset (iword (&80))) *) + 0x910483ff; (* arm_ADD SP SP (rvalue (word 288)) *) + 0xa8c16bf9; (* arm_LDP X25 X26 SP (Postimmediate_Offset (iword (&16))) *) + 0xa8c163f7; (* arm_LDP X23 X24 SP (Postimmediate_Offset (iword (&16))) *) + 0xa8c15bf5; (* arm_LDP X21 X22 SP (Postimmediate_Offset (iword (&16))) *) + 0xa8c153f3; (* arm_LDP X19 X20 SP (Postimmediate_Offset (iword (&16))) *) + 0xd65f03c0 (* arm_RET X30 *) +];; + +let P384_MONTJMIXADD_EXEC = ARM_MK_EXEC_RULE p384_montjmixadd_mc;; + +(* ------------------------------------------------------------------------- *) +(* Common supporting definitions and lemmas for component proofs. *) +(* ------------------------------------------------------------------------- *) + +let p_384 = new_definition `p_384 = 39402006196394479212279040100143613805079739270465446667948293404245721771496870329047266088258938001861606973112319`;; + +let nistp384 = define + `nistp384 = + (integer_mod_ring p_384, + ring_neg (integer_mod_ring p_384) (&3), + &b_384:int)`;; + +let nistp384_encode = new_definition + `nistp384_encode = montgomery_encode(384,p_384)`;; + +let swlemma = WORD_RULE + `word_add (word_shl x 32) x:int64 = word(4294967297 * val x)`;; + +let mmlemma = prove + (`!h (l:int64) (x:int64). + &2 pow 64 * &h + &(val(l:int64)):real = + &18446744069414584321 * + &(val(word_add (word_shl x 32) x:int64)) + ==> &2 pow 64 * &h + &(val(x:int64)):real = + &18446744069414584321 * + &(val(word_add (word_shl x 32) x:int64))`, + REPEAT GEN_TAC THEN REWRITE_TAC[REAL_OF_NUM_CLAUSES] THEN + REPEAT STRIP_TAC THEN FIRST_ASSUM(SUBST1_TAC o SYM) THEN + AP_TERM_TAC THEN AP_TERM_TAC THEN + REWRITE_TAC[GSYM VAL_CONG; DIMINDEX_64] THEN FIRST_X_ASSUM(MATCH_MP_TAC o + MATCH_MP (NUMBER_RULE + `p * h + l:num = y ==> (y == x) (mod p) ==> (x == l) (mod p)`)) THEN + REWRITE_TAC[WORD_RULE + `word_add (word_shl x 32) x:int64 = word(4294967297 * val x)`] THEN + REWRITE_TAC[CONG; VAL_WORD; DIMINDEX_64] THEN CONV_TAC MOD_DOWN_CONV THEN + REWRITE_TAC[GSYM CONG] THEN MATCH_MP_TAC(NUMBER_RULE + `(a * b == 1) (mod p) ==> (a * (b * x) == x) (mod p)`) THEN + REWRITE_TAC[CONG] THEN CONV_TAC NUM_REDUCE_CONV);; + +let nintlemma = prove + (`&(num_of_int(x rem &p_384)) = x rem &p_384`, + MATCH_MP_TAC INT_OF_NUM_OF_INT THEN MATCH_MP_TAC INT_REM_POS THEN + REWRITE_TAC[INT_OF_NUM_EQ; p_384] THEN CONV_TAC NUM_REDUCE_CONV);; + +let unilemma0 = prove + (`x = a MOD p_384 ==> x < p_384 /\ &x = &a rem &p_384`, + REWRITE_TAC[INT_OF_NUM_REM; p_384] THEN ARITH_TAC);; + +let unilemma1 = prove + (`&x = a rem &p_384 ==> x < p_384 /\ &x = a rem &p_384`, + SIMP_TAC[GSYM INT_OF_NUM_LT; INT_LT_REM_EQ; p_384] THEN INT_ARITH_TAC);; + +let unilemma2 = prove + (`X = num_of_int(x rem &p_384) ==> X < p_384 /\ &X = x rem &p_384`, + DISCH_THEN SUBST1_TAC THEN + REWRITE_TAC[GSYM INT_OF_NUM_LT; nintlemma; INT_LT_REM_EQ] THEN + REWRITE_TAC[INT_OF_NUM_LT; p_384] THEN CONV_TAC NUM_REDUCE_CONV);; + +let lemont = prove + (`(&i * x * y) rem &p_384 = (&i * x rem &p_384 * y rem &p_384) rem &p_384`, + CONV_TAC INT_REM_DOWN_CONV THEN REWRITE_TAC[]);; + +let pumont = prove + (`(&(inverse_mod p_384 (2 EXP 384)) * + (&2 pow 384 * x) rem &p_384 * (&2 pow 384 * y) rem &p_384) rem &p_384 = + (&2 pow 384 * x * y) rem &p_384`, + CONV_TAC INT_REM_DOWN_CONV THEN REWRITE_TAC[INT_REM_EQ] THEN + MATCH_MP_TAC(INTEGER_RULE + `(i * t:int == &1) (mod p) + ==> (i * (t * x) * (t * y) == t * x * y) (mod p)`) THEN + REWRITE_TAC[GSYM num_congruent; INT_OF_NUM_CLAUSES] THEN + REWRITE_TAC[INVERSE_MOD_LMUL_EQ; COPRIME_REXP; COPRIME_2; p_384] THEN + CONV_TAC NUM_REDUCE_CONV);; + +let lvs = + ["x_1",[`X25`;`0`]; + "y_1",[`X25`;`48`]; + "z_1",[`X25`;`96`]; + "x_2",[`X26`;`0`]; + "y_2",[`X26`;`48`]; + "x_3",[`X24`;`0`]; + "y_3",[`X24`;`48`]; + "z_3",[`X24`;`96`]; + "zp2",[`SP`;`0`]; + "ww",[`SP`;`0`]; + "yd",[`SP`;`48`]; + "y2a",[`SP`;`48`]; + "x2a",[`SP`;`96`]; + "zzx2",[`SP`;`96`]; + "zz",[`SP`;`144`]; + "t1",[`SP`;`144`]; + "t2",[`SP`;`192`]; + "zzx1",[`SP`;`192`]; + "xd",[`SP`;`240`]];; + +(* ------------------------------------------------------------------------- *) +(* Instances of montsqr. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_MONTSQR_P384_TAC = + ARM_MACRO_SIM_ABBREV_TAC p384_montjmixadd_mc 215 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1. + !a. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) t = a + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0x2ef0) (word_add (read p3 t) (word n3),48) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p384_montjmixadd_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X24 s = read X24 t /\ + read X25 s = read X25 t /\ + read X26 s = read X26 t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) s = + a) + (\s. read PC s = pcout /\ + (a EXP 2 <= 2 EXP 384 * p_384 + ==> read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 6)) s = + (inverse_mod p_384 (2 EXP 384) * a EXP 2) MOD p_384)) + (MAYCHANGE [PC; X2; X3; X4; X5; X6; X7; X8; X9; X10; + X11; X12; X13; X14; X15; X16; X17; X19; X20] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 6)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + (*** Globalize the a EXP 2 <= 2 EXP 384 * p_384 assumption ***) + + ASM_CASES_TAC `a EXP 2 <= 2 EXP 384 * p_384` THENL + [ASM_REWRITE_TAC[]; ARM_SIM_TAC P384_MONTJMIXADD_EXEC (1--215)] THEN + ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "x_" o lhand o concl) THEN + + (*** Main squaring block ***) + + ARM_ACCSTEPS_TAC P384_MONTJMIXADD_EXEC (1--93) (1--93) THEN + + (*** Main Montgomery reduction block ***) + + ARM_ACCSTEPS_TAC P384_MONTJMIXADD_EXEC + (allpairs (fun i j -> 16 * i + j) (0--5) + [97;99;101;102;104;105;106;107;108;109] @ + (190--196)) + (94--196) THEN + RULE_ASSUM_TAC(REWRITE_RULE[ADD_CLAUSES; COND_SWAP; GSYM WORD_BITVAL]) THEN + RULE_ASSUM_TAC(fun th -> try MATCH_MP mmlemma th with Failure _ -> th) THEN + + (*** Key properties of pre-reduced result ***) + + ABBREV_TAC + `t = bignum_of_wordlist + [sum_s190; sum_s191; sum_s192; sum_s193; sum_s194; sum_s195; + word(bitval carry_s195)]` THEN + SUBGOAL_THEN + `t < 2 * p_384 /\ (2 EXP 384 * t == a EXP 2) (mod p_384)` + STRIP_ASSUME_TAC THENL + [RULE_ASSUM_TAC(REWRITE_RULE[VAL_WORD_BITVAL]) THEN + ACCUMULATOR_POP_ASSUM_LIST + (STRIP_ASSUME_TAC o end_itlist CONJ o DECARRY_RULE) THEN + CONJ_TAC THENL + [FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP (ARITH_RULE + `ab <= 2 EXP 384 * p + ==> 2 EXP 384 * t < ab + 2 EXP 384 * p ==> t < 2 * p`)) THEN + MAP_EVERY EXPAND_TAC ["a"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + REWRITE_TAC[p_384; REAL_ARITH `a:real < b + c <=> a - b < c`] THEN + ASM_REWRITE_TAC[VAL_WORD_BITVAL] THEN BOUNDER_TAC[]; + REWRITE_TAC[REAL_CONGRUENCE; p_384] THEN CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["a"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ASM_REWRITE_TAC[VAL_WORD_BITVAL] THEN REAL_INTEGER_TAC]; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Final correction stage ***) + + ARM_ACCSTEPS_TAC P384_MONTJMIXADD_EXEC + [198;200;202;203;204;205;206] (197--215) THEN + RULE_ASSUM_TAC(REWRITE_RULE + [GSYM WORD_BITVAL; COND_SWAP; REAL_BITVAL_NOT]) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + TRANS_TAC EQ_TRANS `t MOD p_384` THEN CONJ_TAC THENL + [ALL_TAC; + REWRITE_TAC[GSYM CONG] THEN FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP + (NUMBER_RULE + `(e * t == a EXP 2) (mod p) + ==> (e * i == 1) (mod p) ==> (t == i * a EXP 2) (mod p)`)) THEN + REWRITE_TAC[INVERSE_MOD_RMUL_EQ; COPRIME_REXP; COPRIME_2] THEN + REWRITE_TAC[p_384] THEN CONV_TAC NUM_REDUCE_CONV] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC EQUAL_FROM_CONGRUENT_MOD_MOD THEN + MAP_EVERY EXISTS_TAC + [`384`; `if t < p_384 then &t:real else &t - &p_384`] THEN + REPEAT CONJ_TAC THENL + [REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN BOUNDER_TAC[]; + REWRITE_TAC[p_384] THEN ARITH_TAC; + REWRITE_TAC[p_384] THEN ARITH_TAC; + ALL_TAC; + ASM_SIMP_TAC[MOD_CASES] THEN + GEN_REWRITE_TAC LAND_CONV [COND_RAND] THEN + SIMP_TAC[REAL_OF_NUM_SUB; GSYM NOT_LT]] THEN + SUBGOAL_THEN + `val(word_add (word(bitval carry_s195)) + (word(bitval carry_s205)):int64) = 0 <=> + t < p_384` + SUBST_ALL_TAC THENL + [REWRITE_TAC[VAL_WORD_ADD_CASES; VAL_WORD_BITVAL; DIMINDEX_64] THEN + SIMP_TAC[ADD_EQ_0; BITVAL_EQ_0; BITVAL_BOUND; ARITH_RULE + `a <= 1 /\ b <= 1 ==> a + b < 2 EXP 64`] THEN + EXPAND_TAC "t" THEN REWRITE_TAC[bignum_of_wordlist; VAL_WORD_BITVAL] THEN + ASM_CASES_TAC `carry_s195:bool` THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THENL + [REWRITE_TAC[p_384] THEN ARITH_TAC; ALL_TAC] THEN + REWRITE_TAC[ADD_CLAUSES; MULT_CLAUSES; GSYM NOT_LE] THEN AP_TERM_TAC THEN + MATCH_MP_TAC FLAG_FROM_CARRY_LE THEN EXISTS_TAC `384` THEN + REWRITE_TAC[bignum_of_wordlist; MULT_CLAUSES; ADD_CLAUSES] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; p_384] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ALL_TAC] THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[] THEN EXPAND_TAC "t" THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist; p_384] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + ASM_REWRITE_TAC[BITVAL_CLAUSES; VAL_WORD_BITVAL] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instances of montmul. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_MONTMUL_P384_TAC = + ARM_MACRO_SIM_ABBREV_TAC p384_montjmixadd_mc 271 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1 p2 n2. + !a. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) t = a + ==> + !b. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 6)) t = b + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0x2ef0) (word_add (read p3 t) (word n3),48) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p384_montjmixadd_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X24 s = read X24 t /\ + read X25 s = read X25 t /\ + read X26 s = read X26 t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) s = + a /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 6)) s = + b) + (\s. read PC s = pcout /\ + (a * b <= 2 EXP 384 * p_384 + ==> read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 6)) s = + (inverse_mod p_384 (2 EXP 384) * a * b) MOD p_384)) + (MAYCHANGE [PC; X1; X2; X3; X4; X5; X6; X7; X8; X9; + X10; X11; X12; X13; X14; X15; X16; X17; X19; + X20; X21; X22] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 6)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + (*** Globalize the a * b <= 2 EXP 384 * p_384 assumption ***) + + ASM_CASES_TAC `a * b <= 2 EXP 384 * p_384` THENL + [ASM_REWRITE_TAC[]; ARM_SIM_TAC P384_MONTJMIXADD_EXEC (1--271)] THEN + ENSURES_INIT_TAC "s0" THEN + + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "y_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "x_" o lhand o concl) THEN + + (*** Main multiplication block ***) + + ARM_ACCSTEPS_TAC P384_MONTJMIXADD_EXEC (1--149) (1--149) THEN + + (*** Main Montgomery reduction block ***) + + ARM_ACCSTEPS_TAC P384_MONTJMIXADD_EXEC + (allpairs (fun i j -> 16 * i + j) (0--5) + [153;155;157;158;160;161;162;163;164;165] @ + (246--252)) + (150--252) THEN + RULE_ASSUM_TAC(REWRITE_RULE[ADD_CLAUSES; COND_SWAP; GSYM WORD_BITVAL]) THEN + RULE_ASSUM_TAC(fun th -> try MATCH_MP mmlemma th with Failure _ -> th) THEN + + (*** Key properties of pre-reduced result ***) + + ABBREV_TAC + `t = bignum_of_wordlist + [sum_s246; sum_s247; sum_s248; sum_s249; sum_s250; sum_s251; + word(bitval carry_s251)]` THEN + SUBGOAL_THEN + `t < 2 * p_384 /\ (2 EXP 384 * t == a * b) (mod p_384)` + STRIP_ASSUME_TAC THENL + [RULE_ASSUM_TAC(REWRITE_RULE[VAL_WORD_BITVAL]) THEN + ACCUMULATOR_POP_ASSUM_LIST + (STRIP_ASSUME_TAC o end_itlist CONJ o DECARRY_RULE) THEN + CONJ_TAC THENL + [FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP (ARITH_RULE + `ab <= 2 EXP 384 * p + ==> 2 EXP 384 * t < ab + 2 EXP 384 * p ==> t < 2 * p`)) THEN + MAP_EVERY EXPAND_TAC ["a"; "b"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + REWRITE_TAC[p_384; REAL_ARITH `a:real < b + c <=> a - b < c`] THEN + ASM_REWRITE_TAC[VAL_WORD_BITVAL] THEN BOUNDER_TAC[]; + REWRITE_TAC[REAL_CONGRUENCE; p_384] THEN CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["a"; "b"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ASM_REWRITE_TAC[VAL_WORD_BITVAL] THEN REAL_INTEGER_TAC]; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Final correction stage ***) + + ARM_ACCSTEPS_TAC P384_MONTJMIXADD_EXEC + [254;256;258;259;260;261;262] (253--271) THEN + RULE_ASSUM_TAC(REWRITE_RULE + [GSYM WORD_BITVAL; COND_SWAP; REAL_BITVAL_NOT]) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + TRANS_TAC EQ_TRANS `t MOD p_384` THEN CONJ_TAC THENL + [ALL_TAC; + REWRITE_TAC[GSYM CONG] THEN FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP + (NUMBER_RULE + `(e * t == a * b) (mod p) + ==> (e * i == 1) (mod p) ==> (t == i * a * b) (mod p)`)) THEN + REWRITE_TAC[INVERSE_MOD_RMUL_EQ; COPRIME_REXP; COPRIME_2] THEN + REWRITE_TAC[p_384] THEN CONV_TAC NUM_REDUCE_CONV] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC EQUAL_FROM_CONGRUENT_MOD_MOD THEN + MAP_EVERY EXISTS_TAC + [`384`; `if t < p_384 then &t:real else &t - &p_384`] THEN + REPEAT CONJ_TAC THENL + [REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN BOUNDER_TAC[]; + REWRITE_TAC[p_384] THEN ARITH_TAC; + REWRITE_TAC[p_384] THEN ARITH_TAC; + ALL_TAC; + ASM_SIMP_TAC[MOD_CASES] THEN + GEN_REWRITE_TAC LAND_CONV [COND_RAND] THEN + SIMP_TAC[REAL_OF_NUM_SUB; GSYM NOT_LT]] THEN + SUBGOAL_THEN + `val(word_add (word(bitval carry_s251)) + (word(bitval carry_s261)):int64) = 0 <=> + t < p_384` + SUBST_ALL_TAC THENL + [REWRITE_TAC[VAL_WORD_ADD_CASES; VAL_WORD_BITVAL; DIMINDEX_64] THEN + SIMP_TAC[ADD_EQ_0; BITVAL_EQ_0; BITVAL_BOUND; ARITH_RULE + `a <= 1 /\ b <= 1 ==> a + b < 2 EXP 64`] THEN + EXPAND_TAC "t" THEN REWRITE_TAC[bignum_of_wordlist; VAL_WORD_BITVAL] THEN + ASM_CASES_TAC `carry_s251:bool` THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THENL + [REWRITE_TAC[p_384] THEN ARITH_TAC; ALL_TAC] THEN + REWRITE_TAC[ADD_CLAUSES; MULT_CLAUSES; GSYM NOT_LE] THEN AP_TERM_TAC THEN + MATCH_MP_TAC FLAG_FROM_CARRY_LE THEN EXISTS_TAC `384` THEN + REWRITE_TAC[bignum_of_wordlist; MULT_CLAUSES; ADD_CLAUSES] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; p_384] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ALL_TAC] THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[] THEN EXPAND_TAC "t" THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist; p_384] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + ASM_REWRITE_TAC[BITVAL_CLAUSES; VAL_WORD_BITVAL] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instances of sub. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_SUB_P384_TAC = + ARM_MACRO_SIM_ABBREV_TAC p384_montjmixadd_mc 27 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 6)) t = n + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0x2ef0) (word_add (read p3 t) (word n3),48) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p384_montjmixadd_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X24 s = read X24 t /\ + read X25 s = read X25 t /\ + read X26 s = read X26 t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 6)) s = + n) + (\s. read PC s = pcout /\ + (m < p_384 /\ n < p_384 + ==> &(read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 6)) s) = (&m - &n) rem &p_384)) + (MAYCHANGE [PC; X3; X4; X5; X6; X7; X8; X9; X10] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 6)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "m_" o lhand o concl) THEN + + ARM_ACCSTEPS_TAC P384_MONTJMIXADD_EXEC (1--12) (1--12) THEN + + SUBGOAL_THEN `carry_s12 <=> m < n` SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN EXISTS_TAC `384` THEN + MAP_EVERY EXPAND_TAC ["m"; "n"] THEN REWRITE_TAC[GSYM REAL_OF_NUM_ADD] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_MUL; GSYM REAL_OF_NUM_POW] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ALL_TAC] THEN + + ARM_STEPS_TAC P384_MONTJMIXADD_EXEC [13] THEN + RULE_ASSUM_TAC(REWRITE_RULE[WORD_UNMASK_64; NOT_LE]) THEN + + ARM_ACCSTEPS_TAC P384_MONTJMIXADD_EXEC (14--27) (14--27) THEN + + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN STRIP_TAC THEN + CONV_TAC(LAND_CONV(RAND_CONV BIGNUM_EXPAND_CONV)) THEN + ASM_REWRITE_TAC[] THEN DISCARD_STATE_TAC "s27" THEN + + CONV_TAC SYM_CONV THEN MATCH_MP_TAC INT_REM_UNIQ THEN + EXISTS_TAC `--(&(bitval(m < n))):int` THEN REWRITE_TAC[INT_ABS_NUM] THEN + REWRITE_TAC[INT_ARITH `m - n:int = --b * p + z <=> z = b * p + m - n`] THEN + REWRITE_TAC[int_eq; int_le; int_lt] THEN + REWRITE_TAC[int_add_th; int_mul_th; int_of_num_th; int_sub_th] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_ADD; GSYM REAL_OF_NUM_MUL; + GSYM REAL_OF_NUM_POW] THEN + MATCH_MP_TAC(REAL_ARITH + `!t:real. p < t /\ + (&0 <= a /\ a < p) /\ + (&0 <= z /\ z < t) /\ + ((&0 <= z /\ z < t) /\ (&0 <= a /\ a < t) ==> z = a) + ==> z = a /\ &0 <= z /\ z < p`) THEN + EXISTS_TAC `(&2:real) pow 384` THEN + + CONJ_TAC THENL [REWRITE_TAC[p_384] THEN REAL_ARITH_TAC; ALL_TAC] THEN + CONJ_TAC THENL + [MAP_EVERY UNDISCH_TAC [`m < p_384`; `n < p_384`] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_LT] THEN + ASM_CASES_TAC `&m:real < &n` THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + POP_ASSUM MP_TAC THEN REWRITE_TAC[p_384] THEN REAL_ARITH_TAC; + ALL_TAC] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; STRIP_TAC] THEN + + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`384`; `&0:real`] THEN + ASM_REWRITE_TAC[] THEN + CONJ_TAC THENL [REAL_INTEGER_TAC; ALL_TAC] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + REWRITE_TAC[WORD_AND_MASK] THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC WORD_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["m"; "n"] THEN REWRITE_TAC[GSYM REAL_OF_NUM_ADD] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_MUL; GSYM REAL_OF_NUM_POW; p_384] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + CONV_TAC(RAND_CONV REAL_POLY_CONV) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instances of amontsqr. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_AMONTSQR_P384_TAC = + ARM_MACRO_SIM_ABBREV_TAC p384_montjmixadd_mc 209 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1. + !a. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) t = a + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0x2ef0) (word_add (read p3 t) (word n3),48) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p384_montjmixadd_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X24 s = read X24 t /\ + read X25 s = read X25 t /\ + read X26 s = read X26 t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) s = + a) + (\s. read PC s = pcout /\ + read(memory :> bytes(word_add (read p3 t) (word n3),8 * 6)) s + < 2 EXP 384 /\ + (read(memory :> bytes(word_add (read p3 t) (word n3),8 * 6)) s == + inverse_mod p_384 (2 EXP 384) * a EXP 2) (mod p_384)) + (MAYCHANGE [PC; X2; X3; X4; X5; X6; X7; X8; X9; X10; + X11; X12; X13; X14; X15; X16; X17; X19; X20] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 6)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "x_" o lhand o concl) THEN + + (*** Main squaring block ***) + + ARM_ACCSTEPS_TAC P384_MONTJMIXADD_EXEC (1--93) (1--93) THEN + + (*** Main Montgomery reduction block ***) + + ARM_ACCSTEPS_TAC P384_MONTJMIXADD_EXEC + (allpairs (fun i j -> 16 * i + j) (0--5) + [97;99;101;102;104;105;106;107;108;109] @ + (190--196)) + (94--196) THEN + RULE_ASSUM_TAC(REWRITE_RULE[ADD_CLAUSES; COND_SWAP; GSYM WORD_BITVAL]) THEN + RULE_ASSUM_TAC(fun th -> try MATCH_MP mmlemma th with Failure _ -> th) THEN + + (*** Key properties of pre-reduced result ***) + + ABBREV_TAC + `t = bignum_of_wordlist + [sum_s190; sum_s191; sum_s192; sum_s193; sum_s194; sum_s195; + word(bitval carry_s195)]` THEN + SUBGOAL_THEN + `t < 2 EXP 384 + p_384 /\ (2 EXP 384 * t == a EXP 2) (mod p_384)` + STRIP_ASSUME_TAC THENL + [RULE_ASSUM_TAC(REWRITE_RULE[VAL_WORD_BITVAL]) THEN + ACCUMULATOR_POP_ASSUM_LIST + (STRIP_ASSUME_TAC o end_itlist CONJ o DECARRY_RULE) THEN + CONJ_TAC THENL + [MATCH_MP_TAC(ARITH_RULE + `2 EXP 384 * t <= (2 EXP 384 - 1) EXP 2 + (2 EXP 384 - 1) * p + ==> t < 2 EXP 384 + p`) THEN + REWRITE_TAC[p_384] THEN CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["a"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + REWRITE_TAC[p_384; REAL_ARITH `a:real < b + c <=> a - b < c`] THEN + ASM_REWRITE_TAC[VAL_WORD_BITVAL] THEN BOUNDER_TAC[]; + REWRITE_TAC[REAL_CONGRUENCE; p_384] THEN CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["a"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ASM_REWRITE_TAC[VAL_WORD_BITVAL] THEN REAL_INTEGER_TAC]; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Final correction stage ***) + + ARM_ACCSTEPS_TAC P384_MONTJMIXADD_EXEC (201--206) (197--209) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONJ_TAC THENL + [CONV_TAC(ONCE_DEPTH_CONV BIGNUM_EXPAND_CONV) THEN + ASM_REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN BOUNDER_TAC[]; + ALL_TAC] THEN + + FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP + (NUMBER_RULE + `(e * t == ab) (mod p) + ==> (e * i == 1) (mod p) /\ (s == t) (mod p) + ==> (s == i * ab) (mod p)`)) THEN + REWRITE_TAC[INVERSE_MOD_RMUL_EQ; COPRIME_REXP; COPRIME_2] THEN + CONJ_TAC THENL + [REWRITE_TAC[p_384] THEN CONV_TAC NUM_REDUCE_CONV; ALL_TAC] THEN + SUBGOAL_THEN `carry_s195 <=> 2 EXP 384 <= t` SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LE THEN EXISTS_TAC `384` THEN + EXPAND_TAC "t" THEN + REWRITE_TAC[p_384; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + REWRITE_TAC[VAL_WORD_BITVAL] THEN BOUNDER_TAC[]; + ABBREV_TAC `b <=> 2 EXP 384 <= t`] THEN + MATCH_MP_TAC(NUMBER_RULE `!b:num. x + b * p = y ==> (x == y) (mod p)`) THEN + EXISTS_TAC `bitval b` THEN REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN + ONCE_REWRITE_TAC[REAL_ARITH `a + b:real = c <=> c - b = a`] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`384`; `&0:real`] THEN CONJ_TAC THENL + [EXPAND_TAC "b" THEN UNDISCH_TAC `t < 2 EXP 384 + p_384` THEN + REWRITE_TAC[bitval; p_384; GSYM REAL_OF_NUM_CLAUSES] THEN REAL_ARITH_TAC; + REWRITE_TAC[INTEGER_CLOSED]] THEN + CONJ_TAC THENL + [CONV_TAC(ONCE_DEPTH_CONV BIGNUM_EXPAND_CONV) THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN BOUNDER_TAC[]; + ALL_TAC] THEN + CONV_TAC(ONCE_DEPTH_CONV BIGNUM_EXPAND_CONV) THEN + EXPAND_TAC "t" THEN REWRITE_TAC[bignum_of_wordlist] THEN + ASM_REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN + ACCUMULATOR_POP_ASSUM_LIST (MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + BOOL_CASES_TAC `b:bool` THEN REWRITE_TAC[BITVAL_CLAUSES; p_384] THEN + CONV_TAC WORD_REDUCE_CONV THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Overall point operation proof. *) +(* ------------------------------------------------------------------------- *) + +let P384_MONTJMIXADD_CORRECT = time prove + (`!p3 p1 t1 p2 t2 pc stackpointer. + aligned 16 stackpointer /\ + ALLPAIRS nonoverlapping + [(p3,144); (stackpointer,288)] + [(word pc,0x2ef0); (p1,144); (p2,96)] /\ + nonoverlapping (p3,144) (stackpointer,288) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p384_montjmixadd_mc /\ + read PC s = word(pc + 0x14) /\ + read SP s = stackpointer /\ + C_ARGUMENTS [p3; p1; p2] s /\ + bignum_triple_from_memory (p1,6) s = t1 /\ + bignum_pair_from_memory (p2,6) s = t2) + (\s. read PC s = word (pc + 0x2ed8) /\ + (!x1 y1 z1 x2 y2 z2. + ~(z1 = &0) /\ z2 = &1 /\ + ~(jacobian_eq (integer_mod_ring p_384) + (x1,y1,z1) (x2,y2,z2)) /\ + ~(jacobian_eq (integer_mod_ring p_384) + (jacobian_neg nistp384 (x1,y1,z1)) + (x2,y2,z2)) /\ + t1 = tripled nistp384_encode (x1,y1,z1) /\ + t2 = paired nistp384_encode (x2,y2) + ==> bignum_triple_from_memory(p3,6) s = + tripled nistp384_encode + (jacobian_add nistp384 (x1,y1,z1) (x2,y2,z2)))) + (MAYCHANGE [PC; X0; X1; X2; X3; X4; X5; X6; X7; X8; X9; X10; + X11; X12; X13; X14; X15; X16; X17; X19; X20; + X21; X22; X23; X24; X25; X26] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,144); + memory :> bytes(stackpointer,288)])`, + REWRITE_TAC[FORALL_PAIR_THM] THEN + MAP_EVERY X_GEN_TAC + [`p3:int64`; `p1:int64`; `x1:num`; `y1:num`; `z1:num`; `p2:int64`; + `x2:num`; `y2:num`; `pc:num`; `stackpointer:int64`] THEN + REWRITE_TAC[ALLPAIRS; ALL; NONOVERLAPPING_CLAUSES] THEN STRIP_TAC THEN + REWRITE_TAC[C_ARGUMENTS; SOME_FLAGS; PAIR_EQ; + bignum_pair_from_memory; bignum_triple_from_memory] THEN + CONV_TAC(ONCE_DEPTH_CONV NUM_MULT_CONV) THEN + CONV_TAC(ONCE_DEPTH_CONV NORMALIZE_RELATIVE_ADDRESS_CONV) THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + + LOCAL_AMONTSQR_P384_TAC 3 ["zp2";"z_1"] THEN + LOCAL_MONTMUL_P384_TAC 0 ["y2a";"z_1";"y_2"] THEN + LOCAL_MONTMUL_P384_TAC 0 ["x2a";"zp2";"x_2"] THEN + LOCAL_MONTMUL_P384_TAC 0 ["y2a";"zp2";"y2a"] THEN + LOCAL_SUB_P384_TAC 0 ["xd";"x2a";"x_1"] THEN + LOCAL_SUB_P384_TAC 0 ["yd";"y2a";"y_1"] THEN + LOCAL_AMONTSQR_P384_TAC 0 ["zz";"xd"] THEN + LOCAL_MONTSQR_P384_TAC 0 ["ww";"yd"] THEN + LOCAL_MONTMUL_P384_TAC 0 ["zzx1";"zz";"x_1"] THEN + LOCAL_MONTMUL_P384_TAC 0 ["zzx2";"zz";"x2a"] THEN + LOCAL_SUB_P384_TAC 0 ["x_3";"ww";"zzx1"] THEN + LOCAL_SUB_P384_TAC 0 ["t1";"zzx2";"zzx1"] THEN + LOCAL_MONTMUL_P384_TAC 0 ["z_3";"xd";"z_1"] THEN + LOCAL_SUB_P384_TAC 0 ["x_3";"x_3";"zzx2"] THEN + LOCAL_SUB_P384_TAC 0 ["t2";"zzx1";"x_3"] THEN + LOCAL_MONTMUL_P384_TAC 0 ["t1";"t1";"y_1"] THEN + LOCAL_MONTMUL_P384_TAC 0 ["t2";"yd";"t2"] THEN + LOCAL_SUB_P384_TAC 0 ["y_3";"t2";"t1"] THEN + + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + DISCARD_STATE_TAC "s21" THEN + DISCARD_MATCHING_ASSUMPTIONS [`nonoverlapping_modulo a b c`] THEN + + MAP_EVERY X_GEN_TAC + [`x1':int`; `y1':int`; `z1':int`; `x2':int`; `y2':int`; `z2':int`] THEN + DISCH_THEN(CONJUNCTS_THEN2 ASSUME_TAC MP_TAC) THEN + GEN_REWRITE_TAC I [IMP_CONJ] THEN DISCH_THEN SUBST_ALL_TAC THEN + REPLICATE_TAC 2 (DISCH_THEN(CONJUNCTS_THEN2 ASSUME_TAC MP_TAC)) THEN + REWRITE_TAC[tripled; paired; nistp384_encode; montgomery_encode; PAIR_EQ] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN + (STRIP_ASSUME_TAC o MATCH_MP unilemma2)) THEN + + REPEAT(FIRST_X_ASSUM(MP_TAC o check (is_imp o concl))) THEN + REPEAT(ANTS_TAC THENL + [REWRITE_TAC[p_384] THEN RULE_ASSUM_TAC(REWRITE_RULE[p_384]) THEN + CONV_TAC NUM_REDUCE_CONV THEN ASM BOUNDER_TAC[]; + (DISCH_THEN(STRIP_ASSUME_TAC o MATCH_MP unilemma0) ORELSE + DISCH_THEN(STRIP_ASSUME_TAC o MATCH_MP unilemma1))]) THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o GEN_REWRITE_RULE I [GSYM NOT_LE])) THEN + + RULE_ASSUM_TAC(REWRITE_RULE + [num_congruent; GSYM INT_OF_NUM_CLAUSES; GSYM INT_OF_NUM_REM]) THEN + RULE_ASSUM_TAC(REWRITE_RULE[GSYM INT_REM_EQ]) THEN + RULE_ASSUM_TAC(ONCE_REWRITE_RULE[GSYM INT_SUB_REM; GSYM INT_ADD_REM]) THEN + RULE_ASSUM_TAC(REWRITE_RULE[INT_POW_2]) THEN + RULE_ASSUM_TAC(GEN_REWRITE_RULE (RAND_CONV o TRY_CONV) [lemont]) THEN + + ASM_REWRITE_TAC[jacobian_add; nistp384] THEN + ASM_REWRITE_TAC[GSYM nistp384] THEN + REWRITE_TAC[INTEGER_MOD_RING_CLAUSES] THEN + CONV_TAC INT_REDUCE_CONV THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN + CONV_TAC INT_REM_DOWN_CONV THEN + REWRITE_TAC[tripled; paired; nistp384_encode; montgomery_encode] THEN + REWRITE_TAC[PAIR_EQ; GSYM INT_OF_NUM_EQ; nintlemma] THEN + CONV_TAC INT_REM_DOWN_CONV THEN + + ASM_REWRITE_TAC[pumont; INT_REM_REM; GSYM INT_ADD_LDISTRIB; + GSYM INT_ADD_LDISTRIB; GSYM INT_SUB_LDISTRIB; + INT_SUB_REM; INT_ADD_REM] THEN + + REPEAT CONJ_TAC THEN AP_THM_TAC THEN AP_TERM_TAC THEN AP_TERM_TAC THEN + INT_ARITH_TAC);; + +let P384_MONTJMIXADD_SUBROUTINE_CORRECT = time prove + (`!p3 p1 t1 p2 t2 pc stackpointer returnaddress. + aligned 16 stackpointer /\ + ALLPAIRS nonoverlapping + [(p3,144); (word_sub stackpointer (word 352),352)] + [(word pc,0x2ef0); (p1,144); (p2,96)] /\ + nonoverlapping (p3,144) (word_sub stackpointer (word 352),352) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p384_montjmixadd_mc /\ + read PC s = word pc /\ + read SP s = stackpointer /\ + read X30 s = returnaddress /\ + C_ARGUMENTS [p3; p1; p2] s /\ + bignum_triple_from_memory (p1,6) s = t1 /\ + bignum_pair_from_memory (p2,6) s = t2) + (\s. read PC s = returnaddress /\ + (!x1 y1 z1 x2 y2 z2. + ~(z1 = &0) /\ z2 = &1 /\ + ~(jacobian_eq (integer_mod_ring p_384) + (x1,y1,z1) (x2,y2,z2)) /\ + ~(jacobian_eq (integer_mod_ring p_384) + (jacobian_neg nistp384 (x1,y1,z1)) + (x2,y2,z2)) /\ + t1 = tripled nistp384_encode (x1,y1,z1) /\ + t2 = paired nistp384_encode (x2,y2) + ==> bignum_triple_from_memory(p3,6) s = + tripled nistp384_encode + (jacobian_add nistp384 (x1,y1,z1) (x2,y2,z2)))) + (MAYCHANGE [PC; X0; X1; X2; X3; X4; X5; X6; X7; X8; X9; X10; + X11; X12; X13; X14; X15; X16; X17] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,144); + memory :> bytes(word_sub stackpointer (word 352),352)])`, + ARM_ADD_RETURN_STACK_TAC P384_MONTJMIXADD_EXEC + P384_MONTJMIXADD_CORRECT + `[X19; X20; X21; X22; X23; X24; X25; X26]` 352);; diff --git a/benchmarks/benchmark.c b/benchmarks/benchmark.c index d2c675ef8f..e29656060f 100644 --- a/benchmarks/benchmark.c +++ b/benchmarks/benchmark.c @@ -649,6 +649,10 @@ void call_p256_montjadd(void) repeat(p256_montjadd(b1,b2,b3)) void call_p256_montjdouble(void) repeat(p256_montjdouble(b1,b2)) void call_p256_montjmixadd(void) repeat(p256_montjmixadd(b1,b2,b3)) +void call_p384_montjadd(void) repeat(p384_montjadd(b1,b2,b3)) +void call_p384_montjdouble(void) repeat(p384_montjdouble(b1,b2)) +void call_p384_montjmixadd(void) repeat(p384_montjmixadd(b1,b2,b3)) + void call_secp256k1_jadd(void) repeat(secp256k1_jadd(b1,b2,b3)) void call_secp256k1_jdouble(void) repeat(secp256k1_jdouble(b1,b2)) void call_secp256k1_jmixadd(void) repeat(secp256k1_jmixadd(b1,b2,b3)) @@ -927,6 +931,9 @@ int main(void) timingtest(bmi,"p256_montjadd",call_p256_montjadd); timingtest(bmi,"p256_montjdouble",call_p256_montjdouble); timingtest(bmi,"p256_montjmixadd",call_p256_montjmixadd); + timingtest(bmi,"p384_montjadd",call_p384_montjadd); + timingtest(bmi,"p384_montjdouble",call_p384_montjdouble); + timingtest(bmi,"p384_montjmixadd",call_p384_montjmixadd); timingtest(bmi,"secp256k1_jadd",call_secp256k1_jadd); timingtest(bmi,"secp256k1_jdouble",call_secp256k1_jdouble); timingtest(bmi,"secp256k1_jmixadd",call_secp256k1_jmixadd); diff --git a/include/s2n-bignum-c89.h b/include/s2n-bignum-c89.h index 7c3ac77dc1..c697c4d310 100644 --- a/include/s2n-bignum-c89.h +++ b/include/s2n-bignum-c89.h @@ -746,6 +746,18 @@ extern void p256_montjdouble(uint64_t p3[12],uint64_t p1[12]); /* Inputs p1[12], p2[8]; output p3[12] */ extern void p256_montjmixadd(uint64_t p3[12],uint64_t p1[12],uint64_t p2[8]); +/* Point addition on NIST curve P-384 in Montgomery-Jacobian coordinates */ +/* Inputs p1[18], p2[18]; output p3[18] */ +extern void p384_montjadd(uint64_t p3[18],uint64_t p1[18],uint64_t p2[18]); + +/* Point doubling on NIST curve P-384 in Montgomery-Jacobian coordinates */ +/* Inputs p1[18]; output p3[18] */ +extern void p384_montjdouble(uint64_t p3[18],uint64_t p1[18]); + +/* Point mixed addition on NIST curve P-384 in Montgomery-Jacobian coordinates */ +/* Inputs p1[18], p2[12]; output p3[18] */ +extern void p384_montjmixadd(uint64_t p3[18],uint64_t p1[18],uint64_t p2[12]); + /* Point addition on SECG curve secp256k1 in Jacobian coordinates */ /* Inputs p1[12], p2[12]; output p3[12] */ extern void secp256k1_jadd(uint64_t p3[12],uint64_t p1[12],uint64_t p2[12]); diff --git a/include/s2n-bignum.h b/include/s2n-bignum.h index 6670120a1d..dc85919321 100644 --- a/include/s2n-bignum.h +++ b/include/s2n-bignum.h @@ -745,6 +745,18 @@ extern void p256_montjdouble(uint64_t p3[static 12],uint64_t p1[static 12]); // Inputs p1[12], p2[8]; output p3[12] extern void p256_montjmixadd(uint64_t p3[static 12],uint64_t p1[static 12],uint64_t p2[static 8]); +// Point addition on NIST curve P-384 in Montgomery-Jacobian coordinates +// Inputs p1[18], p2[18]; output p3[18] +extern void p384_montjadd(uint64_t p3[static 18],uint64_t p1[static 18],uint64_t p2[static 18]); + +// Point doubling on NIST curve P-384 in Montgomery-Jacobian coordinates +// Inputs p1[18]; output p3[18] +extern void p384_montjdouble(uint64_t p3[static 18],uint64_t p1[static 18]); + +// Point mixed addition on NIST curve P-384 in Montgomery-Jacobian coordinates +// Inputs p1[18], p2[12]; output p3[18] +extern void p384_montjmixadd(uint64_t p3[static 18],uint64_t p1[static 18],uint64_t p2[static 12]); + // Point addition on SECG curve secp256k1 in Jacobian coordinates // Inputs p1[12], p2[12]; output p3[12] extern void secp256k1_jadd(uint64_t p3[static 12],uint64_t p1[static 12],uint64_t p2[static 12]); diff --git a/tests/test.c b/tests/test.c index 77709ad7f1..dd022cc50d 100644 --- a/tests/test.c +++ b/tests/test.c @@ -274,6 +274,9 @@ enum { TEST_P256_MONTJADD, TEST_P256_MONTJDOUBLE, TEST_P256_MONTJMIXADD, + TEST_P384_MONTJADD, + TEST_P384_MONTJDOUBLE, + TEST_P384_MONTJMIXADD, TEST_SECP256K1_JADD, TEST_SECP256K1_JDOUBLE, TEST_SECP256K1_JMIXADD, @@ -356,6 +359,8 @@ uint64_t i_256[4] = UINT64_C(0xffffffff00000002) }; +// (-3 * 2^256) mod p_256 (Montgomery form of a coefficient) + uint64_t a_256[4] = { UINT64_C(0xfffffffffffffffc), UINT64_C(0x00000003ffffffff), @@ -411,6 +416,17 @@ uint64_t i_384[6] = UINT64_C(0x0000001400000014) }; +// (-3 * 2^384) mod p_384 (Montgomery form of a coefficient) + +uint64_t a_384[6] = + { UINT64_C(0x00000003fffffffc), + UINT64_C(0xfffffffc00000000), + UINT64_C(0xfffffffffffffffb), + UINT64_C(0xffffffffffffffff), + UINT64_C(0xffffffffffffffff), + UINT64_C(0xffffffffffffffff) + }; + uint64_t p_521[9] = { UINT64_C(0xffffffffffffffff), UINT64_C(0xffffffffffffffff), @@ -7682,6 +7698,110 @@ int test_p256_montjmixadd(void) return 0; } +int test_p384_montjadd(void) +{ uint64_t t, k; + printf("Testing p384_montjadd with %d cases\n",tests); + k = 6; + + int c; + for (t = 0; t < tests; ++t) + { random_bignum(k,b0); reference_mod(k,b1,b0,p_384); + random_bignum(k,b0); reference_mod(k,b1+k,b0,p_384); + random_bignum(k,b0); reference_mod(k,b1+2*k,b0,p_384); + random_bignum(k,b0); reference_mod(k,b2,b0,p_384); + random_bignum(k,b0); reference_mod(k,b2+k,b0,p_384); + random_bignum(k,b0); reference_mod(k,b2+2*k,b0,p_384); + + p384_montjadd(b3,b1,b2); + reference_montjadd(k,b4,b1,b2,p_384); + + c = reference_compare(3*k,b3,3*k,b4); + if (c != 0) + { printf("### Disparity: [size %4"PRIu64"] " + "<...0x%016"PRIx64"> + <...0x%016"PRIx64"> = " + "<...0x%016"PRIx64"> not <...0x%016"PRIx64">\n", + k,b1[0],b2[0],b3[0],b4[0]); + return 1; + } + else if (VERBOSE) + { printf("OK: [size %4"PRIu64"] " + "<...0x%016"PRIx64"> + <...0x%016"PRIx64"> = " + "<...0x%016"PRIx64">\n", + k,b1[0],b2[0],b3[0]); + } + } + printf("All OK\n"); + return 0; +} + +int test_p384_montjdouble(void) +{ uint64_t t, k; + printf("Testing p384_montjdouble with %d cases\n",tests); + k = 6; + + int c; + for (t = 0; t < tests; ++t) + { random_bignum(k,b0); reference_mod(k,b1,b0,p_384); + random_bignum(k,b0); reference_mod(k,b1+k,b0,p_384); + random_bignum(k,b0); reference_mod(k,b1+2*k,b0,p_384); + + reference_montjdouble(k,b4,b1,a_384,p_384); + p384_montjdouble(b3,b1); + + c = reference_compare(3*k,b3,3*k,b4); + if (c != 0) + { printf("### Disparity: [size %4"PRIu64"] " + "2 * <...0x%016"PRIx64"> = " + "<...0x%016"PRIx64"> not <...0x%016"PRIx64">\n", + k,b1[0],b3[0],b4[0]); + return 1; + } + else if (VERBOSE) + { printf("OK: [size %4"PRIu64"] " + "2 * <...0x%016"PRIx64"> = " + "<...0x%016"PRIx64">\n", + k,b1[0],b3[0]); + } + } + printf("All OK\n"); + return 0; +} + +int test_p384_montjmixadd(void) +{ uint64_t t, k; + printf("Testing p384_montjmixadd with %d cases\n",tests); + k = 6; + + int c; + for (t = 0; t < tests; ++t) + { random_bignum(k,b0); reference_mod(k,b1,b0,p_384); + random_bignum(k,b0); reference_mod(k,b1+k,b0,p_384); + random_bignum(k,b0); reference_mod(k,b1+2*k,b0,p_384); + random_bignum(k,b0); reference_mod(k,b2,b0,p_384); + random_bignum(k,b0); reference_mod(k,b2+k,b0,p_384); + p384_montjmixadd(b3,b1,b2); + reference_montjmixadd(k,b4,b1,b2,p_384); + + c = reference_compare(3*k,b3,3*k,b4); + if (c != 0) + { printf("### Disparity: [size %4"PRIu64"] " + "<...0x%016"PRIx64"> + <...0x%016"PRIx64"> = " + "<...0x%016"PRIx64"> not <...0x%016"PRIx64">\n", + k,b1[0],b2[0],b3[0],b4[0]); + return 1; + } + else if (VERBOSE) + { printf("OK: [size %4"PRIu64"] " + "<...0x%016"PRIx64"> + <...0x%016"PRIx64"> = " + "<...0x%016"PRIx64">\n", + k,b1[0],b2[0],b3[0]); + } + } + printf("All OK\n"); + return 0; +} + + int test_secp256k1_jadd(void) { uint64_t t, k; printf("Testing secp256k1_jadd with %d cases\n",tests); @@ -8174,6 +8294,9 @@ int test_all(void) dotest(test_p256_montjadd); dotest(test_p256_montjdouble); dotest(test_p256_montjmixadd); + dotest(test_p384_montjadd); + dotest(test_p384_montjdouble); + dotest(test_p384_montjmixadd); dotest(test_secp256k1_jadd); dotest(test_secp256k1_jdouble); dotest(test_secp256k1_jmixadd); @@ -8661,6 +8784,9 @@ int main(int argc, char *argv[]) case TEST_P256_MONTJADD: return test_p256_montjadd(); case TEST_P256_MONTJDOUBLE: return test_p256_montjdouble(); case TEST_P256_MONTJMIXADD: return test_p256_montjmixadd(); + case TEST_P384_MONTJADD: return test_p384_montjadd(); + case TEST_P384_MONTJDOUBLE: return test_p384_montjdouble(); + case TEST_P384_MONTJMIXADD: return test_p384_montjmixadd(); case TEST_SECP256K1_JADD: return test_secp256k1_jadd(); case TEST_SECP256K1_JDOUBLE: return test_secp256k1_jdouble(); case TEST_SECP256K1_JMIXADD: return test_secp256k1_jmixadd(); diff --git a/x86/Makefile b/x86/Makefile index dec360673a..dbc1b236b8 100644 --- a/x86/Makefile +++ b/x86/Makefile @@ -241,6 +241,9 @@ OBJ = curve25519/bignum_add_p25519.o \ p384/bignum_tomont_p384_alt.o \ p384/bignum_triple_p384.o \ p384/bignum_triple_p384_alt.o \ + p384/p384_montjadd.o \ + p384/p384_montjdouble.o \ + p384/p384_montjmixadd.o \ p521/bignum_add_p521.o \ p521/bignum_cmul_p521.o \ p521/bignum_cmul_p521_alt.o \ diff --git a/x86/p384/Makefile b/x86/p384/Makefile index 217af1ea8f..d1482c14ed 100644 --- a/x86/p384/Makefile +++ b/x86/p384/Makefile @@ -44,7 +44,10 @@ OBJ = bignum_add_p384.o \ bignum_tomont_p384.o \ bignum_tomont_p384_alt.o \ bignum_triple_p384.o \ - bignum_triple_p384_alt.o + bignum_triple_p384_alt.o \ + p384_montjadd.o \ + p384_montjdouble.o \ + p384_montjmixadd.o %.o : %.S ; $(CC) -E -I../../include $< | as -o $@ - diff --git a/x86/p384/p384_montjadd.S b/x86/p384/p384_montjadd.S new file mode 100644 index 0000000000..5a398b7272 --- /dev/null +++ b/x86/p384/p384_montjadd.S @@ -0,0 +1,955 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +// ---------------------------------------------------------------------------- +// Point addition on NIST curve P-384 in Montgomery-Jacobian coordinates +// +// extern void p384_montjadd +// (uint64_t p3[static 18],uint64_t p1[static 18],uint64_t p2[static 18]); +// +// Does p3 := p1 + p2 where all points are regarded as Jacobian triples with +// each coordinate in the Montgomery domain, i.e. x' = (2^384 * x) mod p_384. +// A Jacobian triple (x',y',z') represents affine point (x/z^2,y/z^3). +// +// Standard x86-64 ABI: RDI = p3, RSI = p1, RDX = p2 +// Microsoft x64 ABI: RCX = p3, RDX = p1, R8 = p2 +// ---------------------------------------------------------------------------- +#include "_internal_s2n_bignum.h" + + .intel_syntax noprefix + S2N_BN_SYM_VISIBILITY_DIRECTIVE(p384_montjadd) + S2N_BN_SYM_PRIVACY_DIRECTIVE(p384_montjadd) + .text + .balign 4 + +// Size of individual field elements + +#define NUMSIZE 48 + +// Pointer-offset pairs for inputs and outputs +// These assume rdi = p3, rsi = p1 and rcx = p2, +// which needs to be set up explicitly before use + +#define x_1 rsi+0 +#define y_1 rsi+NUMSIZE +#define z_1 rsi+(2*NUMSIZE) + +#define x_2 rcx+0 +#define y_2 rcx+NUMSIZE +#define z_2 rcx+(2*NUMSIZE) + +#define x_3 rdi+0 +#define y_3 rdi+NUMSIZE +#define z_3 rdi+(2*NUMSIZE) + +// In one place it's convenient to use another register +// since the squaring function overwrites rcx + +#define z_2_alt rsi+(2*NUMSIZE) + +// Pointer-offset pairs for temporaries, with some aliasing +// NSPACE is the total stack needed for these temporaries + +#define z1sq rsp+(NUMSIZE*0) +#define ww rsp+(NUMSIZE*0) + +#define yd rsp+(NUMSIZE*1) +#define y2a rsp+(NUMSIZE*1) + +#define x2a rsp+(NUMSIZE*2) +#define zzx2 rsp+(NUMSIZE*2) + +#define zz rsp+(NUMSIZE*3) +#define t1 rsp+(NUMSIZE*3) + +#define t2 rsp+(NUMSIZE*4) +#define x1a rsp+(NUMSIZE*4) +#define zzx1 rsp+(NUMSIZE*4) + +#define xd rsp+(NUMSIZE*5) +#define z2sq rsp+(NUMSIZE*5) + +#define y1a rsp+(NUMSIZE*6) + +// Temporaries for the actual input pointers + +#define input_x [rsp+(NUMSIZE*7)] +#define input_y [rsp+(NUMSIZE*7+8)] +#define input_z [rsp+(NUMSIZE*7+16)] + +#define NSPACE (NUMSIZE*7+24) + +// Corresponds exactly to bignum_montmul_p384 + +#define montmul_p384(P0,P1,P2) \ + mov rdx,[P2]; \ + xor r15d,r15d; \ + mulx r9,r8,[P1]; \ + mulx r10,rbx,[P1+0x8]; \ + add r9,rbx; \ + mulx r11,rbx,[P1+0x10]; \ + adc r10,rbx; \ + mulx r12,rbx,[P1+0x18]; \ + adc r11,rbx; \ + mulx r13,rbx,[P1+0x20]; \ + adc r12,rbx; \ + mulx r14,rbx,[P1+0x28]; \ + adc r13,rbx; \ + adc r14,r15; \ + mov rdx,r8; \ + shl rdx,0x20; \ + add rdx,r8; \ + xor ebp,ebp; \ + mov rax,0xffffffff00000001; \ + mulx rax,rbx,rax; \ + mov ebx,0xffffffff; \ + mulx rbx,r8,rbx; \ + adc rax,r8; \ + adc rbx,rdx; \ + adc ebp,ebp; \ + sub r9,rax; \ + sbb r10,rbx; \ + sbb r11,rbp; \ + sbb r12,0x0; \ + sbb r13,0x0; \ + sbb rdx,0x0; \ + add r14,rdx; \ + adc r15,0x0; \ + mov rdx,[P2+0x8]; \ + xor r8d,r8d; \ + mulx rbx,rax,[P1]; \ + adcx r9,rax; \ + adox r10,rbx; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r13,rax; \ + adox r14,rbx; \ + adox r15,r8; \ + mulx rbx,rax,[P1+0x28]; \ + adc r14,rax; \ + adc r15,rbx; \ + adc r8,r8; \ + mov rdx,r9; \ + shl rdx,0x20; \ + add rdx,r9; \ + xor ebp,ebp; \ + mov rax,0xffffffff00000001; \ + mulx rax,rbx,rax; \ + mov ebx,0xffffffff; \ + mulx rbx,r9,rbx; \ + adc rax,r9; \ + adc rbx,rdx; \ + adc ebp,ebp; \ + sub r10,rax; \ + sbb r11,rbx; \ + sbb r12,rbp; \ + sbb r13,0x0; \ + sbb r14,0x0; \ + sbb rdx,0x0; \ + add r15,rdx; \ + adc r8,0x0; \ + mov rdx,[P2+0x10]; \ + xor r9d,r9d; \ + mulx rbx,rax,[P1]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r14,rax; \ + adox r15,rbx; \ + adox r8,r9; \ + mulx rbx,rax,[P1+0x28]; \ + adc r15,rax; \ + adc r8,rbx; \ + adc r9,r9; \ + mov rdx,r10; \ + shl rdx,0x20; \ + add rdx,r10; \ + xor ebp,ebp; \ + mov rax,0xffffffff00000001; \ + mulx rax,rbx,rax; \ + mov ebx,0xffffffff; \ + mulx rbx,r10,rbx; \ + adc rax,r10; \ + adc rbx,rdx; \ + adc ebp,ebp; \ + sub r11,rax; \ + sbb r12,rbx; \ + sbb r13,rbp; \ + sbb r14,0x0; \ + sbb r15,0x0; \ + sbb rdx,0x0; \ + add r8,rdx; \ + adc r9,0x0; \ + mov rdx,[P2+0x18]; \ + xor r10d,r10d; \ + mulx rbx,rax,[P1]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r14,rax; \ + adox r15,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r15,rax; \ + adox r8,rbx; \ + adox r9,r10; \ + mulx rbx,rax,[P1+0x28]; \ + adc r8,rax; \ + adc r9,rbx; \ + adc r10,r10; \ + mov rdx,r11; \ + shl rdx,0x20; \ + add rdx,r11; \ + xor ebp,ebp; \ + mov rax,0xffffffff00000001; \ + mulx rax,rbx,rax; \ + mov ebx,0xffffffff; \ + mulx rbx,r11,rbx; \ + adc rax,r11; \ + adc rbx,rdx; \ + adc ebp,ebp; \ + sub r12,rax; \ + sbb r13,rbx; \ + sbb r14,rbp; \ + sbb r15,0x0; \ + sbb r8,0x0; \ + sbb rdx,0x0; \ + add r9,rdx; \ + adc r10,0x0; \ + mov rdx,[P2+0x20]; \ + xor r11d,r11d; \ + mulx rbx,rax,[P1]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r14,rax; \ + adox r15,rbx; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r15,rax; \ + adox r8,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r8,rax; \ + adox r9,rbx; \ + adox r10,r11; \ + mulx rbx,rax,[P1+0x28]; \ + adc r9,rax; \ + adc r10,rbx; \ + adc r11,r11; \ + mov rdx,r12; \ + shl rdx,0x20; \ + add rdx,r12; \ + xor ebp,ebp; \ + mov rax,0xffffffff00000001; \ + mulx rax,rbx,rax; \ + mov ebx,0xffffffff; \ + mulx rbx,r12,rbx; \ + adc rax,r12; \ + adc rbx,rdx; \ + adc ebp,ebp; \ + sub r13,rax; \ + sbb r14,rbx; \ + sbb r15,rbp; \ + sbb r8,0x0; \ + sbb r9,0x0; \ + sbb rdx,0x0; \ + add r10,rdx; \ + adc r11,0x0; \ + mov rdx,[P2+0x28]; \ + xor r12d,r12d; \ + mulx rbx,rax,[P1]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r14,rax; \ + adox r15,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r15,rax; \ + adox r8,rbx; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r8,rax; \ + adox r9,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r9,rax; \ + adox r10,rbx; \ + adox r11,r12; \ + mulx rbx,rax,[P1+0x28]; \ + adc r10,rax; \ + adc r11,rbx; \ + adc r12,r12; \ + mov rdx,r13; \ + shl rdx,0x20; \ + add rdx,r13; \ + xor ebp,ebp; \ + mov rax,0xffffffff00000001; \ + mulx rax,rbx,rax; \ + mov ebx,0xffffffff; \ + mulx rbx,r13,rbx; \ + adc rax,r13; \ + adc rbx,rdx; \ + adc ebp,ebp; \ + sub r14,rax; \ + sbb r15,rbx; \ + sbb r8,rbp; \ + sbb r9,0x0; \ + sbb r10,0x0; \ + sbb rdx,0x0; \ + add r11,rdx; \ + adc r12,0x0; \ + xor edx,edx; \ + xor ebp,ebp; \ + xor r13d,r13d; \ + mov rax,0xffffffff00000001; \ + add rax,r14; \ + mov ebx,0xffffffff; \ + adc rbx,r15; \ + mov ecx,0x1; \ + adc rcx,r8; \ + adc rdx,r9; \ + adc rbp,r10; \ + adc r13,r11; \ + adc r12,0x0; \ + cmovne r14,rax; \ + cmovne r15,rbx; \ + cmovne r8,rcx; \ + cmovne r9,rdx; \ + cmovne r10,rbp; \ + cmovne r11,r13; \ + mov [P0],r14; \ + mov [P0+0x8],r15; \ + mov [P0+0x10],r8; \ + mov [P0+0x18],r9; \ + mov [P0+0x20],r10; \ + mov [P0+0x28],r11 + +// Corresponds exactly to bignum_montsqr_p384 + +#define montsqr_p384(P0,P1) \ + mov rdx,[P1]; \ + mulx r10,r9,[P1+0x8]; \ + mulx r12,r11,[P1+0x18]; \ + mulx r14,r13,[P1+0x28]; \ + mov rdx,[P1+0x18]; \ + mulx rcx,r15,[P1+0x20]; \ + xor ebp,ebp; \ + mov rdx,[P1+0x10]; \ + mulx rbx,rax,[P1]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mov rdx,[P1+0x8]; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,[P1+0x28]; \ + adcx r14,rax; \ + adox r15,rbx; \ + adcx r15,rbp; \ + adox rcx,rbp; \ + adc rcx,rbp; \ + xor ebp,ebp; \ + mov rdx,[P1+0x20]; \ + mulx rbx,rax,[P1]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mov rdx,[P1+0x10]; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r14,rax; \ + adox r15,rbx; \ + mulx rdx,rax,[P1+0x28]; \ + adcx r15,rax; \ + adox rcx,rdx; \ + mov rdx,[P1+0x28]; \ + mulx rbp,rbx,[P1+0x20]; \ + mulx rdx,rax,[P1+0x18]; \ + adcx rcx,rax; \ + adox rbx,rdx; \ + mov eax,0x0; \ + adcx rbx,rax; \ + adox rbp,rax; \ + adc rbp,rax; \ + xor rax,rax; \ + mov rdx,[P1]; \ + mulx rax,r8,[P1]; \ + adcx r9,r9; \ + adox r9,rax; \ + mov rdx,[P1+0x8]; \ + mulx rdx,rax,rdx; \ + adcx r10,r10; \ + adox r10,rax; \ + adcx r11,r11; \ + adox r11,rdx; \ + mov rdx,[P1+0x10]; \ + mulx rdx,rax,rdx; \ + adcx r12,r12; \ + adox r12,rax; \ + adcx r13,r13; \ + adox r13,rdx; \ + mov rdx,[P1+0x18]; \ + mulx rdx,rax,rdx; \ + adcx r14,r14; \ + adox r14,rax; \ + adcx r15,r15; \ + adox r15,rdx; \ + mov rdx,[P1+0x20]; \ + mulx rdx,rax,rdx; \ + adcx rcx,rcx; \ + adox rcx,rax; \ + adcx rbx,rbx; \ + adox rbx,rdx; \ + mov rdx,[P1+0x28]; \ + mulx rsi,rax,rdx; \ + adcx rbp,rbp; \ + adox rbp,rax; \ + mov eax,0x0; \ + adcx rsi,rax; \ + adox rsi,rax; \ + mov [P0],rbx; \ + mov rdx,r8; \ + shl rdx,0x20; \ + add rdx,r8; \ + mov rax,0xffffffff00000001; \ + mulx rax,r8,rax; \ + mov ebx,0xffffffff; \ + mulx r8,rbx,rbx; \ + add rax,rbx; \ + adc r8,rdx; \ + mov ebx,0x0; \ + adc rbx,rbx; \ + sub r9,rax; \ + sbb r10,r8; \ + sbb r11,rbx; \ + sbb r12,0x0; \ + sbb r13,0x0; \ + mov r8,rdx; \ + sbb r8,0x0; \ + mov rdx,r9; \ + shl rdx,0x20; \ + add rdx,r9; \ + mov rax,0xffffffff00000001; \ + mulx rax,r9,rax; \ + mov ebx,0xffffffff; \ + mulx r9,rbx,rbx; \ + add rax,rbx; \ + adc r9,rdx; \ + mov ebx,0x0; \ + adc rbx,rbx; \ + sub r10,rax; \ + sbb r11,r9; \ + sbb r12,rbx; \ + sbb r13,0x0; \ + sbb r8,0x0; \ + mov r9,rdx; \ + sbb r9,0x0; \ + mov rdx,r10; \ + shl rdx,0x20; \ + add rdx,r10; \ + mov rax,0xffffffff00000001; \ + mulx rax,r10,rax; \ + mov ebx,0xffffffff; \ + mulx r10,rbx,rbx; \ + add rax,rbx; \ + adc r10,rdx; \ + mov ebx,0x0; \ + adc rbx,rbx; \ + sub r11,rax; \ + sbb r12,r10; \ + sbb r13,rbx; \ + sbb r8,0x0; \ + sbb r9,0x0; \ + mov r10,rdx; \ + sbb r10,0x0; \ + mov rdx,r11; \ + shl rdx,0x20; \ + add rdx,r11; \ + mov rax,0xffffffff00000001; \ + mulx rax,r11,rax; \ + mov ebx,0xffffffff; \ + mulx r11,rbx,rbx; \ + add rax,rbx; \ + adc r11,rdx; \ + mov ebx,0x0; \ + adc rbx,rbx; \ + sub r12,rax; \ + sbb r13,r11; \ + sbb r8,rbx; \ + sbb r9,0x0; \ + sbb r10,0x0; \ + mov r11,rdx; \ + sbb r11,0x0; \ + mov rdx,r12; \ + shl rdx,0x20; \ + add rdx,r12; \ + mov rax,0xffffffff00000001; \ + mulx rax,r12,rax; \ + mov ebx,0xffffffff; \ + mulx r12,rbx,rbx; \ + add rax,rbx; \ + adc r12,rdx; \ + mov ebx,0x0; \ + adc rbx,rbx; \ + sub r13,rax; \ + sbb r8,r12; \ + sbb r9,rbx; \ + sbb r10,0x0; \ + sbb r11,0x0; \ + mov r12,rdx; \ + sbb r12,0x0; \ + mov rdx,r13; \ + shl rdx,0x20; \ + add rdx,r13; \ + mov rax,0xffffffff00000001; \ + mulx rax,r13,rax; \ + mov ebx,0xffffffff; \ + mulx r13,rbx,rbx; \ + add rax,rbx; \ + adc r13,rdx; \ + mov ebx,0x0; \ + adc rbx,rbx; \ + sub r8,rax; \ + sbb r9,r13; \ + sbb r10,rbx; \ + sbb r11,0x0; \ + sbb r12,0x0; \ + mov r13,rdx; \ + sbb r13,0x0; \ + mov rbx,[P0]; \ + add r14,r8; \ + adc r15,r9; \ + adc rcx,r10; \ + adc rbx,r11; \ + adc rbp,r12; \ + adc rsi,r13; \ + mov r8d,0x0; \ + adc r8,r8; \ + xor r11,r11; \ + xor r12,r12; \ + xor r13,r13; \ + mov rax,0xffffffff00000001; \ + add rax,r14; \ + mov r9d,0xffffffff; \ + adc r9,r15; \ + mov r10d,0x1; \ + adc r10,rcx; \ + adc r11,rbx; \ + adc r12,rbp; \ + adc r13,rsi; \ + adc r8,0x0; \ + cmovne r14,rax; \ + cmovne r15,r9; \ + cmovne rcx,r10; \ + cmovne rbx,r11; \ + cmovne rbp,r12; \ + cmovne rsi,r13; \ + mov [P0],r14; \ + mov [P0+0x8],r15; \ + mov [P0+0x10],rcx; \ + mov [P0+0x18],rbx; \ + mov [P0+0x20],rbp; \ + mov [P0+0x28],rsi + +// Almost-Montgomery variant which we use when an input to other muls +// with the other argument fully reduced (which is always safe). + +#define amontsqr_p384(P0,P1) \ + mov rdx,[P1]; \ + mulx r10,r9,[P1+0x8]; \ + mulx r12,r11,[P1+0x18]; \ + mulx r14,r13,[P1+0x28]; \ + mov rdx,[P1+0x18]; \ + mulx rcx,r15,[P1+0x20]; \ + xor ebp,ebp; \ + mov rdx,[P1+0x10]; \ + mulx rbx,rax,[P1]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mov rdx,[P1+0x8]; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,[P1+0x28]; \ + adcx r14,rax; \ + adox r15,rbx; \ + adcx r15,rbp; \ + adox rcx,rbp; \ + adc rcx,rbp; \ + xor ebp,ebp; \ + mov rdx,[P1+0x20]; \ + mulx rbx,rax,[P1]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mov rdx,[P1+0x10]; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r14,rax; \ + adox r15,rbx; \ + mulx rdx,rax,[P1+0x28]; \ + adcx r15,rax; \ + adox rcx,rdx; \ + mov rdx,[P1+0x28]; \ + mulx rbp,rbx,[P1+0x20]; \ + mulx rdx,rax,[P1+0x18]; \ + adcx rcx,rax; \ + adox rbx,rdx; \ + mov eax,0x0; \ + adcx rbx,rax; \ + adox rbp,rax; \ + adc rbp,rax; \ + xor rax,rax; \ + mov rdx,[P1]; \ + mulx rax,r8,[P1]; \ + adcx r9,r9; \ + adox r9,rax; \ + mov rdx,[P1+0x8]; \ + mulx rdx,rax,rdx; \ + adcx r10,r10; \ + adox r10,rax; \ + adcx r11,r11; \ + adox r11,rdx; \ + mov rdx,[P1+0x10]; \ + mulx rdx,rax,rdx; \ + adcx r12,r12; \ + adox r12,rax; \ + adcx r13,r13; \ + adox r13,rdx; \ + mov rdx,[P1+0x18]; \ + mulx rdx,rax,rdx; \ + adcx r14,r14; \ + adox r14,rax; \ + adcx r15,r15; \ + adox r15,rdx; \ + mov rdx,[P1+0x20]; \ + mulx rdx,rax,rdx; \ + adcx rcx,rcx; \ + adox rcx,rax; \ + adcx rbx,rbx; \ + adox rbx,rdx; \ + mov rdx,[P1+0x28]; \ + mulx rsi,rax,rdx; \ + adcx rbp,rbp; \ + adox rbp,rax; \ + mov eax,0x0; \ + adcx rsi,rax; \ + adox rsi,rax; \ + mov [P0],rbx; \ + mov rdx,r8; \ + shl rdx,0x20; \ + add rdx,r8; \ + mov rax,0xffffffff00000001; \ + mulx rax,r8,rax; \ + mov ebx,0xffffffff; \ + mulx r8,rbx,rbx; \ + add rax,rbx; \ + adc r8,rdx; \ + mov ebx,0x0; \ + adc rbx,rbx; \ + sub r9,rax; \ + sbb r10,r8; \ + sbb r11,rbx; \ + sbb r12,0x0; \ + sbb r13,0x0; \ + mov r8,rdx; \ + sbb r8,0x0; \ + mov rdx,r9; \ + shl rdx,0x20; \ + add rdx,r9; \ + mov rax,0xffffffff00000001; \ + mulx rax,r9,rax; \ + mov ebx,0xffffffff; \ + mulx r9,rbx,rbx; \ + add rax,rbx; \ + adc r9,rdx; \ + mov ebx,0x0; \ + adc rbx,rbx; \ + sub r10,rax; \ + sbb r11,r9; \ + sbb r12,rbx; \ + sbb r13,0x0; \ + sbb r8,0x0; \ + mov r9,rdx; \ + sbb r9,0x0; \ + mov rdx,r10; \ + shl rdx,0x20; \ + add rdx,r10; \ + mov rax,0xffffffff00000001; \ + mulx rax,r10,rax; \ + mov ebx,0xffffffff; \ + mulx r10,rbx,rbx; \ + add rax,rbx; \ + adc r10,rdx; \ + mov ebx,0x0; \ + adc rbx,rbx; \ + sub r11,rax; \ + sbb r12,r10; \ + sbb r13,rbx; \ + sbb r8,0x0; \ + sbb r9,0x0; \ + mov r10,rdx; \ + sbb r10,0x0; \ + mov rdx,r11; \ + shl rdx,0x20; \ + add rdx,r11; \ + mov rax,0xffffffff00000001; \ + mulx rax,r11,rax; \ + mov ebx,0xffffffff; \ + mulx r11,rbx,rbx; \ + add rax,rbx; \ + adc r11,rdx; \ + mov ebx,0x0; \ + adc rbx,rbx; \ + sub r12,rax; \ + sbb r13,r11; \ + sbb r8,rbx; \ + sbb r9,0x0; \ + sbb r10,0x0; \ + mov r11,rdx; \ + sbb r11,0x0; \ + mov rdx,r12; \ + shl rdx,0x20; \ + add rdx,r12; \ + mov rax,0xffffffff00000001; \ + mulx rax,r12,rax; \ + mov ebx,0xffffffff; \ + mulx r12,rbx,rbx; \ + add rax,rbx; \ + adc r12,rdx; \ + mov ebx,0x0; \ + adc rbx,rbx; \ + sub r13,rax; \ + sbb r8,r12; \ + sbb r9,rbx; \ + sbb r10,0x0; \ + sbb r11,0x0; \ + mov r12,rdx; \ + sbb r12,0x0; \ + mov rdx,r13; \ + shl rdx,0x20; \ + add rdx,r13; \ + mov rax,0xffffffff00000001; \ + mulx rax,r13,rax; \ + mov ebx,0xffffffff; \ + mulx r13,rbx,rbx; \ + add rax,rbx; \ + adc r13,rdx; \ + mov ebx,0x0; \ + adc rbx,rbx; \ + sub r8,rax; \ + sbb r9,r13; \ + sbb r10,rbx; \ + sbb r11,0x0; \ + sbb r12,0x0; \ + mov r13,rdx; \ + sbb r13,0x0; \ + mov rbx,[P0]; \ + add r14,r8; \ + adc r15,r9; \ + adc rcx,r10; \ + adc rbx,r11; \ + adc rbp,r12; \ + adc rsi,r13; \ + mov r8d,0x0; \ + mov rax,0xffffffff00000001; \ + mov r9d,0xffffffff; \ + mov r10d,0x1; \ + cmovnc rax, r8; \ + cmovnc r9, r8; \ + cmovnc r10, r8; \ + add r14, rax; \ + adc r15, r9; \ + adc rcx, r10; \ + adc rbx, r8; \ + adc rbp, r8; \ + adc rsi, r8; \ + mov [P0],r14; \ + mov [P0+0x8],r15; \ + mov [P0+0x10],rcx; \ + mov [P0+0x18],rbx; \ + mov [P0+0x20],rbp; \ + mov [P0+0x28],rsi + +// Corresponds exactly to bignum_sub_p384 + +#define sub_p384(P0,P1,P2) \ + mov rax,[P1]; \ + sub rax,[P2]; \ + mov rdx,[P1+0x8]; \ + sbb rdx,[P2+0x8]; \ + mov r8,[P1+0x10]; \ + sbb r8,[P2+0x10]; \ + mov r9,[P1+0x18]; \ + sbb r9,[P2+0x18]; \ + mov r10,[P1+0x20]; \ + sbb r10,[P2+0x20]; \ + mov r11,[P1+0x28]; \ + sbb r11,[P2+0x28]; \ + sbb rcx,rcx; \ + mov esi,0xffffffff; \ + and rcx,rsi; \ + xor rsi,rsi; \ + sub rsi,rcx; \ + sub rax,rsi; \ + mov [P0],rax; \ + sbb rdx,rcx; \ + mov [P0+0x8],rdx; \ + sbb rax,rax; \ + and rcx,rsi; \ + neg rax; \ + sbb r8,rcx; \ + mov [P0+0x10],r8; \ + sbb r9,0x0; \ + mov [P0+0x18],r9; \ + sbb r10,0x0; \ + mov [P0+0x20],r10; \ + sbb r11,0x0; \ + mov [P0+0x28],r11 + +S2N_BN_SYMBOL(p384_montjadd): + +#if WINDOWS_ABI + push rdi + push rsi + mov rdi, rcx + mov rsi, rdx + mov rdx, r8 +#endif + +// Save registers and make room on stack for temporary variables +// Put the input arguments in non-volatile places on the stack + + push rbx + push rbp + push r12 + push r13 + push r14 + push r15 + + sub rsp, NSPACE + + mov input_z, rdi + mov input_x, rsi + mov input_y, rdx + +// Main code, just a sequence of basic field operations +// 8 * multiply + 3 * square + 7 * subtract + + amontsqr_p384(z1sq,z_1) + mov rsi, input_y + amontsqr_p384(z2sq,z_2_alt) + + mov rsi, input_x + mov rcx, input_y + montmul_p384(y1a,z_2,y_1) + mov rsi, input_x + mov rcx, input_y + montmul_p384(y2a,z_1,y_2) + + mov rcx, input_y + montmul_p384(x2a,z1sq,x_2) + mov rsi, input_x + montmul_p384(x1a,z2sq,x_1) + montmul_p384(y2a,z1sq,y2a) + montmul_p384(y1a,z2sq,y1a) + + sub_p384(xd,x2a,x1a) + sub_p384(yd,y2a,y1a) + + amontsqr_p384(zz,xd) + montsqr_p384(ww,yd) + + montmul_p384(zzx1,zz,x1a) + montmul_p384(zzx2,zz,x2a) + + mov rdi, input_z + sub_p384(x_3,ww,zzx1) + sub_p384(t1,zzx2,zzx1) + + mov rsi, input_x + montmul_p384(xd,xd,z_1) + + mov rdi, input_z + sub_p384(x_3,x_3,zzx2) + + mov rdi, input_z + sub_p384(t2,zzx1,x_3) + + montmul_p384(t1,t1,y1a) + + mov rdi, input_z + mov rcx, input_y + montmul_p384(z_3,xd,z_2) + montmul_p384(t2,yd,t2) + + mov rdi, input_z + sub_p384(y_3,t2,t1) + +// Restore stack and registers + + add rsp, NSPACE + pop r15 + pop r14 + pop r13 + pop r12 + pop rbp + pop rbx + +#if WINDOWS_ABI + pop rsi + pop rdi +#endif + ret + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack, "", %progbits +#endif diff --git a/x86/p384/p384_montjdouble.S b/x86/p384/p384_montjdouble.S new file mode 100644 index 0000000000..312d738a75 --- /dev/null +++ b/x86/p384/p384_montjdouble.S @@ -0,0 +1,1014 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +// ---------------------------------------------------------------------------- +// Point doubling on NIST curve P-384 in Montgomery-Jacobian coordinates +// +// extern void p384_montjdouble +// (uint64_t p3[static 18],uint64_t p1[static 18]); +// +// Does p3 := 2 * p1 where all points are regarded as Jacobian triples with +// each coordinate in the Montgomery domain, i.e. x' = (2^384 * x) mod p_384. +// A Jacobian triple (x',y',z') represents affine point (x/z^2,y/z^3). +// +// Standard x86-64 ABI: RDI = p3, RSI = p1 +// Microsoft x64 ABI: RCX = p3, RDX = p1 +// ---------------------------------------------------------------------------- +#include "_internal_s2n_bignum.h" + + .intel_syntax noprefix + S2N_BN_SYM_VISIBILITY_DIRECTIVE(p384_montjdouble) + S2N_BN_SYM_PRIVACY_DIRECTIVE(p384_montjdouble) + .text + .balign 4 + +// Size of individual field elements + +#define NUMSIZE 48 + +// Pointer-offset pairs for inputs and outputs +// These assume rdi = p3, rsi = p1. The latter stays true +// but montsqr below modifies rdi as well. Thus, we need +// to save rdi and restore it before the writes to outputs. + +#define x_1 rsi+0 +#define y_1 rsi+NUMSIZE +#define z_1 rsi+(2*NUMSIZE) + +#define x_3 rdi+0 +#define y_3 rdi+NUMSIZE +#define z_3 rdi+(2*NUMSIZE) + +// Pointer-offset pairs for temporaries, with some aliasing +// NSPACE is the total stack needed for these temporaries + +#define z2 rsp+(NUMSIZE*0) +#define y2 rsp+(NUMSIZE*1) +#define x2p rsp+(NUMSIZE*2) +#define xy2 rsp+(NUMSIZE*3) + +#define y4 rsp+(NUMSIZE*4) +#define t2 rsp+(NUMSIZE*4) + +#define dx2 rsp+(NUMSIZE*5) +#define t1 rsp+(NUMSIZE*5) + +#define d rsp+(NUMSIZE*6) +#define x4p rsp+(NUMSIZE*6) + +// Safe place for pointer to the output + +#define input_z [rsp+(NUMSIZE*7)] + +#define NSPACE (NUMSIZE*7+8) + +// Corresponds exactly to bignum_montmul_p384 + +#define montmul_p384(P0,P1,P2) \ + mov rdx,[P2]; \ + xor r15d,r15d; \ + mulx r9,r8,[P1]; \ + mulx r10,rbx,[P1+0x8]; \ + add r9,rbx; \ + mulx r11,rbx,[P1+0x10]; \ + adc r10,rbx; \ + mulx r12,rbx,[P1+0x18]; \ + adc r11,rbx; \ + mulx r13,rbx,[P1+0x20]; \ + adc r12,rbx; \ + mulx r14,rbx,[P1+0x28]; \ + adc r13,rbx; \ + adc r14,r15; \ + mov rdx,r8; \ + shl rdx,0x20; \ + add rdx,r8; \ + xor ebp,ebp; \ + mov rax,0xffffffff00000001; \ + mulx rax,rbx,rax; \ + mov ebx,0xffffffff; \ + mulx rbx,r8,rbx; \ + adc rax,r8; \ + adc rbx,rdx; \ + adc ebp,ebp; \ + sub r9,rax; \ + sbb r10,rbx; \ + sbb r11,rbp; \ + sbb r12,0x0; \ + sbb r13,0x0; \ + sbb rdx,0x0; \ + add r14,rdx; \ + adc r15,0x0; \ + mov rdx,[P2+0x8]; \ + xor r8d,r8d; \ + mulx rbx,rax,[P1]; \ + adcx r9,rax; \ + adox r10,rbx; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r13,rax; \ + adox r14,rbx; \ + adox r15,r8; \ + mulx rbx,rax,[P1+0x28]; \ + adc r14,rax; \ + adc r15,rbx; \ + adc r8,r8; \ + mov rdx,r9; \ + shl rdx,0x20; \ + add rdx,r9; \ + xor ebp,ebp; \ + mov rax,0xffffffff00000001; \ + mulx rax,rbx,rax; \ + mov ebx,0xffffffff; \ + mulx rbx,r9,rbx; \ + adc rax,r9; \ + adc rbx,rdx; \ + adc ebp,ebp; \ + sub r10,rax; \ + sbb r11,rbx; \ + sbb r12,rbp; \ + sbb r13,0x0; \ + sbb r14,0x0; \ + sbb rdx,0x0; \ + add r15,rdx; \ + adc r8,0x0; \ + mov rdx,[P2+0x10]; \ + xor r9d,r9d; \ + mulx rbx,rax,[P1]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r14,rax; \ + adox r15,rbx; \ + adox r8,r9; \ + mulx rbx,rax,[P1+0x28]; \ + adc r15,rax; \ + adc r8,rbx; \ + adc r9,r9; \ + mov rdx,r10; \ + shl rdx,0x20; \ + add rdx,r10; \ + xor ebp,ebp; \ + mov rax,0xffffffff00000001; \ + mulx rax,rbx,rax; \ + mov ebx,0xffffffff; \ + mulx rbx,r10,rbx; \ + adc rax,r10; \ + adc rbx,rdx; \ + adc ebp,ebp; \ + sub r11,rax; \ + sbb r12,rbx; \ + sbb r13,rbp; \ + sbb r14,0x0; \ + sbb r15,0x0; \ + sbb rdx,0x0; \ + add r8,rdx; \ + adc r9,0x0; \ + mov rdx,[P2+0x18]; \ + xor r10d,r10d; \ + mulx rbx,rax,[P1]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r14,rax; \ + adox r15,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r15,rax; \ + adox r8,rbx; \ + adox r9,r10; \ + mulx rbx,rax,[P1+0x28]; \ + adc r8,rax; \ + adc r9,rbx; \ + adc r10,r10; \ + mov rdx,r11; \ + shl rdx,0x20; \ + add rdx,r11; \ + xor ebp,ebp; \ + mov rax,0xffffffff00000001; \ + mulx rax,rbx,rax; \ + mov ebx,0xffffffff; \ + mulx rbx,r11,rbx; \ + adc rax,r11; \ + adc rbx,rdx; \ + adc ebp,ebp; \ + sub r12,rax; \ + sbb r13,rbx; \ + sbb r14,rbp; \ + sbb r15,0x0; \ + sbb r8,0x0; \ + sbb rdx,0x0; \ + add r9,rdx; \ + adc r10,0x0; \ + mov rdx,[P2+0x20]; \ + xor r11d,r11d; \ + mulx rbx,rax,[P1]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r14,rax; \ + adox r15,rbx; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r15,rax; \ + adox r8,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r8,rax; \ + adox r9,rbx; \ + adox r10,r11; \ + mulx rbx,rax,[P1+0x28]; \ + adc r9,rax; \ + adc r10,rbx; \ + adc r11,r11; \ + mov rdx,r12; \ + shl rdx,0x20; \ + add rdx,r12; \ + xor ebp,ebp; \ + mov rax,0xffffffff00000001; \ + mulx rax,rbx,rax; \ + mov ebx,0xffffffff; \ + mulx rbx,r12,rbx; \ + adc rax,r12; \ + adc rbx,rdx; \ + adc ebp,ebp; \ + sub r13,rax; \ + sbb r14,rbx; \ + sbb r15,rbp; \ + sbb r8,0x0; \ + sbb r9,0x0; \ + sbb rdx,0x0; \ + add r10,rdx; \ + adc r11,0x0; \ + mov rdx,[P2+0x28]; \ + xor r12d,r12d; \ + mulx rbx,rax,[P1]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r14,rax; \ + adox r15,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r15,rax; \ + adox r8,rbx; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r8,rax; \ + adox r9,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r9,rax; \ + adox r10,rbx; \ + adox r11,r12; \ + mulx rbx,rax,[P1+0x28]; \ + adc r10,rax; \ + adc r11,rbx; \ + adc r12,r12; \ + mov rdx,r13; \ + shl rdx,0x20; \ + add rdx,r13; \ + xor ebp,ebp; \ + mov rax,0xffffffff00000001; \ + mulx rax,rbx,rax; \ + mov ebx,0xffffffff; \ + mulx rbx,r13,rbx; \ + adc rax,r13; \ + adc rbx,rdx; \ + adc ebp,ebp; \ + sub r14,rax; \ + sbb r15,rbx; \ + sbb r8,rbp; \ + sbb r9,0x0; \ + sbb r10,0x0; \ + sbb rdx,0x0; \ + add r11,rdx; \ + adc r12,0x0; \ + xor edx,edx; \ + xor ebp,ebp; \ + xor r13d,r13d; \ + mov rax,0xffffffff00000001; \ + add rax,r14; \ + mov ebx,0xffffffff; \ + adc rbx,r15; \ + mov ecx,0x1; \ + adc rcx,r8; \ + adc rdx,r9; \ + adc rbp,r10; \ + adc r13,r11; \ + adc r12,0x0; \ + cmovne r14,rax; \ + cmovne r15,rbx; \ + cmovne r8,rcx; \ + cmovne r9,rdx; \ + cmovne r10,rbp; \ + cmovne r11,r13; \ + mov [P0],r14; \ + mov [P0+0x8],r15; \ + mov [P0+0x10],r8; \ + mov [P0+0x18],r9; \ + mov [P0+0x20],r10; \ + mov [P0+0x28],r11 + +// Corresponds exactly to bignum_montsqr_p384 + +#define montsqr_p384(P0,P1) \ + mov rdx,[P1]; \ + mulx r10,r9,[P1+0x8]; \ + mulx r12,r11,[P1+0x18]; \ + mulx r14,r13,[P1+0x28]; \ + mov rdx,[P1+0x18]; \ + mulx rcx,r15,[P1+0x20]; \ + xor ebp,ebp; \ + mov rdx,[P1+0x10]; \ + mulx rbx,rax,[P1]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mov rdx,[P1+0x8]; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,[P1+0x28]; \ + adcx r14,rax; \ + adox r15,rbx; \ + adcx r15,rbp; \ + adox rcx,rbp; \ + adc rcx,rbp; \ + xor ebp,ebp; \ + mov rdx,[P1+0x20]; \ + mulx rbx,rax,[P1]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mov rdx,[P1+0x10]; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r14,rax; \ + adox r15,rbx; \ + mulx rdx,rax,[P1+0x28]; \ + adcx r15,rax; \ + adox rcx,rdx; \ + mov rdx,[P1+0x28]; \ + mulx rbp,rbx,[P1+0x20]; \ + mulx rdx,rax,[P1+0x18]; \ + adcx rcx,rax; \ + adox rbx,rdx; \ + mov eax,0x0; \ + adcx rbx,rax; \ + adox rbp,rax; \ + adc rbp,rax; \ + xor rax,rax; \ + mov rdx,[P1]; \ + mulx rax,r8,[P1]; \ + adcx r9,r9; \ + adox r9,rax; \ + mov rdx,[P1+0x8]; \ + mulx rdx,rax,rdx; \ + adcx r10,r10; \ + adox r10,rax; \ + adcx r11,r11; \ + adox r11,rdx; \ + mov rdx,[P1+0x10]; \ + mulx rdx,rax,rdx; \ + adcx r12,r12; \ + adox r12,rax; \ + adcx r13,r13; \ + adox r13,rdx; \ + mov rdx,[P1+0x18]; \ + mulx rdx,rax,rdx; \ + adcx r14,r14; \ + adox r14,rax; \ + adcx r15,r15; \ + adox r15,rdx; \ + mov rdx,[P1+0x20]; \ + mulx rdx,rax,rdx; \ + adcx rcx,rcx; \ + adox rcx,rax; \ + adcx rbx,rbx; \ + adox rbx,rdx; \ + mov rdx,[P1+0x28]; \ + mulx rdi,rax,rdx; \ + adcx rbp,rbp; \ + adox rbp,rax; \ + mov eax,0x0; \ + adcx rdi,rax; \ + adox rdi,rax; \ + mov [P0],rbx; \ + mov rdx,r8; \ + shl rdx,0x20; \ + add rdx,r8; \ + mov rax,0xffffffff00000001; \ + mulx rax,r8,rax; \ + mov ebx,0xffffffff; \ + mulx r8,rbx,rbx; \ + add rax,rbx; \ + adc r8,rdx; \ + mov ebx,0x0; \ + adc rbx,rbx; \ + sub r9,rax; \ + sbb r10,r8; \ + sbb r11,rbx; \ + sbb r12,0x0; \ + sbb r13,0x0; \ + mov r8,rdx; \ + sbb r8,0x0; \ + mov rdx,r9; \ + shl rdx,0x20; \ + add rdx,r9; \ + mov rax,0xffffffff00000001; \ + mulx rax,r9,rax; \ + mov ebx,0xffffffff; \ + mulx r9,rbx,rbx; \ + add rax,rbx; \ + adc r9,rdx; \ + mov ebx,0x0; \ + adc rbx,rbx; \ + sub r10,rax; \ + sbb r11,r9; \ + sbb r12,rbx; \ + sbb r13,0x0; \ + sbb r8,0x0; \ + mov r9,rdx; \ + sbb r9,0x0; \ + mov rdx,r10; \ + shl rdx,0x20; \ + add rdx,r10; \ + mov rax,0xffffffff00000001; \ + mulx rax,r10,rax; \ + mov ebx,0xffffffff; \ + mulx r10,rbx,rbx; \ + add rax,rbx; \ + adc r10,rdx; \ + mov ebx,0x0; \ + adc rbx,rbx; \ + sub r11,rax; \ + sbb r12,r10; \ + sbb r13,rbx; \ + sbb r8,0x0; \ + sbb r9,0x0; \ + mov r10,rdx; \ + sbb r10,0x0; \ + mov rdx,r11; \ + shl rdx,0x20; \ + add rdx,r11; \ + mov rax,0xffffffff00000001; \ + mulx rax,r11,rax; \ + mov ebx,0xffffffff; \ + mulx r11,rbx,rbx; \ + add rax,rbx; \ + adc r11,rdx; \ + mov ebx,0x0; \ + adc rbx,rbx; \ + sub r12,rax; \ + sbb r13,r11; \ + sbb r8,rbx; \ + sbb r9,0x0; \ + sbb r10,0x0; \ + mov r11,rdx; \ + sbb r11,0x0; \ + mov rdx,r12; \ + shl rdx,0x20; \ + add rdx,r12; \ + mov rax,0xffffffff00000001; \ + mulx rax,r12,rax; \ + mov ebx,0xffffffff; \ + mulx r12,rbx,rbx; \ + add rax,rbx; \ + adc r12,rdx; \ + mov ebx,0x0; \ + adc rbx,rbx; \ + sub r13,rax; \ + sbb r8,r12; \ + sbb r9,rbx; \ + sbb r10,0x0; \ + sbb r11,0x0; \ + mov r12,rdx; \ + sbb r12,0x0; \ + mov rdx,r13; \ + shl rdx,0x20; \ + add rdx,r13; \ + mov rax,0xffffffff00000001; \ + mulx rax,r13,rax; \ + mov ebx,0xffffffff; \ + mulx r13,rbx,rbx; \ + add rax,rbx; \ + adc r13,rdx; \ + mov ebx,0x0; \ + adc rbx,rbx; \ + sub r8,rax; \ + sbb r9,r13; \ + sbb r10,rbx; \ + sbb r11,0x0; \ + sbb r12,0x0; \ + mov r13,rdx; \ + sbb r13,0x0; \ + mov rbx,[P0]; \ + add r14,r8; \ + adc r15,r9; \ + adc rcx,r10; \ + adc rbx,r11; \ + adc rbp,r12; \ + adc rdi,r13; \ + mov r8d,0x0; \ + adc r8,r8; \ + xor r11,r11; \ + xor r12,r12; \ + xor r13,r13; \ + mov rax,0xffffffff00000001; \ + add rax,r14; \ + mov r9d,0xffffffff; \ + adc r9,r15; \ + mov r10d,0x1; \ + adc r10,rcx; \ + adc r11,rbx; \ + adc r12,rbp; \ + adc r13,rdi; \ + adc r8,0x0; \ + cmovne r14,rax; \ + cmovne r15,r9; \ + cmovne rcx,r10; \ + cmovne rbx,r11; \ + cmovne rbp,r12; \ + cmovne rdi,r13; \ + mov [P0],r14; \ + mov [P0+0x8],r15; \ + mov [P0+0x10],rcx; \ + mov [P0+0x18],rbx; \ + mov [P0+0x20],rbp; \ + mov [P0+0x28],rdi + +#define sub_p384(P0,P1,P2) \ + mov rax,[P1]; \ + sub rax,[P2]; \ + mov rdx,[P1+0x8]; \ + sbb rdx,[P2+0x8]; \ + mov r8,[P1+0x10]; \ + sbb r8,[P2+0x10]; \ + mov r9,[P1+0x18]; \ + sbb r9,[P2+0x18]; \ + mov r10,[P1+0x20]; \ + sbb r10,[P2+0x20]; \ + mov r11,[P1+0x28]; \ + sbb r11,[P2+0x28]; \ + sbb rcx,rcx; \ + mov ebx,0xffffffff; \ + and rcx,rbx; \ + xor rbx,rbx; \ + sub rbx,rcx; \ + sub rax,rbx; \ + mov [P0],rax; \ + sbb rdx,rcx; \ + mov [P0+0x8],rdx; \ + sbb rax,rax; \ + and rcx,rbx; \ + neg rax; \ + sbb r8,rcx; \ + mov [P0+0x10],r8; \ + sbb r9,0x0; \ + mov [P0+0x18],r9; \ + sbb r10,0x0; \ + mov [P0+0x20],r10; \ + sbb r11,0x0; \ + mov [P0+0x28],r11 + +// Simplified bignum_add_p384, without carry chain suspension + +#define add_p384(P0,P1,P2) \ + mov rax,[P1]; \ + add rax,[P2]; \ + mov rcx,[P1+0x8]; \ + adc rcx,[P2+0x8]; \ + mov r8,[P1+0x10]; \ + adc r8,[P2+0x10]; \ + mov r9,[P1+0x18]; \ + adc r9,[P2+0x18]; \ + mov r10,[P1+0x20]; \ + adc r10,[P2+0x20]; \ + mov r11,[P1+0x28]; \ + adc r11,[P2+0x28]; \ + mov edx,0x0; \ + adc rdx,rdx; \ + mov rbp,0xffffffff00000001; \ + add rax,rbp; \ + mov ebp,0xffffffff; \ + adc rcx,rbp; \ + adc r8,0x1; \ + adc r9,0x0; \ + adc r10,0x0; \ + adc r11,0x0; \ + adc rdx,0xffffffffffffffff; \ + mov ebx,1; \ + and rbx,rdx; \ + and rdx,rbp; \ + xor rbp,rbp; \ + sub rbp,rdx; \ + sub rax,rbp; \ + mov [P0],rax; \ + sbb rcx,rdx; \ + mov [P0+0x8],rcx; \ + sbb r8,rbx; \ + mov [P0+0x10],r8; \ + sbb r9,0x0; \ + mov [P0+0x18],r9; \ + sbb r10,0x0; \ + mov [P0+0x20],r10; \ + sbb r11,0x0; \ + mov [P0+0x28],r11 + +// P0 = 4 * P1 - P2 + +#define cmsub41_p384(P0,P1,P2) \ + mov rdx, [P1+40]; \ + mov r13, rdx; \ + shr rdx, 62; \ + mov r12, [P1+32]; \ + shld r13, r12, 2; \ + mov r11, [P1+24]; \ + shld r12, r11, 2; \ + mov r10, [P1+16]; \ + shld r11, r10, 2; \ + mov r9, [P1+8]; \ + shld r10, r9, 2; \ + mov r8, [P1]; \ + shld r9, r8, 2; \ + shl r8, 2; \ + add rdx, 1; \ + sub r8, [P2]; \ + sbb r9, [P2+0x8]; \ + sbb r10, [P2+0x10]; \ + sbb r11, [P2+0x18]; \ + sbb r12, [P2+0x20]; \ + sbb r13, [P2+0x28]; \ + sbb rdx,0; \ + xor rcx,rcx; \ + mov rax,0xffffffff00000001; \ + mulx rcx,rax,rax; \ + adcx r8,rax; \ + adox r9,rcx; \ + mov eax,0xffffffff; \ + mulx rcx,rax,rax; \ + adcx r9,rax; \ + adox r10,rcx; \ + adcx r10,rdx; \ + mov eax,0x0; \ + mov ecx,0x0; \ + adox rax,rax; \ + adc r11,rax; \ + adc r12,rcx; \ + adc r13,rcx; \ + adc rcx,rcx; \ + sub rcx,0x1; \ + mov edx,0xffffffff; \ + xor rax,rax; \ + and rdx,rcx; \ + sub rax,rdx; \ + and rcx,0x1; \ + sub r8,rax; \ + mov [P0],r8; \ + sbb r9,rdx; \ + mov [P0+0x8],r9; \ + sbb r10,rcx; \ + mov [P0+0x10],r10; \ + sbb r11,0x0; \ + mov [P0+0x18],r11; \ + sbb r12,0x0; \ + mov [P0+0x20],r12; \ + sbb r13,0x0; \ + mov [P0+0x28],r13 + +// P0 = C * P1 - D * P2 + +#define cmsub_p384(P0,C,P1,D,P2) \ + mov r8, 0x00000000ffffffff; \ + sub r8, [P2]; \ + mov r9, 0xffffffff00000000; \ + sbb r9, [P2+8]; \ + mov r10, 0xfffffffffffffffe; \ + sbb r10, [P2+16]; \ + mov r11, 0xffffffffffffffff; \ + sbb r11, [P2+24]; \ + mov r12, 0xffffffffffffffff; \ + sbb r12, [P2+32]; \ + mov r13, 0xffffffffffffffff; \ + sbb r13, [P2+40]; \ + mov rdx, D; \ + mulx rax, r8,r8; \ + mulx rcx, r9,r9; \ + add r9, rax; \ + mulx rax, r10,r10; \ + adc r10, rcx; \ + mulx rcx, r11,r11; \ + adc r11, rax; \ + mulx rax, r12,r12; \ + adc r12, rcx; \ + mulx r14, r13,r13; \ + adc r13, rax; \ + adc r14, 1; \ + xor ecx, ecx; \ + mov rdx, C; \ + mulx rbx, rax, [P1]; \ + adcx r8, rax; \ + adox r9, rbx; \ + mulx rbx, rax, [P1+8]; \ + adcx r9, rax; \ + adox r10, rbx; \ + mulx rbx, rax, [P1+16]; \ + adcx r10, rax; \ + adox r11, rbx; \ + mulx rbx, rax, [P1+24]; \ + adcx r11, rax; \ + adox r12, rbx; \ + mulx rbx, rax, [P1+32]; \ + adcx r12, rax; \ + adox r13, rbx; \ + mulx rdx, rax, [P1+40]; \ + adcx r13, rax; \ + adox rdx, r14; \ + adcx rdx, rcx; \ + xor rcx,rcx; \ + mov rax,0xffffffff00000001; \ + mulx rcx,rax,rax; \ + adcx r8,rax; \ + adox r9,rcx; \ + mov eax,0xffffffff; \ + mulx rcx,rax,rax; \ + adcx r9,rax; \ + adox r10,rcx; \ + adcx r10,rdx; \ + mov eax,0x0; \ + mov ecx,0x0; \ + adox rax,rax; \ + adc r11,rax; \ + adc r12,rcx; \ + adc r13,rcx; \ + adc rcx,rcx; \ + sub rcx,0x1; \ + mov edx,0xffffffff; \ + xor rax,rax; \ + and rdx,rcx; \ + sub rax,rdx; \ + and rcx,0x1; \ + sub r8,rax; \ + mov [P0],r8; \ + sbb r9,rdx; \ + mov [P0+0x8],r9; \ + sbb r10,rcx; \ + mov [P0+0x10],r10; \ + sbb r11,0x0; \ + mov [P0+0x18],r11; \ + sbb r12,0x0; \ + mov [P0+0x20],r12; \ + sbb r13,0x0; \ + mov [P0+0x28],r13 + +// A weak version of add that only guarantees sum in 6 digits + +#define weakadd_p384(P0,P1,P2) \ + mov rax,[P1]; \ + add rax,[P2]; \ + mov rcx,[P1+0x8]; \ + adc rcx,[P2+0x8]; \ + mov r8,[P1+0x10]; \ + adc r8,[P2+0x10]; \ + mov r9,[P1+0x18]; \ + adc r9,[P2+0x18]; \ + mov r10,[P1+0x20]; \ + adc r10,[P2+0x20]; \ + mov r11,[P1+0x28]; \ + adc r11,[P2+0x28]; \ + sbb rdx,rdx; \ + mov ebx,1; \ + and rbx,rdx; \ + mov ebp,0xffffffff; \ + and rdx,rbp; \ + xor rbp,rbp; \ + sub rbp,rdx; \ + add rax,rbp; \ + mov [P0],rax; \ + adc rcx,rdx; \ + mov [P0+0x8],rcx; \ + adc r8,rbx; \ + mov [P0+0x10],r8; \ + adc r9,0x0; \ + mov [P0+0x18],r9; \ + adc r10,0x0; \ + mov [P0+0x20],r10; \ + adc r11,0x0; \ + mov [P0+0x28],r11 + +// P0 = 3 * P1 - 8 * P2 + +#define cmsub38_p384(P0,P1,P2) \ + mov r8, 0x00000000ffffffff; \ + sub r8, [P2]; \ + mov r9, 0xffffffff00000000; \ + sbb r9, [P2+8]; \ + mov r10, 0xfffffffffffffffe; \ + sbb r10, [P2+16]; \ + mov r11, 0xffffffffffffffff; \ + sbb r11, [P2+24]; \ + mov r12, 0xffffffffffffffff; \ + sbb r12, [P2+32]; \ + mov r13, 0xffffffffffffffff; \ + sbb r13, [P2+40]; \ + mov r14, r13; \ + shr r14, 61; \ + shld r13, r12, 3; \ + shld r12, r11, 3; \ + shld r11, r10, 3; \ + shld r10, r9, 3; \ + shld r9, r8, 3; \ + shl r8, 3; \ + add r14, 1; \ + xor ecx, ecx; \ + mov rdx, 3; \ + mulx rbx, rax, [P1]; \ + adcx r8, rax; \ + adox r9, rbx; \ + mulx rbx, rax, [P1+8]; \ + adcx r9, rax; \ + adox r10, rbx; \ + mulx rbx, rax, [P1+16]; \ + adcx r10, rax; \ + adox r11, rbx; \ + mulx rbx, rax, [P1+24]; \ + adcx r11, rax; \ + adox r12, rbx; \ + mulx rbx, rax, [P1+32]; \ + adcx r12, rax; \ + adox r13, rbx; \ + mulx rdx, rax, [P1+40]; \ + adcx r13, rax; \ + adox rdx, r14; \ + adcx rdx, rcx; \ + xor rcx,rcx; \ + mov rax,0xffffffff00000001; \ + mulx rcx,rax,rax; \ + adcx r8,rax; \ + adox r9,rcx; \ + mov eax,0xffffffff; \ + mulx rcx,rax,rax; \ + adcx r9,rax; \ + adox r10,rcx; \ + adcx r10,rdx; \ + mov eax,0x0; \ + mov ecx,0x0; \ + adox rax,rax; \ + adc r11,rax; \ + adc r12,rcx; \ + adc r13,rcx; \ + adc rcx,rcx; \ + sub rcx,0x1; \ + mov edx,0xffffffff; \ + xor rax,rax; \ + and rdx,rcx; \ + sub rax,rdx; \ + and rcx,0x1; \ + sub r8,rax; \ + mov [P0],r8; \ + sbb r9,rdx; \ + mov [P0+0x8],r9; \ + sbb r10,rcx; \ + mov [P0+0x10],r10; \ + sbb r11,0x0; \ + mov [P0+0x18],r11; \ + sbb r12,0x0; \ + mov [P0+0x20],r12; \ + sbb r13,0x0; \ + mov [P0+0x28],r13 + +S2N_BN_SYMBOL(p384_montjdouble): + +#if WINDOWS_ABI + push rdi + push rsi + mov rdi, rcx + mov rsi, rdx +#endif + +// Save registers and make room on stack for temporary variables +// Save the outpuy pointer rdi which gets overwritten in earlier +// operations before it is used. + + push rbx + push rbp + push r12 + push r13 + push r14 + push r15 + + sub rsp, NSPACE + + mov input_z, rdi + +// Main code, just a sequence of basic field operations + +// z2 = z^2 +// y2 = y^2 + + montsqr_p384(z2,z_1) + montsqr_p384(y2,y_1) + +// x2p = x^2 - z^4 = (x + z^2) * (x - z^2) + + weakadd_p384(t1,x_1,z2) + sub_p384(t2,x_1,z2) + montmul_p384(x2p,t1,t2) + +// t1 = y + z +// x4p = x2p^2 +// xy2 = x * y^2 + + add_p384(t1,y_1,z_1) + montsqr_p384(x4p,x2p) + montmul_p384(xy2,x_1,y2) + +// t2 = (y + z)^2 + + montsqr_p384(t2,t1) + +// d = 12 * xy2 - 9 * x4p +// t1 = y^2 + 2 * y * z + + cmsub_p384(d,12,xy2,9,x4p) + sub_p384(t1,t2,z2) + +// y4 = y^4 + + montsqr_p384(y4,y2) + +// Restore the output pointer to write to x_3, y_3 and z_3. + + mov rdi, input_z + +// z_3' = 2 * y * z +// dx2 = d * x2p + + sub_p384(z_3,t1,y2) + montmul_p384(dx2,d,x2p) + +// x' = 4 * xy2 - d + + cmsub41_p384(x_3,xy2,d) + +// y' = 3 * dx2 - 8 * y4 + + cmsub38_p384(y_3,dx2,y4) + +// Restore stack and registers + + add rsp, NSPACE + pop r15 + pop r14 + pop r13 + pop r12 + pop rbp + pop rbx + +#if WINDOWS_ABI + pop rsi + pop rdi +#endif + ret + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack, "", %progbits +#endif diff --git a/x86/p384/p384_montjmixadd.S b/x86/p384/p384_montjmixadd.S new file mode 100644 index 0000000000..ed8b75b675 --- /dev/null +++ b/x86/p384/p384_montjmixadd.S @@ -0,0 +1,941 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +// ---------------------------------------------------------------------------- +// Point mixed addition on NIST curve P-384 in Montgomery-Jacobian coordinates +// +// extern void p384_montjmixadd +// (uint64_t p3[static 18],uint64_t p1[static 18],uint64_t p2[static 12]); +// +// Does p3 := p1 + p2 where all points are regarded as Jacobian triples with +// each coordinate in the Montgomery domain, i.e. x' = (2^384 * x) mod p_384. +// A Jacobian triple (x',y',z') represents affine point (x/z^2,y/z^3). +// The "mixed" part means that p2 only has x and y coordinates, with the +// implicit z coordinate assumed to be the identity. +// +// Standard x86-64 ABI: RDI = p3, RSI = p1, RDX = p2 +// Microsoft x64 ABI: RCX = p3, RDX = p1, R8 = p2 +// ---------------------------------------------------------------------------- +#include "_internal_s2n_bignum.h" + + .intel_syntax noprefix + S2N_BN_SYM_VISIBILITY_DIRECTIVE(p384_montjmixadd) + S2N_BN_SYM_PRIVACY_DIRECTIVE(p384_montjmixadd) + .text + .balign 4 + +// Size of individual field elements + +#define NUMSIZE 48 + +// Pointer-offset pairs for inputs and outputs +// These assume rdi = p3, rsi = p1 and rcx = p2, +// which needs to be set up explicitly before use + +#define x_1 rsi+0 +#define y_1 rsi+NUMSIZE +#define z_1 rsi+(2*NUMSIZE) + +#define x_2 rcx+0 +#define y_2 rcx+NUMSIZE + +#define x_3 rdi+0 +#define y_3 rdi+NUMSIZE +#define z_3 rdi+(2*NUMSIZE) + +// Pointer-offset pairs for temporaries, with some aliasing +// NSPACE is the total stack needed for these temporaries + +#define zp2 rsp+(NUMSIZE*0) +#define ww rsp+(NUMSIZE*0) + +#define yd rsp+(NUMSIZE*1) +#define y2a rsp+(NUMSIZE*1) + +#define x2a rsp+(NUMSIZE*2) +#define zzx2 rsp+(NUMSIZE*2) + +#define zz rsp+(NUMSIZE*3) +#define t1 rsp+(NUMSIZE*3) + +#define t2 rsp+(NUMSIZE*4) +#define zzx1 rsp+(NUMSIZE*4) + +#define xd rsp+(NUMSIZE*5) + +// Temporaries for the actual input pointers + +#define input_x [rsp+(NUMSIZE*6)] +#define input_y [rsp+(NUMSIZE*6+8)] +#define input_z [rsp+(NUMSIZE*6+16)] + +#define NSPACE (NUMSIZE*6+24) + +// Corresponds exactly to bignum_montmul_p384 + +#define montmul_p384(P0,P1,P2) \ + mov rdx,[P2]; \ + xor r15d,r15d; \ + mulx r9,r8,[P1]; \ + mulx r10,rbx,[P1+0x8]; \ + add r9,rbx; \ + mulx r11,rbx,[P1+0x10]; \ + adc r10,rbx; \ + mulx r12,rbx,[P1+0x18]; \ + adc r11,rbx; \ + mulx r13,rbx,[P1+0x20]; \ + adc r12,rbx; \ + mulx r14,rbx,[P1+0x28]; \ + adc r13,rbx; \ + adc r14,r15; \ + mov rdx,r8; \ + shl rdx,0x20; \ + add rdx,r8; \ + xor ebp,ebp; \ + mov rax,0xffffffff00000001; \ + mulx rax,rbx,rax; \ + mov ebx,0xffffffff; \ + mulx rbx,r8,rbx; \ + adc rax,r8; \ + adc rbx,rdx; \ + adc ebp,ebp; \ + sub r9,rax; \ + sbb r10,rbx; \ + sbb r11,rbp; \ + sbb r12,0x0; \ + sbb r13,0x0; \ + sbb rdx,0x0; \ + add r14,rdx; \ + adc r15,0x0; \ + mov rdx,[P2+0x8]; \ + xor r8d,r8d; \ + mulx rbx,rax,[P1]; \ + adcx r9,rax; \ + adox r10,rbx; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r13,rax; \ + adox r14,rbx; \ + adox r15,r8; \ + mulx rbx,rax,[P1+0x28]; \ + adc r14,rax; \ + adc r15,rbx; \ + adc r8,r8; \ + mov rdx,r9; \ + shl rdx,0x20; \ + add rdx,r9; \ + xor ebp,ebp; \ + mov rax,0xffffffff00000001; \ + mulx rax,rbx,rax; \ + mov ebx,0xffffffff; \ + mulx rbx,r9,rbx; \ + adc rax,r9; \ + adc rbx,rdx; \ + adc ebp,ebp; \ + sub r10,rax; \ + sbb r11,rbx; \ + sbb r12,rbp; \ + sbb r13,0x0; \ + sbb r14,0x0; \ + sbb rdx,0x0; \ + add r15,rdx; \ + adc r8,0x0; \ + mov rdx,[P2+0x10]; \ + xor r9d,r9d; \ + mulx rbx,rax,[P1]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r14,rax; \ + adox r15,rbx; \ + adox r8,r9; \ + mulx rbx,rax,[P1+0x28]; \ + adc r15,rax; \ + adc r8,rbx; \ + adc r9,r9; \ + mov rdx,r10; \ + shl rdx,0x20; \ + add rdx,r10; \ + xor ebp,ebp; \ + mov rax,0xffffffff00000001; \ + mulx rax,rbx,rax; \ + mov ebx,0xffffffff; \ + mulx rbx,r10,rbx; \ + adc rax,r10; \ + adc rbx,rdx; \ + adc ebp,ebp; \ + sub r11,rax; \ + sbb r12,rbx; \ + sbb r13,rbp; \ + sbb r14,0x0; \ + sbb r15,0x0; \ + sbb rdx,0x0; \ + add r8,rdx; \ + adc r9,0x0; \ + mov rdx,[P2+0x18]; \ + xor r10d,r10d; \ + mulx rbx,rax,[P1]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r14,rax; \ + adox r15,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r15,rax; \ + adox r8,rbx; \ + adox r9,r10; \ + mulx rbx,rax,[P1+0x28]; \ + adc r8,rax; \ + adc r9,rbx; \ + adc r10,r10; \ + mov rdx,r11; \ + shl rdx,0x20; \ + add rdx,r11; \ + xor ebp,ebp; \ + mov rax,0xffffffff00000001; \ + mulx rax,rbx,rax; \ + mov ebx,0xffffffff; \ + mulx rbx,r11,rbx; \ + adc rax,r11; \ + adc rbx,rdx; \ + adc ebp,ebp; \ + sub r12,rax; \ + sbb r13,rbx; \ + sbb r14,rbp; \ + sbb r15,0x0; \ + sbb r8,0x0; \ + sbb rdx,0x0; \ + add r9,rdx; \ + adc r10,0x0; \ + mov rdx,[P2+0x20]; \ + xor r11d,r11d; \ + mulx rbx,rax,[P1]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r14,rax; \ + adox r15,rbx; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r15,rax; \ + adox r8,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r8,rax; \ + adox r9,rbx; \ + adox r10,r11; \ + mulx rbx,rax,[P1+0x28]; \ + adc r9,rax; \ + adc r10,rbx; \ + adc r11,r11; \ + mov rdx,r12; \ + shl rdx,0x20; \ + add rdx,r12; \ + xor ebp,ebp; \ + mov rax,0xffffffff00000001; \ + mulx rax,rbx,rax; \ + mov ebx,0xffffffff; \ + mulx rbx,r12,rbx; \ + adc rax,r12; \ + adc rbx,rdx; \ + adc ebp,ebp; \ + sub r13,rax; \ + sbb r14,rbx; \ + sbb r15,rbp; \ + sbb r8,0x0; \ + sbb r9,0x0; \ + sbb rdx,0x0; \ + add r10,rdx; \ + adc r11,0x0; \ + mov rdx,[P2+0x28]; \ + xor r12d,r12d; \ + mulx rbx,rax,[P1]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r14,rax; \ + adox r15,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r15,rax; \ + adox r8,rbx; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r8,rax; \ + adox r9,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r9,rax; \ + adox r10,rbx; \ + adox r11,r12; \ + mulx rbx,rax,[P1+0x28]; \ + adc r10,rax; \ + adc r11,rbx; \ + adc r12,r12; \ + mov rdx,r13; \ + shl rdx,0x20; \ + add rdx,r13; \ + xor ebp,ebp; \ + mov rax,0xffffffff00000001; \ + mulx rax,rbx,rax; \ + mov ebx,0xffffffff; \ + mulx rbx,r13,rbx; \ + adc rax,r13; \ + adc rbx,rdx; \ + adc ebp,ebp; \ + sub r14,rax; \ + sbb r15,rbx; \ + sbb r8,rbp; \ + sbb r9,0x0; \ + sbb r10,0x0; \ + sbb rdx,0x0; \ + add r11,rdx; \ + adc r12,0x0; \ + xor edx,edx; \ + xor ebp,ebp; \ + xor r13d,r13d; \ + mov rax,0xffffffff00000001; \ + add rax,r14; \ + mov ebx,0xffffffff; \ + adc rbx,r15; \ + mov ecx,0x1; \ + adc rcx,r8; \ + adc rdx,r9; \ + adc rbp,r10; \ + adc r13,r11; \ + adc r12,0x0; \ + cmovne r14,rax; \ + cmovne r15,rbx; \ + cmovne r8,rcx; \ + cmovne r9,rdx; \ + cmovne r10,rbp; \ + cmovne r11,r13; \ + mov [P0],r14; \ + mov [P0+0x8],r15; \ + mov [P0+0x10],r8; \ + mov [P0+0x18],r9; \ + mov [P0+0x20],r10; \ + mov [P0+0x28],r11 + +// Corresponds exactly to bignum_montsqr_p384 + +#define montsqr_p384(P0,P1) \ + mov rdx,[P1]; \ + mulx r10,r9,[P1+0x8]; \ + mulx r12,r11,[P1+0x18]; \ + mulx r14,r13,[P1+0x28]; \ + mov rdx,[P1+0x18]; \ + mulx rcx,r15,[P1+0x20]; \ + xor ebp,ebp; \ + mov rdx,[P1+0x10]; \ + mulx rbx,rax,[P1]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mov rdx,[P1+0x8]; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,[P1+0x28]; \ + adcx r14,rax; \ + adox r15,rbx; \ + adcx r15,rbp; \ + adox rcx,rbp; \ + adc rcx,rbp; \ + xor ebp,ebp; \ + mov rdx,[P1+0x20]; \ + mulx rbx,rax,[P1]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mov rdx,[P1+0x10]; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r14,rax; \ + adox r15,rbx; \ + mulx rdx,rax,[P1+0x28]; \ + adcx r15,rax; \ + adox rcx,rdx; \ + mov rdx,[P1+0x28]; \ + mulx rbp,rbx,[P1+0x20]; \ + mulx rdx,rax,[P1+0x18]; \ + adcx rcx,rax; \ + adox rbx,rdx; \ + mov eax,0x0; \ + adcx rbx,rax; \ + adox rbp,rax; \ + adc rbp,rax; \ + xor rax,rax; \ + mov rdx,[P1]; \ + mulx rax,r8,[P1]; \ + adcx r9,r9; \ + adox r9,rax; \ + mov rdx,[P1+0x8]; \ + mulx rdx,rax,rdx; \ + adcx r10,r10; \ + adox r10,rax; \ + adcx r11,r11; \ + adox r11,rdx; \ + mov rdx,[P1+0x10]; \ + mulx rdx,rax,rdx; \ + adcx r12,r12; \ + adox r12,rax; \ + adcx r13,r13; \ + adox r13,rdx; \ + mov rdx,[P1+0x18]; \ + mulx rdx,rax,rdx; \ + adcx r14,r14; \ + adox r14,rax; \ + adcx r15,r15; \ + adox r15,rdx; \ + mov rdx,[P1+0x20]; \ + mulx rdx,rax,rdx; \ + adcx rcx,rcx; \ + adox rcx,rax; \ + adcx rbx,rbx; \ + adox rbx,rdx; \ + mov rdx,[P1+0x28]; \ + mulx rsi,rax,rdx; \ + adcx rbp,rbp; \ + adox rbp,rax; \ + mov eax,0x0; \ + adcx rsi,rax; \ + adox rsi,rax; \ + mov [P0],rbx; \ + mov rdx,r8; \ + shl rdx,0x20; \ + add rdx,r8; \ + mov rax,0xffffffff00000001; \ + mulx rax,r8,rax; \ + mov ebx,0xffffffff; \ + mulx r8,rbx,rbx; \ + add rax,rbx; \ + adc r8,rdx; \ + mov ebx,0x0; \ + adc rbx,rbx; \ + sub r9,rax; \ + sbb r10,r8; \ + sbb r11,rbx; \ + sbb r12,0x0; \ + sbb r13,0x0; \ + mov r8,rdx; \ + sbb r8,0x0; \ + mov rdx,r9; \ + shl rdx,0x20; \ + add rdx,r9; \ + mov rax,0xffffffff00000001; \ + mulx rax,r9,rax; \ + mov ebx,0xffffffff; \ + mulx r9,rbx,rbx; \ + add rax,rbx; \ + adc r9,rdx; \ + mov ebx,0x0; \ + adc rbx,rbx; \ + sub r10,rax; \ + sbb r11,r9; \ + sbb r12,rbx; \ + sbb r13,0x0; \ + sbb r8,0x0; \ + mov r9,rdx; \ + sbb r9,0x0; \ + mov rdx,r10; \ + shl rdx,0x20; \ + add rdx,r10; \ + mov rax,0xffffffff00000001; \ + mulx rax,r10,rax; \ + mov ebx,0xffffffff; \ + mulx r10,rbx,rbx; \ + add rax,rbx; \ + adc r10,rdx; \ + mov ebx,0x0; \ + adc rbx,rbx; \ + sub r11,rax; \ + sbb r12,r10; \ + sbb r13,rbx; \ + sbb r8,0x0; \ + sbb r9,0x0; \ + mov r10,rdx; \ + sbb r10,0x0; \ + mov rdx,r11; \ + shl rdx,0x20; \ + add rdx,r11; \ + mov rax,0xffffffff00000001; \ + mulx rax,r11,rax; \ + mov ebx,0xffffffff; \ + mulx r11,rbx,rbx; \ + add rax,rbx; \ + adc r11,rdx; \ + mov ebx,0x0; \ + adc rbx,rbx; \ + sub r12,rax; \ + sbb r13,r11; \ + sbb r8,rbx; \ + sbb r9,0x0; \ + sbb r10,0x0; \ + mov r11,rdx; \ + sbb r11,0x0; \ + mov rdx,r12; \ + shl rdx,0x20; \ + add rdx,r12; \ + mov rax,0xffffffff00000001; \ + mulx rax,r12,rax; \ + mov ebx,0xffffffff; \ + mulx r12,rbx,rbx; \ + add rax,rbx; \ + adc r12,rdx; \ + mov ebx,0x0; \ + adc rbx,rbx; \ + sub r13,rax; \ + sbb r8,r12; \ + sbb r9,rbx; \ + sbb r10,0x0; \ + sbb r11,0x0; \ + mov r12,rdx; \ + sbb r12,0x0; \ + mov rdx,r13; \ + shl rdx,0x20; \ + add rdx,r13; \ + mov rax,0xffffffff00000001; \ + mulx rax,r13,rax; \ + mov ebx,0xffffffff; \ + mulx r13,rbx,rbx; \ + add rax,rbx; \ + adc r13,rdx; \ + mov ebx,0x0; \ + adc rbx,rbx; \ + sub r8,rax; \ + sbb r9,r13; \ + sbb r10,rbx; \ + sbb r11,0x0; \ + sbb r12,0x0; \ + mov r13,rdx; \ + sbb r13,0x0; \ + mov rbx,[P0]; \ + add r14,r8; \ + adc r15,r9; \ + adc rcx,r10; \ + adc rbx,r11; \ + adc rbp,r12; \ + adc rsi,r13; \ + mov r8d,0x0; \ + adc r8,r8; \ + xor r11,r11; \ + xor r12,r12; \ + xor r13,r13; \ + mov rax,0xffffffff00000001; \ + add rax,r14; \ + mov r9d,0xffffffff; \ + adc r9,r15; \ + mov r10d,0x1; \ + adc r10,rcx; \ + adc r11,rbx; \ + adc r12,rbp; \ + adc r13,rsi; \ + adc r8,0x0; \ + cmovne r14,rax; \ + cmovne r15,r9; \ + cmovne rcx,r10; \ + cmovne rbx,r11; \ + cmovne rbp,r12; \ + cmovne rsi,r13; \ + mov [P0],r14; \ + mov [P0+0x8],r15; \ + mov [P0+0x10],rcx; \ + mov [P0+0x18],rbx; \ + mov [P0+0x20],rbp; \ + mov [P0+0x28],rsi + +// Almost-Montgomery variant which we use when an input to other muls +// with the other argument fully reduced (which is always safe). + +#define amontsqr_p384(P0,P1) \ + mov rdx,[P1]; \ + mulx r10,r9,[P1+0x8]; \ + mulx r12,r11,[P1+0x18]; \ + mulx r14,r13,[P1+0x28]; \ + mov rdx,[P1+0x18]; \ + mulx rcx,r15,[P1+0x20]; \ + xor ebp,ebp; \ + mov rdx,[P1+0x10]; \ + mulx rbx,rax,[P1]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mov rdx,[P1+0x8]; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,[P1+0x28]; \ + adcx r14,rax; \ + adox r15,rbx; \ + adcx r15,rbp; \ + adox rcx,rbp; \ + adc rcx,rbp; \ + xor ebp,ebp; \ + mov rdx,[P1+0x20]; \ + mulx rbx,rax,[P1]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mov rdx,[P1+0x10]; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r14,rax; \ + adox r15,rbx; \ + mulx rdx,rax,[P1+0x28]; \ + adcx r15,rax; \ + adox rcx,rdx; \ + mov rdx,[P1+0x28]; \ + mulx rbp,rbx,[P1+0x20]; \ + mulx rdx,rax,[P1+0x18]; \ + adcx rcx,rax; \ + adox rbx,rdx; \ + mov eax,0x0; \ + adcx rbx,rax; \ + adox rbp,rax; \ + adc rbp,rax; \ + xor rax,rax; \ + mov rdx,[P1]; \ + mulx rax,r8,[P1]; \ + adcx r9,r9; \ + adox r9,rax; \ + mov rdx,[P1+0x8]; \ + mulx rdx,rax,rdx; \ + adcx r10,r10; \ + adox r10,rax; \ + adcx r11,r11; \ + adox r11,rdx; \ + mov rdx,[P1+0x10]; \ + mulx rdx,rax,rdx; \ + adcx r12,r12; \ + adox r12,rax; \ + adcx r13,r13; \ + adox r13,rdx; \ + mov rdx,[P1+0x18]; \ + mulx rdx,rax,rdx; \ + adcx r14,r14; \ + adox r14,rax; \ + adcx r15,r15; \ + adox r15,rdx; \ + mov rdx,[P1+0x20]; \ + mulx rdx,rax,rdx; \ + adcx rcx,rcx; \ + adox rcx,rax; \ + adcx rbx,rbx; \ + adox rbx,rdx; \ + mov rdx,[P1+0x28]; \ + mulx rsi,rax,rdx; \ + adcx rbp,rbp; \ + adox rbp,rax; \ + mov eax,0x0; \ + adcx rsi,rax; \ + adox rsi,rax; \ + mov [P0],rbx; \ + mov rdx,r8; \ + shl rdx,0x20; \ + add rdx,r8; \ + mov rax,0xffffffff00000001; \ + mulx rax,r8,rax; \ + mov ebx,0xffffffff; \ + mulx r8,rbx,rbx; \ + add rax,rbx; \ + adc r8,rdx; \ + mov ebx,0x0; \ + adc rbx,rbx; \ + sub r9,rax; \ + sbb r10,r8; \ + sbb r11,rbx; \ + sbb r12,0x0; \ + sbb r13,0x0; \ + mov r8,rdx; \ + sbb r8,0x0; \ + mov rdx,r9; \ + shl rdx,0x20; \ + add rdx,r9; \ + mov rax,0xffffffff00000001; \ + mulx rax,r9,rax; \ + mov ebx,0xffffffff; \ + mulx r9,rbx,rbx; \ + add rax,rbx; \ + adc r9,rdx; \ + mov ebx,0x0; \ + adc rbx,rbx; \ + sub r10,rax; \ + sbb r11,r9; \ + sbb r12,rbx; \ + sbb r13,0x0; \ + sbb r8,0x0; \ + mov r9,rdx; \ + sbb r9,0x0; \ + mov rdx,r10; \ + shl rdx,0x20; \ + add rdx,r10; \ + mov rax,0xffffffff00000001; \ + mulx rax,r10,rax; \ + mov ebx,0xffffffff; \ + mulx r10,rbx,rbx; \ + add rax,rbx; \ + adc r10,rdx; \ + mov ebx,0x0; \ + adc rbx,rbx; \ + sub r11,rax; \ + sbb r12,r10; \ + sbb r13,rbx; \ + sbb r8,0x0; \ + sbb r9,0x0; \ + mov r10,rdx; \ + sbb r10,0x0; \ + mov rdx,r11; \ + shl rdx,0x20; \ + add rdx,r11; \ + mov rax,0xffffffff00000001; \ + mulx rax,r11,rax; \ + mov ebx,0xffffffff; \ + mulx r11,rbx,rbx; \ + add rax,rbx; \ + adc r11,rdx; \ + mov ebx,0x0; \ + adc rbx,rbx; \ + sub r12,rax; \ + sbb r13,r11; \ + sbb r8,rbx; \ + sbb r9,0x0; \ + sbb r10,0x0; \ + mov r11,rdx; \ + sbb r11,0x0; \ + mov rdx,r12; \ + shl rdx,0x20; \ + add rdx,r12; \ + mov rax,0xffffffff00000001; \ + mulx rax,r12,rax; \ + mov ebx,0xffffffff; \ + mulx r12,rbx,rbx; \ + add rax,rbx; \ + adc r12,rdx; \ + mov ebx,0x0; \ + adc rbx,rbx; \ + sub r13,rax; \ + sbb r8,r12; \ + sbb r9,rbx; \ + sbb r10,0x0; \ + sbb r11,0x0; \ + mov r12,rdx; \ + sbb r12,0x0; \ + mov rdx,r13; \ + shl rdx,0x20; \ + add rdx,r13; \ + mov rax,0xffffffff00000001; \ + mulx rax,r13,rax; \ + mov ebx,0xffffffff; \ + mulx r13,rbx,rbx; \ + add rax,rbx; \ + adc r13,rdx; \ + mov ebx,0x0; \ + adc rbx,rbx; \ + sub r8,rax; \ + sbb r9,r13; \ + sbb r10,rbx; \ + sbb r11,0x0; \ + sbb r12,0x0; \ + mov r13,rdx; \ + sbb r13,0x0; \ + mov rbx,[P0]; \ + add r14,r8; \ + adc r15,r9; \ + adc rcx,r10; \ + adc rbx,r11; \ + adc rbp,r12; \ + adc rsi,r13; \ + mov r8d,0x0; \ + mov rax,0xffffffff00000001; \ + mov r9d,0xffffffff; \ + mov r10d,0x1; \ + cmovnc rax, r8; \ + cmovnc r9, r8; \ + cmovnc r10, r8; \ + add r14, rax; \ + adc r15, r9; \ + adc rcx, r10; \ + adc rbx, r8; \ + adc rbp, r8; \ + adc rsi, r8; \ + mov [P0],r14; \ + mov [P0+0x8],r15; \ + mov [P0+0x10],rcx; \ + mov [P0+0x18],rbx; \ + mov [P0+0x20],rbp; \ + mov [P0+0x28],rsi + +// Corresponds exactly to bignum_sub_p384 + +#define sub_p384(P0,P1,P2) \ + mov rax,[P1]; \ + sub rax,[P2]; \ + mov rdx,[P1+0x8]; \ + sbb rdx,[P2+0x8]; \ + mov r8,[P1+0x10]; \ + sbb r8,[P2+0x10]; \ + mov r9,[P1+0x18]; \ + sbb r9,[P2+0x18]; \ + mov r10,[P1+0x20]; \ + sbb r10,[P2+0x20]; \ + mov r11,[P1+0x28]; \ + sbb r11,[P2+0x28]; \ + sbb rcx,rcx; \ + mov esi,0xffffffff; \ + and rcx,rsi; \ + xor rsi,rsi; \ + sub rsi,rcx; \ + sub rax,rsi; \ + mov [P0],rax; \ + sbb rdx,rcx; \ + mov [P0+0x8],rdx; \ + sbb rax,rax; \ + and rcx,rsi; \ + neg rax; \ + sbb r8,rcx; \ + mov [P0+0x10],r8; \ + sbb r9,0x0; \ + mov [P0+0x18],r9; \ + sbb r10,0x0; \ + mov [P0+0x20],r10; \ + sbb r11,0x0; \ + mov [P0+0x28],r11 + +S2N_BN_SYMBOL(p384_montjmixadd): + +#if WINDOWS_ABI + push rdi + push rsi + mov rdi, rcx + mov rsi, rdx + mov rdx, r8 +#endif + +// Save registers and make room on stack for temporary variables +// Put the input arguments in non-volatile places on the stack + + push rbx + push rbp + push r12 + push r13 + push r14 + push r15 + + sub rsp, NSPACE + + mov input_z, rdi + mov input_x, rsi + mov input_y, rdx + +// Main code, just a sequence of basic field operations +// 8 * multiply + 3 * square + 7 * subtract + + amontsqr_p384(zp2,z_1) + + mov rsi, input_x + mov rcx, input_y + montmul_p384(y2a,z_1,y_2) + + mov rcx, input_y + montmul_p384(x2a,zp2,x_2) + + montmul_p384(y2a,zp2,y2a) + + mov rsi, input_x + sub_p384(xd,x2a,x_1) + mov rsi, input_x + sub_p384(yd,y2a,y_1) + + amontsqr_p384(zz,xd) + montsqr_p384(ww,yd) + + mov rsi, input_x + montmul_p384(zzx1,zz,x_1) + montmul_p384(zzx2,zz,x2a) + + mov rdi, input_z + sub_p384(x_3,ww,zzx1) + sub_p384(t1,zzx2,zzx1) + + mov rdi, input_z + mov rsi, input_x + montmul_p384(z_3,xd,z_1) + + mov rdi, input_z + sub_p384(x_3,x_3,zzx2) + + mov rdi, input_z + sub_p384(t2,zzx1,x_3) + + mov rsi, input_x + montmul_p384(t1,t1,y_1) + montmul_p384(t2,yd,t2) + + mov rdi, input_z + sub_p384(y_3,t2,t1) + +// Restore stack and registers + + add rsp, NSPACE + pop r15 + pop r14 + pop r13 + pop r12 + pop rbp + pop rbx + +#if WINDOWS_ABI + pop rsi + pop rdi +#endif + ret + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack, "", %progbits +#endif diff --git a/x86/proofs/p384_montjadd.ml b/x86/proofs/p384_montjadd.ml new file mode 100644 index 0000000000..60fd13bed8 --- /dev/null +++ b/x86/proofs/p384_montjadd.ml @@ -0,0 +1,7248 @@ +(* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + *) + +(* ========================================================================= *) +(* Point addition in Montgomery-Jacobian coordinates for NIST P-384 curve. *) +(* ========================================================================= *) + +needs "x86/proofs/base.ml";; +needs "common/ecencoding.ml";; +needs "EC/jacobian.ml";; +needs "EC/nistp384.ml";; + +prioritize_int();; +prioritize_real();; +prioritize_num();; + +(**** print_literal_from_elf "x86/p384/p384_montjadd.o";; + ****) + +let p384_montjadd_mc = define_assert_from_elf + "p384_montjadd_mc" "x86/p384/p384_montjadd.o" +[ + 0x53; (* PUSH (% rbx) *) + 0x55; (* PUSH (% rbp) *) + 0x41; 0x54; (* PUSH (% r12) *) + 0x41; 0x55; (* PUSH (% r13) *) + 0x41; 0x56; (* PUSH (% r14) *) + 0x41; 0x57; (* PUSH (% r15) *) + 0x48; 0x81; 0xec; 0x68; 0x01; 0x00; 0x00; + (* SUB (% rsp) (Imm32 (word 360)) *) + 0x48; 0x89; 0xbc; 0x24; 0x60; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,352))) (% rdi) *) + 0x48; 0x89; 0xb4; 0x24; 0x50; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,336))) (% rsi) *) + 0x48; 0x89; 0x94; 0x24; 0x58; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,344))) (% rdx) *) + 0x48; 0x8b; 0x56; 0x60; (* MOV (% rdx) (Memop Quadword (%% (rsi,96))) *) + 0xc4; 0x62; 0xb3; 0xf6; 0x56; 0x68; + (* MULX4 (% r10,% r9) (% rdx,Memop Quadword (%% (rsi,104))) *) + 0xc4; 0x62; 0xa3; 0xf6; 0x66; 0x78; + (* MULX4 (% r12,% r11) (% rdx,Memop Quadword (%% (rsi,120))) *) + 0xc4; 0x62; 0x93; 0xf6; 0xb6; 0x88; 0x00; 0x00; 0x00; + (* MULX4 (% r14,% r13) (% rdx,Memop Quadword (%% (rsi,136))) *) + 0x48; 0x8b; 0x56; 0x78; (* MOV (% rdx) (Memop Quadword (%% (rsi,120))) *) + 0xc4; 0xe2; 0x83; 0xf6; 0x8e; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rcx,% r15) (% rdx,Memop Quadword (%% (rsi,128))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x56; 0x70; (* MOV (% rdx) (Memop Quadword (%% (rsi,112))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x48; 0x8b; 0x56; 0x68; (* MOV (% rdx) (Memop Quadword (%% (rsi,104))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x88; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,136))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADCX (% r15) (% rbp) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xcd; + (* ADOX (% rcx) (% rbp) *) + 0x48; 0x11; 0xe9; (* ADC (% rcx) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x96; 0x80; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,128))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0x8b; 0x56; 0x70; (* MOV (% rdx) (Memop Quadword (%% (rsi,112))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x96; 0x88; 0x00; 0x00; 0x00; + (* MULX4 (% rdx,% rax) (% rdx,Memop Quadword (%% (rsi,136))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xca; + (* ADOX (% rcx) (% rdx) *) + 0x48; 0x8b; 0x96; 0x88; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,136))) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xae; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rbp,% rbx) (% rdx,Memop Quadword (%% (rsi,128))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x56; 0x78; + (* MULX4 (% rdx,% rax) (% rdx,Memop Quadword (%% (rsi,120))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% rcx) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% rbx) (% rdx) *) + 0xb8; 0x00; 0x00; 0x00; 0x00; + (* MOV (% eax) (Imm32 (word 0)) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% rbx) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xe8; + (* ADOX (% rbp) (% rax) *) + 0x48; 0x11; 0xc5; (* ADC (% rbp) (% rax) *) + 0x48; 0x31; 0xc0; (* XOR (% rax) (% rax) *) + 0x48; 0x8b; 0x56; 0x60; (* MOV (% rdx) (Memop Quadword (%% (rsi,96))) *) + 0xc4; 0xe2; 0xbb; 0xf6; 0x46; 0x60; + (* MULX4 (% rax,% r8) (% rdx,Memop Quadword (%% (rsi,96))) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% r9) (% r9) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADOX (% r9) (% rax) *) + 0x48; 0x8b; 0x56; 0x68; (* MOV (% rdx) (Memop Quadword (%% (rsi,104))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xd2; + (* ADCX (% r10) (% r10) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADOX (% r10) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% r11) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% r11) (% rdx) *) + 0x48; 0x8b; 0x56; 0x70; (* MOV (% rdx) (Memop Quadword (%% (rsi,112))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xe4; + (* ADCX (% r12) (% r12) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADOX (% r12) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% r13) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xea; + (* ADOX (% r13) (% rdx) *) + 0x48; 0x8b; 0x56; 0x78; (* MOV (% rdx) (Memop Quadword (%% (rsi,120))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf6; + (* ADCX (% r14) (% r14) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xff; + (* ADCX (% r15) (% r15) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfa; + (* ADOX (% r15) (% rdx) *) + 0x48; 0x8b; 0x96; 0x80; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,128))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% rcx) (% rcx) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc8; + (* ADOX (% rcx) (% rax) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% rbx) (% rbx) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% rbx) (% rdx) *) + 0x48; 0x8b; 0x96; 0x88; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,136))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xf2; + (* MULX4 (% rsi,% rax) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% rbp) (% rbp) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xe8; + (* ADOX (% rbp) (% rax) *) + 0xb8; 0x00; 0x00; 0x00; 0x00; + (* MOV (% eax) (Imm32 (word 0)) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% rsi) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% rsi) (% rax) *) + 0x48; 0x89; 0x1c; 0x24; (* MOV (Memop Quadword (%% (rsp,0))) (% rbx) *) + 0x4c; 0x89; 0xc2; (* MOV (% rdx) (% r8) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xc2; (* ADD (% rdx) (% r8) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xbb; 0xf6; 0xc0; + (* MULX4 (% rax,% r8) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xc3; + (* MULX4 (% r8,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd0; (* ADC (% r8) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc1; (* SUB (% r9) (% rax) *) + 0x4d; 0x19; 0xc2; (* SBB (% r10) (% r8) *) + 0x49; 0x19; 0xdb; (* SBB (% r11) (% rbx) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd0; (* MOV (% r8) (% rdx) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xca; (* MOV (% rdx) (% r9) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xca; (* ADD (% rdx) (% r9) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xb3; 0xf6; 0xc0; + (* MULX4 (% rax,% r9) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xcb; + (* MULX4 (% r9,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd1; (* ADC (% r9) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc2; (* SUB (% r10) (% rax) *) + 0x4d; 0x19; 0xcb; (* SBB (% r11) (% r9) *) + 0x49; 0x19; 0xdc; (* SBB (% r12) (% rbx) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd1; (* MOV (% r9) (% rdx) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xd2; (* MOV (% rdx) (% r10) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xd2; (* ADD (% rdx) (% r10) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xab; 0xf6; 0xc0; + (* MULX4 (% rax,% r10) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xd3; + (* MULX4 (% r10,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd2; (* ADC (% r10) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc3; (* SUB (% r11) (% rax) *) + 0x4d; 0x19; 0xd4; (* SBB (% r12) (% r10) *) + 0x49; 0x19; 0xdd; (* SBB (% r13) (% rbx) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd2; (* MOV (% r10) (% rdx) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xda; (* MOV (% rdx) (% r11) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xda; (* ADD (% rdx) (% r11) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xa3; 0xf6; 0xc0; + (* MULX4 (% rax,% r11) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xdb; + (* MULX4 (% r11,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd3; (* ADC (% r11) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc4; (* SUB (% r12) (% rax) *) + 0x4d; 0x19; 0xdd; (* SBB (% r13) (% r11) *) + 0x49; 0x19; 0xd8; (* SBB (% r8) (% rbx) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd3; (* MOV (% r11) (% rdx) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xe2; (* MOV (% rdx) (% r12) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xe2; (* ADD (% rdx) (% r12) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0x9b; 0xf6; 0xc0; + (* MULX4 (% rax,% r12) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xe3; + (* MULX4 (% r12,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd4; (* ADC (% r12) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc5; (* SUB (% r13) (% rax) *) + 0x4d; 0x19; 0xe0; (* SBB (% r8) (% r12) *) + 0x49; 0x19; 0xd9; (* SBB (% r9) (% rbx) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd4; (* MOV (% r12) (% rdx) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xea; (* MOV (% rdx) (% r13) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xea; (* ADD (% rdx) (% r13) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0x93; 0xf6; 0xc0; + (* MULX4 (% rax,% r13) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xeb; + (* MULX4 (% r13,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd5; (* ADC (% r13) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc0; (* SUB (% r8) (% rax) *) + 0x4d; 0x19; 0xe9; (* SBB (% r9) (% r13) *) + 0x49; 0x19; 0xda; (* SBB (% r10) (% rbx) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd5; (* MOV (% r13) (% rdx) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x1c; 0x24; (* MOV (% rbx) (Memop Quadword (%% (rsp,0))) *) + 0x4d; 0x01; 0xc6; (* ADD (% r14) (% r8) *) + 0x4d; 0x11; 0xcf; (* ADC (% r15) (% r9) *) + 0x4c; 0x11; 0xd1; (* ADC (% rcx) (% r10) *) + 0x4c; 0x11; 0xdb; (* ADC (% rbx) (% r11) *) + 0x4c; 0x11; 0xe5; (* ADC (% rbp) (% r12) *) + 0x4c; 0x11; 0xee; (* ADC (% rsi) (% r13) *) + 0x41; 0xb8; 0x00; 0x00; 0x00; 0x00; + (* MOV (% r8d) (Imm32 (word 0)) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0x41; 0xb9; 0xff; 0xff; 0xff; 0xff; + (* MOV (% r9d) (Imm32 (word 4294967295)) *) + 0x41; 0xba; 0x01; 0x00; 0x00; 0x00; + (* MOV (% r10d) (Imm32 (word 1)) *) + 0x49; 0x0f; 0x43; 0xc0; (* CMOVAE (% rax) (% r8) *) + 0x4d; 0x0f; 0x43; 0xc8; (* CMOVAE (% r9) (% r8) *) + 0x4d; 0x0f; 0x43; 0xd0; (* CMOVAE (% r10) (% r8) *) + 0x49; 0x01; 0xc6; (* ADD (% r14) (% rax) *) + 0x4d; 0x11; 0xcf; (* ADC (% r15) (% r9) *) + 0x4c; 0x11; 0xd1; (* ADC (% rcx) (% r10) *) + 0x4c; 0x11; 0xc3; (* ADC (% rbx) (% r8) *) + 0x4c; 0x11; 0xc5; (* ADC (% rbp) (% r8) *) + 0x4c; 0x11; 0xc6; (* ADC (% rsi) (% r8) *) + 0x4c; 0x89; 0x34; 0x24; (* MOV (Memop Quadword (%% (rsp,0))) (% r14) *) + 0x4c; 0x89; 0x7c; 0x24; 0x08; + (* MOV (Memop Quadword (%% (rsp,8))) (% r15) *) + 0x48; 0x89; 0x4c; 0x24; 0x10; + (* MOV (Memop Quadword (%% (rsp,16))) (% rcx) *) + 0x48; 0x89; 0x5c; 0x24; 0x18; + (* MOV (Memop Quadword (%% (rsp,24))) (% rbx) *) + 0x48; 0x89; 0x6c; 0x24; 0x20; + (* MOV (Memop Quadword (%% (rsp,32))) (% rbp) *) + 0x48; 0x89; 0x74; 0x24; 0x28; + (* MOV (Memop Quadword (%% (rsp,40))) (% rsi) *) + 0x48; 0x8b; 0xb4; 0x24; 0x58; 0x01; 0x00; 0x00; + (* MOV (% rsi) (Memop Quadword (%% (rsp,344))) *) + 0x48; 0x8b; 0x56; 0x60; (* MOV (% rdx) (Memop Quadword (%% (rsi,96))) *) + 0xc4; 0x62; 0xb3; 0xf6; 0x56; 0x68; + (* MULX4 (% r10,% r9) (% rdx,Memop Quadword (%% (rsi,104))) *) + 0xc4; 0x62; 0xa3; 0xf6; 0x66; 0x78; + (* MULX4 (% r12,% r11) (% rdx,Memop Quadword (%% (rsi,120))) *) + 0xc4; 0x62; 0x93; 0xf6; 0xb6; 0x88; 0x00; 0x00; 0x00; + (* MULX4 (% r14,% r13) (% rdx,Memop Quadword (%% (rsi,136))) *) + 0x48; 0x8b; 0x56; 0x78; (* MOV (% rdx) (Memop Quadword (%% (rsi,120))) *) + 0xc4; 0xe2; 0x83; 0xf6; 0x8e; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rcx,% r15) (% rdx,Memop Quadword (%% (rsi,128))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x56; 0x70; (* MOV (% rdx) (Memop Quadword (%% (rsi,112))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x48; 0x8b; 0x56; 0x68; (* MOV (% rdx) (Memop Quadword (%% (rsi,104))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x88; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,136))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADCX (% r15) (% rbp) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xcd; + (* ADOX (% rcx) (% rbp) *) + 0x48; 0x11; 0xe9; (* ADC (% rcx) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x96; 0x80; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,128))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0x8b; 0x56; 0x70; (* MOV (% rdx) (Memop Quadword (%% (rsi,112))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x96; 0x88; 0x00; 0x00; 0x00; + (* MULX4 (% rdx,% rax) (% rdx,Memop Quadword (%% (rsi,136))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xca; + (* ADOX (% rcx) (% rdx) *) + 0x48; 0x8b; 0x96; 0x88; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,136))) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xae; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rbp,% rbx) (% rdx,Memop Quadword (%% (rsi,128))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x56; 0x78; + (* MULX4 (% rdx,% rax) (% rdx,Memop Quadword (%% (rsi,120))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% rcx) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% rbx) (% rdx) *) + 0xb8; 0x00; 0x00; 0x00; 0x00; + (* MOV (% eax) (Imm32 (word 0)) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% rbx) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xe8; + (* ADOX (% rbp) (% rax) *) + 0x48; 0x11; 0xc5; (* ADC (% rbp) (% rax) *) + 0x48; 0x31; 0xc0; (* XOR (% rax) (% rax) *) + 0x48; 0x8b; 0x56; 0x60; (* MOV (% rdx) (Memop Quadword (%% (rsi,96))) *) + 0xc4; 0xe2; 0xbb; 0xf6; 0x46; 0x60; + (* MULX4 (% rax,% r8) (% rdx,Memop Quadword (%% (rsi,96))) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% r9) (% r9) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADOX (% r9) (% rax) *) + 0x48; 0x8b; 0x56; 0x68; (* MOV (% rdx) (Memop Quadword (%% (rsi,104))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xd2; + (* ADCX (% r10) (% r10) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADOX (% r10) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% r11) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% r11) (% rdx) *) + 0x48; 0x8b; 0x56; 0x70; (* MOV (% rdx) (Memop Quadword (%% (rsi,112))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xe4; + (* ADCX (% r12) (% r12) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADOX (% r12) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% r13) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xea; + (* ADOX (% r13) (% rdx) *) + 0x48; 0x8b; 0x56; 0x78; (* MOV (% rdx) (Memop Quadword (%% (rsi,120))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf6; + (* ADCX (% r14) (% r14) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xff; + (* ADCX (% r15) (% r15) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfa; + (* ADOX (% r15) (% rdx) *) + 0x48; 0x8b; 0x96; 0x80; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,128))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% rcx) (% rcx) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc8; + (* ADOX (% rcx) (% rax) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% rbx) (% rbx) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% rbx) (% rdx) *) + 0x48; 0x8b; 0x96; 0x88; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,136))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xf2; + (* MULX4 (% rsi,% rax) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% rbp) (% rbp) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xe8; + (* ADOX (% rbp) (% rax) *) + 0xb8; 0x00; 0x00; 0x00; 0x00; + (* MOV (% eax) (Imm32 (word 0)) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% rsi) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% rsi) (% rax) *) + 0x48; 0x89; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,240))) (% rbx) *) + 0x4c; 0x89; 0xc2; (* MOV (% rdx) (% r8) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xc2; (* ADD (% rdx) (% r8) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xbb; 0xf6; 0xc0; + (* MULX4 (% rax,% r8) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xc3; + (* MULX4 (% r8,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd0; (* ADC (% r8) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc1; (* SUB (% r9) (% rax) *) + 0x4d; 0x19; 0xc2; (* SBB (% r10) (% r8) *) + 0x49; 0x19; 0xdb; (* SBB (% r11) (% rbx) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd0; (* MOV (% r8) (% rdx) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xca; (* MOV (% rdx) (% r9) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xca; (* ADD (% rdx) (% r9) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xb3; 0xf6; 0xc0; + (* MULX4 (% rax,% r9) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xcb; + (* MULX4 (% r9,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd1; (* ADC (% r9) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc2; (* SUB (% r10) (% rax) *) + 0x4d; 0x19; 0xcb; (* SBB (% r11) (% r9) *) + 0x49; 0x19; 0xdc; (* SBB (% r12) (% rbx) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd1; (* MOV (% r9) (% rdx) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xd2; (* MOV (% rdx) (% r10) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xd2; (* ADD (% rdx) (% r10) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xab; 0xf6; 0xc0; + (* MULX4 (% rax,% r10) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xd3; + (* MULX4 (% r10,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd2; (* ADC (% r10) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc3; (* SUB (% r11) (% rax) *) + 0x4d; 0x19; 0xd4; (* SBB (% r12) (% r10) *) + 0x49; 0x19; 0xdd; (* SBB (% r13) (% rbx) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd2; (* MOV (% r10) (% rdx) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xda; (* MOV (% rdx) (% r11) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xda; (* ADD (% rdx) (% r11) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xa3; 0xf6; 0xc0; + (* MULX4 (% rax,% r11) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xdb; + (* MULX4 (% r11,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd3; (* ADC (% r11) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc4; (* SUB (% r12) (% rax) *) + 0x4d; 0x19; 0xdd; (* SBB (% r13) (% r11) *) + 0x49; 0x19; 0xd8; (* SBB (% r8) (% rbx) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd3; (* MOV (% r11) (% rdx) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xe2; (* MOV (% rdx) (% r12) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xe2; (* ADD (% rdx) (% r12) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0x9b; 0xf6; 0xc0; + (* MULX4 (% rax,% r12) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xe3; + (* MULX4 (% r12,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd4; (* ADC (% r12) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc5; (* SUB (% r13) (% rax) *) + 0x4d; 0x19; 0xe0; (* SBB (% r8) (% r12) *) + 0x49; 0x19; 0xd9; (* SBB (% r9) (% rbx) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd4; (* MOV (% r12) (% rdx) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xea; (* MOV (% rdx) (% r13) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xea; (* ADD (% rdx) (% r13) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0x93; 0xf6; 0xc0; + (* MULX4 (% rax,% r13) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xeb; + (* MULX4 (% r13,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd5; (* ADC (% r13) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc0; (* SUB (% r8) (% rax) *) + 0x4d; 0x19; 0xe9; (* SBB (% r9) (% r13) *) + 0x49; 0x19; 0xda; (* SBB (% r10) (% rbx) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd5; (* MOV (% r13) (% rdx) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MOV (% rbx) (Memop Quadword (%% (rsp,240))) *) + 0x4d; 0x01; 0xc6; (* ADD (% r14) (% r8) *) + 0x4d; 0x11; 0xcf; (* ADC (% r15) (% r9) *) + 0x4c; 0x11; 0xd1; (* ADC (% rcx) (% r10) *) + 0x4c; 0x11; 0xdb; (* ADC (% rbx) (% r11) *) + 0x4c; 0x11; 0xe5; (* ADC (% rbp) (% r12) *) + 0x4c; 0x11; 0xee; (* ADC (% rsi) (% r13) *) + 0x41; 0xb8; 0x00; 0x00; 0x00; 0x00; + (* MOV (% r8d) (Imm32 (word 0)) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0x41; 0xb9; 0xff; 0xff; 0xff; 0xff; + (* MOV (% r9d) (Imm32 (word 4294967295)) *) + 0x41; 0xba; 0x01; 0x00; 0x00; 0x00; + (* MOV (% r10d) (Imm32 (word 1)) *) + 0x49; 0x0f; 0x43; 0xc0; (* CMOVAE (% rax) (% r8) *) + 0x4d; 0x0f; 0x43; 0xc8; (* CMOVAE (% r9) (% r8) *) + 0x4d; 0x0f; 0x43; 0xd0; (* CMOVAE (% r10) (% r8) *) + 0x49; 0x01; 0xc6; (* ADD (% r14) (% rax) *) + 0x4d; 0x11; 0xcf; (* ADC (% r15) (% r9) *) + 0x4c; 0x11; 0xd1; (* ADC (% rcx) (% r10) *) + 0x4c; 0x11; 0xc3; (* ADC (% rbx) (% r8) *) + 0x4c; 0x11; 0xc5; (* ADC (% rbp) (% r8) *) + 0x4c; 0x11; 0xc6; (* ADC (% rsi) (% r8) *) + 0x4c; 0x89; 0xb4; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,240))) (% r14) *) + 0x4c; 0x89; 0xbc; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,248))) (% r15) *) + 0x48; 0x89; 0x8c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,256))) (% rcx) *) + 0x48; 0x89; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,264))) (% rbx) *) + 0x48; 0x89; 0xac; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,272))) (% rbp) *) + 0x48; 0x89; 0xb4; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,280))) (% rsi) *) + 0x48; 0x8b; 0xb4; 0x24; 0x50; 0x01; 0x00; 0x00; + (* MOV (% rsi) (Memop Quadword (%% (rsp,336))) *) + 0x48; 0x8b; 0x8c; 0x24; 0x58; 0x01; 0x00; 0x00; + (* MOV (% rcx) (Memop Quadword (%% (rsp,344))) *) + 0x48; 0x8b; 0x56; 0x30; (* MOV (% rdx) (Memop Quadword (%% (rsi,48))) *) + 0x45; 0x31; 0xff; (* XOR (% r15d) (% r15d) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x49; 0x60; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rcx,96))) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x51; 0x68; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rcx,104))) *) + 0x49; 0x01; 0xd9; (* ADD (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x59; 0x70; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rcx,112))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x61; 0x78; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rcx,120))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xa9; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% r13,% rbx) (% rdx,Memop Quadword (%% (rcx,128))) *) + 0x49; 0x11; 0xdc; (* ADC (% r12) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xb1; 0x88; 0x00; 0x00; 0x00; + (* MULX4 (% r14,% rbx) (% rdx,Memop Quadword (%% (rcx,136))) *) + 0x49; 0x11; 0xdd; (* ADC (% r13) (% rbx) *) + 0x4d; 0x11; 0xfe; (* ADC (% r14) (% r15) *) + 0x4c; 0x89; 0xc2; (* MOV (% rdx) (% r8) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xc2; (* ADD (% rdx) (% r8) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xbb; 0xf6; 0xdb; + (* MULX4 (% rbx,% r8) (% rdx,% rbx) *) + 0x4c; 0x11; 0xc0; (* ADC (% rax) (% r8) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc1; (* SUB (% r9) (% rax) *) + 0x49; 0x19; 0xda; (* SBB (% r10) (% rbx) *) + 0x49; 0x19; 0xeb; (* SBB (% r11) (% rbp) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd6; (* ADD (% r14) (% rdx) *) + 0x49; 0x83; 0xd7; 0x00; (* ADC (% r15) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x56; 0x38; (* MOV (% rdx) (Memop Quadword (%% (rsi,56))) *) + 0x45; 0x31; 0xc0; (* XOR (% r8d) (% r8d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x59; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x59; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x59; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x59; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf8; + (* ADOX (% r15) (% r8) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0x88; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,136))) *) + 0x49; 0x11; 0xc6; (* ADC (% r14) (% rax) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x4d; 0x11; 0xc0; (* ADC (% r8) (% r8) *) + 0x4c; 0x89; 0xca; (* MOV (% rdx) (% r9) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xca; (* ADD (% rdx) (% r9) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xb3; 0xf6; 0xdb; + (* MULX4 (% rbx,% r9) (% rdx,% rbx) *) + 0x4c; 0x11; 0xc8; (* ADC (% rax) (% r9) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc2; (* SUB (% r10) (% rax) *) + 0x49; 0x19; 0xdb; (* SBB (% r11) (% rbx) *) + 0x49; 0x19; 0xec; (* SBB (% r12) (% rbp) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd7; (* ADD (% r15) (% rdx) *) + 0x49; 0x83; 0xd0; 0x00; (* ADC (% r8) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x56; 0x40; (* MOV (% rdx) (Memop Quadword (%% (rsi,64))) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x59; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x59; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x59; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x59; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xc1; + (* ADOX (% r8) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0x88; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,136))) *) + 0x49; 0x11; 0xc7; (* ADC (% r15) (% rax) *) + 0x49; 0x11; 0xd8; (* ADC (% r8) (% rbx) *) + 0x4d; 0x11; 0xc9; (* ADC (% r9) (% r9) *) + 0x4c; 0x89; 0xd2; (* MOV (% rdx) (% r10) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xd2; (* ADD (% rdx) (% r10) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xab; 0xf6; 0xdb; + (* MULX4 (% rbx,% r10) (% rdx,% rbx) *) + 0x4c; 0x11; 0xd0; (* ADC (% rax) (% r10) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc3; (* SUB (% r11) (% rax) *) + 0x49; 0x19; 0xdc; (* SBB (% r12) (% rbx) *) + 0x49; 0x19; 0xed; (* SBB (% r13) (% rbp) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd0; (* ADD (% r8) (% rdx) *) + 0x49; 0x83; 0xd1; 0x00; (* ADC (% r9) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x56; 0x48; (* MOV (% rdx) (Memop Quadword (%% (rsi,72))) *) + 0x45; 0x31; 0xd2; (* XOR (% r10d) (% r10d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x59; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x59; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x59; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x59; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xca; + (* ADOX (% r9) (% r10) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0x88; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,136))) *) + 0x49; 0x11; 0xc0; (* ADC (% r8) (% rax) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0x4d; 0x11; 0xd2; (* ADC (% r10) (% r10) *) + 0x4c; 0x89; 0xda; (* MOV (% rdx) (% r11) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xda; (* ADD (% rdx) (% r11) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xa3; 0xf6; 0xdb; + (* MULX4 (% rbx,% r11) (% rdx,% rbx) *) + 0x4c; 0x11; 0xd8; (* ADC (% rax) (% r11) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc4; (* SUB (% r12) (% rax) *) + 0x49; 0x19; 0xdd; (* SBB (% r13) (% rbx) *) + 0x49; 0x19; 0xee; (* SBB (% r14) (% rbp) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd1; (* ADD (% r9) (% rdx) *) + 0x49; 0x83; 0xd2; 0x00; (* ADC (% r10) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x56; 0x50; (* MOV (% rdx) (Memop Quadword (%% (rsi,80))) *) + 0x45; 0x31; 0xdb; (* XOR (% r11d) (% r11d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x59; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x59; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x59; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x59; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0x88; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,136))) *) + 0x49; 0x11; 0xc1; (* ADC (% r9) (% rax) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0x4d; 0x11; 0xdb; (* ADC (% r11) (% r11) *) + 0x4c; 0x89; 0xe2; (* MOV (% rdx) (% r12) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xe2; (* ADD (% rdx) (% r12) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0x9b; 0xf6; 0xdb; + (* MULX4 (% rbx,% r12) (% rdx,% rbx) *) + 0x4c; 0x11; 0xe0; (* ADC (% rax) (% r12) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc5; (* SUB (% r13) (% rax) *) + 0x49; 0x19; 0xde; (* SBB (% r14) (% rbx) *) + 0x49; 0x19; 0xef; (* SBB (% r15) (% rbp) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd2; (* ADD (% r10) (% rdx) *) + 0x49; 0x83; 0xd3; 0x00; (* ADC (% r11) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x56; 0x58; (* MOV (% rdx) (Memop Quadword (%% (rsi,88))) *) + 0x45; 0x31; 0xe4; (* XOR (% r12d) (% r12d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x59; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x59; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x59; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x59; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xdc; + (* ADOX (% r11) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0x88; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,136))) *) + 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x4d; 0x11; 0xe4; (* ADC (% r12) (% r12) *) + 0x4c; 0x89; 0xea; (* MOV (% rdx) (% r13) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xea; (* ADD (% rdx) (% r13) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0x93; 0xf6; 0xdb; + (* MULX4 (% rbx,% r13) (% rdx,% rbx) *) + 0x4c; 0x11; 0xe8; (* ADC (% rax) (% r13) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc6; (* SUB (% r14) (% rax) *) + 0x49; 0x19; 0xdf; (* SBB (% r15) (% rbx) *) + 0x49; 0x19; 0xe8; (* SBB (% r8) (% rbp) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd3; (* ADD (% r11) (% rdx) *) + 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) + 0x31; 0xd2; (* XOR (% edx) (% edx) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x45; 0x31; 0xed; (* XOR (% r13d) (% r13d) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0x4c; 0x01; 0xf0; (* ADD (% rax) (% r14) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0x4c; 0x11; 0xfb; (* ADC (% rbx) (% r15) *) + 0xb9; 0x01; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 1)) *) + 0x4c; 0x11; 0xc1; (* ADC (% rcx) (% r8) *) + 0x4c; 0x11; 0xca; (* ADC (% rdx) (% r9) *) + 0x4c; 0x11; 0xd5; (* ADC (% rbp) (% r10) *) + 0x4d; 0x11; 0xdd; (* ADC (% r13) (% r11) *) + 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) + 0x4c; 0x0f; 0x45; 0xf0; (* CMOVNE (% r14) (% rax) *) + 0x4c; 0x0f; 0x45; 0xfb; (* CMOVNE (% r15) (% rbx) *) + 0x4c; 0x0f; 0x45; 0xc1; (* CMOVNE (% r8) (% rcx) *) + 0x4c; 0x0f; 0x45; 0xca; (* CMOVNE (% r9) (% rdx) *) + 0x4c; 0x0f; 0x45; 0xd5; (* CMOVNE (% r10) (% rbp) *) + 0x4d; 0x0f; 0x45; 0xdd; (* CMOVNE (% r11) (% r13) *) + 0x4c; 0x89; 0xb4; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,288))) (% r14) *) + 0x4c; 0x89; 0xbc; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,296))) (% r15) *) + 0x4c; 0x89; 0x84; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,304))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0x38; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,312))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0x40; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,320))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0x48; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,328))) (% r11) *) + 0x48; 0x8b; 0xb4; 0x24; 0x50; 0x01; 0x00; 0x00; + (* MOV (% rsi) (Memop Quadword (%% (rsp,336))) *) + 0x48; 0x8b; 0x8c; 0x24; 0x58; 0x01; 0x00; 0x00; + (* MOV (% rcx) (Memop Quadword (%% (rsp,344))) *) + 0x48; 0x8b; 0x51; 0x30; (* MOV (% rdx) (Memop Quadword (%% (rcx,48))) *) + 0x45; 0x31; 0xff; (* XOR (% r15d) (% r15d) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x4e; 0x60; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsi,96))) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x56; 0x68; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsi,104))) *) + 0x49; 0x01; 0xd9; (* ADD (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x5e; 0x70; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsi,112))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x66; 0x78; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsi,120))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xae; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% r13,% rbx) (% rdx,Memop Quadword (%% (rsi,128))) *) + 0x49; 0x11; 0xdc; (* ADC (% r12) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xb6; 0x88; 0x00; 0x00; 0x00; + (* MULX4 (% r14,% rbx) (% rdx,Memop Quadword (%% (rsi,136))) *) + 0x49; 0x11; 0xdd; (* ADC (% r13) (% rbx) *) + 0x4d; 0x11; 0xfe; (* ADC (% r14) (% r15) *) + 0x4c; 0x89; 0xc2; (* MOV (% rdx) (% r8) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xc2; (* ADD (% rdx) (% r8) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xbb; 0xf6; 0xdb; + (* MULX4 (% rbx,% r8) (% rdx,% rbx) *) + 0x4c; 0x11; 0xc0; (* ADC (% rax) (% r8) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc1; (* SUB (% r9) (% rax) *) + 0x49; 0x19; 0xda; (* SBB (% r10) (% rbx) *) + 0x49; 0x19; 0xeb; (* SBB (% r11) (% rbp) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd6; (* ADD (% r14) (% rdx) *) + 0x49; 0x83; 0xd7; 0x00; (* ADC (% r15) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x51; 0x38; (* MOV (% rdx) (Memop Quadword (%% (rcx,56))) *) + 0x45; 0x31; 0xc0; (* XOR (% r8d) (% r8d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf8; + (* ADOX (% r15) (% r8) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x88; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,136))) *) + 0x49; 0x11; 0xc6; (* ADC (% r14) (% rax) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x4d; 0x11; 0xc0; (* ADC (% r8) (% r8) *) + 0x4c; 0x89; 0xca; (* MOV (% rdx) (% r9) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xca; (* ADD (% rdx) (% r9) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xb3; 0xf6; 0xdb; + (* MULX4 (% rbx,% r9) (% rdx,% rbx) *) + 0x4c; 0x11; 0xc8; (* ADC (% rax) (% r9) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc2; (* SUB (% r10) (% rax) *) + 0x49; 0x19; 0xdb; (* SBB (% r11) (% rbx) *) + 0x49; 0x19; 0xec; (* SBB (% r12) (% rbp) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd7; (* ADD (% r15) (% rdx) *) + 0x49; 0x83; 0xd0; 0x00; (* ADC (% r8) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x51; 0x40; (* MOV (% rdx) (Memop Quadword (%% (rcx,64))) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xc1; + (* ADOX (% r8) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x88; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,136))) *) + 0x49; 0x11; 0xc7; (* ADC (% r15) (% rax) *) + 0x49; 0x11; 0xd8; (* ADC (% r8) (% rbx) *) + 0x4d; 0x11; 0xc9; (* ADC (% r9) (% r9) *) + 0x4c; 0x89; 0xd2; (* MOV (% rdx) (% r10) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xd2; (* ADD (% rdx) (% r10) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xab; 0xf6; 0xdb; + (* MULX4 (% rbx,% r10) (% rdx,% rbx) *) + 0x4c; 0x11; 0xd0; (* ADC (% rax) (% r10) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc3; (* SUB (% r11) (% rax) *) + 0x49; 0x19; 0xdc; (* SBB (% r12) (% rbx) *) + 0x49; 0x19; 0xed; (* SBB (% r13) (% rbp) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd0; (* ADD (% r8) (% rdx) *) + 0x49; 0x83; 0xd1; 0x00; (* ADC (% r9) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x51; 0x48; (* MOV (% rdx) (Memop Quadword (%% (rcx,72))) *) + 0x45; 0x31; 0xd2; (* XOR (% r10d) (% r10d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xca; + (* ADOX (% r9) (% r10) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x88; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,136))) *) + 0x49; 0x11; 0xc0; (* ADC (% r8) (% rax) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0x4d; 0x11; 0xd2; (* ADC (% r10) (% r10) *) + 0x4c; 0x89; 0xda; (* MOV (% rdx) (% r11) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xda; (* ADD (% rdx) (% r11) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xa3; 0xf6; 0xdb; + (* MULX4 (% rbx,% r11) (% rdx,% rbx) *) + 0x4c; 0x11; 0xd8; (* ADC (% rax) (% r11) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc4; (* SUB (% r12) (% rax) *) + 0x49; 0x19; 0xdd; (* SBB (% r13) (% rbx) *) + 0x49; 0x19; 0xee; (* SBB (% r14) (% rbp) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd1; (* ADD (% r9) (% rdx) *) + 0x49; 0x83; 0xd2; 0x00; (* ADC (% r10) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x51; 0x50; (* MOV (% rdx) (Memop Quadword (%% (rcx,80))) *) + 0x45; 0x31; 0xdb; (* XOR (% r11d) (% r11d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x88; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,136))) *) + 0x49; 0x11; 0xc1; (* ADC (% r9) (% rax) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0x4d; 0x11; 0xdb; (* ADC (% r11) (% r11) *) + 0x4c; 0x89; 0xe2; (* MOV (% rdx) (% r12) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xe2; (* ADD (% rdx) (% r12) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0x9b; 0xf6; 0xdb; + (* MULX4 (% rbx,% r12) (% rdx,% rbx) *) + 0x4c; 0x11; 0xe0; (* ADC (% rax) (% r12) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc5; (* SUB (% r13) (% rax) *) + 0x49; 0x19; 0xde; (* SBB (% r14) (% rbx) *) + 0x49; 0x19; 0xef; (* SBB (% r15) (% rbp) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd2; (* ADD (% r10) (% rdx) *) + 0x49; 0x83; 0xd3; 0x00; (* ADC (% r11) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x51; 0x58; (* MOV (% rdx) (Memop Quadword (%% (rcx,88))) *) + 0x45; 0x31; 0xe4; (* XOR (% r12d) (% r12d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xdc; + (* ADOX (% r11) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x88; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,136))) *) + 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x4d; 0x11; 0xe4; (* ADC (% r12) (% r12) *) + 0x4c; 0x89; 0xea; (* MOV (% rdx) (% r13) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xea; (* ADD (% rdx) (% r13) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0x93; 0xf6; 0xdb; + (* MULX4 (% rbx,% r13) (% rdx,% rbx) *) + 0x4c; 0x11; 0xe8; (* ADC (% rax) (% r13) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc6; (* SUB (% r14) (% rax) *) + 0x49; 0x19; 0xdf; (* SBB (% r15) (% rbx) *) + 0x49; 0x19; 0xe8; (* SBB (% r8) (% rbp) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd3; (* ADD (% r11) (% rdx) *) + 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) + 0x31; 0xd2; (* XOR (% edx) (% edx) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x45; 0x31; 0xed; (* XOR (% r13d) (% r13d) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0x4c; 0x01; 0xf0; (* ADD (% rax) (% r14) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0x4c; 0x11; 0xfb; (* ADC (% rbx) (% r15) *) + 0xb9; 0x01; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 1)) *) + 0x4c; 0x11; 0xc1; (* ADC (% rcx) (% r8) *) + 0x4c; 0x11; 0xca; (* ADC (% rdx) (% r9) *) + 0x4c; 0x11; 0xd5; (* ADC (% rbp) (% r10) *) + 0x4d; 0x11; 0xdd; (* ADC (% r13) (% r11) *) + 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) + 0x4c; 0x0f; 0x45; 0xf0; (* CMOVNE (% r14) (% rax) *) + 0x4c; 0x0f; 0x45; 0xfb; (* CMOVNE (% r15) (% rbx) *) + 0x4c; 0x0f; 0x45; 0xc1; (* CMOVNE (% r8) (% rcx) *) + 0x4c; 0x0f; 0x45; 0xca; (* CMOVNE (% r9) (% rdx) *) + 0x4c; 0x0f; 0x45; 0xd5; (* CMOVNE (% r10) (% rbp) *) + 0x4d; 0x0f; 0x45; 0xdd; (* CMOVNE (% r11) (% r13) *) + 0x4c; 0x89; 0x74; 0x24; 0x30; + (* MOV (Memop Quadword (%% (rsp,48))) (% r14) *) + 0x4c; 0x89; 0x7c; 0x24; 0x38; + (* MOV (Memop Quadword (%% (rsp,56))) (% r15) *) + 0x4c; 0x89; 0x44; 0x24; 0x40; + (* MOV (Memop Quadword (%% (rsp,64))) (% r8) *) + 0x4c; 0x89; 0x4c; 0x24; 0x48; + (* MOV (Memop Quadword (%% (rsp,72))) (% r9) *) + 0x4c; 0x89; 0x54; 0x24; 0x50; + (* MOV (Memop Quadword (%% (rsp,80))) (% r10) *) + 0x4c; 0x89; 0x5c; 0x24; 0x58; + (* MOV (Memop Quadword (%% (rsp,88))) (% r11) *) + 0x48; 0x8b; 0x8c; 0x24; 0x58; 0x01; 0x00; 0x00; + (* MOV (% rcx) (Memop Quadword (%% (rsp,344))) *) + 0x48; 0x8b; 0x11; (* MOV (% rdx) (Memop Quadword (%% (rcx,0))) *) + 0x45; 0x31; 0xff; (* XOR (% r15d) (% r15d) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x0c; 0x24; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x54; 0x24; 0x08; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x49; 0x01; 0xd9; (* ADD (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x64; 0x24; 0x18; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x6c; 0x24; 0x20; + (* MULX4 (% r13,% rbx) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x49; 0x11; 0xdc; (* ADC (% r12) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x74; 0x24; 0x28; + (* MULX4 (% r14,% rbx) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x49; 0x11; 0xdd; (* ADC (% r13) (% rbx) *) + 0x4d; 0x11; 0xfe; (* ADC (% r14) (% r15) *) + 0x4c; 0x89; 0xc2; (* MOV (% rdx) (% r8) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xc2; (* ADD (% rdx) (% r8) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xbb; 0xf6; 0xdb; + (* MULX4 (% rbx,% r8) (% rdx,% rbx) *) + 0x4c; 0x11; 0xc0; (* ADC (% rax) (% r8) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc1; (* SUB (% r9) (% rax) *) + 0x49; 0x19; 0xda; (* SBB (% r10) (% rbx) *) + 0x49; 0x19; 0xeb; (* SBB (% r11) (% rbp) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd6; (* ADD (% r14) (% rdx) *) + 0x49; 0x83; 0xd7; 0x00; (* ADC (% r15) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x51; 0x08; (* MOV (% rdx) (Memop Quadword (%% (rcx,8))) *) + 0x45; 0x31; 0xc0; (* XOR (% r8d) (% r8d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf8; + (* ADOX (% r15) (% r8) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x49; 0x11; 0xc6; (* ADC (% r14) (% rax) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x4d; 0x11; 0xc0; (* ADC (% r8) (% r8) *) + 0x4c; 0x89; 0xca; (* MOV (% rdx) (% r9) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xca; (* ADD (% rdx) (% r9) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xb3; 0xf6; 0xdb; + (* MULX4 (% rbx,% r9) (% rdx,% rbx) *) + 0x4c; 0x11; 0xc8; (* ADC (% rax) (% r9) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc2; (* SUB (% r10) (% rax) *) + 0x49; 0x19; 0xdb; (* SBB (% r11) (% rbx) *) + 0x49; 0x19; 0xec; (* SBB (% r12) (% rbp) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd7; (* ADD (% r15) (% rdx) *) + 0x49; 0x83; 0xd0; 0x00; (* ADC (% r8) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x51; 0x10; (* MOV (% rdx) (Memop Quadword (%% (rcx,16))) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xc1; + (* ADOX (% r8) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x49; 0x11; 0xc7; (* ADC (% r15) (% rax) *) + 0x49; 0x11; 0xd8; (* ADC (% r8) (% rbx) *) + 0x4d; 0x11; 0xc9; (* ADC (% r9) (% r9) *) + 0x4c; 0x89; 0xd2; (* MOV (% rdx) (% r10) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xd2; (* ADD (% rdx) (% r10) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xab; 0xf6; 0xdb; + (* MULX4 (% rbx,% r10) (% rdx,% rbx) *) + 0x4c; 0x11; 0xd0; (* ADC (% rax) (% r10) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc3; (* SUB (% r11) (% rax) *) + 0x49; 0x19; 0xdc; (* SBB (% r12) (% rbx) *) + 0x49; 0x19; 0xed; (* SBB (% r13) (% rbp) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd0; (* ADD (% r8) (% rdx) *) + 0x49; 0x83; 0xd1; 0x00; (* ADC (% r9) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x51; 0x18; (* MOV (% rdx) (Memop Quadword (%% (rcx,24))) *) + 0x45; 0x31; 0xd2; (* XOR (% r10d) (% r10d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xca; + (* ADOX (% r9) (% r10) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x49; 0x11; 0xc0; (* ADC (% r8) (% rax) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0x4d; 0x11; 0xd2; (* ADC (% r10) (% r10) *) + 0x4c; 0x89; 0xda; (* MOV (% rdx) (% r11) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xda; (* ADD (% rdx) (% r11) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xa3; 0xf6; 0xdb; + (* MULX4 (% rbx,% r11) (% rdx,% rbx) *) + 0x4c; 0x11; 0xd8; (* ADC (% rax) (% r11) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc4; (* SUB (% r12) (% rax) *) + 0x49; 0x19; 0xdd; (* SBB (% r13) (% rbx) *) + 0x49; 0x19; 0xee; (* SBB (% r14) (% rbp) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd1; (* ADD (% r9) (% rdx) *) + 0x49; 0x83; 0xd2; 0x00; (* ADC (% r10) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x51; 0x20; (* MOV (% rdx) (Memop Quadword (%% (rcx,32))) *) + 0x45; 0x31; 0xdb; (* XOR (% r11d) (% r11d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x49; 0x11; 0xc1; (* ADC (% r9) (% rax) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0x4d; 0x11; 0xdb; (* ADC (% r11) (% r11) *) + 0x4c; 0x89; 0xe2; (* MOV (% rdx) (% r12) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xe2; (* ADD (% rdx) (% r12) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0x9b; 0xf6; 0xdb; + (* MULX4 (% rbx,% r12) (% rdx,% rbx) *) + 0x4c; 0x11; 0xe0; (* ADC (% rax) (% r12) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc5; (* SUB (% r13) (% rax) *) + 0x49; 0x19; 0xde; (* SBB (% r14) (% rbx) *) + 0x49; 0x19; 0xef; (* SBB (% r15) (% rbp) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd2; (* ADD (% r10) (% rdx) *) + 0x49; 0x83; 0xd3; 0x00; (* ADC (% r11) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x51; 0x28; (* MOV (% rdx) (Memop Quadword (%% (rcx,40))) *) + 0x45; 0x31; 0xe4; (* XOR (% r12d) (% r12d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xdc; + (* ADOX (% r11) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x4d; 0x11; 0xe4; (* ADC (% r12) (% r12) *) + 0x4c; 0x89; 0xea; (* MOV (% rdx) (% r13) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xea; (* ADD (% rdx) (% r13) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0x93; 0xf6; 0xdb; + (* MULX4 (% rbx,% r13) (% rdx,% rbx) *) + 0x4c; 0x11; 0xe8; (* ADC (% rax) (% r13) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc6; (* SUB (% r14) (% rax) *) + 0x49; 0x19; 0xdf; (* SBB (% r15) (% rbx) *) + 0x49; 0x19; 0xe8; (* SBB (% r8) (% rbp) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd3; (* ADD (% r11) (% rdx) *) + 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) + 0x31; 0xd2; (* XOR (% edx) (% edx) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x45; 0x31; 0xed; (* XOR (% r13d) (% r13d) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0x4c; 0x01; 0xf0; (* ADD (% rax) (% r14) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0x4c; 0x11; 0xfb; (* ADC (% rbx) (% r15) *) + 0xb9; 0x01; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 1)) *) + 0x4c; 0x11; 0xc1; (* ADC (% rcx) (% r8) *) + 0x4c; 0x11; 0xca; (* ADC (% rdx) (% r9) *) + 0x4c; 0x11; 0xd5; (* ADC (% rbp) (% r10) *) + 0x4d; 0x11; 0xdd; (* ADC (% r13) (% r11) *) + 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) + 0x4c; 0x0f; 0x45; 0xf0; (* CMOVNE (% r14) (% rax) *) + 0x4c; 0x0f; 0x45; 0xfb; (* CMOVNE (% r15) (% rbx) *) + 0x4c; 0x0f; 0x45; 0xc1; (* CMOVNE (% r8) (% rcx) *) + 0x4c; 0x0f; 0x45; 0xca; (* CMOVNE (% r9) (% rdx) *) + 0x4c; 0x0f; 0x45; 0xd5; (* CMOVNE (% r10) (% rbp) *) + 0x4d; 0x0f; 0x45; 0xdd; (* CMOVNE (% r11) (% r13) *) + 0x4c; 0x89; 0x74; 0x24; 0x60; + (* MOV (Memop Quadword (%% (rsp,96))) (% r14) *) + 0x4c; 0x89; 0x7c; 0x24; 0x68; + (* MOV (Memop Quadword (%% (rsp,104))) (% r15) *) + 0x4c; 0x89; 0x44; 0x24; 0x70; + (* MOV (Memop Quadword (%% (rsp,112))) (% r8) *) + 0x4c; 0x89; 0x4c; 0x24; 0x78; + (* MOV (Memop Quadword (%% (rsp,120))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,128))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,136))) (% r11) *) + 0x48; 0x8b; 0xb4; 0x24; 0x50; 0x01; 0x00; 0x00; + (* MOV (% rsi) (Memop Quadword (%% (rsp,336))) *) + 0x48; 0x8b; 0x16; (* MOV (% rdx) (Memop Quadword (%% (rsi,0))) *) + 0x45; 0x31; 0xff; (* XOR (% r15d) (% r15d) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x8c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x94; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x49; 0x01; 0xd9; (* ADD (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xa4; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xac; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% r13,% rbx) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x49; 0x11; 0xdc; (* ADC (% r12) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xb4; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% r14,% rbx) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0x49; 0x11; 0xdd; (* ADC (% r13) (% rbx) *) + 0x4d; 0x11; 0xfe; (* ADC (% r14) (% r15) *) + 0x4c; 0x89; 0xc2; (* MOV (% rdx) (% r8) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xc2; (* ADD (% rdx) (% r8) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xbb; 0xf6; 0xdb; + (* MULX4 (% rbx,% r8) (% rdx,% rbx) *) + 0x4c; 0x11; 0xc0; (* ADC (% rax) (% r8) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc1; (* SUB (% r9) (% rax) *) + 0x49; 0x19; 0xda; (* SBB (% r10) (% rbx) *) + 0x49; 0x19; 0xeb; (* SBB (% r11) (% rbp) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd6; (* ADD (% r14) (% rdx) *) + 0x49; 0x83; 0xd7; 0x00; (* ADC (% r15) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x56; 0x08; (* MOV (% rdx) (Memop Quadword (%% (rsi,8))) *) + 0x45; 0x31; 0xc0; (* XOR (% r8d) (% r8d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf8; + (* ADOX (% r15) (% r8) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0x49; 0x11; 0xc6; (* ADC (% r14) (% rax) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x4d; 0x11; 0xc0; (* ADC (% r8) (% r8) *) + 0x4c; 0x89; 0xca; (* MOV (% rdx) (% r9) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xca; (* ADD (% rdx) (% r9) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xb3; 0xf6; 0xdb; + (* MULX4 (% rbx,% r9) (% rdx,% rbx) *) + 0x4c; 0x11; 0xc8; (* ADC (% rax) (% r9) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc2; (* SUB (% r10) (% rax) *) + 0x49; 0x19; 0xdb; (* SBB (% r11) (% rbx) *) + 0x49; 0x19; 0xec; (* SBB (% r12) (% rbp) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd7; (* ADD (% r15) (% rdx) *) + 0x49; 0x83; 0xd0; 0x00; (* ADC (% r8) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x56; 0x10; (* MOV (% rdx) (Memop Quadword (%% (rsi,16))) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xc1; + (* ADOX (% r8) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0x49; 0x11; 0xc7; (* ADC (% r15) (% rax) *) + 0x49; 0x11; 0xd8; (* ADC (% r8) (% rbx) *) + 0x4d; 0x11; 0xc9; (* ADC (% r9) (% r9) *) + 0x4c; 0x89; 0xd2; (* MOV (% rdx) (% r10) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xd2; (* ADD (% rdx) (% r10) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xab; 0xf6; 0xdb; + (* MULX4 (% rbx,% r10) (% rdx,% rbx) *) + 0x4c; 0x11; 0xd0; (* ADC (% rax) (% r10) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc3; (* SUB (% r11) (% rax) *) + 0x49; 0x19; 0xdc; (* SBB (% r12) (% rbx) *) + 0x49; 0x19; 0xed; (* SBB (% r13) (% rbp) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd0; (* ADD (% r8) (% rdx) *) + 0x49; 0x83; 0xd1; 0x00; (* ADC (% r9) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x56; 0x18; (* MOV (% rdx) (Memop Quadword (%% (rsi,24))) *) + 0x45; 0x31; 0xd2; (* XOR (% r10d) (% r10d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xca; + (* ADOX (% r9) (% r10) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0x49; 0x11; 0xc0; (* ADC (% r8) (% rax) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0x4d; 0x11; 0xd2; (* ADC (% r10) (% r10) *) + 0x4c; 0x89; 0xda; (* MOV (% rdx) (% r11) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xda; (* ADD (% rdx) (% r11) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xa3; 0xf6; 0xdb; + (* MULX4 (% rbx,% r11) (% rdx,% rbx) *) + 0x4c; 0x11; 0xd8; (* ADC (% rax) (% r11) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc4; (* SUB (% r12) (% rax) *) + 0x49; 0x19; 0xdd; (* SBB (% r13) (% rbx) *) + 0x49; 0x19; 0xee; (* SBB (% r14) (% rbp) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd1; (* ADD (% r9) (% rdx) *) + 0x49; 0x83; 0xd2; 0x00; (* ADC (% r10) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x56; 0x20; (* MOV (% rdx) (Memop Quadword (%% (rsi,32))) *) + 0x45; 0x31; 0xdb; (* XOR (% r11d) (% r11d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0x49; 0x11; 0xc1; (* ADC (% r9) (% rax) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0x4d; 0x11; 0xdb; (* ADC (% r11) (% r11) *) + 0x4c; 0x89; 0xe2; (* MOV (% rdx) (% r12) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xe2; (* ADD (% rdx) (% r12) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0x9b; 0xf6; 0xdb; + (* MULX4 (% rbx,% r12) (% rdx,% rbx) *) + 0x4c; 0x11; 0xe0; (* ADC (% rax) (% r12) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc5; (* SUB (% r13) (% rax) *) + 0x49; 0x19; 0xde; (* SBB (% r14) (% rbx) *) + 0x49; 0x19; 0xef; (* SBB (% r15) (% rbp) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd2; (* ADD (% r10) (% rdx) *) + 0x49; 0x83; 0xd3; 0x00; (* ADC (% r11) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x56; 0x28; (* MOV (% rdx) (Memop Quadword (%% (rsi,40))) *) + 0x45; 0x31; 0xe4; (* XOR (% r12d) (% r12d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xdc; + (* ADOX (% r11) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x4d; 0x11; 0xe4; (* ADC (% r12) (% r12) *) + 0x4c; 0x89; 0xea; (* MOV (% rdx) (% r13) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xea; (* ADD (% rdx) (% r13) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0x93; 0xf6; 0xdb; + (* MULX4 (% rbx,% r13) (% rdx,% rbx) *) + 0x4c; 0x11; 0xe8; (* ADC (% rax) (% r13) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc6; (* SUB (% r14) (% rax) *) + 0x49; 0x19; 0xdf; (* SBB (% r15) (% rbx) *) + 0x49; 0x19; 0xe8; (* SBB (% r8) (% rbp) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd3; (* ADD (% r11) (% rdx) *) + 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) + 0x31; 0xd2; (* XOR (% edx) (% edx) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x45; 0x31; 0xed; (* XOR (% r13d) (% r13d) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0x4c; 0x01; 0xf0; (* ADD (% rax) (% r14) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0x4c; 0x11; 0xfb; (* ADC (% rbx) (% r15) *) + 0xb9; 0x01; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 1)) *) + 0x4c; 0x11; 0xc1; (* ADC (% rcx) (% r8) *) + 0x4c; 0x11; 0xca; (* ADC (% rdx) (% r9) *) + 0x4c; 0x11; 0xd5; (* ADC (% rbp) (% r10) *) + 0x4d; 0x11; 0xdd; (* ADC (% r13) (% r11) *) + 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) + 0x4c; 0x0f; 0x45; 0xf0; (* CMOVNE (% r14) (% rax) *) + 0x4c; 0x0f; 0x45; 0xfb; (* CMOVNE (% r15) (% rbx) *) + 0x4c; 0x0f; 0x45; 0xc1; (* CMOVNE (% r8) (% rcx) *) + 0x4c; 0x0f; 0x45; 0xca; (* CMOVNE (% r9) (% rdx) *) + 0x4c; 0x0f; 0x45; 0xd5; (* CMOVNE (% r10) (% rbp) *) + 0x4d; 0x0f; 0x45; 0xdd; (* CMOVNE (% r11) (% r13) *) + 0x4c; 0x89; 0xb4; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,192))) (% r14) *) + 0x4c; 0x89; 0xbc; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,200))) (% r15) *) + 0x4c; 0x89; 0x84; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,208))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,216))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,224))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,232))) (% r11) *) + 0x48; 0x8b; 0x54; 0x24; 0x30; + (* MOV (% rdx) (Memop Quadword (%% (rsp,48))) *) + 0x45; 0x31; 0xff; (* XOR (% r15d) (% r15d) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x0c; 0x24; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x54; 0x24; 0x08; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x49; 0x01; 0xd9; (* ADD (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x64; 0x24; 0x18; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x6c; 0x24; 0x20; + (* MULX4 (% r13,% rbx) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x49; 0x11; 0xdc; (* ADC (% r12) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x74; 0x24; 0x28; + (* MULX4 (% r14,% rbx) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x49; 0x11; 0xdd; (* ADC (% r13) (% rbx) *) + 0x4d; 0x11; 0xfe; (* ADC (% r14) (% r15) *) + 0x4c; 0x89; 0xc2; (* MOV (% rdx) (% r8) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xc2; (* ADD (% rdx) (% r8) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xbb; 0xf6; 0xdb; + (* MULX4 (% rbx,% r8) (% rdx,% rbx) *) + 0x4c; 0x11; 0xc0; (* ADC (% rax) (% r8) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc1; (* SUB (% r9) (% rax) *) + 0x49; 0x19; 0xda; (* SBB (% r10) (% rbx) *) + 0x49; 0x19; 0xeb; (* SBB (% r11) (% rbp) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd6; (* ADD (% r14) (% rdx) *) + 0x49; 0x83; 0xd7; 0x00; (* ADC (% r15) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x54; 0x24; 0x38; + (* MOV (% rdx) (Memop Quadword (%% (rsp,56))) *) + 0x45; 0x31; 0xc0; (* XOR (% r8d) (% r8d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf8; + (* ADOX (% r15) (% r8) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x49; 0x11; 0xc6; (* ADC (% r14) (% rax) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x4d; 0x11; 0xc0; (* ADC (% r8) (% r8) *) + 0x4c; 0x89; 0xca; (* MOV (% rdx) (% r9) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xca; (* ADD (% rdx) (% r9) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xb3; 0xf6; 0xdb; + (* MULX4 (% rbx,% r9) (% rdx,% rbx) *) + 0x4c; 0x11; 0xc8; (* ADC (% rax) (% r9) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc2; (* SUB (% r10) (% rax) *) + 0x49; 0x19; 0xdb; (* SBB (% r11) (% rbx) *) + 0x49; 0x19; 0xec; (* SBB (% r12) (% rbp) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd7; (* ADD (% r15) (% rdx) *) + 0x49; 0x83; 0xd0; 0x00; (* ADC (% r8) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x54; 0x24; 0x40; + (* MOV (% rdx) (Memop Quadword (%% (rsp,64))) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xc1; + (* ADOX (% r8) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x49; 0x11; 0xc7; (* ADC (% r15) (% rax) *) + 0x49; 0x11; 0xd8; (* ADC (% r8) (% rbx) *) + 0x4d; 0x11; 0xc9; (* ADC (% r9) (% r9) *) + 0x4c; 0x89; 0xd2; (* MOV (% rdx) (% r10) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xd2; (* ADD (% rdx) (% r10) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xab; 0xf6; 0xdb; + (* MULX4 (% rbx,% r10) (% rdx,% rbx) *) + 0x4c; 0x11; 0xd0; (* ADC (% rax) (% r10) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc3; (* SUB (% r11) (% rax) *) + 0x49; 0x19; 0xdc; (* SBB (% r12) (% rbx) *) + 0x49; 0x19; 0xed; (* SBB (% r13) (% rbp) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd0; (* ADD (% r8) (% rdx) *) + 0x49; 0x83; 0xd1; 0x00; (* ADC (% r9) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x54; 0x24; 0x48; + (* MOV (% rdx) (Memop Quadword (%% (rsp,72))) *) + 0x45; 0x31; 0xd2; (* XOR (% r10d) (% r10d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xca; + (* ADOX (% r9) (% r10) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x49; 0x11; 0xc0; (* ADC (% r8) (% rax) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0x4d; 0x11; 0xd2; (* ADC (% r10) (% r10) *) + 0x4c; 0x89; 0xda; (* MOV (% rdx) (% r11) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xda; (* ADD (% rdx) (% r11) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xa3; 0xf6; 0xdb; + (* MULX4 (% rbx,% r11) (% rdx,% rbx) *) + 0x4c; 0x11; 0xd8; (* ADC (% rax) (% r11) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc4; (* SUB (% r12) (% rax) *) + 0x49; 0x19; 0xdd; (* SBB (% r13) (% rbx) *) + 0x49; 0x19; 0xee; (* SBB (% r14) (% rbp) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd1; (* ADD (% r9) (% rdx) *) + 0x49; 0x83; 0xd2; 0x00; (* ADC (% r10) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x54; 0x24; 0x50; + (* MOV (% rdx) (Memop Quadword (%% (rsp,80))) *) + 0x45; 0x31; 0xdb; (* XOR (% r11d) (% r11d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x49; 0x11; 0xc1; (* ADC (% r9) (% rax) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0x4d; 0x11; 0xdb; (* ADC (% r11) (% r11) *) + 0x4c; 0x89; 0xe2; (* MOV (% rdx) (% r12) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xe2; (* ADD (% rdx) (% r12) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0x9b; 0xf6; 0xdb; + (* MULX4 (% rbx,% r12) (% rdx,% rbx) *) + 0x4c; 0x11; 0xe0; (* ADC (% rax) (% r12) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc5; (* SUB (% r13) (% rax) *) + 0x49; 0x19; 0xde; (* SBB (% r14) (% rbx) *) + 0x49; 0x19; 0xef; (* SBB (% r15) (% rbp) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd2; (* ADD (% r10) (% rdx) *) + 0x49; 0x83; 0xd3; 0x00; (* ADC (% r11) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x54; 0x24; 0x58; + (* MOV (% rdx) (Memop Quadword (%% (rsp,88))) *) + 0x45; 0x31; 0xe4; (* XOR (% r12d) (% r12d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xdc; + (* ADOX (% r11) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x4d; 0x11; 0xe4; (* ADC (% r12) (% r12) *) + 0x4c; 0x89; 0xea; (* MOV (% rdx) (% r13) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xea; (* ADD (% rdx) (% r13) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0x93; 0xf6; 0xdb; + (* MULX4 (% rbx,% r13) (% rdx,% rbx) *) + 0x4c; 0x11; 0xe8; (* ADC (% rax) (% r13) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc6; (* SUB (% r14) (% rax) *) + 0x49; 0x19; 0xdf; (* SBB (% r15) (% rbx) *) + 0x49; 0x19; 0xe8; (* SBB (% r8) (% rbp) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd3; (* ADD (% r11) (% rdx) *) + 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) + 0x31; 0xd2; (* XOR (% edx) (% edx) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x45; 0x31; 0xed; (* XOR (% r13d) (% r13d) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0x4c; 0x01; 0xf0; (* ADD (% rax) (% r14) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0x4c; 0x11; 0xfb; (* ADC (% rbx) (% r15) *) + 0xb9; 0x01; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 1)) *) + 0x4c; 0x11; 0xc1; (* ADC (% rcx) (% r8) *) + 0x4c; 0x11; 0xca; (* ADC (% rdx) (% r9) *) + 0x4c; 0x11; 0xd5; (* ADC (% rbp) (% r10) *) + 0x4d; 0x11; 0xdd; (* ADC (% r13) (% r11) *) + 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) + 0x4c; 0x0f; 0x45; 0xf0; (* CMOVNE (% r14) (% rax) *) + 0x4c; 0x0f; 0x45; 0xfb; (* CMOVNE (% r15) (% rbx) *) + 0x4c; 0x0f; 0x45; 0xc1; (* CMOVNE (% r8) (% rcx) *) + 0x4c; 0x0f; 0x45; 0xca; (* CMOVNE (% r9) (% rdx) *) + 0x4c; 0x0f; 0x45; 0xd5; (* CMOVNE (% r10) (% rbp) *) + 0x4d; 0x0f; 0x45; 0xdd; (* CMOVNE (% r11) (% r13) *) + 0x4c; 0x89; 0x74; 0x24; 0x30; + (* MOV (Memop Quadword (%% (rsp,48))) (% r14) *) + 0x4c; 0x89; 0x7c; 0x24; 0x38; + (* MOV (Memop Quadword (%% (rsp,56))) (% r15) *) + 0x4c; 0x89; 0x44; 0x24; 0x40; + (* MOV (Memop Quadword (%% (rsp,64))) (% r8) *) + 0x4c; 0x89; 0x4c; 0x24; 0x48; + (* MOV (Memop Quadword (%% (rsp,72))) (% r9) *) + 0x4c; 0x89; 0x54; 0x24; 0x50; + (* MOV (Memop Quadword (%% (rsp,80))) (% r10) *) + 0x4c; 0x89; 0x5c; 0x24; 0x58; + (* MOV (Memop Quadword (%% (rsp,88))) (% r11) *) + 0x48; 0x8b; 0x94; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,288))) *) + 0x45; 0x31; 0xff; (* XOR (% r15d) (% r15d) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x8c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x94; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x49; 0x01; 0xd9; (* ADD (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xa4; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xac; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% r13,% rbx) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x49; 0x11; 0xdc; (* ADC (% r12) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xb4; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% r14,% rbx) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0x49; 0x11; 0xdd; (* ADC (% r13) (% rbx) *) + 0x4d; 0x11; 0xfe; (* ADC (% r14) (% r15) *) + 0x4c; 0x89; 0xc2; (* MOV (% rdx) (% r8) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xc2; (* ADD (% rdx) (% r8) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xbb; 0xf6; 0xdb; + (* MULX4 (% rbx,% r8) (% rdx,% rbx) *) + 0x4c; 0x11; 0xc0; (* ADC (% rax) (% r8) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc1; (* SUB (% r9) (% rax) *) + 0x49; 0x19; 0xda; (* SBB (% r10) (% rbx) *) + 0x49; 0x19; 0xeb; (* SBB (% r11) (% rbp) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd6; (* ADD (% r14) (% rdx) *) + 0x49; 0x83; 0xd7; 0x00; (* ADC (% r15) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x94; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,296))) *) + 0x45; 0x31; 0xc0; (* XOR (% r8d) (% r8d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf8; + (* ADOX (% r15) (% r8) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0x49; 0x11; 0xc6; (* ADC (% r14) (% rax) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x4d; 0x11; 0xc0; (* ADC (% r8) (% r8) *) + 0x4c; 0x89; 0xca; (* MOV (% rdx) (% r9) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xca; (* ADD (% rdx) (% r9) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xb3; 0xf6; 0xdb; + (* MULX4 (% rbx,% r9) (% rdx,% rbx) *) + 0x4c; 0x11; 0xc8; (* ADC (% rax) (% r9) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc2; (* SUB (% r10) (% rax) *) + 0x49; 0x19; 0xdb; (* SBB (% r11) (% rbx) *) + 0x49; 0x19; 0xec; (* SBB (% r12) (% rbp) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd7; (* ADD (% r15) (% rdx) *) + 0x49; 0x83; 0xd0; 0x00; (* ADC (% r8) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x94; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,304))) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xc1; + (* ADOX (% r8) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0x49; 0x11; 0xc7; (* ADC (% r15) (% rax) *) + 0x49; 0x11; 0xd8; (* ADC (% r8) (% rbx) *) + 0x4d; 0x11; 0xc9; (* ADC (% r9) (% r9) *) + 0x4c; 0x89; 0xd2; (* MOV (% rdx) (% r10) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xd2; (* ADD (% rdx) (% r10) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xab; 0xf6; 0xdb; + (* MULX4 (% rbx,% r10) (% rdx,% rbx) *) + 0x4c; 0x11; 0xd0; (* ADC (% rax) (% r10) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc3; (* SUB (% r11) (% rax) *) + 0x49; 0x19; 0xdc; (* SBB (% r12) (% rbx) *) + 0x49; 0x19; 0xed; (* SBB (% r13) (% rbp) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd0; (* ADD (% r8) (% rdx) *) + 0x49; 0x83; 0xd1; 0x00; (* ADC (% r9) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x94; 0x24; 0x38; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,312))) *) + 0x45; 0x31; 0xd2; (* XOR (% r10d) (% r10d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xca; + (* ADOX (% r9) (% r10) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0x49; 0x11; 0xc0; (* ADC (% r8) (% rax) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0x4d; 0x11; 0xd2; (* ADC (% r10) (% r10) *) + 0x4c; 0x89; 0xda; (* MOV (% rdx) (% r11) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xda; (* ADD (% rdx) (% r11) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xa3; 0xf6; 0xdb; + (* MULX4 (% rbx,% r11) (% rdx,% rbx) *) + 0x4c; 0x11; 0xd8; (* ADC (% rax) (% r11) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc4; (* SUB (% r12) (% rax) *) + 0x49; 0x19; 0xdd; (* SBB (% r13) (% rbx) *) + 0x49; 0x19; 0xee; (* SBB (% r14) (% rbp) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd1; (* ADD (% r9) (% rdx) *) + 0x49; 0x83; 0xd2; 0x00; (* ADC (% r10) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x94; 0x24; 0x40; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,320))) *) + 0x45; 0x31; 0xdb; (* XOR (% r11d) (% r11d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0x49; 0x11; 0xc1; (* ADC (% r9) (% rax) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0x4d; 0x11; 0xdb; (* ADC (% r11) (% r11) *) + 0x4c; 0x89; 0xe2; (* MOV (% rdx) (% r12) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xe2; (* ADD (% rdx) (% r12) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0x9b; 0xf6; 0xdb; + (* MULX4 (% rbx,% r12) (% rdx,% rbx) *) + 0x4c; 0x11; 0xe0; (* ADC (% rax) (% r12) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc5; (* SUB (% r13) (% rax) *) + 0x49; 0x19; 0xde; (* SBB (% r14) (% rbx) *) + 0x49; 0x19; 0xef; (* SBB (% r15) (% rbp) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd2; (* ADD (% r10) (% rdx) *) + 0x49; 0x83; 0xd3; 0x00; (* ADC (% r11) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x94; 0x24; 0x48; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,328))) *) + 0x45; 0x31; 0xe4; (* XOR (% r12d) (% r12d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xdc; + (* ADOX (% r11) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x4d; 0x11; 0xe4; (* ADC (% r12) (% r12) *) + 0x4c; 0x89; 0xea; (* MOV (% rdx) (% r13) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xea; (* ADD (% rdx) (% r13) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0x93; 0xf6; 0xdb; + (* MULX4 (% rbx,% r13) (% rdx,% rbx) *) + 0x4c; 0x11; 0xe8; (* ADC (% rax) (% r13) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc6; (* SUB (% r14) (% rax) *) + 0x49; 0x19; 0xdf; (* SBB (% r15) (% rbx) *) + 0x49; 0x19; 0xe8; (* SBB (% r8) (% rbp) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd3; (* ADD (% r11) (% rdx) *) + 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) + 0x31; 0xd2; (* XOR (% edx) (% edx) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x45; 0x31; 0xed; (* XOR (% r13d) (% r13d) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0x4c; 0x01; 0xf0; (* ADD (% rax) (% r14) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0x4c; 0x11; 0xfb; (* ADC (% rbx) (% r15) *) + 0xb9; 0x01; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 1)) *) + 0x4c; 0x11; 0xc1; (* ADC (% rcx) (% r8) *) + 0x4c; 0x11; 0xca; (* ADC (% rdx) (% r9) *) + 0x4c; 0x11; 0xd5; (* ADC (% rbp) (% r10) *) + 0x4d; 0x11; 0xdd; (* ADC (% r13) (% r11) *) + 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) + 0x4c; 0x0f; 0x45; 0xf0; (* CMOVNE (% r14) (% rax) *) + 0x4c; 0x0f; 0x45; 0xfb; (* CMOVNE (% r15) (% rbx) *) + 0x4c; 0x0f; 0x45; 0xc1; (* CMOVNE (% r8) (% rcx) *) + 0x4c; 0x0f; 0x45; 0xca; (* CMOVNE (% r9) (% rdx) *) + 0x4c; 0x0f; 0x45; 0xd5; (* CMOVNE (% r10) (% rbp) *) + 0x4d; 0x0f; 0x45; 0xdd; (* CMOVNE (% r11) (% r13) *) + 0x4c; 0x89; 0xb4; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,288))) (% r14) *) + 0x4c; 0x89; 0xbc; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,296))) (% r15) *) + 0x4c; 0x89; 0x84; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,304))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0x38; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,312))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0x40; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,320))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0x48; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,328))) (% r11) *) + 0x48; 0x8b; 0x44; 0x24; 0x60; + (* MOV (% rax) (Memop Quadword (%% (rsp,96))) *) + 0x48; 0x2b; 0x84; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* SUB (% rax) (Memop Quadword (%% (rsp,192))) *) + 0x48; 0x8b; 0x54; 0x24; 0x68; + (* MOV (% rdx) (Memop Quadword (%% (rsp,104))) *) + 0x48; 0x1b; 0x94; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* SBB (% rdx) (Memop Quadword (%% (rsp,200))) *) + 0x4c; 0x8b; 0x44; 0x24; 0x70; + (* MOV (% r8) (Memop Quadword (%% (rsp,112))) *) + 0x4c; 0x1b; 0x84; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* SBB (% r8) (Memop Quadword (%% (rsp,208))) *) + 0x4c; 0x8b; 0x4c; 0x24; 0x78; + (* MOV (% r9) (Memop Quadword (%% (rsp,120))) *) + 0x4c; 0x1b; 0x8c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* SBB (% r9) (Memop Quadword (%% (rsp,216))) *) + 0x4c; 0x8b; 0x94; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (% r10) (Memop Quadword (%% (rsp,128))) *) + 0x4c; 0x1b; 0x94; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* SBB (% r10) (Memop Quadword (%% (rsp,224))) *) + 0x4c; 0x8b; 0x9c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (% r11) (Memop Quadword (%% (rsp,136))) *) + 0x4c; 0x1b; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* SBB (% r11) (Memop Quadword (%% (rsp,232))) *) + 0x48; 0x19; 0xc9; (* SBB (% rcx) (% rcx) *) + 0xbe; 0xff; 0xff; 0xff; 0xff; + (* MOV (% esi) (Imm32 (word 4294967295)) *) + 0x48; 0x21; 0xf1; (* AND (% rcx) (% rsi) *) + 0x48; 0x31; 0xf6; (* XOR (% rsi) (% rsi) *) + 0x48; 0x29; 0xce; (* SUB (% rsi) (% rcx) *) + 0x48; 0x29; 0xf0; (* SUB (% rax) (% rsi) *) + 0x48; 0x89; 0x84; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,240))) (% rax) *) + 0x48; 0x19; 0xca; (* SBB (% rdx) (% rcx) *) + 0x48; 0x89; 0x94; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,248))) (% rdx) *) + 0x48; 0x19; 0xc0; (* SBB (% rax) (% rax) *) + 0x48; 0x21; 0xf1; (* AND (% rcx) (% rsi) *) + 0x48; 0xf7; 0xd8; (* NEG (% rax) *) + 0x49; 0x19; 0xc8; (* SBB (% r8) (% rcx) *) + 0x4c; 0x89; 0x84; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,256))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x8c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,264))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x94; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,272))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x9c; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,280))) (% r11) *) + 0x48; 0x8b; 0x44; 0x24; 0x30; + (* MOV (% rax) (Memop Quadword (%% (rsp,48))) *) + 0x48; 0x2b; 0x84; 0x24; 0x20; 0x01; 0x00; 0x00; + (* SUB (% rax) (Memop Quadword (%% (rsp,288))) *) + 0x48; 0x8b; 0x54; 0x24; 0x38; + (* MOV (% rdx) (Memop Quadword (%% (rsp,56))) *) + 0x48; 0x1b; 0x94; 0x24; 0x28; 0x01; 0x00; 0x00; + (* SBB (% rdx) (Memop Quadword (%% (rsp,296))) *) + 0x4c; 0x8b; 0x44; 0x24; 0x40; + (* MOV (% r8) (Memop Quadword (%% (rsp,64))) *) + 0x4c; 0x1b; 0x84; 0x24; 0x30; 0x01; 0x00; 0x00; + (* SBB (% r8) (Memop Quadword (%% (rsp,304))) *) + 0x4c; 0x8b; 0x4c; 0x24; 0x48; + (* MOV (% r9) (Memop Quadword (%% (rsp,72))) *) + 0x4c; 0x1b; 0x8c; 0x24; 0x38; 0x01; 0x00; 0x00; + (* SBB (% r9) (Memop Quadword (%% (rsp,312))) *) + 0x4c; 0x8b; 0x54; 0x24; 0x50; + (* MOV (% r10) (Memop Quadword (%% (rsp,80))) *) + 0x4c; 0x1b; 0x94; 0x24; 0x40; 0x01; 0x00; 0x00; + (* SBB (% r10) (Memop Quadword (%% (rsp,320))) *) + 0x4c; 0x8b; 0x5c; 0x24; 0x58; + (* MOV (% r11) (Memop Quadword (%% (rsp,88))) *) + 0x4c; 0x1b; 0x9c; 0x24; 0x48; 0x01; 0x00; 0x00; + (* SBB (% r11) (Memop Quadword (%% (rsp,328))) *) + 0x48; 0x19; 0xc9; (* SBB (% rcx) (% rcx) *) + 0xbe; 0xff; 0xff; 0xff; 0xff; + (* MOV (% esi) (Imm32 (word 4294967295)) *) + 0x48; 0x21; 0xf1; (* AND (% rcx) (% rsi) *) + 0x48; 0x31; 0xf6; (* XOR (% rsi) (% rsi) *) + 0x48; 0x29; 0xce; (* SUB (% rsi) (% rcx) *) + 0x48; 0x29; 0xf0; (* SUB (% rax) (% rsi) *) + 0x48; 0x89; 0x44; 0x24; 0x30; + (* MOV (Memop Quadword (%% (rsp,48))) (% rax) *) + 0x48; 0x19; 0xca; (* SBB (% rdx) (% rcx) *) + 0x48; 0x89; 0x54; 0x24; 0x38; + (* MOV (Memop Quadword (%% (rsp,56))) (% rdx) *) + 0x48; 0x19; 0xc0; (* SBB (% rax) (% rax) *) + 0x48; 0x21; 0xf1; (* AND (% rcx) (% rsi) *) + 0x48; 0xf7; 0xd8; (* NEG (% rax) *) + 0x49; 0x19; 0xc8; (* SBB (% r8) (% rcx) *) + 0x4c; 0x89; 0x44; 0x24; 0x40; + (* MOV (Memop Quadword (%% (rsp,64))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x4c; 0x24; 0x48; + (* MOV (Memop Quadword (%% (rsp,72))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x54; 0x24; 0x50; + (* MOV (Memop Quadword (%% (rsp,80))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x5c; 0x24; 0x58; + (* MOV (Memop Quadword (%% (rsp,88))) (% r11) *) + 0x48; 0x8b; 0x94; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,240))) *) + 0xc4; 0x62; 0xb3; 0xf6; 0x94; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% r10,% r9) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0xc4; 0x62; 0xa3; 0xf6; 0xa4; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% r12,% r11) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0xc4; 0x62; 0x93; 0xf6; 0xb4; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% r14,% r13) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0x48; 0x8b; 0x94; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,264))) *) + 0xc4; 0xe2; 0x83; 0xf6; 0x8c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% rcx,% r15) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x94; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,256))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x48; 0x8b; 0x94; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,248))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADCX (% r15) (% rbp) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xcd; + (* ADOX (% rcx) (% rbp) *) + 0x48; 0x11; 0xe9; (* ADC (% rcx) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x94; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,272))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0x8b; 0x94; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,256))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x94; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% rdx,% rax) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xca; + (* ADOX (% rcx) (% rdx) *) + 0x48; 0x8b; 0x94; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,280))) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xac; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% rbp,% rbx) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x94; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rdx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% rcx) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% rbx) (% rdx) *) + 0xb8; 0x00; 0x00; 0x00; 0x00; + (* MOV (% eax) (Imm32 (word 0)) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% rbx) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xe8; + (* ADOX (% rbp) (% rax) *) + 0x48; 0x11; 0xc5; (* ADC (% rbp) (% rax) *) + 0x48; 0x31; 0xc0; (* XOR (% rax) (% rax) *) + 0x48; 0x8b; 0x94; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,240))) *) + 0xc4; 0xe2; 0xbb; 0xf6; 0x84; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rax,% r8) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% r9) (% r9) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADOX (% r9) (% rax) *) + 0x48; 0x8b; 0x94; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,248))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xd2; + (* ADCX (% r10) (% r10) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADOX (% r10) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% r11) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% r11) (% rdx) *) + 0x48; 0x8b; 0x94; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,256))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xe4; + (* ADCX (% r12) (% r12) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADOX (% r12) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% r13) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xea; + (* ADOX (% r13) (% rdx) *) + 0x48; 0x8b; 0x94; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,264))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf6; + (* ADCX (% r14) (% r14) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xff; + (* ADCX (% r15) (% r15) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfa; + (* ADOX (% r15) (% rdx) *) + 0x48; 0x8b; 0x94; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,272))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% rcx) (% rcx) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc8; + (* ADOX (% rcx) (% rax) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% rbx) (% rbx) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% rbx) (% rdx) *) + 0x48; 0x8b; 0x94; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,280))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xf2; + (* MULX4 (% rsi,% rax) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% rbp) (% rbp) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xe8; + (* ADOX (% rbp) (% rax) *) + 0xb8; 0x00; 0x00; 0x00; 0x00; + (* MOV (% eax) (Imm32 (word 0)) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% rsi) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% rsi) (% rax) *) + 0x48; 0x89; 0x9c; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,144))) (% rbx) *) + 0x4c; 0x89; 0xc2; (* MOV (% rdx) (% r8) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xc2; (* ADD (% rdx) (% r8) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xbb; 0xf6; 0xc0; + (* MULX4 (% rax,% r8) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xc3; + (* MULX4 (% r8,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd0; (* ADC (% r8) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc1; (* SUB (% r9) (% rax) *) + 0x4d; 0x19; 0xc2; (* SBB (% r10) (% r8) *) + 0x49; 0x19; 0xdb; (* SBB (% r11) (% rbx) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd0; (* MOV (% r8) (% rdx) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xca; (* MOV (% rdx) (% r9) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xca; (* ADD (% rdx) (% r9) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xb3; 0xf6; 0xc0; + (* MULX4 (% rax,% r9) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xcb; + (* MULX4 (% r9,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd1; (* ADC (% r9) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc2; (* SUB (% r10) (% rax) *) + 0x4d; 0x19; 0xcb; (* SBB (% r11) (% r9) *) + 0x49; 0x19; 0xdc; (* SBB (% r12) (% rbx) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd1; (* MOV (% r9) (% rdx) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xd2; (* MOV (% rdx) (% r10) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xd2; (* ADD (% rdx) (% r10) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xab; 0xf6; 0xc0; + (* MULX4 (% rax,% r10) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xd3; + (* MULX4 (% r10,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd2; (* ADC (% r10) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc3; (* SUB (% r11) (% rax) *) + 0x4d; 0x19; 0xd4; (* SBB (% r12) (% r10) *) + 0x49; 0x19; 0xdd; (* SBB (% r13) (% rbx) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd2; (* MOV (% r10) (% rdx) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xda; (* MOV (% rdx) (% r11) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xda; (* ADD (% rdx) (% r11) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xa3; 0xf6; 0xc0; + (* MULX4 (% rax,% r11) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xdb; + (* MULX4 (% r11,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd3; (* ADC (% r11) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc4; (* SUB (% r12) (% rax) *) + 0x4d; 0x19; 0xdd; (* SBB (% r13) (% r11) *) + 0x49; 0x19; 0xd8; (* SBB (% r8) (% rbx) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd3; (* MOV (% r11) (% rdx) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xe2; (* MOV (% rdx) (% r12) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xe2; (* ADD (% rdx) (% r12) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0x9b; 0xf6; 0xc0; + (* MULX4 (% rax,% r12) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xe3; + (* MULX4 (% r12,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd4; (* ADC (% r12) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc5; (* SUB (% r13) (% rax) *) + 0x4d; 0x19; 0xe0; (* SBB (% r8) (% r12) *) + 0x49; 0x19; 0xd9; (* SBB (% r9) (% rbx) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd4; (* MOV (% r12) (% rdx) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xea; (* MOV (% rdx) (% r13) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xea; (* ADD (% rdx) (% r13) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0x93; 0xf6; 0xc0; + (* MULX4 (% rax,% r13) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xeb; + (* MULX4 (% r13,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd5; (* ADC (% r13) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc0; (* SUB (% r8) (% rax) *) + 0x4d; 0x19; 0xe9; (* SBB (% r9) (% r13) *) + 0x49; 0x19; 0xda; (* SBB (% r10) (% rbx) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd5; (* MOV (% r13) (% rdx) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x9c; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (% rbx) (Memop Quadword (%% (rsp,144))) *) + 0x4d; 0x01; 0xc6; (* ADD (% r14) (% r8) *) + 0x4d; 0x11; 0xcf; (* ADC (% r15) (% r9) *) + 0x4c; 0x11; 0xd1; (* ADC (% rcx) (% r10) *) + 0x4c; 0x11; 0xdb; (* ADC (% rbx) (% r11) *) + 0x4c; 0x11; 0xe5; (* ADC (% rbp) (% r12) *) + 0x4c; 0x11; 0xee; (* ADC (% rsi) (% r13) *) + 0x41; 0xb8; 0x00; 0x00; 0x00; 0x00; + (* MOV (% r8d) (Imm32 (word 0)) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0x41; 0xb9; 0xff; 0xff; 0xff; 0xff; + (* MOV (% r9d) (Imm32 (word 4294967295)) *) + 0x41; 0xba; 0x01; 0x00; 0x00; 0x00; + (* MOV (% r10d) (Imm32 (word 1)) *) + 0x49; 0x0f; 0x43; 0xc0; (* CMOVAE (% rax) (% r8) *) + 0x4d; 0x0f; 0x43; 0xc8; (* CMOVAE (% r9) (% r8) *) + 0x4d; 0x0f; 0x43; 0xd0; (* CMOVAE (% r10) (% r8) *) + 0x49; 0x01; 0xc6; (* ADD (% r14) (% rax) *) + 0x4d; 0x11; 0xcf; (* ADC (% r15) (% r9) *) + 0x4c; 0x11; 0xd1; (* ADC (% rcx) (% r10) *) + 0x4c; 0x11; 0xc3; (* ADC (% rbx) (% r8) *) + 0x4c; 0x11; 0xc5; (* ADC (% rbp) (% r8) *) + 0x4c; 0x11; 0xc6; (* ADC (% rsi) (% r8) *) + 0x4c; 0x89; 0xb4; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,144))) (% r14) *) + 0x4c; 0x89; 0xbc; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,152))) (% r15) *) + 0x48; 0x89; 0x8c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,160))) (% rcx) *) + 0x48; 0x89; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,168))) (% rbx) *) + 0x48; 0x89; 0xac; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,176))) (% rbp) *) + 0x48; 0x89; 0xb4; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,184))) (% rsi) *) + 0x48; 0x8b; 0x54; 0x24; 0x30; + (* MOV (% rdx) (Memop Quadword (%% (rsp,48))) *) + 0xc4; 0x62; 0xb3; 0xf6; 0x54; 0x24; 0x38; + (* MULX4 (% r10,% r9) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0xc4; 0x62; 0xa3; 0xf6; 0x64; 0x24; 0x48; + (* MULX4 (% r12,% r11) (% rdx,Memop Quadword (%% (rsp,72))) *) + 0xc4; 0x62; 0x93; 0xf6; 0x74; 0x24; 0x58; + (* MULX4 (% r14,% r13) (% rdx,Memop Quadword (%% (rsp,88))) *) + 0x48; 0x8b; 0x54; 0x24; 0x48; + (* MOV (% rdx) (Memop Quadword (%% (rsp,72))) *) + 0xc4; 0xe2; 0x83; 0xf6; 0x4c; 0x24; 0x50; + (* MULX4 (% rcx,% r15) (% rdx,Memop Quadword (%% (rsp,80))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x54; 0x24; 0x40; + (* MOV (% rdx) (Memop Quadword (%% (rsp,64))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x38; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x48; 0x8b; 0x54; 0x24; 0x38; + (* MOV (% rdx) (Memop Quadword (%% (rsp,56))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x58; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADCX (% r15) (% rbp) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xcd; + (* ADOX (% rcx) (% rbp) *) + 0x48; 0x11; 0xe9; (* ADC (% rcx) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x54; 0x24; 0x50; + (* MOV (% rdx) (Memop Quadword (%% (rsp,80))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0x8b; 0x54; 0x24; 0x40; + (* MOV (% rdx) (Memop Quadword (%% (rsp,64))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x54; 0x24; 0x58; + (* MULX4 (% rdx,% rax) (% rdx,Memop Quadword (%% (rsp,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xca; + (* ADOX (% rcx) (% rdx) *) + 0x48; 0x8b; 0x54; 0x24; 0x58; + (* MOV (% rdx) (Memop Quadword (%% (rsp,88))) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0x6c; 0x24; 0x50; + (* MULX4 (% rbp,% rbx) (% rdx,Memop Quadword (%% (rsp,80))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x54; 0x24; 0x48; + (* MULX4 (% rdx,% rax) (% rdx,Memop Quadword (%% (rsp,72))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% rcx) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% rbx) (% rdx) *) + 0xb8; 0x00; 0x00; 0x00; 0x00; + (* MOV (% eax) (Imm32 (word 0)) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% rbx) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xe8; + (* ADOX (% rbp) (% rax) *) + 0x48; 0x11; 0xc5; (* ADC (% rbp) (% rax) *) + 0x48; 0x31; 0xc0; (* XOR (% rax) (% rax) *) + 0x48; 0x8b; 0x54; 0x24; 0x30; + (* MOV (% rdx) (Memop Quadword (%% (rsp,48))) *) + 0xc4; 0xe2; 0xbb; 0xf6; 0x44; 0x24; 0x30; + (* MULX4 (% rax,% r8) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% r9) (% r9) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADOX (% r9) (% rax) *) + 0x48; 0x8b; 0x54; 0x24; 0x38; + (* MOV (% rdx) (Memop Quadword (%% (rsp,56))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xd2; + (* ADCX (% r10) (% r10) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADOX (% r10) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% r11) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% r11) (% rdx) *) + 0x48; 0x8b; 0x54; 0x24; 0x40; + (* MOV (% rdx) (Memop Quadword (%% (rsp,64))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xe4; + (* ADCX (% r12) (% r12) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADOX (% r12) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% r13) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xea; + (* ADOX (% r13) (% rdx) *) + 0x48; 0x8b; 0x54; 0x24; 0x48; + (* MOV (% rdx) (Memop Quadword (%% (rsp,72))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf6; + (* ADCX (% r14) (% r14) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xff; + (* ADCX (% r15) (% r15) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfa; + (* ADOX (% r15) (% rdx) *) + 0x48; 0x8b; 0x54; 0x24; 0x50; + (* MOV (% rdx) (Memop Quadword (%% (rsp,80))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% rcx) (% rcx) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc8; + (* ADOX (% rcx) (% rax) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% rbx) (% rbx) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% rbx) (% rdx) *) + 0x48; 0x8b; 0x54; 0x24; 0x58; + (* MOV (% rdx) (Memop Quadword (%% (rsp,88))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xf2; + (* MULX4 (% rsi,% rax) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% rbp) (% rbp) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xe8; + (* ADOX (% rbp) (% rax) *) + 0xb8; 0x00; 0x00; 0x00; 0x00; + (* MOV (% eax) (Imm32 (word 0)) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% rsi) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% rsi) (% rax) *) + 0x48; 0x89; 0x1c; 0x24; (* MOV (Memop Quadword (%% (rsp,0))) (% rbx) *) + 0x4c; 0x89; 0xc2; (* MOV (% rdx) (% r8) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xc2; (* ADD (% rdx) (% r8) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xbb; 0xf6; 0xc0; + (* MULX4 (% rax,% r8) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xc3; + (* MULX4 (% r8,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd0; (* ADC (% r8) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc1; (* SUB (% r9) (% rax) *) + 0x4d; 0x19; 0xc2; (* SBB (% r10) (% r8) *) + 0x49; 0x19; 0xdb; (* SBB (% r11) (% rbx) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd0; (* MOV (% r8) (% rdx) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xca; (* MOV (% rdx) (% r9) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xca; (* ADD (% rdx) (% r9) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xb3; 0xf6; 0xc0; + (* MULX4 (% rax,% r9) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xcb; + (* MULX4 (% r9,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd1; (* ADC (% r9) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc2; (* SUB (% r10) (% rax) *) + 0x4d; 0x19; 0xcb; (* SBB (% r11) (% r9) *) + 0x49; 0x19; 0xdc; (* SBB (% r12) (% rbx) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd1; (* MOV (% r9) (% rdx) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xd2; (* MOV (% rdx) (% r10) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xd2; (* ADD (% rdx) (% r10) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xab; 0xf6; 0xc0; + (* MULX4 (% rax,% r10) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xd3; + (* MULX4 (% r10,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd2; (* ADC (% r10) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc3; (* SUB (% r11) (% rax) *) + 0x4d; 0x19; 0xd4; (* SBB (% r12) (% r10) *) + 0x49; 0x19; 0xdd; (* SBB (% r13) (% rbx) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd2; (* MOV (% r10) (% rdx) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xda; (* MOV (% rdx) (% r11) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xda; (* ADD (% rdx) (% r11) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xa3; 0xf6; 0xc0; + (* MULX4 (% rax,% r11) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xdb; + (* MULX4 (% r11,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd3; (* ADC (% r11) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc4; (* SUB (% r12) (% rax) *) + 0x4d; 0x19; 0xdd; (* SBB (% r13) (% r11) *) + 0x49; 0x19; 0xd8; (* SBB (% r8) (% rbx) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd3; (* MOV (% r11) (% rdx) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xe2; (* MOV (% rdx) (% r12) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xe2; (* ADD (% rdx) (% r12) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0x9b; 0xf6; 0xc0; + (* MULX4 (% rax,% r12) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xe3; + (* MULX4 (% r12,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd4; (* ADC (% r12) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc5; (* SUB (% r13) (% rax) *) + 0x4d; 0x19; 0xe0; (* SBB (% r8) (% r12) *) + 0x49; 0x19; 0xd9; (* SBB (% r9) (% rbx) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd4; (* MOV (% r12) (% rdx) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xea; (* MOV (% rdx) (% r13) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xea; (* ADD (% rdx) (% r13) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0x93; 0xf6; 0xc0; + (* MULX4 (% rax,% r13) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xeb; + (* MULX4 (% r13,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd5; (* ADC (% r13) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc0; (* SUB (% r8) (% rax) *) + 0x4d; 0x19; 0xe9; (* SBB (% r9) (% r13) *) + 0x49; 0x19; 0xda; (* SBB (% r10) (% rbx) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd5; (* MOV (% r13) (% rdx) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x1c; 0x24; (* MOV (% rbx) (Memop Quadword (%% (rsp,0))) *) + 0x4d; 0x01; 0xc6; (* ADD (% r14) (% r8) *) + 0x4d; 0x11; 0xcf; (* ADC (% r15) (% r9) *) + 0x4c; 0x11; 0xd1; (* ADC (% rcx) (% r10) *) + 0x4c; 0x11; 0xdb; (* ADC (% rbx) (% r11) *) + 0x4c; 0x11; 0xe5; (* ADC (% rbp) (% r12) *) + 0x4c; 0x11; 0xee; (* ADC (% rsi) (% r13) *) + 0x41; 0xb8; 0x00; 0x00; 0x00; 0x00; + (* MOV (% r8d) (Imm32 (word 0)) *) + 0x4d; 0x11; 0xc0; (* ADC (% r8) (% r8) *) + 0x4d; 0x31; 0xdb; (* XOR (% r11) (% r11) *) + 0x4d; 0x31; 0xe4; (* XOR (% r12) (% r12) *) + 0x4d; 0x31; 0xed; (* XOR (% r13) (% r13) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0x4c; 0x01; 0xf0; (* ADD (% rax) (% r14) *) + 0x41; 0xb9; 0xff; 0xff; 0xff; 0xff; + (* MOV (% r9d) (Imm32 (word 4294967295)) *) + 0x4d; 0x11; 0xf9; (* ADC (% r9) (% r15) *) + 0x41; 0xba; 0x01; 0x00; 0x00; 0x00; + (* MOV (% r10d) (Imm32 (word 1)) *) + 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x49; 0x11; 0xec; (* ADC (% r12) (% rbp) *) + 0x49; 0x11; 0xf5; (* ADC (% r13) (% rsi) *) + 0x49; 0x83; 0xd0; 0x00; (* ADC (% r8) (Imm8 (word 0)) *) + 0x4c; 0x0f; 0x45; 0xf0; (* CMOVNE (% r14) (% rax) *) + 0x4d; 0x0f; 0x45; 0xf9; (* CMOVNE (% r15) (% r9) *) + 0x49; 0x0f; 0x45; 0xca; (* CMOVNE (% rcx) (% r10) *) + 0x49; 0x0f; 0x45; 0xdb; (* CMOVNE (% rbx) (% r11) *) + 0x49; 0x0f; 0x45; 0xec; (* CMOVNE (% rbp) (% r12) *) + 0x49; 0x0f; 0x45; 0xf5; (* CMOVNE (% rsi) (% r13) *) + 0x4c; 0x89; 0x34; 0x24; (* MOV (Memop Quadword (%% (rsp,0))) (% r14) *) + 0x4c; 0x89; 0x7c; 0x24; 0x08; + (* MOV (Memop Quadword (%% (rsp,8))) (% r15) *) + 0x48; 0x89; 0x4c; 0x24; 0x10; + (* MOV (Memop Quadword (%% (rsp,16))) (% rcx) *) + 0x48; 0x89; 0x5c; 0x24; 0x18; + (* MOV (Memop Quadword (%% (rsp,24))) (% rbx) *) + 0x48; 0x89; 0x6c; 0x24; 0x20; + (* MOV (Memop Quadword (%% (rsp,32))) (% rbp) *) + 0x48; 0x89; 0x74; 0x24; 0x28; + (* MOV (Memop Quadword (%% (rsp,40))) (% rsi) *) + 0x48; 0x8b; 0x94; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,192))) *) + 0x45; 0x31; 0xff; (* XOR (% r15d) (% r15d) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x8c; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,144))) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x94; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,152))) *) + 0x49; 0x01; 0xd9; (* ADD (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xa4; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xac; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% r13,% rbx) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x49; 0x11; 0xdc; (* ADC (% r12) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xb4; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r14,% rbx) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xdd; (* ADC (% r13) (% rbx) *) + 0x4d; 0x11; 0xfe; (* ADC (% r14) (% r15) *) + 0x4c; 0x89; 0xc2; (* MOV (% rdx) (% r8) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xc2; (* ADD (% rdx) (% r8) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xbb; 0xf6; 0xdb; + (* MULX4 (% rbx,% r8) (% rdx,% rbx) *) + 0x4c; 0x11; 0xc0; (* ADC (% rax) (% r8) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc1; (* SUB (% r9) (% rax) *) + 0x49; 0x19; 0xda; (* SBB (% r10) (% rbx) *) + 0x49; 0x19; 0xeb; (* SBB (% r11) (% rbp) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd6; (* ADD (% r14) (% rdx) *) + 0x49; 0x83; 0xd7; 0x00; (* ADC (% r15) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x94; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,200))) *) + 0x45; 0x31; 0xc0; (* XOR (% r8d) (% r8d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf8; + (* ADOX (% r15) (% r8) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xc6; (* ADC (% r14) (% rax) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x4d; 0x11; 0xc0; (* ADC (% r8) (% r8) *) + 0x4c; 0x89; 0xca; (* MOV (% rdx) (% r9) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xca; (* ADD (% rdx) (% r9) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xb3; 0xf6; 0xdb; + (* MULX4 (% rbx,% r9) (% rdx,% rbx) *) + 0x4c; 0x11; 0xc8; (* ADC (% rax) (% r9) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc2; (* SUB (% r10) (% rax) *) + 0x49; 0x19; 0xdb; (* SBB (% r11) (% rbx) *) + 0x49; 0x19; 0xec; (* SBB (% r12) (% rbp) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd7; (* ADD (% r15) (% rdx) *) + 0x49; 0x83; 0xd0; 0x00; (* ADC (% r8) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x94; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,208))) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xc1; + (* ADOX (% r8) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xc7; (* ADC (% r15) (% rax) *) + 0x49; 0x11; 0xd8; (* ADC (% r8) (% rbx) *) + 0x4d; 0x11; 0xc9; (* ADC (% r9) (% r9) *) + 0x4c; 0x89; 0xd2; (* MOV (% rdx) (% r10) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xd2; (* ADD (% rdx) (% r10) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xab; 0xf6; 0xdb; + (* MULX4 (% rbx,% r10) (% rdx,% rbx) *) + 0x4c; 0x11; 0xd0; (* ADC (% rax) (% r10) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc3; (* SUB (% r11) (% rax) *) + 0x49; 0x19; 0xdc; (* SBB (% r12) (% rbx) *) + 0x49; 0x19; 0xed; (* SBB (% r13) (% rbp) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd0; (* ADD (% r8) (% rdx) *) + 0x49; 0x83; 0xd1; 0x00; (* ADC (% r9) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x94; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,216))) *) + 0x45; 0x31; 0xd2; (* XOR (% r10d) (% r10d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xca; + (* ADOX (% r9) (% r10) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xc0; (* ADC (% r8) (% rax) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0x4d; 0x11; 0xd2; (* ADC (% r10) (% r10) *) + 0x4c; 0x89; 0xda; (* MOV (% rdx) (% r11) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xda; (* ADD (% rdx) (% r11) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xa3; 0xf6; 0xdb; + (* MULX4 (% rbx,% r11) (% rdx,% rbx) *) + 0x4c; 0x11; 0xd8; (* ADC (% rax) (% r11) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc4; (* SUB (% r12) (% rax) *) + 0x49; 0x19; 0xdd; (* SBB (% r13) (% rbx) *) + 0x49; 0x19; 0xee; (* SBB (% r14) (% rbp) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd1; (* ADD (% r9) (% rdx) *) + 0x49; 0x83; 0xd2; 0x00; (* ADC (% r10) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x94; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,224))) *) + 0x45; 0x31; 0xdb; (* XOR (% r11d) (% r11d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xc1; (* ADC (% r9) (% rax) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0x4d; 0x11; 0xdb; (* ADC (% r11) (% r11) *) + 0x4c; 0x89; 0xe2; (* MOV (% rdx) (% r12) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xe2; (* ADD (% rdx) (% r12) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0x9b; 0xf6; 0xdb; + (* MULX4 (% rbx,% r12) (% rdx,% rbx) *) + 0x4c; 0x11; 0xe0; (* ADC (% rax) (% r12) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc5; (* SUB (% r13) (% rax) *) + 0x49; 0x19; 0xde; (* SBB (% r14) (% rbx) *) + 0x49; 0x19; 0xef; (* SBB (% r15) (% rbp) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd2; (* ADD (% r10) (% rdx) *) + 0x49; 0x83; 0xd3; 0x00; (* ADC (% r11) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x94; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,232))) *) + 0x45; 0x31; 0xe4; (* XOR (% r12d) (% r12d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xdc; + (* ADOX (% r11) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x4d; 0x11; 0xe4; (* ADC (% r12) (% r12) *) + 0x4c; 0x89; 0xea; (* MOV (% rdx) (% r13) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xea; (* ADD (% rdx) (% r13) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0x93; 0xf6; 0xdb; + (* MULX4 (% rbx,% r13) (% rdx,% rbx) *) + 0x4c; 0x11; 0xe8; (* ADC (% rax) (% r13) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc6; (* SUB (% r14) (% rax) *) + 0x49; 0x19; 0xdf; (* SBB (% r15) (% rbx) *) + 0x49; 0x19; 0xe8; (* SBB (% r8) (% rbp) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd3; (* ADD (% r11) (% rdx) *) + 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) + 0x31; 0xd2; (* XOR (% edx) (% edx) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x45; 0x31; 0xed; (* XOR (% r13d) (% r13d) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0x4c; 0x01; 0xf0; (* ADD (% rax) (% r14) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0x4c; 0x11; 0xfb; (* ADC (% rbx) (% r15) *) + 0xb9; 0x01; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 1)) *) + 0x4c; 0x11; 0xc1; (* ADC (% rcx) (% r8) *) + 0x4c; 0x11; 0xca; (* ADC (% rdx) (% r9) *) + 0x4c; 0x11; 0xd5; (* ADC (% rbp) (% r10) *) + 0x4d; 0x11; 0xdd; (* ADC (% r13) (% r11) *) + 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) + 0x4c; 0x0f; 0x45; 0xf0; (* CMOVNE (% r14) (% rax) *) + 0x4c; 0x0f; 0x45; 0xfb; (* CMOVNE (% r15) (% rbx) *) + 0x4c; 0x0f; 0x45; 0xc1; (* CMOVNE (% r8) (% rcx) *) + 0x4c; 0x0f; 0x45; 0xca; (* CMOVNE (% r9) (% rdx) *) + 0x4c; 0x0f; 0x45; 0xd5; (* CMOVNE (% r10) (% rbp) *) + 0x4d; 0x0f; 0x45; 0xdd; (* CMOVNE (% r11) (% r13) *) + 0x4c; 0x89; 0xb4; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,192))) (% r14) *) + 0x4c; 0x89; 0xbc; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,200))) (% r15) *) + 0x4c; 0x89; 0x84; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,208))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,216))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,224))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,232))) (% r11) *) + 0x48; 0x8b; 0x54; 0x24; 0x60; + (* MOV (% rdx) (Memop Quadword (%% (rsp,96))) *) + 0x45; 0x31; 0xff; (* XOR (% r15d) (% r15d) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x8c; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,144))) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x94; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,152))) *) + 0x49; 0x01; 0xd9; (* ADD (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xa4; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xac; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% r13,% rbx) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x49; 0x11; 0xdc; (* ADC (% r12) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xb4; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r14,% rbx) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xdd; (* ADC (% r13) (% rbx) *) + 0x4d; 0x11; 0xfe; (* ADC (% r14) (% r15) *) + 0x4c; 0x89; 0xc2; (* MOV (% rdx) (% r8) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xc2; (* ADD (% rdx) (% r8) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xbb; 0xf6; 0xdb; + (* MULX4 (% rbx,% r8) (% rdx,% rbx) *) + 0x4c; 0x11; 0xc0; (* ADC (% rax) (% r8) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc1; (* SUB (% r9) (% rax) *) + 0x49; 0x19; 0xda; (* SBB (% r10) (% rbx) *) + 0x49; 0x19; 0xeb; (* SBB (% r11) (% rbp) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd6; (* ADD (% r14) (% rdx) *) + 0x49; 0x83; 0xd7; 0x00; (* ADC (% r15) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x54; 0x24; 0x68; + (* MOV (% rdx) (Memop Quadword (%% (rsp,104))) *) + 0x45; 0x31; 0xc0; (* XOR (% r8d) (% r8d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf8; + (* ADOX (% r15) (% r8) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xc6; (* ADC (% r14) (% rax) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x4d; 0x11; 0xc0; (* ADC (% r8) (% r8) *) + 0x4c; 0x89; 0xca; (* MOV (% rdx) (% r9) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xca; (* ADD (% rdx) (% r9) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xb3; 0xf6; 0xdb; + (* MULX4 (% rbx,% r9) (% rdx,% rbx) *) + 0x4c; 0x11; 0xc8; (* ADC (% rax) (% r9) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc2; (* SUB (% r10) (% rax) *) + 0x49; 0x19; 0xdb; (* SBB (% r11) (% rbx) *) + 0x49; 0x19; 0xec; (* SBB (% r12) (% rbp) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd7; (* ADD (% r15) (% rdx) *) + 0x49; 0x83; 0xd0; 0x00; (* ADC (% r8) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x54; 0x24; 0x70; + (* MOV (% rdx) (Memop Quadword (%% (rsp,112))) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xc1; + (* ADOX (% r8) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xc7; (* ADC (% r15) (% rax) *) + 0x49; 0x11; 0xd8; (* ADC (% r8) (% rbx) *) + 0x4d; 0x11; 0xc9; (* ADC (% r9) (% r9) *) + 0x4c; 0x89; 0xd2; (* MOV (% rdx) (% r10) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xd2; (* ADD (% rdx) (% r10) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xab; 0xf6; 0xdb; + (* MULX4 (% rbx,% r10) (% rdx,% rbx) *) + 0x4c; 0x11; 0xd0; (* ADC (% rax) (% r10) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc3; (* SUB (% r11) (% rax) *) + 0x49; 0x19; 0xdc; (* SBB (% r12) (% rbx) *) + 0x49; 0x19; 0xed; (* SBB (% r13) (% rbp) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd0; (* ADD (% r8) (% rdx) *) + 0x49; 0x83; 0xd1; 0x00; (* ADC (% r9) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x54; 0x24; 0x78; + (* MOV (% rdx) (Memop Quadword (%% (rsp,120))) *) + 0x45; 0x31; 0xd2; (* XOR (% r10d) (% r10d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xca; + (* ADOX (% r9) (% r10) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xc0; (* ADC (% r8) (% rax) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0x4d; 0x11; 0xd2; (* ADC (% r10) (% r10) *) + 0x4c; 0x89; 0xda; (* MOV (% rdx) (% r11) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xda; (* ADD (% rdx) (% r11) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xa3; 0xf6; 0xdb; + (* MULX4 (% rbx,% r11) (% rdx,% rbx) *) + 0x4c; 0x11; 0xd8; (* ADC (% rax) (% r11) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc4; (* SUB (% r12) (% rax) *) + 0x49; 0x19; 0xdd; (* SBB (% r13) (% rbx) *) + 0x49; 0x19; 0xee; (* SBB (% r14) (% rbp) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd1; (* ADD (% r9) (% rdx) *) + 0x49; 0x83; 0xd2; 0x00; (* ADC (% r10) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x94; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,128))) *) + 0x45; 0x31; 0xdb; (* XOR (% r11d) (% r11d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xc1; (* ADC (% r9) (% rax) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0x4d; 0x11; 0xdb; (* ADC (% r11) (% r11) *) + 0x4c; 0x89; 0xe2; (* MOV (% rdx) (% r12) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xe2; (* ADD (% rdx) (% r12) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0x9b; 0xf6; 0xdb; + (* MULX4 (% rbx,% r12) (% rdx,% rbx) *) + 0x4c; 0x11; 0xe0; (* ADC (% rax) (% r12) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc5; (* SUB (% r13) (% rax) *) + 0x49; 0x19; 0xde; (* SBB (% r14) (% rbx) *) + 0x49; 0x19; 0xef; (* SBB (% r15) (% rbp) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd2; (* ADD (% r10) (% rdx) *) + 0x49; 0x83; 0xd3; 0x00; (* ADC (% r11) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x94; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,136))) *) + 0x45; 0x31; 0xe4; (* XOR (% r12d) (% r12d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xdc; + (* ADOX (% r11) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x4d; 0x11; 0xe4; (* ADC (% r12) (% r12) *) + 0x4c; 0x89; 0xea; (* MOV (% rdx) (% r13) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xea; (* ADD (% rdx) (% r13) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0x93; 0xf6; 0xdb; + (* MULX4 (% rbx,% r13) (% rdx,% rbx) *) + 0x4c; 0x11; 0xe8; (* ADC (% rax) (% r13) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc6; (* SUB (% r14) (% rax) *) + 0x49; 0x19; 0xdf; (* SBB (% r15) (% rbx) *) + 0x49; 0x19; 0xe8; (* SBB (% r8) (% rbp) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd3; (* ADD (% r11) (% rdx) *) + 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) + 0x31; 0xd2; (* XOR (% edx) (% edx) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x45; 0x31; 0xed; (* XOR (% r13d) (% r13d) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0x4c; 0x01; 0xf0; (* ADD (% rax) (% r14) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0x4c; 0x11; 0xfb; (* ADC (% rbx) (% r15) *) + 0xb9; 0x01; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 1)) *) + 0x4c; 0x11; 0xc1; (* ADC (% rcx) (% r8) *) + 0x4c; 0x11; 0xca; (* ADC (% rdx) (% r9) *) + 0x4c; 0x11; 0xd5; (* ADC (% rbp) (% r10) *) + 0x4d; 0x11; 0xdd; (* ADC (% r13) (% r11) *) + 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) + 0x4c; 0x0f; 0x45; 0xf0; (* CMOVNE (% r14) (% rax) *) + 0x4c; 0x0f; 0x45; 0xfb; (* CMOVNE (% r15) (% rbx) *) + 0x4c; 0x0f; 0x45; 0xc1; (* CMOVNE (% r8) (% rcx) *) + 0x4c; 0x0f; 0x45; 0xca; (* CMOVNE (% r9) (% rdx) *) + 0x4c; 0x0f; 0x45; 0xd5; (* CMOVNE (% r10) (% rbp) *) + 0x4d; 0x0f; 0x45; 0xdd; (* CMOVNE (% r11) (% r13) *) + 0x4c; 0x89; 0x74; 0x24; 0x60; + (* MOV (Memop Quadword (%% (rsp,96))) (% r14) *) + 0x4c; 0x89; 0x7c; 0x24; 0x68; + (* MOV (Memop Quadword (%% (rsp,104))) (% r15) *) + 0x4c; 0x89; 0x44; 0x24; 0x70; + (* MOV (Memop Quadword (%% (rsp,112))) (% r8) *) + 0x4c; 0x89; 0x4c; 0x24; 0x78; + (* MOV (Memop Quadword (%% (rsp,120))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,128))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,136))) (% r11) *) + 0x48; 0x8b; 0xbc; 0x24; 0x60; 0x01; 0x00; 0x00; + (* MOV (% rdi) (Memop Quadword (%% (rsp,352))) *) + 0x48; 0x8b; 0x04; 0x24; (* MOV (% rax) (Memop Quadword (%% (rsp,0))) *) + 0x48; 0x2b; 0x84; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* SUB (% rax) (Memop Quadword (%% (rsp,192))) *) + 0x48; 0x8b; 0x54; 0x24; 0x08; + (* MOV (% rdx) (Memop Quadword (%% (rsp,8))) *) + 0x48; 0x1b; 0x94; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* SBB (% rdx) (Memop Quadword (%% (rsp,200))) *) + 0x4c; 0x8b; 0x44; 0x24; 0x10; + (* MOV (% r8) (Memop Quadword (%% (rsp,16))) *) + 0x4c; 0x1b; 0x84; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* SBB (% r8) (Memop Quadword (%% (rsp,208))) *) + 0x4c; 0x8b; 0x4c; 0x24; 0x18; + (* MOV (% r9) (Memop Quadword (%% (rsp,24))) *) + 0x4c; 0x1b; 0x8c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* SBB (% r9) (Memop Quadword (%% (rsp,216))) *) + 0x4c; 0x8b; 0x54; 0x24; 0x20; + (* MOV (% r10) (Memop Quadword (%% (rsp,32))) *) + 0x4c; 0x1b; 0x94; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* SBB (% r10) (Memop Quadword (%% (rsp,224))) *) + 0x4c; 0x8b; 0x5c; 0x24; 0x28; + (* MOV (% r11) (Memop Quadword (%% (rsp,40))) *) + 0x4c; 0x1b; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* SBB (% r11) (Memop Quadword (%% (rsp,232))) *) + 0x48; 0x19; 0xc9; (* SBB (% rcx) (% rcx) *) + 0xbe; 0xff; 0xff; 0xff; 0xff; + (* MOV (% esi) (Imm32 (word 4294967295)) *) + 0x48; 0x21; 0xf1; (* AND (% rcx) (% rsi) *) + 0x48; 0x31; 0xf6; (* XOR (% rsi) (% rsi) *) + 0x48; 0x29; 0xce; (* SUB (% rsi) (% rcx) *) + 0x48; 0x29; 0xf0; (* SUB (% rax) (% rsi) *) + 0x48; 0x89; 0x07; (* MOV (Memop Quadword (%% (rdi,0))) (% rax) *) + 0x48; 0x19; 0xca; (* SBB (% rdx) (% rcx) *) + 0x48; 0x89; 0x57; 0x08; (* MOV (Memop Quadword (%% (rdi,8))) (% rdx) *) + 0x48; 0x19; 0xc0; (* SBB (% rax) (% rax) *) + 0x48; 0x21; 0xf1; (* AND (% rcx) (% rsi) *) + 0x48; 0xf7; 0xd8; (* NEG (% rax) *) + 0x49; 0x19; 0xc8; (* SBB (% r8) (% rcx) *) + 0x4c; 0x89; 0x47; 0x10; (* MOV (Memop Quadword (%% (rdi,16))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x4f; 0x18; (* MOV (Memop Quadword (%% (rdi,24))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x57; 0x20; (* MOV (Memop Quadword (%% (rdi,32))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x5f; 0x28; (* MOV (Memop Quadword (%% (rdi,40))) (% r11) *) + 0x48; 0x8b; 0x44; 0x24; 0x60; + (* MOV (% rax) (Memop Quadword (%% (rsp,96))) *) + 0x48; 0x2b; 0x84; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* SUB (% rax) (Memop Quadword (%% (rsp,192))) *) + 0x48; 0x8b; 0x54; 0x24; 0x68; + (* MOV (% rdx) (Memop Quadword (%% (rsp,104))) *) + 0x48; 0x1b; 0x94; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* SBB (% rdx) (Memop Quadword (%% (rsp,200))) *) + 0x4c; 0x8b; 0x44; 0x24; 0x70; + (* MOV (% r8) (Memop Quadword (%% (rsp,112))) *) + 0x4c; 0x1b; 0x84; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* SBB (% r8) (Memop Quadword (%% (rsp,208))) *) + 0x4c; 0x8b; 0x4c; 0x24; 0x78; + (* MOV (% r9) (Memop Quadword (%% (rsp,120))) *) + 0x4c; 0x1b; 0x8c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* SBB (% r9) (Memop Quadword (%% (rsp,216))) *) + 0x4c; 0x8b; 0x94; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (% r10) (Memop Quadword (%% (rsp,128))) *) + 0x4c; 0x1b; 0x94; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* SBB (% r10) (Memop Quadword (%% (rsp,224))) *) + 0x4c; 0x8b; 0x9c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (% r11) (Memop Quadword (%% (rsp,136))) *) + 0x4c; 0x1b; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* SBB (% r11) (Memop Quadword (%% (rsp,232))) *) + 0x48; 0x19; 0xc9; (* SBB (% rcx) (% rcx) *) + 0xbe; 0xff; 0xff; 0xff; 0xff; + (* MOV (% esi) (Imm32 (word 4294967295)) *) + 0x48; 0x21; 0xf1; (* AND (% rcx) (% rsi) *) + 0x48; 0x31; 0xf6; (* XOR (% rsi) (% rsi) *) + 0x48; 0x29; 0xce; (* SUB (% rsi) (% rcx) *) + 0x48; 0x29; 0xf0; (* SUB (% rax) (% rsi) *) + 0x48; 0x89; 0x84; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,144))) (% rax) *) + 0x48; 0x19; 0xca; (* SBB (% rdx) (% rcx) *) + 0x48; 0x89; 0x94; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,152))) (% rdx) *) + 0x48; 0x19; 0xc0; (* SBB (% rax) (% rax) *) + 0x48; 0x21; 0xf1; (* AND (% rcx) (% rsi) *) + 0x48; 0xf7; 0xd8; (* NEG (% rax) *) + 0x49; 0x19; 0xc8; (* SBB (% r8) (% rcx) *) + 0x4c; 0x89; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,160))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x8c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,168))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,176))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,184))) (% r11) *) + 0x48; 0x8b; 0xb4; 0x24; 0x50; 0x01; 0x00; 0x00; + (* MOV (% rsi) (Memop Quadword (%% (rsp,336))) *) + 0x48; 0x8b; 0x56; 0x60; (* MOV (% rdx) (Memop Quadword (%% (rsi,96))) *) + 0x45; 0x31; 0xff; (* XOR (% r15d) (% r15d) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x8c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x94; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x49; 0x01; 0xd9; (* ADD (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xa4; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xac; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% r13,% rbx) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x49; 0x11; 0xdc; (* ADC (% r12) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xb4; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% r14,% rbx) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0x49; 0x11; 0xdd; (* ADC (% r13) (% rbx) *) + 0x4d; 0x11; 0xfe; (* ADC (% r14) (% r15) *) + 0x4c; 0x89; 0xc2; (* MOV (% rdx) (% r8) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xc2; (* ADD (% rdx) (% r8) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xbb; 0xf6; 0xdb; + (* MULX4 (% rbx,% r8) (% rdx,% rbx) *) + 0x4c; 0x11; 0xc0; (* ADC (% rax) (% r8) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc1; (* SUB (% r9) (% rax) *) + 0x49; 0x19; 0xda; (* SBB (% r10) (% rbx) *) + 0x49; 0x19; 0xeb; (* SBB (% r11) (% rbp) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd6; (* ADD (% r14) (% rdx) *) + 0x49; 0x83; 0xd7; 0x00; (* ADC (% r15) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x56; 0x68; (* MOV (% rdx) (Memop Quadword (%% (rsi,104))) *) + 0x45; 0x31; 0xc0; (* XOR (% r8d) (% r8d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf8; + (* ADOX (% r15) (% r8) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0x49; 0x11; 0xc6; (* ADC (% r14) (% rax) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x4d; 0x11; 0xc0; (* ADC (% r8) (% r8) *) + 0x4c; 0x89; 0xca; (* MOV (% rdx) (% r9) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xca; (* ADD (% rdx) (% r9) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xb3; 0xf6; 0xdb; + (* MULX4 (% rbx,% r9) (% rdx,% rbx) *) + 0x4c; 0x11; 0xc8; (* ADC (% rax) (% r9) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc2; (* SUB (% r10) (% rax) *) + 0x49; 0x19; 0xdb; (* SBB (% r11) (% rbx) *) + 0x49; 0x19; 0xec; (* SBB (% r12) (% rbp) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd7; (* ADD (% r15) (% rdx) *) + 0x49; 0x83; 0xd0; 0x00; (* ADC (% r8) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x56; 0x70; (* MOV (% rdx) (Memop Quadword (%% (rsi,112))) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xc1; + (* ADOX (% r8) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0x49; 0x11; 0xc7; (* ADC (% r15) (% rax) *) + 0x49; 0x11; 0xd8; (* ADC (% r8) (% rbx) *) + 0x4d; 0x11; 0xc9; (* ADC (% r9) (% r9) *) + 0x4c; 0x89; 0xd2; (* MOV (% rdx) (% r10) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xd2; (* ADD (% rdx) (% r10) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xab; 0xf6; 0xdb; + (* MULX4 (% rbx,% r10) (% rdx,% rbx) *) + 0x4c; 0x11; 0xd0; (* ADC (% rax) (% r10) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc3; (* SUB (% r11) (% rax) *) + 0x49; 0x19; 0xdc; (* SBB (% r12) (% rbx) *) + 0x49; 0x19; 0xed; (* SBB (% r13) (% rbp) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd0; (* ADD (% r8) (% rdx) *) + 0x49; 0x83; 0xd1; 0x00; (* ADC (% r9) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x56; 0x78; (* MOV (% rdx) (Memop Quadword (%% (rsi,120))) *) + 0x45; 0x31; 0xd2; (* XOR (% r10d) (% r10d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xca; + (* ADOX (% r9) (% r10) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0x49; 0x11; 0xc0; (* ADC (% r8) (% rax) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0x4d; 0x11; 0xd2; (* ADC (% r10) (% r10) *) + 0x4c; 0x89; 0xda; (* MOV (% rdx) (% r11) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xda; (* ADD (% rdx) (% r11) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xa3; 0xf6; 0xdb; + (* MULX4 (% rbx,% r11) (% rdx,% rbx) *) + 0x4c; 0x11; 0xd8; (* ADC (% rax) (% r11) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc4; (* SUB (% r12) (% rax) *) + 0x49; 0x19; 0xdd; (* SBB (% r13) (% rbx) *) + 0x49; 0x19; 0xee; (* SBB (% r14) (% rbp) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd1; (* ADD (% r9) (% rdx) *) + 0x49; 0x83; 0xd2; 0x00; (* ADC (% r10) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x96; 0x80; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,128))) *) + 0x45; 0x31; 0xdb; (* XOR (% r11d) (% r11d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0x49; 0x11; 0xc1; (* ADC (% r9) (% rax) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0x4d; 0x11; 0xdb; (* ADC (% r11) (% r11) *) + 0x4c; 0x89; 0xe2; (* MOV (% rdx) (% r12) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xe2; (* ADD (% rdx) (% r12) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0x9b; 0xf6; 0xdb; + (* MULX4 (% rbx,% r12) (% rdx,% rbx) *) + 0x4c; 0x11; 0xe0; (* ADC (% rax) (% r12) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc5; (* SUB (% r13) (% rax) *) + 0x49; 0x19; 0xde; (* SBB (% r14) (% rbx) *) + 0x49; 0x19; 0xef; (* SBB (% r15) (% rbp) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd2; (* ADD (% r10) (% rdx) *) + 0x49; 0x83; 0xd3; 0x00; (* ADC (% r11) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x96; 0x88; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,136))) *) + 0x45; 0x31; 0xe4; (* XOR (% r12d) (% r12d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xdc; + (* ADOX (% r11) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x4d; 0x11; 0xe4; (* ADC (% r12) (% r12) *) + 0x4c; 0x89; 0xea; (* MOV (% rdx) (% r13) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xea; (* ADD (% rdx) (% r13) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0x93; 0xf6; 0xdb; + (* MULX4 (% rbx,% r13) (% rdx,% rbx) *) + 0x4c; 0x11; 0xe8; (* ADC (% rax) (% r13) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc6; (* SUB (% r14) (% rax) *) + 0x49; 0x19; 0xdf; (* SBB (% r15) (% rbx) *) + 0x49; 0x19; 0xe8; (* SBB (% r8) (% rbp) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd3; (* ADD (% r11) (% rdx) *) + 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) + 0x31; 0xd2; (* XOR (% edx) (% edx) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x45; 0x31; 0xed; (* XOR (% r13d) (% r13d) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0x4c; 0x01; 0xf0; (* ADD (% rax) (% r14) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0x4c; 0x11; 0xfb; (* ADC (% rbx) (% r15) *) + 0xb9; 0x01; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 1)) *) + 0x4c; 0x11; 0xc1; (* ADC (% rcx) (% r8) *) + 0x4c; 0x11; 0xca; (* ADC (% rdx) (% r9) *) + 0x4c; 0x11; 0xd5; (* ADC (% rbp) (% r10) *) + 0x4d; 0x11; 0xdd; (* ADC (% r13) (% r11) *) + 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) + 0x4c; 0x0f; 0x45; 0xf0; (* CMOVNE (% r14) (% rax) *) + 0x4c; 0x0f; 0x45; 0xfb; (* CMOVNE (% r15) (% rbx) *) + 0x4c; 0x0f; 0x45; 0xc1; (* CMOVNE (% r8) (% rcx) *) + 0x4c; 0x0f; 0x45; 0xca; (* CMOVNE (% r9) (% rdx) *) + 0x4c; 0x0f; 0x45; 0xd5; (* CMOVNE (% r10) (% rbp) *) + 0x4d; 0x0f; 0x45; 0xdd; (* CMOVNE (% r11) (% r13) *) + 0x4c; 0x89; 0xb4; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,240))) (% r14) *) + 0x4c; 0x89; 0xbc; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,248))) (% r15) *) + 0x4c; 0x89; 0x84; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,256))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,264))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,272))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,280))) (% r11) *) + 0x48; 0x8b; 0xbc; 0x24; 0x60; 0x01; 0x00; 0x00; + (* MOV (% rdi) (Memop Quadword (%% (rsp,352))) *) + 0x48; 0x8b; 0x07; (* MOV (% rax) (Memop Quadword (%% (rdi,0))) *) + 0x48; 0x2b; 0x44; 0x24; 0x60; + (* SUB (% rax) (Memop Quadword (%% (rsp,96))) *) + 0x48; 0x8b; 0x57; 0x08; (* MOV (% rdx) (Memop Quadword (%% (rdi,8))) *) + 0x48; 0x1b; 0x54; 0x24; 0x68; + (* SBB (% rdx) (Memop Quadword (%% (rsp,104))) *) + 0x4c; 0x8b; 0x47; 0x10; (* MOV (% r8) (Memop Quadword (%% (rdi,16))) *) + 0x4c; 0x1b; 0x44; 0x24; 0x70; + (* SBB (% r8) (Memop Quadword (%% (rsp,112))) *) + 0x4c; 0x8b; 0x4f; 0x18; (* MOV (% r9) (Memop Quadword (%% (rdi,24))) *) + 0x4c; 0x1b; 0x4c; 0x24; 0x78; + (* SBB (% r9) (Memop Quadword (%% (rsp,120))) *) + 0x4c; 0x8b; 0x57; 0x20; (* MOV (% r10) (Memop Quadword (%% (rdi,32))) *) + 0x4c; 0x1b; 0x94; 0x24; 0x80; 0x00; 0x00; 0x00; + (* SBB (% r10) (Memop Quadword (%% (rsp,128))) *) + 0x4c; 0x8b; 0x5f; 0x28; (* MOV (% r11) (Memop Quadword (%% (rdi,40))) *) + 0x4c; 0x1b; 0x9c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* SBB (% r11) (Memop Quadword (%% (rsp,136))) *) + 0x48; 0x19; 0xc9; (* SBB (% rcx) (% rcx) *) + 0xbe; 0xff; 0xff; 0xff; 0xff; + (* MOV (% esi) (Imm32 (word 4294967295)) *) + 0x48; 0x21; 0xf1; (* AND (% rcx) (% rsi) *) + 0x48; 0x31; 0xf6; (* XOR (% rsi) (% rsi) *) + 0x48; 0x29; 0xce; (* SUB (% rsi) (% rcx) *) + 0x48; 0x29; 0xf0; (* SUB (% rax) (% rsi) *) + 0x48; 0x89; 0x07; (* MOV (Memop Quadword (%% (rdi,0))) (% rax) *) + 0x48; 0x19; 0xca; (* SBB (% rdx) (% rcx) *) + 0x48; 0x89; 0x57; 0x08; (* MOV (Memop Quadword (%% (rdi,8))) (% rdx) *) + 0x48; 0x19; 0xc0; (* SBB (% rax) (% rax) *) + 0x48; 0x21; 0xf1; (* AND (% rcx) (% rsi) *) + 0x48; 0xf7; 0xd8; (* NEG (% rax) *) + 0x49; 0x19; 0xc8; (* SBB (% r8) (% rcx) *) + 0x4c; 0x89; 0x47; 0x10; (* MOV (Memop Quadword (%% (rdi,16))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x4f; 0x18; (* MOV (Memop Quadword (%% (rdi,24))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x57; 0x20; (* MOV (Memop Quadword (%% (rdi,32))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x5f; 0x28; (* MOV (Memop Quadword (%% (rdi,40))) (% r11) *) + 0x48; 0x8b; 0xbc; 0x24; 0x60; 0x01; 0x00; 0x00; + (* MOV (% rdi) (Memop Quadword (%% (rsp,352))) *) + 0x48; 0x8b; 0x84; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,192))) *) + 0x48; 0x2b; 0x07; (* SUB (% rax) (Memop Quadword (%% (rdi,0))) *) + 0x48; 0x8b; 0x94; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,200))) *) + 0x48; 0x1b; 0x57; 0x08; (* SBB (% rdx) (Memop Quadword (%% (rdi,8))) *) + 0x4c; 0x8b; 0x84; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (% r8) (Memop Quadword (%% (rsp,208))) *) + 0x4c; 0x1b; 0x47; 0x10; (* SBB (% r8) (Memop Quadword (%% (rdi,16))) *) + 0x4c; 0x8b; 0x8c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MOV (% r9) (Memop Quadword (%% (rsp,216))) *) + 0x4c; 0x1b; 0x4f; 0x18; (* SBB (% r9) (Memop Quadword (%% (rdi,24))) *) + 0x4c; 0x8b; 0x94; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MOV (% r10) (Memop Quadword (%% (rsp,224))) *) + 0x4c; 0x1b; 0x57; 0x20; (* SBB (% r10) (Memop Quadword (%% (rdi,32))) *) + 0x4c; 0x8b; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MOV (% r11) (Memop Quadword (%% (rsp,232))) *) + 0x4c; 0x1b; 0x5f; 0x28; (* SBB (% r11) (Memop Quadword (%% (rdi,40))) *) + 0x48; 0x19; 0xc9; (* SBB (% rcx) (% rcx) *) + 0xbe; 0xff; 0xff; 0xff; 0xff; + (* MOV (% esi) (Imm32 (word 4294967295)) *) + 0x48; 0x21; 0xf1; (* AND (% rcx) (% rsi) *) + 0x48; 0x31; 0xf6; (* XOR (% rsi) (% rsi) *) + 0x48; 0x29; 0xce; (* SUB (% rsi) (% rcx) *) + 0x48; 0x29; 0xf0; (* SUB (% rax) (% rsi) *) + 0x48; 0x89; 0x84; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,192))) (% rax) *) + 0x48; 0x19; 0xca; (* SBB (% rdx) (% rcx) *) + 0x48; 0x89; 0x94; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,200))) (% rdx) *) + 0x48; 0x19; 0xc0; (* SBB (% rax) (% rax) *) + 0x48; 0x21; 0xf1; (* AND (% rcx) (% rsi) *) + 0x48; 0xf7; 0xd8; (* NEG (% rax) *) + 0x49; 0x19; 0xc8; (* SBB (% r8) (% rcx) *) + 0x4c; 0x89; 0x84; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,208))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x8c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,216))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x94; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,224))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,232))) (% r11) *) + 0x48; 0x8b; 0x94; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,288))) *) + 0x45; 0x31; 0xff; (* XOR (% r15d) (% r15d) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x8c; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,144))) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x94; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,152))) *) + 0x49; 0x01; 0xd9; (* ADD (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xa4; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xac; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% r13,% rbx) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x49; 0x11; 0xdc; (* ADC (% r12) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xb4; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r14,% rbx) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xdd; (* ADC (% r13) (% rbx) *) + 0x4d; 0x11; 0xfe; (* ADC (% r14) (% r15) *) + 0x4c; 0x89; 0xc2; (* MOV (% rdx) (% r8) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xc2; (* ADD (% rdx) (% r8) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xbb; 0xf6; 0xdb; + (* MULX4 (% rbx,% r8) (% rdx,% rbx) *) + 0x4c; 0x11; 0xc0; (* ADC (% rax) (% r8) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc1; (* SUB (% r9) (% rax) *) + 0x49; 0x19; 0xda; (* SBB (% r10) (% rbx) *) + 0x49; 0x19; 0xeb; (* SBB (% r11) (% rbp) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd6; (* ADD (% r14) (% rdx) *) + 0x49; 0x83; 0xd7; 0x00; (* ADC (% r15) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x94; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,296))) *) + 0x45; 0x31; 0xc0; (* XOR (% r8d) (% r8d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf8; + (* ADOX (% r15) (% r8) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xc6; (* ADC (% r14) (% rax) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x4d; 0x11; 0xc0; (* ADC (% r8) (% r8) *) + 0x4c; 0x89; 0xca; (* MOV (% rdx) (% r9) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xca; (* ADD (% rdx) (% r9) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xb3; 0xf6; 0xdb; + (* MULX4 (% rbx,% r9) (% rdx,% rbx) *) + 0x4c; 0x11; 0xc8; (* ADC (% rax) (% r9) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc2; (* SUB (% r10) (% rax) *) + 0x49; 0x19; 0xdb; (* SBB (% r11) (% rbx) *) + 0x49; 0x19; 0xec; (* SBB (% r12) (% rbp) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd7; (* ADD (% r15) (% rdx) *) + 0x49; 0x83; 0xd0; 0x00; (* ADC (% r8) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x94; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,304))) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xc1; + (* ADOX (% r8) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xc7; (* ADC (% r15) (% rax) *) + 0x49; 0x11; 0xd8; (* ADC (% r8) (% rbx) *) + 0x4d; 0x11; 0xc9; (* ADC (% r9) (% r9) *) + 0x4c; 0x89; 0xd2; (* MOV (% rdx) (% r10) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xd2; (* ADD (% rdx) (% r10) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xab; 0xf6; 0xdb; + (* MULX4 (% rbx,% r10) (% rdx,% rbx) *) + 0x4c; 0x11; 0xd0; (* ADC (% rax) (% r10) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc3; (* SUB (% r11) (% rax) *) + 0x49; 0x19; 0xdc; (* SBB (% r12) (% rbx) *) + 0x49; 0x19; 0xed; (* SBB (% r13) (% rbp) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd0; (* ADD (% r8) (% rdx) *) + 0x49; 0x83; 0xd1; 0x00; (* ADC (% r9) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x94; 0x24; 0x38; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,312))) *) + 0x45; 0x31; 0xd2; (* XOR (% r10d) (% r10d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xca; + (* ADOX (% r9) (% r10) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xc0; (* ADC (% r8) (% rax) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0x4d; 0x11; 0xd2; (* ADC (% r10) (% r10) *) + 0x4c; 0x89; 0xda; (* MOV (% rdx) (% r11) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xda; (* ADD (% rdx) (% r11) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xa3; 0xf6; 0xdb; + (* MULX4 (% rbx,% r11) (% rdx,% rbx) *) + 0x4c; 0x11; 0xd8; (* ADC (% rax) (% r11) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc4; (* SUB (% r12) (% rax) *) + 0x49; 0x19; 0xdd; (* SBB (% r13) (% rbx) *) + 0x49; 0x19; 0xee; (* SBB (% r14) (% rbp) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd1; (* ADD (% r9) (% rdx) *) + 0x49; 0x83; 0xd2; 0x00; (* ADC (% r10) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x94; 0x24; 0x40; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,320))) *) + 0x45; 0x31; 0xdb; (* XOR (% r11d) (% r11d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xc1; (* ADC (% r9) (% rax) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0x4d; 0x11; 0xdb; (* ADC (% r11) (% r11) *) + 0x4c; 0x89; 0xe2; (* MOV (% rdx) (% r12) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xe2; (* ADD (% rdx) (% r12) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0x9b; 0xf6; 0xdb; + (* MULX4 (% rbx,% r12) (% rdx,% rbx) *) + 0x4c; 0x11; 0xe0; (* ADC (% rax) (% r12) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc5; (* SUB (% r13) (% rax) *) + 0x49; 0x19; 0xde; (* SBB (% r14) (% rbx) *) + 0x49; 0x19; 0xef; (* SBB (% r15) (% rbp) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd2; (* ADD (% r10) (% rdx) *) + 0x49; 0x83; 0xd3; 0x00; (* ADC (% r11) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x94; 0x24; 0x48; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,328))) *) + 0x45; 0x31; 0xe4; (* XOR (% r12d) (% r12d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xdc; + (* ADOX (% r11) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x4d; 0x11; 0xe4; (* ADC (% r12) (% r12) *) + 0x4c; 0x89; 0xea; (* MOV (% rdx) (% r13) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xea; (* ADD (% rdx) (% r13) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0x93; 0xf6; 0xdb; + (* MULX4 (% rbx,% r13) (% rdx,% rbx) *) + 0x4c; 0x11; 0xe8; (* ADC (% rax) (% r13) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc6; (* SUB (% r14) (% rax) *) + 0x49; 0x19; 0xdf; (* SBB (% r15) (% rbx) *) + 0x49; 0x19; 0xe8; (* SBB (% r8) (% rbp) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd3; (* ADD (% r11) (% rdx) *) + 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) + 0x31; 0xd2; (* XOR (% edx) (% edx) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x45; 0x31; 0xed; (* XOR (% r13d) (% r13d) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0x4c; 0x01; 0xf0; (* ADD (% rax) (% r14) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0x4c; 0x11; 0xfb; (* ADC (% rbx) (% r15) *) + 0xb9; 0x01; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 1)) *) + 0x4c; 0x11; 0xc1; (* ADC (% rcx) (% r8) *) + 0x4c; 0x11; 0xca; (* ADC (% rdx) (% r9) *) + 0x4c; 0x11; 0xd5; (* ADC (% rbp) (% r10) *) + 0x4d; 0x11; 0xdd; (* ADC (% r13) (% r11) *) + 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) + 0x4c; 0x0f; 0x45; 0xf0; (* CMOVNE (% r14) (% rax) *) + 0x4c; 0x0f; 0x45; 0xfb; (* CMOVNE (% r15) (% rbx) *) + 0x4c; 0x0f; 0x45; 0xc1; (* CMOVNE (% r8) (% rcx) *) + 0x4c; 0x0f; 0x45; 0xca; (* CMOVNE (% r9) (% rdx) *) + 0x4c; 0x0f; 0x45; 0xd5; (* CMOVNE (% r10) (% rbp) *) + 0x4d; 0x0f; 0x45; 0xdd; (* CMOVNE (% r11) (% r13) *) + 0x4c; 0x89; 0xb4; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,144))) (% r14) *) + 0x4c; 0x89; 0xbc; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,152))) (% r15) *) + 0x4c; 0x89; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,160))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,168))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,176))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,184))) (% r11) *) + 0x48; 0x8b; 0xbc; 0x24; 0x60; 0x01; 0x00; 0x00; + (* MOV (% rdi) (Memop Quadword (%% (rsp,352))) *) + 0x48; 0x8b; 0x8c; 0x24; 0x58; 0x01; 0x00; 0x00; + (* MOV (% rcx) (Memop Quadword (%% (rsp,344))) *) + 0x48; 0x8b; 0x51; 0x60; (* MOV (% rdx) (Memop Quadword (%% (rcx,96))) *) + 0x45; 0x31; 0xff; (* XOR (% r15d) (% r15d) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x8c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x94; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x49; 0x01; 0xd9; (* ADD (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xa4; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xac; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% r13,% rbx) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x49; 0x11; 0xdc; (* ADC (% r12) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xb4; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% r14,% rbx) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0x49; 0x11; 0xdd; (* ADC (% r13) (% rbx) *) + 0x4d; 0x11; 0xfe; (* ADC (% r14) (% r15) *) + 0x4c; 0x89; 0xc2; (* MOV (% rdx) (% r8) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xc2; (* ADD (% rdx) (% r8) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xbb; 0xf6; 0xdb; + (* MULX4 (% rbx,% r8) (% rdx,% rbx) *) + 0x4c; 0x11; 0xc0; (* ADC (% rax) (% r8) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc1; (* SUB (% r9) (% rax) *) + 0x49; 0x19; 0xda; (* SBB (% r10) (% rbx) *) + 0x49; 0x19; 0xeb; (* SBB (% r11) (% rbp) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd6; (* ADD (% r14) (% rdx) *) + 0x49; 0x83; 0xd7; 0x00; (* ADC (% r15) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x51; 0x68; (* MOV (% rdx) (Memop Quadword (%% (rcx,104))) *) + 0x45; 0x31; 0xc0; (* XOR (% r8d) (% r8d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf8; + (* ADOX (% r15) (% r8) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0x49; 0x11; 0xc6; (* ADC (% r14) (% rax) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x4d; 0x11; 0xc0; (* ADC (% r8) (% r8) *) + 0x4c; 0x89; 0xca; (* MOV (% rdx) (% r9) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xca; (* ADD (% rdx) (% r9) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xb3; 0xf6; 0xdb; + (* MULX4 (% rbx,% r9) (% rdx,% rbx) *) + 0x4c; 0x11; 0xc8; (* ADC (% rax) (% r9) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc2; (* SUB (% r10) (% rax) *) + 0x49; 0x19; 0xdb; (* SBB (% r11) (% rbx) *) + 0x49; 0x19; 0xec; (* SBB (% r12) (% rbp) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd7; (* ADD (% r15) (% rdx) *) + 0x49; 0x83; 0xd0; 0x00; (* ADC (% r8) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x51; 0x70; (* MOV (% rdx) (Memop Quadword (%% (rcx,112))) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xc1; + (* ADOX (% r8) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0x49; 0x11; 0xc7; (* ADC (% r15) (% rax) *) + 0x49; 0x11; 0xd8; (* ADC (% r8) (% rbx) *) + 0x4d; 0x11; 0xc9; (* ADC (% r9) (% r9) *) + 0x4c; 0x89; 0xd2; (* MOV (% rdx) (% r10) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xd2; (* ADD (% rdx) (% r10) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xab; 0xf6; 0xdb; + (* MULX4 (% rbx,% r10) (% rdx,% rbx) *) + 0x4c; 0x11; 0xd0; (* ADC (% rax) (% r10) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc3; (* SUB (% r11) (% rax) *) + 0x49; 0x19; 0xdc; (* SBB (% r12) (% rbx) *) + 0x49; 0x19; 0xed; (* SBB (% r13) (% rbp) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd0; (* ADD (% r8) (% rdx) *) + 0x49; 0x83; 0xd1; 0x00; (* ADC (% r9) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x51; 0x78; (* MOV (% rdx) (Memop Quadword (%% (rcx,120))) *) + 0x45; 0x31; 0xd2; (* XOR (% r10d) (% r10d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xca; + (* ADOX (% r9) (% r10) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0x49; 0x11; 0xc0; (* ADC (% r8) (% rax) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0x4d; 0x11; 0xd2; (* ADC (% r10) (% r10) *) + 0x4c; 0x89; 0xda; (* MOV (% rdx) (% r11) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xda; (* ADD (% rdx) (% r11) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xa3; 0xf6; 0xdb; + (* MULX4 (% rbx,% r11) (% rdx,% rbx) *) + 0x4c; 0x11; 0xd8; (* ADC (% rax) (% r11) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc4; (* SUB (% r12) (% rax) *) + 0x49; 0x19; 0xdd; (* SBB (% r13) (% rbx) *) + 0x49; 0x19; 0xee; (* SBB (% r14) (% rbp) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd1; (* ADD (% r9) (% rdx) *) + 0x49; 0x83; 0xd2; 0x00; (* ADC (% r10) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x91; 0x80; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rcx,128))) *) + 0x45; 0x31; 0xdb; (* XOR (% r11d) (% r11d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0x49; 0x11; 0xc1; (* ADC (% r9) (% rax) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0x4d; 0x11; 0xdb; (* ADC (% r11) (% r11) *) + 0x4c; 0x89; 0xe2; (* MOV (% rdx) (% r12) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xe2; (* ADD (% rdx) (% r12) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0x9b; 0xf6; 0xdb; + (* MULX4 (% rbx,% r12) (% rdx,% rbx) *) + 0x4c; 0x11; 0xe0; (* ADC (% rax) (% r12) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc5; (* SUB (% r13) (% rax) *) + 0x49; 0x19; 0xde; (* SBB (% r14) (% rbx) *) + 0x49; 0x19; 0xef; (* SBB (% r15) (% rbp) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd2; (* ADD (% r10) (% rdx) *) + 0x49; 0x83; 0xd3; 0x00; (* ADC (% r11) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x91; 0x88; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rcx,136))) *) + 0x45; 0x31; 0xe4; (* XOR (% r12d) (% r12d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xdc; + (* ADOX (% r11) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x4d; 0x11; 0xe4; (* ADC (% r12) (% r12) *) + 0x4c; 0x89; 0xea; (* MOV (% rdx) (% r13) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xea; (* ADD (% rdx) (% r13) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0x93; 0xf6; 0xdb; + (* MULX4 (% rbx,% r13) (% rdx,% rbx) *) + 0x4c; 0x11; 0xe8; (* ADC (% rax) (% r13) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc6; (* SUB (% r14) (% rax) *) + 0x49; 0x19; 0xdf; (* SBB (% r15) (% rbx) *) + 0x49; 0x19; 0xe8; (* SBB (% r8) (% rbp) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd3; (* ADD (% r11) (% rdx) *) + 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) + 0x31; 0xd2; (* XOR (% edx) (% edx) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x45; 0x31; 0xed; (* XOR (% r13d) (% r13d) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0x4c; 0x01; 0xf0; (* ADD (% rax) (% r14) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0x4c; 0x11; 0xfb; (* ADC (% rbx) (% r15) *) + 0xb9; 0x01; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 1)) *) + 0x4c; 0x11; 0xc1; (* ADC (% rcx) (% r8) *) + 0x4c; 0x11; 0xca; (* ADC (% rdx) (% r9) *) + 0x4c; 0x11; 0xd5; (* ADC (% rbp) (% r10) *) + 0x4d; 0x11; 0xdd; (* ADC (% r13) (% r11) *) + 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) + 0x4c; 0x0f; 0x45; 0xf0; (* CMOVNE (% r14) (% rax) *) + 0x4c; 0x0f; 0x45; 0xfb; (* CMOVNE (% r15) (% rbx) *) + 0x4c; 0x0f; 0x45; 0xc1; (* CMOVNE (% r8) (% rcx) *) + 0x4c; 0x0f; 0x45; 0xca; (* CMOVNE (% r9) (% rdx) *) + 0x4c; 0x0f; 0x45; 0xd5; (* CMOVNE (% r10) (% rbp) *) + 0x4d; 0x0f; 0x45; 0xdd; (* CMOVNE (% r11) (% r13) *) + 0x4c; 0x89; 0x77; 0x60; (* MOV (Memop Quadword (%% (rdi,96))) (% r14) *) + 0x4c; 0x89; 0x7f; 0x68; (* MOV (Memop Quadword (%% (rdi,104))) (% r15) *) + 0x4c; 0x89; 0x47; 0x70; (* MOV (Memop Quadword (%% (rdi,112))) (% r8) *) + 0x4c; 0x89; 0x4f; 0x78; (* MOV (Memop Quadword (%% (rdi,120))) (% r9) *) + 0x4c; 0x89; 0x97; 0x80; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rdi,128))) (% r10) *) + 0x4c; 0x89; 0x9f; 0x88; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rdi,136))) (% r11) *) + 0x48; 0x8b; 0x94; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,192))) *) + 0x45; 0x31; 0xff; (* XOR (% r15d) (% r15d) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x4c; 0x24; 0x30; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x54; 0x24; 0x38; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x49; 0x01; 0xd9; (* ADD (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x5c; 0x24; 0x40; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,64))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x64; 0x24; 0x48; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,72))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x6c; 0x24; 0x50; + (* MULX4 (% r13,% rbx) (% rdx,Memop Quadword (%% (rsp,80))) *) + 0x49; 0x11; 0xdc; (* ADC (% r12) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x74; 0x24; 0x58; + (* MULX4 (% r14,% rbx) (% rdx,Memop Quadword (%% (rsp,88))) *) + 0x49; 0x11; 0xdd; (* ADC (% r13) (% rbx) *) + 0x4d; 0x11; 0xfe; (* ADC (% r14) (% r15) *) + 0x4c; 0x89; 0xc2; (* MOV (% rdx) (% r8) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xc2; (* ADD (% rdx) (% r8) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xbb; 0xf6; 0xdb; + (* MULX4 (% rbx,% r8) (% rdx,% rbx) *) + 0x4c; 0x11; 0xc0; (* ADC (% rax) (% r8) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc1; (* SUB (% r9) (% rax) *) + 0x49; 0x19; 0xda; (* SBB (% r10) (% rbx) *) + 0x49; 0x19; 0xeb; (* SBB (% r11) (% rbp) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd6; (* ADD (% r14) (% rdx) *) + 0x49; 0x83; 0xd7; 0x00; (* ADC (% r15) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x94; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,200))) *) + 0x45; 0x31; 0xc0; (* XOR (% r8d) (% r8d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x38; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x40; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,64))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf8; + (* ADOX (% r15) (% r8) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x58; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,88))) *) + 0x49; 0x11; 0xc6; (* ADC (% r14) (% rax) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x4d; 0x11; 0xc0; (* ADC (% r8) (% r8) *) + 0x4c; 0x89; 0xca; (* MOV (% rdx) (% r9) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xca; (* ADD (% rdx) (% r9) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xb3; 0xf6; 0xdb; + (* MULX4 (% rbx,% r9) (% rdx,% rbx) *) + 0x4c; 0x11; 0xc8; (* ADC (% rax) (% r9) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc2; (* SUB (% r10) (% rax) *) + 0x49; 0x19; 0xdb; (* SBB (% r11) (% rbx) *) + 0x49; 0x19; 0xec; (* SBB (% r12) (% rbp) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd7; (* ADD (% r15) (% rdx) *) + 0x49; 0x83; 0xd0; 0x00; (* ADC (% r8) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x94; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,208))) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x38; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x40; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,64))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xc1; + (* ADOX (% r8) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x58; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,88))) *) + 0x49; 0x11; 0xc7; (* ADC (% r15) (% rax) *) + 0x49; 0x11; 0xd8; (* ADC (% r8) (% rbx) *) + 0x4d; 0x11; 0xc9; (* ADC (% r9) (% r9) *) + 0x4c; 0x89; 0xd2; (* MOV (% rdx) (% r10) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xd2; (* ADD (% rdx) (% r10) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xab; 0xf6; 0xdb; + (* MULX4 (% rbx,% r10) (% rdx,% rbx) *) + 0x4c; 0x11; 0xd0; (* ADC (% rax) (% r10) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc3; (* SUB (% r11) (% rax) *) + 0x49; 0x19; 0xdc; (* SBB (% r12) (% rbx) *) + 0x49; 0x19; 0xed; (* SBB (% r13) (% rbp) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd0; (* ADD (% r8) (% rdx) *) + 0x49; 0x83; 0xd1; 0x00; (* ADC (% r9) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x94; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,216))) *) + 0x45; 0x31; 0xd2; (* XOR (% r10d) (% r10d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x38; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x40; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,64))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xca; + (* ADOX (% r9) (% r10) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x58; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,88))) *) + 0x49; 0x11; 0xc0; (* ADC (% r8) (% rax) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0x4d; 0x11; 0xd2; (* ADC (% r10) (% r10) *) + 0x4c; 0x89; 0xda; (* MOV (% rdx) (% r11) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xda; (* ADD (% rdx) (% r11) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xa3; 0xf6; 0xdb; + (* MULX4 (% rbx,% r11) (% rdx,% rbx) *) + 0x4c; 0x11; 0xd8; (* ADC (% rax) (% r11) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc4; (* SUB (% r12) (% rax) *) + 0x49; 0x19; 0xdd; (* SBB (% r13) (% rbx) *) + 0x49; 0x19; 0xee; (* SBB (% r14) (% rbp) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd1; (* ADD (% r9) (% rdx) *) + 0x49; 0x83; 0xd2; 0x00; (* ADC (% r10) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x94; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,224))) *) + 0x45; 0x31; 0xdb; (* XOR (% r11d) (% r11d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x38; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x40; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,64))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x58; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,88))) *) + 0x49; 0x11; 0xc1; (* ADC (% r9) (% rax) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0x4d; 0x11; 0xdb; (* ADC (% r11) (% r11) *) + 0x4c; 0x89; 0xe2; (* MOV (% rdx) (% r12) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xe2; (* ADD (% rdx) (% r12) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0x9b; 0xf6; 0xdb; + (* MULX4 (% rbx,% r12) (% rdx,% rbx) *) + 0x4c; 0x11; 0xe0; (* ADC (% rax) (% r12) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc5; (* SUB (% r13) (% rax) *) + 0x49; 0x19; 0xde; (* SBB (% r14) (% rbx) *) + 0x49; 0x19; 0xef; (* SBB (% r15) (% rbp) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd2; (* ADD (% r10) (% rdx) *) + 0x49; 0x83; 0xd3; 0x00; (* ADC (% r11) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x94; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,232))) *) + 0x45; 0x31; 0xe4; (* XOR (% r12d) (% r12d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x38; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x40; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,64))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xdc; + (* ADOX (% r11) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x58; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,88))) *) + 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x4d; 0x11; 0xe4; (* ADC (% r12) (% r12) *) + 0x4c; 0x89; 0xea; (* MOV (% rdx) (% r13) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xea; (* ADD (% rdx) (% r13) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0x93; 0xf6; 0xdb; + (* MULX4 (% rbx,% r13) (% rdx,% rbx) *) + 0x4c; 0x11; 0xe8; (* ADC (% rax) (% r13) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc6; (* SUB (% r14) (% rax) *) + 0x49; 0x19; 0xdf; (* SBB (% r15) (% rbx) *) + 0x49; 0x19; 0xe8; (* SBB (% r8) (% rbp) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd3; (* ADD (% r11) (% rdx) *) + 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) + 0x31; 0xd2; (* XOR (% edx) (% edx) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x45; 0x31; 0xed; (* XOR (% r13d) (% r13d) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0x4c; 0x01; 0xf0; (* ADD (% rax) (% r14) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0x4c; 0x11; 0xfb; (* ADC (% rbx) (% r15) *) + 0xb9; 0x01; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 1)) *) + 0x4c; 0x11; 0xc1; (* ADC (% rcx) (% r8) *) + 0x4c; 0x11; 0xca; (* ADC (% rdx) (% r9) *) + 0x4c; 0x11; 0xd5; (* ADC (% rbp) (% r10) *) + 0x4d; 0x11; 0xdd; (* ADC (% r13) (% r11) *) + 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) + 0x4c; 0x0f; 0x45; 0xf0; (* CMOVNE (% r14) (% rax) *) + 0x4c; 0x0f; 0x45; 0xfb; (* CMOVNE (% r15) (% rbx) *) + 0x4c; 0x0f; 0x45; 0xc1; (* CMOVNE (% r8) (% rcx) *) + 0x4c; 0x0f; 0x45; 0xca; (* CMOVNE (% r9) (% rdx) *) + 0x4c; 0x0f; 0x45; 0xd5; (* CMOVNE (% r10) (% rbp) *) + 0x4d; 0x0f; 0x45; 0xdd; (* CMOVNE (% r11) (% r13) *) + 0x4c; 0x89; 0xb4; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,192))) (% r14) *) + 0x4c; 0x89; 0xbc; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,200))) (% r15) *) + 0x4c; 0x89; 0x84; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,208))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,216))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,224))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,232))) (% r11) *) + 0x48; 0x8b; 0xbc; 0x24; 0x60; 0x01; 0x00; 0x00; + (* MOV (% rdi) (Memop Quadword (%% (rsp,352))) *) + 0x48; 0x8b; 0x84; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,192))) *) + 0x48; 0x2b; 0x84; 0x24; 0x90; 0x00; 0x00; 0x00; + (* SUB (% rax) (Memop Quadword (%% (rsp,144))) *) + 0x48; 0x8b; 0x94; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,200))) *) + 0x48; 0x1b; 0x94; 0x24; 0x98; 0x00; 0x00; 0x00; + (* SBB (% rdx) (Memop Quadword (%% (rsp,152))) *) + 0x4c; 0x8b; 0x84; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (% r8) (Memop Quadword (%% (rsp,208))) *) + 0x4c; 0x1b; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* SBB (% r8) (Memop Quadword (%% (rsp,160))) *) + 0x4c; 0x8b; 0x8c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MOV (% r9) (Memop Quadword (%% (rsp,216))) *) + 0x4c; 0x1b; 0x8c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* SBB (% r9) (Memop Quadword (%% (rsp,168))) *) + 0x4c; 0x8b; 0x94; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MOV (% r10) (Memop Quadword (%% (rsp,224))) *) + 0x4c; 0x1b; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* SBB (% r10) (Memop Quadword (%% (rsp,176))) *) + 0x4c; 0x8b; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MOV (% r11) (Memop Quadword (%% (rsp,232))) *) + 0x4c; 0x1b; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* SBB (% r11) (Memop Quadword (%% (rsp,184))) *) + 0x48; 0x19; 0xc9; (* SBB (% rcx) (% rcx) *) + 0xbe; 0xff; 0xff; 0xff; 0xff; + (* MOV (% esi) (Imm32 (word 4294967295)) *) + 0x48; 0x21; 0xf1; (* AND (% rcx) (% rsi) *) + 0x48; 0x31; 0xf6; (* XOR (% rsi) (% rsi) *) + 0x48; 0x29; 0xce; (* SUB (% rsi) (% rcx) *) + 0x48; 0x29; 0xf0; (* SUB (% rax) (% rsi) *) + 0x48; 0x89; 0x47; 0x30; (* MOV (Memop Quadword (%% (rdi,48))) (% rax) *) + 0x48; 0x19; 0xca; (* SBB (% rdx) (% rcx) *) + 0x48; 0x89; 0x57; 0x38; (* MOV (Memop Quadword (%% (rdi,56))) (% rdx) *) + 0x48; 0x19; 0xc0; (* SBB (% rax) (% rax) *) + 0x48; 0x21; 0xf1; (* AND (% rcx) (% rsi) *) + 0x48; 0xf7; 0xd8; (* NEG (% rax) *) + 0x49; 0x19; 0xc8; (* SBB (% r8) (% rcx) *) + 0x4c; 0x89; 0x47; 0x40; (* MOV (Memop Quadword (%% (rdi,64))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x4f; 0x48; (* MOV (Memop Quadword (%% (rdi,72))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x57; 0x50; (* MOV (Memop Quadword (%% (rdi,80))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x5f; 0x58; (* MOV (Memop Quadword (%% (rdi,88))) (% r11) *) + 0x48; 0x81; 0xc4; 0x68; 0x01; 0x00; 0x00; + (* ADD (% rsp) (Imm32 (word 360)) *) + 0x41; 0x5f; (* POP (% r15) *) + 0x41; 0x5e; (* POP (% r14) *) + 0x41; 0x5d; (* POP (% r13) *) + 0x41; 0x5c; (* POP (% r12) *) + 0x5d; (* POP (% rbp) *) + 0x5b; (* POP (% rbx) *) + 0xc3 (* RET *) +];; + +let P384_MONTJADD_EXEC = X86_MK_CORE_EXEC_RULE p384_montjadd_mc;; + +(* ------------------------------------------------------------------------- *) +(* Common supporting definitions and lemmas for component proofs. *) +(* ------------------------------------------------------------------------- *) + +let p_384 = new_definition `p_384 = 39402006196394479212279040100143613805079739270465446667948293404245721771496870329047266088258938001861606973112319`;; + +let nistp384 = define + `nistp384 = + (integer_mod_ring p_384, + ring_neg (integer_mod_ring p_384) (&3), + &b_384:int)`;; + +let nistp384_encode = new_definition + `nistp384_encode = montgomery_encode(384,p_384)`;; + +let swlemma = WORD_RULE + `word_add (word_shl x 32) x:int64 = word(4294967297 * val x)`;; + +let mmlemma = prove + (`!h (l:int64) (x:int64). + &2 pow 64 * &h + &(val(l:int64)):real = + &(val(word(4294967297 * val x):int64)) * &18446744069414584321 + ==> &2 pow 64 * &h + &(val(x:int64)):real = + &(val(word(4294967297 * val x):int64)) * &18446744069414584321`, + REPEAT GEN_TAC THEN REWRITE_TAC[REAL_OF_NUM_CLAUSES] THEN + REPEAT STRIP_TAC THEN FIRST_ASSUM(SUBST1_TAC o SYM) THEN + AP_TERM_TAC THEN AP_TERM_TAC THEN + REWRITE_TAC[GSYM VAL_CONG; DIMINDEX_64] THEN FIRST_X_ASSUM(MATCH_MP_TAC o + MATCH_MP (NUMBER_RULE + `p * h + l:num = y ==> (y == x) (mod p) ==> (x == l) (mod p)`)) THEN + REWRITE_TAC[CONG; VAL_WORD; DIMINDEX_64] THEN CONV_TAC MOD_DOWN_CONV THEN + REWRITE_TAC[GSYM CONG] THEN MATCH_MP_TAC(NUMBER_RULE + `(a * b == 1) (mod p) ==> ((a * x) * b == x) (mod p)`) THEN + REWRITE_TAC[CONG] THEN CONV_TAC NUM_REDUCE_CONV);; + +let nintlemma = prove + (`&(num_of_int(x rem &p_384)) = x rem &p_384`, + MATCH_MP_TAC INT_OF_NUM_OF_INT THEN MATCH_MP_TAC INT_REM_POS THEN + REWRITE_TAC[INT_OF_NUM_EQ; p_384] THEN CONV_TAC NUM_REDUCE_CONV);; + +let unilemma0 = prove + (`x = a MOD p_384 ==> x < p_384 /\ &x = &a rem &p_384`, + REWRITE_TAC[INT_OF_NUM_REM; p_384] THEN ARITH_TAC);; + +let unilemma1 = prove + (`&x = a rem &p_384 ==> x < p_384 /\ &x = a rem &p_384`, + SIMP_TAC[GSYM INT_OF_NUM_LT; INT_LT_REM_EQ; p_384] THEN INT_ARITH_TAC);; + +let unilemma2 = prove + (`X = num_of_int(x rem &p_384) ==> X < p_384 /\ &X = x rem &p_384`, + DISCH_THEN SUBST1_TAC THEN + REWRITE_TAC[GSYM INT_OF_NUM_LT; nintlemma; INT_LT_REM_EQ] THEN + REWRITE_TAC[INT_OF_NUM_LT; p_384] THEN CONV_TAC NUM_REDUCE_CONV);; + +let lemont = prove + (`(&i * x * y) rem &p_384 = (&i * x rem &p_384 * y rem &p_384) rem &p_384`, + CONV_TAC INT_REM_DOWN_CONV THEN REWRITE_TAC[]);; + +let pumont = prove + (`(&(inverse_mod p_384 (2 EXP 384)) * + (&2 pow 384 * x) rem &p_384 * (&2 pow 384 * y) rem &p_384) rem &p_384 = + (&2 pow 384 * x * y) rem &p_384`, + CONV_TAC INT_REM_DOWN_CONV THEN REWRITE_TAC[INT_REM_EQ] THEN + MATCH_MP_TAC(INTEGER_RULE + `(i * t:int == &1) (mod p) + ==> (i * (t * x) * (t * y) == t * x * y) (mod p)`) THEN + REWRITE_TAC[GSYM num_congruent; INT_OF_NUM_CLAUSES] THEN + REWRITE_TAC[INVERSE_MOD_LMUL_EQ; COPRIME_REXP; COPRIME_2; p_384] THEN + CONV_TAC NUM_REDUCE_CONV);; + +let lvs = + ["x_1",[`RSI`;`0`]; + "y_1",[`RSI`;`48`]; + "z_1",[`RSI`;`96`]; + "x_2",[`RCX`;`0`]; + "y_2",[`RCX`;`48`]; + "z_2",[`RCX`;`96`]; + "x_3",[`RDI`;`0`]; + "y_3",[`RDI`;`48`]; + "z_3",[`RDI`;`96`]; + "z1sq",[`RSP`;`0`]; + "ww",[`RSP`;`0`]; + "yd",[`RSP`;`48`]; + "y2a",[`RSP`;`48`]; + "x2a",[`RSP`;`96`]; + "zzx2",[`RSP`;`96`]; + "zz",[`RSP`;`144`]; + "t1",[`RSP`;`144`]; + "t2",[`RSP`;`192`]; + "x1a",[`RSP`;`192`]; + "zzx1",[`RSP`;`192`]; + "xd",[`RSP`;`240`]; + "z2sq",[`RSP`;`240`]; + "y1a",[`RSP`;`288`]; + "z_2_alt",[`RSI`;`96`]];; + +(* ------------------------------------------------------------------------- *) +(* Instances of montsqr. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_MONTSQR_P384_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE p384_montjadd_mc) 230 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1. + !a. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) t = a + ==> + nonoverlapping (word pc,0x53ac) (word_add (read p3 t) (word n3),48) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST p384_montjadd_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) s = + a) + (\s. read RIP s = pcout /\ + (a EXP 2 <= 2 EXP 384 * p_384 + ==> read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 6)) s = + (inverse_mod p_384 (2 EXP 384) * a EXP 2) MOD p_384)) + (MAYCHANGE [RIP; RSI; RAX; RBX; RBP; RCX; RDX; + R8; R9; R10; R11; R12; R13; R14; R15] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 6)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + (*** Globalize the a EXP 2 <= 2 EXP 384 * p_384 assumption ***) + + ASM_CASES_TAC `a EXP 2 <= 2 EXP 384 * p_384` THENL + [ASM_REWRITE_TAC[]; X86_SIM_TAC P384_MONTJADD_EXEC (1--230)] THEN + ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "x_" o lhand o concl) THEN + + (*** Simulate the main squaring and 6-fold Montgomery reduction ***) + + MAP_EVERY (fun s -> + X86_SINGLE_STEP_TAC P384_MONTJADD_EXEC s THEN + RULE_ASSUM_TAC(REWRITE_RULE[swlemma]) THEN + TRY(ACCUMULATE_ARITH_TAC s) THEN CLARIFY_TAC) + (statenames "s" (1--205)) THEN + + (*** Do the congruential reasoning on the chosen multipliers ***) + + RULE_ASSUM_TAC(fun th -> try MATCH_MP mmlemma th with Failure _ -> th) THEN + + (*** Derive the main property of the pre-reduced form, which we call t ***) + + ABBREV_TAC + `t = bignum_of_wordlist + [sum_s198; sum_s199; sum_s200; sum_s201; sum_s202; sum_s203; + word (bitval carry_s203)]` THEN + + SUBGOAL_THEN + `t < 2 * p_384 /\ (2 EXP 384 * t == a EXP 2) (mod p_384)` + STRIP_ASSUME_TAC THENL + [RULE_ASSUM_TAC(REWRITE_RULE[VAL_WORD_BITVAL]) THEN + ACCUMULATOR_POP_ASSUM_LIST + (STRIP_ASSUME_TAC o end_itlist CONJ o DECARRY_RULE) THEN + CONJ_TAC THENL + [FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP (ARITH_RULE + `ab <= 2 EXP 384 * p + ==> 2 EXP 384 * t < ab + 2 EXP 384 * p ==> t < 2 * p`)) THEN + MAP_EVERY EXPAND_TAC ["a"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + REWRITE_TAC[p_384; REAL_ARITH `a:real < b + c <=> a - b < c`] THEN + ASM_REWRITE_TAC[VAL_WORD_BITVAL] THEN BOUNDER_TAC[]; + REWRITE_TAC[REAL_CONGRUENCE; p_384] THEN CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["a"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ASM_REWRITE_TAC[VAL_WORD_BITVAL] THEN REAL_INTEGER_TAC]; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Final correction stage ***) + + X86_ACCSTEPS_TAC P384_MONTJADD_EXEC + [210;212;214;215;216;217] (206--230) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + TRANS_TAC EQ_TRANS `t MOD p_384` THEN CONJ_TAC THENL + [ALL_TAC; + REWRITE_TAC[GSYM CONG] THEN FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP + (NUMBER_RULE + `(e * t == a EXP 2) (mod p) + ==> (e * i == 1) (mod p) ==> (t == i * a EXP 2) (mod p)`)) THEN + REWRITE_TAC[INVERSE_MOD_RMUL_EQ; COPRIME_REXP; COPRIME_2] THEN + REWRITE_TAC[p_384] THEN CONV_TAC NUM_REDUCE_CONV] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC EQUAL_FROM_CONGRUENT_MOD_MOD THEN + MAP_EVERY EXISTS_TAC + [`384`; `if t < p_384 then &t:real else &t - &p_384`] THEN + REPEAT CONJ_TAC THENL + [REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN BOUNDER_TAC[]; + REWRITE_TAC[p_384] THEN ARITH_TAC; + REWRITE_TAC[p_384] THEN ARITH_TAC; + ALL_TAC; + ASM_SIMP_TAC[MOD_CASES] THEN + GEN_REWRITE_TAC LAND_CONV [COND_RAND] THEN + SIMP_TAC[REAL_OF_NUM_SUB; GSYM NOT_LT]] THEN + SUBGOAL_THEN + `~(val(word_add (word(bitval carry_s203)) + (word(bitval carry_s217)):int64) = 0) <=> + p_384 <= t` + SUBST_ALL_TAC THENL + [REWRITE_TAC[VAL_WORD_ADD_CASES; VAL_WORD_BITVAL; DIMINDEX_64] THEN + SIMP_TAC[BITVAL_BOUND; ARITH_RULE + `b <= 1 /\ c <= 1 ==> b + c < 2 EXP 64`] THEN + TRANS_TAC EQ_TRANS `2 EXP 384 <= t + (2 EXP 384 - p_384)` THEN + CONJ_TAC THENL [ALL_TAC; REWRITE_TAC[p_384] THEN ARITH_TAC] THEN + TRANS_TAC EQ_TRANS + `2 EXP 384 + <= 2 EXP 384 * (bitval carry_s203 + bitval carry_s217) + + bignum_of_wordlist + [sum_s210;sum_s212;sum_s214;sum_s215;sum_s216;sum_s217]` THEN + CONJ_TAC THENL + [REWRITE_TAC[TAUT `(~p <=> q) <=> (~p ==> q) /\ (p ==> ~q)`] THEN + CONJ_TAC THENL [ARITH_TAC; DISCH_THEN SUBST1_TAC] THEN + REWRITE_TAC[ADD_CLAUSES; MULT_CLAUSES; NOT_LE] THEN + W(MP_TAC o PART_MATCH lhand + BIGNUM_OF_WORDLIST_BOUND_LENGTH o lhand o snd) THEN + REWRITE_TAC[LENGTH] THEN ARITH_TAC; + AP_TERM_TAC THEN EXPAND_TAC "t" THEN + REWRITE_TAC[p_384; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + CONV_TAC NUM_REDUCE_CONV THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + REWRITE_TAC[VAL_WORD_BITVAL] THEN CONV_TAC REAL_RING]; + REWRITE_TAC[GSYM NOT_LT; COND_SWAP]] THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[] THEN EXPAND_TAC "t" THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist; p_384] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + ASM_REWRITE_TAC[BITVAL_CLAUSES; VAL_WORD_BITVAL] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instances of montmul. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_MONTMUL_P384_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE p384_montjadd_mc) 263 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1 p2 n2. + !a. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) t = a + ==> + !b. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 6)) t = b + ==> + nonoverlapping (word pc,0x53ac) (word_add (read p3 t) (word n3),48) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST p384_montjadd_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read RCX s = read RCX t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) s = + a /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 6)) s = + b) + (\s. read RIP s = pcout /\ + (a * b <= 2 EXP 384 * p_384 + ==> read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 6)) s = + (inverse_mod p_384 (2 EXP 384) * a * b) MOD p_384)) + (MAYCHANGE [RIP; RAX; RBP; RBX; RCX; RDX; + R8; R9; R10; R11; R12; R13; R14; R15] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 6)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + (*** Globalize the a * b <= 2 EXP 384 * p_384 assumption ***) + + ASM_CASES_TAC `a * b <= 2 EXP 384 * p_384` THENL + [ASM_REWRITE_TAC[]; X86_SIM_TAC P384_MONTJADD_EXEC (1--263)] THEN + ENSURES_INIT_TAC "s1" THEN + + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "y_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "x_" o lhand o concl) THEN + + (*** Simulate the main 6-fold multiply-and-Montgomery-reduce block ***) + + MAP_EVERY (fun s -> + X86_SINGLE_STEP_TAC P384_MONTJADD_EXEC s THEN + RULE_ASSUM_TAC(REWRITE_RULE[swlemma]) THEN + TRY(ACCUMULATE_ARITH_TAC s) THEN CLARIFY_TAC) + (statenames "s" (2--239)) THEN + + (*** Do the congruential reasoning on the chosen multipliers ***) + + RULE_ASSUM_TAC(fun th -> try MATCH_MP mmlemma th with Failure _ -> th) THEN + + (*** Derive the main property of the pre-reduced form, which we call t ***) + + ABBREV_TAC + `t = bignum_of_wordlist + [sum_s232; sum_s233; sum_s234; sum_s235; sum_s236; sum_s238; + sum_s239]` THEN + SUBGOAL_THEN + `t < 2 * p_384 /\ (2 EXP 384 * t == a * b) (mod p_384)` + STRIP_ASSUME_TAC THENL + [RULE_ASSUM_TAC(REWRITE_RULE[VAL_WORD_BITVAL]) THEN + ACCUMULATOR_POP_ASSUM_LIST + (STRIP_ASSUME_TAC o end_itlist CONJ o DECARRY_RULE) THEN + CONJ_TAC THENL + [FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP (ARITH_RULE + `ab <= 2 EXP 384 * p + ==> 2 EXP 384 * t < ab + 2 EXP 384 * p ==> t < 2 * p`)) THEN + MAP_EVERY EXPAND_TAC ["a"; "b"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + REWRITE_TAC[p_384; REAL_ARITH `a:real < b + c <=> a - b < c`] THEN + ASM_REWRITE_TAC[] THEN BOUNDER_TAC[]; + REWRITE_TAC[REAL_CONGRUENCE; p_384] THEN CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["a"; "b"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ASM_REWRITE_TAC[] THEN REAL_INTEGER_TAC]; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** To make bounds reasoning more transparent, recast top as a bit ***) + + MP_TAC(fst(EQ_IMP_RULE(SPEC `val(sum_s239:int64)` NUM_AS_BITVAL_ALT))) THEN + REWRITE_TAC[VAL_EQ_BITVAL] THEN ANTS_TAC THENL + [UNDISCH_TAC `t < 2 * p_384` THEN EXPAND_TAC "t" THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; p_384; bignum_of_wordlist] THEN + REAL_ARITH_TAC; + DISCH_THEN(X_CHOOSE_THEN `topc:bool` SUBST_ALL_TAC)] THEN + + (*** Final correction stage ***) + + X86_ACCSTEPS_TAC P384_MONTJADD_EXEC + [244;246;248;249;250;251] (240--264) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + TRANS_TAC EQ_TRANS `t MOD p_384` THEN CONJ_TAC THENL + [ALL_TAC; + REWRITE_TAC[GSYM CONG] THEN FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP + (NUMBER_RULE + `(e * t == a * b) (mod p) + ==> (e * i == 1) (mod p) ==> (t == i * a * b) (mod p)`)) THEN + REWRITE_TAC[INVERSE_MOD_RMUL_EQ; COPRIME_REXP; COPRIME_2] THEN + REWRITE_TAC[p_384] THEN CONV_TAC NUM_REDUCE_CONV] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC EQUAL_FROM_CONGRUENT_MOD_MOD THEN + MAP_EVERY EXISTS_TAC + [`384`; `if t < p_384 then &t:real else &t - &p_384`] THEN + REPEAT CONJ_TAC THENL + [REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN BOUNDER_TAC[]; + REWRITE_TAC[p_384] THEN ARITH_TAC; + REWRITE_TAC[p_384] THEN ARITH_TAC; + ALL_TAC; + ASM_SIMP_TAC[MOD_CASES] THEN + GEN_REWRITE_TAC LAND_CONV [COND_RAND] THEN + SIMP_TAC[REAL_OF_NUM_SUB; GSYM NOT_LT]] THEN + SUBGOAL_THEN + `~(val(word_add (word(bitval topc)) + (word(bitval carry_s251)):int64) = 0) <=> + p_384 <= t` + SUBST_ALL_TAC THENL + [REWRITE_TAC[VAL_WORD_ADD_CASES; VAL_WORD_BITVAL; DIMINDEX_64] THEN + SIMP_TAC[BITVAL_BOUND; ARITH_RULE + `b <= 1 /\ c <= 1 ==> b + c < 2 EXP 64`] THEN + TRANS_TAC EQ_TRANS `2 EXP 384 <= t + (2 EXP 384 - p_384)` THEN + CONJ_TAC THENL [ALL_TAC; REWRITE_TAC[p_384] THEN ARITH_TAC] THEN + TRANS_TAC EQ_TRANS + `2 EXP 384 + <= 2 EXP 384 * (bitval topc + bitval carry_s251) + + bignum_of_wordlist + [sum_s244;sum_s246;sum_s248;sum_s249;sum_s250;sum_s251]` THEN + CONJ_TAC THENL + [REWRITE_TAC[TAUT `(~p <=> q) <=> (~p ==> q) /\ (p ==> ~q)`] THEN + CONJ_TAC THENL [ARITH_TAC; DISCH_THEN SUBST1_TAC] THEN + REWRITE_TAC[ADD_CLAUSES; MULT_CLAUSES; NOT_LE] THEN + W(MP_TAC o PART_MATCH lhand + BIGNUM_OF_WORDLIST_BOUND_LENGTH o lhand o snd) THEN + REWRITE_TAC[LENGTH] THEN ARITH_TAC; + AP_TERM_TAC THEN EXPAND_TAC "t" THEN + REWRITE_TAC[p_384; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + CONV_TAC NUM_REDUCE_CONV THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + REWRITE_TAC[VAL_WORD_BITVAL] THEN CONV_TAC REAL_RING]; + REWRITE_TAC[GSYM NOT_LT; COND_SWAP]] THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[] THEN EXPAND_TAC "t" THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist; p_384] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + ASM_REWRITE_TAC[BITVAL_CLAUSES; VAL_WORD_BITVAL] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instances of sub. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_SUB_P384_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE p384_montjadd_mc) 32 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 6)) t = n + ==> + nonoverlapping (word pc,0x53ac) (word_add (read p3 t) (word n3),48) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST p384_montjadd_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read RCX s = read RCX t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 6)) s = + n) + (\s. read RIP s = pcout /\ + (m < p_384 /\ n < p_384 + ==> &(read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 6)) s) = (&m - &n) rem &p_384)) + (MAYCHANGE [RIP; RSI; RAX; RCX; RDX; R8; R9; R10; R11] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 6)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "m_" o lhand o concl) THEN + + X86_ACCSTEPS_TAC P384_MONTJADD_EXEC (1--12) (1--12) THEN + + SUBGOAL_THEN `carry_s12 <=> m < n` SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN EXISTS_TAC `384` THEN + MAP_EVERY EXPAND_TAC ["m"; "n"] THEN REWRITE_TAC[GSYM REAL_OF_NUM_ADD] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_MUL; GSYM REAL_OF_NUM_POW] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ALL_TAC] THEN + + X86_ACCSTEPS_TAC P384_MONTJADD_EXEC [18;20;25;27;29;31] (13--32) THEN + + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN STRIP_TAC THEN + CONV_TAC(LAND_CONV(RAND_CONV BIGNUM_EXPAND_CONV)) THEN + ASM_REWRITE_TAC[] THEN DISCARD_STATE_TAC "s32" THEN + + CONV_TAC SYM_CONV THEN MATCH_MP_TAC INT_REM_UNIQ THEN + + EXISTS_TAC `--(&(bitval(m < n))):int` THEN REWRITE_TAC[INT_ABS_NUM] THEN + REWRITE_TAC[INT_ARITH `m - n:int = --b * p + z <=> z = b * p + m - n`] THEN + REWRITE_TAC[int_eq; int_le; int_lt] THEN + REWRITE_TAC[int_add_th; int_mul_th; int_of_num_th; int_sub_th] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_ADD; GSYM REAL_OF_NUM_MUL; + GSYM REAL_OF_NUM_POW] THEN + MATCH_MP_TAC(REAL_ARITH + `!t:real. p < t /\ + (&0 <= a /\ a < p) /\ + (&0 <= z /\ z < t) /\ + ((&0 <= z /\ z < t) /\ (&0 <= a /\ a < t) ==> z = a) + ==> z = a /\ &0 <= z /\ z < p`) THEN + EXISTS_TAC `(&2:real) pow 384` THEN + + CONJ_TAC THENL [REWRITE_TAC[p_384] THEN REAL_ARITH_TAC; ALL_TAC] THEN + CONJ_TAC THENL + [MAP_EVERY UNDISCH_TAC [`m < p_384`; `n < p_384`] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_LT] THEN + ASM_CASES_TAC `&m:real < &n` THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + POP_ASSUM MP_TAC THEN REWRITE_TAC[p_384] THEN REAL_ARITH_TAC; + ALL_TAC] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; STRIP_TAC] THEN + + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`384`; `&0:real`] THEN + ASM_REWRITE_TAC[] THEN + CONJ_TAC THENL [REAL_INTEGER_TAC; ALL_TAC] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + REWRITE_TAC[WORD_AND_MASK] THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC WORD_REDUCE_CONV THEN + REWRITE_TAC[WORD_BITVAL_EQ_0; WORD_NEG_EQ_0] THEN + MAP_EVERY EXPAND_TAC ["m"; "n"] THEN REWRITE_TAC[GSYM REAL_OF_NUM_ADD] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_MUL; GSYM REAL_OF_NUM_POW; p_384] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instances of amontsqr. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_AMONTSQR_P384_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE p384_montjadd_mc) 222 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1. + !a. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) t = a + ==> + nonoverlapping (word pc,0x53ac) (word_add (read p3 t) (word n3),48) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST p384_montjadd_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) s = + a) + (\s. read RIP s = pcout /\ + read(memory :> bytes(word_add (read p3 t) (word n3),8 * 6)) s + < 2 EXP 384 /\ + (read(memory :> bytes(word_add (read p3 t) (word n3),8 * 6)) s == + inverse_mod p_384 (2 EXP 384) * a EXP 2) (mod p_384)) + (MAYCHANGE [RIP; RSI; RAX; RBX; RBP; RCX; RDX; + R8; R9; R10; R11; R12; R13; R14; R15] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 6)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "x_" o lhand o concl) THEN + + (*** Simulate the main squaring and 6-fold Montgomery reduction ***) + + MAP_EVERY (fun s -> + X86_SINGLE_STEP_TAC P384_MONTJADD_EXEC s THEN + RULE_ASSUM_TAC(REWRITE_RULE[swlemma]) THEN + TRY(ACCUMULATE_ARITH_TAC s) THEN CLARIFY_TAC) + (statenames "s" (1--203)) THEN + + (*** Do the congruential reasoning on the chosen multipliers ***) + + RULE_ASSUM_TAC(fun th -> try MATCH_MP mmlemma th with Failure _ -> th) THEN + + (*** Derive the main property of the pre-reduced form, which we call t ***) + + ABBREV_TAC + `t = bignum_of_wordlist + [sum_s198; sum_s199; sum_s200; sum_s201; sum_s202; sum_s203; + word (bitval carry_s203)]` THEN + SUBGOAL_THEN + `t < 2 EXP 384 + p_384 /\ (2 EXP 384 * t == a EXP 2) (mod p_384)` + STRIP_ASSUME_TAC THENL + [RULE_ASSUM_TAC(REWRITE_RULE[VAL_WORD_BITVAL]) THEN + ACCUMULATOR_POP_ASSUM_LIST + (STRIP_ASSUME_TAC o end_itlist CONJ o DECARRY_RULE) THEN + CONJ_TAC THENL + [MATCH_MP_TAC(ARITH_RULE + `2 EXP 384 * t <= (2 EXP 384 - 1) EXP 2 + (2 EXP 384 - 1) * p + ==> t < 2 EXP 384 + p`) THEN + REWRITE_TAC[p_384] THEN CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["a"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + REWRITE_TAC[p_384; REAL_ARITH `a:real < b + c <=> a - b < c`] THEN + ASM_REWRITE_TAC[VAL_WORD_BITVAL] THEN BOUNDER_TAC[]; + REWRITE_TAC[REAL_CONGRUENCE; p_384] THEN CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["a"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ASM_REWRITE_TAC[VAL_WORD_BITVAL] THEN REAL_INTEGER_TAC]; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Final correction stage ***) + + X86_ACCSTEPS_TAC P384_MONTJADD_EXEC (211--216) (204--222) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONJ_TAC THENL + [CONV_TAC(ONCE_DEPTH_CONV BIGNUM_EXPAND_CONV) THEN + ASM_REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN BOUNDER_TAC[]; + ALL_TAC] THEN + + FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP + (NUMBER_RULE + `(e * t == ab) (mod p) + ==> (e * i == 1) (mod p) /\ (s == t) (mod p) + ==> (s == i * ab) (mod p)`)) THEN + REWRITE_TAC[INVERSE_MOD_RMUL_EQ; COPRIME_REXP; COPRIME_2] THEN + CONJ_TAC THENL + [REWRITE_TAC[p_384] THEN CONV_TAC NUM_REDUCE_CONV; ALL_TAC] THEN + SUBGOAL_THEN `carry_s203 <=> 2 EXP 384 <= t` SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LE THEN EXISTS_TAC `384` THEN + EXPAND_TAC "t" THEN + REWRITE_TAC[p_384; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + REWRITE_TAC[VAL_WORD_BITVAL] THEN BOUNDER_TAC[]; + ABBREV_TAC `b <=> 2 EXP 384 <= t`] THEN + MATCH_MP_TAC(NUMBER_RULE `!b:num. x + b * p = y ==> (x == y) (mod p)`) THEN + EXISTS_TAC `bitval b` THEN REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN + ONCE_REWRITE_TAC[REAL_ARITH `a + b:real = c <=> c - b = a`] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`384`; `&0:real`] THEN CONJ_TAC THENL + [EXPAND_TAC "b" THEN UNDISCH_TAC `t < 2 EXP 384 + p_384` THEN + REWRITE_TAC[bitval; p_384; GSYM REAL_OF_NUM_CLAUSES] THEN REAL_ARITH_TAC; + REWRITE_TAC[INTEGER_CLOSED]] THEN + CONJ_TAC THENL + [CONV_TAC(ONCE_DEPTH_CONV BIGNUM_EXPAND_CONV) THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN BOUNDER_TAC[]; + ALL_TAC] THEN + CONV_TAC(ONCE_DEPTH_CONV BIGNUM_EXPAND_CONV) THEN + EXPAND_TAC "t" THEN REWRITE_TAC[bignum_of_wordlist] THEN + ASM_REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN + ACCUMULATOR_POP_ASSUM_LIST (MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + BOOL_CASES_TAC `b:bool` THEN REWRITE_TAC[BITVAL_CLAUSES; p_384] THEN + CONV_TAC WORD_REDUCE_CONV THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Overall point operation proof. *) +(* ------------------------------------------------------------------------- *) + +let P384_MONTJADD_CORRECT = time prove + (`!p3 p1 t1 p2 t2 pc stackpointer. + ALLPAIRS nonoverlapping + [(p3,144); (stackpointer,360)] + [(word pc,0x53ac); (p1,144); (p2,144)] /\ + nonoverlapping (p3,144) (stackpointer,360) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST p384_montjadd_mc) /\ + read RIP s = word(pc + 0x11) /\ + read RSP s = stackpointer /\ + C_ARGUMENTS [p3; p1; p2] s /\ + bignum_triple_from_memory (p1,6) s = t1 /\ + bignum_triple_from_memory (p2,6) s = t2) + (\s. read RIP s = word (pc + 0x539a) /\ + (!x1 y1 z1 x2 y2 z2. + ~(z1 = &0) /\ ~(z2 = &0) /\ + ~(jacobian_eq (integer_mod_ring p_384) + (x1,y1,z1) (x2,y2,z2)) /\ + ~(jacobian_eq (integer_mod_ring p_384) + (jacobian_neg nistp384 (x1,y1,z1)) + (x2,y2,z2)) /\ + t1 = tripled nistp384_encode (x1,y1,z1) /\ + t2 = tripled nistp384_encode (x2,y2,z2) + ==> bignum_triple_from_memory(p3,6) s = + tripled nistp384_encode + (jacobian_add nistp384 (x1,y1,z1) (x2,y2,z2)))) + (MAYCHANGE [RIP; RDI; RSI; RAX; RDX; RCX; R8; R9; R10; R11; + RBX; RBP; R12; R13; R14; R15] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,144); + memory :> bytes(stackpointer,360)])`, + REWRITE_TAC[FORALL_PAIR_THM] THEN + MAP_EVERY X_GEN_TAC + [`p3:int64`; `p1:int64`; `x1:num`; `y1:num`; `z1:num`; `p2:int64`; + `x2:num`; `y2:num`; `z2:num`; `pc:num`; `stackpointer:int64`] THEN + REWRITE_TAC[ALLPAIRS; ALL; NONOVERLAPPING_CLAUSES] THEN STRIP_TAC THEN + REWRITE_TAC[C_ARGUMENTS; SOME_FLAGS; PAIR_EQ; bignum_triple_from_memory] THEN + CONV_TAC(ONCE_DEPTH_CONV NUM_MULT_CONV) THEN + CONV_TAC(ONCE_DEPTH_CONV NORMALIZE_RELATIVE_ADDRESS_CONV) THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + + LOCAL_AMONTSQR_P384_TAC 3 ["z1sq";"z_1"] THEN + LOCAL_AMONTSQR_P384_TAC 1 ["z2sq";"z_2_alt"] THEN + LOCAL_MONTMUL_P384_TAC 2 ["y1a";"z_2";"y_1"] THEN + LOCAL_MONTMUL_P384_TAC 2 ["y2a";"z_1";"y_2"] THEN + LOCAL_MONTMUL_P384_TAC 1 ["x2a";"z1sq";"x_2"] THEN + LOCAL_MONTMUL_P384_TAC 1 ["x1a";"z2sq";"x_1"] THEN + LOCAL_MONTMUL_P384_TAC 0 ["y2a";"z1sq";"y2a"] THEN + LOCAL_MONTMUL_P384_TAC 0 ["y1a";"z2sq";"y1a"] THEN + LOCAL_SUB_P384_TAC 0 ["xd";"x2a";"x1a"] THEN + LOCAL_SUB_P384_TAC 0 ["yd";"y2a";"y1a"] THEN + LOCAL_AMONTSQR_P384_TAC 0 ["zz";"xd"] THEN + LOCAL_MONTSQR_P384_TAC 0 ["ww";"yd"] THEN + LOCAL_MONTMUL_P384_TAC 0 ["zzx1";"zz";"x1a"] THEN + LOCAL_MONTMUL_P384_TAC 0 ["zzx2";"zz";"x2a"] THEN + LOCAL_SUB_P384_TAC 1 ["x_3";"ww";"zzx1"] THEN + LOCAL_SUB_P384_TAC 0 ["t1";"zzx2";"zzx1"] THEN + LOCAL_MONTMUL_P384_TAC 1 ["xd";"xd";"z_1"] THEN + LOCAL_SUB_P384_TAC 1 ["x_3";"x_3";"zzx2"] THEN + LOCAL_SUB_P384_TAC 1 ["t2";"zzx1";"x_3"] THEN + LOCAL_MONTMUL_P384_TAC 0 ["t1";"t1";"y1a"] THEN + LOCAL_MONTMUL_P384_TAC 2 ["z_3";"xd";"z_2"] THEN + LOCAL_MONTMUL_P384_TAC 0 ["t2";"yd";"t2"] THEN + LOCAL_SUB_P384_TAC 1 ["y_3";"t2";"t1"] THEN + + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + DISCARD_STATE_TAC "s40" THEN + DISCARD_MATCHING_ASSUMPTIONS [`nonoverlapping_modulo a b c`] THEN + + MAP_EVERY X_GEN_TAC + [`x1':int`; `y1':int`; `z1':int`; `x2':int`; `y2':int`; `z2':int`] THEN + REPLICATE_TAC 4 (DISCH_THEN(CONJUNCTS_THEN2 ASSUME_TAC MP_TAC)) THEN + REWRITE_TAC[tripled; nistp384_encode; montgomery_encode; PAIR_EQ] THEN + + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN + (STRIP_ASSUME_TAC o MATCH_MP unilemma2)) THEN + + REPEAT(FIRST_X_ASSUM(MP_TAC o check (is_imp o concl))) THEN + REPEAT(ANTS_TAC THENL + [REWRITE_TAC[p_384] THEN RULE_ASSUM_TAC(REWRITE_RULE[p_384]) THEN + CONV_TAC NUM_REDUCE_CONV THEN ASM BOUNDER_TAC[]; + (DISCH_THEN(STRIP_ASSUME_TAC o MATCH_MP unilemma0) ORELSE + DISCH_THEN(STRIP_ASSUME_TAC o MATCH_MP unilemma1))]) THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o GEN_REWRITE_RULE I [GSYM NOT_LE])) THEN + + RULE_ASSUM_TAC(REWRITE_RULE + [num_congruent; GSYM INT_OF_NUM_CLAUSES; GSYM INT_OF_NUM_REM]) THEN + RULE_ASSUM_TAC(REWRITE_RULE[GSYM INT_REM_EQ]) THEN + RULE_ASSUM_TAC(ONCE_REWRITE_RULE[GSYM INT_SUB_REM; GSYM INT_ADD_REM]) THEN + RULE_ASSUM_TAC(REWRITE_RULE[INT_POW_2]) THEN + RULE_ASSUM_TAC(GEN_REWRITE_RULE (RAND_CONV o TRY_CONV) [lemont]) THEN + + ASM_REWRITE_TAC[jacobian_add; nistp384] THEN + ASM_REWRITE_TAC[GSYM nistp384] THEN + REWRITE_TAC[INTEGER_MOD_RING_CLAUSES] THEN + CONV_TAC INT_REDUCE_CONV THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN + CONV_TAC INT_REM_DOWN_CONV THEN + REWRITE_TAC[tripled; nistp384_encode; montgomery_encode] THEN + REWRITE_TAC[PAIR_EQ; GSYM INT_OF_NUM_EQ; nintlemma] THEN + CONV_TAC INT_REM_DOWN_CONV THEN + + ASM_REWRITE_TAC[pumont; INT_REM_REM; GSYM INT_ADD_LDISTRIB; + GSYM INT_ADD_LDISTRIB; GSYM INT_SUB_LDISTRIB; + INT_SUB_REM; INT_ADD_REM] THEN + + REPEAT CONJ_TAC THEN AP_THM_TAC THEN AP_TERM_TAC THEN AP_TERM_TAC THEN + INT_ARITH_TAC);; + +let P384_MONTJADD_SUBROUTINE_CORRECT = time prove + (`!p3 p1 t1 p2 t2 pc stackpointer returnaddress. + ALLPAIRS nonoverlapping + [(p3,144); (word_sub stackpointer (word 408),408)] + [(word pc,0x53ac); (p1,144); (p2,144)] /\ + nonoverlapping (p3,144) (word_sub stackpointer (word 408),416) + ==> ensures x86 + (\s. bytes_loaded s (word pc) p384_montjadd_mc /\ + read RIP s = word pc /\ + read RSP s = stackpointer /\ + read (memory :> bytes64 stackpointer) s = returnaddress /\ + C_ARGUMENTS [p3; p1; p2] s /\ + bignum_triple_from_memory (p1,6) s = t1 /\ + bignum_triple_from_memory (p2,6) s = t2) + (\s. read RIP s = returnaddress /\ + read RSP s = word_add stackpointer (word 8) /\ + (!x1 y1 z1 x2 y2 z2. + ~(z1 = &0) /\ ~(z2 = &0) /\ + ~(jacobian_eq (integer_mod_ring p_384) + (x1,y1,z1) (x2,y2,z2)) /\ + ~(jacobian_eq (integer_mod_ring p_384) + (jacobian_neg nistp384 (x1,y1,z1)) + (x2,y2,z2)) /\ + t1 = tripled nistp384_encode (x1,y1,z1) /\ + t2 = tripled nistp384_encode (x2,y2,z2) + ==> bignum_triple_from_memory(p3,6) s = + tripled nistp384_encode + (jacobian_add nistp384 (x1,y1,z1) (x2,y2,z2)))) + (MAYCHANGE [RIP; RSP; RDI; RSI; RAX; RDX; RCX; R8; R9; R10; R11] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,144); + memory :> bytes(word_sub stackpointer (word 408),408)])`, + X86_PROMOTE_RETURN_STACK_TAC p384_montjadd_mc P384_MONTJADD_CORRECT + `[RBX; RBP; R12; R13; R14; R15]` 408);; + +(* ------------------------------------------------------------------------- *) +(* Correctness of Windows ABI version. *) +(* ------------------------------------------------------------------------- *) + +let windows_p384_montjadd_mc = define_from_elf "windows_p384_montjadd_mc" + "x86/p384/p384_montjadd.obj";; + +let WINDOWS_P384_MONTJADD_SUBROUTINE_CORRECT = time prove + (`!p3 p1 t1 p2 t2 pc stackpointer returnaddress. + ALLPAIRS nonoverlapping + [(p3,144); (word_sub stackpointer (word 424),424)] + [(word pc,0x53b9); (p1,144); (p2,144)] /\ + nonoverlapping (p3,144) (word_sub stackpointer (word 424),432) + ==> ensures x86 + (\s. bytes_loaded s (word pc) windows_p384_montjadd_mc /\ + read RIP s = word pc /\ + read RSP s = stackpointer /\ + read (memory :> bytes64 stackpointer) s = returnaddress /\ + WINDOWS_C_ARGUMENTS [p3; p1; p2] s /\ + bignum_triple_from_memory (p1,6) s = t1 /\ + bignum_triple_from_memory (p2,6) s = t2) + (\s. read RIP s = returnaddress /\ + read RSP s = word_add stackpointer (word 8) /\ + (!x1 y1 z1 x2 y2 z2. + ~(z1 = &0) /\ ~(z2 = &0) /\ + ~(jacobian_eq (integer_mod_ring p_384) + (x1,y1,z1) (x2,y2,z2)) /\ + ~(jacobian_eq (integer_mod_ring p_384) + (jacobian_neg nistp384 (x1,y1,z1)) + (x2,y2,z2)) /\ + t1 = tripled nistp384_encode (x1,y1,z1) /\ + t2 = tripled nistp384_encode (x2,y2,z2) + ==> bignum_triple_from_memory(p3,6) s = + tripled nistp384_encode + (jacobian_add nistp384 (x1,y1,z1) (x2,y2,z2)))) + (MAYCHANGE [RIP; RSP; RAX; RDX; RCX; R8; R9; R10; R11] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,144); + memory :> bytes(word_sub stackpointer (word 424),424)])`, + WINDOWS_X86_WRAP_STACK_TAC + windows_p384_montjadd_mc p384_montjadd_mc + P384_MONTJADD_CORRECT + `[RBX; RBP; R12; R13; R14; R15]` 408);; + + diff --git a/x86/proofs/p384_montjdouble.ml b/x86/proofs/p384_montjdouble.ml new file mode 100644 index 0000000000..eeb5ddb894 --- /dev/null +++ b/x86/proofs/p384_montjdouble.ml @@ -0,0 +1,4895 @@ +(* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + *) + +(* ========================================================================= *) +(* Point doubling in Montgomery-Jacobian coordinates for NIST P-384 curve. *) +(* ========================================================================= *) + +needs "x86/proofs/base.ml";; +needs "common/ecencoding.ml";; +needs "EC/jacobian.ml";; +needs "EC/nistp384.ml";; + +prioritize_int();; +prioritize_real();; +prioritize_num();; + +(**** print_literal_from_elf "x86/p384/p384_montjdouble.o";; + ****) + +let p384_montjdouble_mc = define_assert_from_elf + "p384_montjdouble_mc" "x86/p384/p384_montjdouble.o" +[ + 0x53; (* PUSH (% rbx) *) + 0x55; (* PUSH (% rbp) *) + 0x41; 0x54; (* PUSH (% r12) *) + 0x41; 0x55; (* PUSH (% r13) *) + 0x41; 0x56; (* PUSH (% r14) *) + 0x41; 0x57; (* PUSH (% r15) *) + 0x48; 0x81; 0xec; 0x58; 0x01; 0x00; 0x00; + (* SUB (% rsp) (Imm32 (word 344)) *) + 0x48; 0x89; 0xbc; 0x24; 0x50; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,336))) (% rdi) *) + 0x48; 0x8b; 0x56; 0x60; (* MOV (% rdx) (Memop Quadword (%% (rsi,96))) *) + 0xc4; 0x62; 0xb3; 0xf6; 0x56; 0x68; + (* MULX4 (% r10,% r9) (% rdx,Memop Quadword (%% (rsi,104))) *) + 0xc4; 0x62; 0xa3; 0xf6; 0x66; 0x78; + (* MULX4 (% r12,% r11) (% rdx,Memop Quadword (%% (rsi,120))) *) + 0xc4; 0x62; 0x93; 0xf6; 0xb6; 0x88; 0x00; 0x00; 0x00; + (* MULX4 (% r14,% r13) (% rdx,Memop Quadword (%% (rsi,136))) *) + 0x48; 0x8b; 0x56; 0x78; (* MOV (% rdx) (Memop Quadword (%% (rsi,120))) *) + 0xc4; 0xe2; 0x83; 0xf6; 0x8e; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rcx,% r15) (% rdx,Memop Quadword (%% (rsi,128))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x56; 0x70; (* MOV (% rdx) (Memop Quadword (%% (rsi,112))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x48; 0x8b; 0x56; 0x68; (* MOV (% rdx) (Memop Quadword (%% (rsi,104))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x88; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,136))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADCX (% r15) (% rbp) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xcd; + (* ADOX (% rcx) (% rbp) *) + 0x48; 0x11; 0xe9; (* ADC (% rcx) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x96; 0x80; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,128))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0x8b; 0x56; 0x70; (* MOV (% rdx) (Memop Quadword (%% (rsi,112))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x96; 0x88; 0x00; 0x00; 0x00; + (* MULX4 (% rdx,% rax) (% rdx,Memop Quadword (%% (rsi,136))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xca; + (* ADOX (% rcx) (% rdx) *) + 0x48; 0x8b; 0x96; 0x88; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,136))) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xae; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rbp,% rbx) (% rdx,Memop Quadword (%% (rsi,128))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x56; 0x78; + (* MULX4 (% rdx,% rax) (% rdx,Memop Quadword (%% (rsi,120))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% rcx) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% rbx) (% rdx) *) + 0xb8; 0x00; 0x00; 0x00; 0x00; + (* MOV (% eax) (Imm32 (word 0)) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% rbx) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xe8; + (* ADOX (% rbp) (% rax) *) + 0x48; 0x11; 0xc5; (* ADC (% rbp) (% rax) *) + 0x48; 0x31; 0xc0; (* XOR (% rax) (% rax) *) + 0x48; 0x8b; 0x56; 0x60; (* MOV (% rdx) (Memop Quadword (%% (rsi,96))) *) + 0xc4; 0xe2; 0xbb; 0xf6; 0x46; 0x60; + (* MULX4 (% rax,% r8) (% rdx,Memop Quadword (%% (rsi,96))) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% r9) (% r9) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADOX (% r9) (% rax) *) + 0x48; 0x8b; 0x56; 0x68; (* MOV (% rdx) (Memop Quadword (%% (rsi,104))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xd2; + (* ADCX (% r10) (% r10) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADOX (% r10) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% r11) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% r11) (% rdx) *) + 0x48; 0x8b; 0x56; 0x70; (* MOV (% rdx) (Memop Quadword (%% (rsi,112))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xe4; + (* ADCX (% r12) (% r12) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADOX (% r12) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% r13) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xea; + (* ADOX (% r13) (% rdx) *) + 0x48; 0x8b; 0x56; 0x78; (* MOV (% rdx) (Memop Quadword (%% (rsi,120))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf6; + (* ADCX (% r14) (% r14) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xff; + (* ADCX (% r15) (% r15) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfa; + (* ADOX (% r15) (% rdx) *) + 0x48; 0x8b; 0x96; 0x80; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,128))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% rcx) (% rcx) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc8; + (* ADOX (% rcx) (% rax) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% rbx) (% rbx) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% rbx) (% rdx) *) + 0x48; 0x8b; 0x96; 0x88; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,136))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xfa; + (* MULX4 (% rdi,% rax) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% rbp) (% rbp) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xe8; + (* ADOX (% rbp) (% rax) *) + 0xb8; 0x00; 0x00; 0x00; 0x00; + (* MOV (% eax) (Imm32 (word 0)) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% rdi) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xf8; + (* ADOX (% rdi) (% rax) *) + 0x48; 0x89; 0x1c; 0x24; (* MOV (Memop Quadword (%% (rsp,0))) (% rbx) *) + 0x4c; 0x89; 0xc2; (* MOV (% rdx) (% r8) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xc2; (* ADD (% rdx) (% r8) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xbb; 0xf6; 0xc0; + (* MULX4 (% rax,% r8) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xc3; + (* MULX4 (% r8,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd0; (* ADC (% r8) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc1; (* SUB (% r9) (% rax) *) + 0x4d; 0x19; 0xc2; (* SBB (% r10) (% r8) *) + 0x49; 0x19; 0xdb; (* SBB (% r11) (% rbx) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd0; (* MOV (% r8) (% rdx) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xca; (* MOV (% rdx) (% r9) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xca; (* ADD (% rdx) (% r9) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xb3; 0xf6; 0xc0; + (* MULX4 (% rax,% r9) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xcb; + (* MULX4 (% r9,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd1; (* ADC (% r9) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc2; (* SUB (% r10) (% rax) *) + 0x4d; 0x19; 0xcb; (* SBB (% r11) (% r9) *) + 0x49; 0x19; 0xdc; (* SBB (% r12) (% rbx) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd1; (* MOV (% r9) (% rdx) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xd2; (* MOV (% rdx) (% r10) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xd2; (* ADD (% rdx) (% r10) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xab; 0xf6; 0xc0; + (* MULX4 (% rax,% r10) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xd3; + (* MULX4 (% r10,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd2; (* ADC (% r10) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc3; (* SUB (% r11) (% rax) *) + 0x4d; 0x19; 0xd4; (* SBB (% r12) (% r10) *) + 0x49; 0x19; 0xdd; (* SBB (% r13) (% rbx) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd2; (* MOV (% r10) (% rdx) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xda; (* MOV (% rdx) (% r11) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xda; (* ADD (% rdx) (% r11) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xa3; 0xf6; 0xc0; + (* MULX4 (% rax,% r11) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xdb; + (* MULX4 (% r11,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd3; (* ADC (% r11) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc4; (* SUB (% r12) (% rax) *) + 0x4d; 0x19; 0xdd; (* SBB (% r13) (% r11) *) + 0x49; 0x19; 0xd8; (* SBB (% r8) (% rbx) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd3; (* MOV (% r11) (% rdx) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xe2; (* MOV (% rdx) (% r12) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xe2; (* ADD (% rdx) (% r12) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0x9b; 0xf6; 0xc0; + (* MULX4 (% rax,% r12) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xe3; + (* MULX4 (% r12,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd4; (* ADC (% r12) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc5; (* SUB (% r13) (% rax) *) + 0x4d; 0x19; 0xe0; (* SBB (% r8) (% r12) *) + 0x49; 0x19; 0xd9; (* SBB (% r9) (% rbx) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd4; (* MOV (% r12) (% rdx) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xea; (* MOV (% rdx) (% r13) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xea; (* ADD (% rdx) (% r13) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0x93; 0xf6; 0xc0; + (* MULX4 (% rax,% r13) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xeb; + (* MULX4 (% r13,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd5; (* ADC (% r13) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc0; (* SUB (% r8) (% rax) *) + 0x4d; 0x19; 0xe9; (* SBB (% r9) (% r13) *) + 0x49; 0x19; 0xda; (* SBB (% r10) (% rbx) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd5; (* MOV (% r13) (% rdx) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x1c; 0x24; (* MOV (% rbx) (Memop Quadword (%% (rsp,0))) *) + 0x4d; 0x01; 0xc6; (* ADD (% r14) (% r8) *) + 0x4d; 0x11; 0xcf; (* ADC (% r15) (% r9) *) + 0x4c; 0x11; 0xd1; (* ADC (% rcx) (% r10) *) + 0x4c; 0x11; 0xdb; (* ADC (% rbx) (% r11) *) + 0x4c; 0x11; 0xe5; (* ADC (% rbp) (% r12) *) + 0x4c; 0x11; 0xef; (* ADC (% rdi) (% r13) *) + 0x41; 0xb8; 0x00; 0x00; 0x00; 0x00; + (* MOV (% r8d) (Imm32 (word 0)) *) + 0x4d; 0x11; 0xc0; (* ADC (% r8) (% r8) *) + 0x4d; 0x31; 0xdb; (* XOR (% r11) (% r11) *) + 0x4d; 0x31; 0xe4; (* XOR (% r12) (% r12) *) + 0x4d; 0x31; 0xed; (* XOR (% r13) (% r13) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0x4c; 0x01; 0xf0; (* ADD (% rax) (% r14) *) + 0x41; 0xb9; 0xff; 0xff; 0xff; 0xff; + (* MOV (% r9d) (Imm32 (word 4294967295)) *) + 0x4d; 0x11; 0xf9; (* ADC (% r9) (% r15) *) + 0x41; 0xba; 0x01; 0x00; 0x00; 0x00; + (* MOV (% r10d) (Imm32 (word 1)) *) + 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x49; 0x11; 0xec; (* ADC (% r12) (% rbp) *) + 0x49; 0x11; 0xfd; (* ADC (% r13) (% rdi) *) + 0x49; 0x83; 0xd0; 0x00; (* ADC (% r8) (Imm8 (word 0)) *) + 0x4c; 0x0f; 0x45; 0xf0; (* CMOVNE (% r14) (% rax) *) + 0x4d; 0x0f; 0x45; 0xf9; (* CMOVNE (% r15) (% r9) *) + 0x49; 0x0f; 0x45; 0xca; (* CMOVNE (% rcx) (% r10) *) + 0x49; 0x0f; 0x45; 0xdb; (* CMOVNE (% rbx) (% r11) *) + 0x49; 0x0f; 0x45; 0xec; (* CMOVNE (% rbp) (% r12) *) + 0x49; 0x0f; 0x45; 0xfd; (* CMOVNE (% rdi) (% r13) *) + 0x4c; 0x89; 0x34; 0x24; (* MOV (Memop Quadword (%% (rsp,0))) (% r14) *) + 0x4c; 0x89; 0x7c; 0x24; 0x08; + (* MOV (Memop Quadword (%% (rsp,8))) (% r15) *) + 0x48; 0x89; 0x4c; 0x24; 0x10; + (* MOV (Memop Quadword (%% (rsp,16))) (% rcx) *) + 0x48; 0x89; 0x5c; 0x24; 0x18; + (* MOV (Memop Quadword (%% (rsp,24))) (% rbx) *) + 0x48; 0x89; 0x6c; 0x24; 0x20; + (* MOV (Memop Quadword (%% (rsp,32))) (% rbp) *) + 0x48; 0x89; 0x7c; 0x24; 0x28; + (* MOV (Memop Quadword (%% (rsp,40))) (% rdi) *) + 0x48; 0x8b; 0x56; 0x30; (* MOV (% rdx) (Memop Quadword (%% (rsi,48))) *) + 0xc4; 0x62; 0xb3; 0xf6; 0x56; 0x38; + (* MULX4 (% r10,% r9) (% rdx,Memop Quadword (%% (rsi,56))) *) + 0xc4; 0x62; 0xa3; 0xf6; 0x66; 0x48; + (* MULX4 (% r12,% r11) (% rdx,Memop Quadword (%% (rsi,72))) *) + 0xc4; 0x62; 0x93; 0xf6; 0x76; 0x58; + (* MULX4 (% r14,% r13) (% rdx,Memop Quadword (%% (rsi,88))) *) + 0x48; 0x8b; 0x56; 0x48; (* MOV (% rdx) (Memop Quadword (%% (rsi,72))) *) + 0xc4; 0xe2; 0x83; 0xf6; 0x4e; 0x50; + (* MULX4 (% rcx,% r15) (% rdx,Memop Quadword (%% (rsi,80))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x56; 0x40; (* MOV (% rdx) (Memop Quadword (%% (rsi,64))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x38; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x48; 0x8b; 0x56; 0x38; (* MOV (% rdx) (Memop Quadword (%% (rsi,56))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x58; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADCX (% r15) (% rbp) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xcd; + (* ADOX (% rcx) (% rbp) *) + 0x48; 0x11; 0xe9; (* ADC (% rcx) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x56; 0x50; (* MOV (% rdx) (Memop Quadword (%% (rsi,80))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0x8b; 0x56; 0x40; (* MOV (% rdx) (Memop Quadword (%% (rsi,64))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x56; 0x58; + (* MULX4 (% rdx,% rax) (% rdx,Memop Quadword (%% (rsi,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xca; + (* ADOX (% rcx) (% rdx) *) + 0x48; 0x8b; 0x56; 0x58; (* MOV (% rdx) (Memop Quadword (%% (rsi,88))) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0x6e; 0x50; + (* MULX4 (% rbp,% rbx) (% rdx,Memop Quadword (%% (rsi,80))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x56; 0x48; + (* MULX4 (% rdx,% rax) (% rdx,Memop Quadword (%% (rsi,72))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% rcx) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% rbx) (% rdx) *) + 0xb8; 0x00; 0x00; 0x00; 0x00; + (* MOV (% eax) (Imm32 (word 0)) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% rbx) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xe8; + (* ADOX (% rbp) (% rax) *) + 0x48; 0x11; 0xc5; (* ADC (% rbp) (% rax) *) + 0x48; 0x31; 0xc0; (* XOR (% rax) (% rax) *) + 0x48; 0x8b; 0x56; 0x30; (* MOV (% rdx) (Memop Quadword (%% (rsi,48))) *) + 0xc4; 0xe2; 0xbb; 0xf6; 0x46; 0x30; + (* MULX4 (% rax,% r8) (% rdx,Memop Quadword (%% (rsi,48))) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% r9) (% r9) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADOX (% r9) (% rax) *) + 0x48; 0x8b; 0x56; 0x38; (* MOV (% rdx) (Memop Quadword (%% (rsi,56))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xd2; + (* ADCX (% r10) (% r10) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADOX (% r10) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% r11) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% r11) (% rdx) *) + 0x48; 0x8b; 0x56; 0x40; (* MOV (% rdx) (Memop Quadword (%% (rsi,64))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xe4; + (* ADCX (% r12) (% r12) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADOX (% r12) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% r13) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xea; + (* ADOX (% r13) (% rdx) *) + 0x48; 0x8b; 0x56; 0x48; (* MOV (% rdx) (Memop Quadword (%% (rsi,72))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf6; + (* ADCX (% r14) (% r14) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xff; + (* ADCX (% r15) (% r15) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfa; + (* ADOX (% r15) (% rdx) *) + 0x48; 0x8b; 0x56; 0x50; (* MOV (% rdx) (Memop Quadword (%% (rsi,80))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% rcx) (% rcx) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc8; + (* ADOX (% rcx) (% rax) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% rbx) (% rbx) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% rbx) (% rdx) *) + 0x48; 0x8b; 0x56; 0x58; (* MOV (% rdx) (Memop Quadword (%% (rsi,88))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xfa; + (* MULX4 (% rdi,% rax) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% rbp) (% rbp) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xe8; + (* ADOX (% rbp) (% rax) *) + 0xb8; 0x00; 0x00; 0x00; 0x00; + (* MOV (% eax) (Imm32 (word 0)) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% rdi) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xf8; + (* ADOX (% rdi) (% rax) *) + 0x48; 0x89; 0x5c; 0x24; 0x30; + (* MOV (Memop Quadword (%% (rsp,48))) (% rbx) *) + 0x4c; 0x89; 0xc2; (* MOV (% rdx) (% r8) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xc2; (* ADD (% rdx) (% r8) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xbb; 0xf6; 0xc0; + (* MULX4 (% rax,% r8) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xc3; + (* MULX4 (% r8,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd0; (* ADC (% r8) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc1; (* SUB (% r9) (% rax) *) + 0x4d; 0x19; 0xc2; (* SBB (% r10) (% r8) *) + 0x49; 0x19; 0xdb; (* SBB (% r11) (% rbx) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd0; (* MOV (% r8) (% rdx) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xca; (* MOV (% rdx) (% r9) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xca; (* ADD (% rdx) (% r9) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xb3; 0xf6; 0xc0; + (* MULX4 (% rax,% r9) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xcb; + (* MULX4 (% r9,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd1; (* ADC (% r9) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc2; (* SUB (% r10) (% rax) *) + 0x4d; 0x19; 0xcb; (* SBB (% r11) (% r9) *) + 0x49; 0x19; 0xdc; (* SBB (% r12) (% rbx) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd1; (* MOV (% r9) (% rdx) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xd2; (* MOV (% rdx) (% r10) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xd2; (* ADD (% rdx) (% r10) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xab; 0xf6; 0xc0; + (* MULX4 (% rax,% r10) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xd3; + (* MULX4 (% r10,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd2; (* ADC (% r10) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc3; (* SUB (% r11) (% rax) *) + 0x4d; 0x19; 0xd4; (* SBB (% r12) (% r10) *) + 0x49; 0x19; 0xdd; (* SBB (% r13) (% rbx) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd2; (* MOV (% r10) (% rdx) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xda; (* MOV (% rdx) (% r11) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xda; (* ADD (% rdx) (% r11) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xa3; 0xf6; 0xc0; + (* MULX4 (% rax,% r11) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xdb; + (* MULX4 (% r11,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd3; (* ADC (% r11) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc4; (* SUB (% r12) (% rax) *) + 0x4d; 0x19; 0xdd; (* SBB (% r13) (% r11) *) + 0x49; 0x19; 0xd8; (* SBB (% r8) (% rbx) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd3; (* MOV (% r11) (% rdx) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xe2; (* MOV (% rdx) (% r12) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xe2; (* ADD (% rdx) (% r12) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0x9b; 0xf6; 0xc0; + (* MULX4 (% rax,% r12) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xe3; + (* MULX4 (% r12,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd4; (* ADC (% r12) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc5; (* SUB (% r13) (% rax) *) + 0x4d; 0x19; 0xe0; (* SBB (% r8) (% r12) *) + 0x49; 0x19; 0xd9; (* SBB (% r9) (% rbx) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd4; (* MOV (% r12) (% rdx) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xea; (* MOV (% rdx) (% r13) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xea; (* ADD (% rdx) (% r13) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0x93; 0xf6; 0xc0; + (* MULX4 (% rax,% r13) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xeb; + (* MULX4 (% r13,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd5; (* ADC (% r13) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc0; (* SUB (% r8) (% rax) *) + 0x4d; 0x19; 0xe9; (* SBB (% r9) (% r13) *) + 0x49; 0x19; 0xda; (* SBB (% r10) (% rbx) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd5; (* MOV (% r13) (% rdx) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x5c; 0x24; 0x30; + (* MOV (% rbx) (Memop Quadword (%% (rsp,48))) *) + 0x4d; 0x01; 0xc6; (* ADD (% r14) (% r8) *) + 0x4d; 0x11; 0xcf; (* ADC (% r15) (% r9) *) + 0x4c; 0x11; 0xd1; (* ADC (% rcx) (% r10) *) + 0x4c; 0x11; 0xdb; (* ADC (% rbx) (% r11) *) + 0x4c; 0x11; 0xe5; (* ADC (% rbp) (% r12) *) + 0x4c; 0x11; 0xef; (* ADC (% rdi) (% r13) *) + 0x41; 0xb8; 0x00; 0x00; 0x00; 0x00; + (* MOV (% r8d) (Imm32 (word 0)) *) + 0x4d; 0x11; 0xc0; (* ADC (% r8) (% r8) *) + 0x4d; 0x31; 0xdb; (* XOR (% r11) (% r11) *) + 0x4d; 0x31; 0xe4; (* XOR (% r12) (% r12) *) + 0x4d; 0x31; 0xed; (* XOR (% r13) (% r13) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0x4c; 0x01; 0xf0; (* ADD (% rax) (% r14) *) + 0x41; 0xb9; 0xff; 0xff; 0xff; 0xff; + (* MOV (% r9d) (Imm32 (word 4294967295)) *) + 0x4d; 0x11; 0xf9; (* ADC (% r9) (% r15) *) + 0x41; 0xba; 0x01; 0x00; 0x00; 0x00; + (* MOV (% r10d) (Imm32 (word 1)) *) + 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x49; 0x11; 0xec; (* ADC (% r12) (% rbp) *) + 0x49; 0x11; 0xfd; (* ADC (% r13) (% rdi) *) + 0x49; 0x83; 0xd0; 0x00; (* ADC (% r8) (Imm8 (word 0)) *) + 0x4c; 0x0f; 0x45; 0xf0; (* CMOVNE (% r14) (% rax) *) + 0x4d; 0x0f; 0x45; 0xf9; (* CMOVNE (% r15) (% r9) *) + 0x49; 0x0f; 0x45; 0xca; (* CMOVNE (% rcx) (% r10) *) + 0x49; 0x0f; 0x45; 0xdb; (* CMOVNE (% rbx) (% r11) *) + 0x49; 0x0f; 0x45; 0xec; (* CMOVNE (% rbp) (% r12) *) + 0x49; 0x0f; 0x45; 0xfd; (* CMOVNE (% rdi) (% r13) *) + 0x4c; 0x89; 0x74; 0x24; 0x30; + (* MOV (Memop Quadword (%% (rsp,48))) (% r14) *) + 0x4c; 0x89; 0x7c; 0x24; 0x38; + (* MOV (Memop Quadword (%% (rsp,56))) (% r15) *) + 0x48; 0x89; 0x4c; 0x24; 0x40; + (* MOV (Memop Quadword (%% (rsp,64))) (% rcx) *) + 0x48; 0x89; 0x5c; 0x24; 0x48; + (* MOV (Memop Quadword (%% (rsp,72))) (% rbx) *) + 0x48; 0x89; 0x6c; 0x24; 0x50; + (* MOV (Memop Quadword (%% (rsp,80))) (% rbp) *) + 0x48; 0x89; 0x7c; 0x24; 0x58; + (* MOV (Memop Quadword (%% (rsp,88))) (% rdi) *) + 0x48; 0x8b; 0x06; (* MOV (% rax) (Memop Quadword (%% (rsi,0))) *) + 0x48; 0x03; 0x04; 0x24; (* ADD (% rax) (Memop Quadword (%% (rsp,0))) *) + 0x48; 0x8b; 0x4e; 0x08; (* MOV (% rcx) (Memop Quadword (%% (rsi,8))) *) + 0x48; 0x13; 0x4c; 0x24; 0x08; + (* ADC (% rcx) (Memop Quadword (%% (rsp,8))) *) + 0x4c; 0x8b; 0x46; 0x10; (* MOV (% r8) (Memop Quadword (%% (rsi,16))) *) + 0x4c; 0x13; 0x44; 0x24; 0x10; + (* ADC (% r8) (Memop Quadword (%% (rsp,16))) *) + 0x4c; 0x8b; 0x4e; 0x18; (* MOV (% r9) (Memop Quadword (%% (rsi,24))) *) + 0x4c; 0x13; 0x4c; 0x24; 0x18; + (* ADC (% r9) (Memop Quadword (%% (rsp,24))) *) + 0x4c; 0x8b; 0x56; 0x20; (* MOV (% r10) (Memop Quadword (%% (rsi,32))) *) + 0x4c; 0x13; 0x54; 0x24; 0x20; + (* ADC (% r10) (Memop Quadword (%% (rsp,32))) *) + 0x4c; 0x8b; 0x5e; 0x28; (* MOV (% r11) (Memop Quadword (%% (rsi,40))) *) + 0x4c; 0x13; 0x5c; 0x24; 0x28; + (* ADC (% r11) (Memop Quadword (%% (rsp,40))) *) + 0x48; 0x19; 0xd2; (* SBB (% rdx) (% rdx) *) + 0xbb; 0x01; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 1)) *) + 0x48; 0x21; 0xd3; (* AND (% rbx) (% rdx) *) + 0xbd; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebp) (Imm32 (word 4294967295)) *) + 0x48; 0x21; 0xea; (* AND (% rdx) (% rbp) *) + 0x48; 0x31; 0xed; (* XOR (% rbp) (% rbp) *) + 0x48; 0x29; 0xd5; (* SUB (% rbp) (% rdx) *) + 0x48; 0x01; 0xe8; (* ADD (% rax) (% rbp) *) + 0x48; 0x89; 0x84; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,240))) (% rax) *) + 0x48; 0x11; 0xd1; (* ADC (% rcx) (% rdx) *) + 0x48; 0x89; 0x8c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,248))) (% rcx) *) + 0x49; 0x11; 0xd8; (* ADC (% r8) (% rbx) *) + 0x4c; 0x89; 0x84; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,256))) (% r8) *) + 0x49; 0x83; 0xd1; 0x00; (* ADC (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x8c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,264))) (% r9) *) + 0x49; 0x83; 0xd2; 0x00; (* ADC (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x94; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,272))) (% r10) *) + 0x49; 0x83; 0xd3; 0x00; (* ADC (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x9c; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,280))) (% r11) *) + 0x48; 0x8b; 0x06; (* MOV (% rax) (Memop Quadword (%% (rsi,0))) *) + 0x48; 0x2b; 0x04; 0x24; (* SUB (% rax) (Memop Quadword (%% (rsp,0))) *) + 0x48; 0x8b; 0x56; 0x08; (* MOV (% rdx) (Memop Quadword (%% (rsi,8))) *) + 0x48; 0x1b; 0x54; 0x24; 0x08; + (* SBB (% rdx) (Memop Quadword (%% (rsp,8))) *) + 0x4c; 0x8b; 0x46; 0x10; (* MOV (% r8) (Memop Quadword (%% (rsi,16))) *) + 0x4c; 0x1b; 0x44; 0x24; 0x10; + (* SBB (% r8) (Memop Quadword (%% (rsp,16))) *) + 0x4c; 0x8b; 0x4e; 0x18; (* MOV (% r9) (Memop Quadword (%% (rsi,24))) *) + 0x4c; 0x1b; 0x4c; 0x24; 0x18; + (* SBB (% r9) (Memop Quadword (%% (rsp,24))) *) + 0x4c; 0x8b; 0x56; 0x20; (* MOV (% r10) (Memop Quadword (%% (rsi,32))) *) + 0x4c; 0x1b; 0x54; 0x24; 0x20; + (* SBB (% r10) (Memop Quadword (%% (rsp,32))) *) + 0x4c; 0x8b; 0x5e; 0x28; (* MOV (% r11) (Memop Quadword (%% (rsi,40))) *) + 0x4c; 0x1b; 0x5c; 0x24; 0x28; + (* SBB (% r11) (Memop Quadword (%% (rsp,40))) *) + 0x48; 0x19; 0xc9; (* SBB (% rcx) (% rcx) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0x48; 0x21; 0xd9; (* AND (% rcx) (% rbx) *) + 0x48; 0x31; 0xdb; (* XOR (% rbx) (% rbx) *) + 0x48; 0x29; 0xcb; (* SUB (% rbx) (% rcx) *) + 0x48; 0x29; 0xd8; (* SUB (% rax) (% rbx) *) + 0x48; 0x89; 0x84; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,192))) (% rax) *) + 0x48; 0x19; 0xca; (* SBB (% rdx) (% rcx) *) + 0x48; 0x89; 0x94; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,200))) (% rdx) *) + 0x48; 0x19; 0xc0; (* SBB (% rax) (% rax) *) + 0x48; 0x21; 0xd9; (* AND (% rcx) (% rbx) *) + 0x48; 0xf7; 0xd8; (* NEG (% rax) *) + 0x49; 0x19; 0xc8; (* SBB (% r8) (% rcx) *) + 0x4c; 0x89; 0x84; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,208))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x8c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,216))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x94; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,224))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,232))) (% r11) *) + 0x48; 0x8b; 0x94; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,192))) *) + 0x45; 0x31; 0xff; (* XOR (% r15d) (% r15d) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x8c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x94; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x49; 0x01; 0xd9; (* ADD (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xa4; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xac; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% r13,% rbx) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x49; 0x11; 0xdc; (* ADC (% r12) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xb4; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% r14,% rbx) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0x49; 0x11; 0xdd; (* ADC (% r13) (% rbx) *) + 0x4d; 0x11; 0xfe; (* ADC (% r14) (% r15) *) + 0x4c; 0x89; 0xc2; (* MOV (% rdx) (% r8) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xc2; (* ADD (% rdx) (% r8) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xbb; 0xf6; 0xdb; + (* MULX4 (% rbx,% r8) (% rdx,% rbx) *) + 0x4c; 0x11; 0xc0; (* ADC (% rax) (% r8) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc1; (* SUB (% r9) (% rax) *) + 0x49; 0x19; 0xda; (* SBB (% r10) (% rbx) *) + 0x49; 0x19; 0xeb; (* SBB (% r11) (% rbp) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd6; (* ADD (% r14) (% rdx) *) + 0x49; 0x83; 0xd7; 0x00; (* ADC (% r15) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x94; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,200))) *) + 0x45; 0x31; 0xc0; (* XOR (% r8d) (% r8d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf8; + (* ADOX (% r15) (% r8) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0x49; 0x11; 0xc6; (* ADC (% r14) (% rax) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x4d; 0x11; 0xc0; (* ADC (% r8) (% r8) *) + 0x4c; 0x89; 0xca; (* MOV (% rdx) (% r9) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xca; (* ADD (% rdx) (% r9) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xb3; 0xf6; 0xdb; + (* MULX4 (% rbx,% r9) (% rdx,% rbx) *) + 0x4c; 0x11; 0xc8; (* ADC (% rax) (% r9) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc2; (* SUB (% r10) (% rax) *) + 0x49; 0x19; 0xdb; (* SBB (% r11) (% rbx) *) + 0x49; 0x19; 0xec; (* SBB (% r12) (% rbp) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd7; (* ADD (% r15) (% rdx) *) + 0x49; 0x83; 0xd0; 0x00; (* ADC (% r8) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x94; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,208))) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xc1; + (* ADOX (% r8) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0x49; 0x11; 0xc7; (* ADC (% r15) (% rax) *) + 0x49; 0x11; 0xd8; (* ADC (% r8) (% rbx) *) + 0x4d; 0x11; 0xc9; (* ADC (% r9) (% r9) *) + 0x4c; 0x89; 0xd2; (* MOV (% rdx) (% r10) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xd2; (* ADD (% rdx) (% r10) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xab; 0xf6; 0xdb; + (* MULX4 (% rbx,% r10) (% rdx,% rbx) *) + 0x4c; 0x11; 0xd0; (* ADC (% rax) (% r10) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc3; (* SUB (% r11) (% rax) *) + 0x49; 0x19; 0xdc; (* SBB (% r12) (% rbx) *) + 0x49; 0x19; 0xed; (* SBB (% r13) (% rbp) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd0; (* ADD (% r8) (% rdx) *) + 0x49; 0x83; 0xd1; 0x00; (* ADC (% r9) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x94; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,216))) *) + 0x45; 0x31; 0xd2; (* XOR (% r10d) (% r10d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xca; + (* ADOX (% r9) (% r10) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0x49; 0x11; 0xc0; (* ADC (% r8) (% rax) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0x4d; 0x11; 0xd2; (* ADC (% r10) (% r10) *) + 0x4c; 0x89; 0xda; (* MOV (% rdx) (% r11) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xda; (* ADD (% rdx) (% r11) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xa3; 0xf6; 0xdb; + (* MULX4 (% rbx,% r11) (% rdx,% rbx) *) + 0x4c; 0x11; 0xd8; (* ADC (% rax) (% r11) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc4; (* SUB (% r12) (% rax) *) + 0x49; 0x19; 0xdd; (* SBB (% r13) (% rbx) *) + 0x49; 0x19; 0xee; (* SBB (% r14) (% rbp) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd1; (* ADD (% r9) (% rdx) *) + 0x49; 0x83; 0xd2; 0x00; (* ADC (% r10) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x94; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,224))) *) + 0x45; 0x31; 0xdb; (* XOR (% r11d) (% r11d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0x49; 0x11; 0xc1; (* ADC (% r9) (% rax) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0x4d; 0x11; 0xdb; (* ADC (% r11) (% r11) *) + 0x4c; 0x89; 0xe2; (* MOV (% rdx) (% r12) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xe2; (* ADD (% rdx) (% r12) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0x9b; 0xf6; 0xdb; + (* MULX4 (% rbx,% r12) (% rdx,% rbx) *) + 0x4c; 0x11; 0xe0; (* ADC (% rax) (% r12) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc5; (* SUB (% r13) (% rax) *) + 0x49; 0x19; 0xde; (* SBB (% r14) (% rbx) *) + 0x49; 0x19; 0xef; (* SBB (% r15) (% rbp) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd2; (* ADD (% r10) (% rdx) *) + 0x49; 0x83; 0xd3; 0x00; (* ADC (% r11) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x94; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,232))) *) + 0x45; 0x31; 0xe4; (* XOR (% r12d) (% r12d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xdc; + (* ADOX (% r11) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x4d; 0x11; 0xe4; (* ADC (% r12) (% r12) *) + 0x4c; 0x89; 0xea; (* MOV (% rdx) (% r13) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xea; (* ADD (% rdx) (% r13) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0x93; 0xf6; 0xdb; + (* MULX4 (% rbx,% r13) (% rdx,% rbx) *) + 0x4c; 0x11; 0xe8; (* ADC (% rax) (% r13) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc6; (* SUB (% r14) (% rax) *) + 0x49; 0x19; 0xdf; (* SBB (% r15) (% rbx) *) + 0x49; 0x19; 0xe8; (* SBB (% r8) (% rbp) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd3; (* ADD (% r11) (% rdx) *) + 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) + 0x31; 0xd2; (* XOR (% edx) (% edx) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x45; 0x31; 0xed; (* XOR (% r13d) (% r13d) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0x4c; 0x01; 0xf0; (* ADD (% rax) (% r14) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0x4c; 0x11; 0xfb; (* ADC (% rbx) (% r15) *) + 0xb9; 0x01; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 1)) *) + 0x4c; 0x11; 0xc1; (* ADC (% rcx) (% r8) *) + 0x4c; 0x11; 0xca; (* ADC (% rdx) (% r9) *) + 0x4c; 0x11; 0xd5; (* ADC (% rbp) (% r10) *) + 0x4d; 0x11; 0xdd; (* ADC (% r13) (% r11) *) + 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) + 0x4c; 0x0f; 0x45; 0xf0; (* CMOVNE (% r14) (% rax) *) + 0x4c; 0x0f; 0x45; 0xfb; (* CMOVNE (% r15) (% rbx) *) + 0x4c; 0x0f; 0x45; 0xc1; (* CMOVNE (% r8) (% rcx) *) + 0x4c; 0x0f; 0x45; 0xca; (* CMOVNE (% r9) (% rdx) *) + 0x4c; 0x0f; 0x45; 0xd5; (* CMOVNE (% r10) (% rbp) *) + 0x4d; 0x0f; 0x45; 0xdd; (* CMOVNE (% r11) (% r13) *) + 0x4c; 0x89; 0x74; 0x24; 0x60; + (* MOV (Memop Quadword (%% (rsp,96))) (% r14) *) + 0x4c; 0x89; 0x7c; 0x24; 0x68; + (* MOV (Memop Quadword (%% (rsp,104))) (% r15) *) + 0x4c; 0x89; 0x44; 0x24; 0x70; + (* MOV (Memop Quadword (%% (rsp,112))) (% r8) *) + 0x4c; 0x89; 0x4c; 0x24; 0x78; + (* MOV (Memop Quadword (%% (rsp,120))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,128))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,136))) (% r11) *) + 0x48; 0x8b; 0x46; 0x30; (* MOV (% rax) (Memop Quadword (%% (rsi,48))) *) + 0x48; 0x03; 0x46; 0x60; (* ADD (% rax) (Memop Quadword (%% (rsi,96))) *) + 0x48; 0x8b; 0x4e; 0x38; (* MOV (% rcx) (Memop Quadword (%% (rsi,56))) *) + 0x48; 0x13; 0x4e; 0x68; (* ADC (% rcx) (Memop Quadword (%% (rsi,104))) *) + 0x4c; 0x8b; 0x46; 0x40; (* MOV (% r8) (Memop Quadword (%% (rsi,64))) *) + 0x4c; 0x13; 0x46; 0x70; (* ADC (% r8) (Memop Quadword (%% (rsi,112))) *) + 0x4c; 0x8b; 0x4e; 0x48; (* MOV (% r9) (Memop Quadword (%% (rsi,72))) *) + 0x4c; 0x13; 0x4e; 0x78; (* ADC (% r9) (Memop Quadword (%% (rsi,120))) *) + 0x4c; 0x8b; 0x56; 0x50; (* MOV (% r10) (Memop Quadword (%% (rsi,80))) *) + 0x4c; 0x13; 0x96; 0x80; 0x00; 0x00; 0x00; + (* ADC (% r10) (Memop Quadword (%% (rsi,128))) *) + 0x4c; 0x8b; 0x5e; 0x58; (* MOV (% r11) (Memop Quadword (%% (rsi,88))) *) + 0x4c; 0x13; 0x9e; 0x88; 0x00; 0x00; 0x00; + (* ADC (% r11) (Memop Quadword (%% (rsi,136))) *) + 0xba; 0x00; 0x00; 0x00; 0x00; + (* MOV (% edx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xd2; (* ADC (% rdx) (% rdx) *) + 0x48; 0xbd; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rbp) (Imm64 (word 18446744069414584321)) *) + 0x48; 0x01; 0xe8; (* ADD (% rax) (% rbp) *) + 0xbd; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebp) (Imm32 (word 4294967295)) *) + 0x48; 0x11; 0xe9; (* ADC (% rcx) (% rbp) *) + 0x49; 0x83; 0xd0; 0x01; (* ADC (% r8) (Imm8 (word 1)) *) + 0x49; 0x83; 0xd1; 0x00; (* ADC (% r9) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd2; 0x00; (* ADC (% r10) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd3; 0x00; (* ADC (% r11) (Imm8 (word 0)) *) + 0x48; 0x83; 0xd2; 0xff; (* ADC (% rdx) (Imm8 (word 255)) *) + 0xbb; 0x01; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 1)) *) + 0x48; 0x21; 0xd3; (* AND (% rbx) (% rdx) *) + 0x48; 0x21; 0xea; (* AND (% rdx) (% rbp) *) + 0x48; 0x31; 0xed; (* XOR (% rbp) (% rbp) *) + 0x48; 0x29; 0xd5; (* SUB (% rbp) (% rdx) *) + 0x48; 0x29; 0xe8; (* SUB (% rax) (% rbp) *) + 0x48; 0x89; 0x84; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,240))) (% rax) *) + 0x48; 0x19; 0xd1; (* SBB (% rcx) (% rdx) *) + 0x48; 0x89; 0x8c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,248))) (% rcx) *) + 0x49; 0x19; 0xd8; (* SBB (% r8) (% rbx) *) + 0x4c; 0x89; 0x84; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,256))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x8c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,264))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x94; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,272))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x9c; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,280))) (% r11) *) + 0x48; 0x8b; 0x54; 0x24; 0x60; + (* MOV (% rdx) (Memop Quadword (%% (rsp,96))) *) + 0xc4; 0x62; 0xb3; 0xf6; 0x54; 0x24; 0x68; + (* MULX4 (% r10,% r9) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0xc4; 0x62; 0xa3; 0xf6; 0x64; 0x24; 0x78; + (* MULX4 (% r12,% r11) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0xc4; 0x62; 0x93; 0xf6; 0xb4; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MULX4 (% r14,% r13) (% rdx,Memop Quadword (%% (rsp,136))) *) + 0x48; 0x8b; 0x54; 0x24; 0x78; + (* MOV (% rdx) (Memop Quadword (%% (rsp,120))) *) + 0xc4; 0xe2; 0x83; 0xf6; 0x8c; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rcx,% r15) (% rdx,Memop Quadword (%% (rsp,128))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x54; 0x24; 0x70; + (* MOV (% rdx) (Memop Quadword (%% (rsp,112))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x48; 0x8b; 0x54; 0x24; 0x68; + (* MOV (% rdx) (Memop Quadword (%% (rsp,104))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,136))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADCX (% r15) (% rbp) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xcd; + (* ADOX (% rcx) (% rbp) *) + 0x48; 0x11; 0xe9; (* ADC (% rcx) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x94; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,128))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0x8b; 0x54; 0x24; 0x70; + (* MOV (% rdx) (Memop Quadword (%% (rsp,112))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x94; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MULX4 (% rdx,% rax) (% rdx,Memop Quadword (%% (rsp,136))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xca; + (* ADOX (% rcx) (% rdx) *) + 0x48; 0x8b; 0x94; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,136))) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xac; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rbp,% rbx) (% rdx,Memop Quadword (%% (rsp,128))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x54; 0x24; 0x78; + (* MULX4 (% rdx,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% rcx) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% rbx) (% rdx) *) + 0xb8; 0x00; 0x00; 0x00; 0x00; + (* MOV (% eax) (Imm32 (word 0)) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% rbx) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xe8; + (* ADOX (% rbp) (% rax) *) + 0x48; 0x11; 0xc5; (* ADC (% rbp) (% rax) *) + 0x48; 0x31; 0xc0; (* XOR (% rax) (% rax) *) + 0x48; 0x8b; 0x54; 0x24; 0x60; + (* MOV (% rdx) (Memop Quadword (%% (rsp,96))) *) + 0xc4; 0xe2; 0xbb; 0xf6; 0x44; 0x24; 0x60; + (* MULX4 (% rax,% r8) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% r9) (% r9) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADOX (% r9) (% rax) *) + 0x48; 0x8b; 0x54; 0x24; 0x68; + (* MOV (% rdx) (Memop Quadword (%% (rsp,104))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xd2; + (* ADCX (% r10) (% r10) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADOX (% r10) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% r11) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% r11) (% rdx) *) + 0x48; 0x8b; 0x54; 0x24; 0x70; + (* MOV (% rdx) (Memop Quadword (%% (rsp,112))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xe4; + (* ADCX (% r12) (% r12) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADOX (% r12) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% r13) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xea; + (* ADOX (% r13) (% rdx) *) + 0x48; 0x8b; 0x54; 0x24; 0x78; + (* MOV (% rdx) (Memop Quadword (%% (rsp,120))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf6; + (* ADCX (% r14) (% r14) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xff; + (* ADCX (% r15) (% r15) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfa; + (* ADOX (% r15) (% rdx) *) + 0x48; 0x8b; 0x94; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,128))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% rcx) (% rcx) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc8; + (* ADOX (% rcx) (% rax) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% rbx) (% rbx) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% rbx) (% rdx) *) + 0x48; 0x8b; 0x94; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,136))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xfa; + (* MULX4 (% rdi,% rax) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% rbp) (% rbp) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xe8; + (* ADOX (% rbp) (% rax) *) + 0xb8; 0x00; 0x00; 0x00; 0x00; + (* MOV (% eax) (Imm32 (word 0)) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% rdi) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xf8; + (* ADOX (% rdi) (% rax) *) + 0x48; 0x89; 0x9c; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,288))) (% rbx) *) + 0x4c; 0x89; 0xc2; (* MOV (% rdx) (% r8) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xc2; (* ADD (% rdx) (% r8) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xbb; 0xf6; 0xc0; + (* MULX4 (% rax,% r8) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xc3; + (* MULX4 (% r8,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd0; (* ADC (% r8) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc1; (* SUB (% r9) (% rax) *) + 0x4d; 0x19; 0xc2; (* SBB (% r10) (% r8) *) + 0x49; 0x19; 0xdb; (* SBB (% r11) (% rbx) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd0; (* MOV (% r8) (% rdx) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xca; (* MOV (% rdx) (% r9) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xca; (* ADD (% rdx) (% r9) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xb3; 0xf6; 0xc0; + (* MULX4 (% rax,% r9) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xcb; + (* MULX4 (% r9,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd1; (* ADC (% r9) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc2; (* SUB (% r10) (% rax) *) + 0x4d; 0x19; 0xcb; (* SBB (% r11) (% r9) *) + 0x49; 0x19; 0xdc; (* SBB (% r12) (% rbx) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd1; (* MOV (% r9) (% rdx) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xd2; (* MOV (% rdx) (% r10) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xd2; (* ADD (% rdx) (% r10) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xab; 0xf6; 0xc0; + (* MULX4 (% rax,% r10) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xd3; + (* MULX4 (% r10,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd2; (* ADC (% r10) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc3; (* SUB (% r11) (% rax) *) + 0x4d; 0x19; 0xd4; (* SBB (% r12) (% r10) *) + 0x49; 0x19; 0xdd; (* SBB (% r13) (% rbx) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd2; (* MOV (% r10) (% rdx) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xda; (* MOV (% rdx) (% r11) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xda; (* ADD (% rdx) (% r11) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xa3; 0xf6; 0xc0; + (* MULX4 (% rax,% r11) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xdb; + (* MULX4 (% r11,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd3; (* ADC (% r11) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc4; (* SUB (% r12) (% rax) *) + 0x4d; 0x19; 0xdd; (* SBB (% r13) (% r11) *) + 0x49; 0x19; 0xd8; (* SBB (% r8) (% rbx) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd3; (* MOV (% r11) (% rdx) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xe2; (* MOV (% rdx) (% r12) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xe2; (* ADD (% rdx) (% r12) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0x9b; 0xf6; 0xc0; + (* MULX4 (% rax,% r12) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xe3; + (* MULX4 (% r12,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd4; (* ADC (% r12) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc5; (* SUB (% r13) (% rax) *) + 0x4d; 0x19; 0xe0; (* SBB (% r8) (% r12) *) + 0x49; 0x19; 0xd9; (* SBB (% r9) (% rbx) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd4; (* MOV (% r12) (% rdx) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xea; (* MOV (% rdx) (% r13) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xea; (* ADD (% rdx) (% r13) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0x93; 0xf6; 0xc0; + (* MULX4 (% rax,% r13) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xeb; + (* MULX4 (% r13,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd5; (* ADC (% r13) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc0; (* SUB (% r8) (% rax) *) + 0x4d; 0x19; 0xe9; (* SBB (% r9) (% r13) *) + 0x49; 0x19; 0xda; (* SBB (% r10) (% rbx) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd5; (* MOV (% r13) (% rdx) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x9c; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MOV (% rbx) (Memop Quadword (%% (rsp,288))) *) + 0x4d; 0x01; 0xc6; (* ADD (% r14) (% r8) *) + 0x4d; 0x11; 0xcf; (* ADC (% r15) (% r9) *) + 0x4c; 0x11; 0xd1; (* ADC (% rcx) (% r10) *) + 0x4c; 0x11; 0xdb; (* ADC (% rbx) (% r11) *) + 0x4c; 0x11; 0xe5; (* ADC (% rbp) (% r12) *) + 0x4c; 0x11; 0xef; (* ADC (% rdi) (% r13) *) + 0x41; 0xb8; 0x00; 0x00; 0x00; 0x00; + (* MOV (% r8d) (Imm32 (word 0)) *) + 0x4d; 0x11; 0xc0; (* ADC (% r8) (% r8) *) + 0x4d; 0x31; 0xdb; (* XOR (% r11) (% r11) *) + 0x4d; 0x31; 0xe4; (* XOR (% r12) (% r12) *) + 0x4d; 0x31; 0xed; (* XOR (% r13) (% r13) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0x4c; 0x01; 0xf0; (* ADD (% rax) (% r14) *) + 0x41; 0xb9; 0xff; 0xff; 0xff; 0xff; + (* MOV (% r9d) (Imm32 (word 4294967295)) *) + 0x4d; 0x11; 0xf9; (* ADC (% r9) (% r15) *) + 0x41; 0xba; 0x01; 0x00; 0x00; 0x00; + (* MOV (% r10d) (Imm32 (word 1)) *) + 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x49; 0x11; 0xec; (* ADC (% r12) (% rbp) *) + 0x49; 0x11; 0xfd; (* ADC (% r13) (% rdi) *) + 0x49; 0x83; 0xd0; 0x00; (* ADC (% r8) (Imm8 (word 0)) *) + 0x4c; 0x0f; 0x45; 0xf0; (* CMOVNE (% r14) (% rax) *) + 0x4d; 0x0f; 0x45; 0xf9; (* CMOVNE (% r15) (% r9) *) + 0x49; 0x0f; 0x45; 0xca; (* CMOVNE (% rcx) (% r10) *) + 0x49; 0x0f; 0x45; 0xdb; (* CMOVNE (% rbx) (% r11) *) + 0x49; 0x0f; 0x45; 0xec; (* CMOVNE (% rbp) (% r12) *) + 0x49; 0x0f; 0x45; 0xfd; (* CMOVNE (% rdi) (% r13) *) + 0x4c; 0x89; 0xb4; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,288))) (% r14) *) + 0x4c; 0x89; 0xbc; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,296))) (% r15) *) + 0x48; 0x89; 0x8c; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,304))) (% rcx) *) + 0x48; 0x89; 0x9c; 0x24; 0x38; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,312))) (% rbx) *) + 0x48; 0x89; 0xac; 0x24; 0x40; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,320))) (% rbp) *) + 0x48; 0x89; 0xbc; 0x24; 0x48; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,328))) (% rdi) *) + 0x48; 0x8b; 0x54; 0x24; 0x30; + (* MOV (% rdx) (Memop Quadword (%% (rsp,48))) *) + 0x45; 0x31; 0xff; (* XOR (% r15d) (% r15d) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x0e; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsi,0))) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x56; 0x08; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsi,8))) *) + 0x49; 0x01; 0xd9; (* ADD (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x5e; 0x10; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsi,16))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x66; 0x18; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsi,24))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x6e; 0x20; + (* MULX4 (% r13,% rbx) (% rdx,Memop Quadword (%% (rsi,32))) *) + 0x49; 0x11; 0xdc; (* ADC (% r12) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x76; 0x28; + (* MULX4 (% r14,% rbx) (% rdx,Memop Quadword (%% (rsi,40))) *) + 0x49; 0x11; 0xdd; (* ADC (% r13) (% rbx) *) + 0x4d; 0x11; 0xfe; (* ADC (% r14) (% r15) *) + 0x4c; 0x89; 0xc2; (* MOV (% rdx) (% r8) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xc2; (* ADD (% rdx) (% r8) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xbb; 0xf6; 0xdb; + (* MULX4 (% rbx,% r8) (% rdx,% rbx) *) + 0x4c; 0x11; 0xc0; (* ADC (% rax) (% r8) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc1; (* SUB (% r9) (% rax) *) + 0x49; 0x19; 0xda; (* SBB (% r10) (% rbx) *) + 0x49; 0x19; 0xeb; (* SBB (% r11) (% rbp) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd6; (* ADD (% r14) (% rdx) *) + 0x49; 0x83; 0xd7; 0x00; (* ADC (% r15) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x54; 0x24; 0x38; + (* MOV (% rdx) (Memop Quadword (%% (rsp,56))) *) + 0x45; 0x31; 0xc0; (* XOR (% r8d) (% r8d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1e; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf8; + (* ADOX (% r15) (% r8) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,40))) *) + 0x49; 0x11; 0xc6; (* ADC (% r14) (% rax) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x4d; 0x11; 0xc0; (* ADC (% r8) (% r8) *) + 0x4c; 0x89; 0xca; (* MOV (% rdx) (% r9) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xca; (* ADD (% rdx) (% r9) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xb3; 0xf6; 0xdb; + (* MULX4 (% rbx,% r9) (% rdx,% rbx) *) + 0x4c; 0x11; 0xc8; (* ADC (% rax) (% r9) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc2; (* SUB (% r10) (% rax) *) + 0x49; 0x19; 0xdb; (* SBB (% r11) (% rbx) *) + 0x49; 0x19; 0xec; (* SBB (% r12) (% rbp) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd7; (* ADD (% r15) (% rdx) *) + 0x49; 0x83; 0xd0; 0x00; (* ADC (% r8) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x54; 0x24; 0x40; + (* MOV (% rdx) (Memop Quadword (%% (rsp,64))) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1e; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xc1; + (* ADOX (% r8) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,40))) *) + 0x49; 0x11; 0xc7; (* ADC (% r15) (% rax) *) + 0x49; 0x11; 0xd8; (* ADC (% r8) (% rbx) *) + 0x4d; 0x11; 0xc9; (* ADC (% r9) (% r9) *) + 0x4c; 0x89; 0xd2; (* MOV (% rdx) (% r10) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xd2; (* ADD (% rdx) (% r10) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xab; 0xf6; 0xdb; + (* MULX4 (% rbx,% r10) (% rdx,% rbx) *) + 0x4c; 0x11; 0xd0; (* ADC (% rax) (% r10) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc3; (* SUB (% r11) (% rax) *) + 0x49; 0x19; 0xdc; (* SBB (% r12) (% rbx) *) + 0x49; 0x19; 0xed; (* SBB (% r13) (% rbp) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd0; (* ADD (% r8) (% rdx) *) + 0x49; 0x83; 0xd1; 0x00; (* ADC (% r9) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x54; 0x24; 0x48; + (* MOV (% rdx) (Memop Quadword (%% (rsp,72))) *) + 0x45; 0x31; 0xd2; (* XOR (% r10d) (% r10d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1e; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xca; + (* ADOX (% r9) (% r10) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,40))) *) + 0x49; 0x11; 0xc0; (* ADC (% r8) (% rax) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0x4d; 0x11; 0xd2; (* ADC (% r10) (% r10) *) + 0x4c; 0x89; 0xda; (* MOV (% rdx) (% r11) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xda; (* ADD (% rdx) (% r11) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xa3; 0xf6; 0xdb; + (* MULX4 (% rbx,% r11) (% rdx,% rbx) *) + 0x4c; 0x11; 0xd8; (* ADC (% rax) (% r11) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc4; (* SUB (% r12) (% rax) *) + 0x49; 0x19; 0xdd; (* SBB (% r13) (% rbx) *) + 0x49; 0x19; 0xee; (* SBB (% r14) (% rbp) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd1; (* ADD (% r9) (% rdx) *) + 0x49; 0x83; 0xd2; 0x00; (* ADC (% r10) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x54; 0x24; 0x50; + (* MOV (% rdx) (Memop Quadword (%% (rsp,80))) *) + 0x45; 0x31; 0xdb; (* XOR (% r11d) (% r11d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1e; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,40))) *) + 0x49; 0x11; 0xc1; (* ADC (% r9) (% rax) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0x4d; 0x11; 0xdb; (* ADC (% r11) (% r11) *) + 0x4c; 0x89; 0xe2; (* MOV (% rdx) (% r12) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xe2; (* ADD (% rdx) (% r12) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0x9b; 0xf6; 0xdb; + (* MULX4 (% rbx,% r12) (% rdx,% rbx) *) + 0x4c; 0x11; 0xe0; (* ADC (% rax) (% r12) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc5; (* SUB (% r13) (% rax) *) + 0x49; 0x19; 0xde; (* SBB (% r14) (% rbx) *) + 0x49; 0x19; 0xef; (* SBB (% r15) (% rbp) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd2; (* ADD (% r10) (% rdx) *) + 0x49; 0x83; 0xd3; 0x00; (* ADC (% r11) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x54; 0x24; 0x58; + (* MOV (% rdx) (Memop Quadword (%% (rsp,88))) *) + 0x45; 0x31; 0xe4; (* XOR (% r12d) (% r12d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1e; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xdc; + (* ADOX (% r11) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,40))) *) + 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x4d; 0x11; 0xe4; (* ADC (% r12) (% r12) *) + 0x4c; 0x89; 0xea; (* MOV (% rdx) (% r13) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xea; (* ADD (% rdx) (% r13) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0x93; 0xf6; 0xdb; + (* MULX4 (% rbx,% r13) (% rdx,% rbx) *) + 0x4c; 0x11; 0xe8; (* ADC (% rax) (% r13) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc6; (* SUB (% r14) (% rax) *) + 0x49; 0x19; 0xdf; (* SBB (% r15) (% rbx) *) + 0x49; 0x19; 0xe8; (* SBB (% r8) (% rbp) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd3; (* ADD (% r11) (% rdx) *) + 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) + 0x31; 0xd2; (* XOR (% edx) (% edx) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x45; 0x31; 0xed; (* XOR (% r13d) (% r13d) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0x4c; 0x01; 0xf0; (* ADD (% rax) (% r14) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0x4c; 0x11; 0xfb; (* ADC (% rbx) (% r15) *) + 0xb9; 0x01; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 1)) *) + 0x4c; 0x11; 0xc1; (* ADC (% rcx) (% r8) *) + 0x4c; 0x11; 0xca; (* ADC (% rdx) (% r9) *) + 0x4c; 0x11; 0xd5; (* ADC (% rbp) (% r10) *) + 0x4d; 0x11; 0xdd; (* ADC (% r13) (% r11) *) + 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) + 0x4c; 0x0f; 0x45; 0xf0; (* CMOVNE (% r14) (% rax) *) + 0x4c; 0x0f; 0x45; 0xfb; (* CMOVNE (% r15) (% rbx) *) + 0x4c; 0x0f; 0x45; 0xc1; (* CMOVNE (% r8) (% rcx) *) + 0x4c; 0x0f; 0x45; 0xca; (* CMOVNE (% r9) (% rdx) *) + 0x4c; 0x0f; 0x45; 0xd5; (* CMOVNE (% r10) (% rbp) *) + 0x4d; 0x0f; 0x45; 0xdd; (* CMOVNE (% r11) (% r13) *) + 0x4c; 0x89; 0xb4; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,144))) (% r14) *) + 0x4c; 0x89; 0xbc; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,152))) (% r15) *) + 0x4c; 0x89; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,160))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,168))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,176))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,184))) (% r11) *) + 0x48; 0x8b; 0x94; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,240))) *) + 0xc4; 0x62; 0xb3; 0xf6; 0x94; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% r10,% r9) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0xc4; 0x62; 0xa3; 0xf6; 0xa4; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% r12,% r11) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0xc4; 0x62; 0x93; 0xf6; 0xb4; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% r14,% r13) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0x48; 0x8b; 0x94; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,264))) *) + 0xc4; 0xe2; 0x83; 0xf6; 0x8c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% rcx,% r15) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x94; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,256))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x48; 0x8b; 0x94; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,248))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADCX (% r15) (% rbp) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xcd; + (* ADOX (% rcx) (% rbp) *) + 0x48; 0x11; 0xe9; (* ADC (% rcx) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x94; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,272))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0x8b; 0x94; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,256))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x94; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% rdx,% rax) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xca; + (* ADOX (% rcx) (% rdx) *) + 0x48; 0x8b; 0x94; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,280))) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xac; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% rbp,% rbx) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x94; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rdx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% rcx) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% rbx) (% rdx) *) + 0xb8; 0x00; 0x00; 0x00; 0x00; + (* MOV (% eax) (Imm32 (word 0)) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% rbx) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xe8; + (* ADOX (% rbp) (% rax) *) + 0x48; 0x11; 0xc5; (* ADC (% rbp) (% rax) *) + 0x48; 0x31; 0xc0; (* XOR (% rax) (% rax) *) + 0x48; 0x8b; 0x94; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,240))) *) + 0xc4; 0xe2; 0xbb; 0xf6; 0x84; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rax,% r8) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% r9) (% r9) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADOX (% r9) (% rax) *) + 0x48; 0x8b; 0x94; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,248))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xd2; + (* ADCX (% r10) (% r10) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADOX (% r10) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% r11) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% r11) (% rdx) *) + 0x48; 0x8b; 0x94; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,256))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xe4; + (* ADCX (% r12) (% r12) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADOX (% r12) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% r13) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xea; + (* ADOX (% r13) (% rdx) *) + 0x48; 0x8b; 0x94; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,264))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf6; + (* ADCX (% r14) (% r14) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xff; + (* ADCX (% r15) (% r15) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfa; + (* ADOX (% r15) (% rdx) *) + 0x48; 0x8b; 0x94; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,272))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% rcx) (% rcx) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc8; + (* ADOX (% rcx) (% rax) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% rbx) (% rbx) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% rbx) (% rdx) *) + 0x48; 0x8b; 0x94; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,280))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xfa; + (* MULX4 (% rdi,% rax) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% rbp) (% rbp) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xe8; + (* ADOX (% rbp) (% rax) *) + 0xb8; 0x00; 0x00; 0x00; 0x00; + (* MOV (% eax) (Imm32 (word 0)) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% rdi) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xf8; + (* ADOX (% rdi) (% rax) *) + 0x48; 0x89; 0x9c; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,192))) (% rbx) *) + 0x4c; 0x89; 0xc2; (* MOV (% rdx) (% r8) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xc2; (* ADD (% rdx) (% r8) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xbb; 0xf6; 0xc0; + (* MULX4 (% rax,% r8) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xc3; + (* MULX4 (% r8,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd0; (* ADC (% r8) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc1; (* SUB (% r9) (% rax) *) + 0x4d; 0x19; 0xc2; (* SBB (% r10) (% r8) *) + 0x49; 0x19; 0xdb; (* SBB (% r11) (% rbx) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd0; (* MOV (% r8) (% rdx) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xca; (* MOV (% rdx) (% r9) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xca; (* ADD (% rdx) (% r9) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xb3; 0xf6; 0xc0; + (* MULX4 (% rax,% r9) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xcb; + (* MULX4 (% r9,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd1; (* ADC (% r9) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc2; (* SUB (% r10) (% rax) *) + 0x4d; 0x19; 0xcb; (* SBB (% r11) (% r9) *) + 0x49; 0x19; 0xdc; (* SBB (% r12) (% rbx) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd1; (* MOV (% r9) (% rdx) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xd2; (* MOV (% rdx) (% r10) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xd2; (* ADD (% rdx) (% r10) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xab; 0xf6; 0xc0; + (* MULX4 (% rax,% r10) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xd3; + (* MULX4 (% r10,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd2; (* ADC (% r10) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc3; (* SUB (% r11) (% rax) *) + 0x4d; 0x19; 0xd4; (* SBB (% r12) (% r10) *) + 0x49; 0x19; 0xdd; (* SBB (% r13) (% rbx) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd2; (* MOV (% r10) (% rdx) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xda; (* MOV (% rdx) (% r11) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xda; (* ADD (% rdx) (% r11) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xa3; 0xf6; 0xc0; + (* MULX4 (% rax,% r11) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xdb; + (* MULX4 (% r11,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd3; (* ADC (% r11) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc4; (* SUB (% r12) (% rax) *) + 0x4d; 0x19; 0xdd; (* SBB (% r13) (% r11) *) + 0x49; 0x19; 0xd8; (* SBB (% r8) (% rbx) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd3; (* MOV (% r11) (% rdx) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xe2; (* MOV (% rdx) (% r12) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xe2; (* ADD (% rdx) (% r12) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0x9b; 0xf6; 0xc0; + (* MULX4 (% rax,% r12) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xe3; + (* MULX4 (% r12,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd4; (* ADC (% r12) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc5; (* SUB (% r13) (% rax) *) + 0x4d; 0x19; 0xe0; (* SBB (% r8) (% r12) *) + 0x49; 0x19; 0xd9; (* SBB (% r9) (% rbx) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd4; (* MOV (% r12) (% rdx) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xea; (* MOV (% rdx) (% r13) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xea; (* ADD (% rdx) (% r13) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0x93; 0xf6; 0xc0; + (* MULX4 (% rax,% r13) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xeb; + (* MULX4 (% r13,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd5; (* ADC (% r13) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc0; (* SUB (% r8) (% rax) *) + 0x4d; 0x19; 0xe9; (* SBB (% r9) (% r13) *) + 0x49; 0x19; 0xda; (* SBB (% r10) (% rbx) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd5; (* MOV (% r13) (% rdx) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x9c; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (% rbx) (Memop Quadword (%% (rsp,192))) *) + 0x4d; 0x01; 0xc6; (* ADD (% r14) (% r8) *) + 0x4d; 0x11; 0xcf; (* ADC (% r15) (% r9) *) + 0x4c; 0x11; 0xd1; (* ADC (% rcx) (% r10) *) + 0x4c; 0x11; 0xdb; (* ADC (% rbx) (% r11) *) + 0x4c; 0x11; 0xe5; (* ADC (% rbp) (% r12) *) + 0x4c; 0x11; 0xef; (* ADC (% rdi) (% r13) *) + 0x41; 0xb8; 0x00; 0x00; 0x00; 0x00; + (* MOV (% r8d) (Imm32 (word 0)) *) + 0x4d; 0x11; 0xc0; (* ADC (% r8) (% r8) *) + 0x4d; 0x31; 0xdb; (* XOR (% r11) (% r11) *) + 0x4d; 0x31; 0xe4; (* XOR (% r12) (% r12) *) + 0x4d; 0x31; 0xed; (* XOR (% r13) (% r13) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0x4c; 0x01; 0xf0; (* ADD (% rax) (% r14) *) + 0x41; 0xb9; 0xff; 0xff; 0xff; 0xff; + (* MOV (% r9d) (Imm32 (word 4294967295)) *) + 0x4d; 0x11; 0xf9; (* ADC (% r9) (% r15) *) + 0x41; 0xba; 0x01; 0x00; 0x00; 0x00; + (* MOV (% r10d) (Imm32 (word 1)) *) + 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x49; 0x11; 0xec; (* ADC (% r12) (% rbp) *) + 0x49; 0x11; 0xfd; (* ADC (% r13) (% rdi) *) + 0x49; 0x83; 0xd0; 0x00; (* ADC (% r8) (Imm8 (word 0)) *) + 0x4c; 0x0f; 0x45; 0xf0; (* CMOVNE (% r14) (% rax) *) + 0x4d; 0x0f; 0x45; 0xf9; (* CMOVNE (% r15) (% r9) *) + 0x49; 0x0f; 0x45; 0xca; (* CMOVNE (% rcx) (% r10) *) + 0x49; 0x0f; 0x45; 0xdb; (* CMOVNE (% rbx) (% r11) *) + 0x49; 0x0f; 0x45; 0xec; (* CMOVNE (% rbp) (% r12) *) + 0x49; 0x0f; 0x45; 0xfd; (* CMOVNE (% rdi) (% r13) *) + 0x4c; 0x89; 0xb4; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,192))) (% r14) *) + 0x4c; 0x89; 0xbc; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,200))) (% r15) *) + 0x48; 0x89; 0x8c; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,208))) (% rcx) *) + 0x48; 0x89; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,216))) (% rbx) *) + 0x48; 0x89; 0xac; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,224))) (% rbp) *) + 0x48; 0x89; 0xbc; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,232))) (% rdi) *) + 0x49; 0xb8; 0xff; 0xff; 0xff; 0xff; 0x00; 0x00; 0x00; 0x00; + (* MOV (% r8) (Imm64 (word 4294967295)) *) + 0x4c; 0x2b; 0x84; 0x24; 0x20; 0x01; 0x00; 0x00; + (* SUB (% r8) (Memop Quadword (%% (rsp,288))) *) + 0x49; 0xb9; 0x00; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% r9) (Imm64 (word 18446744069414584320)) *) + 0x4c; 0x1b; 0x8c; 0x24; 0x28; 0x01; 0x00; 0x00; + (* SBB (% r9) (Memop Quadword (%% (rsp,296))) *) + 0x49; 0xc7; 0xc2; 0xfe; 0xff; 0xff; 0xff; + (* MOV (% r10) (Imm32 (word 4294967294)) *) + 0x4c; 0x1b; 0x94; 0x24; 0x30; 0x01; 0x00; 0x00; + (* SBB (% r10) (Memop Quadword (%% (rsp,304))) *) + 0x49; 0xc7; 0xc3; 0xff; 0xff; 0xff; 0xff; + (* MOV (% r11) (Imm32 (word 4294967295)) *) + 0x4c; 0x1b; 0x9c; 0x24; 0x38; 0x01; 0x00; 0x00; + (* SBB (% r11) (Memop Quadword (%% (rsp,312))) *) + 0x49; 0xc7; 0xc4; 0xff; 0xff; 0xff; 0xff; + (* MOV (% r12) (Imm32 (word 4294967295)) *) + 0x4c; 0x1b; 0xa4; 0x24; 0x40; 0x01; 0x00; 0x00; + (* SBB (% r12) (Memop Quadword (%% (rsp,320))) *) + 0x49; 0xc7; 0xc5; 0xff; 0xff; 0xff; 0xff; + (* MOV (% r13) (Imm32 (word 4294967295)) *) + 0x4c; 0x1b; 0xac; 0x24; 0x48; 0x01; 0x00; 0x00; + (* SBB (% r13) (Memop Quadword (%% (rsp,328))) *) + 0x48; 0xc7; 0xc2; 0x09; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm32 (word 9)) *) + 0xc4; 0xc2; 0xbb; 0xf6; 0xc0; + (* MULX4 (% rax,% r8) (% rdx,% r8) *) + 0xc4; 0xc2; 0xb3; 0xf6; 0xc9; + (* MULX4 (% rcx,% r9) (% rdx,% r9) *) + 0x49; 0x01; 0xc1; (* ADD (% r9) (% rax) *) + 0xc4; 0xc2; 0xab; 0xf6; 0xc2; + (* MULX4 (% rax,% r10) (% rdx,% r10) *) + 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) + 0xc4; 0xc2; 0xa3; 0xf6; 0xcb; + (* MULX4 (% rcx,% r11) (% rdx,% r11) *) + 0x49; 0x11; 0xc3; (* ADC (% r11) (% rax) *) + 0xc4; 0xc2; 0x9b; 0xf6; 0xc4; + (* MULX4 (% rax,% r12) (% rdx,% r12) *) + 0x49; 0x11; 0xcc; (* ADC (% r12) (% rcx) *) + 0xc4; 0x42; 0x93; 0xf6; 0xf5; + (* MULX4 (% r14,% r13) (% rdx,% r13) *) + 0x49; 0x11; 0xc5; (* ADC (% r13) (% rax) *) + 0x49; 0x83; 0xd6; 0x01; (* ADC (% r14) (Imm8 (word 1)) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0xc7; 0xc2; 0x0c; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm32 (word 12)) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x94; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rdx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x49; 0x0f; 0x38; 0xf6; 0xd6; + (* ADOX (% rdx) (% r14) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xd1; + (* ADCX (% rdx) (% rcx) *) + 0x48; 0x31; 0xc9; (* XOR (% rcx) (% rcx) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xc8; + (* MULX4 (% rcx,% rax) (% rdx,% rax) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc9; + (* ADOX (% r9) (% rcx) *) + 0xb8; 0xff; 0xff; 0xff; 0xff; + (* MOV (% eax) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xc8; + (* MULX4 (% rcx,% rax) (% rdx,% rax) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd1; + (* ADOX (% r10) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd2; + (* ADCX (% r10) (% rdx) *) + 0xb8; 0x00; 0x00; 0x00; 0x00; + (* MOV (% eax) (Imm32 (word 0)) *) + 0xb9; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 0)) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADOX (% rax) (% rax) *) + 0x49; 0x11; 0xc3; (* ADC (% r11) (% rax) *) + 0x49; 0x11; 0xcc; (* ADC (% r12) (% rcx) *) + 0x49; 0x11; 0xcd; (* ADC (% r13) (% rcx) *) + 0x48; 0x11; 0xc9; (* ADC (% rcx) (% rcx) *) + 0x48; 0x83; 0xe9; 0x01; (* SUB (% rcx) (Imm8 (word 1)) *) + 0xba; 0xff; 0xff; 0xff; 0xff; + (* MOV (% edx) (Imm32 (word 4294967295)) *) + 0x48; 0x31; 0xc0; (* XOR (% rax) (% rax) *) + 0x48; 0x21; 0xca; (* AND (% rdx) (% rcx) *) + 0x48; 0x29; 0xd0; (* SUB (% rax) (% rdx) *) + 0x48; 0x83; 0xe1; 0x01; (* AND (% rcx) (Imm8 (word 1)) *) + 0x49; 0x29; 0xc0; (* SUB (% r8) (% rax) *) + 0x4c; 0x89; 0x84; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,288))) (% r8) *) + 0x49; 0x19; 0xd1; (* SBB (% r9) (% rdx) *) + 0x4c; 0x89; 0x8c; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,296))) (% r9) *) + 0x49; 0x19; 0xca; (* SBB (% r10) (% rcx) *) + 0x4c; 0x89; 0x94; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,304))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x9c; 0x24; 0x38; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,312))) (% r11) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xa4; 0x24; 0x40; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,320))) (% r12) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xac; 0x24; 0x48; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,328))) (% r13) *) + 0x48; 0x8b; 0x84; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,192))) *) + 0x48; 0x2b; 0x04; 0x24; (* SUB (% rax) (Memop Quadword (%% (rsp,0))) *) + 0x48; 0x8b; 0x94; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,200))) *) + 0x48; 0x1b; 0x54; 0x24; 0x08; + (* SBB (% rdx) (Memop Quadword (%% (rsp,8))) *) + 0x4c; 0x8b; 0x84; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (% r8) (Memop Quadword (%% (rsp,208))) *) + 0x4c; 0x1b; 0x44; 0x24; 0x10; + (* SBB (% r8) (Memop Quadword (%% (rsp,16))) *) + 0x4c; 0x8b; 0x8c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MOV (% r9) (Memop Quadword (%% (rsp,216))) *) + 0x4c; 0x1b; 0x4c; 0x24; 0x18; + (* SBB (% r9) (Memop Quadword (%% (rsp,24))) *) + 0x4c; 0x8b; 0x94; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MOV (% r10) (Memop Quadword (%% (rsp,224))) *) + 0x4c; 0x1b; 0x54; 0x24; 0x20; + (* SBB (% r10) (Memop Quadword (%% (rsp,32))) *) + 0x4c; 0x8b; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MOV (% r11) (Memop Quadword (%% (rsp,232))) *) + 0x4c; 0x1b; 0x5c; 0x24; 0x28; + (* SBB (% r11) (Memop Quadword (%% (rsp,40))) *) + 0x48; 0x19; 0xc9; (* SBB (% rcx) (% rcx) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0x48; 0x21; 0xd9; (* AND (% rcx) (% rbx) *) + 0x48; 0x31; 0xdb; (* XOR (% rbx) (% rbx) *) + 0x48; 0x29; 0xcb; (* SUB (% rbx) (% rcx) *) + 0x48; 0x29; 0xd8; (* SUB (% rax) (% rbx) *) + 0x48; 0x89; 0x84; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,240))) (% rax) *) + 0x48; 0x19; 0xca; (* SBB (% rdx) (% rcx) *) + 0x48; 0x89; 0x94; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,248))) (% rdx) *) + 0x48; 0x19; 0xc0; (* SBB (% rax) (% rax) *) + 0x48; 0x21; 0xd9; (* AND (% rcx) (% rbx) *) + 0x48; 0xf7; 0xd8; (* NEG (% rax) *) + 0x49; 0x19; 0xc8; (* SBB (% r8) (% rcx) *) + 0x4c; 0x89; 0x84; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,256))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x8c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,264))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x94; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,272))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x9c; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,280))) (% r11) *) + 0x48; 0x8b; 0x54; 0x24; 0x30; + (* MOV (% rdx) (Memop Quadword (%% (rsp,48))) *) + 0xc4; 0x62; 0xb3; 0xf6; 0x54; 0x24; 0x38; + (* MULX4 (% r10,% r9) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0xc4; 0x62; 0xa3; 0xf6; 0x64; 0x24; 0x48; + (* MULX4 (% r12,% r11) (% rdx,Memop Quadword (%% (rsp,72))) *) + 0xc4; 0x62; 0x93; 0xf6; 0x74; 0x24; 0x58; + (* MULX4 (% r14,% r13) (% rdx,Memop Quadword (%% (rsp,88))) *) + 0x48; 0x8b; 0x54; 0x24; 0x48; + (* MOV (% rdx) (Memop Quadword (%% (rsp,72))) *) + 0xc4; 0xe2; 0x83; 0xf6; 0x4c; 0x24; 0x50; + (* MULX4 (% rcx,% r15) (% rdx,Memop Quadword (%% (rsp,80))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x54; 0x24; 0x40; + (* MOV (% rdx) (Memop Quadword (%% (rsp,64))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x38; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x48; 0x8b; 0x54; 0x24; 0x38; + (* MOV (% rdx) (Memop Quadword (%% (rsp,56))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x58; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADCX (% r15) (% rbp) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xcd; + (* ADOX (% rcx) (% rbp) *) + 0x48; 0x11; 0xe9; (* ADC (% rcx) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x54; 0x24; 0x50; + (* MOV (% rdx) (Memop Quadword (%% (rsp,80))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0x8b; 0x54; 0x24; 0x40; + (* MOV (% rdx) (Memop Quadword (%% (rsp,64))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x54; 0x24; 0x58; + (* MULX4 (% rdx,% rax) (% rdx,Memop Quadword (%% (rsp,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xca; + (* ADOX (% rcx) (% rdx) *) + 0x48; 0x8b; 0x54; 0x24; 0x58; + (* MOV (% rdx) (Memop Quadword (%% (rsp,88))) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0x6c; 0x24; 0x50; + (* MULX4 (% rbp,% rbx) (% rdx,Memop Quadword (%% (rsp,80))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x54; 0x24; 0x48; + (* MULX4 (% rdx,% rax) (% rdx,Memop Quadword (%% (rsp,72))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% rcx) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% rbx) (% rdx) *) + 0xb8; 0x00; 0x00; 0x00; 0x00; + (* MOV (% eax) (Imm32 (word 0)) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% rbx) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xe8; + (* ADOX (% rbp) (% rax) *) + 0x48; 0x11; 0xc5; (* ADC (% rbp) (% rax) *) + 0x48; 0x31; 0xc0; (* XOR (% rax) (% rax) *) + 0x48; 0x8b; 0x54; 0x24; 0x30; + (* MOV (% rdx) (Memop Quadword (%% (rsp,48))) *) + 0xc4; 0xe2; 0xbb; 0xf6; 0x44; 0x24; 0x30; + (* MULX4 (% rax,% r8) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% r9) (% r9) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADOX (% r9) (% rax) *) + 0x48; 0x8b; 0x54; 0x24; 0x38; + (* MOV (% rdx) (Memop Quadword (%% (rsp,56))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xd2; + (* ADCX (% r10) (% r10) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADOX (% r10) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% r11) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% r11) (% rdx) *) + 0x48; 0x8b; 0x54; 0x24; 0x40; + (* MOV (% rdx) (Memop Quadword (%% (rsp,64))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xe4; + (* ADCX (% r12) (% r12) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADOX (% r12) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% r13) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xea; + (* ADOX (% r13) (% rdx) *) + 0x48; 0x8b; 0x54; 0x24; 0x48; + (* MOV (% rdx) (Memop Quadword (%% (rsp,72))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf6; + (* ADCX (% r14) (% r14) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xff; + (* ADCX (% r15) (% r15) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfa; + (* ADOX (% r15) (% rdx) *) + 0x48; 0x8b; 0x54; 0x24; 0x50; + (* MOV (% rdx) (Memop Quadword (%% (rsp,80))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% rcx) (% rcx) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc8; + (* ADOX (% rcx) (% rax) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% rbx) (% rbx) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% rbx) (% rdx) *) + 0x48; 0x8b; 0x54; 0x24; 0x58; + (* MOV (% rdx) (Memop Quadword (%% (rsp,88))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xfa; + (* MULX4 (% rdi,% rax) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% rbp) (% rbp) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xe8; + (* ADOX (% rbp) (% rax) *) + 0xb8; 0x00; 0x00; 0x00; 0x00; + (* MOV (% eax) (Imm32 (word 0)) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% rdi) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xf8; + (* ADOX (% rdi) (% rax) *) + 0x48; 0x89; 0x9c; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,192))) (% rbx) *) + 0x4c; 0x89; 0xc2; (* MOV (% rdx) (% r8) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xc2; (* ADD (% rdx) (% r8) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xbb; 0xf6; 0xc0; + (* MULX4 (% rax,% r8) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xc3; + (* MULX4 (% r8,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd0; (* ADC (% r8) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc1; (* SUB (% r9) (% rax) *) + 0x4d; 0x19; 0xc2; (* SBB (% r10) (% r8) *) + 0x49; 0x19; 0xdb; (* SBB (% r11) (% rbx) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd0; (* MOV (% r8) (% rdx) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xca; (* MOV (% rdx) (% r9) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xca; (* ADD (% rdx) (% r9) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xb3; 0xf6; 0xc0; + (* MULX4 (% rax,% r9) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xcb; + (* MULX4 (% r9,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd1; (* ADC (% r9) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc2; (* SUB (% r10) (% rax) *) + 0x4d; 0x19; 0xcb; (* SBB (% r11) (% r9) *) + 0x49; 0x19; 0xdc; (* SBB (% r12) (% rbx) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd1; (* MOV (% r9) (% rdx) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xd2; (* MOV (% rdx) (% r10) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xd2; (* ADD (% rdx) (% r10) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xab; 0xf6; 0xc0; + (* MULX4 (% rax,% r10) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xd3; + (* MULX4 (% r10,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd2; (* ADC (% r10) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc3; (* SUB (% r11) (% rax) *) + 0x4d; 0x19; 0xd4; (* SBB (% r12) (% r10) *) + 0x49; 0x19; 0xdd; (* SBB (% r13) (% rbx) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd2; (* MOV (% r10) (% rdx) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xda; (* MOV (% rdx) (% r11) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xda; (* ADD (% rdx) (% r11) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xa3; 0xf6; 0xc0; + (* MULX4 (% rax,% r11) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xdb; + (* MULX4 (% r11,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd3; (* ADC (% r11) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc4; (* SUB (% r12) (% rax) *) + 0x4d; 0x19; 0xdd; (* SBB (% r13) (% r11) *) + 0x49; 0x19; 0xd8; (* SBB (% r8) (% rbx) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd3; (* MOV (% r11) (% rdx) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xe2; (* MOV (% rdx) (% r12) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xe2; (* ADD (% rdx) (% r12) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0x9b; 0xf6; 0xc0; + (* MULX4 (% rax,% r12) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xe3; + (* MULX4 (% r12,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd4; (* ADC (% r12) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc5; (* SUB (% r13) (% rax) *) + 0x4d; 0x19; 0xe0; (* SBB (% r8) (% r12) *) + 0x49; 0x19; 0xd9; (* SBB (% r9) (% rbx) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd4; (* MOV (% r12) (% rdx) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xea; (* MOV (% rdx) (% r13) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xea; (* ADD (% rdx) (% r13) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0x93; 0xf6; 0xc0; + (* MULX4 (% rax,% r13) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xeb; + (* MULX4 (% r13,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd5; (* ADC (% r13) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc0; (* SUB (% r8) (% rax) *) + 0x4d; 0x19; 0xe9; (* SBB (% r9) (% r13) *) + 0x49; 0x19; 0xda; (* SBB (% r10) (% rbx) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd5; (* MOV (% r13) (% rdx) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x9c; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (% rbx) (Memop Quadword (%% (rsp,192))) *) + 0x4d; 0x01; 0xc6; (* ADD (% r14) (% r8) *) + 0x4d; 0x11; 0xcf; (* ADC (% r15) (% r9) *) + 0x4c; 0x11; 0xd1; (* ADC (% rcx) (% r10) *) + 0x4c; 0x11; 0xdb; (* ADC (% rbx) (% r11) *) + 0x4c; 0x11; 0xe5; (* ADC (% rbp) (% r12) *) + 0x4c; 0x11; 0xef; (* ADC (% rdi) (% r13) *) + 0x41; 0xb8; 0x00; 0x00; 0x00; 0x00; + (* MOV (% r8d) (Imm32 (word 0)) *) + 0x4d; 0x11; 0xc0; (* ADC (% r8) (% r8) *) + 0x4d; 0x31; 0xdb; (* XOR (% r11) (% r11) *) + 0x4d; 0x31; 0xe4; (* XOR (% r12) (% r12) *) + 0x4d; 0x31; 0xed; (* XOR (% r13) (% r13) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0x4c; 0x01; 0xf0; (* ADD (% rax) (% r14) *) + 0x41; 0xb9; 0xff; 0xff; 0xff; 0xff; + (* MOV (% r9d) (Imm32 (word 4294967295)) *) + 0x4d; 0x11; 0xf9; (* ADC (% r9) (% r15) *) + 0x41; 0xba; 0x01; 0x00; 0x00; 0x00; + (* MOV (% r10d) (Imm32 (word 1)) *) + 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x49; 0x11; 0xec; (* ADC (% r12) (% rbp) *) + 0x49; 0x11; 0xfd; (* ADC (% r13) (% rdi) *) + 0x49; 0x83; 0xd0; 0x00; (* ADC (% r8) (Imm8 (word 0)) *) + 0x4c; 0x0f; 0x45; 0xf0; (* CMOVNE (% r14) (% rax) *) + 0x4d; 0x0f; 0x45; 0xf9; (* CMOVNE (% r15) (% r9) *) + 0x49; 0x0f; 0x45; 0xca; (* CMOVNE (% rcx) (% r10) *) + 0x49; 0x0f; 0x45; 0xdb; (* CMOVNE (% rbx) (% r11) *) + 0x49; 0x0f; 0x45; 0xec; (* CMOVNE (% rbp) (% r12) *) + 0x49; 0x0f; 0x45; 0xfd; (* CMOVNE (% rdi) (% r13) *) + 0x4c; 0x89; 0xb4; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,192))) (% r14) *) + 0x4c; 0x89; 0xbc; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,200))) (% r15) *) + 0x48; 0x89; 0x8c; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,208))) (% rcx) *) + 0x48; 0x89; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,216))) (% rbx) *) + 0x48; 0x89; 0xac; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,224))) (% rbp) *) + 0x48; 0x89; 0xbc; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,232))) (% rdi) *) + 0x48; 0x8b; 0xbc; 0x24; 0x50; 0x01; 0x00; 0x00; + (* MOV (% rdi) (Memop Quadword (%% (rsp,336))) *) + 0x48; 0x8b; 0x84; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,240))) *) + 0x48; 0x2b; 0x44; 0x24; 0x30; + (* SUB (% rax) (Memop Quadword (%% (rsp,48))) *) + 0x48; 0x8b; 0x94; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,248))) *) + 0x48; 0x1b; 0x54; 0x24; 0x38; + (* SBB (% rdx) (Memop Quadword (%% (rsp,56))) *) + 0x4c; 0x8b; 0x84; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MOV (% r8) (Memop Quadword (%% (rsp,256))) *) + 0x4c; 0x1b; 0x44; 0x24; 0x40; + (* SBB (% r8) (Memop Quadword (%% (rsp,64))) *) + 0x4c; 0x8b; 0x8c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MOV (% r9) (Memop Quadword (%% (rsp,264))) *) + 0x4c; 0x1b; 0x4c; 0x24; 0x48; + (* SBB (% r9) (Memop Quadword (%% (rsp,72))) *) + 0x4c; 0x8b; 0x94; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MOV (% r10) (Memop Quadword (%% (rsp,272))) *) + 0x4c; 0x1b; 0x54; 0x24; 0x50; + (* SBB (% r10) (Memop Quadword (%% (rsp,80))) *) + 0x4c; 0x8b; 0x9c; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MOV (% r11) (Memop Quadword (%% (rsp,280))) *) + 0x4c; 0x1b; 0x5c; 0x24; 0x58; + (* SBB (% r11) (Memop Quadword (%% (rsp,88))) *) + 0x48; 0x19; 0xc9; (* SBB (% rcx) (% rcx) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0x48; 0x21; 0xd9; (* AND (% rcx) (% rbx) *) + 0x48; 0x31; 0xdb; (* XOR (% rbx) (% rbx) *) + 0x48; 0x29; 0xcb; (* SUB (% rbx) (% rcx) *) + 0x48; 0x29; 0xd8; (* SUB (% rax) (% rbx) *) + 0x48; 0x89; 0x47; 0x60; (* MOV (Memop Quadword (%% (rdi,96))) (% rax) *) + 0x48; 0x19; 0xca; (* SBB (% rdx) (% rcx) *) + 0x48; 0x89; 0x57; 0x68; (* MOV (Memop Quadword (%% (rdi,104))) (% rdx) *) + 0x48; 0x19; 0xc0; (* SBB (% rax) (% rax) *) + 0x48; 0x21; 0xd9; (* AND (% rcx) (% rbx) *) + 0x48; 0xf7; 0xd8; (* NEG (% rax) *) + 0x49; 0x19; 0xc8; (* SBB (% r8) (% rcx) *) + 0x4c; 0x89; 0x47; 0x70; (* MOV (Memop Quadword (%% (rdi,112))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x4f; 0x78; (* MOV (Memop Quadword (%% (rdi,120))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x97; 0x80; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rdi,128))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x9f; 0x88; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rdi,136))) (% r11) *) + 0x48; 0x8b; 0x54; 0x24; 0x60; + (* MOV (% rdx) (Memop Quadword (%% (rsp,96))) *) + 0x45; 0x31; 0xff; (* XOR (% r15d) (% r15d) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x8c; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,288))) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x94; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,296))) *) + 0x49; 0x01; 0xd9; (* ADD (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x9c; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,304))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xa4; 0x24; 0x38; 0x01; 0x00; 0x00; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,312))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xac; 0x24; 0x40; 0x01; 0x00; 0x00; + (* MULX4 (% r13,% rbx) (% rdx,Memop Quadword (%% (rsp,320))) *) + 0x49; 0x11; 0xdc; (* ADC (% r12) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xb4; 0x24; 0x48; 0x01; 0x00; 0x00; + (* MULX4 (% r14,% rbx) (% rdx,Memop Quadword (%% (rsp,328))) *) + 0x49; 0x11; 0xdd; (* ADC (% r13) (% rbx) *) + 0x4d; 0x11; 0xfe; (* ADC (% r14) (% r15) *) + 0x4c; 0x89; 0xc2; (* MOV (% rdx) (% r8) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xc2; (* ADD (% rdx) (% r8) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xbb; 0xf6; 0xdb; + (* MULX4 (% rbx,% r8) (% rdx,% rbx) *) + 0x4c; 0x11; 0xc0; (* ADC (% rax) (% r8) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc1; (* SUB (% r9) (% rax) *) + 0x49; 0x19; 0xda; (* SBB (% r10) (% rbx) *) + 0x49; 0x19; 0xeb; (* SBB (% r11) (% rbp) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd6; (* ADD (% r14) (% rdx) *) + 0x49; 0x83; 0xd7; 0x00; (* ADC (% r15) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x54; 0x24; 0x68; + (* MOV (% rdx) (Memop Quadword (%% (rsp,104))) *) + 0x45; 0x31; 0xc0; (* XOR (% r8d) (% r8d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,288))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,296))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,304))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x38; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,312))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x40; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,320))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf8; + (* ADOX (% r15) (% r8) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x48; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,328))) *) + 0x49; 0x11; 0xc6; (* ADC (% r14) (% rax) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x4d; 0x11; 0xc0; (* ADC (% r8) (% r8) *) + 0x4c; 0x89; 0xca; (* MOV (% rdx) (% r9) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xca; (* ADD (% rdx) (% r9) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xb3; 0xf6; 0xdb; + (* MULX4 (% rbx,% r9) (% rdx,% rbx) *) + 0x4c; 0x11; 0xc8; (* ADC (% rax) (% r9) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc2; (* SUB (% r10) (% rax) *) + 0x49; 0x19; 0xdb; (* SBB (% r11) (% rbx) *) + 0x49; 0x19; 0xec; (* SBB (% r12) (% rbp) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd7; (* ADD (% r15) (% rdx) *) + 0x49; 0x83; 0xd0; 0x00; (* ADC (% r8) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x54; 0x24; 0x70; + (* MOV (% rdx) (Memop Quadword (%% (rsp,112))) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,288))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,296))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,304))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x38; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,312))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x40; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,320))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xc1; + (* ADOX (% r8) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x48; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,328))) *) + 0x49; 0x11; 0xc7; (* ADC (% r15) (% rax) *) + 0x49; 0x11; 0xd8; (* ADC (% r8) (% rbx) *) + 0x4d; 0x11; 0xc9; (* ADC (% r9) (% r9) *) + 0x4c; 0x89; 0xd2; (* MOV (% rdx) (% r10) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xd2; (* ADD (% rdx) (% r10) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xab; 0xf6; 0xdb; + (* MULX4 (% rbx,% r10) (% rdx,% rbx) *) + 0x4c; 0x11; 0xd0; (* ADC (% rax) (% r10) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc3; (* SUB (% r11) (% rax) *) + 0x49; 0x19; 0xdc; (* SBB (% r12) (% rbx) *) + 0x49; 0x19; 0xed; (* SBB (% r13) (% rbp) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd0; (* ADD (% r8) (% rdx) *) + 0x49; 0x83; 0xd1; 0x00; (* ADC (% r9) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x54; 0x24; 0x78; + (* MOV (% rdx) (Memop Quadword (%% (rsp,120))) *) + 0x45; 0x31; 0xd2; (* XOR (% r10d) (% r10d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,288))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,296))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,304))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x38; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,312))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x40; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,320))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xca; + (* ADOX (% r9) (% r10) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x48; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,328))) *) + 0x49; 0x11; 0xc0; (* ADC (% r8) (% rax) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0x4d; 0x11; 0xd2; (* ADC (% r10) (% r10) *) + 0x4c; 0x89; 0xda; (* MOV (% rdx) (% r11) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xda; (* ADD (% rdx) (% r11) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xa3; 0xf6; 0xdb; + (* MULX4 (% rbx,% r11) (% rdx,% rbx) *) + 0x4c; 0x11; 0xd8; (* ADC (% rax) (% r11) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc4; (* SUB (% r12) (% rax) *) + 0x49; 0x19; 0xdd; (* SBB (% r13) (% rbx) *) + 0x49; 0x19; 0xee; (* SBB (% r14) (% rbp) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd1; (* ADD (% r9) (% rdx) *) + 0x49; 0x83; 0xd2; 0x00; (* ADC (% r10) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x94; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,128))) *) + 0x45; 0x31; 0xdb; (* XOR (% r11d) (% r11d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,288))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,296))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,304))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x38; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,312))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x40; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,320))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x48; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,328))) *) + 0x49; 0x11; 0xc1; (* ADC (% r9) (% rax) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0x4d; 0x11; 0xdb; (* ADC (% r11) (% r11) *) + 0x4c; 0x89; 0xe2; (* MOV (% rdx) (% r12) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xe2; (* ADD (% rdx) (% r12) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0x9b; 0xf6; 0xdb; + (* MULX4 (% rbx,% r12) (% rdx,% rbx) *) + 0x4c; 0x11; 0xe0; (* ADC (% rax) (% r12) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc5; (* SUB (% r13) (% rax) *) + 0x49; 0x19; 0xde; (* SBB (% r14) (% rbx) *) + 0x49; 0x19; 0xef; (* SBB (% r15) (% rbp) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd2; (* ADD (% r10) (% rdx) *) + 0x49; 0x83; 0xd3; 0x00; (* ADC (% r11) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x94; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,136))) *) + 0x45; 0x31; 0xe4; (* XOR (% r12d) (% r12d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,288))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,296))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,304))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x38; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,312))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x40; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,320))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xdc; + (* ADOX (% r11) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x48; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,328))) *) + 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x4d; 0x11; 0xe4; (* ADC (% r12) (% r12) *) + 0x4c; 0x89; 0xea; (* MOV (% rdx) (% r13) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xea; (* ADD (% rdx) (% r13) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0x93; 0xf6; 0xdb; + (* MULX4 (% rbx,% r13) (% rdx,% rbx) *) + 0x4c; 0x11; 0xe8; (* ADC (% rax) (% r13) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc6; (* SUB (% r14) (% rax) *) + 0x49; 0x19; 0xdf; (* SBB (% r15) (% rbx) *) + 0x49; 0x19; 0xe8; (* SBB (% r8) (% rbp) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd3; (* ADD (% r11) (% rdx) *) + 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) + 0x31; 0xd2; (* XOR (% edx) (% edx) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x45; 0x31; 0xed; (* XOR (% r13d) (% r13d) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0x4c; 0x01; 0xf0; (* ADD (% rax) (% r14) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0x4c; 0x11; 0xfb; (* ADC (% rbx) (% r15) *) + 0xb9; 0x01; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 1)) *) + 0x4c; 0x11; 0xc1; (* ADC (% rcx) (% r8) *) + 0x4c; 0x11; 0xca; (* ADC (% rdx) (% r9) *) + 0x4c; 0x11; 0xd5; (* ADC (% rbp) (% r10) *) + 0x4d; 0x11; 0xdd; (* ADC (% r13) (% r11) *) + 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) + 0x4c; 0x0f; 0x45; 0xf0; (* CMOVNE (% r14) (% rax) *) + 0x4c; 0x0f; 0x45; 0xfb; (* CMOVNE (% r15) (% rbx) *) + 0x4c; 0x0f; 0x45; 0xc1; (* CMOVNE (% r8) (% rcx) *) + 0x4c; 0x0f; 0x45; 0xca; (* CMOVNE (% r9) (% rdx) *) + 0x4c; 0x0f; 0x45; 0xd5; (* CMOVNE (% r10) (% rbp) *) + 0x4d; 0x0f; 0x45; 0xdd; (* CMOVNE (% r11) (% r13) *) + 0x4c; 0x89; 0xb4; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,240))) (% r14) *) + 0x4c; 0x89; 0xbc; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,248))) (% r15) *) + 0x4c; 0x89; 0x84; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,256))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,264))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,272))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,280))) (% r11) *) + 0x48; 0x8b; 0x94; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,184))) *) + 0x49; 0x89; 0xd5; (* MOV (% r13) (% rdx) *) + 0x48; 0xc1; 0xea; 0x3e; (* SHR (% rdx) (Imm8 (word 62)) *) + 0x4c; 0x8b; 0xa4; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (% r12) (Memop Quadword (%% (rsp,176))) *) + 0x4d; 0x0f; 0xa4; 0xe5; 0x02; + (* SHLD (% r13) (% r12) (Imm8 (word 2)) *) + 0x4c; 0x8b; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (% r11) (Memop Quadword (%% (rsp,168))) *) + 0x4d; 0x0f; 0xa4; 0xdc; 0x02; + (* SHLD (% r12) (% r11) (Imm8 (word 2)) *) + 0x4c; 0x8b; 0x94; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (% r10) (Memop Quadword (%% (rsp,160))) *) + 0x4d; 0x0f; 0xa4; 0xd3; 0x02; + (* SHLD (% r11) (% r10) (Imm8 (word 2)) *) + 0x4c; 0x8b; 0x8c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (% r9) (Memop Quadword (%% (rsp,152))) *) + 0x4d; 0x0f; 0xa4; 0xca; 0x02; + (* SHLD (% r10) (% r9) (Imm8 (word 2)) *) + 0x4c; 0x8b; 0x84; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (% r8) (Memop Quadword (%% (rsp,144))) *) + 0x4d; 0x0f; 0xa4; 0xc1; 0x02; + (* SHLD (% r9) (% r8) (Imm8 (word 2)) *) + 0x49; 0xc1; 0xe0; 0x02; (* SHL (% r8) (Imm8 (word 2)) *) + 0x48; 0x83; 0xc2; 0x01; (* ADD (% rdx) (Imm8 (word 1)) *) + 0x4c; 0x2b; 0x84; 0x24; 0x20; 0x01; 0x00; 0x00; + (* SUB (% r8) (Memop Quadword (%% (rsp,288))) *) + 0x4c; 0x1b; 0x8c; 0x24; 0x28; 0x01; 0x00; 0x00; + (* SBB (% r9) (Memop Quadword (%% (rsp,296))) *) + 0x4c; 0x1b; 0x94; 0x24; 0x30; 0x01; 0x00; 0x00; + (* SBB (% r10) (Memop Quadword (%% (rsp,304))) *) + 0x4c; 0x1b; 0x9c; 0x24; 0x38; 0x01; 0x00; 0x00; + (* SBB (% r11) (Memop Quadword (%% (rsp,312))) *) + 0x4c; 0x1b; 0xa4; 0x24; 0x40; 0x01; 0x00; 0x00; + (* SBB (% r12) (Memop Quadword (%% (rsp,320))) *) + 0x4c; 0x1b; 0xac; 0x24; 0x48; 0x01; 0x00; 0x00; + (* SBB (% r13) (Memop Quadword (%% (rsp,328))) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x48; 0x31; 0xc9; (* XOR (% rcx) (% rcx) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xc8; + (* MULX4 (% rcx,% rax) (% rdx,% rax) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc9; + (* ADOX (% r9) (% rcx) *) + 0xb8; 0xff; 0xff; 0xff; 0xff; + (* MOV (% eax) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xc8; + (* MULX4 (% rcx,% rax) (% rdx,% rax) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd1; + (* ADOX (% r10) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd2; + (* ADCX (% r10) (% rdx) *) + 0xb8; 0x00; 0x00; 0x00; 0x00; + (* MOV (% eax) (Imm32 (word 0)) *) + 0xb9; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 0)) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADOX (% rax) (% rax) *) + 0x49; 0x11; 0xc3; (* ADC (% r11) (% rax) *) + 0x49; 0x11; 0xcc; (* ADC (% r12) (% rcx) *) + 0x49; 0x11; 0xcd; (* ADC (% r13) (% rcx) *) + 0x48; 0x11; 0xc9; (* ADC (% rcx) (% rcx) *) + 0x48; 0x83; 0xe9; 0x01; (* SUB (% rcx) (Imm8 (word 1)) *) + 0xba; 0xff; 0xff; 0xff; 0xff; + (* MOV (% edx) (Imm32 (word 4294967295)) *) + 0x48; 0x31; 0xc0; (* XOR (% rax) (% rax) *) + 0x48; 0x21; 0xca; (* AND (% rdx) (% rcx) *) + 0x48; 0x29; 0xd0; (* SUB (% rax) (% rdx) *) + 0x48; 0x83; 0xe1; 0x01; (* AND (% rcx) (Imm8 (word 1)) *) + 0x49; 0x29; 0xc0; (* SUB (% r8) (% rax) *) + 0x4c; 0x89; 0x07; (* MOV (Memop Quadword (%% (rdi,0))) (% r8) *) + 0x49; 0x19; 0xd1; (* SBB (% r9) (% rdx) *) + 0x4c; 0x89; 0x4f; 0x08; (* MOV (Memop Quadword (%% (rdi,8))) (% r9) *) + 0x49; 0x19; 0xca; (* SBB (% r10) (% rcx) *) + 0x4c; 0x89; 0x57; 0x10; (* MOV (Memop Quadword (%% (rdi,16))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x5f; 0x18; (* MOV (Memop Quadword (%% (rdi,24))) (% r11) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x67; 0x20; (* MOV (Memop Quadword (%% (rdi,32))) (% r12) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x6f; 0x28; (* MOV (Memop Quadword (%% (rdi,40))) (% r13) *) + 0x49; 0xb8; 0xff; 0xff; 0xff; 0xff; 0x00; 0x00; 0x00; 0x00; + (* MOV (% r8) (Imm64 (word 4294967295)) *) + 0x4c; 0x2b; 0x84; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* SUB (% r8) (Memop Quadword (%% (rsp,192))) *) + 0x49; 0xb9; 0x00; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% r9) (Imm64 (word 18446744069414584320)) *) + 0x4c; 0x1b; 0x8c; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* SBB (% r9) (Memop Quadword (%% (rsp,200))) *) + 0x49; 0xc7; 0xc2; 0xfe; 0xff; 0xff; 0xff; + (* MOV (% r10) (Imm32 (word 4294967294)) *) + 0x4c; 0x1b; 0x94; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* SBB (% r10) (Memop Quadword (%% (rsp,208))) *) + 0x49; 0xc7; 0xc3; 0xff; 0xff; 0xff; 0xff; + (* MOV (% r11) (Imm32 (word 4294967295)) *) + 0x4c; 0x1b; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* SBB (% r11) (Memop Quadword (%% (rsp,216))) *) + 0x49; 0xc7; 0xc4; 0xff; 0xff; 0xff; 0xff; + (* MOV (% r12) (Imm32 (word 4294967295)) *) + 0x4c; 0x1b; 0xa4; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* SBB (% r12) (Memop Quadword (%% (rsp,224))) *) + 0x49; 0xc7; 0xc5; 0xff; 0xff; 0xff; 0xff; + (* MOV (% r13) (Imm32 (word 4294967295)) *) + 0x4c; 0x1b; 0xac; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* SBB (% r13) (Memop Quadword (%% (rsp,232))) *) + 0x4d; 0x89; 0xee; (* MOV (% r14) (% r13) *) + 0x49; 0xc1; 0xee; 0x3d; (* SHR (% r14) (Imm8 (word 61)) *) + 0x4d; 0x0f; 0xa4; 0xe5; 0x03; + (* SHLD (% r13) (% r12) (Imm8 (word 3)) *) + 0x4d; 0x0f; 0xa4; 0xdc; 0x03; + (* SHLD (% r12) (% r11) (Imm8 (word 3)) *) + 0x4d; 0x0f; 0xa4; 0xd3; 0x03; + (* SHLD (% r11) (% r10) (Imm8 (word 3)) *) + 0x4d; 0x0f; 0xa4; 0xca; 0x03; + (* SHLD (% r10) (% r9) (Imm8 (word 3)) *) + 0x4d; 0x0f; 0xa4; 0xc1; 0x03; + (* SHLD (% r9) (% r8) (Imm8 (word 3)) *) + 0x49; 0xc1; 0xe0; 0x03; (* SHL (% r8) (Imm8 (word 3)) *) + 0x49; 0x83; 0xc6; 0x01; (* ADD (% r14) (Imm8 (word 1)) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0xc7; 0xc2; 0x03; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm32 (word 3)) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x94; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% rdx,% rax) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x49; 0x0f; 0x38; 0xf6; 0xd6; + (* ADOX (% rdx) (% r14) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xd1; + (* ADCX (% rdx) (% rcx) *) + 0x48; 0x31; 0xc9; (* XOR (% rcx) (% rcx) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xc8; + (* MULX4 (% rcx,% rax) (% rdx,% rax) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc9; + (* ADOX (% r9) (% rcx) *) + 0xb8; 0xff; 0xff; 0xff; 0xff; + (* MOV (% eax) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xc8; + (* MULX4 (% rcx,% rax) (% rdx,% rax) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd1; + (* ADOX (% r10) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd2; + (* ADCX (% r10) (% rdx) *) + 0xb8; 0x00; 0x00; 0x00; 0x00; + (* MOV (% eax) (Imm32 (word 0)) *) + 0xb9; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 0)) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADOX (% rax) (% rax) *) + 0x49; 0x11; 0xc3; (* ADC (% r11) (% rax) *) + 0x49; 0x11; 0xcc; (* ADC (% r12) (% rcx) *) + 0x49; 0x11; 0xcd; (* ADC (% r13) (% rcx) *) + 0x48; 0x11; 0xc9; (* ADC (% rcx) (% rcx) *) + 0x48; 0x83; 0xe9; 0x01; (* SUB (% rcx) (Imm8 (word 1)) *) + 0xba; 0xff; 0xff; 0xff; 0xff; + (* MOV (% edx) (Imm32 (word 4294967295)) *) + 0x48; 0x31; 0xc0; (* XOR (% rax) (% rax) *) + 0x48; 0x21; 0xca; (* AND (% rdx) (% rcx) *) + 0x48; 0x29; 0xd0; (* SUB (% rax) (% rdx) *) + 0x48; 0x83; 0xe1; 0x01; (* AND (% rcx) (Imm8 (word 1)) *) + 0x49; 0x29; 0xc0; (* SUB (% r8) (% rax) *) + 0x4c; 0x89; 0x47; 0x30; (* MOV (Memop Quadword (%% (rdi,48))) (% r8) *) + 0x49; 0x19; 0xd1; (* SBB (% r9) (% rdx) *) + 0x4c; 0x89; 0x4f; 0x38; (* MOV (Memop Quadword (%% (rdi,56))) (% r9) *) + 0x49; 0x19; 0xca; (* SBB (% r10) (% rcx) *) + 0x4c; 0x89; 0x57; 0x40; (* MOV (Memop Quadword (%% (rdi,64))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x5f; 0x48; (* MOV (Memop Quadword (%% (rdi,72))) (% r11) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x67; 0x50; (* MOV (Memop Quadword (%% (rdi,80))) (% r12) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x6f; 0x58; (* MOV (Memop Quadword (%% (rdi,88))) (% r13) *) + 0x48; 0x81; 0xc4; 0x58; 0x01; 0x00; 0x00; + (* ADD (% rsp) (Imm32 (word 344)) *) + 0x41; 0x5f; (* POP (% r15) *) + 0x41; 0x5e; (* POP (% r14) *) + 0x41; 0x5d; (* POP (% r13) *) + 0x41; 0x5c; (* POP (% r12) *) + 0x5d; (* POP (% rbp) *) + 0x5b; (* POP (% rbx) *) + 0xc3 (* RET *) +];; + +let P384_MONTJDOUBLE_EXEC = X86_MK_CORE_EXEC_RULE p384_montjdouble_mc;; + +(* ------------------------------------------------------------------------- *) +(* Common supporting definitions and lemmas for component proofs. *) +(* ------------------------------------------------------------------------- *) + +let p_384 = new_definition `p_384 = 39402006196394479212279040100143613805079739270465446667948293404245721771496870329047266088258938001861606973112319`;; + +let nistp384 = define + `nistp384 = + (integer_mod_ring p_384, + ring_neg (integer_mod_ring p_384) (&3), + &b_384:int)`;; + +let nistp384_encode = new_definition + `nistp384_encode = montgomery_encode(384,p_384)`;; + +let p384shortishredlemma = prove + (`!n. n <= (2 EXP 64 - 1) * (p_384 - 1) + ==> let q = n DIV 2 EXP 384 + 1 in + q < 2 EXP 64 /\ + q * p_384 <= n + p_384 /\ + n < q * p_384 + p_384`, + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN REWRITE_TAC[p_384] THEN ARITH_TAC);; + +let FORALL_INT_CASES' = prove + (`!P. (!x:int. P x) <=> (!n. P(&n)) /\ (!n. ~(n = 0) ==> P(-- &n))`, + GEN_TAC THEN GEN_REWRITE_TAC LAND_CONV [FORALL_INT_CASES] THEN + MESON_TAC[INT_NEG_EQ_0; INT_OF_NUM_EQ]);; + +let p384shortintredlemma = prove + (`!n. --(&p_384) <= n /\ n <= &5 * &p_384 + ==> let q = (&2 pow 384 + n) div &2 pow 384 in + &0 <= q /\ q < &25 /\ + q < &2 pow 64 /\ + q * &p_384 <= n + &p_384 /\ + n < q * &p_384 + &p_384`, + ONCE_REWRITE_TAC[INT_ARITH `&2 pow 384 + n:int = &1 * &2 pow 384 + n`] THEN + SIMP_TAC[INT_DIV_MUL_ADD; INT_POW_EQ_0; INT_OF_NUM_EQ; ARITH_EQ] THEN + REWRITE_TAC[FORALL_INT_CASES'; INT_DIV_LNEG] THEN + CONV_TAC(ONCE_DEPTH_CONV let_CONV) THEN + REWRITE_TAC[INT_OF_NUM_CLAUSES; INT_OF_NUM_DIV; INT_OF_NUM_REM] THEN + CONJ_TAC THENL [REWRITE_TAC[p_384] THEN ARITH_TAC; ALL_TAC] THEN + X_GEN_TAC `n:num` THEN DISCH_TAC THEN + REWRITE_TAC[INT_LE_NEG2; INT_OF_NUM_CLAUSES] THEN + DISCH_THEN(ASSUME_TAC o CONJUNCT1) THEN + SUBGOAL_THEN `n < 2 EXP 384` ASSUME_TAC THENL + [UNDISCH_TAC `n <= p_384` THEN REWRITE_TAC[p_384] THEN ARITH_TAC; + ASM_SIMP_TAC[DIV_LT; MOD_LT]] THEN + UNDISCH_TAC `n <= p_384` THEN + REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES] THEN CONV_TAC INT_REDUCE_CONV THEN + REWRITE_TAC[p_384] THEN INT_ARITH_TAC);; + +let swlemma = WORD_RULE + `word_add (word_shl x 32) x:int64 = word(4294967297 * val x)`;; + +let mmlemma = prove + (`!h (l:int64) (x:int64). + &2 pow 64 * &h + &(val(l:int64)):real = + &(val(word(4294967297 * val x):int64)) * &18446744069414584321 + ==> &2 pow 64 * &h + &(val(x:int64)):real = + &(val(word(4294967297 * val x):int64)) * &18446744069414584321`, + REPEAT GEN_TAC THEN REWRITE_TAC[REAL_OF_NUM_CLAUSES] THEN + REPEAT STRIP_TAC THEN FIRST_ASSUM(SUBST1_TAC o SYM) THEN + AP_TERM_TAC THEN AP_TERM_TAC THEN + REWRITE_TAC[GSYM VAL_CONG; DIMINDEX_64] THEN FIRST_X_ASSUM(MATCH_MP_TAC o + MATCH_MP (NUMBER_RULE + `p * h + l:num = y ==> (y == x) (mod p) ==> (x == l) (mod p)`)) THEN + REWRITE_TAC[CONG; VAL_WORD; DIMINDEX_64] THEN CONV_TAC MOD_DOWN_CONV THEN + REWRITE_TAC[GSYM CONG] THEN MATCH_MP_TAC(NUMBER_RULE + `(a * b == 1) (mod p) ==> ((a * x) * b == x) (mod p)`) THEN + REWRITE_TAC[CONG] THEN CONV_TAC NUM_REDUCE_CONV);; + +let nintlemma = prove + (`&(num_of_int(x rem &p_384)) = x rem &p_384`, + MATCH_MP_TAC INT_OF_NUM_OF_INT THEN MATCH_MP_TAC INT_REM_POS THEN + REWRITE_TAC[INT_OF_NUM_EQ; p_384] THEN CONV_TAC NUM_REDUCE_CONV);; + +let unilemma0 = prove + (`x = a MOD p_384 ==> x < p_384 /\ &x = &a rem &p_384`, + REWRITE_TAC[INT_OF_NUM_REM; p_384] THEN ARITH_TAC);; + +let unilemma1 = prove + (`&x = a rem &p_384 ==> x < p_384 /\ &x = a rem &p_384`, + SIMP_TAC[GSYM INT_OF_NUM_LT; INT_LT_REM_EQ; p_384] THEN INT_ARITH_TAC);; + +let unilemma2 = prove + (`X = num_of_int(x rem &p_384) ==> X < p_384 /\ &X = x rem &p_384`, + DISCH_THEN SUBST1_TAC THEN + REWRITE_TAC[GSYM INT_OF_NUM_LT; nintlemma; INT_LT_REM_EQ] THEN + REWRITE_TAC[INT_OF_NUM_LT; p_384] THEN CONV_TAC NUM_REDUCE_CONV);; + +let lemont = prove + (`(&i * x * y) rem &p_384 = (&i * x rem &p_384 * y rem &p_384) rem &p_384`, + CONV_TAC INT_REM_DOWN_CONV THEN REWRITE_TAC[]);; + +let pumont = prove + (`(&(inverse_mod p_384 (2 EXP 384)) * + (&2 pow 384 * x) rem &p_384 * (&2 pow 384 * y) rem &p_384) rem &p_384 = + (&2 pow 384 * x * y) rem &p_384`, + CONV_TAC INT_REM_DOWN_CONV THEN REWRITE_TAC[INT_REM_EQ] THEN + MATCH_MP_TAC(INTEGER_RULE + `(i * t:int == &1) (mod p) + ==> (i * (t * x) * (t * y) == t * x * y) (mod p)`) THEN + REWRITE_TAC[GSYM num_congruent; INT_OF_NUM_CLAUSES] THEN + REWRITE_TAC[INVERSE_MOD_LMUL_EQ; COPRIME_REXP; COPRIME_2; p_384] THEN + CONV_TAC NUM_REDUCE_CONV);; + +let silemma = prove + (`(&12 * (e * x) rem p - &9 * (e * y) rem p) rem p = + (e * (&12 * x - &9 * y)) rem p`, + CONV_TAC INT_REM_DOWN_CONV THEN + AP_THM_TAC THEN AP_TERM_TAC THEN INT_ARITH_TAC);; + +let lvs = + ["x_1",[`RSI`; `0`]; + "y_1",[`RSI`; `48`]; + "z_1",[`RSI`; `96`]; + "x_3",[`RDI`; `0`]; + "y_3",[`RDI`; `48`]; + "z_3",[`RDI`; `96`]; + "z2",[`RSP`; `0`]; + "y2",[`RSP`; `48`]; + "x2p",[`RSP`; `96`]; + "xy2",[`RSP`; `144`]; + "y4",[`RSP`; `192`]; + "t2",[`RSP`; `192`]; + "dx2",[`RSP`; `240`]; + "t1",[`RSP`; `240`]; + "d",[`RSP`; `288`]; + "x4p",[`RSP`; `288`]];; + +(* ------------------------------------------------------------------------- *) +(* Instances of montsqr. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_MONTSQR_P384_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE p384_montjdouble_mc) 230 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1. + !a. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) t = a + ==> + nonoverlapping (word pc,0x2d41) (word_add (read p3 t) (word n3),48) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST p384_montjdouble_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) s = + a) + (\s. read RIP s = pcout /\ + (a EXP 2 <= 2 EXP 384 * p_384 + ==> read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 6)) s = + (inverse_mod p_384 (2 EXP 384) * a EXP 2) MOD p_384)) + (MAYCHANGE [RIP; RDI; RAX; RBX; RBP; RCX; RDX; + R8; R9; R10; R11; R12; R13; R14; R15] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 6)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + (*** Globalize the a EXP 2 <= 2 EXP 384 * p_384 assumption ***) + + ASM_CASES_TAC `a EXP 2 <= 2 EXP 384 * p_384` THENL + [ASM_REWRITE_TAC[]; X86_SIM_TAC P384_MONTJDOUBLE_EXEC (1--230)] THEN + ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "x_" o lhand o concl) THEN + + (*** Simulate the main squaring and 6-fold Montgomery reduction ***) + + MAP_EVERY (fun s -> + X86_SINGLE_STEP_TAC P384_MONTJDOUBLE_EXEC s THEN + RULE_ASSUM_TAC(REWRITE_RULE[swlemma]) THEN + TRY(ACCUMULATE_ARITH_TAC s) THEN CLARIFY_TAC) + (statenames "s" (1--205)) THEN + + (*** Do the congruential reasoning on the chosen multipliers ***) + + RULE_ASSUM_TAC(fun th -> try MATCH_MP mmlemma th with Failure _ -> th) THEN + + (*** Derive the main property of the pre-reduced form, which we call t ***) + + ABBREV_TAC + `t = bignum_of_wordlist + [sum_s198; sum_s199; sum_s200; sum_s201; sum_s202; sum_s203; + word (bitval carry_s203)]` THEN + + SUBGOAL_THEN + `t < 2 * p_384 /\ (2 EXP 384 * t == a EXP 2) (mod p_384)` + STRIP_ASSUME_TAC THENL + [RULE_ASSUM_TAC(REWRITE_RULE[VAL_WORD_BITVAL]) THEN + ACCUMULATOR_POP_ASSUM_LIST + (STRIP_ASSUME_TAC o end_itlist CONJ o DECARRY_RULE) THEN + CONJ_TAC THENL + [FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP (ARITH_RULE + `ab <= 2 EXP 384 * p + ==> 2 EXP 384 * t < ab + 2 EXP 384 * p ==> t < 2 * p`)) THEN + MAP_EVERY EXPAND_TAC ["a"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + REWRITE_TAC[p_384; REAL_ARITH `a:real < b + c <=> a - b < c`] THEN + ASM_REWRITE_TAC[VAL_WORD_BITVAL] THEN BOUNDER_TAC[]; + REWRITE_TAC[REAL_CONGRUENCE; p_384] THEN CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["a"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ASM_REWRITE_TAC[VAL_WORD_BITVAL] THEN REAL_INTEGER_TAC]; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Final correction stage ***) + + X86_ACCSTEPS_TAC P384_MONTJDOUBLE_EXEC + [210;212;214;215;216;217] (206--230) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + TRANS_TAC EQ_TRANS `t MOD p_384` THEN CONJ_TAC THENL + [ALL_TAC; + REWRITE_TAC[GSYM CONG] THEN FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP + (NUMBER_RULE + `(e * t == a EXP 2) (mod p) + ==> (e * i == 1) (mod p) ==> (t == i * a EXP 2) (mod p)`)) THEN + REWRITE_TAC[INVERSE_MOD_RMUL_EQ; COPRIME_REXP; COPRIME_2] THEN + REWRITE_TAC[p_384] THEN CONV_TAC NUM_REDUCE_CONV] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC EQUAL_FROM_CONGRUENT_MOD_MOD THEN + MAP_EVERY EXISTS_TAC + [`384`; `if t < p_384 then &t:real else &t - &p_384`] THEN + REPEAT CONJ_TAC THENL + [REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN BOUNDER_TAC[]; + REWRITE_TAC[p_384] THEN ARITH_TAC; + REWRITE_TAC[p_384] THEN ARITH_TAC; + ALL_TAC; + ASM_SIMP_TAC[MOD_CASES] THEN + GEN_REWRITE_TAC LAND_CONV [COND_RAND] THEN + SIMP_TAC[REAL_OF_NUM_SUB; GSYM NOT_LT]] THEN + SUBGOAL_THEN + `~(val(word_add (word(bitval carry_s203)) + (word(bitval carry_s217)):int64) = 0) <=> + p_384 <= t` + SUBST_ALL_TAC THENL + [REWRITE_TAC[VAL_WORD_ADD_CASES; VAL_WORD_BITVAL; DIMINDEX_64] THEN + SIMP_TAC[BITVAL_BOUND; ARITH_RULE + `b <= 1 /\ c <= 1 ==> b + c < 2 EXP 64`] THEN + TRANS_TAC EQ_TRANS `2 EXP 384 <= t + (2 EXP 384 - p_384)` THEN + CONJ_TAC THENL [ALL_TAC; REWRITE_TAC[p_384] THEN ARITH_TAC] THEN + TRANS_TAC EQ_TRANS + `2 EXP 384 + <= 2 EXP 384 * (bitval carry_s203 + bitval carry_s217) + + bignum_of_wordlist + [sum_s210;sum_s212;sum_s214;sum_s215;sum_s216;sum_s217]` THEN + CONJ_TAC THENL + [REWRITE_TAC[TAUT `(~p <=> q) <=> (~p ==> q) /\ (p ==> ~q)`] THEN + CONJ_TAC THENL [ARITH_TAC; DISCH_THEN SUBST1_TAC] THEN + REWRITE_TAC[ADD_CLAUSES; MULT_CLAUSES; NOT_LE] THEN + W(MP_TAC o PART_MATCH lhand + BIGNUM_OF_WORDLIST_BOUND_LENGTH o lhand o snd) THEN + REWRITE_TAC[LENGTH] THEN ARITH_TAC; + AP_TERM_TAC THEN EXPAND_TAC "t" THEN + REWRITE_TAC[p_384; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + CONV_TAC NUM_REDUCE_CONV THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + REWRITE_TAC[VAL_WORD_BITVAL] THEN CONV_TAC REAL_RING]; + REWRITE_TAC[GSYM NOT_LT; COND_SWAP]] THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[] THEN EXPAND_TAC "t" THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist; p_384] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + ASM_REWRITE_TAC[BITVAL_CLAUSES; VAL_WORD_BITVAL] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instances of montmul. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_MONTMUL_P384_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE p384_montjdouble_mc) 263 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1 p2 n2. + !a. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) t = a + ==> + !b. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 6)) t = b + ==> + nonoverlapping (word pc,0x2d41) (word_add (read p3 t) (word n3),48) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST p384_montjdouble_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) s = + a /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 6)) s = + b) + (\s. read RIP s = pcout /\ + (a * b <= 2 EXP 384 * p_384 + ==> read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 6)) s = + (inverse_mod p_384 (2 EXP 384) * a * b) MOD p_384)) + (MAYCHANGE [RIP; RAX; RBP; RBX; RCX; RDX; + R8; R9; R10; R11; R12; R13; R14; R15] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 6)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + (*** Globalize the a * b <= 2 EXP 384 * p_384 assumption ***) + + ASM_CASES_TAC `a * b <= 2 EXP 384 * p_384` THENL + [ASM_REWRITE_TAC[]; X86_SIM_TAC P384_MONTJDOUBLE_EXEC (1--263)] THEN + ENSURES_INIT_TAC "s1" THEN + + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "y_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "x_" o lhand o concl) THEN + + (*** Simulate the main 6-fold multiply-and-Montgomery-reduce block ***) + + MAP_EVERY (fun s -> + X86_SINGLE_STEP_TAC P384_MONTJDOUBLE_EXEC s THEN + RULE_ASSUM_TAC(REWRITE_RULE[swlemma]) THEN + TRY(ACCUMULATE_ARITH_TAC s) THEN CLARIFY_TAC) + (statenames "s" (2--239)) THEN + + (*** Do the congruential reasoning on the chosen multipliers ***) + + RULE_ASSUM_TAC(fun th -> try MATCH_MP mmlemma th with Failure _ -> th) THEN + + (*** Derive the main property of the pre-reduced form, which we call t ***) + + ABBREV_TAC + `t = bignum_of_wordlist + [sum_s232; sum_s233; sum_s234; sum_s235; sum_s236; sum_s238; + sum_s239]` THEN + SUBGOAL_THEN + `t < 2 * p_384 /\ (2 EXP 384 * t == a * b) (mod p_384)` + STRIP_ASSUME_TAC THENL + [RULE_ASSUM_TAC(REWRITE_RULE[VAL_WORD_BITVAL]) THEN + ACCUMULATOR_POP_ASSUM_LIST + (STRIP_ASSUME_TAC o end_itlist CONJ o DECARRY_RULE) THEN + CONJ_TAC THENL + [FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP (ARITH_RULE + `ab <= 2 EXP 384 * p + ==> 2 EXP 384 * t < ab + 2 EXP 384 * p ==> t < 2 * p`)) THEN + MAP_EVERY EXPAND_TAC ["a"; "b"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + REWRITE_TAC[p_384; REAL_ARITH `a:real < b + c <=> a - b < c`] THEN + ASM_REWRITE_TAC[] THEN BOUNDER_TAC[]; + REWRITE_TAC[REAL_CONGRUENCE; p_384] THEN CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["a"; "b"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ASM_REWRITE_TAC[] THEN REAL_INTEGER_TAC]; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** To make bounds reasoning more transparent, recast top as a bit ***) + + MP_TAC(fst(EQ_IMP_RULE(SPEC `val(sum_s239:int64)` NUM_AS_BITVAL_ALT))) THEN + REWRITE_TAC[VAL_EQ_BITVAL] THEN ANTS_TAC THENL + [UNDISCH_TAC `t < 2 * p_384` THEN EXPAND_TAC "t" THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; p_384; bignum_of_wordlist] THEN + REAL_ARITH_TAC; + DISCH_THEN(X_CHOOSE_THEN `topc:bool` SUBST_ALL_TAC)] THEN + + (*** Final correction stage ***) + + X86_ACCSTEPS_TAC P384_MONTJDOUBLE_EXEC + [244;246;248;249;250;251] (240--264) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + TRANS_TAC EQ_TRANS `t MOD p_384` THEN CONJ_TAC THENL + [ALL_TAC; + REWRITE_TAC[GSYM CONG] THEN FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP + (NUMBER_RULE + `(e * t == a * b) (mod p) + ==> (e * i == 1) (mod p) ==> (t == i * a * b) (mod p)`)) THEN + REWRITE_TAC[INVERSE_MOD_RMUL_EQ; COPRIME_REXP; COPRIME_2] THEN + REWRITE_TAC[p_384] THEN CONV_TAC NUM_REDUCE_CONV] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC EQUAL_FROM_CONGRUENT_MOD_MOD THEN + MAP_EVERY EXISTS_TAC + [`384`; `if t < p_384 then &t:real else &t - &p_384`] THEN + REPEAT CONJ_TAC THENL + [REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN BOUNDER_TAC[]; + REWRITE_TAC[p_384] THEN ARITH_TAC; + REWRITE_TAC[p_384] THEN ARITH_TAC; + ALL_TAC; + ASM_SIMP_TAC[MOD_CASES] THEN + GEN_REWRITE_TAC LAND_CONV [COND_RAND] THEN + SIMP_TAC[REAL_OF_NUM_SUB; GSYM NOT_LT]] THEN + SUBGOAL_THEN + `~(val(word_add (word(bitval topc)) + (word(bitval carry_s251)):int64) = 0) <=> + p_384 <= t` + SUBST_ALL_TAC THENL + [REWRITE_TAC[VAL_WORD_ADD_CASES; VAL_WORD_BITVAL; DIMINDEX_64] THEN + SIMP_TAC[BITVAL_BOUND; ARITH_RULE + `b <= 1 /\ c <= 1 ==> b + c < 2 EXP 64`] THEN + TRANS_TAC EQ_TRANS `2 EXP 384 <= t + (2 EXP 384 - p_384)` THEN + CONJ_TAC THENL [ALL_TAC; REWRITE_TAC[p_384] THEN ARITH_TAC] THEN + TRANS_TAC EQ_TRANS + `2 EXP 384 + <= 2 EXP 384 * (bitval topc + bitval carry_s251) + + bignum_of_wordlist + [sum_s244;sum_s246;sum_s248;sum_s249;sum_s250;sum_s251]` THEN + CONJ_TAC THENL + [REWRITE_TAC[TAUT `(~p <=> q) <=> (~p ==> q) /\ (p ==> ~q)`] THEN + CONJ_TAC THENL [ARITH_TAC; DISCH_THEN SUBST1_TAC] THEN + REWRITE_TAC[ADD_CLAUSES; MULT_CLAUSES; NOT_LE] THEN + W(MP_TAC o PART_MATCH lhand + BIGNUM_OF_WORDLIST_BOUND_LENGTH o lhand o snd) THEN + REWRITE_TAC[LENGTH] THEN ARITH_TAC; + AP_TERM_TAC THEN EXPAND_TAC "t" THEN + REWRITE_TAC[p_384; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + CONV_TAC NUM_REDUCE_CONV THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + REWRITE_TAC[VAL_WORD_BITVAL] THEN CONV_TAC REAL_RING]; + REWRITE_TAC[GSYM NOT_LT; COND_SWAP]] THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[] THEN EXPAND_TAC "t" THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist; p_384] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + ASM_REWRITE_TAC[BITVAL_CLAUSES; VAL_WORD_BITVAL] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instances of sub. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_SUB_P384_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE p384_montjdouble_mc) 32 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 6)) t = n + ==> + nonoverlapping (word pc,0x2d41) (word_add (read p3 t) (word n3),48) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST p384_montjdouble_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 6)) s = + n) + (\s. read RIP s = pcout /\ + (m < p_384 /\ n < p_384 + ==> &(read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 6)) s) = (&m - &n) rem &p_384)) + (MAYCHANGE [RIP; RAX; RBX; RCX; RDX; R8; R9; R10; R11] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 6)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "m_" o lhand o concl) THEN + + X86_ACCSTEPS_TAC P384_MONTJDOUBLE_EXEC (1--12) (1--12) THEN + + SUBGOAL_THEN `carry_s12 <=> m < n` SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN EXISTS_TAC `384` THEN + MAP_EVERY EXPAND_TAC ["m"; "n"] THEN REWRITE_TAC[GSYM REAL_OF_NUM_ADD] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_MUL; GSYM REAL_OF_NUM_POW] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ALL_TAC] THEN + + X86_ACCSTEPS_TAC P384_MONTJDOUBLE_EXEC [18;20;25;27;29;31] (13--32) THEN + + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN STRIP_TAC THEN + CONV_TAC(LAND_CONV(RAND_CONV BIGNUM_EXPAND_CONV)) THEN + ASM_REWRITE_TAC[] THEN DISCARD_STATE_TAC "s32" THEN + + CONV_TAC SYM_CONV THEN MATCH_MP_TAC INT_REM_UNIQ THEN + + EXISTS_TAC `--(&(bitval(m < n))):int` THEN REWRITE_TAC[INT_ABS_NUM] THEN + REWRITE_TAC[INT_ARITH `m - n:int = --b * p + z <=> z = b * p + m - n`] THEN + REWRITE_TAC[int_eq; int_le; int_lt] THEN + REWRITE_TAC[int_add_th; int_mul_th; int_of_num_th; int_sub_th] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_ADD; GSYM REAL_OF_NUM_MUL; + GSYM REAL_OF_NUM_POW] THEN + MATCH_MP_TAC(REAL_ARITH + `!t:real. p < t /\ + (&0 <= a /\ a < p) /\ + (&0 <= z /\ z < t) /\ + ((&0 <= z /\ z < t) /\ (&0 <= a /\ a < t) ==> z = a) + ==> z = a /\ &0 <= z /\ z < p`) THEN + EXISTS_TAC `(&2:real) pow 384` THEN + + CONJ_TAC THENL [REWRITE_TAC[p_384] THEN REAL_ARITH_TAC; ALL_TAC] THEN + CONJ_TAC THENL + [MAP_EVERY UNDISCH_TAC [`m < p_384`; `n < p_384`] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_LT] THEN + ASM_CASES_TAC `&m:real < &n` THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + POP_ASSUM MP_TAC THEN REWRITE_TAC[p_384] THEN REAL_ARITH_TAC; + ALL_TAC] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; STRIP_TAC] THEN + + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`384`; `&0:real`] THEN + ASM_REWRITE_TAC[] THEN + CONJ_TAC THENL [REAL_INTEGER_TAC; ALL_TAC] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + REWRITE_TAC[WORD_AND_MASK] THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC WORD_REDUCE_CONV THEN + REWRITE_TAC[WORD_BITVAL_EQ_0; WORD_NEG_EQ_0] THEN + MAP_EVERY EXPAND_TAC ["m"; "n"] THEN REWRITE_TAC[GSYM REAL_OF_NUM_ADD] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_MUL; GSYM REAL_OF_NUM_POW; p_384] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instances of weakadd *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_WEAKADD_P384_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE p384_montjdouble_mc) 31 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 6)) t = n + ==> + nonoverlapping (word pc,0x2d41) (word_add (read p3 t) (word n3),48) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST p384_montjdouble_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 6)) s = + n) + (\s. read RIP s = pcout /\ + (m + n < 2 EXP 384 + p_384 + ==> read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 6)) s < 2 EXP 384 /\ + (&(read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 6)) s):int == &m + &n) (mod &p_384))) + (MAYCHANGE [RIP; RAX; RBX; RCX; RDX; R8; R9; R10; R11; RBP] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 6)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "m_" o lhand o concl) THEN + X86_ACCSTEPS_TAC P384_MONTJDOUBLE_EXEC (1--12) (1--12) THEN + SUBGOAL_THEN `carry_s12 <=> 2 EXP 384 <= m + n` SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LE THEN EXISTS_TAC `384` THEN + MAP_EVERY EXPAND_TAC ["m"; "n"] THEN REWRITE_TAC[GSYM REAL_OF_NUM_ADD] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_MUL; GSYM REAL_OF_NUM_POW] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ALL_TAC] THEN + X86_ACCSTEPS_TAC P384_MONTJDOUBLE_EXEC [20;22;24;26;28;30] (13--31) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN STRIP_TAC THEN + MATCH_MP_TAC(MESON[] + `!x. (x < 2 EXP 384 /\ P x) /\ y = x ==> y < 2 EXP 384 /\ P y`) THEN + EXISTS_TAC `if m + n < 2 EXP 384 then m + n else (m + n) - p_384` THEN + REPEAT CONJ_TAC THENL + [UNDISCH_TAC `m + n < 2 EXP 384 + p_384` THEN + REWRITE_TAC[p_384] THEN ARITH_TAC; + COND_CASES_TAC THEN + ASM_REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES; INT_CONG_REFL] THEN + MATCH_MP_TAC(INTEGER_RULE `y - p:int = x ==> (x == y) (mod p)`) THEN + REWRITE_TAC[INT_OF_NUM_CLAUSES] THEN MATCH_MP_TAC INT_OF_NUM_SUB THEN + FIRST_X_ASSUM(MP_TAC o GEN_REWRITE_RULE I [NOT_LT]) THEN + REWRITE_TAC[p_384] THEN ARITH_TAC; + ALL_TAC] THEN + RULE_ASSUM_TAC(REWRITE_RULE[SYM(NUM_REDUCE_CONV `2 EXP 384`)]) THEN + ABBREV_TAC `b <=> 2 EXP 384 <= m + n` THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN + ASM_REWRITE_TAC[GSYM NOT_LE] THEN DISCARD_STATE_TAC "s27" THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; COND_SWAP] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`384`; `&0:real`] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN CONJ_TAC THENL + [REWRITE_TAC[REAL_OF_NUM_CLAUSES] THEN + UNDISCH_TAC `m + n < 2 EXP 384 + p_384` THEN + EXPAND_TAC "b" THEN ARITH_TAC; + REWRITE_TAC[INTEGER_CLOSED]] THEN + SUBGOAL_THEN + `&(if b then (m + n) - p_384 else m + n):real = + if b then (&m + &n) - &p_384 else &m + &n` + SUBST1_TAC THENL + [COND_CASES_TAC THEN ASM_REWRITE_TAC[REAL_OF_NUM_CLAUSES] THEN + MATCH_MP_TAC(GSYM REAL_OF_NUM_SUB) THEN + UNDISCH_TAC `b:bool` THEN EXPAND_TAC "b" THEN + REWRITE_TAC[p_384] THEN ARITH_TAC; + ALL_TAC] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC WORD_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["m"; "n"] THEN REWRITE_TAC[GSYM REAL_OF_NUM_ADD] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_MUL; GSYM REAL_OF_NUM_POW; p_384] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + CONV_TAC(RAND_CONV REAL_POLY_CONV) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instances of add. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_ADD_P384_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE p384_montjdouble_mc) 40 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 6)) t = n + ==> + nonoverlapping (word pc,0x2d41) (word_add (read p3 t) (word n3),48) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST p384_montjdouble_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 6)) s = + n) + (\s. read RIP s = pcout /\ + (m < p_384 /\ n < p_384 + ==> read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 6)) s = (m + n) MOD p_384)) + (MAYCHANGE [RIP; RAX; RBX; RBP; RCX; RDX; R8; R9; R10; R11] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 6)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "m_" o lhand o concl) THEN + + X86_ACCSTEPS_TAC P384_MONTJDOUBLE_EXEC (1--23) (1--23) THEN + X86_ACCSTEPS_TAC P384_MONTJDOUBLE_EXEC [29;31;33;35;37;39] (24--40) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN STRIP_TAC THEN + + SUBGOAL_THEN + `sum_s23:int64 = word_neg(word(bitval(m + n < p_384))) /\ + (carry_s23 <=> ~(m + n < p_384))` + (CONJUNCTS_THEN SUBST_ALL_TAC) THENL + [ONCE_REWRITE_TAC[TAUT `(p <=> ~q) <=> (~p <=> q)`] THEN + MATCH_MP_TAC FLAG_AND_MASK_FROM_CARRY_LT THEN + EXISTS_TAC `384` THEN REWRITE_TAC[GSYM REAL_OF_NUM_MUL] THEN + GEN_REWRITE_TAC I [CONJ_ASSOC] THEN CONJ_TAC THENL + [MAP_EVERY UNDISCH_TAC [`m < p_384`; `n < p_384`] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; p_384] THEN REAL_ARITH_TAC; + MAP_EVERY EXPAND_TAC ["m"; "n"] THEN + REWRITE_TAC[p_384; REAL_BITVAL_NOT; GSYM REAL_OF_NUM_CLAUSES] THEN + RULE_ASSUM_TAC(REWRITE_RULE[VAL_WORD_BITVAL; REAL_BITVAL_NOT]) THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]]; + ALL_TAC] THEN + + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN + ASM_REWRITE_TAC[] THEN DISCARD_STATE_TAC "s40" THEN + ASM_SIMP_TAC[MOD_CASES; ARITH_RULE `m < p /\ n < p ==> m + n < 2 * p`] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_EQ; GSYM REAL_OF_NUM_ADD] THEN + ONCE_REWRITE_TAC[COND_RAND] THEN + SIMP_TAC[GSYM REAL_OF_NUM_SUB; GSYM NOT_LT] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_MUL; GSYM REAL_OF_NUM_POW] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`384`; `&0:real`] THEN ASM_REWRITE_TAC[] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN CONJ_TAC THENL + [MAP_EVERY UNDISCH_TAC [`m < p_384`; `n < p_384`] THEN + REWRITE_TAC[p_384; GSYM REAL_OF_NUM_CLAUSES] THEN REAL_ARITH_TAC; + ALL_TAC] THEN + CONJ_TAC THENL [REAL_INTEGER_TAC; ALL_TAC] THEN + MAP_EVERY EXPAND_TAC ["m"; "n"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_ADD] THEN ASM_REWRITE_TAC[] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_MUL; GSYM REAL_OF_NUM_POW] THEN + + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ) THEN + REWRITE_TAC[WORD_BITVAL_EQ_0; WORD_NEG_EQ_0] THEN + COND_CASES_TAC THEN + ASM_REWRITE_TAC[VAL_WORD_BITVAL; BITVAL_CLAUSES; REAL_BITVAL_NOT] THEN + CONV_TAC WORD_REDUCE_CONV THENL + [ALL_TAC; + REWRITE_TAC[REAL_ARITH + `&2 pow 64 * (&1 - &0) + &0:real = b + &18446744073709551615 + c <=> + c = &1 - b`] THEN + ASM_CASES_TAC `&(bitval carry_s22):real = &1 - &(bitval carry_s12)` THEN + ASM_REWRITE_TAC[]] THEN + REWRITE_TAC[p_384] THEN + DISCH_THEN(MP_TAC o end_itlist CONJ o DESUM_RULE o CONJUNCTS) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instance (12,9) of cmsub (the only one used in this code). *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_CMSUBC9_P384_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE p384_montjdouble_mc) 81 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 6)) t = n + ==> + nonoverlapping (word pc,0x2d41) (word_add (read p3 t) (word n3),48) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST p384_montjdouble_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 6)) s = + n) + (\s. read RIP s = pcout /\ + (n <= p_384 + ==> &(read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 6)) s) = (&12 * &m - &9 * &n) rem &p_384)) + (MAYCHANGE [RIP; RAX; RBX; RCX; RDX; R8; R9; + R10; R11; R12; R13; R14] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 6)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + ASM_CASES_TAC `n <= p_384` THENL + [ASM_REWRITE_TAC[]; X86_SIM_TAC P384_MONTJDOUBLE_EXEC (1--81)] THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "m_" o lhand o concl) THEN + + SUBGOAL_THEN + `(&12 * &m - &9 * &n) rem &p_384 = + (&12 * &m + &9 * (&p_384 - &n)) rem &p_384` + SUBST1_TAC THENL + [REWRITE_TAC[INT_REM_EQ] THEN CONV_TAC INTEGER_RULE; + ASM_SIMP_TAC[INT_OF_NUM_CLAUSES; INT_OF_NUM_SUB; INT_OF_NUM_REM]] THEN + + (*** Initial negation of n ***) + + X86_ACCSTEPS_TAC P384_MONTJDOUBLE_EXEC (1--12) (1--12) THEN + ABBREV_TAC + `n' = bignum_of_wordlist + [sum_s2; sum_s4; sum_s6; sum_s8; sum_s10; sum_s12]` THEN + SUBGOAL_THEN `p_384 - n = n'` SUBST1_TAC THENL + [ASM_SIMP_TAC[GSYM REAL_OF_NUM_CLAUSES; GSYM REAL_OF_NUM_SUB] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`384`; `&0:real`] THEN CONJ_TAC THENL + [UNDISCH_TAC `n <= p_384` THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; p_384] THEN REAL_ARITH_TAC; + MAP_EVERY EXPAND_TAC ["n"; "n'"] THEN + REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES]] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; REWRITE_TAC[INTEGER_CLOSED]] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th; p_384]) THEN REAL_INTEGER_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Instantiate the quotient approximation lemma ***) + + MP_TAC(SPEC `12 * m + 9 * n'` p384shortishredlemma) THEN ANTS_TAC THENL + [MAP_EVERY EXPAND_TAC ["m"; "n'"] THEN REWRITE_TAC[p_384] THEN + CONV_TAC NUM_REDUCE_CONV THEN BOUNDER_TAC[]; + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN STRIP_TAC] THEN + RULE_ASSUM_TAC(REWRITE_RULE[ARITH_RULE + `x DIV 2 EXP 384 + 1 = (2 EXP 384 + x) DIV 2 EXP 384`]) THEN + + (*** Main sum of products computation +1 ***) + + X86_ACCSTEPS_TAC P384_MONTJDOUBLE_EXEC (13--46) (13--46) THEN + ABBREV_TAC `ca = bignum_of_wordlist + [sum_s29; sum_s32; sum_s35; sum_s38; sum_s41; sum_s44; sum_s46]` THEN + SUBGOAL_THEN `2 EXP 384 + 12 * m + 9 * n'= ca` MP_TAC THENL + [MAP_EVERY EXPAND_TAC ["m"; "n'"; "ca"] THEN + REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_ARITH_TAC; + DISCH_THEN(fun th -> POP_ASSUM MP_TAC THEN + SUBST_ALL_TAC th THEN ASSUME_TAC th THEN DISCH_TAC) THEN + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Quotient estimate is just the top word after the +1 ***) + + ABBREV_TAC `q:int64 = sum_s46` THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o + check (free_in `sum_s46:int64` o concl))) THEN + SUBGOAL_THEN `ca DIV 2 EXP 384 = val(q:int64)` SUBST_ALL_TAC THENL + [EXPAND_TAC "ca" THEN CONV_TAC(LAND_CONV BIGNUM_OF_WORDLIST_DIV_CONV) THEN + REFL_TAC; + ALL_TAC] THEN + + (*** The rest of the computation ***) + + X86_ACCSTEPS_TAC P384_MONTJDOUBLE_EXEC + [49;50;51;53;54;55;56;59;60;61;62; 70;72;74;76;78;80] + (47--81) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC MOD_UNIQ_BALANCED_REAL THEN + MAP_EVERY EXISTS_TAC [`val(q:int64)`; `384`] THEN ASM_REWRITE_TAC[] THEN + CONJ_TAC THENL [REWRITE_TAC[p_384] THEN ARITH_TAC; ALL_TAC] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN + + (*** Comparison computation and then the rest is easy ***) + + SUBGOAL_THEN `12 * m + 9 * n' < val(q:int64) * p_384 <=> ~carry_s62` + SUBST1_TAC THENL + [ONCE_REWRITE_TAC[ARITH_RULE `a < b <=> 2 EXP 384 + a < b + 2 EXP 384`] THEN + ASM_REWRITE_TAC[] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN + EXISTS_TAC `384` THEN EXPAND_TAC "ca" THEN + REWRITE_TAC[p_384; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + REWRITE_TAC[REAL_BITVAL_NOT] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ONCE_REWRITE_TAC[REAL_ARITH + `&(12 * m + 9 * n'):real = + (&2 pow 384 + &(12 * m + 9 * n')) - &2 pow 384`] THEN + ASM_REWRITE_TAC[REAL_OF_NUM_CLAUSES] THEN EXPAND_TAC "ca" THEN + REWRITE_TAC[REAL_BITVAL_NOT] THEN + REWRITE_TAC[p_384; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + RULE_ASSUM_TAC(REWRITE_RULE[WORD_UNMASK_64]) THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + ASM_CASES_TAC `carry_s62:bool` THEN + ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN CONV_TAC WORD_REDUCE_CONV THEN + REAL_INTEGER_TAC]);; + +(* ------------------------------------------------------------------------- *) +(* Instance of cmsub41_p384 (actually there is only one). *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_CMSUB41_P384_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE p384_montjdouble_mc) 57 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 6)) t = n + ==> + nonoverlapping (word pc,0x2d41) (word_add (read p3 t) (word n3),48) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST p384_montjdouble_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 6)) s = + n) + (\s. read RIP s = pcout /\ + (n <= p_384 + ==> &(read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 6)) s) = (&4 * &m - &n) rem &p_384)) + (MAYCHANGE [RIP; RAX; RBX; RCX; RDX; R8; R9; + R10; R11; R12; R13; R14] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 6)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + (*** Globalize the n <= p_384 assumption ***) + + ASM_CASES_TAC `n <= p_384` THENL + [ASM_REWRITE_TAC[]; X86_SIM_TAC P384_MONTJDOUBLE_EXEC (1--57)] THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "m_" o lhand o concl) THEN + + (*** Instantiate the (integer) quotient approximation lemma ***) + + MP_TAC(SPEC `&4 * &m - &n:int` p384shortintredlemma) THEN ANTS_TAC THENL + [CONJ_TAC THENL + [UNDISCH_TAC `n <= p_384` THEN REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES] THEN + INT_ARITH_TAC; + MAP_EVERY EXPAND_TAC ["m"; "n"] THEN REWRITE_TAC[p_384] THEN + CONV_TAC NUM_REDUCE_CONV THEN BOUNDER_TAC[]]; + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN STRIP_TAC] THEN + + (*** Main shift-subtract block ***) + + X86_ACCSTEPS_TAC P384_MONTJDOUBLE_EXEC (15--22) (1--22) THEN + ABBREV_TAC `ca = bignum_of_wordlist + [sum_s16; sum_s17; sum_s18; sum_s19; sum_s20; sum_s21; sum_s22]` THEN + SUBGOAL_THEN `&2 pow 384 + &4 * &m - &n:int = &ca` + (fun th -> SUBST_ALL_TAC th THEN ASSUME_TAC th) + THENL + [REWRITE_TAC[int_eq; int_add_th; int_sub_th; int_pow_th; + int_mul_th; int_of_num_th] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`448`; `&0:real`] THEN + REPLICATE_TAC 2 + (CONJ_TAC THENL + [MAP_EVERY EXPAND_TAC ["m"; "n"; "ca"] THEN + REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + BOUNDER_TAC[]; + ALL_TAC]) THEN + REWRITE_TAC[INTEGER_CLOSED] THEN + SUBGOAL_THEN + `&4 * &m:real = + &(bignum_of_wordlist + [word_shl m_0 2; + word_subword ((word_join:int64->int64->int128) m_1 m_0) (62,64); + word_subword ((word_join:int64->int64->int128) m_2 m_1) (62,64); + word_subword ((word_join:int64->int64->int128) m_3 m_2) (62,64); + word_subword ((word_join:int64->int64->int128) m_4 m_3) (62,64); + word_subword ((word_join:int64->int64->int128) m_5 m_4) (62,64); + word_ushr m_5 62])` + SUBST1_TAC THENL + [EXPAND_TAC "m" THEN + REWRITE_TAC[bignum_of_wordlist; REAL_OF_NUM_CLAUSES] THEN + REWRITE_TAC[val_def; DIMINDEX_64; bignum_of_wordlist] THEN + REWRITE_TAC[ARITH_RULE `i < 64 <=> 0 <= i /\ i <= 63`] THEN + REWRITE_TAC[GSYM IN_NUMSEG; IN_GSPEC] THEN + REWRITE_TAC[BIT_WORD_SUBWORD; BIT_WORD_JOIN; BIT_WORD_USHR; + BIT_WORD_SHL; DIMINDEX_64; DIMINDEX_128] THEN + CONV_TAC NUM_REDUCE_CONV THEN + CONV_TAC(ONCE_DEPTH_CONV EXPAND_NSUM_CONV) THEN + CONV_TAC NUM_REDUCE_CONV THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC WORD_REDUCE_CONV THEN REWRITE_TAC[BITVAL_CLAUSES] THEN + ONCE_REWRITE_TAC[BIT_GUARD] THEN REWRITE_TAC[DIMINDEX_64] THEN + CONV_TAC NUM_REDUCE_CONV THEN REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC NUM_RING; + MAP_EVERY EXPAND_TAC ["n"; "ca"] THEN + REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + REWRITE_TAC[REAL_BITVAL_NOT] THEN REAL_INTEGER_TAC]; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Quotient estimate is just the top word after the +1 ***) + + ABBREV_TAC `q:int64 = sum_s22` THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o + check (free_in `sum_s22:int64` o concl))) THEN + SUBGOAL_THEN `&ca div &2 pow 384 = &(val(q:int64))` SUBST_ALL_TAC THENL + [REWRITE_TAC[INT_OF_NUM_CLAUSES; INT_OF_NUM_DIV] THEN + EXPAND_TAC "ca" THEN CONV_TAC(LAND_CONV BIGNUM_OF_WORDLIST_DIV_CONV) THEN + REFL_TAC; + ALL_TAC] THEN + + (*** The rest of the computation ***) + + X86_ACCSTEPS_TAC P384_MONTJDOUBLE_EXEC + [25;26;27;29;30;31;32;35;36;37;38; 46;48;50;52;54;56] + (23--57) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(ONCE_DEPTH_CONV BIGNUM_LEXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + + CONV_TAC SYM_CONV THEN MATCH_MP_TAC INT_REM_UNIQ_BALANCED_MOD THEN + MAP_EVERY EXISTS_TAC [`&(val(q:int64)):int`; `384`] THEN + ASM_REWRITE_TAC[] THEN + REPEAT(CONJ_TAC THENL + [REWRITE_TAC[INT_OF_NUM_CLAUSES; p_384] THEN BOUNDER_TAC[]; ALL_TAC]) THEN + ONCE_REWRITE_TAC[INT_ARITH + `&4 * m - n:int = (&2 pow 384 + &4 * m - n) - &2 pow 384`] THEN + ASM_REWRITE_TAC[] THEN + + (*** Comparison computation and then the rest is easy ***) + + SUBGOAL_THEN + `(&ca - &2 pow 384):int < &(val(q:int64)) * &p_384 <=> ~carry_s38` + SUBST1_TAC THENL + [REWRITE_TAC[INT_LT_SUB_RADD; INT_OF_NUM_CLAUSES] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN + EXISTS_TAC `384` THEN EXPAND_TAC "ca" THEN + REWRITE_TAC[p_384; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + REWRITE_TAC[REAL_BITVAL_NOT] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + REWRITE_TAC[INTEGER_RULE + `(a:int == b + c - p) (mod p) <=> (a == b + c) (mod p)`] THEN + REWRITE_TAC[INT_OF_NUM_CLAUSES; GSYM num_congruent] THEN + REWRITE_TAC[REAL_CONGRUENCE; EXP_EQ_0; ARITH_EQ] THEN + EXPAND_TAC "ca" THEN REWRITE_TAC[REAL_BITVAL_NOT] THEN + REWRITE_TAC[p_384; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + RULE_ASSUM_TAC(REWRITE_RULE[WORD_UNMASK_64]) THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + REWRITE_TAC[WORD_AND_MASK; WORD_XOR_MASK] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + ASM_CASES_TAC `carry_s38:bool` THEN + ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN CONV_TAC WORD_REDUCE_CONV THEN + REAL_INTEGER_TAC]);; + + +(* ------------------------------------------------------------------------- *) +(* Instance of cmsub38 (there is only one). *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_CMSUB38_P384_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE p384_montjdouble_mc) 77 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 6)) t = n + ==> + nonoverlapping (word pc,0x2d41) (word_add (read p3 t) (word n3),48) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST p384_montjdouble_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 6)) s = + n) + (\s. read RIP s = pcout /\ + (n <= p_384 + ==> &(read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 6)) s) = (&3 * &m - &8 * &n) rem &p_384)) + (MAYCHANGE [RIP; RAX; RBX; RCX; RDX; R8; R9; + R10; R11; R12; R13; R14] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 6)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + ASM_CASES_TAC `n <= p_384` THENL + [ASM_REWRITE_TAC[]; X86_SIM_TAC P384_MONTJDOUBLE_EXEC (1--77)] THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "m_" o lhand o concl) THEN + + SUBGOAL_THEN + `(&3 * &m - &8 * &n) rem &p_384 = + (&3 * &m + &8 * (&p_384 - &n)) rem &p_384` + SUBST1_TAC THENL + [REWRITE_TAC[INT_REM_EQ] THEN CONV_TAC INTEGER_RULE; + ASM_SIMP_TAC[INT_OF_NUM_CLAUSES; INT_OF_NUM_SUB; INT_OF_NUM_REM]] THEN + + (*** Initial negation of n ***) + + X86_ACCSTEPS_TAC P384_MONTJDOUBLE_EXEC (1--12) (1--12) THEN + ABBREV_TAC + `n' = bignum_of_wordlist + [sum_s2; sum_s4; sum_s6; sum_s8; sum_s10; sum_s12]` THEN + SUBGOAL_THEN `p_384 - n = n'` SUBST1_TAC THENL + [ASM_SIMP_TAC[GSYM REAL_OF_NUM_CLAUSES; GSYM REAL_OF_NUM_SUB] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`384`; `&0:real`] THEN CONJ_TAC THENL + [UNDISCH_TAC `n <= p_384` THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; p_384] THEN REAL_ARITH_TAC; + MAP_EVERY EXPAND_TAC ["n"; "n'"] THEN + REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES]] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; REWRITE_TAC[INTEGER_CLOSED]] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th; p_384]) THEN REAL_INTEGER_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Instantiate the quotient approximation lemma ***) + + MP_TAC(SPEC `3 * m + 8 * n'` p384shortishredlemma) THEN ANTS_TAC THENL + [MAP_EVERY EXPAND_TAC ["m"; "n'"] THEN REWRITE_TAC[p_384] THEN + CONV_TAC NUM_REDUCE_CONV THEN BOUNDER_TAC[]; + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN STRIP_TAC] THEN + RULE_ASSUM_TAC(REWRITE_RULE[ARITH_RULE + `x DIV 2 EXP 384 + 1 = (2 EXP 384 + x) DIV 2 EXP 384`]) THEN + + (*** Main sum of products computation +1 ***) + + X86_ACCSTEPS_TAC P384_MONTJDOUBLE_EXEC + (21::(24--42)) (13--42) THEN + ABBREV_TAC `ca = bignum_of_wordlist + [sum_s25; sum_s28; sum_s31; sum_s34; sum_s37; sum_s40; sum_s42]` THEN + SUBGOAL_THEN `2 EXP 384 + 3 * m + 8 * n'= ca` MP_TAC THENL + [REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`448`; `&0:real`] THEN + REPLICATE_TAC 2 + (CONJ_TAC THENL + [MAP_EVERY EXPAND_TAC ["m"; "n'"; "ca"] THEN + REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + BOUNDER_TAC[]; + ALL_TAC]) THEN + REWRITE_TAC[INTEGER_CLOSED] THEN + SUBGOAL_THEN + `&8 * &n':real = + &(bignum_of_wordlist + [word_shl sum_s2 3; + word_subword ((word_join:int64->int64->int128) sum_s4 sum_s2) (61,64); + word_subword ((word_join:int64->int64->int128) sum_s6 sum_s4) (61,64); + word_subword ((word_join:int64->int64->int128) sum_s8 sum_s6) (61,64); + word_subword ((word_join:int64->int64->int128) sum_s10 sum_s8) (61,64); + word_subword ((word_join:int64->int64->int128) sum_s12 sum_s10) (61,64); + word_ushr sum_s12 61])` + SUBST1_TAC THENL + [EXPAND_TAC "n'" THEN + REWRITE_TAC[bignum_of_wordlist; REAL_OF_NUM_CLAUSES] THEN + REWRITE_TAC[val_def; DIMINDEX_64; bignum_of_wordlist] THEN + REWRITE_TAC[ARITH_RULE `i < 64 <=> 0 <= i /\ i <= 63`] THEN + REWRITE_TAC[GSYM IN_NUMSEG; IN_GSPEC] THEN + REWRITE_TAC[BIT_WORD_SUBWORD; BIT_WORD_JOIN; BIT_WORD_USHR; + BIT_WORD_SHL; DIMINDEX_64; DIMINDEX_128] THEN + CONV_TAC NUM_REDUCE_CONV THEN + CONV_TAC(ONCE_DEPTH_CONV EXPAND_NSUM_CONV) THEN + CONV_TAC NUM_REDUCE_CONV THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC WORD_REDUCE_CONV THEN REWRITE_TAC[BITVAL_CLAUSES] THEN + ONCE_REWRITE_TAC[BIT_GUARD] THEN REWRITE_TAC[DIMINDEX_64] THEN + CONV_TAC NUM_REDUCE_CONV THEN REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC NUM_RING; + MAP_EVERY EXPAND_TAC ["m"; "ca"] THEN + REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + REWRITE_TAC[REAL_BITVAL_NOT] THEN REAL_INTEGER_TAC]; + DISCH_THEN(fun th -> POP_ASSUM MP_TAC THEN + SUBST_ALL_TAC th THEN ASSUME_TAC th THEN DISCH_TAC) THEN + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Quotient estimate is just the top word after the +1 ***) + + ABBREV_TAC `q:int64 = sum_s42` THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o + check (free_in `sum_s42:int64` o concl))) THEN + SUBGOAL_THEN `ca DIV 2 EXP 384 = val(q:int64)` SUBST_ALL_TAC THENL + [EXPAND_TAC "ca" THEN CONV_TAC(LAND_CONV BIGNUM_OF_WORDLIST_DIV_CONV) THEN + REFL_TAC; + ALL_TAC] THEN + + (*** The rest of the computation ***) + + X86_ACCSTEPS_TAC P384_MONTJDOUBLE_EXEC + [45;46;47;49;50;51;52;55;56;57;58; 66;68;70;72;74;76] + (43--77) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC MOD_UNIQ_BALANCED_REAL THEN + MAP_EVERY EXISTS_TAC [`val(q:int64)`; `384`] THEN ASM_REWRITE_TAC[] THEN + CONJ_TAC THENL [REWRITE_TAC[p_384] THEN ARITH_TAC; ALL_TAC] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN + + (*** Comparison computation and then the rest is easy ***) + + SUBGOAL_THEN `3 * m + 8 * n' < val(q:int64) * p_384 <=> ~carry_s58` + SUBST1_TAC THENL + [ONCE_REWRITE_TAC[ARITH_RULE `a < b <=> 2 EXP 384 + a < b + 2 EXP 384`] THEN + ASM_REWRITE_TAC[] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN + EXISTS_TAC `384` THEN EXPAND_TAC "ca" THEN + REWRITE_TAC[p_384; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + REWRITE_TAC[REAL_BITVAL_NOT] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ONCE_REWRITE_TAC[REAL_ARITH + `&(3 * m + 8 * n'):real = + (&2 pow 384 + &(3 * m + 8 * n')) - &2 pow 384`] THEN + ASM_REWRITE_TAC[REAL_OF_NUM_CLAUSES] THEN EXPAND_TAC "ca" THEN + REWRITE_TAC[REAL_BITVAL_NOT] THEN + REWRITE_TAC[p_384; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + RULE_ASSUM_TAC(REWRITE_RULE[WORD_UNMASK_64]) THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + REWRITE_TAC[WORD_AND_MASK; WORD_XOR_MASK] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + ASM_CASES_TAC `carry_s58:bool` THEN + ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN CONV_TAC WORD_REDUCE_CONV THEN + REAL_INTEGER_TAC]);; + +(* ------------------------------------------------------------------------- *) +(* Overall point operation proof. *) +(* ------------------------------------------------------------------------- *) + +let P384_MONTJDOUBLE_CORRECT = time prove + (`!p3 p1 t1 pc stackpointer. + ALLPAIRS nonoverlapping + [(p3,144); (stackpointer,344)] + [(word pc,0x2d41); (p1,144)] /\ + nonoverlapping (p3,144) (stackpointer,344) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST p384_montjdouble_mc) /\ + read RIP s = word(pc + 0x11) /\ + read RSP s = stackpointer /\ + C_ARGUMENTS [p3; p1] s /\ + bignum_triple_from_memory (p1,6) s = t1) + (\s. read RIP s = word (pc + 0x2d2f) /\ + (!x1 y1 z1. + ~(z1 = &0) /\ + t1 = tripled nistp384_encode (x1,y1,z1) + ==> bignum_triple_from_memory(p3,6) s = + tripled nistp384_encode + (jacobian_add nistp384 (x1,y1,z1) (x1,y1,z1)))) + (MAYCHANGE [RIP; RDI; RSI; RAX; RDX; RCX; R8; R9; R10; R11; + RBX; RBP; R12; R13; R14; R15] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,144); + memory :> bytes(stackpointer,344)])`, + REWRITE_TAC[FORALL_PAIR_THM] THEN + MAP_EVERY X_GEN_TAC + [`p3:int64`; `p1:int64`; `x1:num`; `y1:num`; `z1:num`; + `pc:num`; `stackpointer:int64`] THEN + REWRITE_TAC[ALLPAIRS; ALL; NONOVERLAPPING_CLAUSES] THEN STRIP_TAC THEN + REWRITE_TAC[C_ARGUMENTS; SOME_FLAGS; PAIR_EQ; bignum_triple_from_memory] THEN + CONV_TAC(ONCE_DEPTH_CONV NUM_MULT_CONV) THEN + CONV_TAC(ONCE_DEPTH_CONV NORMALIZE_RELATIVE_ADDRESS_CONV) THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + + LOCAL_MONTSQR_P384_TAC 1 ["z2";"z_1"] THEN + LOCAL_MONTSQR_P384_TAC 0 ["y2";"y_1"] THEN + LOCAL_WEAKADD_P384_TAC 0 ["t1";"x_1";"z2"] THEN + LOCAL_SUB_P384_TAC 0 ["t2";"x_1";"z2"] THEN + LOCAL_MONTMUL_P384_TAC 0 ["x2p";"t1";"t2"] THEN + LOCAL_ADD_P384_TAC 0 ["t1";"y_1";"z_1"] THEN + LOCAL_MONTSQR_P384_TAC 0 ["x4p";"x2p"] THEN + LOCAL_MONTMUL_P384_TAC 0 ["xy2";"x_1";"y2"] THEN + LOCAL_MONTSQR_P384_TAC 0 ["t2";"t1"] THEN + LOCAL_CMSUBC9_P384_TAC 0 ["d";"xy2";"x4p"] THEN + LOCAL_SUB_P384_TAC 0 ["t1";"t2";"z2"] THEN + LOCAL_MONTSQR_P384_TAC 0 ["y4";"y2"] THEN + LOCAL_SUB_P384_TAC 1 ["z_3";"t1";"y2"] THEN + LOCAL_MONTMUL_P384_TAC 0 ["dx2";"d";"x2p"] THEN + LOCAL_CMSUB41_P384_TAC 0 ["x_3";"xy2";"d"] THEN + LOCAL_CMSUB38_P384_TAC 0 ["y_3";"dx2";"y4"] THEN + + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + DISCARD_STATE_TAC "s18" THEN + DISCARD_MATCHING_ASSUMPTIONS [`nonoverlapping_modulo a b c`] THEN + + MAP_EVERY X_GEN_TAC [`X1:int`; `Y1:int`; `Z1:int`] THEN + DISCH_THEN(CONJUNCTS_THEN2 ASSUME_TAC MP_TAC) THEN + REWRITE_TAC[tripled; nistp384_encode; montgomery_encode; PAIR_EQ] THEN + + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN + (STRIP_ASSUME_TAC o MATCH_MP unilemma2)) THEN + + REPEAT(FIRST_X_ASSUM(MP_TAC o check (is_imp o concl))) THEN + REPEAT(ANTS_TAC THENL + [REWRITE_TAC[p_384] THEN RULE_ASSUM_TAC(REWRITE_RULE[p_384]) THEN + CONV_TAC NUM_REDUCE_CONV THEN ASM BOUNDER_TAC[]; + (DISCH_THEN(STRIP_ASSUME_TAC o MATCH_MP unilemma0) ORELSE + DISCH_THEN(STRIP_ASSUME_TAC o MATCH_MP unilemma1) ORELSE + STRIP_TAC)]) THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o GEN_REWRITE_RULE I [GSYM NOT_LE])) THEN + + RULE_ASSUM_TAC(REWRITE_RULE + [num_congruent; GSYM INT_OF_NUM_CLAUSES; GSYM INT_OF_NUM_REM]) THEN + RULE_ASSUM_TAC(REWRITE_RULE[GSYM INT_REM_EQ]) THEN + + RULE_ASSUM_TAC(ONCE_REWRITE_RULE[GSYM INT_SUB_REM; GSYM INT_ADD_REM]) THEN + RULE_ASSUM_TAC(REWRITE_RULE[INT_POW_2]) THEN + RULE_ASSUM_TAC(GEN_REWRITE_RULE (RAND_CONV o TRY_CONV) [lemont]) THEN + + ASM_REWRITE_TAC[jacobian_add; jacobian_eq; nistp384] THEN + ASM_REWRITE_TAC[GSYM nistp384] THEN + REWRITE_TAC[INTEGER_MOD_RING_CLAUSES] THEN + CONV_TAC INT_REDUCE_CONV THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN + CONV_TAC INT_REM_DOWN_CONV THEN + REWRITE_TAC[tripled; nistp384_encode; montgomery_encode] THEN + REWRITE_TAC[PAIR_EQ; GSYM INT_OF_NUM_EQ; nintlemma] THEN + CONV_TAC INT_REM_DOWN_CONV THEN + + ASM_REWRITE_TAC[pumont; INT_REM_REM; GSYM INT_ADD_LDISTRIB; + GSYM INT_ADD_LDISTRIB; GSYM INT_SUB_LDISTRIB; + INT_SUB_REM; INT_ADD_REM; silemma] THEN + + CONV_TAC INT_REM_DOWN_CONV THEN REPEAT CONJ_TAC THEN + AP_THM_TAC THEN AP_TERM_TAC THEN INT_ARITH_TAC);; + +let P384_MONTJDOUBLE_SUBROUTINE_CORRECT = time prove + (`!p3 p1 t1 pc stackpointer returnaddress. + ALLPAIRS nonoverlapping + [(p3,144); (word_sub stackpointer (word 392),392)] + [(word pc,0x2d41); (p1,144)] /\ + nonoverlapping (p3,144) (word_sub stackpointer (word 392),400) + ==> ensures x86 + (\s. bytes_loaded s (word pc) p384_montjdouble_mc /\ + read RIP s = word pc /\ + read RSP s = stackpointer /\ + read (memory :> bytes64 stackpointer) s = returnaddress /\ + C_ARGUMENTS [p3; p1] s /\ + bignum_triple_from_memory (p1,6) s = t1) + (\s. read RIP s = returnaddress /\ + read RSP s = word_add stackpointer (word 8) /\ + (!x1 y1 z1. + ~(z1 = &0) /\ + t1 = tripled nistp384_encode (x1,y1,z1) + ==> bignum_triple_from_memory(p3,6) s = + tripled nistp384_encode + (jacobian_add nistp384 (x1,y1,z1) (x1,y1,z1)))) + (MAYCHANGE [RIP; RSP; RDI; RSI; RAX; RDX; RCX; R8; R9; R10; R11] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,144); + memory :> bytes(word_sub stackpointer (word 392),392)])`, + X86_PROMOTE_RETURN_STACK_TAC p384_montjdouble_mc P384_MONTJDOUBLE_CORRECT + `[RBX; RBP; R12; R13; R14; R15]` 392);; + +(* ------------------------------------------------------------------------- *) +(* Correctness of Windows ABI version. *) +(* ------------------------------------------------------------------------- *) + +let windows_p384_montjdouble_mc = define_from_elf "windows_p384_montjdouble_mc" + "x86/p384/p384_montjdouble.obj";; + +let WINDOWS_P384_MONTJDOUBLE_SUBROUTINE_CORRECT = time prove + (`!p3 p1 t1 pc stackpointer returnaddress. + ALLPAIRS nonoverlapping + [(p3,144); (word_sub stackpointer (word 408),408)] + [(word pc,0x2d4b); (p1,144)] /\ + nonoverlapping (p3,144) (word_sub stackpointer (word 408),416) + ==> ensures x86 + (\s. bytes_loaded s (word pc) windows_p384_montjdouble_mc /\ + read RIP s = word pc /\ + read RSP s = stackpointer /\ + read (memory :> bytes64 stackpointer) s = returnaddress /\ + WINDOWS_C_ARGUMENTS [p3; p1] s /\ + bignum_triple_from_memory (p1,6) s = t1) + (\s. read RIP s = returnaddress /\ + read RSP s = word_add stackpointer (word 8) /\ + (!x1 y1 z1. + ~(z1 = &0) /\ + t1 = tripled nistp384_encode (x1,y1,z1) + ==> bignum_triple_from_memory(p3,6) s = + tripled nistp384_encode + (jacobian_add nistp384 (x1,y1,z1) (x1,y1,z1)))) + (MAYCHANGE [RIP; RSP; RAX; RDX; RCX; R8; R9; R10; R11] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,144); + memory :> bytes(word_sub stackpointer (word 408),408)])`, + WINDOWS_X86_WRAP_STACK_TAC + windows_p384_montjdouble_mc p384_montjdouble_mc + P384_MONTJDOUBLE_CORRECT + `[RBX; RBP; R12; R13; R14; R15]` 392);; diff --git a/x86/proofs/p384_montjmixadd.ml b/x86/proofs/p384_montjmixadd.ml new file mode 100644 index 0000000000..9fc1904a0f --- /dev/null +++ b/x86/proofs/p384_montjmixadd.ml @@ -0,0 +1,5319 @@ +(* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + *) + +(* ========================================================================= *) +(* Mixed addition in Montgomery-Jacobian coordinates for NIST P-384 curve. *) +(* ========================================================================= *) + +needs "x86/proofs/base.ml";; +needs "common/ecencoding.ml";; +needs "EC/jacobian.ml";; +needs "EC/nistp384.ml";; + +prioritize_int();; +prioritize_real();; +prioritize_num();; + +(**** print_literal_from_elf "x86/p384/p384_montjmixadd.o";; + ****) + +let p384_montjmixadd_mc = define_assert_from_elf + "p384_montjmixadd_mc" "x86/p384/p384_montjmixadd.o" +[ + 0x53; (* PUSH (% rbx) *) + 0x55; (* PUSH (% rbp) *) + 0x41; 0x54; (* PUSH (% r12) *) + 0x41; 0x55; (* PUSH (% r13) *) + 0x41; 0x56; (* PUSH (% r14) *) + 0x41; 0x57; (* PUSH (% r15) *) + 0x48; 0x81; 0xec; 0x38; 0x01; 0x00; 0x00; + (* SUB (% rsp) (Imm32 (word 312)) *) + 0x48; 0x89; 0xbc; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,304))) (% rdi) *) + 0x48; 0x89; 0xb4; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,288))) (% rsi) *) + 0x48; 0x89; 0x94; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,296))) (% rdx) *) + 0x48; 0x8b; 0x56; 0x60; (* MOV (% rdx) (Memop Quadword (%% (rsi,96))) *) + 0xc4; 0x62; 0xb3; 0xf6; 0x56; 0x68; + (* MULX4 (% r10,% r9) (% rdx,Memop Quadword (%% (rsi,104))) *) + 0xc4; 0x62; 0xa3; 0xf6; 0x66; 0x78; + (* MULX4 (% r12,% r11) (% rdx,Memop Quadword (%% (rsi,120))) *) + 0xc4; 0x62; 0x93; 0xf6; 0xb6; 0x88; 0x00; 0x00; 0x00; + (* MULX4 (% r14,% r13) (% rdx,Memop Quadword (%% (rsi,136))) *) + 0x48; 0x8b; 0x56; 0x78; (* MOV (% rdx) (Memop Quadword (%% (rsi,120))) *) + 0xc4; 0xe2; 0x83; 0xf6; 0x8e; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rcx,% r15) (% rdx,Memop Quadword (%% (rsi,128))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x56; 0x70; (* MOV (% rdx) (Memop Quadword (%% (rsi,112))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x48; 0x8b; 0x56; 0x68; (* MOV (% rdx) (Memop Quadword (%% (rsi,104))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x88; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,136))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADCX (% r15) (% rbp) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xcd; + (* ADOX (% rcx) (% rbp) *) + 0x48; 0x11; 0xe9; (* ADC (% rcx) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x96; 0x80; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,128))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0x8b; 0x56; 0x70; (* MOV (% rdx) (Memop Quadword (%% (rsi,112))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x96; 0x88; 0x00; 0x00; 0x00; + (* MULX4 (% rdx,% rax) (% rdx,Memop Quadword (%% (rsi,136))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xca; + (* ADOX (% rcx) (% rdx) *) + 0x48; 0x8b; 0x96; 0x88; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,136))) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xae; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rbp,% rbx) (% rdx,Memop Quadword (%% (rsi,128))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x56; 0x78; + (* MULX4 (% rdx,% rax) (% rdx,Memop Quadword (%% (rsi,120))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% rcx) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% rbx) (% rdx) *) + 0xb8; 0x00; 0x00; 0x00; 0x00; + (* MOV (% eax) (Imm32 (word 0)) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% rbx) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xe8; + (* ADOX (% rbp) (% rax) *) + 0x48; 0x11; 0xc5; (* ADC (% rbp) (% rax) *) + 0x48; 0x31; 0xc0; (* XOR (% rax) (% rax) *) + 0x48; 0x8b; 0x56; 0x60; (* MOV (% rdx) (Memop Quadword (%% (rsi,96))) *) + 0xc4; 0xe2; 0xbb; 0xf6; 0x46; 0x60; + (* MULX4 (% rax,% r8) (% rdx,Memop Quadword (%% (rsi,96))) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% r9) (% r9) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADOX (% r9) (% rax) *) + 0x48; 0x8b; 0x56; 0x68; (* MOV (% rdx) (Memop Quadword (%% (rsi,104))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xd2; + (* ADCX (% r10) (% r10) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADOX (% r10) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% r11) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% r11) (% rdx) *) + 0x48; 0x8b; 0x56; 0x70; (* MOV (% rdx) (Memop Quadword (%% (rsi,112))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xe4; + (* ADCX (% r12) (% r12) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADOX (% r12) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% r13) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xea; + (* ADOX (% r13) (% rdx) *) + 0x48; 0x8b; 0x56; 0x78; (* MOV (% rdx) (Memop Quadword (%% (rsi,120))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf6; + (* ADCX (% r14) (% r14) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xff; + (* ADCX (% r15) (% r15) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfa; + (* ADOX (% r15) (% rdx) *) + 0x48; 0x8b; 0x96; 0x80; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,128))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% rcx) (% rcx) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc8; + (* ADOX (% rcx) (% rax) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% rbx) (% rbx) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% rbx) (% rdx) *) + 0x48; 0x8b; 0x96; 0x88; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,136))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xf2; + (* MULX4 (% rsi,% rax) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% rbp) (% rbp) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xe8; + (* ADOX (% rbp) (% rax) *) + 0xb8; 0x00; 0x00; 0x00; 0x00; + (* MOV (% eax) (Imm32 (word 0)) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% rsi) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% rsi) (% rax) *) + 0x48; 0x89; 0x1c; 0x24; (* MOV (Memop Quadword (%% (rsp,0))) (% rbx) *) + 0x4c; 0x89; 0xc2; (* MOV (% rdx) (% r8) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xc2; (* ADD (% rdx) (% r8) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xbb; 0xf6; 0xc0; + (* MULX4 (% rax,% r8) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xc3; + (* MULX4 (% r8,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd0; (* ADC (% r8) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc1; (* SUB (% r9) (% rax) *) + 0x4d; 0x19; 0xc2; (* SBB (% r10) (% r8) *) + 0x49; 0x19; 0xdb; (* SBB (% r11) (% rbx) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd0; (* MOV (% r8) (% rdx) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xca; (* MOV (% rdx) (% r9) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xca; (* ADD (% rdx) (% r9) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xb3; 0xf6; 0xc0; + (* MULX4 (% rax,% r9) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xcb; + (* MULX4 (% r9,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd1; (* ADC (% r9) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc2; (* SUB (% r10) (% rax) *) + 0x4d; 0x19; 0xcb; (* SBB (% r11) (% r9) *) + 0x49; 0x19; 0xdc; (* SBB (% r12) (% rbx) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd1; (* MOV (% r9) (% rdx) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xd2; (* MOV (% rdx) (% r10) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xd2; (* ADD (% rdx) (% r10) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xab; 0xf6; 0xc0; + (* MULX4 (% rax,% r10) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xd3; + (* MULX4 (% r10,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd2; (* ADC (% r10) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc3; (* SUB (% r11) (% rax) *) + 0x4d; 0x19; 0xd4; (* SBB (% r12) (% r10) *) + 0x49; 0x19; 0xdd; (* SBB (% r13) (% rbx) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd2; (* MOV (% r10) (% rdx) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xda; (* MOV (% rdx) (% r11) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xda; (* ADD (% rdx) (% r11) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xa3; 0xf6; 0xc0; + (* MULX4 (% rax,% r11) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xdb; + (* MULX4 (% r11,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd3; (* ADC (% r11) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc4; (* SUB (% r12) (% rax) *) + 0x4d; 0x19; 0xdd; (* SBB (% r13) (% r11) *) + 0x49; 0x19; 0xd8; (* SBB (% r8) (% rbx) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd3; (* MOV (% r11) (% rdx) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xe2; (* MOV (% rdx) (% r12) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xe2; (* ADD (% rdx) (% r12) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0x9b; 0xf6; 0xc0; + (* MULX4 (% rax,% r12) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xe3; + (* MULX4 (% r12,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd4; (* ADC (% r12) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc5; (* SUB (% r13) (% rax) *) + 0x4d; 0x19; 0xe0; (* SBB (% r8) (% r12) *) + 0x49; 0x19; 0xd9; (* SBB (% r9) (% rbx) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd4; (* MOV (% r12) (% rdx) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xea; (* MOV (% rdx) (% r13) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xea; (* ADD (% rdx) (% r13) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0x93; 0xf6; 0xc0; + (* MULX4 (% rax,% r13) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xeb; + (* MULX4 (% r13,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd5; (* ADC (% r13) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc0; (* SUB (% r8) (% rax) *) + 0x4d; 0x19; 0xe9; (* SBB (% r9) (% r13) *) + 0x49; 0x19; 0xda; (* SBB (% r10) (% rbx) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd5; (* MOV (% r13) (% rdx) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x1c; 0x24; (* MOV (% rbx) (Memop Quadword (%% (rsp,0))) *) + 0x4d; 0x01; 0xc6; (* ADD (% r14) (% r8) *) + 0x4d; 0x11; 0xcf; (* ADC (% r15) (% r9) *) + 0x4c; 0x11; 0xd1; (* ADC (% rcx) (% r10) *) + 0x4c; 0x11; 0xdb; (* ADC (% rbx) (% r11) *) + 0x4c; 0x11; 0xe5; (* ADC (% rbp) (% r12) *) + 0x4c; 0x11; 0xee; (* ADC (% rsi) (% r13) *) + 0x41; 0xb8; 0x00; 0x00; 0x00; 0x00; + (* MOV (% r8d) (Imm32 (word 0)) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0x41; 0xb9; 0xff; 0xff; 0xff; 0xff; + (* MOV (% r9d) (Imm32 (word 4294967295)) *) + 0x41; 0xba; 0x01; 0x00; 0x00; 0x00; + (* MOV (% r10d) (Imm32 (word 1)) *) + 0x49; 0x0f; 0x43; 0xc0; (* CMOVAE (% rax) (% r8) *) + 0x4d; 0x0f; 0x43; 0xc8; (* CMOVAE (% r9) (% r8) *) + 0x4d; 0x0f; 0x43; 0xd0; (* CMOVAE (% r10) (% r8) *) + 0x49; 0x01; 0xc6; (* ADD (% r14) (% rax) *) + 0x4d; 0x11; 0xcf; (* ADC (% r15) (% r9) *) + 0x4c; 0x11; 0xd1; (* ADC (% rcx) (% r10) *) + 0x4c; 0x11; 0xc3; (* ADC (% rbx) (% r8) *) + 0x4c; 0x11; 0xc5; (* ADC (% rbp) (% r8) *) + 0x4c; 0x11; 0xc6; (* ADC (% rsi) (% r8) *) + 0x4c; 0x89; 0x34; 0x24; (* MOV (Memop Quadword (%% (rsp,0))) (% r14) *) + 0x4c; 0x89; 0x7c; 0x24; 0x08; + (* MOV (Memop Quadword (%% (rsp,8))) (% r15) *) + 0x48; 0x89; 0x4c; 0x24; 0x10; + (* MOV (Memop Quadword (%% (rsp,16))) (% rcx) *) + 0x48; 0x89; 0x5c; 0x24; 0x18; + (* MOV (Memop Quadword (%% (rsp,24))) (% rbx) *) + 0x48; 0x89; 0x6c; 0x24; 0x20; + (* MOV (Memop Quadword (%% (rsp,32))) (% rbp) *) + 0x48; 0x89; 0x74; 0x24; 0x28; + (* MOV (Memop Quadword (%% (rsp,40))) (% rsi) *) + 0x48; 0x8b; 0xb4; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MOV (% rsi) (Memop Quadword (%% (rsp,288))) *) + 0x48; 0x8b; 0x8c; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MOV (% rcx) (Memop Quadword (%% (rsp,296))) *) + 0x48; 0x8b; 0x51; 0x30; (* MOV (% rdx) (Memop Quadword (%% (rcx,48))) *) + 0x45; 0x31; 0xff; (* XOR (% r15d) (% r15d) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x4e; 0x60; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsi,96))) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x56; 0x68; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsi,104))) *) + 0x49; 0x01; 0xd9; (* ADD (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x5e; 0x70; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsi,112))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x66; 0x78; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsi,120))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xae; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% r13,% rbx) (% rdx,Memop Quadword (%% (rsi,128))) *) + 0x49; 0x11; 0xdc; (* ADC (% r12) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xb6; 0x88; 0x00; 0x00; 0x00; + (* MULX4 (% r14,% rbx) (% rdx,Memop Quadword (%% (rsi,136))) *) + 0x49; 0x11; 0xdd; (* ADC (% r13) (% rbx) *) + 0x4d; 0x11; 0xfe; (* ADC (% r14) (% r15) *) + 0x4c; 0x89; 0xc2; (* MOV (% rdx) (% r8) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xc2; (* ADD (% rdx) (% r8) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xbb; 0xf6; 0xdb; + (* MULX4 (% rbx,% r8) (% rdx,% rbx) *) + 0x4c; 0x11; 0xc0; (* ADC (% rax) (% r8) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc1; (* SUB (% r9) (% rax) *) + 0x49; 0x19; 0xda; (* SBB (% r10) (% rbx) *) + 0x49; 0x19; 0xeb; (* SBB (% r11) (% rbp) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd6; (* ADD (% r14) (% rdx) *) + 0x49; 0x83; 0xd7; 0x00; (* ADC (% r15) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x51; 0x38; (* MOV (% rdx) (Memop Quadword (%% (rcx,56))) *) + 0x45; 0x31; 0xc0; (* XOR (% r8d) (% r8d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf8; + (* ADOX (% r15) (% r8) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x88; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,136))) *) + 0x49; 0x11; 0xc6; (* ADC (% r14) (% rax) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x4d; 0x11; 0xc0; (* ADC (% r8) (% r8) *) + 0x4c; 0x89; 0xca; (* MOV (% rdx) (% r9) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xca; (* ADD (% rdx) (% r9) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xb3; 0xf6; 0xdb; + (* MULX4 (% rbx,% r9) (% rdx,% rbx) *) + 0x4c; 0x11; 0xc8; (* ADC (% rax) (% r9) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc2; (* SUB (% r10) (% rax) *) + 0x49; 0x19; 0xdb; (* SBB (% r11) (% rbx) *) + 0x49; 0x19; 0xec; (* SBB (% r12) (% rbp) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd7; (* ADD (% r15) (% rdx) *) + 0x49; 0x83; 0xd0; 0x00; (* ADC (% r8) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x51; 0x40; (* MOV (% rdx) (Memop Quadword (%% (rcx,64))) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xc1; + (* ADOX (% r8) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x88; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,136))) *) + 0x49; 0x11; 0xc7; (* ADC (% r15) (% rax) *) + 0x49; 0x11; 0xd8; (* ADC (% r8) (% rbx) *) + 0x4d; 0x11; 0xc9; (* ADC (% r9) (% r9) *) + 0x4c; 0x89; 0xd2; (* MOV (% rdx) (% r10) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xd2; (* ADD (% rdx) (% r10) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xab; 0xf6; 0xdb; + (* MULX4 (% rbx,% r10) (% rdx,% rbx) *) + 0x4c; 0x11; 0xd0; (* ADC (% rax) (% r10) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc3; (* SUB (% r11) (% rax) *) + 0x49; 0x19; 0xdc; (* SBB (% r12) (% rbx) *) + 0x49; 0x19; 0xed; (* SBB (% r13) (% rbp) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd0; (* ADD (% r8) (% rdx) *) + 0x49; 0x83; 0xd1; 0x00; (* ADC (% r9) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x51; 0x48; (* MOV (% rdx) (Memop Quadword (%% (rcx,72))) *) + 0x45; 0x31; 0xd2; (* XOR (% r10d) (% r10d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xca; + (* ADOX (% r9) (% r10) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x88; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,136))) *) + 0x49; 0x11; 0xc0; (* ADC (% r8) (% rax) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0x4d; 0x11; 0xd2; (* ADC (% r10) (% r10) *) + 0x4c; 0x89; 0xda; (* MOV (% rdx) (% r11) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xda; (* ADD (% rdx) (% r11) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xa3; 0xf6; 0xdb; + (* MULX4 (% rbx,% r11) (% rdx,% rbx) *) + 0x4c; 0x11; 0xd8; (* ADC (% rax) (% r11) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc4; (* SUB (% r12) (% rax) *) + 0x49; 0x19; 0xdd; (* SBB (% r13) (% rbx) *) + 0x49; 0x19; 0xee; (* SBB (% r14) (% rbp) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd1; (* ADD (% r9) (% rdx) *) + 0x49; 0x83; 0xd2; 0x00; (* ADC (% r10) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x51; 0x50; (* MOV (% rdx) (Memop Quadword (%% (rcx,80))) *) + 0x45; 0x31; 0xdb; (* XOR (% r11d) (% r11d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x88; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,136))) *) + 0x49; 0x11; 0xc1; (* ADC (% r9) (% rax) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0x4d; 0x11; 0xdb; (* ADC (% r11) (% r11) *) + 0x4c; 0x89; 0xe2; (* MOV (% rdx) (% r12) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xe2; (* ADD (% rdx) (% r12) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0x9b; 0xf6; 0xdb; + (* MULX4 (% rbx,% r12) (% rdx,% rbx) *) + 0x4c; 0x11; 0xe0; (* ADC (% rax) (% r12) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc5; (* SUB (% r13) (% rax) *) + 0x49; 0x19; 0xde; (* SBB (% r14) (% rbx) *) + 0x49; 0x19; 0xef; (* SBB (% r15) (% rbp) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd2; (* ADD (% r10) (% rdx) *) + 0x49; 0x83; 0xd3; 0x00; (* ADC (% r11) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x51; 0x58; (* MOV (% rdx) (Memop Quadword (%% (rcx,88))) *) + 0x45; 0x31; 0xe4; (* XOR (% r12d) (% r12d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xdc; + (* ADOX (% r11) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x88; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,136))) *) + 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x4d; 0x11; 0xe4; (* ADC (% r12) (% r12) *) + 0x4c; 0x89; 0xea; (* MOV (% rdx) (% r13) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xea; (* ADD (% rdx) (% r13) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0x93; 0xf6; 0xdb; + (* MULX4 (% rbx,% r13) (% rdx,% rbx) *) + 0x4c; 0x11; 0xe8; (* ADC (% rax) (% r13) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc6; (* SUB (% r14) (% rax) *) + 0x49; 0x19; 0xdf; (* SBB (% r15) (% rbx) *) + 0x49; 0x19; 0xe8; (* SBB (% r8) (% rbp) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd3; (* ADD (% r11) (% rdx) *) + 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) + 0x31; 0xd2; (* XOR (% edx) (% edx) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x45; 0x31; 0xed; (* XOR (% r13d) (% r13d) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0x4c; 0x01; 0xf0; (* ADD (% rax) (% r14) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0x4c; 0x11; 0xfb; (* ADC (% rbx) (% r15) *) + 0xb9; 0x01; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 1)) *) + 0x4c; 0x11; 0xc1; (* ADC (% rcx) (% r8) *) + 0x4c; 0x11; 0xca; (* ADC (% rdx) (% r9) *) + 0x4c; 0x11; 0xd5; (* ADC (% rbp) (% r10) *) + 0x4d; 0x11; 0xdd; (* ADC (% r13) (% r11) *) + 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) + 0x4c; 0x0f; 0x45; 0xf0; (* CMOVNE (% r14) (% rax) *) + 0x4c; 0x0f; 0x45; 0xfb; (* CMOVNE (% r15) (% rbx) *) + 0x4c; 0x0f; 0x45; 0xc1; (* CMOVNE (% r8) (% rcx) *) + 0x4c; 0x0f; 0x45; 0xca; (* CMOVNE (% r9) (% rdx) *) + 0x4c; 0x0f; 0x45; 0xd5; (* CMOVNE (% r10) (% rbp) *) + 0x4d; 0x0f; 0x45; 0xdd; (* CMOVNE (% r11) (% r13) *) + 0x4c; 0x89; 0x74; 0x24; 0x30; + (* MOV (Memop Quadword (%% (rsp,48))) (% r14) *) + 0x4c; 0x89; 0x7c; 0x24; 0x38; + (* MOV (Memop Quadword (%% (rsp,56))) (% r15) *) + 0x4c; 0x89; 0x44; 0x24; 0x40; + (* MOV (Memop Quadword (%% (rsp,64))) (% r8) *) + 0x4c; 0x89; 0x4c; 0x24; 0x48; + (* MOV (Memop Quadword (%% (rsp,72))) (% r9) *) + 0x4c; 0x89; 0x54; 0x24; 0x50; + (* MOV (Memop Quadword (%% (rsp,80))) (% r10) *) + 0x4c; 0x89; 0x5c; 0x24; 0x58; + (* MOV (Memop Quadword (%% (rsp,88))) (% r11) *) + 0x48; 0x8b; 0x8c; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MOV (% rcx) (Memop Quadword (%% (rsp,296))) *) + 0x48; 0x8b; 0x11; (* MOV (% rdx) (Memop Quadword (%% (rcx,0))) *) + 0x45; 0x31; 0xff; (* XOR (% r15d) (% r15d) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x0c; 0x24; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x54; 0x24; 0x08; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x49; 0x01; 0xd9; (* ADD (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x64; 0x24; 0x18; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x6c; 0x24; 0x20; + (* MULX4 (% r13,% rbx) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x49; 0x11; 0xdc; (* ADC (% r12) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x74; 0x24; 0x28; + (* MULX4 (% r14,% rbx) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x49; 0x11; 0xdd; (* ADC (% r13) (% rbx) *) + 0x4d; 0x11; 0xfe; (* ADC (% r14) (% r15) *) + 0x4c; 0x89; 0xc2; (* MOV (% rdx) (% r8) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xc2; (* ADD (% rdx) (% r8) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xbb; 0xf6; 0xdb; + (* MULX4 (% rbx,% r8) (% rdx,% rbx) *) + 0x4c; 0x11; 0xc0; (* ADC (% rax) (% r8) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc1; (* SUB (% r9) (% rax) *) + 0x49; 0x19; 0xda; (* SBB (% r10) (% rbx) *) + 0x49; 0x19; 0xeb; (* SBB (% r11) (% rbp) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd6; (* ADD (% r14) (% rdx) *) + 0x49; 0x83; 0xd7; 0x00; (* ADC (% r15) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x51; 0x08; (* MOV (% rdx) (Memop Quadword (%% (rcx,8))) *) + 0x45; 0x31; 0xc0; (* XOR (% r8d) (% r8d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf8; + (* ADOX (% r15) (% r8) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x49; 0x11; 0xc6; (* ADC (% r14) (% rax) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x4d; 0x11; 0xc0; (* ADC (% r8) (% r8) *) + 0x4c; 0x89; 0xca; (* MOV (% rdx) (% r9) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xca; (* ADD (% rdx) (% r9) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xb3; 0xf6; 0xdb; + (* MULX4 (% rbx,% r9) (% rdx,% rbx) *) + 0x4c; 0x11; 0xc8; (* ADC (% rax) (% r9) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc2; (* SUB (% r10) (% rax) *) + 0x49; 0x19; 0xdb; (* SBB (% r11) (% rbx) *) + 0x49; 0x19; 0xec; (* SBB (% r12) (% rbp) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd7; (* ADD (% r15) (% rdx) *) + 0x49; 0x83; 0xd0; 0x00; (* ADC (% r8) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x51; 0x10; (* MOV (% rdx) (Memop Quadword (%% (rcx,16))) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xc1; + (* ADOX (% r8) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x49; 0x11; 0xc7; (* ADC (% r15) (% rax) *) + 0x49; 0x11; 0xd8; (* ADC (% r8) (% rbx) *) + 0x4d; 0x11; 0xc9; (* ADC (% r9) (% r9) *) + 0x4c; 0x89; 0xd2; (* MOV (% rdx) (% r10) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xd2; (* ADD (% rdx) (% r10) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xab; 0xf6; 0xdb; + (* MULX4 (% rbx,% r10) (% rdx,% rbx) *) + 0x4c; 0x11; 0xd0; (* ADC (% rax) (% r10) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc3; (* SUB (% r11) (% rax) *) + 0x49; 0x19; 0xdc; (* SBB (% r12) (% rbx) *) + 0x49; 0x19; 0xed; (* SBB (% r13) (% rbp) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd0; (* ADD (% r8) (% rdx) *) + 0x49; 0x83; 0xd1; 0x00; (* ADC (% r9) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x51; 0x18; (* MOV (% rdx) (Memop Quadword (%% (rcx,24))) *) + 0x45; 0x31; 0xd2; (* XOR (% r10d) (% r10d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xca; + (* ADOX (% r9) (% r10) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x49; 0x11; 0xc0; (* ADC (% r8) (% rax) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0x4d; 0x11; 0xd2; (* ADC (% r10) (% r10) *) + 0x4c; 0x89; 0xda; (* MOV (% rdx) (% r11) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xda; (* ADD (% rdx) (% r11) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xa3; 0xf6; 0xdb; + (* MULX4 (% rbx,% r11) (% rdx,% rbx) *) + 0x4c; 0x11; 0xd8; (* ADC (% rax) (% r11) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc4; (* SUB (% r12) (% rax) *) + 0x49; 0x19; 0xdd; (* SBB (% r13) (% rbx) *) + 0x49; 0x19; 0xee; (* SBB (% r14) (% rbp) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd1; (* ADD (% r9) (% rdx) *) + 0x49; 0x83; 0xd2; 0x00; (* ADC (% r10) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x51; 0x20; (* MOV (% rdx) (Memop Quadword (%% (rcx,32))) *) + 0x45; 0x31; 0xdb; (* XOR (% r11d) (% r11d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x49; 0x11; 0xc1; (* ADC (% r9) (% rax) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0x4d; 0x11; 0xdb; (* ADC (% r11) (% r11) *) + 0x4c; 0x89; 0xe2; (* MOV (% rdx) (% r12) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xe2; (* ADD (% rdx) (% r12) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0x9b; 0xf6; 0xdb; + (* MULX4 (% rbx,% r12) (% rdx,% rbx) *) + 0x4c; 0x11; 0xe0; (* ADC (% rax) (% r12) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc5; (* SUB (% r13) (% rax) *) + 0x49; 0x19; 0xde; (* SBB (% r14) (% rbx) *) + 0x49; 0x19; 0xef; (* SBB (% r15) (% rbp) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd2; (* ADD (% r10) (% rdx) *) + 0x49; 0x83; 0xd3; 0x00; (* ADC (% r11) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x51; 0x28; (* MOV (% rdx) (Memop Quadword (%% (rcx,40))) *) + 0x45; 0x31; 0xe4; (* XOR (% r12d) (% r12d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xdc; + (* ADOX (% r11) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x4d; 0x11; 0xe4; (* ADC (% r12) (% r12) *) + 0x4c; 0x89; 0xea; (* MOV (% rdx) (% r13) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xea; (* ADD (% rdx) (% r13) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0x93; 0xf6; 0xdb; + (* MULX4 (% rbx,% r13) (% rdx,% rbx) *) + 0x4c; 0x11; 0xe8; (* ADC (% rax) (% r13) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc6; (* SUB (% r14) (% rax) *) + 0x49; 0x19; 0xdf; (* SBB (% r15) (% rbx) *) + 0x49; 0x19; 0xe8; (* SBB (% r8) (% rbp) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd3; (* ADD (% r11) (% rdx) *) + 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) + 0x31; 0xd2; (* XOR (% edx) (% edx) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x45; 0x31; 0xed; (* XOR (% r13d) (% r13d) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0x4c; 0x01; 0xf0; (* ADD (% rax) (% r14) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0x4c; 0x11; 0xfb; (* ADC (% rbx) (% r15) *) + 0xb9; 0x01; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 1)) *) + 0x4c; 0x11; 0xc1; (* ADC (% rcx) (% r8) *) + 0x4c; 0x11; 0xca; (* ADC (% rdx) (% r9) *) + 0x4c; 0x11; 0xd5; (* ADC (% rbp) (% r10) *) + 0x4d; 0x11; 0xdd; (* ADC (% r13) (% r11) *) + 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) + 0x4c; 0x0f; 0x45; 0xf0; (* CMOVNE (% r14) (% rax) *) + 0x4c; 0x0f; 0x45; 0xfb; (* CMOVNE (% r15) (% rbx) *) + 0x4c; 0x0f; 0x45; 0xc1; (* CMOVNE (% r8) (% rcx) *) + 0x4c; 0x0f; 0x45; 0xca; (* CMOVNE (% r9) (% rdx) *) + 0x4c; 0x0f; 0x45; 0xd5; (* CMOVNE (% r10) (% rbp) *) + 0x4d; 0x0f; 0x45; 0xdd; (* CMOVNE (% r11) (% r13) *) + 0x4c; 0x89; 0x74; 0x24; 0x60; + (* MOV (Memop Quadword (%% (rsp,96))) (% r14) *) + 0x4c; 0x89; 0x7c; 0x24; 0x68; + (* MOV (Memop Quadword (%% (rsp,104))) (% r15) *) + 0x4c; 0x89; 0x44; 0x24; 0x70; + (* MOV (Memop Quadword (%% (rsp,112))) (% r8) *) + 0x4c; 0x89; 0x4c; 0x24; 0x78; + (* MOV (Memop Quadword (%% (rsp,120))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,128))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,136))) (% r11) *) + 0x48; 0x8b; 0x54; 0x24; 0x30; + (* MOV (% rdx) (Memop Quadword (%% (rsp,48))) *) + 0x45; 0x31; 0xff; (* XOR (% r15d) (% r15d) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x0c; 0x24; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x54; 0x24; 0x08; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x49; 0x01; 0xd9; (* ADD (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x64; 0x24; 0x18; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x6c; 0x24; 0x20; + (* MULX4 (% r13,% rbx) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x49; 0x11; 0xdc; (* ADC (% r12) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x74; 0x24; 0x28; + (* MULX4 (% r14,% rbx) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x49; 0x11; 0xdd; (* ADC (% r13) (% rbx) *) + 0x4d; 0x11; 0xfe; (* ADC (% r14) (% r15) *) + 0x4c; 0x89; 0xc2; (* MOV (% rdx) (% r8) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xc2; (* ADD (% rdx) (% r8) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xbb; 0xf6; 0xdb; + (* MULX4 (% rbx,% r8) (% rdx,% rbx) *) + 0x4c; 0x11; 0xc0; (* ADC (% rax) (% r8) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc1; (* SUB (% r9) (% rax) *) + 0x49; 0x19; 0xda; (* SBB (% r10) (% rbx) *) + 0x49; 0x19; 0xeb; (* SBB (% r11) (% rbp) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd6; (* ADD (% r14) (% rdx) *) + 0x49; 0x83; 0xd7; 0x00; (* ADC (% r15) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x54; 0x24; 0x38; + (* MOV (% rdx) (Memop Quadword (%% (rsp,56))) *) + 0x45; 0x31; 0xc0; (* XOR (% r8d) (% r8d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf8; + (* ADOX (% r15) (% r8) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x49; 0x11; 0xc6; (* ADC (% r14) (% rax) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x4d; 0x11; 0xc0; (* ADC (% r8) (% r8) *) + 0x4c; 0x89; 0xca; (* MOV (% rdx) (% r9) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xca; (* ADD (% rdx) (% r9) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xb3; 0xf6; 0xdb; + (* MULX4 (% rbx,% r9) (% rdx,% rbx) *) + 0x4c; 0x11; 0xc8; (* ADC (% rax) (% r9) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc2; (* SUB (% r10) (% rax) *) + 0x49; 0x19; 0xdb; (* SBB (% r11) (% rbx) *) + 0x49; 0x19; 0xec; (* SBB (% r12) (% rbp) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd7; (* ADD (% r15) (% rdx) *) + 0x49; 0x83; 0xd0; 0x00; (* ADC (% r8) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x54; 0x24; 0x40; + (* MOV (% rdx) (Memop Quadword (%% (rsp,64))) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xc1; + (* ADOX (% r8) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x49; 0x11; 0xc7; (* ADC (% r15) (% rax) *) + 0x49; 0x11; 0xd8; (* ADC (% r8) (% rbx) *) + 0x4d; 0x11; 0xc9; (* ADC (% r9) (% r9) *) + 0x4c; 0x89; 0xd2; (* MOV (% rdx) (% r10) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xd2; (* ADD (% rdx) (% r10) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xab; 0xf6; 0xdb; + (* MULX4 (% rbx,% r10) (% rdx,% rbx) *) + 0x4c; 0x11; 0xd0; (* ADC (% rax) (% r10) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc3; (* SUB (% r11) (% rax) *) + 0x49; 0x19; 0xdc; (* SBB (% r12) (% rbx) *) + 0x49; 0x19; 0xed; (* SBB (% r13) (% rbp) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd0; (* ADD (% r8) (% rdx) *) + 0x49; 0x83; 0xd1; 0x00; (* ADC (% r9) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x54; 0x24; 0x48; + (* MOV (% rdx) (Memop Quadword (%% (rsp,72))) *) + 0x45; 0x31; 0xd2; (* XOR (% r10d) (% r10d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xca; + (* ADOX (% r9) (% r10) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x49; 0x11; 0xc0; (* ADC (% r8) (% rax) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0x4d; 0x11; 0xd2; (* ADC (% r10) (% r10) *) + 0x4c; 0x89; 0xda; (* MOV (% rdx) (% r11) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xda; (* ADD (% rdx) (% r11) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xa3; 0xf6; 0xdb; + (* MULX4 (% rbx,% r11) (% rdx,% rbx) *) + 0x4c; 0x11; 0xd8; (* ADC (% rax) (% r11) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc4; (* SUB (% r12) (% rax) *) + 0x49; 0x19; 0xdd; (* SBB (% r13) (% rbx) *) + 0x49; 0x19; 0xee; (* SBB (% r14) (% rbp) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd1; (* ADD (% r9) (% rdx) *) + 0x49; 0x83; 0xd2; 0x00; (* ADC (% r10) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x54; 0x24; 0x50; + (* MOV (% rdx) (Memop Quadword (%% (rsp,80))) *) + 0x45; 0x31; 0xdb; (* XOR (% r11d) (% r11d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x49; 0x11; 0xc1; (* ADC (% r9) (% rax) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0x4d; 0x11; 0xdb; (* ADC (% r11) (% r11) *) + 0x4c; 0x89; 0xe2; (* MOV (% rdx) (% r12) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xe2; (* ADD (% rdx) (% r12) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0x9b; 0xf6; 0xdb; + (* MULX4 (% rbx,% r12) (% rdx,% rbx) *) + 0x4c; 0x11; 0xe0; (* ADC (% rax) (% r12) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc5; (* SUB (% r13) (% rax) *) + 0x49; 0x19; 0xde; (* SBB (% r14) (% rbx) *) + 0x49; 0x19; 0xef; (* SBB (% r15) (% rbp) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd2; (* ADD (% r10) (% rdx) *) + 0x49; 0x83; 0xd3; 0x00; (* ADC (% r11) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x54; 0x24; 0x58; + (* MOV (% rdx) (Memop Quadword (%% (rsp,88))) *) + 0x45; 0x31; 0xe4; (* XOR (% r12d) (% r12d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xdc; + (* ADOX (% r11) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x4d; 0x11; 0xe4; (* ADC (% r12) (% r12) *) + 0x4c; 0x89; 0xea; (* MOV (% rdx) (% r13) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xea; (* ADD (% rdx) (% r13) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0x93; 0xf6; 0xdb; + (* MULX4 (% rbx,% r13) (% rdx,% rbx) *) + 0x4c; 0x11; 0xe8; (* ADC (% rax) (% r13) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc6; (* SUB (% r14) (% rax) *) + 0x49; 0x19; 0xdf; (* SBB (% r15) (% rbx) *) + 0x49; 0x19; 0xe8; (* SBB (% r8) (% rbp) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd3; (* ADD (% r11) (% rdx) *) + 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) + 0x31; 0xd2; (* XOR (% edx) (% edx) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x45; 0x31; 0xed; (* XOR (% r13d) (% r13d) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0x4c; 0x01; 0xf0; (* ADD (% rax) (% r14) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0x4c; 0x11; 0xfb; (* ADC (% rbx) (% r15) *) + 0xb9; 0x01; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 1)) *) + 0x4c; 0x11; 0xc1; (* ADC (% rcx) (% r8) *) + 0x4c; 0x11; 0xca; (* ADC (% rdx) (% r9) *) + 0x4c; 0x11; 0xd5; (* ADC (% rbp) (% r10) *) + 0x4d; 0x11; 0xdd; (* ADC (% r13) (% r11) *) + 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) + 0x4c; 0x0f; 0x45; 0xf0; (* CMOVNE (% r14) (% rax) *) + 0x4c; 0x0f; 0x45; 0xfb; (* CMOVNE (% r15) (% rbx) *) + 0x4c; 0x0f; 0x45; 0xc1; (* CMOVNE (% r8) (% rcx) *) + 0x4c; 0x0f; 0x45; 0xca; (* CMOVNE (% r9) (% rdx) *) + 0x4c; 0x0f; 0x45; 0xd5; (* CMOVNE (% r10) (% rbp) *) + 0x4d; 0x0f; 0x45; 0xdd; (* CMOVNE (% r11) (% r13) *) + 0x4c; 0x89; 0x74; 0x24; 0x30; + (* MOV (Memop Quadword (%% (rsp,48))) (% r14) *) + 0x4c; 0x89; 0x7c; 0x24; 0x38; + (* MOV (Memop Quadword (%% (rsp,56))) (% r15) *) + 0x4c; 0x89; 0x44; 0x24; 0x40; + (* MOV (Memop Quadword (%% (rsp,64))) (% r8) *) + 0x4c; 0x89; 0x4c; 0x24; 0x48; + (* MOV (Memop Quadword (%% (rsp,72))) (% r9) *) + 0x4c; 0x89; 0x54; 0x24; 0x50; + (* MOV (Memop Quadword (%% (rsp,80))) (% r10) *) + 0x4c; 0x89; 0x5c; 0x24; 0x58; + (* MOV (Memop Quadword (%% (rsp,88))) (% r11) *) + 0x48; 0x8b; 0xb4; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MOV (% rsi) (Memop Quadword (%% (rsp,288))) *) + 0x48; 0x8b; 0x44; 0x24; 0x60; + (* MOV (% rax) (Memop Quadword (%% (rsp,96))) *) + 0x48; 0x2b; 0x06; (* SUB (% rax) (Memop Quadword (%% (rsi,0))) *) + 0x48; 0x8b; 0x54; 0x24; 0x68; + (* MOV (% rdx) (Memop Quadword (%% (rsp,104))) *) + 0x48; 0x1b; 0x56; 0x08; (* SBB (% rdx) (Memop Quadword (%% (rsi,8))) *) + 0x4c; 0x8b; 0x44; 0x24; 0x70; + (* MOV (% r8) (Memop Quadword (%% (rsp,112))) *) + 0x4c; 0x1b; 0x46; 0x10; (* SBB (% r8) (Memop Quadword (%% (rsi,16))) *) + 0x4c; 0x8b; 0x4c; 0x24; 0x78; + (* MOV (% r9) (Memop Quadword (%% (rsp,120))) *) + 0x4c; 0x1b; 0x4e; 0x18; (* SBB (% r9) (Memop Quadword (%% (rsi,24))) *) + 0x4c; 0x8b; 0x94; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (% r10) (Memop Quadword (%% (rsp,128))) *) + 0x4c; 0x1b; 0x56; 0x20; (* SBB (% r10) (Memop Quadword (%% (rsi,32))) *) + 0x4c; 0x8b; 0x9c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (% r11) (Memop Quadword (%% (rsp,136))) *) + 0x4c; 0x1b; 0x5e; 0x28; (* SBB (% r11) (Memop Quadword (%% (rsi,40))) *) + 0x48; 0x19; 0xc9; (* SBB (% rcx) (% rcx) *) + 0xbe; 0xff; 0xff; 0xff; 0xff; + (* MOV (% esi) (Imm32 (word 4294967295)) *) + 0x48; 0x21; 0xf1; (* AND (% rcx) (% rsi) *) + 0x48; 0x31; 0xf6; (* XOR (% rsi) (% rsi) *) + 0x48; 0x29; 0xce; (* SUB (% rsi) (% rcx) *) + 0x48; 0x29; 0xf0; (* SUB (% rax) (% rsi) *) + 0x48; 0x89; 0x84; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,240))) (% rax) *) + 0x48; 0x19; 0xca; (* SBB (% rdx) (% rcx) *) + 0x48; 0x89; 0x94; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,248))) (% rdx) *) + 0x48; 0x19; 0xc0; (* SBB (% rax) (% rax) *) + 0x48; 0x21; 0xf1; (* AND (% rcx) (% rsi) *) + 0x48; 0xf7; 0xd8; (* NEG (% rax) *) + 0x49; 0x19; 0xc8; (* SBB (% r8) (% rcx) *) + 0x4c; 0x89; 0x84; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,256))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x8c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,264))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x94; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,272))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x9c; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,280))) (% r11) *) + 0x48; 0x8b; 0xb4; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MOV (% rsi) (Memop Quadword (%% (rsp,288))) *) + 0x48; 0x8b; 0x44; 0x24; 0x30; + (* MOV (% rax) (Memop Quadword (%% (rsp,48))) *) + 0x48; 0x2b; 0x46; 0x30; (* SUB (% rax) (Memop Quadword (%% (rsi,48))) *) + 0x48; 0x8b; 0x54; 0x24; 0x38; + (* MOV (% rdx) (Memop Quadword (%% (rsp,56))) *) + 0x48; 0x1b; 0x56; 0x38; (* SBB (% rdx) (Memop Quadword (%% (rsi,56))) *) + 0x4c; 0x8b; 0x44; 0x24; 0x40; + (* MOV (% r8) (Memop Quadword (%% (rsp,64))) *) + 0x4c; 0x1b; 0x46; 0x40; (* SBB (% r8) (Memop Quadword (%% (rsi,64))) *) + 0x4c; 0x8b; 0x4c; 0x24; 0x48; + (* MOV (% r9) (Memop Quadword (%% (rsp,72))) *) + 0x4c; 0x1b; 0x4e; 0x48; (* SBB (% r9) (Memop Quadword (%% (rsi,72))) *) + 0x4c; 0x8b; 0x54; 0x24; 0x50; + (* MOV (% r10) (Memop Quadword (%% (rsp,80))) *) + 0x4c; 0x1b; 0x56; 0x50; (* SBB (% r10) (Memop Quadword (%% (rsi,80))) *) + 0x4c; 0x8b; 0x5c; 0x24; 0x58; + (* MOV (% r11) (Memop Quadword (%% (rsp,88))) *) + 0x4c; 0x1b; 0x5e; 0x58; (* SBB (% r11) (Memop Quadword (%% (rsi,88))) *) + 0x48; 0x19; 0xc9; (* SBB (% rcx) (% rcx) *) + 0xbe; 0xff; 0xff; 0xff; 0xff; + (* MOV (% esi) (Imm32 (word 4294967295)) *) + 0x48; 0x21; 0xf1; (* AND (% rcx) (% rsi) *) + 0x48; 0x31; 0xf6; (* XOR (% rsi) (% rsi) *) + 0x48; 0x29; 0xce; (* SUB (% rsi) (% rcx) *) + 0x48; 0x29; 0xf0; (* SUB (% rax) (% rsi) *) + 0x48; 0x89; 0x44; 0x24; 0x30; + (* MOV (Memop Quadword (%% (rsp,48))) (% rax) *) + 0x48; 0x19; 0xca; (* SBB (% rdx) (% rcx) *) + 0x48; 0x89; 0x54; 0x24; 0x38; + (* MOV (Memop Quadword (%% (rsp,56))) (% rdx) *) + 0x48; 0x19; 0xc0; (* SBB (% rax) (% rax) *) + 0x48; 0x21; 0xf1; (* AND (% rcx) (% rsi) *) + 0x48; 0xf7; 0xd8; (* NEG (% rax) *) + 0x49; 0x19; 0xc8; (* SBB (% r8) (% rcx) *) + 0x4c; 0x89; 0x44; 0x24; 0x40; + (* MOV (Memop Quadword (%% (rsp,64))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x4c; 0x24; 0x48; + (* MOV (Memop Quadword (%% (rsp,72))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x54; 0x24; 0x50; + (* MOV (Memop Quadword (%% (rsp,80))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x5c; 0x24; 0x58; + (* MOV (Memop Quadword (%% (rsp,88))) (% r11) *) + 0x48; 0x8b; 0x94; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,240))) *) + 0xc4; 0x62; 0xb3; 0xf6; 0x94; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% r10,% r9) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0xc4; 0x62; 0xa3; 0xf6; 0xa4; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% r12,% r11) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0xc4; 0x62; 0x93; 0xf6; 0xb4; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% r14,% r13) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0x48; 0x8b; 0x94; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,264))) *) + 0xc4; 0xe2; 0x83; 0xf6; 0x8c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% rcx,% r15) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x94; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,256))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x48; 0x8b; 0x94; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,248))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADCX (% r15) (% rbp) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xcd; + (* ADOX (% rcx) (% rbp) *) + 0x48; 0x11; 0xe9; (* ADC (% rcx) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x94; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,272))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0x8b; 0x94; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,256))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x94; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% rdx,% rax) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xca; + (* ADOX (% rcx) (% rdx) *) + 0x48; 0x8b; 0x94; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,280))) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xac; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% rbp,% rbx) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x94; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rdx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% rcx) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% rbx) (% rdx) *) + 0xb8; 0x00; 0x00; 0x00; 0x00; + (* MOV (% eax) (Imm32 (word 0)) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% rbx) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xe8; + (* ADOX (% rbp) (% rax) *) + 0x48; 0x11; 0xc5; (* ADC (% rbp) (% rax) *) + 0x48; 0x31; 0xc0; (* XOR (% rax) (% rax) *) + 0x48; 0x8b; 0x94; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,240))) *) + 0xc4; 0xe2; 0xbb; 0xf6; 0x84; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rax,% r8) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% r9) (% r9) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADOX (% r9) (% rax) *) + 0x48; 0x8b; 0x94; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,248))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xd2; + (* ADCX (% r10) (% r10) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADOX (% r10) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% r11) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% r11) (% rdx) *) + 0x48; 0x8b; 0x94; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,256))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xe4; + (* ADCX (% r12) (% r12) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADOX (% r12) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% r13) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xea; + (* ADOX (% r13) (% rdx) *) + 0x48; 0x8b; 0x94; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,264))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf6; + (* ADCX (% r14) (% r14) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xff; + (* ADCX (% r15) (% r15) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfa; + (* ADOX (% r15) (% rdx) *) + 0x48; 0x8b; 0x94; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,272))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% rcx) (% rcx) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc8; + (* ADOX (% rcx) (% rax) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% rbx) (% rbx) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% rbx) (% rdx) *) + 0x48; 0x8b; 0x94; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,280))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xf2; + (* MULX4 (% rsi,% rax) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% rbp) (% rbp) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xe8; + (* ADOX (% rbp) (% rax) *) + 0xb8; 0x00; 0x00; 0x00; 0x00; + (* MOV (% eax) (Imm32 (word 0)) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% rsi) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% rsi) (% rax) *) + 0x48; 0x89; 0x9c; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,144))) (% rbx) *) + 0x4c; 0x89; 0xc2; (* MOV (% rdx) (% r8) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xc2; (* ADD (% rdx) (% r8) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xbb; 0xf6; 0xc0; + (* MULX4 (% rax,% r8) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xc3; + (* MULX4 (% r8,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd0; (* ADC (% r8) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc1; (* SUB (% r9) (% rax) *) + 0x4d; 0x19; 0xc2; (* SBB (% r10) (% r8) *) + 0x49; 0x19; 0xdb; (* SBB (% r11) (% rbx) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd0; (* MOV (% r8) (% rdx) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xca; (* MOV (% rdx) (% r9) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xca; (* ADD (% rdx) (% r9) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xb3; 0xf6; 0xc0; + (* MULX4 (% rax,% r9) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xcb; + (* MULX4 (% r9,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd1; (* ADC (% r9) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc2; (* SUB (% r10) (% rax) *) + 0x4d; 0x19; 0xcb; (* SBB (% r11) (% r9) *) + 0x49; 0x19; 0xdc; (* SBB (% r12) (% rbx) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd1; (* MOV (% r9) (% rdx) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xd2; (* MOV (% rdx) (% r10) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xd2; (* ADD (% rdx) (% r10) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xab; 0xf6; 0xc0; + (* MULX4 (% rax,% r10) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xd3; + (* MULX4 (% r10,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd2; (* ADC (% r10) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc3; (* SUB (% r11) (% rax) *) + 0x4d; 0x19; 0xd4; (* SBB (% r12) (% r10) *) + 0x49; 0x19; 0xdd; (* SBB (% r13) (% rbx) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd2; (* MOV (% r10) (% rdx) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xda; (* MOV (% rdx) (% r11) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xda; (* ADD (% rdx) (% r11) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xa3; 0xf6; 0xc0; + (* MULX4 (% rax,% r11) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xdb; + (* MULX4 (% r11,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd3; (* ADC (% r11) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc4; (* SUB (% r12) (% rax) *) + 0x4d; 0x19; 0xdd; (* SBB (% r13) (% r11) *) + 0x49; 0x19; 0xd8; (* SBB (% r8) (% rbx) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd3; (* MOV (% r11) (% rdx) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xe2; (* MOV (% rdx) (% r12) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xe2; (* ADD (% rdx) (% r12) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0x9b; 0xf6; 0xc0; + (* MULX4 (% rax,% r12) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xe3; + (* MULX4 (% r12,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd4; (* ADC (% r12) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc5; (* SUB (% r13) (% rax) *) + 0x4d; 0x19; 0xe0; (* SBB (% r8) (% r12) *) + 0x49; 0x19; 0xd9; (* SBB (% r9) (% rbx) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd4; (* MOV (% r12) (% rdx) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xea; (* MOV (% rdx) (% r13) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xea; (* ADD (% rdx) (% r13) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0x93; 0xf6; 0xc0; + (* MULX4 (% rax,% r13) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xeb; + (* MULX4 (% r13,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd5; (* ADC (% r13) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc0; (* SUB (% r8) (% rax) *) + 0x4d; 0x19; 0xe9; (* SBB (% r9) (% r13) *) + 0x49; 0x19; 0xda; (* SBB (% r10) (% rbx) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd5; (* MOV (% r13) (% rdx) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x9c; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (% rbx) (Memop Quadword (%% (rsp,144))) *) + 0x4d; 0x01; 0xc6; (* ADD (% r14) (% r8) *) + 0x4d; 0x11; 0xcf; (* ADC (% r15) (% r9) *) + 0x4c; 0x11; 0xd1; (* ADC (% rcx) (% r10) *) + 0x4c; 0x11; 0xdb; (* ADC (% rbx) (% r11) *) + 0x4c; 0x11; 0xe5; (* ADC (% rbp) (% r12) *) + 0x4c; 0x11; 0xee; (* ADC (% rsi) (% r13) *) + 0x41; 0xb8; 0x00; 0x00; 0x00; 0x00; + (* MOV (% r8d) (Imm32 (word 0)) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0x41; 0xb9; 0xff; 0xff; 0xff; 0xff; + (* MOV (% r9d) (Imm32 (word 4294967295)) *) + 0x41; 0xba; 0x01; 0x00; 0x00; 0x00; + (* MOV (% r10d) (Imm32 (word 1)) *) + 0x49; 0x0f; 0x43; 0xc0; (* CMOVAE (% rax) (% r8) *) + 0x4d; 0x0f; 0x43; 0xc8; (* CMOVAE (% r9) (% r8) *) + 0x4d; 0x0f; 0x43; 0xd0; (* CMOVAE (% r10) (% r8) *) + 0x49; 0x01; 0xc6; (* ADD (% r14) (% rax) *) + 0x4d; 0x11; 0xcf; (* ADC (% r15) (% r9) *) + 0x4c; 0x11; 0xd1; (* ADC (% rcx) (% r10) *) + 0x4c; 0x11; 0xc3; (* ADC (% rbx) (% r8) *) + 0x4c; 0x11; 0xc5; (* ADC (% rbp) (% r8) *) + 0x4c; 0x11; 0xc6; (* ADC (% rsi) (% r8) *) + 0x4c; 0x89; 0xb4; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,144))) (% r14) *) + 0x4c; 0x89; 0xbc; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,152))) (% r15) *) + 0x48; 0x89; 0x8c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,160))) (% rcx) *) + 0x48; 0x89; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,168))) (% rbx) *) + 0x48; 0x89; 0xac; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,176))) (% rbp) *) + 0x48; 0x89; 0xb4; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,184))) (% rsi) *) + 0x48; 0x8b; 0x54; 0x24; 0x30; + (* MOV (% rdx) (Memop Quadword (%% (rsp,48))) *) + 0xc4; 0x62; 0xb3; 0xf6; 0x54; 0x24; 0x38; + (* MULX4 (% r10,% r9) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0xc4; 0x62; 0xa3; 0xf6; 0x64; 0x24; 0x48; + (* MULX4 (% r12,% r11) (% rdx,Memop Quadword (%% (rsp,72))) *) + 0xc4; 0x62; 0x93; 0xf6; 0x74; 0x24; 0x58; + (* MULX4 (% r14,% r13) (% rdx,Memop Quadword (%% (rsp,88))) *) + 0x48; 0x8b; 0x54; 0x24; 0x48; + (* MOV (% rdx) (Memop Quadword (%% (rsp,72))) *) + 0xc4; 0xe2; 0x83; 0xf6; 0x4c; 0x24; 0x50; + (* MULX4 (% rcx,% r15) (% rdx,Memop Quadword (%% (rsp,80))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x54; 0x24; 0x40; + (* MOV (% rdx) (Memop Quadword (%% (rsp,64))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x38; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x48; 0x8b; 0x54; 0x24; 0x38; + (* MOV (% rdx) (Memop Quadword (%% (rsp,56))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x58; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADCX (% r15) (% rbp) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xcd; + (* ADOX (% rcx) (% rbp) *) + 0x48; 0x11; 0xe9; (* ADC (% rcx) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x54; 0x24; 0x50; + (* MOV (% rdx) (Memop Quadword (%% (rsp,80))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0x8b; 0x54; 0x24; 0x40; + (* MOV (% rdx) (Memop Quadword (%% (rsp,64))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x54; 0x24; 0x58; + (* MULX4 (% rdx,% rax) (% rdx,Memop Quadword (%% (rsp,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xca; + (* ADOX (% rcx) (% rdx) *) + 0x48; 0x8b; 0x54; 0x24; 0x58; + (* MOV (% rdx) (Memop Quadword (%% (rsp,88))) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0x6c; 0x24; 0x50; + (* MULX4 (% rbp,% rbx) (% rdx,Memop Quadword (%% (rsp,80))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x54; 0x24; 0x48; + (* MULX4 (% rdx,% rax) (% rdx,Memop Quadword (%% (rsp,72))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% rcx) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% rbx) (% rdx) *) + 0xb8; 0x00; 0x00; 0x00; 0x00; + (* MOV (% eax) (Imm32 (word 0)) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% rbx) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xe8; + (* ADOX (% rbp) (% rax) *) + 0x48; 0x11; 0xc5; (* ADC (% rbp) (% rax) *) + 0x48; 0x31; 0xc0; (* XOR (% rax) (% rax) *) + 0x48; 0x8b; 0x54; 0x24; 0x30; + (* MOV (% rdx) (Memop Quadword (%% (rsp,48))) *) + 0xc4; 0xe2; 0xbb; 0xf6; 0x44; 0x24; 0x30; + (* MULX4 (% rax,% r8) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% r9) (% r9) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADOX (% r9) (% rax) *) + 0x48; 0x8b; 0x54; 0x24; 0x38; + (* MOV (% rdx) (Memop Quadword (%% (rsp,56))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xd2; + (* ADCX (% r10) (% r10) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADOX (% r10) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% r11) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% r11) (% rdx) *) + 0x48; 0x8b; 0x54; 0x24; 0x40; + (* MOV (% rdx) (Memop Quadword (%% (rsp,64))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xe4; + (* ADCX (% r12) (% r12) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADOX (% r12) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% r13) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xea; + (* ADOX (% r13) (% rdx) *) + 0x48; 0x8b; 0x54; 0x24; 0x48; + (* MOV (% rdx) (Memop Quadword (%% (rsp,72))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf6; + (* ADCX (% r14) (% r14) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% r14) (% rax) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xff; + (* ADCX (% r15) (% r15) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfa; + (* ADOX (% r15) (% rdx) *) + 0x48; 0x8b; 0x54; 0x24; 0x50; + (* MOV (% rdx) (Memop Quadword (%% (rsp,80))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xd2; + (* MULX4 (% rdx,% rax) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% rcx) (% rcx) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc8; + (* ADOX (% rcx) (% rax) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% rbx) (% rbx) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xda; + (* ADOX (% rbx) (% rdx) *) + 0x48; 0x8b; 0x54; 0x24; 0x58; + (* MOV (% rdx) (Memop Quadword (%% (rsp,88))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xf2; + (* MULX4 (% rsi,% rax) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% rbp) (% rbp) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xe8; + (* ADOX (% rbp) (% rax) *) + 0xb8; 0x00; 0x00; 0x00; 0x00; + (* MOV (% eax) (Imm32 (word 0)) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% rsi) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xf0; + (* ADOX (% rsi) (% rax) *) + 0x48; 0x89; 0x1c; 0x24; (* MOV (Memop Quadword (%% (rsp,0))) (% rbx) *) + 0x4c; 0x89; 0xc2; (* MOV (% rdx) (% r8) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xc2; (* ADD (% rdx) (% r8) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xbb; 0xf6; 0xc0; + (* MULX4 (% rax,% r8) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xc3; + (* MULX4 (% r8,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd0; (* ADC (% r8) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc1; (* SUB (% r9) (% rax) *) + 0x4d; 0x19; 0xc2; (* SBB (% r10) (% r8) *) + 0x49; 0x19; 0xdb; (* SBB (% r11) (% rbx) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd0; (* MOV (% r8) (% rdx) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xca; (* MOV (% rdx) (% r9) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xca; (* ADD (% rdx) (% r9) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xb3; 0xf6; 0xc0; + (* MULX4 (% rax,% r9) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xcb; + (* MULX4 (% r9,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd1; (* ADC (% r9) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc2; (* SUB (% r10) (% rax) *) + 0x4d; 0x19; 0xcb; (* SBB (% r11) (% r9) *) + 0x49; 0x19; 0xdc; (* SBB (% r12) (% rbx) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd1; (* MOV (% r9) (% rdx) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xd2; (* MOV (% rdx) (% r10) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xd2; (* ADD (% rdx) (% r10) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xab; 0xf6; 0xc0; + (* MULX4 (% rax,% r10) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xd3; + (* MULX4 (% r10,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd2; (* ADC (% r10) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc3; (* SUB (% r11) (% rax) *) + 0x4d; 0x19; 0xd4; (* SBB (% r12) (% r10) *) + 0x49; 0x19; 0xdd; (* SBB (% r13) (% rbx) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd2; (* MOV (% r10) (% rdx) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xda; (* MOV (% rdx) (% r11) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xda; (* ADD (% rdx) (% r11) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xa3; 0xf6; 0xc0; + (* MULX4 (% rax,% r11) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xdb; + (* MULX4 (% r11,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd3; (* ADC (% r11) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc4; (* SUB (% r12) (% rax) *) + 0x4d; 0x19; 0xdd; (* SBB (% r13) (% r11) *) + 0x49; 0x19; 0xd8; (* SBB (% r8) (% rbx) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd3; (* MOV (% r11) (% rdx) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xe2; (* MOV (% rdx) (% r12) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xe2; (* ADD (% rdx) (% r12) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0x9b; 0xf6; 0xc0; + (* MULX4 (% rax,% r12) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xe3; + (* MULX4 (% r12,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd4; (* ADC (% r12) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc5; (* SUB (% r13) (% rax) *) + 0x4d; 0x19; 0xe0; (* SBB (% r8) (% r12) *) + 0x49; 0x19; 0xd9; (* SBB (% r9) (% rbx) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd4; (* MOV (% r12) (% rdx) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xea; (* MOV (% rdx) (% r13) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xea; (* ADD (% rdx) (% r13) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0x93; 0xf6; 0xc0; + (* MULX4 (% rax,% r13) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xeb; + (* MULX4 (% r13,% rbx) (% rdx,% rbx) *) + 0x48; 0x01; 0xd8; (* ADD (% rax) (% rbx) *) + 0x49; 0x11; 0xd5; (* ADC (% r13) (% rdx) *) + 0xbb; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ebx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xdb; (* ADC (% rbx) (% rbx) *) + 0x49; 0x29; 0xc0; (* SUB (% r8) (% rax) *) + 0x4d; 0x19; 0xe9; (* SBB (% r9) (% r13) *) + 0x49; 0x19; 0xda; (* SBB (% r10) (% rbx) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x49; 0x89; 0xd5; (* MOV (% r13) (% rdx) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x1c; 0x24; (* MOV (% rbx) (Memop Quadword (%% (rsp,0))) *) + 0x4d; 0x01; 0xc6; (* ADD (% r14) (% r8) *) + 0x4d; 0x11; 0xcf; (* ADC (% r15) (% r9) *) + 0x4c; 0x11; 0xd1; (* ADC (% rcx) (% r10) *) + 0x4c; 0x11; 0xdb; (* ADC (% rbx) (% r11) *) + 0x4c; 0x11; 0xe5; (* ADC (% rbp) (% r12) *) + 0x4c; 0x11; 0xee; (* ADC (% rsi) (% r13) *) + 0x41; 0xb8; 0x00; 0x00; 0x00; 0x00; + (* MOV (% r8d) (Imm32 (word 0)) *) + 0x4d; 0x11; 0xc0; (* ADC (% r8) (% r8) *) + 0x4d; 0x31; 0xdb; (* XOR (% r11) (% r11) *) + 0x4d; 0x31; 0xe4; (* XOR (% r12) (% r12) *) + 0x4d; 0x31; 0xed; (* XOR (% r13) (% r13) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0x4c; 0x01; 0xf0; (* ADD (% rax) (% r14) *) + 0x41; 0xb9; 0xff; 0xff; 0xff; 0xff; + (* MOV (% r9d) (Imm32 (word 4294967295)) *) + 0x4d; 0x11; 0xf9; (* ADC (% r9) (% r15) *) + 0x41; 0xba; 0x01; 0x00; 0x00; 0x00; + (* MOV (% r10d) (Imm32 (word 1)) *) + 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x49; 0x11; 0xec; (* ADC (% r12) (% rbp) *) + 0x49; 0x11; 0xf5; (* ADC (% r13) (% rsi) *) + 0x49; 0x83; 0xd0; 0x00; (* ADC (% r8) (Imm8 (word 0)) *) + 0x4c; 0x0f; 0x45; 0xf0; (* CMOVNE (% r14) (% rax) *) + 0x4d; 0x0f; 0x45; 0xf9; (* CMOVNE (% r15) (% r9) *) + 0x49; 0x0f; 0x45; 0xca; (* CMOVNE (% rcx) (% r10) *) + 0x49; 0x0f; 0x45; 0xdb; (* CMOVNE (% rbx) (% r11) *) + 0x49; 0x0f; 0x45; 0xec; (* CMOVNE (% rbp) (% r12) *) + 0x49; 0x0f; 0x45; 0xf5; (* CMOVNE (% rsi) (% r13) *) + 0x4c; 0x89; 0x34; 0x24; (* MOV (Memop Quadword (%% (rsp,0))) (% r14) *) + 0x4c; 0x89; 0x7c; 0x24; 0x08; + (* MOV (Memop Quadword (%% (rsp,8))) (% r15) *) + 0x48; 0x89; 0x4c; 0x24; 0x10; + (* MOV (Memop Quadword (%% (rsp,16))) (% rcx) *) + 0x48; 0x89; 0x5c; 0x24; 0x18; + (* MOV (Memop Quadword (%% (rsp,24))) (% rbx) *) + 0x48; 0x89; 0x6c; 0x24; 0x20; + (* MOV (Memop Quadword (%% (rsp,32))) (% rbp) *) + 0x48; 0x89; 0x74; 0x24; 0x28; + (* MOV (Memop Quadword (%% (rsp,40))) (% rsi) *) + 0x48; 0x8b; 0xb4; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MOV (% rsi) (Memop Quadword (%% (rsp,288))) *) + 0x48; 0x8b; 0x16; (* MOV (% rdx) (Memop Quadword (%% (rsi,0))) *) + 0x45; 0x31; 0xff; (* XOR (% r15d) (% r15d) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x8c; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,144))) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x94; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,152))) *) + 0x49; 0x01; 0xd9; (* ADD (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xa4; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xac; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% r13,% rbx) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x49; 0x11; 0xdc; (* ADC (% r12) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xb4; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r14,% rbx) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xdd; (* ADC (% r13) (% rbx) *) + 0x4d; 0x11; 0xfe; (* ADC (% r14) (% r15) *) + 0x4c; 0x89; 0xc2; (* MOV (% rdx) (% r8) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xc2; (* ADD (% rdx) (% r8) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xbb; 0xf6; 0xdb; + (* MULX4 (% rbx,% r8) (% rdx,% rbx) *) + 0x4c; 0x11; 0xc0; (* ADC (% rax) (% r8) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc1; (* SUB (% r9) (% rax) *) + 0x49; 0x19; 0xda; (* SBB (% r10) (% rbx) *) + 0x49; 0x19; 0xeb; (* SBB (% r11) (% rbp) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd6; (* ADD (% r14) (% rdx) *) + 0x49; 0x83; 0xd7; 0x00; (* ADC (% r15) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x56; 0x08; (* MOV (% rdx) (Memop Quadword (%% (rsi,8))) *) + 0x45; 0x31; 0xc0; (* XOR (% r8d) (% r8d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf8; + (* ADOX (% r15) (% r8) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xc6; (* ADC (% r14) (% rax) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x4d; 0x11; 0xc0; (* ADC (% r8) (% r8) *) + 0x4c; 0x89; 0xca; (* MOV (% rdx) (% r9) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xca; (* ADD (% rdx) (% r9) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xb3; 0xf6; 0xdb; + (* MULX4 (% rbx,% r9) (% rdx,% rbx) *) + 0x4c; 0x11; 0xc8; (* ADC (% rax) (% r9) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc2; (* SUB (% r10) (% rax) *) + 0x49; 0x19; 0xdb; (* SBB (% r11) (% rbx) *) + 0x49; 0x19; 0xec; (* SBB (% r12) (% rbp) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd7; (* ADD (% r15) (% rdx) *) + 0x49; 0x83; 0xd0; 0x00; (* ADC (% r8) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x56; 0x10; (* MOV (% rdx) (Memop Quadword (%% (rsi,16))) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xc1; + (* ADOX (% r8) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xc7; (* ADC (% r15) (% rax) *) + 0x49; 0x11; 0xd8; (* ADC (% r8) (% rbx) *) + 0x4d; 0x11; 0xc9; (* ADC (% r9) (% r9) *) + 0x4c; 0x89; 0xd2; (* MOV (% rdx) (% r10) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xd2; (* ADD (% rdx) (% r10) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xab; 0xf6; 0xdb; + (* MULX4 (% rbx,% r10) (% rdx,% rbx) *) + 0x4c; 0x11; 0xd0; (* ADC (% rax) (% r10) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc3; (* SUB (% r11) (% rax) *) + 0x49; 0x19; 0xdc; (* SBB (% r12) (% rbx) *) + 0x49; 0x19; 0xed; (* SBB (% r13) (% rbp) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd0; (* ADD (% r8) (% rdx) *) + 0x49; 0x83; 0xd1; 0x00; (* ADC (% r9) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x56; 0x18; (* MOV (% rdx) (Memop Quadword (%% (rsi,24))) *) + 0x45; 0x31; 0xd2; (* XOR (% r10d) (% r10d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xca; + (* ADOX (% r9) (% r10) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xc0; (* ADC (% r8) (% rax) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0x4d; 0x11; 0xd2; (* ADC (% r10) (% r10) *) + 0x4c; 0x89; 0xda; (* MOV (% rdx) (% r11) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xda; (* ADD (% rdx) (% r11) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xa3; 0xf6; 0xdb; + (* MULX4 (% rbx,% r11) (% rdx,% rbx) *) + 0x4c; 0x11; 0xd8; (* ADC (% rax) (% r11) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc4; (* SUB (% r12) (% rax) *) + 0x49; 0x19; 0xdd; (* SBB (% r13) (% rbx) *) + 0x49; 0x19; 0xee; (* SBB (% r14) (% rbp) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd1; (* ADD (% r9) (% rdx) *) + 0x49; 0x83; 0xd2; 0x00; (* ADC (% r10) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x56; 0x20; (* MOV (% rdx) (Memop Quadword (%% (rsi,32))) *) + 0x45; 0x31; 0xdb; (* XOR (% r11d) (% r11d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xc1; (* ADC (% r9) (% rax) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0x4d; 0x11; 0xdb; (* ADC (% r11) (% r11) *) + 0x4c; 0x89; 0xe2; (* MOV (% rdx) (% r12) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xe2; (* ADD (% rdx) (% r12) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0x9b; 0xf6; 0xdb; + (* MULX4 (% rbx,% r12) (% rdx,% rbx) *) + 0x4c; 0x11; 0xe0; (* ADC (% rax) (% r12) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc5; (* SUB (% r13) (% rax) *) + 0x49; 0x19; 0xde; (* SBB (% r14) (% rbx) *) + 0x49; 0x19; 0xef; (* SBB (% r15) (% rbp) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd2; (* ADD (% r10) (% rdx) *) + 0x49; 0x83; 0xd3; 0x00; (* ADC (% r11) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x56; 0x28; (* MOV (% rdx) (Memop Quadword (%% (rsi,40))) *) + 0x45; 0x31; 0xe4; (* XOR (% r12d) (% r12d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xdc; + (* ADOX (% r11) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x4d; 0x11; 0xe4; (* ADC (% r12) (% r12) *) + 0x4c; 0x89; 0xea; (* MOV (% rdx) (% r13) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xea; (* ADD (% rdx) (% r13) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0x93; 0xf6; 0xdb; + (* MULX4 (% rbx,% r13) (% rdx,% rbx) *) + 0x4c; 0x11; 0xe8; (* ADC (% rax) (% r13) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc6; (* SUB (% r14) (% rax) *) + 0x49; 0x19; 0xdf; (* SBB (% r15) (% rbx) *) + 0x49; 0x19; 0xe8; (* SBB (% r8) (% rbp) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd3; (* ADD (% r11) (% rdx) *) + 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) + 0x31; 0xd2; (* XOR (% edx) (% edx) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x45; 0x31; 0xed; (* XOR (% r13d) (% r13d) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0x4c; 0x01; 0xf0; (* ADD (% rax) (% r14) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0x4c; 0x11; 0xfb; (* ADC (% rbx) (% r15) *) + 0xb9; 0x01; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 1)) *) + 0x4c; 0x11; 0xc1; (* ADC (% rcx) (% r8) *) + 0x4c; 0x11; 0xca; (* ADC (% rdx) (% r9) *) + 0x4c; 0x11; 0xd5; (* ADC (% rbp) (% r10) *) + 0x4d; 0x11; 0xdd; (* ADC (% r13) (% r11) *) + 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) + 0x4c; 0x0f; 0x45; 0xf0; (* CMOVNE (% r14) (% rax) *) + 0x4c; 0x0f; 0x45; 0xfb; (* CMOVNE (% r15) (% rbx) *) + 0x4c; 0x0f; 0x45; 0xc1; (* CMOVNE (% r8) (% rcx) *) + 0x4c; 0x0f; 0x45; 0xca; (* CMOVNE (% r9) (% rdx) *) + 0x4c; 0x0f; 0x45; 0xd5; (* CMOVNE (% r10) (% rbp) *) + 0x4d; 0x0f; 0x45; 0xdd; (* CMOVNE (% r11) (% r13) *) + 0x4c; 0x89; 0xb4; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,192))) (% r14) *) + 0x4c; 0x89; 0xbc; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,200))) (% r15) *) + 0x4c; 0x89; 0x84; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,208))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,216))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,224))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,232))) (% r11) *) + 0x48; 0x8b; 0x54; 0x24; 0x60; + (* MOV (% rdx) (Memop Quadword (%% (rsp,96))) *) + 0x45; 0x31; 0xff; (* XOR (% r15d) (% r15d) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x8c; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,144))) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x94; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,152))) *) + 0x49; 0x01; 0xd9; (* ADD (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xa4; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xac; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% r13,% rbx) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x49; 0x11; 0xdc; (* ADC (% r12) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xb4; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r14,% rbx) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xdd; (* ADC (% r13) (% rbx) *) + 0x4d; 0x11; 0xfe; (* ADC (% r14) (% r15) *) + 0x4c; 0x89; 0xc2; (* MOV (% rdx) (% r8) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xc2; (* ADD (% rdx) (% r8) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xbb; 0xf6; 0xdb; + (* MULX4 (% rbx,% r8) (% rdx,% rbx) *) + 0x4c; 0x11; 0xc0; (* ADC (% rax) (% r8) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc1; (* SUB (% r9) (% rax) *) + 0x49; 0x19; 0xda; (* SBB (% r10) (% rbx) *) + 0x49; 0x19; 0xeb; (* SBB (% r11) (% rbp) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd6; (* ADD (% r14) (% rdx) *) + 0x49; 0x83; 0xd7; 0x00; (* ADC (% r15) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x54; 0x24; 0x68; + (* MOV (% rdx) (Memop Quadword (%% (rsp,104))) *) + 0x45; 0x31; 0xc0; (* XOR (% r8d) (% r8d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf8; + (* ADOX (% r15) (% r8) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xc6; (* ADC (% r14) (% rax) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x4d; 0x11; 0xc0; (* ADC (% r8) (% r8) *) + 0x4c; 0x89; 0xca; (* MOV (% rdx) (% r9) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xca; (* ADD (% rdx) (% r9) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xb3; 0xf6; 0xdb; + (* MULX4 (% rbx,% r9) (% rdx,% rbx) *) + 0x4c; 0x11; 0xc8; (* ADC (% rax) (% r9) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc2; (* SUB (% r10) (% rax) *) + 0x49; 0x19; 0xdb; (* SBB (% r11) (% rbx) *) + 0x49; 0x19; 0xec; (* SBB (% r12) (% rbp) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd7; (* ADD (% r15) (% rdx) *) + 0x49; 0x83; 0xd0; 0x00; (* ADC (% r8) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x54; 0x24; 0x70; + (* MOV (% rdx) (Memop Quadword (%% (rsp,112))) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xc1; + (* ADOX (% r8) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xc7; (* ADC (% r15) (% rax) *) + 0x49; 0x11; 0xd8; (* ADC (% r8) (% rbx) *) + 0x4d; 0x11; 0xc9; (* ADC (% r9) (% r9) *) + 0x4c; 0x89; 0xd2; (* MOV (% rdx) (% r10) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xd2; (* ADD (% rdx) (% r10) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xab; 0xf6; 0xdb; + (* MULX4 (% rbx,% r10) (% rdx,% rbx) *) + 0x4c; 0x11; 0xd0; (* ADC (% rax) (% r10) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc3; (* SUB (% r11) (% rax) *) + 0x49; 0x19; 0xdc; (* SBB (% r12) (% rbx) *) + 0x49; 0x19; 0xed; (* SBB (% r13) (% rbp) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd0; (* ADD (% r8) (% rdx) *) + 0x49; 0x83; 0xd1; 0x00; (* ADC (% r9) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x54; 0x24; 0x78; + (* MOV (% rdx) (Memop Quadword (%% (rsp,120))) *) + 0x45; 0x31; 0xd2; (* XOR (% r10d) (% r10d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xca; + (* ADOX (% r9) (% r10) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xc0; (* ADC (% r8) (% rax) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0x4d; 0x11; 0xd2; (* ADC (% r10) (% r10) *) + 0x4c; 0x89; 0xda; (* MOV (% rdx) (% r11) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xda; (* ADD (% rdx) (% r11) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xa3; 0xf6; 0xdb; + (* MULX4 (% rbx,% r11) (% rdx,% rbx) *) + 0x4c; 0x11; 0xd8; (* ADC (% rax) (% r11) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc4; (* SUB (% r12) (% rax) *) + 0x49; 0x19; 0xdd; (* SBB (% r13) (% rbx) *) + 0x49; 0x19; 0xee; (* SBB (% r14) (% rbp) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd1; (* ADD (% r9) (% rdx) *) + 0x49; 0x83; 0xd2; 0x00; (* ADC (% r10) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x94; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,128))) *) + 0x45; 0x31; 0xdb; (* XOR (% r11d) (% r11d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xc1; (* ADC (% r9) (% rax) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0x4d; 0x11; 0xdb; (* ADC (% r11) (% r11) *) + 0x4c; 0x89; 0xe2; (* MOV (% rdx) (% r12) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xe2; (* ADD (% rdx) (% r12) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0x9b; 0xf6; 0xdb; + (* MULX4 (% rbx,% r12) (% rdx,% rbx) *) + 0x4c; 0x11; 0xe0; (* ADC (% rax) (% r12) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc5; (* SUB (% r13) (% rax) *) + 0x49; 0x19; 0xde; (* SBB (% r14) (% rbx) *) + 0x49; 0x19; 0xef; (* SBB (% r15) (% rbp) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd2; (* ADD (% r10) (% rdx) *) + 0x49; 0x83; 0xd3; 0x00; (* ADC (% r11) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x94; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,136))) *) + 0x45; 0x31; 0xe4; (* XOR (% r12d) (% r12d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xdc; + (* ADOX (% r11) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x4d; 0x11; 0xe4; (* ADC (% r12) (% r12) *) + 0x4c; 0x89; 0xea; (* MOV (% rdx) (% r13) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xea; (* ADD (% rdx) (% r13) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0x93; 0xf6; 0xdb; + (* MULX4 (% rbx,% r13) (% rdx,% rbx) *) + 0x4c; 0x11; 0xe8; (* ADC (% rax) (% r13) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc6; (* SUB (% r14) (% rax) *) + 0x49; 0x19; 0xdf; (* SBB (% r15) (% rbx) *) + 0x49; 0x19; 0xe8; (* SBB (% r8) (% rbp) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd3; (* ADD (% r11) (% rdx) *) + 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) + 0x31; 0xd2; (* XOR (% edx) (% edx) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x45; 0x31; 0xed; (* XOR (% r13d) (% r13d) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0x4c; 0x01; 0xf0; (* ADD (% rax) (% r14) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0x4c; 0x11; 0xfb; (* ADC (% rbx) (% r15) *) + 0xb9; 0x01; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 1)) *) + 0x4c; 0x11; 0xc1; (* ADC (% rcx) (% r8) *) + 0x4c; 0x11; 0xca; (* ADC (% rdx) (% r9) *) + 0x4c; 0x11; 0xd5; (* ADC (% rbp) (% r10) *) + 0x4d; 0x11; 0xdd; (* ADC (% r13) (% r11) *) + 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) + 0x4c; 0x0f; 0x45; 0xf0; (* CMOVNE (% r14) (% rax) *) + 0x4c; 0x0f; 0x45; 0xfb; (* CMOVNE (% r15) (% rbx) *) + 0x4c; 0x0f; 0x45; 0xc1; (* CMOVNE (% r8) (% rcx) *) + 0x4c; 0x0f; 0x45; 0xca; (* CMOVNE (% r9) (% rdx) *) + 0x4c; 0x0f; 0x45; 0xd5; (* CMOVNE (% r10) (% rbp) *) + 0x4d; 0x0f; 0x45; 0xdd; (* CMOVNE (% r11) (% r13) *) + 0x4c; 0x89; 0x74; 0x24; 0x60; + (* MOV (Memop Quadword (%% (rsp,96))) (% r14) *) + 0x4c; 0x89; 0x7c; 0x24; 0x68; + (* MOV (Memop Quadword (%% (rsp,104))) (% r15) *) + 0x4c; 0x89; 0x44; 0x24; 0x70; + (* MOV (Memop Quadword (%% (rsp,112))) (% r8) *) + 0x4c; 0x89; 0x4c; 0x24; 0x78; + (* MOV (Memop Quadword (%% (rsp,120))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,128))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,136))) (% r11) *) + 0x48; 0x8b; 0xbc; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MOV (% rdi) (Memop Quadword (%% (rsp,304))) *) + 0x48; 0x8b; 0x04; 0x24; (* MOV (% rax) (Memop Quadword (%% (rsp,0))) *) + 0x48; 0x2b; 0x84; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* SUB (% rax) (Memop Quadword (%% (rsp,192))) *) + 0x48; 0x8b; 0x54; 0x24; 0x08; + (* MOV (% rdx) (Memop Quadword (%% (rsp,8))) *) + 0x48; 0x1b; 0x94; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* SBB (% rdx) (Memop Quadword (%% (rsp,200))) *) + 0x4c; 0x8b; 0x44; 0x24; 0x10; + (* MOV (% r8) (Memop Quadword (%% (rsp,16))) *) + 0x4c; 0x1b; 0x84; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* SBB (% r8) (Memop Quadword (%% (rsp,208))) *) + 0x4c; 0x8b; 0x4c; 0x24; 0x18; + (* MOV (% r9) (Memop Quadword (%% (rsp,24))) *) + 0x4c; 0x1b; 0x8c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* SBB (% r9) (Memop Quadword (%% (rsp,216))) *) + 0x4c; 0x8b; 0x54; 0x24; 0x20; + (* MOV (% r10) (Memop Quadword (%% (rsp,32))) *) + 0x4c; 0x1b; 0x94; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* SBB (% r10) (Memop Quadword (%% (rsp,224))) *) + 0x4c; 0x8b; 0x5c; 0x24; 0x28; + (* MOV (% r11) (Memop Quadword (%% (rsp,40))) *) + 0x4c; 0x1b; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* SBB (% r11) (Memop Quadword (%% (rsp,232))) *) + 0x48; 0x19; 0xc9; (* SBB (% rcx) (% rcx) *) + 0xbe; 0xff; 0xff; 0xff; 0xff; + (* MOV (% esi) (Imm32 (word 4294967295)) *) + 0x48; 0x21; 0xf1; (* AND (% rcx) (% rsi) *) + 0x48; 0x31; 0xf6; (* XOR (% rsi) (% rsi) *) + 0x48; 0x29; 0xce; (* SUB (% rsi) (% rcx) *) + 0x48; 0x29; 0xf0; (* SUB (% rax) (% rsi) *) + 0x48; 0x89; 0x07; (* MOV (Memop Quadword (%% (rdi,0))) (% rax) *) + 0x48; 0x19; 0xca; (* SBB (% rdx) (% rcx) *) + 0x48; 0x89; 0x57; 0x08; (* MOV (Memop Quadword (%% (rdi,8))) (% rdx) *) + 0x48; 0x19; 0xc0; (* SBB (% rax) (% rax) *) + 0x48; 0x21; 0xf1; (* AND (% rcx) (% rsi) *) + 0x48; 0xf7; 0xd8; (* NEG (% rax) *) + 0x49; 0x19; 0xc8; (* SBB (% r8) (% rcx) *) + 0x4c; 0x89; 0x47; 0x10; (* MOV (Memop Quadword (%% (rdi,16))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x4f; 0x18; (* MOV (Memop Quadword (%% (rdi,24))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x57; 0x20; (* MOV (Memop Quadword (%% (rdi,32))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x5f; 0x28; (* MOV (Memop Quadword (%% (rdi,40))) (% r11) *) + 0x48; 0x8b; 0x44; 0x24; 0x60; + (* MOV (% rax) (Memop Quadword (%% (rsp,96))) *) + 0x48; 0x2b; 0x84; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* SUB (% rax) (Memop Quadword (%% (rsp,192))) *) + 0x48; 0x8b; 0x54; 0x24; 0x68; + (* MOV (% rdx) (Memop Quadword (%% (rsp,104))) *) + 0x48; 0x1b; 0x94; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* SBB (% rdx) (Memop Quadword (%% (rsp,200))) *) + 0x4c; 0x8b; 0x44; 0x24; 0x70; + (* MOV (% r8) (Memop Quadword (%% (rsp,112))) *) + 0x4c; 0x1b; 0x84; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* SBB (% r8) (Memop Quadword (%% (rsp,208))) *) + 0x4c; 0x8b; 0x4c; 0x24; 0x78; + (* MOV (% r9) (Memop Quadword (%% (rsp,120))) *) + 0x4c; 0x1b; 0x8c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* SBB (% r9) (Memop Quadword (%% (rsp,216))) *) + 0x4c; 0x8b; 0x94; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (% r10) (Memop Quadword (%% (rsp,128))) *) + 0x4c; 0x1b; 0x94; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* SBB (% r10) (Memop Quadword (%% (rsp,224))) *) + 0x4c; 0x8b; 0x9c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (% r11) (Memop Quadword (%% (rsp,136))) *) + 0x4c; 0x1b; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* SBB (% r11) (Memop Quadword (%% (rsp,232))) *) + 0x48; 0x19; 0xc9; (* SBB (% rcx) (% rcx) *) + 0xbe; 0xff; 0xff; 0xff; 0xff; + (* MOV (% esi) (Imm32 (word 4294967295)) *) + 0x48; 0x21; 0xf1; (* AND (% rcx) (% rsi) *) + 0x48; 0x31; 0xf6; (* XOR (% rsi) (% rsi) *) + 0x48; 0x29; 0xce; (* SUB (% rsi) (% rcx) *) + 0x48; 0x29; 0xf0; (* SUB (% rax) (% rsi) *) + 0x48; 0x89; 0x84; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,144))) (% rax) *) + 0x48; 0x19; 0xca; (* SBB (% rdx) (% rcx) *) + 0x48; 0x89; 0x94; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,152))) (% rdx) *) + 0x48; 0x19; 0xc0; (* SBB (% rax) (% rax) *) + 0x48; 0x21; 0xf1; (* AND (% rcx) (% rsi) *) + 0x48; 0xf7; 0xd8; (* NEG (% rax) *) + 0x49; 0x19; 0xc8; (* SBB (% r8) (% rcx) *) + 0x4c; 0x89; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,160))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x8c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,168))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,176))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,184))) (% r11) *) + 0x48; 0x8b; 0xbc; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MOV (% rdi) (Memop Quadword (%% (rsp,304))) *) + 0x48; 0x8b; 0xb4; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MOV (% rsi) (Memop Quadword (%% (rsp,288))) *) + 0x48; 0x8b; 0x56; 0x60; (* MOV (% rdx) (Memop Quadword (%% (rsi,96))) *) + 0x45; 0x31; 0xff; (* XOR (% r15d) (% r15d) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x8c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x94; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x49; 0x01; 0xd9; (* ADD (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xa4; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xac; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% r13,% rbx) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x49; 0x11; 0xdc; (* ADC (% r12) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xb4; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% r14,% rbx) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0x49; 0x11; 0xdd; (* ADC (% r13) (% rbx) *) + 0x4d; 0x11; 0xfe; (* ADC (% r14) (% r15) *) + 0x4c; 0x89; 0xc2; (* MOV (% rdx) (% r8) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xc2; (* ADD (% rdx) (% r8) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xbb; 0xf6; 0xdb; + (* MULX4 (% rbx,% r8) (% rdx,% rbx) *) + 0x4c; 0x11; 0xc0; (* ADC (% rax) (% r8) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc1; (* SUB (% r9) (% rax) *) + 0x49; 0x19; 0xda; (* SBB (% r10) (% rbx) *) + 0x49; 0x19; 0xeb; (* SBB (% r11) (% rbp) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd6; (* ADD (% r14) (% rdx) *) + 0x49; 0x83; 0xd7; 0x00; (* ADC (% r15) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x56; 0x68; (* MOV (% rdx) (Memop Quadword (%% (rsi,104))) *) + 0x45; 0x31; 0xc0; (* XOR (% r8d) (% r8d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf8; + (* ADOX (% r15) (% r8) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0x49; 0x11; 0xc6; (* ADC (% r14) (% rax) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x4d; 0x11; 0xc0; (* ADC (% r8) (% r8) *) + 0x4c; 0x89; 0xca; (* MOV (% rdx) (% r9) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xca; (* ADD (% rdx) (% r9) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xb3; 0xf6; 0xdb; + (* MULX4 (% rbx,% r9) (% rdx,% rbx) *) + 0x4c; 0x11; 0xc8; (* ADC (% rax) (% r9) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc2; (* SUB (% r10) (% rax) *) + 0x49; 0x19; 0xdb; (* SBB (% r11) (% rbx) *) + 0x49; 0x19; 0xec; (* SBB (% r12) (% rbp) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd7; (* ADD (% r15) (% rdx) *) + 0x49; 0x83; 0xd0; 0x00; (* ADC (% r8) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x56; 0x70; (* MOV (% rdx) (Memop Quadword (%% (rsi,112))) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xc1; + (* ADOX (% r8) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0x49; 0x11; 0xc7; (* ADC (% r15) (% rax) *) + 0x49; 0x11; 0xd8; (* ADC (% r8) (% rbx) *) + 0x4d; 0x11; 0xc9; (* ADC (% r9) (% r9) *) + 0x4c; 0x89; 0xd2; (* MOV (% rdx) (% r10) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xd2; (* ADD (% rdx) (% r10) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xab; 0xf6; 0xdb; + (* MULX4 (% rbx,% r10) (% rdx,% rbx) *) + 0x4c; 0x11; 0xd0; (* ADC (% rax) (% r10) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc3; (* SUB (% r11) (% rax) *) + 0x49; 0x19; 0xdc; (* SBB (% r12) (% rbx) *) + 0x49; 0x19; 0xed; (* SBB (% r13) (% rbp) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd0; (* ADD (% r8) (% rdx) *) + 0x49; 0x83; 0xd1; 0x00; (* ADC (% r9) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x56; 0x78; (* MOV (% rdx) (Memop Quadword (%% (rsi,120))) *) + 0x45; 0x31; 0xd2; (* XOR (% r10d) (% r10d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xca; + (* ADOX (% r9) (% r10) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0x49; 0x11; 0xc0; (* ADC (% r8) (% rax) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0x4d; 0x11; 0xd2; (* ADC (% r10) (% r10) *) + 0x4c; 0x89; 0xda; (* MOV (% rdx) (% r11) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xda; (* ADD (% rdx) (% r11) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xa3; 0xf6; 0xdb; + (* MULX4 (% rbx,% r11) (% rdx,% rbx) *) + 0x4c; 0x11; 0xd8; (* ADC (% rax) (% r11) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc4; (* SUB (% r12) (% rax) *) + 0x49; 0x19; 0xdd; (* SBB (% r13) (% rbx) *) + 0x49; 0x19; 0xee; (* SBB (% r14) (% rbp) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd1; (* ADD (% r9) (% rdx) *) + 0x49; 0x83; 0xd2; 0x00; (* ADC (% r10) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x96; 0x80; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,128))) *) + 0x45; 0x31; 0xdb; (* XOR (% r11d) (% r11d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0x49; 0x11; 0xc1; (* ADC (% r9) (% rax) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0x4d; 0x11; 0xdb; (* ADC (% r11) (% r11) *) + 0x4c; 0x89; 0xe2; (* MOV (% rdx) (% r12) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xe2; (* ADD (% rdx) (% r12) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0x9b; 0xf6; 0xdb; + (* MULX4 (% rbx,% r12) (% rdx,% rbx) *) + 0x4c; 0x11; 0xe0; (* ADC (% rax) (% r12) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc5; (* SUB (% r13) (% rax) *) + 0x49; 0x19; 0xde; (* SBB (% r14) (% rbx) *) + 0x49; 0x19; 0xef; (* SBB (% r15) (% rbp) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd2; (* ADD (% r10) (% rdx) *) + 0x49; 0x83; 0xd3; 0x00; (* ADC (% r11) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x96; 0x88; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,136))) *) + 0x45; 0x31; 0xe4; (* XOR (% r12d) (% r12d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xdc; + (* ADOX (% r11) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x4d; 0x11; 0xe4; (* ADC (% r12) (% r12) *) + 0x4c; 0x89; 0xea; (* MOV (% rdx) (% r13) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xea; (* ADD (% rdx) (% r13) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0x93; 0xf6; 0xdb; + (* MULX4 (% rbx,% r13) (% rdx,% rbx) *) + 0x4c; 0x11; 0xe8; (* ADC (% rax) (% r13) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc6; (* SUB (% r14) (% rax) *) + 0x49; 0x19; 0xdf; (* SBB (% r15) (% rbx) *) + 0x49; 0x19; 0xe8; (* SBB (% r8) (% rbp) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd3; (* ADD (% r11) (% rdx) *) + 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) + 0x31; 0xd2; (* XOR (% edx) (% edx) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x45; 0x31; 0xed; (* XOR (% r13d) (% r13d) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0x4c; 0x01; 0xf0; (* ADD (% rax) (% r14) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0x4c; 0x11; 0xfb; (* ADC (% rbx) (% r15) *) + 0xb9; 0x01; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 1)) *) + 0x4c; 0x11; 0xc1; (* ADC (% rcx) (% r8) *) + 0x4c; 0x11; 0xca; (* ADC (% rdx) (% r9) *) + 0x4c; 0x11; 0xd5; (* ADC (% rbp) (% r10) *) + 0x4d; 0x11; 0xdd; (* ADC (% r13) (% r11) *) + 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) + 0x4c; 0x0f; 0x45; 0xf0; (* CMOVNE (% r14) (% rax) *) + 0x4c; 0x0f; 0x45; 0xfb; (* CMOVNE (% r15) (% rbx) *) + 0x4c; 0x0f; 0x45; 0xc1; (* CMOVNE (% r8) (% rcx) *) + 0x4c; 0x0f; 0x45; 0xca; (* CMOVNE (% r9) (% rdx) *) + 0x4c; 0x0f; 0x45; 0xd5; (* CMOVNE (% r10) (% rbp) *) + 0x4d; 0x0f; 0x45; 0xdd; (* CMOVNE (% r11) (% r13) *) + 0x4c; 0x89; 0x77; 0x60; (* MOV (Memop Quadword (%% (rdi,96))) (% r14) *) + 0x4c; 0x89; 0x7f; 0x68; (* MOV (Memop Quadword (%% (rdi,104))) (% r15) *) + 0x4c; 0x89; 0x47; 0x70; (* MOV (Memop Quadword (%% (rdi,112))) (% r8) *) + 0x4c; 0x89; 0x4f; 0x78; (* MOV (Memop Quadword (%% (rdi,120))) (% r9) *) + 0x4c; 0x89; 0x97; 0x80; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rdi,128))) (% r10) *) + 0x4c; 0x89; 0x9f; 0x88; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rdi,136))) (% r11) *) + 0x48; 0x8b; 0xbc; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MOV (% rdi) (Memop Quadword (%% (rsp,304))) *) + 0x48; 0x8b; 0x07; (* MOV (% rax) (Memop Quadword (%% (rdi,0))) *) + 0x48; 0x2b; 0x44; 0x24; 0x60; + (* SUB (% rax) (Memop Quadword (%% (rsp,96))) *) + 0x48; 0x8b; 0x57; 0x08; (* MOV (% rdx) (Memop Quadword (%% (rdi,8))) *) + 0x48; 0x1b; 0x54; 0x24; 0x68; + (* SBB (% rdx) (Memop Quadword (%% (rsp,104))) *) + 0x4c; 0x8b; 0x47; 0x10; (* MOV (% r8) (Memop Quadword (%% (rdi,16))) *) + 0x4c; 0x1b; 0x44; 0x24; 0x70; + (* SBB (% r8) (Memop Quadword (%% (rsp,112))) *) + 0x4c; 0x8b; 0x4f; 0x18; (* MOV (% r9) (Memop Quadword (%% (rdi,24))) *) + 0x4c; 0x1b; 0x4c; 0x24; 0x78; + (* SBB (% r9) (Memop Quadword (%% (rsp,120))) *) + 0x4c; 0x8b; 0x57; 0x20; (* MOV (% r10) (Memop Quadword (%% (rdi,32))) *) + 0x4c; 0x1b; 0x94; 0x24; 0x80; 0x00; 0x00; 0x00; + (* SBB (% r10) (Memop Quadword (%% (rsp,128))) *) + 0x4c; 0x8b; 0x5f; 0x28; (* MOV (% r11) (Memop Quadword (%% (rdi,40))) *) + 0x4c; 0x1b; 0x9c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* SBB (% r11) (Memop Quadword (%% (rsp,136))) *) + 0x48; 0x19; 0xc9; (* SBB (% rcx) (% rcx) *) + 0xbe; 0xff; 0xff; 0xff; 0xff; + (* MOV (% esi) (Imm32 (word 4294967295)) *) + 0x48; 0x21; 0xf1; (* AND (% rcx) (% rsi) *) + 0x48; 0x31; 0xf6; (* XOR (% rsi) (% rsi) *) + 0x48; 0x29; 0xce; (* SUB (% rsi) (% rcx) *) + 0x48; 0x29; 0xf0; (* SUB (% rax) (% rsi) *) + 0x48; 0x89; 0x07; (* MOV (Memop Quadword (%% (rdi,0))) (% rax) *) + 0x48; 0x19; 0xca; (* SBB (% rdx) (% rcx) *) + 0x48; 0x89; 0x57; 0x08; (* MOV (Memop Quadword (%% (rdi,8))) (% rdx) *) + 0x48; 0x19; 0xc0; (* SBB (% rax) (% rax) *) + 0x48; 0x21; 0xf1; (* AND (% rcx) (% rsi) *) + 0x48; 0xf7; 0xd8; (* NEG (% rax) *) + 0x49; 0x19; 0xc8; (* SBB (% r8) (% rcx) *) + 0x4c; 0x89; 0x47; 0x10; (* MOV (Memop Quadword (%% (rdi,16))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x4f; 0x18; (* MOV (Memop Quadword (%% (rdi,24))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x57; 0x20; (* MOV (Memop Quadword (%% (rdi,32))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x5f; 0x28; (* MOV (Memop Quadword (%% (rdi,40))) (% r11) *) + 0x48; 0x8b; 0xbc; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MOV (% rdi) (Memop Quadword (%% (rsp,304))) *) + 0x48; 0x8b; 0x84; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,192))) *) + 0x48; 0x2b; 0x07; (* SUB (% rax) (Memop Quadword (%% (rdi,0))) *) + 0x48; 0x8b; 0x94; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,200))) *) + 0x48; 0x1b; 0x57; 0x08; (* SBB (% rdx) (Memop Quadword (%% (rdi,8))) *) + 0x4c; 0x8b; 0x84; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (% r8) (Memop Quadword (%% (rsp,208))) *) + 0x4c; 0x1b; 0x47; 0x10; (* SBB (% r8) (Memop Quadword (%% (rdi,16))) *) + 0x4c; 0x8b; 0x8c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MOV (% r9) (Memop Quadword (%% (rsp,216))) *) + 0x4c; 0x1b; 0x4f; 0x18; (* SBB (% r9) (Memop Quadword (%% (rdi,24))) *) + 0x4c; 0x8b; 0x94; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MOV (% r10) (Memop Quadword (%% (rsp,224))) *) + 0x4c; 0x1b; 0x57; 0x20; (* SBB (% r10) (Memop Quadword (%% (rdi,32))) *) + 0x4c; 0x8b; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MOV (% r11) (Memop Quadword (%% (rsp,232))) *) + 0x4c; 0x1b; 0x5f; 0x28; (* SBB (% r11) (Memop Quadword (%% (rdi,40))) *) + 0x48; 0x19; 0xc9; (* SBB (% rcx) (% rcx) *) + 0xbe; 0xff; 0xff; 0xff; 0xff; + (* MOV (% esi) (Imm32 (word 4294967295)) *) + 0x48; 0x21; 0xf1; (* AND (% rcx) (% rsi) *) + 0x48; 0x31; 0xf6; (* XOR (% rsi) (% rsi) *) + 0x48; 0x29; 0xce; (* SUB (% rsi) (% rcx) *) + 0x48; 0x29; 0xf0; (* SUB (% rax) (% rsi) *) + 0x48; 0x89; 0x84; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,192))) (% rax) *) + 0x48; 0x19; 0xca; (* SBB (% rdx) (% rcx) *) + 0x48; 0x89; 0x94; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,200))) (% rdx) *) + 0x48; 0x19; 0xc0; (* SBB (% rax) (% rax) *) + 0x48; 0x21; 0xf1; (* AND (% rcx) (% rsi) *) + 0x48; 0xf7; 0xd8; (* NEG (% rax) *) + 0x49; 0x19; 0xc8; (* SBB (% r8) (% rcx) *) + 0x4c; 0x89; 0x84; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,208))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x8c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,216))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x94; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,224))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,232))) (% r11) *) + 0x48; 0x8b; 0xb4; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MOV (% rsi) (Memop Quadword (%% (rsp,288))) *) + 0x48; 0x8b; 0x56; 0x30; (* MOV (% rdx) (Memop Quadword (%% (rsi,48))) *) + 0x45; 0x31; 0xff; (* XOR (% r15d) (% r15d) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x8c; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,144))) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x94; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,152))) *) + 0x49; 0x01; 0xd9; (* ADD (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xa4; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xac; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% r13,% rbx) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x49; 0x11; 0xdc; (* ADC (% r12) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xb4; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r14,% rbx) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xdd; (* ADC (% r13) (% rbx) *) + 0x4d; 0x11; 0xfe; (* ADC (% r14) (% r15) *) + 0x4c; 0x89; 0xc2; (* MOV (% rdx) (% r8) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xc2; (* ADD (% rdx) (% r8) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xbb; 0xf6; 0xdb; + (* MULX4 (% rbx,% r8) (% rdx,% rbx) *) + 0x4c; 0x11; 0xc0; (* ADC (% rax) (% r8) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc1; (* SUB (% r9) (% rax) *) + 0x49; 0x19; 0xda; (* SBB (% r10) (% rbx) *) + 0x49; 0x19; 0xeb; (* SBB (% r11) (% rbp) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd6; (* ADD (% r14) (% rdx) *) + 0x49; 0x83; 0xd7; 0x00; (* ADC (% r15) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x56; 0x38; (* MOV (% rdx) (Memop Quadword (%% (rsi,56))) *) + 0x45; 0x31; 0xc0; (* XOR (% r8d) (% r8d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf8; + (* ADOX (% r15) (% r8) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xc6; (* ADC (% r14) (% rax) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x4d; 0x11; 0xc0; (* ADC (% r8) (% r8) *) + 0x4c; 0x89; 0xca; (* MOV (% rdx) (% r9) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xca; (* ADD (% rdx) (% r9) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xb3; 0xf6; 0xdb; + (* MULX4 (% rbx,% r9) (% rdx,% rbx) *) + 0x4c; 0x11; 0xc8; (* ADC (% rax) (% r9) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc2; (* SUB (% r10) (% rax) *) + 0x49; 0x19; 0xdb; (* SBB (% r11) (% rbx) *) + 0x49; 0x19; 0xec; (* SBB (% r12) (% rbp) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd7; (* ADD (% r15) (% rdx) *) + 0x49; 0x83; 0xd0; 0x00; (* ADC (% r8) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x56; 0x40; (* MOV (% rdx) (Memop Quadword (%% (rsi,64))) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xc1; + (* ADOX (% r8) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xc7; (* ADC (% r15) (% rax) *) + 0x49; 0x11; 0xd8; (* ADC (% r8) (% rbx) *) + 0x4d; 0x11; 0xc9; (* ADC (% r9) (% r9) *) + 0x4c; 0x89; 0xd2; (* MOV (% rdx) (% r10) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xd2; (* ADD (% rdx) (% r10) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xab; 0xf6; 0xdb; + (* MULX4 (% rbx,% r10) (% rdx,% rbx) *) + 0x4c; 0x11; 0xd0; (* ADC (% rax) (% r10) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc3; (* SUB (% r11) (% rax) *) + 0x49; 0x19; 0xdc; (* SBB (% r12) (% rbx) *) + 0x49; 0x19; 0xed; (* SBB (% r13) (% rbp) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd0; (* ADD (% r8) (% rdx) *) + 0x49; 0x83; 0xd1; 0x00; (* ADC (% r9) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x56; 0x48; (* MOV (% rdx) (Memop Quadword (%% (rsi,72))) *) + 0x45; 0x31; 0xd2; (* XOR (% r10d) (% r10d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xca; + (* ADOX (% r9) (% r10) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xc0; (* ADC (% r8) (% rax) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0x4d; 0x11; 0xd2; (* ADC (% r10) (% r10) *) + 0x4c; 0x89; 0xda; (* MOV (% rdx) (% r11) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xda; (* ADD (% rdx) (% r11) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xa3; 0xf6; 0xdb; + (* MULX4 (% rbx,% r11) (% rdx,% rbx) *) + 0x4c; 0x11; 0xd8; (* ADC (% rax) (% r11) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc4; (* SUB (% r12) (% rax) *) + 0x49; 0x19; 0xdd; (* SBB (% r13) (% rbx) *) + 0x49; 0x19; 0xee; (* SBB (% r14) (% rbp) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd1; (* ADD (% r9) (% rdx) *) + 0x49; 0x83; 0xd2; 0x00; (* ADC (% r10) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x56; 0x50; (* MOV (% rdx) (Memop Quadword (%% (rsi,80))) *) + 0x45; 0x31; 0xdb; (* XOR (% r11d) (% r11d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xc1; (* ADC (% r9) (% rax) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0x4d; 0x11; 0xdb; (* ADC (% r11) (% r11) *) + 0x4c; 0x89; 0xe2; (* MOV (% rdx) (% r12) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xe2; (* ADD (% rdx) (% r12) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0x9b; 0xf6; 0xdb; + (* MULX4 (% rbx,% r12) (% rdx,% rbx) *) + 0x4c; 0x11; 0xe0; (* ADC (% rax) (% r12) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc5; (* SUB (% r13) (% rax) *) + 0x49; 0x19; 0xde; (* SBB (% r14) (% rbx) *) + 0x49; 0x19; 0xef; (* SBB (% r15) (% rbp) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd2; (* ADD (% r10) (% rdx) *) + 0x49; 0x83; 0xd3; 0x00; (* ADC (% r11) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x56; 0x58; (* MOV (% rdx) (Memop Quadword (%% (rsi,88))) *) + 0x45; 0x31; 0xe4; (* XOR (% r12d) (% r12d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xdc; + (* ADOX (% r11) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x4d; 0x11; 0xe4; (* ADC (% r12) (% r12) *) + 0x4c; 0x89; 0xea; (* MOV (% rdx) (% r13) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xea; (* ADD (% rdx) (% r13) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0x93; 0xf6; 0xdb; + (* MULX4 (% rbx,% r13) (% rdx,% rbx) *) + 0x4c; 0x11; 0xe8; (* ADC (% rax) (% r13) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc6; (* SUB (% r14) (% rax) *) + 0x49; 0x19; 0xdf; (* SBB (% r15) (% rbx) *) + 0x49; 0x19; 0xe8; (* SBB (% r8) (% rbp) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd3; (* ADD (% r11) (% rdx) *) + 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) + 0x31; 0xd2; (* XOR (% edx) (% edx) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x45; 0x31; 0xed; (* XOR (% r13d) (% r13d) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0x4c; 0x01; 0xf0; (* ADD (% rax) (% r14) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0x4c; 0x11; 0xfb; (* ADC (% rbx) (% r15) *) + 0xb9; 0x01; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 1)) *) + 0x4c; 0x11; 0xc1; (* ADC (% rcx) (% r8) *) + 0x4c; 0x11; 0xca; (* ADC (% rdx) (% r9) *) + 0x4c; 0x11; 0xd5; (* ADC (% rbp) (% r10) *) + 0x4d; 0x11; 0xdd; (* ADC (% r13) (% r11) *) + 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) + 0x4c; 0x0f; 0x45; 0xf0; (* CMOVNE (% r14) (% rax) *) + 0x4c; 0x0f; 0x45; 0xfb; (* CMOVNE (% r15) (% rbx) *) + 0x4c; 0x0f; 0x45; 0xc1; (* CMOVNE (% r8) (% rcx) *) + 0x4c; 0x0f; 0x45; 0xca; (* CMOVNE (% r9) (% rdx) *) + 0x4c; 0x0f; 0x45; 0xd5; (* CMOVNE (% r10) (% rbp) *) + 0x4d; 0x0f; 0x45; 0xdd; (* CMOVNE (% r11) (% r13) *) + 0x4c; 0x89; 0xb4; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,144))) (% r14) *) + 0x4c; 0x89; 0xbc; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,152))) (% r15) *) + 0x4c; 0x89; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,160))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,168))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,176))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,184))) (% r11) *) + 0x48; 0x8b; 0x94; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,192))) *) + 0x45; 0x31; 0xff; (* XOR (% r15d) (% r15d) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x4c; 0x24; 0x30; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x54; 0x24; 0x38; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x49; 0x01; 0xd9; (* ADD (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x5c; 0x24; 0x40; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,64))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x64; 0x24; 0x48; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,72))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x6c; 0x24; 0x50; + (* MULX4 (% r13,% rbx) (% rdx,Memop Quadword (%% (rsp,80))) *) + 0x49; 0x11; 0xdc; (* ADC (% r12) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x74; 0x24; 0x58; + (* MULX4 (% r14,% rbx) (% rdx,Memop Quadword (%% (rsp,88))) *) + 0x49; 0x11; 0xdd; (* ADC (% r13) (% rbx) *) + 0x4d; 0x11; 0xfe; (* ADC (% r14) (% r15) *) + 0x4c; 0x89; 0xc2; (* MOV (% rdx) (% r8) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xc2; (* ADD (% rdx) (% r8) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xbb; 0xf6; 0xdb; + (* MULX4 (% rbx,% r8) (% rdx,% rbx) *) + 0x4c; 0x11; 0xc0; (* ADC (% rax) (% r8) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc1; (* SUB (% r9) (% rax) *) + 0x49; 0x19; 0xda; (* SBB (% r10) (% rbx) *) + 0x49; 0x19; 0xeb; (* SBB (% r11) (% rbp) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd6; (* ADD (% r14) (% rdx) *) + 0x49; 0x83; 0xd7; 0x00; (* ADC (% r15) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x94; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,200))) *) + 0x45; 0x31; 0xc0; (* XOR (% r8d) (% r8d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x38; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x40; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,64))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xf8; + (* ADOX (% r15) (% r8) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x58; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,88))) *) + 0x49; 0x11; 0xc6; (* ADC (% r14) (% rax) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x4d; 0x11; 0xc0; (* ADC (% r8) (% r8) *) + 0x4c; 0x89; 0xca; (* MOV (% rdx) (% r9) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xca; (* ADD (% rdx) (% r9) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xb3; 0xf6; 0xdb; + (* MULX4 (% rbx,% r9) (% rdx,% rbx) *) + 0x4c; 0x11; 0xc8; (* ADC (% rax) (% r9) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc2; (* SUB (% r10) (% rax) *) + 0x49; 0x19; 0xdb; (* SBB (% r11) (% rbx) *) + 0x49; 0x19; 0xec; (* SBB (% r12) (% rbp) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd7; (* ADD (% r15) (% rdx) *) + 0x49; 0x83; 0xd0; 0x00; (* ADC (% r8) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x94; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,208))) *) + 0x45; 0x31; 0xc9; (* XOR (% r9d) (% r9d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x38; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x40; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,64))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xc1; + (* ADOX (% r8) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x58; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,88))) *) + 0x49; 0x11; 0xc7; (* ADC (% r15) (% rax) *) + 0x49; 0x11; 0xd8; (* ADC (% r8) (% rbx) *) + 0x4d; 0x11; 0xc9; (* ADC (% r9) (% r9) *) + 0x4c; 0x89; 0xd2; (* MOV (% rdx) (% r10) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xd2; (* ADD (% rdx) (% r10) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xab; 0xf6; 0xdb; + (* MULX4 (% rbx,% r10) (% rdx,% rbx) *) + 0x4c; 0x11; 0xd0; (* ADC (% rax) (% r10) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc3; (* SUB (% r11) (% rax) *) + 0x49; 0x19; 0xdc; (* SBB (% r12) (% rbx) *) + 0x49; 0x19; 0xed; (* SBB (% r13) (% rbp) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd0; (* ADD (% r8) (% rdx) *) + 0x49; 0x83; 0xd1; 0x00; (* ADC (% r9) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x94; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,216))) *) + 0x45; 0x31; 0xd2; (* XOR (% r10d) (% r10d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x38; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x40; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,64))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xca; + (* ADOX (% r9) (% r10) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x58; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,88))) *) + 0x49; 0x11; 0xc0; (* ADC (% r8) (% rax) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0x4d; 0x11; 0xd2; (* ADC (% r10) (% r10) *) + 0x4c; 0x89; 0xda; (* MOV (% rdx) (% r11) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xda; (* ADD (% rdx) (% r11) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0xa3; 0xf6; 0xdb; + (* MULX4 (% rbx,% r11) (% rdx,% rbx) *) + 0x4c; 0x11; 0xd8; (* ADC (% rax) (% r11) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc4; (* SUB (% r12) (% rax) *) + 0x49; 0x19; 0xdd; (* SBB (% r13) (% rbx) *) + 0x49; 0x19; 0xee; (* SBB (% r14) (% rbp) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd1; (* ADD (% r9) (% rdx) *) + 0x49; 0x83; 0xd2; 0x00; (* ADC (% r10) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x94; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,224))) *) + 0x45; 0x31; 0xdb; (* XOR (% r11d) (% r11d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x38; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x40; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,64))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x58; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,88))) *) + 0x49; 0x11; 0xc1; (* ADC (% r9) (% rax) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0x4d; 0x11; 0xdb; (* ADC (% r11) (% r11) *) + 0x4c; 0x89; 0xe2; (* MOV (% rdx) (% r12) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xe2; (* ADD (% rdx) (% r12) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0x9b; 0xf6; 0xdb; + (* MULX4 (% rbx,% r12) (% rdx,% rbx) *) + 0x4c; 0x11; 0xe0; (* ADC (% rax) (% r12) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc5; (* SUB (% r13) (% rax) *) + 0x49; 0x19; 0xde; (* SBB (% r14) (% rbx) *) + 0x49; 0x19; 0xef; (* SBB (% r15) (% rbp) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd2; (* ADD (% r10) (% rdx) *) + 0x49; 0x83; 0xd3; 0x00; (* ADC (% r11) (Imm8 (word 0)) *) + 0x48; 0x8b; 0x94; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,232))) *) + 0x45; 0x31; 0xe4; (* XOR (% r12d) (% r12d) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x38; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x40; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,64))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xf3; 0x4d; 0x0f; 0x38; 0xf6; 0xdc; + (* ADOX (% r11) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x58; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,88))) *) + 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0x4d; 0x11; 0xe4; (* ADC (% r12) (% r12) *) + 0x4c; 0x89; 0xea; (* MOV (% rdx) (% r13) *) + 0x48; 0xc1; 0xe2; 0x20; (* SHL (% rdx) (Imm8 (word 32)) *) + 0x4c; 0x01; 0xea; (* ADD (% rdx) (% r13) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc0; + (* MULX4 (% rax,% rbx) (% rdx,% rax) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0xc4; 0xe2; 0x93; 0xf6; 0xdb; + (* MULX4 (% rbx,% r13) (% rdx,% rbx) *) + 0x4c; 0x11; 0xe8; (* ADC (% rax) (% r13) *) + 0x48; 0x11; 0xd3; (* ADC (% rbx) (% rdx) *) + 0x11; 0xed; (* ADC (% ebp) (% ebp) *) + 0x49; 0x29; 0xc6; (* SUB (% r14) (% rax) *) + 0x49; 0x19; 0xdf; (* SBB (% r15) (% rbx) *) + 0x49; 0x19; 0xe8; (* SBB (% r8) (% rbp) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x49; 0x01; 0xd3; (* ADD (% r11) (% rdx) *) + 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) + 0x31; 0xd2; (* XOR (% edx) (% edx) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x45; 0x31; 0xed; (* XOR (% r13d) (% r13d) *) + 0x48; 0xb8; 0x01; 0x00; 0x00; 0x00; 0xff; 0xff; 0xff; 0xff; + (* MOV (% rax) (Imm64 (word 18446744069414584321)) *) + 0x4c; 0x01; 0xf0; (* ADD (% rax) (% r14) *) + 0xbb; 0xff; 0xff; 0xff; 0xff; + (* MOV (% ebx) (Imm32 (word 4294967295)) *) + 0x4c; 0x11; 0xfb; (* ADC (% rbx) (% r15) *) + 0xb9; 0x01; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 1)) *) + 0x4c; 0x11; 0xc1; (* ADC (% rcx) (% r8) *) + 0x4c; 0x11; 0xca; (* ADC (% rdx) (% r9) *) + 0x4c; 0x11; 0xd5; (* ADC (% rbp) (% r10) *) + 0x4d; 0x11; 0xdd; (* ADC (% r13) (% r11) *) + 0x49; 0x83; 0xd4; 0x00; (* ADC (% r12) (Imm8 (word 0)) *) + 0x4c; 0x0f; 0x45; 0xf0; (* CMOVNE (% r14) (% rax) *) + 0x4c; 0x0f; 0x45; 0xfb; (* CMOVNE (% r15) (% rbx) *) + 0x4c; 0x0f; 0x45; 0xc1; (* CMOVNE (% r8) (% rcx) *) + 0x4c; 0x0f; 0x45; 0xca; (* CMOVNE (% r9) (% rdx) *) + 0x4c; 0x0f; 0x45; 0xd5; (* CMOVNE (% r10) (% rbp) *) + 0x4d; 0x0f; 0x45; 0xdd; (* CMOVNE (% r11) (% r13) *) + 0x4c; 0x89; 0xb4; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,192))) (% r14) *) + 0x4c; 0x89; 0xbc; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,200))) (% r15) *) + 0x4c; 0x89; 0x84; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,208))) (% r8) *) + 0x4c; 0x89; 0x8c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,216))) (% r9) *) + 0x4c; 0x89; 0x94; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,224))) (% r10) *) + 0x4c; 0x89; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,232))) (% r11) *) + 0x48; 0x8b; 0xbc; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MOV (% rdi) (Memop Quadword (%% (rsp,304))) *) + 0x48; 0x8b; 0x84; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,192))) *) + 0x48; 0x2b; 0x84; 0x24; 0x90; 0x00; 0x00; 0x00; + (* SUB (% rax) (Memop Quadword (%% (rsp,144))) *) + 0x48; 0x8b; 0x94; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,200))) *) + 0x48; 0x1b; 0x94; 0x24; 0x98; 0x00; 0x00; 0x00; + (* SBB (% rdx) (Memop Quadword (%% (rsp,152))) *) + 0x4c; 0x8b; 0x84; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (% r8) (Memop Quadword (%% (rsp,208))) *) + 0x4c; 0x1b; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* SBB (% r8) (Memop Quadword (%% (rsp,160))) *) + 0x4c; 0x8b; 0x8c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MOV (% r9) (Memop Quadword (%% (rsp,216))) *) + 0x4c; 0x1b; 0x8c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* SBB (% r9) (Memop Quadword (%% (rsp,168))) *) + 0x4c; 0x8b; 0x94; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MOV (% r10) (Memop Quadword (%% (rsp,224))) *) + 0x4c; 0x1b; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* SBB (% r10) (Memop Quadword (%% (rsp,176))) *) + 0x4c; 0x8b; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MOV (% r11) (Memop Quadword (%% (rsp,232))) *) + 0x4c; 0x1b; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* SBB (% r11) (Memop Quadword (%% (rsp,184))) *) + 0x48; 0x19; 0xc9; (* SBB (% rcx) (% rcx) *) + 0xbe; 0xff; 0xff; 0xff; 0xff; + (* MOV (% esi) (Imm32 (word 4294967295)) *) + 0x48; 0x21; 0xf1; (* AND (% rcx) (% rsi) *) + 0x48; 0x31; 0xf6; (* XOR (% rsi) (% rsi) *) + 0x48; 0x29; 0xce; (* SUB (% rsi) (% rcx) *) + 0x48; 0x29; 0xf0; (* SUB (% rax) (% rsi) *) + 0x48; 0x89; 0x47; 0x30; (* MOV (Memop Quadword (%% (rdi,48))) (% rax) *) + 0x48; 0x19; 0xca; (* SBB (% rdx) (% rcx) *) + 0x48; 0x89; 0x57; 0x38; (* MOV (Memop Quadword (%% (rdi,56))) (% rdx) *) + 0x48; 0x19; 0xc0; (* SBB (% rax) (% rax) *) + 0x48; 0x21; 0xf1; (* AND (% rcx) (% rsi) *) + 0x48; 0xf7; 0xd8; (* NEG (% rax) *) + 0x49; 0x19; 0xc8; (* SBB (% r8) (% rcx) *) + 0x4c; 0x89; 0x47; 0x40; (* MOV (Memop Quadword (%% (rdi,64))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x4f; 0x48; (* MOV (Memop Quadword (%% (rdi,72))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x57; 0x50; (* MOV (Memop Quadword (%% (rdi,80))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x5f; 0x58; (* MOV (Memop Quadword (%% (rdi,88))) (% r11) *) + 0x48; 0x81; 0xc4; 0x38; 0x01; 0x00; 0x00; + (* ADD (% rsp) (Imm32 (word 312)) *) + 0x41; 0x5f; (* POP (% r15) *) + 0x41; 0x5e; (* POP (% r14) *) + 0x41; 0x5d; (* POP (% r13) *) + 0x41; 0x5c; (* POP (% r12) *) + 0x5d; (* POP (% rbp) *) + 0x5b; (* POP (% rbx) *) + 0xc3 (* RET *) +];; + +let P384_MONTJMIXADD_EXEC = X86_MK_CORE_EXEC_RULE p384_montjmixadd_mc;; + +(* ------------------------------------------------------------------------- *) +(* Common supporting definitions and lemmas for component proofs. *) +(* ------------------------------------------------------------------------- *) + +let p_384 = new_definition `p_384 = 39402006196394479212279040100143613805079739270465446667948293404245721771496870329047266088258938001861606973112319`;; + +let nistp384 = define + `nistp384 = + (integer_mod_ring p_384, + ring_neg (integer_mod_ring p_384) (&3), + &b_384:int)`;; + +let nistp384_encode = new_definition + `nistp384_encode = montgomery_encode(384,p_384)`;; + +let swlemma = WORD_RULE + `word_add (word_shl x 32) x:int64 = word(4294967297 * val x)`;; + +let mmlemma = prove + (`!h (l:int64) (x:int64). + &2 pow 64 * &h + &(val(l:int64)):real = + &(val(word(4294967297 * val x):int64)) * &18446744069414584321 + ==> &2 pow 64 * &h + &(val(x:int64)):real = + &(val(word(4294967297 * val x):int64)) * &18446744069414584321`, + REPEAT GEN_TAC THEN REWRITE_TAC[REAL_OF_NUM_CLAUSES] THEN + REPEAT STRIP_TAC THEN FIRST_ASSUM(SUBST1_TAC o SYM) THEN + AP_TERM_TAC THEN AP_TERM_TAC THEN + REWRITE_TAC[GSYM VAL_CONG; DIMINDEX_64] THEN FIRST_X_ASSUM(MATCH_MP_TAC o + MATCH_MP (NUMBER_RULE + `p * h + l:num = y ==> (y == x) (mod p) ==> (x == l) (mod p)`)) THEN + REWRITE_TAC[CONG; VAL_WORD; DIMINDEX_64] THEN CONV_TAC MOD_DOWN_CONV THEN + REWRITE_TAC[GSYM CONG] THEN MATCH_MP_TAC(NUMBER_RULE + `(a * b == 1) (mod p) ==> ((a * x) * b == x) (mod p)`) THEN + REWRITE_TAC[CONG] THEN CONV_TAC NUM_REDUCE_CONV);; + +let nintlemma = prove + (`&(num_of_int(x rem &p_384)) = x rem &p_384`, + MATCH_MP_TAC INT_OF_NUM_OF_INT THEN MATCH_MP_TAC INT_REM_POS THEN + REWRITE_TAC[INT_OF_NUM_EQ; p_384] THEN CONV_TAC NUM_REDUCE_CONV);; + +let unilemma0 = prove + (`x = a MOD p_384 ==> x < p_384 /\ &x = &a rem &p_384`, + REWRITE_TAC[INT_OF_NUM_REM; p_384] THEN ARITH_TAC);; + +let unilemma1 = prove + (`&x = a rem &p_384 ==> x < p_384 /\ &x = a rem &p_384`, + SIMP_TAC[GSYM INT_OF_NUM_LT; INT_LT_REM_EQ; p_384] THEN INT_ARITH_TAC);; + +let unilemma2 = prove + (`X = num_of_int(x rem &p_384) ==> X < p_384 /\ &X = x rem &p_384`, + DISCH_THEN SUBST1_TAC THEN + REWRITE_TAC[GSYM INT_OF_NUM_LT; nintlemma; INT_LT_REM_EQ] THEN + REWRITE_TAC[INT_OF_NUM_LT; p_384] THEN CONV_TAC NUM_REDUCE_CONV);; + +let lemont = prove + (`(&i * x * y) rem &p_384 = (&i * x rem &p_384 * y rem &p_384) rem &p_384`, + CONV_TAC INT_REM_DOWN_CONV THEN REWRITE_TAC[]);; + +let pumont = prove + (`(&(inverse_mod p_384 (2 EXP 384)) * + (&2 pow 384 * x) rem &p_384 * (&2 pow 384 * y) rem &p_384) rem &p_384 = + (&2 pow 384 * x * y) rem &p_384`, + CONV_TAC INT_REM_DOWN_CONV THEN REWRITE_TAC[INT_REM_EQ] THEN + MATCH_MP_TAC(INTEGER_RULE + `(i * t:int == &1) (mod p) + ==> (i * (t * x) * (t * y) == t * x * y) (mod p)`) THEN + REWRITE_TAC[GSYM num_congruent; INT_OF_NUM_CLAUSES] THEN + REWRITE_TAC[INVERSE_MOD_LMUL_EQ; COPRIME_REXP; COPRIME_2; p_384] THEN + CONV_TAC NUM_REDUCE_CONV);; + +let lvs = + ["x_1",[`RSI`;`0`]; + "y_1",[`RSI`;`48`]; + "z_1",[`RSI`;`96`]; + "x_2",[`RCX`;`0`]; + "y_2",[`RCX`;`48`]; + "x_3",[`RDI`;`0`]; + "y_3",[`RDI`;`48`]; + "z_3",[`RDI`;`96`]; + "zp2",[`RSP`;`0`]; + "ww",[`RSP`;`0`]; + "yd",[`RSP`;`48`]; + "y2a",[`RSP`;`48`]; + "x2a",[`RSP`;`96`]; + "zzx2",[`RSP`;`96`]; + "zz",[`RSP`;`144`]; + "t1",[`RSP`;`144`]; + "t2",[`RSP`;`192`]; + "zzx1",[`RSP`;`192`]; + "xd",[`RSP`;`240`]];; + +(* ------------------------------------------------------------------------- *) +(* Instances of montsqr. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_MONTSQR_P384_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE p384_montjmixadd_mc) 230 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1. + !a. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) t = a + ==> + nonoverlapping (word pc,0x3a2e) (word_add (read p3 t) (word n3),48) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST p384_montjmixadd_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) s = + a) + (\s. read RIP s = pcout /\ + (a EXP 2 <= 2 EXP 384 * p_384 + ==> read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 6)) s = + (inverse_mod p_384 (2 EXP 384) * a EXP 2) MOD p_384)) + (MAYCHANGE [RIP; RSI; RAX; RBX; RBP; RCX; RDX; + R8; R9; R10; R11; R12; R13; R14; R15] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 6)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + (*** Globalize the a EXP 2 <= 2 EXP 384 * p_384 assumption ***) + + ASM_CASES_TAC `a EXP 2 <= 2 EXP 384 * p_384` THENL + [ASM_REWRITE_TAC[]; X86_SIM_TAC P384_MONTJMIXADD_EXEC (1--230)] THEN + ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "x_" o lhand o concl) THEN + + (*** Simulate the main squaring and 6-fold Montgomery reduction ***) + + MAP_EVERY (fun s -> + X86_SINGLE_STEP_TAC P384_MONTJMIXADD_EXEC s THEN + RULE_ASSUM_TAC(REWRITE_RULE[swlemma]) THEN + TRY(ACCUMULATE_ARITH_TAC s) THEN CLARIFY_TAC) + (statenames "s" (1--205)) THEN + + (*** Do the congruential reasoning on the chosen multipliers ***) + + RULE_ASSUM_TAC(fun th -> try MATCH_MP mmlemma th with Failure _ -> th) THEN + + (*** Derive the main property of the pre-reduced form, which we call t ***) + + ABBREV_TAC + `t = bignum_of_wordlist + [sum_s198; sum_s199; sum_s200; sum_s201; sum_s202; sum_s203; + word (bitval carry_s203)]` THEN + + SUBGOAL_THEN + `t < 2 * p_384 /\ (2 EXP 384 * t == a EXP 2) (mod p_384)` + STRIP_ASSUME_TAC THENL + [RULE_ASSUM_TAC(REWRITE_RULE[VAL_WORD_BITVAL]) THEN + ACCUMULATOR_POP_ASSUM_LIST + (STRIP_ASSUME_TAC o end_itlist CONJ o DECARRY_RULE) THEN + CONJ_TAC THENL + [FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP (ARITH_RULE + `ab <= 2 EXP 384 * p + ==> 2 EXP 384 * t < ab + 2 EXP 384 * p ==> t < 2 * p`)) THEN + MAP_EVERY EXPAND_TAC ["a"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + REWRITE_TAC[p_384; REAL_ARITH `a:real < b + c <=> a - b < c`] THEN + ASM_REWRITE_TAC[VAL_WORD_BITVAL] THEN BOUNDER_TAC[]; + REWRITE_TAC[REAL_CONGRUENCE; p_384] THEN CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["a"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ASM_REWRITE_TAC[VAL_WORD_BITVAL] THEN REAL_INTEGER_TAC]; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Final correction stage ***) + + X86_ACCSTEPS_TAC P384_MONTJMIXADD_EXEC + [210;212;214;215;216;217] (206--230) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + TRANS_TAC EQ_TRANS `t MOD p_384` THEN CONJ_TAC THENL + [ALL_TAC; + REWRITE_TAC[GSYM CONG] THEN FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP + (NUMBER_RULE + `(e * t == a EXP 2) (mod p) + ==> (e * i == 1) (mod p) ==> (t == i * a EXP 2) (mod p)`)) THEN + REWRITE_TAC[INVERSE_MOD_RMUL_EQ; COPRIME_REXP; COPRIME_2] THEN + REWRITE_TAC[p_384] THEN CONV_TAC NUM_REDUCE_CONV] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC EQUAL_FROM_CONGRUENT_MOD_MOD THEN + MAP_EVERY EXISTS_TAC + [`384`; `if t < p_384 then &t:real else &t - &p_384`] THEN + REPEAT CONJ_TAC THENL + [REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN BOUNDER_TAC[]; + REWRITE_TAC[p_384] THEN ARITH_TAC; + REWRITE_TAC[p_384] THEN ARITH_TAC; + ALL_TAC; + ASM_SIMP_TAC[MOD_CASES] THEN + GEN_REWRITE_TAC LAND_CONV [COND_RAND] THEN + SIMP_TAC[REAL_OF_NUM_SUB; GSYM NOT_LT]] THEN + SUBGOAL_THEN + `~(val(word_add (word(bitval carry_s203)) + (word(bitval carry_s217)):int64) = 0) <=> + p_384 <= t` + SUBST_ALL_TAC THENL + [REWRITE_TAC[VAL_WORD_ADD_CASES; VAL_WORD_BITVAL; DIMINDEX_64] THEN + SIMP_TAC[BITVAL_BOUND; ARITH_RULE + `b <= 1 /\ c <= 1 ==> b + c < 2 EXP 64`] THEN + TRANS_TAC EQ_TRANS `2 EXP 384 <= t + (2 EXP 384 - p_384)` THEN + CONJ_TAC THENL [ALL_TAC; REWRITE_TAC[p_384] THEN ARITH_TAC] THEN + TRANS_TAC EQ_TRANS + `2 EXP 384 + <= 2 EXP 384 * (bitval carry_s203 + bitval carry_s217) + + bignum_of_wordlist + [sum_s210;sum_s212;sum_s214;sum_s215;sum_s216;sum_s217]` THEN + CONJ_TAC THENL + [REWRITE_TAC[TAUT `(~p <=> q) <=> (~p ==> q) /\ (p ==> ~q)`] THEN + CONJ_TAC THENL [ARITH_TAC; DISCH_THEN SUBST1_TAC] THEN + REWRITE_TAC[ADD_CLAUSES; MULT_CLAUSES; NOT_LE] THEN + W(MP_TAC o PART_MATCH lhand + BIGNUM_OF_WORDLIST_BOUND_LENGTH o lhand o snd) THEN + REWRITE_TAC[LENGTH] THEN ARITH_TAC; + AP_TERM_TAC THEN EXPAND_TAC "t" THEN + REWRITE_TAC[p_384; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + CONV_TAC NUM_REDUCE_CONV THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + REWRITE_TAC[VAL_WORD_BITVAL] THEN CONV_TAC REAL_RING]; + REWRITE_TAC[GSYM NOT_LT; COND_SWAP]] THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[] THEN EXPAND_TAC "t" THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist; p_384] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + ASM_REWRITE_TAC[BITVAL_CLAUSES; VAL_WORD_BITVAL] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instances of montmul. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_MONTMUL_P384_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE p384_montjmixadd_mc) 263 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1 p2 n2. + !a. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) t = a + ==> + !b. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 6)) t = b + ==> + nonoverlapping (word pc,0x3a2e) (word_add (read p3 t) (word n3),48) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST p384_montjmixadd_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read RCX s = read RCX t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) s = + a /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 6)) s = + b) + (\s. read RIP s = pcout /\ + (a * b <= 2 EXP 384 * p_384 + ==> read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 6)) s = + (inverse_mod p_384 (2 EXP 384) * a * b) MOD p_384)) + (MAYCHANGE [RIP; RAX; RBP; RBX; RCX; RDX; + R8; R9; R10; R11; R12; R13; R14; R15] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 6)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + (*** Globalize the a * b <= 2 EXP 384 * p_384 assumption ***) + + ASM_CASES_TAC `a * b <= 2 EXP 384 * p_384` THENL + [ASM_REWRITE_TAC[]; X86_SIM_TAC P384_MONTJMIXADD_EXEC (1--263)] THEN + ENSURES_INIT_TAC "s1" THEN + + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "y_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "x_" o lhand o concl) THEN + + (*** Simulate the main 6-fold multiply-and-Montgomery-reduce block ***) + + MAP_EVERY (fun s -> + X86_SINGLE_STEP_TAC P384_MONTJMIXADD_EXEC s THEN + RULE_ASSUM_TAC(REWRITE_RULE[swlemma]) THEN + TRY(ACCUMULATE_ARITH_TAC s) THEN CLARIFY_TAC) + (statenames "s" (2--239)) THEN + + (*** Do the congruential reasoning on the chosen multipliers ***) + + RULE_ASSUM_TAC(fun th -> try MATCH_MP mmlemma th with Failure _ -> th) THEN + + (*** Derive the main property of the pre-reduced form, which we call t ***) + + ABBREV_TAC + `t = bignum_of_wordlist + [sum_s232; sum_s233; sum_s234; sum_s235; sum_s236; sum_s238; + sum_s239]` THEN + SUBGOAL_THEN + `t < 2 * p_384 /\ (2 EXP 384 * t == a * b) (mod p_384)` + STRIP_ASSUME_TAC THENL + [RULE_ASSUM_TAC(REWRITE_RULE[VAL_WORD_BITVAL]) THEN + ACCUMULATOR_POP_ASSUM_LIST + (STRIP_ASSUME_TAC o end_itlist CONJ o DECARRY_RULE) THEN + CONJ_TAC THENL + [FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP (ARITH_RULE + `ab <= 2 EXP 384 * p + ==> 2 EXP 384 * t < ab + 2 EXP 384 * p ==> t < 2 * p`)) THEN + MAP_EVERY EXPAND_TAC ["a"; "b"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + REWRITE_TAC[p_384; REAL_ARITH `a:real < b + c <=> a - b < c`] THEN + ASM_REWRITE_TAC[] THEN BOUNDER_TAC[]; + REWRITE_TAC[REAL_CONGRUENCE; p_384] THEN CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["a"; "b"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ASM_REWRITE_TAC[] THEN REAL_INTEGER_TAC]; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** To make bounds reasoning more transparent, recast top as a bit ***) + + MP_TAC(fst(EQ_IMP_RULE(SPEC `val(sum_s239:int64)` NUM_AS_BITVAL_ALT))) THEN + REWRITE_TAC[VAL_EQ_BITVAL] THEN ANTS_TAC THENL + [UNDISCH_TAC `t < 2 * p_384` THEN EXPAND_TAC "t" THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; p_384; bignum_of_wordlist] THEN + REAL_ARITH_TAC; + DISCH_THEN(X_CHOOSE_THEN `topc:bool` SUBST_ALL_TAC)] THEN + + (*** Final correction stage ***) + + X86_ACCSTEPS_TAC P384_MONTJMIXADD_EXEC + [244;246;248;249;250;251] (240--264) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(LAND_CONV BIGNUM_EXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + TRANS_TAC EQ_TRANS `t MOD p_384` THEN CONJ_TAC THENL + [ALL_TAC; + REWRITE_TAC[GSYM CONG] THEN FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP + (NUMBER_RULE + `(e * t == a * b) (mod p) + ==> (e * i == 1) (mod p) ==> (t == i * a * b) (mod p)`)) THEN + REWRITE_TAC[INVERSE_MOD_RMUL_EQ; COPRIME_REXP; COPRIME_2] THEN + REWRITE_TAC[p_384] THEN CONV_TAC NUM_REDUCE_CONV] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC EQUAL_FROM_CONGRUENT_MOD_MOD THEN + MAP_EVERY EXISTS_TAC + [`384`; `if t < p_384 then &t:real else &t - &p_384`] THEN + REPEAT CONJ_TAC THENL + [REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN BOUNDER_TAC[]; + REWRITE_TAC[p_384] THEN ARITH_TAC; + REWRITE_TAC[p_384] THEN ARITH_TAC; + ALL_TAC; + ASM_SIMP_TAC[MOD_CASES] THEN + GEN_REWRITE_TAC LAND_CONV [COND_RAND] THEN + SIMP_TAC[REAL_OF_NUM_SUB; GSYM NOT_LT]] THEN + SUBGOAL_THEN + `~(val(word_add (word(bitval topc)) + (word(bitval carry_s251)):int64) = 0) <=> + p_384 <= t` + SUBST_ALL_TAC THENL + [REWRITE_TAC[VAL_WORD_ADD_CASES; VAL_WORD_BITVAL; DIMINDEX_64] THEN + SIMP_TAC[BITVAL_BOUND; ARITH_RULE + `b <= 1 /\ c <= 1 ==> b + c < 2 EXP 64`] THEN + TRANS_TAC EQ_TRANS `2 EXP 384 <= t + (2 EXP 384 - p_384)` THEN + CONJ_TAC THENL [ALL_TAC; REWRITE_TAC[p_384] THEN ARITH_TAC] THEN + TRANS_TAC EQ_TRANS + `2 EXP 384 + <= 2 EXP 384 * (bitval topc + bitval carry_s251) + + bignum_of_wordlist + [sum_s244;sum_s246;sum_s248;sum_s249;sum_s250;sum_s251]` THEN + CONJ_TAC THENL + [REWRITE_TAC[TAUT `(~p <=> q) <=> (~p ==> q) /\ (p ==> ~q)`] THEN + CONJ_TAC THENL [ARITH_TAC; DISCH_THEN SUBST1_TAC] THEN + REWRITE_TAC[ADD_CLAUSES; MULT_CLAUSES; NOT_LE] THEN + W(MP_TAC o PART_MATCH lhand + BIGNUM_OF_WORDLIST_BOUND_LENGTH o lhand o snd) THEN + REWRITE_TAC[LENGTH] THEN ARITH_TAC; + AP_TERM_TAC THEN EXPAND_TAC "t" THEN + REWRITE_TAC[p_384; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + CONV_TAC NUM_REDUCE_CONV THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + REWRITE_TAC[VAL_WORD_BITVAL] THEN CONV_TAC REAL_RING]; + REWRITE_TAC[GSYM NOT_LT; COND_SWAP]] THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[] THEN EXPAND_TAC "t" THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist; p_384] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + ASM_REWRITE_TAC[BITVAL_CLAUSES; VAL_WORD_BITVAL] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instances of sub. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_SUB_P384_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE p384_montjmixadd_mc) 32 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 6)) t = n + ==> + nonoverlapping (word pc,0x3a2e) (word_add (read p3 t) (word n3),48) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST p384_montjmixadd_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read RCX s = read RCX t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 6)) s = + n) + (\s. read RIP s = pcout /\ + (m < p_384 /\ n < p_384 + ==> &(read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 6)) s) = (&m - &n) rem &p_384)) + (MAYCHANGE [RIP; RSI; RAX; RCX; RDX; R8; R9; R10; R11] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 6)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "m_" o lhand o concl) THEN + + X86_ACCSTEPS_TAC P384_MONTJMIXADD_EXEC (1--12) (1--12) THEN + + SUBGOAL_THEN `carry_s12 <=> m < n` SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN EXISTS_TAC `384` THEN + MAP_EVERY EXPAND_TAC ["m"; "n"] THEN REWRITE_TAC[GSYM REAL_OF_NUM_ADD] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_MUL; GSYM REAL_OF_NUM_POW] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ALL_TAC] THEN + + X86_ACCSTEPS_TAC P384_MONTJMIXADD_EXEC [18;20;25;27;29;31] (13--32) THEN + + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN STRIP_TAC THEN + CONV_TAC(LAND_CONV(RAND_CONV BIGNUM_EXPAND_CONV)) THEN + ASM_REWRITE_TAC[] THEN DISCARD_STATE_TAC "s32" THEN + + CONV_TAC SYM_CONV THEN MATCH_MP_TAC INT_REM_UNIQ THEN + + EXISTS_TAC `--(&(bitval(m < n))):int` THEN REWRITE_TAC[INT_ABS_NUM] THEN + REWRITE_TAC[INT_ARITH `m - n:int = --b * p + z <=> z = b * p + m - n`] THEN + REWRITE_TAC[int_eq; int_le; int_lt] THEN + REWRITE_TAC[int_add_th; int_mul_th; int_of_num_th; int_sub_th] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_ADD; GSYM REAL_OF_NUM_MUL; + GSYM REAL_OF_NUM_POW] THEN + MATCH_MP_TAC(REAL_ARITH + `!t:real. p < t /\ + (&0 <= a /\ a < p) /\ + (&0 <= z /\ z < t) /\ + ((&0 <= z /\ z < t) /\ (&0 <= a /\ a < t) ==> z = a) + ==> z = a /\ &0 <= z /\ z < p`) THEN + EXISTS_TAC `(&2:real) pow 384` THEN + + CONJ_TAC THENL [REWRITE_TAC[p_384] THEN REAL_ARITH_TAC; ALL_TAC] THEN + CONJ_TAC THENL + [MAP_EVERY UNDISCH_TAC [`m < p_384`; `n < p_384`] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_LT] THEN + ASM_CASES_TAC `&m:real < &n` THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + POP_ASSUM MP_TAC THEN REWRITE_TAC[p_384] THEN REAL_ARITH_TAC; + ALL_TAC] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; STRIP_TAC] THEN + + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`384`; `&0:real`] THEN + ASM_REWRITE_TAC[] THEN + CONJ_TAC THENL [REAL_INTEGER_TAC; ALL_TAC] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + REWRITE_TAC[WORD_AND_MASK] THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC WORD_REDUCE_CONV THEN + REWRITE_TAC[WORD_BITVAL_EQ_0; WORD_NEG_EQ_0] THEN + MAP_EVERY EXPAND_TAC ["m"; "n"] THEN REWRITE_TAC[GSYM REAL_OF_NUM_ADD] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_MUL; GSYM REAL_OF_NUM_POW; p_384] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instances of amontsqr. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_AMONTSQR_P384_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE p384_montjmixadd_mc) 222 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1. + !a. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) t = a + ==> + nonoverlapping (word pc,0x3a2e) (word_add (read p3 t) (word n3),48) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST p384_montjmixadd_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 6)) s = + a) + (\s. read RIP s = pcout /\ + read(memory :> bytes(word_add (read p3 t) (word n3),8 * 6)) s + < 2 EXP 384 /\ + (read(memory :> bytes(word_add (read p3 t) (word n3),8 * 6)) s == + inverse_mod p_384 (2 EXP 384) * a EXP 2) (mod p_384)) + (MAYCHANGE [RIP; RSI; RAX; RBX; RBP; RCX; RDX; + R8; R9; R10; R11; R12; R13; R14; R15] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 6)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "x_" o lhand o concl) THEN + + (*** Simulate the main squaring and 6-fold Montgomery reduction ***) + + MAP_EVERY (fun s -> + X86_SINGLE_STEP_TAC P384_MONTJMIXADD_EXEC s THEN + RULE_ASSUM_TAC(REWRITE_RULE[swlemma]) THEN + TRY(ACCUMULATE_ARITH_TAC s) THEN CLARIFY_TAC) + (statenames "s" (1--203)) THEN + + (*** Do the congruential reasoning on the chosen multipliers ***) + + RULE_ASSUM_TAC(fun th -> try MATCH_MP mmlemma th with Failure _ -> th) THEN + + (*** Derive the main property of the pre-reduced form, which we call t ***) + + ABBREV_TAC + `t = bignum_of_wordlist + [sum_s198; sum_s199; sum_s200; sum_s201; sum_s202; sum_s203; + word (bitval carry_s203)]` THEN + SUBGOAL_THEN + `t < 2 EXP 384 + p_384 /\ (2 EXP 384 * t == a EXP 2) (mod p_384)` + STRIP_ASSUME_TAC THENL + [RULE_ASSUM_TAC(REWRITE_RULE[VAL_WORD_BITVAL]) THEN + ACCUMULATOR_POP_ASSUM_LIST + (STRIP_ASSUME_TAC o end_itlist CONJ o DECARRY_RULE) THEN + CONJ_TAC THENL + [MATCH_MP_TAC(ARITH_RULE + `2 EXP 384 * t <= (2 EXP 384 - 1) EXP 2 + (2 EXP 384 - 1) * p + ==> t < 2 EXP 384 + p`) THEN + REWRITE_TAC[p_384] THEN CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["a"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + REWRITE_TAC[p_384; REAL_ARITH `a:real < b + c <=> a - b < c`] THEN + ASM_REWRITE_TAC[VAL_WORD_BITVAL] THEN BOUNDER_TAC[]; + REWRITE_TAC[REAL_CONGRUENCE; p_384] THEN CONV_TAC NUM_REDUCE_CONV THEN + MAP_EVERY EXPAND_TAC ["a"; "t"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ASM_REWRITE_TAC[VAL_WORD_BITVAL] THEN REAL_INTEGER_TAC]; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Final correction stage ***) + + X86_ACCSTEPS_TAC P384_MONTJMIXADD_EXEC (211--216) (204--222) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONJ_TAC THENL + [CONV_TAC(ONCE_DEPTH_CONV BIGNUM_EXPAND_CONV) THEN + ASM_REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN BOUNDER_TAC[]; + ALL_TAC] THEN + + FIRST_X_ASSUM(MATCH_MP_TAC o MATCH_MP + (NUMBER_RULE + `(e * t == ab) (mod p) + ==> (e * i == 1) (mod p) /\ (s == t) (mod p) + ==> (s == i * ab) (mod p)`)) THEN + REWRITE_TAC[INVERSE_MOD_RMUL_EQ; COPRIME_REXP; COPRIME_2] THEN + CONJ_TAC THENL + [REWRITE_TAC[p_384] THEN CONV_TAC NUM_REDUCE_CONV; ALL_TAC] THEN + SUBGOAL_THEN `carry_s203 <=> 2 EXP 384 <= t` SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LE THEN EXISTS_TAC `384` THEN + EXPAND_TAC "t" THEN + REWRITE_TAC[p_384; bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + REWRITE_TAC[VAL_WORD_BITVAL] THEN BOUNDER_TAC[]; + ABBREV_TAC `b <=> 2 EXP 384 <= t`] THEN + MATCH_MP_TAC(NUMBER_RULE `!b:num. x + b * p = y ==> (x == y) (mod p)`) THEN + EXISTS_TAC `bitval b` THEN REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN + ONCE_REWRITE_TAC[REAL_ARITH `a + b:real = c <=> c - b = a`] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`384`; `&0:real`] THEN CONJ_TAC THENL + [EXPAND_TAC "b" THEN UNDISCH_TAC `t < 2 EXP 384 + p_384` THEN + REWRITE_TAC[bitval; p_384; GSYM REAL_OF_NUM_CLAUSES] THEN REAL_ARITH_TAC; + REWRITE_TAC[INTEGER_CLOSED]] THEN + CONJ_TAC THENL + [CONV_TAC(ONCE_DEPTH_CONV BIGNUM_EXPAND_CONV) THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN BOUNDER_TAC[]; + ALL_TAC] THEN + CONV_TAC(ONCE_DEPTH_CONV BIGNUM_EXPAND_CONV) THEN + EXPAND_TAC "t" THEN REWRITE_TAC[bignum_of_wordlist] THEN + ASM_REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN + ACCUMULATOR_POP_ASSUM_LIST (MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + BOOL_CASES_TAC `b:bool` THEN REWRITE_TAC[BITVAL_CLAUSES; p_384] THEN + CONV_TAC WORD_REDUCE_CONV THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Overall point operation proof. *) +(* ------------------------------------------------------------------------- *) + +let P384_MONTJMIXADD_CORRECT = time prove + (`!p3 p1 t1 p2 t2 pc stackpointer. + ALLPAIRS nonoverlapping + [(p3,144); (stackpointer,312)] + [(word pc,0x3a2e); (p1,144); (p2,96)] /\ + nonoverlapping (p3,144) (stackpointer,312) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST p384_montjmixadd_mc) /\ + read RIP s = word(pc + 0x11) /\ + read RSP s = stackpointer /\ + C_ARGUMENTS [p3; p1; p2] s /\ + bignum_triple_from_memory (p1,6) s = t1 /\ + bignum_pair_from_memory (p2,6) s = t2) + (\s. read RIP s = word (pc + 0x3a1c) /\ + (!x1 y1 z1 x2 y2 z2. + ~(z1 = &0) /\ z2 = &1 /\ + ~(jacobian_eq (integer_mod_ring p_384) + (x1,y1,z1) (x2,y2,z2)) /\ + ~(jacobian_eq (integer_mod_ring p_384) + (jacobian_neg nistp384 (x1,y1,z1)) + (x2,y2,z2)) /\ + t1 = tripled nistp384_encode (x1,y1,z1) /\ + t2 = paired nistp384_encode (x2,y2) + ==> bignum_triple_from_memory(p3,6) s = + tripled nistp384_encode + (jacobian_add nistp384 (x1,y1,z1) (x2,y2,z2)))) + (MAYCHANGE [RIP; RDI; RSI; RAX; RDX; RCX; R8; R9; R10; R11; + RBX; RBP; R12; R13; R14; R15] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,144); + memory :> bytes(stackpointer,312)])`, + REWRITE_TAC[FORALL_PAIR_THM] THEN + MAP_EVERY X_GEN_TAC + [`p3:int64`; `p1:int64`; `x1:num`; `y1:num`; `z1:num`; `p2:int64`; + `x2:num`; `y2:num`; `pc:num`; `stackpointer:int64`] THEN + REWRITE_TAC[ALLPAIRS; ALL; NONOVERLAPPING_CLAUSES] THEN STRIP_TAC THEN + REWRITE_TAC[C_ARGUMENTS; SOME_FLAGS; PAIR_EQ; + bignum_pair_from_memory; bignum_triple_from_memory] THEN + CONV_TAC(ONCE_DEPTH_CONV NUM_MULT_CONV) THEN + CONV_TAC(ONCE_DEPTH_CONV NORMALIZE_RELATIVE_ADDRESS_CONV) THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + + LOCAL_AMONTSQR_P384_TAC 3 ["zp2";"z_1"] THEN + LOCAL_MONTMUL_P384_TAC 2 ["y2a";"z_1";"y_2"] THEN + LOCAL_MONTMUL_P384_TAC 1 ["x2a";"zp2";"x_2"] THEN + LOCAL_MONTMUL_P384_TAC 0 ["y2a";"zp2";"y2a"] THEN + LOCAL_SUB_P384_TAC 1 ["xd";"x2a";"x_1"] THEN + LOCAL_SUB_P384_TAC 1 ["yd";"y2a";"y_1"] THEN + LOCAL_AMONTSQR_P384_TAC 0 ["zz";"xd"] THEN + LOCAL_MONTSQR_P384_TAC 0 ["ww";"yd"] THEN + LOCAL_MONTMUL_P384_TAC 1 ["zzx1";"zz";"x_1"] THEN + LOCAL_MONTMUL_P384_TAC 0 ["zzx2";"zz";"x2a"] THEN + LOCAL_SUB_P384_TAC 1 ["x_3";"ww";"zzx1"] THEN + LOCAL_SUB_P384_TAC 0 ["t1";"zzx2";"zzx1"] THEN + LOCAL_MONTMUL_P384_TAC 2 ["z_3";"xd";"z_1"] THEN + LOCAL_SUB_P384_TAC 1 ["x_3";"x_3";"zzx2"] THEN + LOCAL_SUB_P384_TAC 1 ["t2";"zzx1";"x_3"] THEN + LOCAL_MONTMUL_P384_TAC 1 ["t1";"t1";"y_1"] THEN + LOCAL_MONTMUL_P384_TAC 0 ["t2";"yd";"t2"] THEN + LOCAL_SUB_P384_TAC 1 ["y_3";"t2";"t1"] THEN + + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + DISCARD_STATE_TAC "s34" THEN + DISCARD_MATCHING_ASSUMPTIONS [`nonoverlapping_modulo a b c`] THEN + + MAP_EVERY X_GEN_TAC + [`x1':int`; `y1':int`; `z1':int`; `x2':int`; `y2':int`; `z2':int`] THEN + DISCH_THEN(CONJUNCTS_THEN2 ASSUME_TAC MP_TAC) THEN + GEN_REWRITE_TAC I [IMP_CONJ] THEN DISCH_THEN SUBST_ALL_TAC THEN + REPLICATE_TAC 2 (DISCH_THEN(CONJUNCTS_THEN2 ASSUME_TAC MP_TAC)) THEN + REWRITE_TAC[tripled; paired; nistp384_encode; montgomery_encode; PAIR_EQ] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN + (STRIP_ASSUME_TAC o MATCH_MP unilemma2)) THEN + + REPEAT(FIRST_X_ASSUM(MP_TAC o check (is_imp o concl))) THEN + REPEAT(ANTS_TAC THENL + [REWRITE_TAC[p_384] THEN RULE_ASSUM_TAC(REWRITE_RULE[p_384]) THEN + CONV_TAC NUM_REDUCE_CONV THEN ASM BOUNDER_TAC[]; + (DISCH_THEN(STRIP_ASSUME_TAC o MATCH_MP unilemma0) ORELSE + DISCH_THEN(STRIP_ASSUME_TAC o MATCH_MP unilemma1))]) THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o GEN_REWRITE_RULE I [GSYM NOT_LE])) THEN + + RULE_ASSUM_TAC(REWRITE_RULE + [num_congruent; GSYM INT_OF_NUM_CLAUSES; GSYM INT_OF_NUM_REM]) THEN + RULE_ASSUM_TAC(REWRITE_RULE[GSYM INT_REM_EQ]) THEN + RULE_ASSUM_TAC(ONCE_REWRITE_RULE[GSYM INT_SUB_REM; GSYM INT_ADD_REM]) THEN + RULE_ASSUM_TAC(REWRITE_RULE[INT_POW_2]) THEN + RULE_ASSUM_TAC(GEN_REWRITE_RULE (RAND_CONV o TRY_CONV) [lemont]) THEN + + ASM_REWRITE_TAC[jacobian_add; nistp384] THEN + ASM_REWRITE_TAC[GSYM nistp384] THEN + REWRITE_TAC[INTEGER_MOD_RING_CLAUSES] THEN + CONV_TAC INT_REDUCE_CONV THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN + CONV_TAC INT_REM_DOWN_CONV THEN + REWRITE_TAC[tripled; paired; nistp384_encode; montgomery_encode] THEN + REWRITE_TAC[PAIR_EQ; GSYM INT_OF_NUM_EQ; nintlemma] THEN + CONV_TAC INT_REM_DOWN_CONV THEN + + ASM_REWRITE_TAC[pumont; INT_REM_REM; GSYM INT_ADD_LDISTRIB; + GSYM INT_ADD_LDISTRIB; GSYM INT_SUB_LDISTRIB; + INT_SUB_REM; INT_ADD_REM] THEN + + REPEAT CONJ_TAC THEN AP_THM_TAC THEN AP_TERM_TAC THEN AP_TERM_TAC THEN + INT_ARITH_TAC);; + +let P384_MONTJMIXADD_SUBROUTINE_CORRECT = time prove + (`!p3 p1 t1 p2 t2 pc stackpointer returnaddress. + ALLPAIRS nonoverlapping + [(p3,144); (word_sub stackpointer (word 360),360)] + [(word pc,0x3a2e); (p1,144); (p2,96)] /\ + nonoverlapping (p3,144) (word_sub stackpointer (word 360),368) + ==> ensures x86 + (\s. bytes_loaded s (word pc) p384_montjmixadd_mc /\ + read RIP s = word pc /\ + read RSP s = stackpointer /\ + read (memory :> bytes64 stackpointer) s = returnaddress /\ + C_ARGUMENTS [p3; p1; p2] s /\ + bignum_triple_from_memory (p1,6) s = t1 /\ + bignum_pair_from_memory (p2,6) s = t2) + (\s. read RIP s = returnaddress /\ + read RSP s = word_add stackpointer (word 8) /\ + (!x1 y1 z1 x2 y2 z2. + ~(z1 = &0) /\ z2 = &1 /\ + ~(jacobian_eq (integer_mod_ring p_384) + (x1,y1,z1) (x2,y2,z2)) /\ + ~(jacobian_eq (integer_mod_ring p_384) + (jacobian_neg nistp384 (x1,y1,z1)) + (x2,y2,z2)) /\ + t1 = tripled nistp384_encode (x1,y1,z1) /\ + t2 = paired nistp384_encode (x2,y2) + ==> bignum_triple_from_memory(p3,6) s = + tripled nistp384_encode + (jacobian_add nistp384 (x1,y1,z1) (x2,y2,z2)))) + (MAYCHANGE [RIP; RSP; RDI; RSI; RAX; RDX; RCX; R8; R9; R10; R11] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,144); + memory :> bytes(word_sub stackpointer (word 360),360)])`, + X86_PROMOTE_RETURN_STACK_TAC p384_montjmixadd_mc P384_MONTJMIXADD_CORRECT + `[RBX; RBP; R12; R13; R14; R15]` 360);; + +(* ------------------------------------------------------------------------- *) +(* Correctness of Windows ABI version. *) +(* ------------------------------------------------------------------------- *) + +let windows_p384_montjmixadd_mc = define_from_elf "windows_p384_montjmixadd_mc" + "x86/p384/p384_montjmixadd.obj";; + +let WINDOWS_P384_MONTJMIXADD_SUBROUTINE_CORRECT = time prove + (`!p3 p1 t1 p2 t2 pc stackpointer returnaddress. + ALLPAIRS nonoverlapping + [(p3,144); (word_sub stackpointer (word 376),376)] + [(word pc,0x3a3b); (p1,144); (p2,96)] /\ + nonoverlapping (p3,144) (word_sub stackpointer (word 376),384) + ==> ensures x86 + (\s. bytes_loaded s (word pc) windows_p384_montjmixadd_mc /\ + read RIP s = word pc /\ + read RSP s = stackpointer /\ + read (memory :> bytes64 stackpointer) s = returnaddress /\ + WINDOWS_C_ARGUMENTS [p3; p1; p2] s /\ + bignum_triple_from_memory (p1,6) s = t1 /\ + bignum_pair_from_memory (p2,6) s = t2) + (\s. read RIP s = returnaddress /\ + read RSP s = word_add stackpointer (word 8) /\ + (!x1 y1 z1 x2 y2 z2. + ~(z1 = &0) /\ z2 = &1 /\ + ~(jacobian_eq (integer_mod_ring p_384) + (x1,y1,z1) (x2,y2,z2)) /\ + ~(jacobian_eq (integer_mod_ring p_384) + (jacobian_neg nistp384 (x1,y1,z1)) + (x2,y2,z2)) /\ + t1 = tripled nistp384_encode (x1,y1,z1) /\ + t2 = paired nistp384_encode (x2,y2) + ==> bignum_triple_from_memory(p3,6) s = + tripled nistp384_encode + (jacobian_add nistp384 (x1,y1,z1) (x2,y2,z2)))) + (MAYCHANGE [RIP; RSP; RAX; RDX; RCX; R8; R9; R10; R11] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,144); + memory :> bytes(word_sub stackpointer (word 376),376)])`, + WINDOWS_X86_WRAP_STACK_TAC + windows_p384_montjmixadd_mc p384_montjmixadd_mc + P384_MONTJMIXADD_CORRECT + `[RBX; RBP; R12; R13; R14; R15]` 360);; diff --git a/x86/yesbmi_functions b/x86/yesbmi_functions index 89b1421b09..b4c773b819 100644 --- a/x86/yesbmi_functions +++ b/x86/yesbmi_functions @@ -48,6 +48,9 @@ curve25519_ladderstep p256_montjadd p256_montjdouble p256_montjmixadd +p384_montjadd +p384_montjdouble +p384_montjmixadd secp256k1_jadd secp256k1_jdouble secp256k1_jmixadd diff --git a/x86_att/Makefile b/x86_att/Makefile index d420f705b6..ab2a6714ef 100644 --- a/x86_att/Makefile +++ b/x86_att/Makefile @@ -173,6 +173,9 @@ OBJ = curve25519/bignum_add_p25519.o \ p384/bignum_tomont_p384_alt.o \ p384/bignum_triple_p384.o \ p384/bignum_triple_p384_alt.o \ + p384/p384_montjadd.o \ + p384/p384_montjdouble.o \ + p384/p384_montjmixadd.o \ p521/bignum_add_p521.o \ p521/bignum_cmul_p521.o \ p521/bignum_cmul_p521_alt.o \ diff --git a/x86_att/p384/p384_montjadd.S b/x86_att/p384/p384_montjadd.S new file mode 100644 index 0000000000..e550f38609 --- /dev/null +++ b/x86_att/p384/p384_montjadd.S @@ -0,0 +1,955 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +// ---------------------------------------------------------------------------- +// Point addition on NIST curve P-384 in Montgomery-Jacobian coordinates +// +// extern void p384_montjadd +// (uint64_t p3[static 18],uint64_t p1[static 18],uint64_t p2[static 18]); +// +// Does p3 := p1 + p2 where all points are regarded as Jacobian triples with +// each coordinate in the Montgomery domain, i.e. x' = (2^384 * x) mod p_384. +// A Jacobian triple (x',y',z') represents affine point (x/z^2,y/z^3). +// +// Standard x86-64 ABI: RDI = p3, RSI = p1, RDX = p2 +// Microsoft x64 ABI: RCX = p3, RDX = p1, R8 = p2 +// ---------------------------------------------------------------------------- +#include "_internal_s2n_bignum.h" + + + S2N_BN_SYM_VISIBILITY_DIRECTIVE(p384_montjadd) + S2N_BN_SYM_PRIVACY_DIRECTIVE(p384_montjadd) + .text + .balign 4 + +// Size of individual field elements + +#define NUMSIZE 48 + +// Pointer-offset pairs for inputs and outputs +// These assume %rdi = p3, %rsi = p1 and %rcx = p2, +// which needs to be set up explicitly before use + +#define x_1 0(%rsi) +#define y_1 NUMSIZE(%rsi) +#define z_1 (2*NUMSIZE)(%rsi) + +#define x_2 0(%rcx) +#define y_2 NUMSIZE(%rcx) +#define z_2 (2*NUMSIZE)(%rcx) + +#define x_3 0(%rdi) +#define y_3 NUMSIZE(%rdi) +#define z_3 (2*NUMSIZE)(%rdi) + +// In one place it's convenient to use another register +// since the squaring function overwrites %rcx + +#define z_2_alt (2*NUMSIZE)(%rsi) + +// Pointer-offset pairs for temporaries, with some aliasing +// NSPACE is the total stack needed for these temporaries + +#define z1sq (NUMSIZE*0)(%rsp) +#define ww (NUMSIZE*0)(%rsp) + +#define yd (NUMSIZE*1)(%rsp) +#define y2a (NUMSIZE*1)(%rsp) + +#define x2a (NUMSIZE*2)(%rsp) +#define zzx2 (NUMSIZE*2)(%rsp) + +#define zz (NUMSIZE*3)(%rsp) +#define t1 (NUMSIZE*3)(%rsp) + +#define t2 (NUMSIZE*4)(%rsp) +#define x1a (NUMSIZE*4)(%rsp) +#define zzx1 (NUMSIZE*4)(%rsp) + +#define xd (NUMSIZE*5)(%rsp) +#define z2sq (NUMSIZE*5)(%rsp) + +#define y1a (NUMSIZE*6)(%rsp) + +// Temporaries for the actual input pointers + +#define input_x (NUMSIZE*7)(%rsp) +#define input_y (NUMSIZE*7+8)(%rsp) +#define input_z (NUMSIZE*7+16)(%rsp) + +#define NSPACE (NUMSIZE*7+24) + +// Corresponds exactly to bignum_montmul_p384 + +#define montmul_p384(P0,P1,P2) \ + movq P2, %rdx ; \ + xorl %r15d, %r15d ; \ + mulxq P1, %r8, %r9 ; \ + mulxq 0x8+P1, %rbx, %r10 ; \ + addq %rbx, %r9 ; \ + mulxq 0x10+P1, %rbx, %r11 ; \ + adcq %rbx, %r10 ; \ + mulxq 0x18+P1, %rbx, %r12 ; \ + adcq %rbx, %r11 ; \ + mulxq 0x20+P1, %rbx, %r13 ; \ + adcq %rbx, %r12 ; \ + mulxq 0x28+P1, %rbx, %r14 ; \ + adcq %rbx, %r13 ; \ + adcq %r15, %r14 ; \ + movq %r8, %rdx ; \ + shlq $0x20, %rdx ; \ + addq %r8, %rdx ; \ + xorl %ebp, %ebp ; \ + movq $0xffffffff00000001, %rax ; \ + mulxq %rax, %rbx, %rax ; \ + movl $0xffffffff, %ebx ; \ + mulxq %rbx, %r8, %rbx ; \ + adcq %r8, %rax ; \ + adcq %rdx, %rbx ; \ + adcl %ebp, %ebp ; \ + subq %rax, %r9 ; \ + sbbq %rbx, %r10 ; \ + sbbq %rbp, %r11 ; \ + sbbq $0x0, %r12 ; \ + sbbq $0x0, %r13 ; \ + sbbq $0x0, %rdx ; \ + addq %rdx, %r14 ; \ + adcq $0x0, %r15 ; \ + movq 0x8+P2, %rdx ; \ + xorl %r8d, %r8d ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + adoxq %r8, %r15 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcq %rax, %r14 ; \ + adcq %rbx, %r15 ; \ + adcq %r8, %r8 ; \ + movq %r9, %rdx ; \ + shlq $0x20, %rdx ; \ + addq %r9, %rdx ; \ + xorl %ebp, %ebp ; \ + movq $0xffffffff00000001, %rax ; \ + mulxq %rax, %rbx, %rax ; \ + movl $0xffffffff, %ebx ; \ + mulxq %rbx, %r9, %rbx ; \ + adcq %r9, %rax ; \ + adcq %rdx, %rbx ; \ + adcl %ebp, %ebp ; \ + subq %rax, %r10 ; \ + sbbq %rbx, %r11 ; \ + sbbq %rbp, %r12 ; \ + sbbq $0x0, %r13 ; \ + sbbq $0x0, %r14 ; \ + sbbq $0x0, %rdx ; \ + addq %rdx, %r15 ; \ + adcq $0x0, %r8 ; \ + movq 0x10+P2, %rdx ; \ + xorl %r9d, %r9d ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + adoxq %r9, %r8 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcq %rax, %r15 ; \ + adcq %rbx, %r8 ; \ + adcq %r9, %r9 ; \ + movq %r10, %rdx ; \ + shlq $0x20, %rdx ; \ + addq %r10, %rdx ; \ + xorl %ebp, %ebp ; \ + movq $0xffffffff00000001, %rax ; \ + mulxq %rax, %rbx, %rax ; \ + movl $0xffffffff, %ebx ; \ + mulxq %rbx, %r10, %rbx ; \ + adcq %r10, %rax ; \ + adcq %rdx, %rbx ; \ + adcl %ebp, %ebp ; \ + subq %rax, %r11 ; \ + sbbq %rbx, %r12 ; \ + sbbq %rbp, %r13 ; \ + sbbq $0x0, %r14 ; \ + sbbq $0x0, %r15 ; \ + sbbq $0x0, %rdx ; \ + addq %rdx, %r8 ; \ + adcq $0x0, %r9 ; \ + movq 0x18+P2, %rdx ; \ + xorl %r10d, %r10d ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rbx, %r8 ; \ + adoxq %r10, %r9 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcq %rax, %r8 ; \ + adcq %rbx, %r9 ; \ + adcq %r10, %r10 ; \ + movq %r11, %rdx ; \ + shlq $0x20, %rdx ; \ + addq %r11, %rdx ; \ + xorl %ebp, %ebp ; \ + movq $0xffffffff00000001, %rax ; \ + mulxq %rax, %rbx, %rax ; \ + movl $0xffffffff, %ebx ; \ + mulxq %rbx, %r11, %rbx ; \ + adcq %r11, %rax ; \ + adcq %rdx, %rbx ; \ + adcl %ebp, %ebp ; \ + subq %rax, %r12 ; \ + sbbq %rbx, %r13 ; \ + sbbq %rbp, %r14 ; \ + sbbq $0x0, %r15 ; \ + sbbq $0x0, %r8 ; \ + sbbq $0x0, %rdx ; \ + addq %rdx, %r9 ; \ + adcq $0x0, %r10 ; \ + movq 0x20+P2, %rdx ; \ + xorl %r11d, %r11d ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rbx, %r8 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r8 ; \ + adoxq %rbx, %r9 ; \ + adoxq %r11, %r10 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcq %rax, %r9 ; \ + adcq %rbx, %r10 ; \ + adcq %r11, %r11 ; \ + movq %r12, %rdx ; \ + shlq $0x20, %rdx ; \ + addq %r12, %rdx ; \ + xorl %ebp, %ebp ; \ + movq $0xffffffff00000001, %rax ; \ + mulxq %rax, %rbx, %rax ; \ + movl $0xffffffff, %ebx ; \ + mulxq %rbx, %r12, %rbx ; \ + adcq %r12, %rax ; \ + adcq %rdx, %rbx ; \ + adcl %ebp, %ebp ; \ + subq %rax, %r13 ; \ + sbbq %rbx, %r14 ; \ + sbbq %rbp, %r15 ; \ + sbbq $0x0, %r8 ; \ + sbbq $0x0, %r9 ; \ + sbbq $0x0, %rdx ; \ + addq %rdx, %r10 ; \ + adcq $0x0, %r11 ; \ + movq 0x28+P2, %rdx ; \ + xorl %r12d, %r12d ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rbx, %r8 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r8 ; \ + adoxq %rbx, %r9 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + adoxq %r12, %r11 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcq %rax, %r10 ; \ + adcq %rbx, %r11 ; \ + adcq %r12, %r12 ; \ + movq %r13, %rdx ; \ + shlq $0x20, %rdx ; \ + addq %r13, %rdx ; \ + xorl %ebp, %ebp ; \ + movq $0xffffffff00000001, %rax ; \ + mulxq %rax, %rbx, %rax ; \ + movl $0xffffffff, %ebx ; \ + mulxq %rbx, %r13, %rbx ; \ + adcq %r13, %rax ; \ + adcq %rdx, %rbx ; \ + adcl %ebp, %ebp ; \ + subq %rax, %r14 ; \ + sbbq %rbx, %r15 ; \ + sbbq %rbp, %r8 ; \ + sbbq $0x0, %r9 ; \ + sbbq $0x0, %r10 ; \ + sbbq $0x0, %rdx ; \ + addq %rdx, %r11 ; \ + adcq $0x0, %r12 ; \ + xorl %edx, %edx ; \ + xorl %ebp, %ebp ; \ + xorl %r13d, %r13d ; \ + movq $0xffffffff00000001, %rax ; \ + addq %r14, %rax ; \ + movl $0xffffffff, %ebx ; \ + adcq %r15, %rbx ; \ + movl $0x1, %ecx ; \ + adcq %r8, %rcx ; \ + adcq %r9, %rdx ; \ + adcq %r10, %rbp ; \ + adcq %r11, %r13 ; \ + adcq $0x0, %r12 ; \ + cmovne %rax, %r14 ; \ + cmovne %rbx, %r15 ; \ + cmovne %rcx, %r8 ; \ + cmovne %rdx, %r9 ; \ + cmovne %rbp, %r10 ; \ + cmovne %r13, %r11 ; \ + movq %r14, P0 ; \ + movq %r15, 0x8+P0 ; \ + movq %r8, 0x10+P0 ; \ + movq %r9, 0x18+P0 ; \ + movq %r10, 0x20+P0 ; \ + movq %r11, 0x28+P0 + +// Corresponds exactly to bignum_montsqr_p384 + +#define montsqr_p384(P0,P1) \ + movq P1, %rdx ; \ + mulxq 0x8+P1, %r9, %r10 ; \ + mulxq 0x18+P1, %r11, %r12 ; \ + mulxq 0x28+P1, %r13, %r14 ; \ + movq 0x18+P1, %rdx ; \ + mulxq 0x20+P1, %r15, %rcx ; \ + xorl %ebp, %ebp ; \ + movq 0x10+P1, %rdx ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + movq 0x8+P1, %rdx ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + adcxq %rbp, %r15 ; \ + adoxq %rbp, %rcx ; \ + adcq %rbp, %rcx ; \ + xorl %ebp, %ebp ; \ + movq 0x20+P1, %rdx ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + movq 0x10+P1, %rdx ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + mulxq 0x28+P1, %rax, %rdx ; \ + adcxq %rax, %r15 ; \ + adoxq %rdx, %rcx ; \ + movq 0x28+P1, %rdx ; \ + mulxq 0x20+P1, %rbx, %rbp ; \ + mulxq 0x18+P1, %rax, %rdx ; \ + adcxq %rax, %rcx ; \ + adoxq %rdx, %rbx ; \ + movl $0x0, %eax ; \ + adcxq %rax, %rbx ; \ + adoxq %rax, %rbp ; \ + adcq %rax, %rbp ; \ + xorq %rax, %rax ; \ + movq P1, %rdx ; \ + mulxq P1, %r8, %rax ; \ + adcxq %r9, %r9 ; \ + adoxq %rax, %r9 ; \ + movq 0x8+P1, %rdx ; \ + mulxq %rdx, %rax, %rdx ; \ + adcxq %r10, %r10 ; \ + adoxq %rax, %r10 ; \ + adcxq %r11, %r11 ; \ + adoxq %rdx, %r11 ; \ + movq 0x10+P1, %rdx ; \ + mulxq %rdx, %rax, %rdx ; \ + adcxq %r12, %r12 ; \ + adoxq %rax, %r12 ; \ + adcxq %r13, %r13 ; \ + adoxq %rdx, %r13 ; \ + movq 0x18+P1, %rdx ; \ + mulxq %rdx, %rax, %rdx ; \ + adcxq %r14, %r14 ; \ + adoxq %rax, %r14 ; \ + adcxq %r15, %r15 ; \ + adoxq %rdx, %r15 ; \ + movq 0x20+P1, %rdx ; \ + mulxq %rdx, %rax, %rdx ; \ + adcxq %rcx, %rcx ; \ + adoxq %rax, %rcx ; \ + adcxq %rbx, %rbx ; \ + adoxq %rdx, %rbx ; \ + movq 0x28+P1, %rdx ; \ + mulxq %rdx, %rax, %rsi ; \ + adcxq %rbp, %rbp ; \ + adoxq %rax, %rbp ; \ + movl $0x0, %eax ; \ + adcxq %rax, %rsi ; \ + adoxq %rax, %rsi ; \ + movq %rbx, P0 ; \ + movq %r8, %rdx ; \ + shlq $0x20, %rdx ; \ + addq %r8, %rdx ; \ + movq $0xffffffff00000001, %rax ; \ + mulxq %rax, %r8, %rax ; \ + movl $0xffffffff, %ebx ; \ + mulxq %rbx, %rbx, %r8 ; \ + addq %rbx, %rax ; \ + adcq %rdx, %r8 ; \ + movl $0x0, %ebx ; \ + adcq %rbx, %rbx ; \ + subq %rax, %r9 ; \ + sbbq %r8, %r10 ; \ + sbbq %rbx, %r11 ; \ + sbbq $0x0, %r12 ; \ + sbbq $0x0, %r13 ; \ + movq %rdx, %r8 ; \ + sbbq $0x0, %r8 ; \ + movq %r9, %rdx ; \ + shlq $0x20, %rdx ; \ + addq %r9, %rdx ; \ + movq $0xffffffff00000001, %rax ; \ + mulxq %rax, %r9, %rax ; \ + movl $0xffffffff, %ebx ; \ + mulxq %rbx, %rbx, %r9 ; \ + addq %rbx, %rax ; \ + adcq %rdx, %r9 ; \ + movl $0x0, %ebx ; \ + adcq %rbx, %rbx ; \ + subq %rax, %r10 ; \ + sbbq %r9, %r11 ; \ + sbbq %rbx, %r12 ; \ + sbbq $0x0, %r13 ; \ + sbbq $0x0, %r8 ; \ + movq %rdx, %r9 ; \ + sbbq $0x0, %r9 ; \ + movq %r10, %rdx ; \ + shlq $0x20, %rdx ; \ + addq %r10, %rdx ; \ + movq $0xffffffff00000001, %rax ; \ + mulxq %rax, %r10, %rax ; \ + movl $0xffffffff, %ebx ; \ + mulxq %rbx, %rbx, %r10 ; \ + addq %rbx, %rax ; \ + adcq %rdx, %r10 ; \ + movl $0x0, %ebx ; \ + adcq %rbx, %rbx ; \ + subq %rax, %r11 ; \ + sbbq %r10, %r12 ; \ + sbbq %rbx, %r13 ; \ + sbbq $0x0, %r8 ; \ + sbbq $0x0, %r9 ; \ + movq %rdx, %r10 ; \ + sbbq $0x0, %r10 ; \ + movq %r11, %rdx ; \ + shlq $0x20, %rdx ; \ + addq %r11, %rdx ; \ + movq $0xffffffff00000001, %rax ; \ + mulxq %rax, %r11, %rax ; \ + movl $0xffffffff, %ebx ; \ + mulxq %rbx, %rbx, %r11 ; \ + addq %rbx, %rax ; \ + adcq %rdx, %r11 ; \ + movl $0x0, %ebx ; \ + adcq %rbx, %rbx ; \ + subq %rax, %r12 ; \ + sbbq %r11, %r13 ; \ + sbbq %rbx, %r8 ; \ + sbbq $0x0, %r9 ; \ + sbbq $0x0, %r10 ; \ + movq %rdx, %r11 ; \ + sbbq $0x0, %r11 ; \ + movq %r12, %rdx ; \ + shlq $0x20, %rdx ; \ + addq %r12, %rdx ; \ + movq $0xffffffff00000001, %rax ; \ + mulxq %rax, %r12, %rax ; \ + movl $0xffffffff, %ebx ; \ + mulxq %rbx, %rbx, %r12 ; \ + addq %rbx, %rax ; \ + adcq %rdx, %r12 ; \ + movl $0x0, %ebx ; \ + adcq %rbx, %rbx ; \ + subq %rax, %r13 ; \ + sbbq %r12, %r8 ; \ + sbbq %rbx, %r9 ; \ + sbbq $0x0, %r10 ; \ + sbbq $0x0, %r11 ; \ + movq %rdx, %r12 ; \ + sbbq $0x0, %r12 ; \ + movq %r13, %rdx ; \ + shlq $0x20, %rdx ; \ + addq %r13, %rdx ; \ + movq $0xffffffff00000001, %rax ; \ + mulxq %rax, %r13, %rax ; \ + movl $0xffffffff, %ebx ; \ + mulxq %rbx, %rbx, %r13 ; \ + addq %rbx, %rax ; \ + adcq %rdx, %r13 ; \ + movl $0x0, %ebx ; \ + adcq %rbx, %rbx ; \ + subq %rax, %r8 ; \ + sbbq %r13, %r9 ; \ + sbbq %rbx, %r10 ; \ + sbbq $0x0, %r11 ; \ + sbbq $0x0, %r12 ; \ + movq %rdx, %r13 ; \ + sbbq $0x0, %r13 ; \ + movq P0, %rbx ; \ + addq %r8, %r14 ; \ + adcq %r9, %r15 ; \ + adcq %r10, %rcx ; \ + adcq %r11, %rbx ; \ + adcq %r12, %rbp ; \ + adcq %r13, %rsi ; \ + movl $0x0, %r8d ; \ + adcq %r8, %r8 ; \ + xorq %r11, %r11 ; \ + xorq %r12, %r12 ; \ + xorq %r13, %r13 ; \ + movq $0xffffffff00000001, %rax ; \ + addq %r14, %rax ; \ + movl $0xffffffff, %r9d ; \ + adcq %r15, %r9 ; \ + movl $0x1, %r10d ; \ + adcq %rcx, %r10 ; \ + adcq %rbx, %r11 ; \ + adcq %rbp, %r12 ; \ + adcq %rsi, %r13 ; \ + adcq $0x0, %r8 ; \ + cmovne %rax, %r14 ; \ + cmovne %r9, %r15 ; \ + cmovne %r10, %rcx ; \ + cmovne %r11, %rbx ; \ + cmovne %r12, %rbp ; \ + cmovne %r13, %rsi ; \ + movq %r14, P0 ; \ + movq %r15, 0x8+P0 ; \ + movq %rcx, 0x10+P0 ; \ + movq %rbx, 0x18+P0 ; \ + movq %rbp, 0x20+P0 ; \ + movq %rsi, 0x28+P0 + +// Almost-Montgomery variant which we use when an input to other muls +// with the other argument fully reduced (which is always safe). + +#define amontsqr_p384(P0,P1) \ + movq P1, %rdx ; \ + mulxq 0x8+P1, %r9, %r10 ; \ + mulxq 0x18+P1, %r11, %r12 ; \ + mulxq 0x28+P1, %r13, %r14 ; \ + movq 0x18+P1, %rdx ; \ + mulxq 0x20+P1, %r15, %rcx ; \ + xorl %ebp, %ebp ; \ + movq 0x10+P1, %rdx ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + movq 0x8+P1, %rdx ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + adcxq %rbp, %r15 ; \ + adoxq %rbp, %rcx ; \ + adcq %rbp, %rcx ; \ + xorl %ebp, %ebp ; \ + movq 0x20+P1, %rdx ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + movq 0x10+P1, %rdx ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + mulxq 0x28+P1, %rax, %rdx ; \ + adcxq %rax, %r15 ; \ + adoxq %rdx, %rcx ; \ + movq 0x28+P1, %rdx ; \ + mulxq 0x20+P1, %rbx, %rbp ; \ + mulxq 0x18+P1, %rax, %rdx ; \ + adcxq %rax, %rcx ; \ + adoxq %rdx, %rbx ; \ + movl $0x0, %eax ; \ + adcxq %rax, %rbx ; \ + adoxq %rax, %rbp ; \ + adcq %rax, %rbp ; \ + xorq %rax, %rax ; \ + movq P1, %rdx ; \ + mulxq P1, %r8, %rax ; \ + adcxq %r9, %r9 ; \ + adoxq %rax, %r9 ; \ + movq 0x8+P1, %rdx ; \ + mulxq %rdx, %rax, %rdx ; \ + adcxq %r10, %r10 ; \ + adoxq %rax, %r10 ; \ + adcxq %r11, %r11 ; \ + adoxq %rdx, %r11 ; \ + movq 0x10+P1, %rdx ; \ + mulxq %rdx, %rax, %rdx ; \ + adcxq %r12, %r12 ; \ + adoxq %rax, %r12 ; \ + adcxq %r13, %r13 ; \ + adoxq %rdx, %r13 ; \ + movq 0x18+P1, %rdx ; \ + mulxq %rdx, %rax, %rdx ; \ + adcxq %r14, %r14 ; \ + adoxq %rax, %r14 ; \ + adcxq %r15, %r15 ; \ + adoxq %rdx, %r15 ; \ + movq 0x20+P1, %rdx ; \ + mulxq %rdx, %rax, %rdx ; \ + adcxq %rcx, %rcx ; \ + adoxq %rax, %rcx ; \ + adcxq %rbx, %rbx ; \ + adoxq %rdx, %rbx ; \ + movq 0x28+P1, %rdx ; \ + mulxq %rdx, %rax, %rsi ; \ + adcxq %rbp, %rbp ; \ + adoxq %rax, %rbp ; \ + movl $0x0, %eax ; \ + adcxq %rax, %rsi ; \ + adoxq %rax, %rsi ; \ + movq %rbx, P0 ; \ + movq %r8, %rdx ; \ + shlq $0x20, %rdx ; \ + addq %r8, %rdx ; \ + movq $0xffffffff00000001, %rax ; \ + mulxq %rax, %r8, %rax ; \ + movl $0xffffffff, %ebx ; \ + mulxq %rbx, %rbx, %r8 ; \ + addq %rbx, %rax ; \ + adcq %rdx, %r8 ; \ + movl $0x0, %ebx ; \ + adcq %rbx, %rbx ; \ + subq %rax, %r9 ; \ + sbbq %r8, %r10 ; \ + sbbq %rbx, %r11 ; \ + sbbq $0x0, %r12 ; \ + sbbq $0x0, %r13 ; \ + movq %rdx, %r8 ; \ + sbbq $0x0, %r8 ; \ + movq %r9, %rdx ; \ + shlq $0x20, %rdx ; \ + addq %r9, %rdx ; \ + movq $0xffffffff00000001, %rax ; \ + mulxq %rax, %r9, %rax ; \ + movl $0xffffffff, %ebx ; \ + mulxq %rbx, %rbx, %r9 ; \ + addq %rbx, %rax ; \ + adcq %rdx, %r9 ; \ + movl $0x0, %ebx ; \ + adcq %rbx, %rbx ; \ + subq %rax, %r10 ; \ + sbbq %r9, %r11 ; \ + sbbq %rbx, %r12 ; \ + sbbq $0x0, %r13 ; \ + sbbq $0x0, %r8 ; \ + movq %rdx, %r9 ; \ + sbbq $0x0, %r9 ; \ + movq %r10, %rdx ; \ + shlq $0x20, %rdx ; \ + addq %r10, %rdx ; \ + movq $0xffffffff00000001, %rax ; \ + mulxq %rax, %r10, %rax ; \ + movl $0xffffffff, %ebx ; \ + mulxq %rbx, %rbx, %r10 ; \ + addq %rbx, %rax ; \ + adcq %rdx, %r10 ; \ + movl $0x0, %ebx ; \ + adcq %rbx, %rbx ; \ + subq %rax, %r11 ; \ + sbbq %r10, %r12 ; \ + sbbq %rbx, %r13 ; \ + sbbq $0x0, %r8 ; \ + sbbq $0x0, %r9 ; \ + movq %rdx, %r10 ; \ + sbbq $0x0, %r10 ; \ + movq %r11, %rdx ; \ + shlq $0x20, %rdx ; \ + addq %r11, %rdx ; \ + movq $0xffffffff00000001, %rax ; \ + mulxq %rax, %r11, %rax ; \ + movl $0xffffffff, %ebx ; \ + mulxq %rbx, %rbx, %r11 ; \ + addq %rbx, %rax ; \ + adcq %rdx, %r11 ; \ + movl $0x0, %ebx ; \ + adcq %rbx, %rbx ; \ + subq %rax, %r12 ; \ + sbbq %r11, %r13 ; \ + sbbq %rbx, %r8 ; \ + sbbq $0x0, %r9 ; \ + sbbq $0x0, %r10 ; \ + movq %rdx, %r11 ; \ + sbbq $0x0, %r11 ; \ + movq %r12, %rdx ; \ + shlq $0x20, %rdx ; \ + addq %r12, %rdx ; \ + movq $0xffffffff00000001, %rax ; \ + mulxq %rax, %r12, %rax ; \ + movl $0xffffffff, %ebx ; \ + mulxq %rbx, %rbx, %r12 ; \ + addq %rbx, %rax ; \ + adcq %rdx, %r12 ; \ + movl $0x0, %ebx ; \ + adcq %rbx, %rbx ; \ + subq %rax, %r13 ; \ + sbbq %r12, %r8 ; \ + sbbq %rbx, %r9 ; \ + sbbq $0x0, %r10 ; \ + sbbq $0x0, %r11 ; \ + movq %rdx, %r12 ; \ + sbbq $0x0, %r12 ; \ + movq %r13, %rdx ; \ + shlq $0x20, %rdx ; \ + addq %r13, %rdx ; \ + movq $0xffffffff00000001, %rax ; \ + mulxq %rax, %r13, %rax ; \ + movl $0xffffffff, %ebx ; \ + mulxq %rbx, %rbx, %r13 ; \ + addq %rbx, %rax ; \ + adcq %rdx, %r13 ; \ + movl $0x0, %ebx ; \ + adcq %rbx, %rbx ; \ + subq %rax, %r8 ; \ + sbbq %r13, %r9 ; \ + sbbq %rbx, %r10 ; \ + sbbq $0x0, %r11 ; \ + sbbq $0x0, %r12 ; \ + movq %rdx, %r13 ; \ + sbbq $0x0, %r13 ; \ + movq P0, %rbx ; \ + addq %r8, %r14 ; \ + adcq %r9, %r15 ; \ + adcq %r10, %rcx ; \ + adcq %r11, %rbx ; \ + adcq %r12, %rbp ; \ + adcq %r13, %rsi ; \ + movl $0x0, %r8d ; \ + movq $0xffffffff00000001, %rax ; \ + movl $0xffffffff, %r9d ; \ + movl $0x1, %r10d ; \ + cmovnc %r8, %rax ; \ + cmovnc %r8, %r9 ; \ + cmovnc %r8, %r10 ; \ + addq %rax, %r14 ; \ + adcq %r9, %r15 ; \ + adcq %r10, %rcx ; \ + adcq %r8, %rbx ; \ + adcq %r8, %rbp ; \ + adcq %r8, %rsi ; \ + movq %r14, P0 ; \ + movq %r15, 0x8+P0 ; \ + movq %rcx, 0x10+P0 ; \ + movq %rbx, 0x18+P0 ; \ + movq %rbp, 0x20+P0 ; \ + movq %rsi, 0x28+P0 + +// Corresponds exactly to bignum_sub_p384 + +#define sub_p384(P0,P1,P2) \ + movq P1, %rax ; \ + subq P2, %rax ; \ + movq 0x8+P1, %rdx ; \ + sbbq 0x8+P2, %rdx ; \ + movq 0x10+P1, %r8 ; \ + sbbq 0x10+P2, %r8 ; \ + movq 0x18+P1, %r9 ; \ + sbbq 0x18+P2, %r9 ; \ + movq 0x20+P1, %r10 ; \ + sbbq 0x20+P2, %r10 ; \ + movq 0x28+P1, %r11 ; \ + sbbq 0x28+P2, %r11 ; \ + sbbq %rcx, %rcx ; \ + movl $0xffffffff, %esi ; \ + andq %rsi, %rcx ; \ + xorq %rsi, %rsi ; \ + subq %rcx, %rsi ; \ + subq %rsi, %rax ; \ + movq %rax, P0 ; \ + sbbq %rcx, %rdx ; \ + movq %rdx, 0x8+P0 ; \ + sbbq %rax, %rax ; \ + andq %rsi, %rcx ; \ + negq %rax; \ + sbbq %rcx, %r8 ; \ + movq %r8, 0x10+P0 ; \ + sbbq $0x0, %r9 ; \ + movq %r9, 0x18+P0 ; \ + sbbq $0x0, %r10 ; \ + movq %r10, 0x20+P0 ; \ + sbbq $0x0, %r11 ; \ + movq %r11, 0x28+P0 + +S2N_BN_SYMBOL(p384_montjadd): + +#if WINDOWS_ABI + pushq %rdi + pushq %rsi + movq %rcx, %rdi + movq %rdx, %rsi + movq %r8, %rdx +#endif + +// Save registers and make room on stack for temporary variables +// Put the input arguments in non-volatile places on the stack + + pushq %rbx + pushq %rbp + pushq %r12 + pushq %r13 + pushq %r14 + pushq %r15 + + subq $NSPACE, %rsp + + movq %rdi, input_z + movq %rsi, input_x + movq %rdx, input_y + +// Main code, just a sequence of basic field operations +// 8 * multiply + 3 * square + 7 * subtract + + amontsqr_p384(z1sq,z_1) + movq input_y, %rsi + amontsqr_p384(z2sq,z_2_alt) + + movq input_x, %rsi + movq input_y, %rcx + montmul_p384(y1a,z_2,y_1) + movq input_x, %rsi + movq input_y, %rcx + montmul_p384(y2a,z_1,y_2) + + movq input_y, %rcx + montmul_p384(x2a,z1sq,x_2) + movq input_x, %rsi + montmul_p384(x1a,z2sq,x_1) + montmul_p384(y2a,z1sq,y2a) + montmul_p384(y1a,z2sq,y1a) + + sub_p384(xd,x2a,x1a) + sub_p384(yd,y2a,y1a) + + amontsqr_p384(zz,xd) + montsqr_p384(ww,yd) + + montmul_p384(zzx1,zz,x1a) + montmul_p384(zzx2,zz,x2a) + + movq input_z, %rdi + sub_p384(x_3,ww,zzx1) + sub_p384(t1,zzx2,zzx1) + + movq input_x, %rsi + montmul_p384(xd,xd,z_1) + + movq input_z, %rdi + sub_p384(x_3,x_3,zzx2) + + movq input_z, %rdi + sub_p384(t2,zzx1,x_3) + + montmul_p384(t1,t1,y1a) + + movq input_z, %rdi + movq input_y, %rcx + montmul_p384(z_3,xd,z_2) + montmul_p384(t2,yd,t2) + + movq input_z, %rdi + sub_p384(y_3,t2,t1) + +// Restore stack and registers + + addq $NSPACE, %rsp + popq %r15 + popq %r14 + popq %r13 + popq %r12 + popq %rbp + popq %rbx + +#if WINDOWS_ABI + popq %rsi + popq %rdi +#endif + ret + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack, "", %progbits +#endif diff --git a/x86_att/p384/p384_montjdouble.S b/x86_att/p384/p384_montjdouble.S new file mode 100644 index 0000000000..d7de785797 --- /dev/null +++ b/x86_att/p384/p384_montjdouble.S @@ -0,0 +1,1014 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +// ---------------------------------------------------------------------------- +// Point doubling on NIST curve P-384 in Montgomery-Jacobian coordinates +// +// extern void p384_montjdouble +// (uint64_t p3[static 18],uint64_t p1[static 18]); +// +// Does p3 := 2 * p1 where all points are regarded as Jacobian triples with +// each coordinate in the Montgomery domain, i.e. x' = (2^384 * x) mod p_384. +// A Jacobian triple (x',y',z') represents affine point (x/z^2,y/z^3). +// +// Standard x86-64 ABI: RDI = p3, RSI = p1 +// Microsoft x64 ABI: RCX = p3, RDX = p1 +// ---------------------------------------------------------------------------- +#include "_internal_s2n_bignum.h" + + + S2N_BN_SYM_VISIBILITY_DIRECTIVE(p384_montjdouble) + S2N_BN_SYM_PRIVACY_DIRECTIVE(p384_montjdouble) + .text + .balign 4 + +// Size of individual field elements + +#define NUMSIZE 48 + +// Pointer-offset pairs for inputs and outputs +// These assume %rdi = p3, %rsi = p1. The latter stays true +// but montsqr below modifies %rdi as well. Thus, we need +// to save %rdi and restore it before the writes to outputs. + +#define x_1 0(%rsi) +#define y_1 NUMSIZE(%rsi) +#define z_1 (2*NUMSIZE)(%rsi) + +#define x_3 0(%rdi) +#define y_3 NUMSIZE(%rdi) +#define z_3 (2*NUMSIZE)(%rdi) + +// Pointer-offset pairs for temporaries, with some aliasing +// NSPACE is the total stack needed for these temporaries + +#define z2 (NUMSIZE*0)(%rsp) +#define y2 (NUMSIZE*1)(%rsp) +#define x2p (NUMSIZE*2)(%rsp) +#define xy2 (NUMSIZE*3)(%rsp) + +#define y4 (NUMSIZE*4)(%rsp) +#define t2 (NUMSIZE*4)(%rsp) + +#define dx2 (NUMSIZE*5)(%rsp) +#define t1 (NUMSIZE*5)(%rsp) + +#define d (NUMSIZE*6)(%rsp) +#define x4p (NUMSIZE*6)(%rsp) + +// Safe place for pointer to the output + +#define input_z (NUMSIZE*7)(%rsp) + +#define NSPACE (NUMSIZE*7+8) + +// Corresponds exactly to bignum_montmul_p384 + +#define montmul_p384(P0,P1,P2) \ + movq P2, %rdx ; \ + xorl %r15d, %r15d ; \ + mulxq P1, %r8, %r9 ; \ + mulxq 0x8+P1, %rbx, %r10 ; \ + addq %rbx, %r9 ; \ + mulxq 0x10+P1, %rbx, %r11 ; \ + adcq %rbx, %r10 ; \ + mulxq 0x18+P1, %rbx, %r12 ; \ + adcq %rbx, %r11 ; \ + mulxq 0x20+P1, %rbx, %r13 ; \ + adcq %rbx, %r12 ; \ + mulxq 0x28+P1, %rbx, %r14 ; \ + adcq %rbx, %r13 ; \ + adcq %r15, %r14 ; \ + movq %r8, %rdx ; \ + shlq $0x20, %rdx ; \ + addq %r8, %rdx ; \ + xorl %ebp, %ebp ; \ + movq $0xffffffff00000001, %rax ; \ + mulxq %rax, %rbx, %rax ; \ + movl $0xffffffff, %ebx ; \ + mulxq %rbx, %r8, %rbx ; \ + adcq %r8, %rax ; \ + adcq %rdx, %rbx ; \ + adcl %ebp, %ebp ; \ + subq %rax, %r9 ; \ + sbbq %rbx, %r10 ; \ + sbbq %rbp, %r11 ; \ + sbbq $0x0, %r12 ; \ + sbbq $0x0, %r13 ; \ + sbbq $0x0, %rdx ; \ + addq %rdx, %r14 ; \ + adcq $0x0, %r15 ; \ + movq 0x8+P2, %rdx ; \ + xorl %r8d, %r8d ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + adoxq %r8, %r15 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcq %rax, %r14 ; \ + adcq %rbx, %r15 ; \ + adcq %r8, %r8 ; \ + movq %r9, %rdx ; \ + shlq $0x20, %rdx ; \ + addq %r9, %rdx ; \ + xorl %ebp, %ebp ; \ + movq $0xffffffff00000001, %rax ; \ + mulxq %rax, %rbx, %rax ; \ + movl $0xffffffff, %ebx ; \ + mulxq %rbx, %r9, %rbx ; \ + adcq %r9, %rax ; \ + adcq %rdx, %rbx ; \ + adcl %ebp, %ebp ; \ + subq %rax, %r10 ; \ + sbbq %rbx, %r11 ; \ + sbbq %rbp, %r12 ; \ + sbbq $0x0, %r13 ; \ + sbbq $0x0, %r14 ; \ + sbbq $0x0, %rdx ; \ + addq %rdx, %r15 ; \ + adcq $0x0, %r8 ; \ + movq 0x10+P2, %rdx ; \ + xorl %r9d, %r9d ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + adoxq %r9, %r8 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcq %rax, %r15 ; \ + adcq %rbx, %r8 ; \ + adcq %r9, %r9 ; \ + movq %r10, %rdx ; \ + shlq $0x20, %rdx ; \ + addq %r10, %rdx ; \ + xorl %ebp, %ebp ; \ + movq $0xffffffff00000001, %rax ; \ + mulxq %rax, %rbx, %rax ; \ + movl $0xffffffff, %ebx ; \ + mulxq %rbx, %r10, %rbx ; \ + adcq %r10, %rax ; \ + adcq %rdx, %rbx ; \ + adcl %ebp, %ebp ; \ + subq %rax, %r11 ; \ + sbbq %rbx, %r12 ; \ + sbbq %rbp, %r13 ; \ + sbbq $0x0, %r14 ; \ + sbbq $0x0, %r15 ; \ + sbbq $0x0, %rdx ; \ + addq %rdx, %r8 ; \ + adcq $0x0, %r9 ; \ + movq 0x18+P2, %rdx ; \ + xorl %r10d, %r10d ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rbx, %r8 ; \ + adoxq %r10, %r9 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcq %rax, %r8 ; \ + adcq %rbx, %r9 ; \ + adcq %r10, %r10 ; \ + movq %r11, %rdx ; \ + shlq $0x20, %rdx ; \ + addq %r11, %rdx ; \ + xorl %ebp, %ebp ; \ + movq $0xffffffff00000001, %rax ; \ + mulxq %rax, %rbx, %rax ; \ + movl $0xffffffff, %ebx ; \ + mulxq %rbx, %r11, %rbx ; \ + adcq %r11, %rax ; \ + adcq %rdx, %rbx ; \ + adcl %ebp, %ebp ; \ + subq %rax, %r12 ; \ + sbbq %rbx, %r13 ; \ + sbbq %rbp, %r14 ; \ + sbbq $0x0, %r15 ; \ + sbbq $0x0, %r8 ; \ + sbbq $0x0, %rdx ; \ + addq %rdx, %r9 ; \ + adcq $0x0, %r10 ; \ + movq 0x20+P2, %rdx ; \ + xorl %r11d, %r11d ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rbx, %r8 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r8 ; \ + adoxq %rbx, %r9 ; \ + adoxq %r11, %r10 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcq %rax, %r9 ; \ + adcq %rbx, %r10 ; \ + adcq %r11, %r11 ; \ + movq %r12, %rdx ; \ + shlq $0x20, %rdx ; \ + addq %r12, %rdx ; \ + xorl %ebp, %ebp ; \ + movq $0xffffffff00000001, %rax ; \ + mulxq %rax, %rbx, %rax ; \ + movl $0xffffffff, %ebx ; \ + mulxq %rbx, %r12, %rbx ; \ + adcq %r12, %rax ; \ + adcq %rdx, %rbx ; \ + adcl %ebp, %ebp ; \ + subq %rax, %r13 ; \ + sbbq %rbx, %r14 ; \ + sbbq %rbp, %r15 ; \ + sbbq $0x0, %r8 ; \ + sbbq $0x0, %r9 ; \ + sbbq $0x0, %rdx ; \ + addq %rdx, %r10 ; \ + adcq $0x0, %r11 ; \ + movq 0x28+P2, %rdx ; \ + xorl %r12d, %r12d ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rbx, %r8 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r8 ; \ + adoxq %rbx, %r9 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + adoxq %r12, %r11 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcq %rax, %r10 ; \ + adcq %rbx, %r11 ; \ + adcq %r12, %r12 ; \ + movq %r13, %rdx ; \ + shlq $0x20, %rdx ; \ + addq %r13, %rdx ; \ + xorl %ebp, %ebp ; \ + movq $0xffffffff00000001, %rax ; \ + mulxq %rax, %rbx, %rax ; \ + movl $0xffffffff, %ebx ; \ + mulxq %rbx, %r13, %rbx ; \ + adcq %r13, %rax ; \ + adcq %rdx, %rbx ; \ + adcl %ebp, %ebp ; \ + subq %rax, %r14 ; \ + sbbq %rbx, %r15 ; \ + sbbq %rbp, %r8 ; \ + sbbq $0x0, %r9 ; \ + sbbq $0x0, %r10 ; \ + sbbq $0x0, %rdx ; \ + addq %rdx, %r11 ; \ + adcq $0x0, %r12 ; \ + xorl %edx, %edx ; \ + xorl %ebp, %ebp ; \ + xorl %r13d, %r13d ; \ + movq $0xffffffff00000001, %rax ; \ + addq %r14, %rax ; \ + movl $0xffffffff, %ebx ; \ + adcq %r15, %rbx ; \ + movl $0x1, %ecx ; \ + adcq %r8, %rcx ; \ + adcq %r9, %rdx ; \ + adcq %r10, %rbp ; \ + adcq %r11, %r13 ; \ + adcq $0x0, %r12 ; \ + cmovne %rax, %r14 ; \ + cmovne %rbx, %r15 ; \ + cmovne %rcx, %r8 ; \ + cmovne %rdx, %r9 ; \ + cmovne %rbp, %r10 ; \ + cmovne %r13, %r11 ; \ + movq %r14, P0 ; \ + movq %r15, 0x8+P0 ; \ + movq %r8, 0x10+P0 ; \ + movq %r9, 0x18+P0 ; \ + movq %r10, 0x20+P0 ; \ + movq %r11, 0x28+P0 + +// Corresponds exactly to bignum_montsqr_p384 + +#define montsqr_p384(P0,P1) \ + movq P1, %rdx ; \ + mulxq 0x8+P1, %r9, %r10 ; \ + mulxq 0x18+P1, %r11, %r12 ; \ + mulxq 0x28+P1, %r13, %r14 ; \ + movq 0x18+P1, %rdx ; \ + mulxq 0x20+P1, %r15, %rcx ; \ + xorl %ebp, %ebp ; \ + movq 0x10+P1, %rdx ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + movq 0x8+P1, %rdx ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + adcxq %rbp, %r15 ; \ + adoxq %rbp, %rcx ; \ + adcq %rbp, %rcx ; \ + xorl %ebp, %ebp ; \ + movq 0x20+P1, %rdx ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + movq 0x10+P1, %rdx ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + mulxq 0x28+P1, %rax, %rdx ; \ + adcxq %rax, %r15 ; \ + adoxq %rdx, %rcx ; \ + movq 0x28+P1, %rdx ; \ + mulxq 0x20+P1, %rbx, %rbp ; \ + mulxq 0x18+P1, %rax, %rdx ; \ + adcxq %rax, %rcx ; \ + adoxq %rdx, %rbx ; \ + movl $0x0, %eax ; \ + adcxq %rax, %rbx ; \ + adoxq %rax, %rbp ; \ + adcq %rax, %rbp ; \ + xorq %rax, %rax ; \ + movq P1, %rdx ; \ + mulxq P1, %r8, %rax ; \ + adcxq %r9, %r9 ; \ + adoxq %rax, %r9 ; \ + movq 0x8+P1, %rdx ; \ + mulxq %rdx, %rax, %rdx ; \ + adcxq %r10, %r10 ; \ + adoxq %rax, %r10 ; \ + adcxq %r11, %r11 ; \ + adoxq %rdx, %r11 ; \ + movq 0x10+P1, %rdx ; \ + mulxq %rdx, %rax, %rdx ; \ + adcxq %r12, %r12 ; \ + adoxq %rax, %r12 ; \ + adcxq %r13, %r13 ; \ + adoxq %rdx, %r13 ; \ + movq 0x18+P1, %rdx ; \ + mulxq %rdx, %rax, %rdx ; \ + adcxq %r14, %r14 ; \ + adoxq %rax, %r14 ; \ + adcxq %r15, %r15 ; \ + adoxq %rdx, %r15 ; \ + movq 0x20+P1, %rdx ; \ + mulxq %rdx, %rax, %rdx ; \ + adcxq %rcx, %rcx ; \ + adoxq %rax, %rcx ; \ + adcxq %rbx, %rbx ; \ + adoxq %rdx, %rbx ; \ + movq 0x28+P1, %rdx ; \ + mulxq %rdx, %rax, %rdi ; \ + adcxq %rbp, %rbp ; \ + adoxq %rax, %rbp ; \ + movl $0x0, %eax ; \ + adcxq %rax, %rdi ; \ + adoxq %rax, %rdi ; \ + movq %rbx, P0 ; \ + movq %r8, %rdx ; \ + shlq $0x20, %rdx ; \ + addq %r8, %rdx ; \ + movq $0xffffffff00000001, %rax ; \ + mulxq %rax, %r8, %rax ; \ + movl $0xffffffff, %ebx ; \ + mulxq %rbx, %rbx, %r8 ; \ + addq %rbx, %rax ; \ + adcq %rdx, %r8 ; \ + movl $0x0, %ebx ; \ + adcq %rbx, %rbx ; \ + subq %rax, %r9 ; \ + sbbq %r8, %r10 ; \ + sbbq %rbx, %r11 ; \ + sbbq $0x0, %r12 ; \ + sbbq $0x0, %r13 ; \ + movq %rdx, %r8 ; \ + sbbq $0x0, %r8 ; \ + movq %r9, %rdx ; \ + shlq $0x20, %rdx ; \ + addq %r9, %rdx ; \ + movq $0xffffffff00000001, %rax ; \ + mulxq %rax, %r9, %rax ; \ + movl $0xffffffff, %ebx ; \ + mulxq %rbx, %rbx, %r9 ; \ + addq %rbx, %rax ; \ + adcq %rdx, %r9 ; \ + movl $0x0, %ebx ; \ + adcq %rbx, %rbx ; \ + subq %rax, %r10 ; \ + sbbq %r9, %r11 ; \ + sbbq %rbx, %r12 ; \ + sbbq $0x0, %r13 ; \ + sbbq $0x0, %r8 ; \ + movq %rdx, %r9 ; \ + sbbq $0x0, %r9 ; \ + movq %r10, %rdx ; \ + shlq $0x20, %rdx ; \ + addq %r10, %rdx ; \ + movq $0xffffffff00000001, %rax ; \ + mulxq %rax, %r10, %rax ; \ + movl $0xffffffff, %ebx ; \ + mulxq %rbx, %rbx, %r10 ; \ + addq %rbx, %rax ; \ + adcq %rdx, %r10 ; \ + movl $0x0, %ebx ; \ + adcq %rbx, %rbx ; \ + subq %rax, %r11 ; \ + sbbq %r10, %r12 ; \ + sbbq %rbx, %r13 ; \ + sbbq $0x0, %r8 ; \ + sbbq $0x0, %r9 ; \ + movq %rdx, %r10 ; \ + sbbq $0x0, %r10 ; \ + movq %r11, %rdx ; \ + shlq $0x20, %rdx ; \ + addq %r11, %rdx ; \ + movq $0xffffffff00000001, %rax ; \ + mulxq %rax, %r11, %rax ; \ + movl $0xffffffff, %ebx ; \ + mulxq %rbx, %rbx, %r11 ; \ + addq %rbx, %rax ; \ + adcq %rdx, %r11 ; \ + movl $0x0, %ebx ; \ + adcq %rbx, %rbx ; \ + subq %rax, %r12 ; \ + sbbq %r11, %r13 ; \ + sbbq %rbx, %r8 ; \ + sbbq $0x0, %r9 ; \ + sbbq $0x0, %r10 ; \ + movq %rdx, %r11 ; \ + sbbq $0x0, %r11 ; \ + movq %r12, %rdx ; \ + shlq $0x20, %rdx ; \ + addq %r12, %rdx ; \ + movq $0xffffffff00000001, %rax ; \ + mulxq %rax, %r12, %rax ; \ + movl $0xffffffff, %ebx ; \ + mulxq %rbx, %rbx, %r12 ; \ + addq %rbx, %rax ; \ + adcq %rdx, %r12 ; \ + movl $0x0, %ebx ; \ + adcq %rbx, %rbx ; \ + subq %rax, %r13 ; \ + sbbq %r12, %r8 ; \ + sbbq %rbx, %r9 ; \ + sbbq $0x0, %r10 ; \ + sbbq $0x0, %r11 ; \ + movq %rdx, %r12 ; \ + sbbq $0x0, %r12 ; \ + movq %r13, %rdx ; \ + shlq $0x20, %rdx ; \ + addq %r13, %rdx ; \ + movq $0xffffffff00000001, %rax ; \ + mulxq %rax, %r13, %rax ; \ + movl $0xffffffff, %ebx ; \ + mulxq %rbx, %rbx, %r13 ; \ + addq %rbx, %rax ; \ + adcq %rdx, %r13 ; \ + movl $0x0, %ebx ; \ + adcq %rbx, %rbx ; \ + subq %rax, %r8 ; \ + sbbq %r13, %r9 ; \ + sbbq %rbx, %r10 ; \ + sbbq $0x0, %r11 ; \ + sbbq $0x0, %r12 ; \ + movq %rdx, %r13 ; \ + sbbq $0x0, %r13 ; \ + movq P0, %rbx ; \ + addq %r8, %r14 ; \ + adcq %r9, %r15 ; \ + adcq %r10, %rcx ; \ + adcq %r11, %rbx ; \ + adcq %r12, %rbp ; \ + adcq %r13, %rdi ; \ + movl $0x0, %r8d ; \ + adcq %r8, %r8 ; \ + xorq %r11, %r11 ; \ + xorq %r12, %r12 ; \ + xorq %r13, %r13 ; \ + movq $0xffffffff00000001, %rax ; \ + addq %r14, %rax ; \ + movl $0xffffffff, %r9d ; \ + adcq %r15, %r9 ; \ + movl $0x1, %r10d ; \ + adcq %rcx, %r10 ; \ + adcq %rbx, %r11 ; \ + adcq %rbp, %r12 ; \ + adcq %rdi, %r13 ; \ + adcq $0x0, %r8 ; \ + cmovne %rax, %r14 ; \ + cmovne %r9, %r15 ; \ + cmovne %r10, %rcx ; \ + cmovne %r11, %rbx ; \ + cmovne %r12, %rbp ; \ + cmovne %r13, %rdi ; \ + movq %r14, P0 ; \ + movq %r15, 0x8+P0 ; \ + movq %rcx, 0x10+P0 ; \ + movq %rbx, 0x18+P0 ; \ + movq %rbp, 0x20+P0 ; \ + movq %rdi, 0x28+P0 + +#define sub_p384(P0,P1,P2) \ + movq P1, %rax ; \ + subq P2, %rax ; \ + movq 0x8+P1, %rdx ; \ + sbbq 0x8+P2, %rdx ; \ + movq 0x10+P1, %r8 ; \ + sbbq 0x10+P2, %r8 ; \ + movq 0x18+P1, %r9 ; \ + sbbq 0x18+P2, %r9 ; \ + movq 0x20+P1, %r10 ; \ + sbbq 0x20+P2, %r10 ; \ + movq 0x28+P1, %r11 ; \ + sbbq 0x28+P2, %r11 ; \ + sbbq %rcx, %rcx ; \ + movl $0xffffffff, %ebx ; \ + andq %rbx, %rcx ; \ + xorq %rbx, %rbx ; \ + subq %rcx, %rbx ; \ + subq %rbx, %rax ; \ + movq %rax, P0 ; \ + sbbq %rcx, %rdx ; \ + movq %rdx, 0x8+P0 ; \ + sbbq %rax, %rax ; \ + andq %rbx, %rcx ; \ + negq %rax; \ + sbbq %rcx, %r8 ; \ + movq %r8, 0x10+P0 ; \ + sbbq $0x0, %r9 ; \ + movq %r9, 0x18+P0 ; \ + sbbq $0x0, %r10 ; \ + movq %r10, 0x20+P0 ; \ + sbbq $0x0, %r11 ; \ + movq %r11, 0x28+P0 + +// Simplified bignum_add_p384, without carry chain suspension + +#define add_p384(P0,P1,P2) \ + movq P1, %rax ; \ + addq P2, %rax ; \ + movq 0x8+P1, %rcx ; \ + adcq 0x8+P2, %rcx ; \ + movq 0x10+P1, %r8 ; \ + adcq 0x10+P2, %r8 ; \ + movq 0x18+P1, %r9 ; \ + adcq 0x18+P2, %r9 ; \ + movq 0x20+P1, %r10 ; \ + adcq 0x20+P2, %r10 ; \ + movq 0x28+P1, %r11 ; \ + adcq 0x28+P2, %r11 ; \ + movl $0x0, %edx ; \ + adcq %rdx, %rdx ; \ + movq $0xffffffff00000001, %rbp ; \ + addq %rbp, %rax ; \ + movl $0xffffffff, %ebp ; \ + adcq %rbp, %rcx ; \ + adcq $0x1, %r8 ; \ + adcq $0x0, %r9 ; \ + adcq $0x0, %r10 ; \ + adcq $0x0, %r11 ; \ + adcq $0xffffffffffffffff, %rdx ; \ + movl $1, %ebx ; \ + andq %rdx, %rbx ; \ + andq %rbp, %rdx ; \ + xorq %rbp, %rbp ; \ + subq %rdx, %rbp ; \ + subq %rbp, %rax ; \ + movq %rax, P0 ; \ + sbbq %rdx, %rcx ; \ + movq %rcx, 0x8+P0 ; \ + sbbq %rbx, %r8 ; \ + movq %r8, 0x10+P0 ; \ + sbbq $0x0, %r9 ; \ + movq %r9, 0x18+P0 ; \ + sbbq $0x0, %r10 ; \ + movq %r10, 0x20+P0 ; \ + sbbq $0x0, %r11 ; \ + movq %r11, 0x28+P0 + +// P0 = 4 * P1 - P2 + +#define cmsub41_p384(P0,P1,P2) \ + movq 40+P1, %rdx ; \ + movq %rdx, %r13 ; \ + shrq $62, %rdx ; \ + movq 32+P1, %r12 ; \ + shldq $2, %r12, %r13 ; \ + movq 24+P1, %r11 ; \ + shldq $2, %r11, %r12 ; \ + movq 16+P1, %r10 ; \ + shldq $2, %r10, %r11 ; \ + movq 8+P1, %r9 ; \ + shldq $2, %r9, %r10 ; \ + movq P1, %r8 ; \ + shldq $2, %r8, %r9 ; \ + shlq $2, %r8 ; \ + addq $1, %rdx ; \ + subq P2, %r8 ; \ + sbbq 0x8+P2, %r9 ; \ + sbbq 0x10+P2, %r10 ; \ + sbbq 0x18+P2, %r11 ; \ + sbbq 0x20+P2, %r12 ; \ + sbbq 0x28+P2, %r13 ; \ + sbbq $0, %rdx ; \ + xorq %rcx, %rcx ; \ + movq $0xffffffff00000001, %rax ; \ + mulxq %rax, %rax, %rcx ; \ + adcxq %rax, %r8 ; \ + adoxq %rcx, %r9 ; \ + movl $0xffffffff, %eax ; \ + mulxq %rax, %rax, %rcx ; \ + adcxq %rax, %r9 ; \ + adoxq %rcx, %r10 ; \ + adcxq %rdx, %r10 ; \ + movl $0x0, %eax ; \ + movl $0x0, %ecx ; \ + adoxq %rax, %rax ; \ + adcq %rax, %r11 ; \ + adcq %rcx, %r12 ; \ + adcq %rcx, %r13 ; \ + adcq %rcx, %rcx ; \ + subq $0x1, %rcx ; \ + movl $0xffffffff, %edx ; \ + xorq %rax, %rax ; \ + andq %rcx, %rdx ; \ + subq %rdx, %rax ; \ + andq $0x1, %rcx ; \ + subq %rax, %r8 ; \ + movq %r8, P0 ; \ + sbbq %rdx, %r9 ; \ + movq %r9, 0x8+P0 ; \ + sbbq %rcx, %r10 ; \ + movq %r10, 0x10+P0 ; \ + sbbq $0x0, %r11 ; \ + movq %r11, 0x18+P0 ; \ + sbbq $0x0, %r12 ; \ + movq %r12, 0x20+P0 ; \ + sbbq $0x0, %r13 ; \ + movq %r13, 0x28+P0 + +// P0 = C * P1 - D * P2 + +#define cmsub_p384(P0,C,P1,D,P2) \ + movq $0x00000000ffffffff, %r8 ; \ + subq P2, %r8 ; \ + movq $0xffffffff00000000, %r9 ; \ + sbbq 8+P2, %r9 ; \ + movq $0xfffffffffffffffe, %r10 ; \ + sbbq 16+P2, %r10 ; \ + movq $0xffffffffffffffff, %r11 ; \ + sbbq 24+P2, %r11 ; \ + movq $0xffffffffffffffff, %r12 ; \ + sbbq 32+P2, %r12 ; \ + movq $0xffffffffffffffff, %r13 ; \ + sbbq 40+P2, %r13 ; \ + movq $D, %rdx ; \ + mulxq %r8, %r8, %rax ; \ + mulxq %r9, %r9, %rcx ; \ + addq %rax, %r9 ; \ + mulxq %r10, %r10, %rax ; \ + adcq %rcx, %r10 ; \ + mulxq %r11, %r11, %rcx ; \ + adcq %rax, %r11 ; \ + mulxq %r12, %r12, %rax ; \ + adcq %rcx, %r12 ; \ + mulxq %r13, %r13, %r14 ; \ + adcq %rax, %r13 ; \ + adcq $1, %r14 ; \ + xorl %ecx, %ecx ; \ + movq $C, %rdx ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r8 ; \ + adoxq %rbx, %r9 ; \ + mulxq 8+P1, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq 16+P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 24+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 32+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 40+P1, %rax, %rdx ; \ + adcxq %rax, %r13 ; \ + adoxq %r14, %rdx ; \ + adcxq %rcx, %rdx ; \ + xorq %rcx, %rcx ; \ + movq $0xffffffff00000001, %rax ; \ + mulxq %rax, %rax, %rcx ; \ + adcxq %rax, %r8 ; \ + adoxq %rcx, %r9 ; \ + movl $0xffffffff, %eax ; \ + mulxq %rax, %rax, %rcx ; \ + adcxq %rax, %r9 ; \ + adoxq %rcx, %r10 ; \ + adcxq %rdx, %r10 ; \ + movl $0x0, %eax ; \ + movl $0x0, %ecx ; \ + adoxq %rax, %rax ; \ + adcq %rax, %r11 ; \ + adcq %rcx, %r12 ; \ + adcq %rcx, %r13 ; \ + adcq %rcx, %rcx ; \ + subq $0x1, %rcx ; \ + movl $0xffffffff, %edx ; \ + xorq %rax, %rax ; \ + andq %rcx, %rdx ; \ + subq %rdx, %rax ; \ + andq $0x1, %rcx ; \ + subq %rax, %r8 ; \ + movq %r8, P0 ; \ + sbbq %rdx, %r9 ; \ + movq %r9, 0x8+P0 ; \ + sbbq %rcx, %r10 ; \ + movq %r10, 0x10+P0 ; \ + sbbq $0x0, %r11 ; \ + movq %r11, 0x18+P0 ; \ + sbbq $0x0, %r12 ; \ + movq %r12, 0x20+P0 ; \ + sbbq $0x0, %r13 ; \ + movq %r13, 0x28+P0 + +// A weak version of add that only guarantees sum in 6 digits + +#define weakadd_p384(P0,P1,P2) \ + movq P1, %rax ; \ + addq P2, %rax ; \ + movq 0x8+P1, %rcx ; \ + adcq 0x8+P2, %rcx ; \ + movq 0x10+P1, %r8 ; \ + adcq 0x10+P2, %r8 ; \ + movq 0x18+P1, %r9 ; \ + adcq 0x18+P2, %r9 ; \ + movq 0x20+P1, %r10 ; \ + adcq 0x20+P2, %r10 ; \ + movq 0x28+P1, %r11 ; \ + adcq 0x28+P2, %r11 ; \ + sbbq %rdx, %rdx ; \ + movl $1, %ebx ; \ + andq %rdx, %rbx ; \ + movl $0xffffffff, %ebp ; \ + andq %rbp, %rdx ; \ + xorq %rbp, %rbp ; \ + subq %rdx, %rbp ; \ + addq %rbp, %rax ; \ + movq %rax, P0 ; \ + adcq %rdx, %rcx ; \ + movq %rcx, 0x8+P0 ; \ + adcq %rbx, %r8 ; \ + movq %r8, 0x10+P0 ; \ + adcq $0x0, %r9 ; \ + movq %r9, 0x18+P0 ; \ + adcq $0x0, %r10 ; \ + movq %r10, 0x20+P0 ; \ + adcq $0x0, %r11 ; \ + movq %r11, 0x28+P0 + +// P0 = 3 * P1 - 8 * P2 + +#define cmsub38_p384(P0,P1,P2) \ + movq $0x00000000ffffffff, %r8 ; \ + subq P2, %r8 ; \ + movq $0xffffffff00000000, %r9 ; \ + sbbq 8+P2, %r9 ; \ + movq $0xfffffffffffffffe, %r10 ; \ + sbbq 16+P2, %r10 ; \ + movq $0xffffffffffffffff, %r11 ; \ + sbbq 24+P2, %r11 ; \ + movq $0xffffffffffffffff, %r12 ; \ + sbbq 32+P2, %r12 ; \ + movq $0xffffffffffffffff, %r13 ; \ + sbbq 40+P2, %r13 ; \ + movq %r13, %r14 ; \ + shrq $61, %r14 ; \ + shldq $3, %r12, %r13 ; \ + shldq $3, %r11, %r12 ; \ + shldq $3, %r10, %r11 ; \ + shldq $3, %r9, %r10 ; \ + shldq $3, %r8, %r9 ; \ + shlq $3, %r8 ; \ + addq $1, %r14 ; \ + xorl %ecx, %ecx ; \ + movq $3, %rdx ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r8 ; \ + adoxq %rbx, %r9 ; \ + mulxq 8+P1, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq 16+P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 24+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 32+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 40+P1, %rax, %rdx ; \ + adcxq %rax, %r13 ; \ + adoxq %r14, %rdx ; \ + adcxq %rcx, %rdx ; \ + xorq %rcx, %rcx ; \ + movq $0xffffffff00000001, %rax ; \ + mulxq %rax, %rax, %rcx ; \ + adcxq %rax, %r8 ; \ + adoxq %rcx, %r9 ; \ + movl $0xffffffff, %eax ; \ + mulxq %rax, %rax, %rcx ; \ + adcxq %rax, %r9 ; \ + adoxq %rcx, %r10 ; \ + adcxq %rdx, %r10 ; \ + movl $0x0, %eax ; \ + movl $0x0, %ecx ; \ + adoxq %rax, %rax ; \ + adcq %rax, %r11 ; \ + adcq %rcx, %r12 ; \ + adcq %rcx, %r13 ; \ + adcq %rcx, %rcx ; \ + subq $0x1, %rcx ; \ + movl $0xffffffff, %edx ; \ + xorq %rax, %rax ; \ + andq %rcx, %rdx ; \ + subq %rdx, %rax ; \ + andq $0x1, %rcx ; \ + subq %rax, %r8 ; \ + movq %r8, P0 ; \ + sbbq %rdx, %r9 ; \ + movq %r9, 0x8+P0 ; \ + sbbq %rcx, %r10 ; \ + movq %r10, 0x10+P0 ; \ + sbbq $0x0, %r11 ; \ + movq %r11, 0x18+P0 ; \ + sbbq $0x0, %r12 ; \ + movq %r12, 0x20+P0 ; \ + sbbq $0x0, %r13 ; \ + movq %r13, 0x28+P0 + +S2N_BN_SYMBOL(p384_montjdouble): + +#if WINDOWS_ABI + pushq %rdi + pushq %rsi + movq %rcx, %rdi + movq %rdx, %rsi +#endif + +// Save registers and make room on stack for temporary variables +// Save the outpuy pointer %rdi which gets overwritten in earlier +// operations before it is used. + + pushq %rbx + pushq %rbp + pushq %r12 + pushq %r13 + pushq %r14 + pushq %r15 + + subq $NSPACE, %rsp + + movq %rdi, input_z + +// Main code, just a sequence of basic field operations + +// z2 = z^2 +// y2 = y^2 + + montsqr_p384(z2,z_1) + montsqr_p384(y2,y_1) + +// x2p = x^2 - z^4 = (x + z^2) * (x - z^2) + + weakadd_p384(t1,x_1,z2) + sub_p384(t2,x_1,z2) + montmul_p384(x2p,t1,t2) + +// t1 = y + z +// x4p = x2p^2 +// xy2 = x * y^2 + + add_p384(t1,y_1,z_1) + montsqr_p384(x4p,x2p) + montmul_p384(xy2,x_1,y2) + +// t2 = (y + z)^2 + + montsqr_p384(t2,t1) + +// d = 12 * xy2 - 9 * x4p +// t1 = y^2 + 2 * y * z + + cmsub_p384(d,12,xy2,9,x4p) + sub_p384(t1,t2,z2) + +// y4 = y^4 + + montsqr_p384(y4,y2) + +// Restore the output pointer to write to x_3, y_3 and z_3. + + movq input_z, %rdi + +// z_3' = 2 * y * z +// dx2 = d * x2p + + sub_p384(z_3,t1,y2) + montmul_p384(dx2,d,x2p) + +// x' = 4 * xy2 - d + + cmsub41_p384(x_3,xy2,d) + +// y' = 3 * dx2 - 8 * y4 + + cmsub38_p384(y_3,dx2,y4) + +// Restore stack and registers + + addq $NSPACE, %rsp + popq %r15 + popq %r14 + popq %r13 + popq %r12 + popq %rbp + popq %rbx + +#if WINDOWS_ABI + popq %rsi + popq %rdi +#endif + ret + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack, "", %progbits +#endif diff --git a/x86_att/p384/p384_montjmixadd.S b/x86_att/p384/p384_montjmixadd.S new file mode 100644 index 0000000000..6749209eb4 --- /dev/null +++ b/x86_att/p384/p384_montjmixadd.S @@ -0,0 +1,941 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +// ---------------------------------------------------------------------------- +// Point mixed addition on NIST curve P-384 in Montgomery-Jacobian coordinates +// +// extern void p384_montjmixadd +// (uint64_t p3[static 18],uint64_t p1[static 18],uint64_t p2[static 12]); +// +// Does p3 := p1 + p2 where all points are regarded as Jacobian triples with +// each coordinate in the Montgomery domain, i.e. x' = (2^384 * x) mod p_384. +// A Jacobian triple (x',y',z') represents affine point (x/z^2,y/z^3). +// The "mixed" part means that p2 only has x and y coordinates, with the +// implicit z coordinate assumed to be the identity. +// +// Standard x86-64 ABI: RDI = p3, RSI = p1, RDX = p2 +// Microsoft x64 ABI: RCX = p3, RDX = p1, R8 = p2 +// ---------------------------------------------------------------------------- +#include "_internal_s2n_bignum.h" + + + S2N_BN_SYM_VISIBILITY_DIRECTIVE(p384_montjmixadd) + S2N_BN_SYM_PRIVACY_DIRECTIVE(p384_montjmixadd) + .text + .balign 4 + +// Size of individual field elements + +#define NUMSIZE 48 + +// Pointer-offset pairs for inputs and outputs +// These assume %rdi = p3, %rsi = p1 and %rcx = p2, +// which needs to be set up explicitly before use + +#define x_1 0(%rsi) +#define y_1 NUMSIZE(%rsi) +#define z_1 (2*NUMSIZE)(%rsi) + +#define x_2 0(%rcx) +#define y_2 NUMSIZE(%rcx) + +#define x_3 0(%rdi) +#define y_3 NUMSIZE(%rdi) +#define z_3 (2*NUMSIZE)(%rdi) + +// Pointer-offset pairs for temporaries, with some aliasing +// NSPACE is the total stack needed for these temporaries + +#define zp2 (NUMSIZE*0)(%rsp) +#define ww (NUMSIZE*0)(%rsp) + +#define yd (NUMSIZE*1)(%rsp) +#define y2a (NUMSIZE*1)(%rsp) + +#define x2a (NUMSIZE*2)(%rsp) +#define zzx2 (NUMSIZE*2)(%rsp) + +#define zz (NUMSIZE*3)(%rsp) +#define t1 (NUMSIZE*3)(%rsp) + +#define t2 (NUMSIZE*4)(%rsp) +#define zzx1 (NUMSIZE*4)(%rsp) + +#define xd (NUMSIZE*5)(%rsp) + +// Temporaries for the actual input pointers + +#define input_x (NUMSIZE*6)(%rsp) +#define input_y (NUMSIZE*6+8)(%rsp) +#define input_z (NUMSIZE*6+16)(%rsp) + +#define NSPACE (NUMSIZE*6+24) + +// Corresponds exactly to bignum_montmul_p384 + +#define montmul_p384(P0,P1,P2) \ + movq P2, %rdx ; \ + xorl %r15d, %r15d ; \ + mulxq P1, %r8, %r9 ; \ + mulxq 0x8+P1, %rbx, %r10 ; \ + addq %rbx, %r9 ; \ + mulxq 0x10+P1, %rbx, %r11 ; \ + adcq %rbx, %r10 ; \ + mulxq 0x18+P1, %rbx, %r12 ; \ + adcq %rbx, %r11 ; \ + mulxq 0x20+P1, %rbx, %r13 ; \ + adcq %rbx, %r12 ; \ + mulxq 0x28+P1, %rbx, %r14 ; \ + adcq %rbx, %r13 ; \ + adcq %r15, %r14 ; \ + movq %r8, %rdx ; \ + shlq $0x20, %rdx ; \ + addq %r8, %rdx ; \ + xorl %ebp, %ebp ; \ + movq $0xffffffff00000001, %rax ; \ + mulxq %rax, %rbx, %rax ; \ + movl $0xffffffff, %ebx ; \ + mulxq %rbx, %r8, %rbx ; \ + adcq %r8, %rax ; \ + adcq %rdx, %rbx ; \ + adcl %ebp, %ebp ; \ + subq %rax, %r9 ; \ + sbbq %rbx, %r10 ; \ + sbbq %rbp, %r11 ; \ + sbbq $0x0, %r12 ; \ + sbbq $0x0, %r13 ; \ + sbbq $0x0, %rdx ; \ + addq %rdx, %r14 ; \ + adcq $0x0, %r15 ; \ + movq 0x8+P2, %rdx ; \ + xorl %r8d, %r8d ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + adoxq %r8, %r15 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcq %rax, %r14 ; \ + adcq %rbx, %r15 ; \ + adcq %r8, %r8 ; \ + movq %r9, %rdx ; \ + shlq $0x20, %rdx ; \ + addq %r9, %rdx ; \ + xorl %ebp, %ebp ; \ + movq $0xffffffff00000001, %rax ; \ + mulxq %rax, %rbx, %rax ; \ + movl $0xffffffff, %ebx ; \ + mulxq %rbx, %r9, %rbx ; \ + adcq %r9, %rax ; \ + adcq %rdx, %rbx ; \ + adcl %ebp, %ebp ; \ + subq %rax, %r10 ; \ + sbbq %rbx, %r11 ; \ + sbbq %rbp, %r12 ; \ + sbbq $0x0, %r13 ; \ + sbbq $0x0, %r14 ; \ + sbbq $0x0, %rdx ; \ + addq %rdx, %r15 ; \ + adcq $0x0, %r8 ; \ + movq 0x10+P2, %rdx ; \ + xorl %r9d, %r9d ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + adoxq %r9, %r8 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcq %rax, %r15 ; \ + adcq %rbx, %r8 ; \ + adcq %r9, %r9 ; \ + movq %r10, %rdx ; \ + shlq $0x20, %rdx ; \ + addq %r10, %rdx ; \ + xorl %ebp, %ebp ; \ + movq $0xffffffff00000001, %rax ; \ + mulxq %rax, %rbx, %rax ; \ + movl $0xffffffff, %ebx ; \ + mulxq %rbx, %r10, %rbx ; \ + adcq %r10, %rax ; \ + adcq %rdx, %rbx ; \ + adcl %ebp, %ebp ; \ + subq %rax, %r11 ; \ + sbbq %rbx, %r12 ; \ + sbbq %rbp, %r13 ; \ + sbbq $0x0, %r14 ; \ + sbbq $0x0, %r15 ; \ + sbbq $0x0, %rdx ; \ + addq %rdx, %r8 ; \ + adcq $0x0, %r9 ; \ + movq 0x18+P2, %rdx ; \ + xorl %r10d, %r10d ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rbx, %r8 ; \ + adoxq %r10, %r9 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcq %rax, %r8 ; \ + adcq %rbx, %r9 ; \ + adcq %r10, %r10 ; \ + movq %r11, %rdx ; \ + shlq $0x20, %rdx ; \ + addq %r11, %rdx ; \ + xorl %ebp, %ebp ; \ + movq $0xffffffff00000001, %rax ; \ + mulxq %rax, %rbx, %rax ; \ + movl $0xffffffff, %ebx ; \ + mulxq %rbx, %r11, %rbx ; \ + adcq %r11, %rax ; \ + adcq %rdx, %rbx ; \ + adcl %ebp, %ebp ; \ + subq %rax, %r12 ; \ + sbbq %rbx, %r13 ; \ + sbbq %rbp, %r14 ; \ + sbbq $0x0, %r15 ; \ + sbbq $0x0, %r8 ; \ + sbbq $0x0, %rdx ; \ + addq %rdx, %r9 ; \ + adcq $0x0, %r10 ; \ + movq 0x20+P2, %rdx ; \ + xorl %r11d, %r11d ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rbx, %r8 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r8 ; \ + adoxq %rbx, %r9 ; \ + adoxq %r11, %r10 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcq %rax, %r9 ; \ + adcq %rbx, %r10 ; \ + adcq %r11, %r11 ; \ + movq %r12, %rdx ; \ + shlq $0x20, %rdx ; \ + addq %r12, %rdx ; \ + xorl %ebp, %ebp ; \ + movq $0xffffffff00000001, %rax ; \ + mulxq %rax, %rbx, %rax ; \ + movl $0xffffffff, %ebx ; \ + mulxq %rbx, %r12, %rbx ; \ + adcq %r12, %rax ; \ + adcq %rdx, %rbx ; \ + adcl %ebp, %ebp ; \ + subq %rax, %r13 ; \ + sbbq %rbx, %r14 ; \ + sbbq %rbp, %r15 ; \ + sbbq $0x0, %r8 ; \ + sbbq $0x0, %r9 ; \ + sbbq $0x0, %rdx ; \ + addq %rdx, %r10 ; \ + adcq $0x0, %r11 ; \ + movq 0x28+P2, %rdx ; \ + xorl %r12d, %r12d ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rbx, %r8 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r8 ; \ + adoxq %rbx, %r9 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + adoxq %r12, %r11 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcq %rax, %r10 ; \ + adcq %rbx, %r11 ; \ + adcq %r12, %r12 ; \ + movq %r13, %rdx ; \ + shlq $0x20, %rdx ; \ + addq %r13, %rdx ; \ + xorl %ebp, %ebp ; \ + movq $0xffffffff00000001, %rax ; \ + mulxq %rax, %rbx, %rax ; \ + movl $0xffffffff, %ebx ; \ + mulxq %rbx, %r13, %rbx ; \ + adcq %r13, %rax ; \ + adcq %rdx, %rbx ; \ + adcl %ebp, %ebp ; \ + subq %rax, %r14 ; \ + sbbq %rbx, %r15 ; \ + sbbq %rbp, %r8 ; \ + sbbq $0x0, %r9 ; \ + sbbq $0x0, %r10 ; \ + sbbq $0x0, %rdx ; \ + addq %rdx, %r11 ; \ + adcq $0x0, %r12 ; \ + xorl %edx, %edx ; \ + xorl %ebp, %ebp ; \ + xorl %r13d, %r13d ; \ + movq $0xffffffff00000001, %rax ; \ + addq %r14, %rax ; \ + movl $0xffffffff, %ebx ; \ + adcq %r15, %rbx ; \ + movl $0x1, %ecx ; \ + adcq %r8, %rcx ; \ + adcq %r9, %rdx ; \ + adcq %r10, %rbp ; \ + adcq %r11, %r13 ; \ + adcq $0x0, %r12 ; \ + cmovne %rax, %r14 ; \ + cmovne %rbx, %r15 ; \ + cmovne %rcx, %r8 ; \ + cmovne %rdx, %r9 ; \ + cmovne %rbp, %r10 ; \ + cmovne %r13, %r11 ; \ + movq %r14, P0 ; \ + movq %r15, 0x8+P0 ; \ + movq %r8, 0x10+P0 ; \ + movq %r9, 0x18+P0 ; \ + movq %r10, 0x20+P0 ; \ + movq %r11, 0x28+P0 + +// Corresponds exactly to bignum_montsqr_p384 + +#define montsqr_p384(P0,P1) \ + movq P1, %rdx ; \ + mulxq 0x8+P1, %r9, %r10 ; \ + mulxq 0x18+P1, %r11, %r12 ; \ + mulxq 0x28+P1, %r13, %r14 ; \ + movq 0x18+P1, %rdx ; \ + mulxq 0x20+P1, %r15, %rcx ; \ + xorl %ebp, %ebp ; \ + movq 0x10+P1, %rdx ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + movq 0x8+P1, %rdx ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + adcxq %rbp, %r15 ; \ + adoxq %rbp, %rcx ; \ + adcq %rbp, %rcx ; \ + xorl %ebp, %ebp ; \ + movq 0x20+P1, %rdx ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + movq 0x10+P1, %rdx ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + mulxq 0x28+P1, %rax, %rdx ; \ + adcxq %rax, %r15 ; \ + adoxq %rdx, %rcx ; \ + movq 0x28+P1, %rdx ; \ + mulxq 0x20+P1, %rbx, %rbp ; \ + mulxq 0x18+P1, %rax, %rdx ; \ + adcxq %rax, %rcx ; \ + adoxq %rdx, %rbx ; \ + movl $0x0, %eax ; \ + adcxq %rax, %rbx ; \ + adoxq %rax, %rbp ; \ + adcq %rax, %rbp ; \ + xorq %rax, %rax ; \ + movq P1, %rdx ; \ + mulxq P1, %r8, %rax ; \ + adcxq %r9, %r9 ; \ + adoxq %rax, %r9 ; \ + movq 0x8+P1, %rdx ; \ + mulxq %rdx, %rax, %rdx ; \ + adcxq %r10, %r10 ; \ + adoxq %rax, %r10 ; \ + adcxq %r11, %r11 ; \ + adoxq %rdx, %r11 ; \ + movq 0x10+P1, %rdx ; \ + mulxq %rdx, %rax, %rdx ; \ + adcxq %r12, %r12 ; \ + adoxq %rax, %r12 ; \ + adcxq %r13, %r13 ; \ + adoxq %rdx, %r13 ; \ + movq 0x18+P1, %rdx ; \ + mulxq %rdx, %rax, %rdx ; \ + adcxq %r14, %r14 ; \ + adoxq %rax, %r14 ; \ + adcxq %r15, %r15 ; \ + adoxq %rdx, %r15 ; \ + movq 0x20+P1, %rdx ; \ + mulxq %rdx, %rax, %rdx ; \ + adcxq %rcx, %rcx ; \ + adoxq %rax, %rcx ; \ + adcxq %rbx, %rbx ; \ + adoxq %rdx, %rbx ; \ + movq 0x28+P1, %rdx ; \ + mulxq %rdx, %rax, %rsi ; \ + adcxq %rbp, %rbp ; \ + adoxq %rax, %rbp ; \ + movl $0x0, %eax ; \ + adcxq %rax, %rsi ; \ + adoxq %rax, %rsi ; \ + movq %rbx, P0 ; \ + movq %r8, %rdx ; \ + shlq $0x20, %rdx ; \ + addq %r8, %rdx ; \ + movq $0xffffffff00000001, %rax ; \ + mulxq %rax, %r8, %rax ; \ + movl $0xffffffff, %ebx ; \ + mulxq %rbx, %rbx, %r8 ; \ + addq %rbx, %rax ; \ + adcq %rdx, %r8 ; \ + movl $0x0, %ebx ; \ + adcq %rbx, %rbx ; \ + subq %rax, %r9 ; \ + sbbq %r8, %r10 ; \ + sbbq %rbx, %r11 ; \ + sbbq $0x0, %r12 ; \ + sbbq $0x0, %r13 ; \ + movq %rdx, %r8 ; \ + sbbq $0x0, %r8 ; \ + movq %r9, %rdx ; \ + shlq $0x20, %rdx ; \ + addq %r9, %rdx ; \ + movq $0xffffffff00000001, %rax ; \ + mulxq %rax, %r9, %rax ; \ + movl $0xffffffff, %ebx ; \ + mulxq %rbx, %rbx, %r9 ; \ + addq %rbx, %rax ; \ + adcq %rdx, %r9 ; \ + movl $0x0, %ebx ; \ + adcq %rbx, %rbx ; \ + subq %rax, %r10 ; \ + sbbq %r9, %r11 ; \ + sbbq %rbx, %r12 ; \ + sbbq $0x0, %r13 ; \ + sbbq $0x0, %r8 ; \ + movq %rdx, %r9 ; \ + sbbq $0x0, %r9 ; \ + movq %r10, %rdx ; \ + shlq $0x20, %rdx ; \ + addq %r10, %rdx ; \ + movq $0xffffffff00000001, %rax ; \ + mulxq %rax, %r10, %rax ; \ + movl $0xffffffff, %ebx ; \ + mulxq %rbx, %rbx, %r10 ; \ + addq %rbx, %rax ; \ + adcq %rdx, %r10 ; \ + movl $0x0, %ebx ; \ + adcq %rbx, %rbx ; \ + subq %rax, %r11 ; \ + sbbq %r10, %r12 ; \ + sbbq %rbx, %r13 ; \ + sbbq $0x0, %r8 ; \ + sbbq $0x0, %r9 ; \ + movq %rdx, %r10 ; \ + sbbq $0x0, %r10 ; \ + movq %r11, %rdx ; \ + shlq $0x20, %rdx ; \ + addq %r11, %rdx ; \ + movq $0xffffffff00000001, %rax ; \ + mulxq %rax, %r11, %rax ; \ + movl $0xffffffff, %ebx ; \ + mulxq %rbx, %rbx, %r11 ; \ + addq %rbx, %rax ; \ + adcq %rdx, %r11 ; \ + movl $0x0, %ebx ; \ + adcq %rbx, %rbx ; \ + subq %rax, %r12 ; \ + sbbq %r11, %r13 ; \ + sbbq %rbx, %r8 ; \ + sbbq $0x0, %r9 ; \ + sbbq $0x0, %r10 ; \ + movq %rdx, %r11 ; \ + sbbq $0x0, %r11 ; \ + movq %r12, %rdx ; \ + shlq $0x20, %rdx ; \ + addq %r12, %rdx ; \ + movq $0xffffffff00000001, %rax ; \ + mulxq %rax, %r12, %rax ; \ + movl $0xffffffff, %ebx ; \ + mulxq %rbx, %rbx, %r12 ; \ + addq %rbx, %rax ; \ + adcq %rdx, %r12 ; \ + movl $0x0, %ebx ; \ + adcq %rbx, %rbx ; \ + subq %rax, %r13 ; \ + sbbq %r12, %r8 ; \ + sbbq %rbx, %r9 ; \ + sbbq $0x0, %r10 ; \ + sbbq $0x0, %r11 ; \ + movq %rdx, %r12 ; \ + sbbq $0x0, %r12 ; \ + movq %r13, %rdx ; \ + shlq $0x20, %rdx ; \ + addq %r13, %rdx ; \ + movq $0xffffffff00000001, %rax ; \ + mulxq %rax, %r13, %rax ; \ + movl $0xffffffff, %ebx ; \ + mulxq %rbx, %rbx, %r13 ; \ + addq %rbx, %rax ; \ + adcq %rdx, %r13 ; \ + movl $0x0, %ebx ; \ + adcq %rbx, %rbx ; \ + subq %rax, %r8 ; \ + sbbq %r13, %r9 ; \ + sbbq %rbx, %r10 ; \ + sbbq $0x0, %r11 ; \ + sbbq $0x0, %r12 ; \ + movq %rdx, %r13 ; \ + sbbq $0x0, %r13 ; \ + movq P0, %rbx ; \ + addq %r8, %r14 ; \ + adcq %r9, %r15 ; \ + adcq %r10, %rcx ; \ + adcq %r11, %rbx ; \ + adcq %r12, %rbp ; \ + adcq %r13, %rsi ; \ + movl $0x0, %r8d ; \ + adcq %r8, %r8 ; \ + xorq %r11, %r11 ; \ + xorq %r12, %r12 ; \ + xorq %r13, %r13 ; \ + movq $0xffffffff00000001, %rax ; \ + addq %r14, %rax ; \ + movl $0xffffffff, %r9d ; \ + adcq %r15, %r9 ; \ + movl $0x1, %r10d ; \ + adcq %rcx, %r10 ; \ + adcq %rbx, %r11 ; \ + adcq %rbp, %r12 ; \ + adcq %rsi, %r13 ; \ + adcq $0x0, %r8 ; \ + cmovne %rax, %r14 ; \ + cmovne %r9, %r15 ; \ + cmovne %r10, %rcx ; \ + cmovne %r11, %rbx ; \ + cmovne %r12, %rbp ; \ + cmovne %r13, %rsi ; \ + movq %r14, P0 ; \ + movq %r15, 0x8+P0 ; \ + movq %rcx, 0x10+P0 ; \ + movq %rbx, 0x18+P0 ; \ + movq %rbp, 0x20+P0 ; \ + movq %rsi, 0x28+P0 + +// Almost-Montgomery variant which we use when an input to other muls +// with the other argument fully reduced (which is always safe). + +#define amontsqr_p384(P0,P1) \ + movq P1, %rdx ; \ + mulxq 0x8+P1, %r9, %r10 ; \ + mulxq 0x18+P1, %r11, %r12 ; \ + mulxq 0x28+P1, %r13, %r14 ; \ + movq 0x18+P1, %rdx ; \ + mulxq 0x20+P1, %r15, %rcx ; \ + xorl %ebp, %ebp ; \ + movq 0x10+P1, %rdx ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + movq 0x8+P1, %rdx ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + adcxq %rbp, %r15 ; \ + adoxq %rbp, %rcx ; \ + adcq %rbp, %rcx ; \ + xorl %ebp, %ebp ; \ + movq 0x20+P1, %rdx ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + movq 0x10+P1, %rdx ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + mulxq 0x28+P1, %rax, %rdx ; \ + adcxq %rax, %r15 ; \ + adoxq %rdx, %rcx ; \ + movq 0x28+P1, %rdx ; \ + mulxq 0x20+P1, %rbx, %rbp ; \ + mulxq 0x18+P1, %rax, %rdx ; \ + adcxq %rax, %rcx ; \ + adoxq %rdx, %rbx ; \ + movl $0x0, %eax ; \ + adcxq %rax, %rbx ; \ + adoxq %rax, %rbp ; \ + adcq %rax, %rbp ; \ + xorq %rax, %rax ; \ + movq P1, %rdx ; \ + mulxq P1, %r8, %rax ; \ + adcxq %r9, %r9 ; \ + adoxq %rax, %r9 ; \ + movq 0x8+P1, %rdx ; \ + mulxq %rdx, %rax, %rdx ; \ + adcxq %r10, %r10 ; \ + adoxq %rax, %r10 ; \ + adcxq %r11, %r11 ; \ + adoxq %rdx, %r11 ; \ + movq 0x10+P1, %rdx ; \ + mulxq %rdx, %rax, %rdx ; \ + adcxq %r12, %r12 ; \ + adoxq %rax, %r12 ; \ + adcxq %r13, %r13 ; \ + adoxq %rdx, %r13 ; \ + movq 0x18+P1, %rdx ; \ + mulxq %rdx, %rax, %rdx ; \ + adcxq %r14, %r14 ; \ + adoxq %rax, %r14 ; \ + adcxq %r15, %r15 ; \ + adoxq %rdx, %r15 ; \ + movq 0x20+P1, %rdx ; \ + mulxq %rdx, %rax, %rdx ; \ + adcxq %rcx, %rcx ; \ + adoxq %rax, %rcx ; \ + adcxq %rbx, %rbx ; \ + adoxq %rdx, %rbx ; \ + movq 0x28+P1, %rdx ; \ + mulxq %rdx, %rax, %rsi ; \ + adcxq %rbp, %rbp ; \ + adoxq %rax, %rbp ; \ + movl $0x0, %eax ; \ + adcxq %rax, %rsi ; \ + adoxq %rax, %rsi ; \ + movq %rbx, P0 ; \ + movq %r8, %rdx ; \ + shlq $0x20, %rdx ; \ + addq %r8, %rdx ; \ + movq $0xffffffff00000001, %rax ; \ + mulxq %rax, %r8, %rax ; \ + movl $0xffffffff, %ebx ; \ + mulxq %rbx, %rbx, %r8 ; \ + addq %rbx, %rax ; \ + adcq %rdx, %r8 ; \ + movl $0x0, %ebx ; \ + adcq %rbx, %rbx ; \ + subq %rax, %r9 ; \ + sbbq %r8, %r10 ; \ + sbbq %rbx, %r11 ; \ + sbbq $0x0, %r12 ; \ + sbbq $0x0, %r13 ; \ + movq %rdx, %r8 ; \ + sbbq $0x0, %r8 ; \ + movq %r9, %rdx ; \ + shlq $0x20, %rdx ; \ + addq %r9, %rdx ; \ + movq $0xffffffff00000001, %rax ; \ + mulxq %rax, %r9, %rax ; \ + movl $0xffffffff, %ebx ; \ + mulxq %rbx, %rbx, %r9 ; \ + addq %rbx, %rax ; \ + adcq %rdx, %r9 ; \ + movl $0x0, %ebx ; \ + adcq %rbx, %rbx ; \ + subq %rax, %r10 ; \ + sbbq %r9, %r11 ; \ + sbbq %rbx, %r12 ; \ + sbbq $0x0, %r13 ; \ + sbbq $0x0, %r8 ; \ + movq %rdx, %r9 ; \ + sbbq $0x0, %r9 ; \ + movq %r10, %rdx ; \ + shlq $0x20, %rdx ; \ + addq %r10, %rdx ; \ + movq $0xffffffff00000001, %rax ; \ + mulxq %rax, %r10, %rax ; \ + movl $0xffffffff, %ebx ; \ + mulxq %rbx, %rbx, %r10 ; \ + addq %rbx, %rax ; \ + adcq %rdx, %r10 ; \ + movl $0x0, %ebx ; \ + adcq %rbx, %rbx ; \ + subq %rax, %r11 ; \ + sbbq %r10, %r12 ; \ + sbbq %rbx, %r13 ; \ + sbbq $0x0, %r8 ; \ + sbbq $0x0, %r9 ; \ + movq %rdx, %r10 ; \ + sbbq $0x0, %r10 ; \ + movq %r11, %rdx ; \ + shlq $0x20, %rdx ; \ + addq %r11, %rdx ; \ + movq $0xffffffff00000001, %rax ; \ + mulxq %rax, %r11, %rax ; \ + movl $0xffffffff, %ebx ; \ + mulxq %rbx, %rbx, %r11 ; \ + addq %rbx, %rax ; \ + adcq %rdx, %r11 ; \ + movl $0x0, %ebx ; \ + adcq %rbx, %rbx ; \ + subq %rax, %r12 ; \ + sbbq %r11, %r13 ; \ + sbbq %rbx, %r8 ; \ + sbbq $0x0, %r9 ; \ + sbbq $0x0, %r10 ; \ + movq %rdx, %r11 ; \ + sbbq $0x0, %r11 ; \ + movq %r12, %rdx ; \ + shlq $0x20, %rdx ; \ + addq %r12, %rdx ; \ + movq $0xffffffff00000001, %rax ; \ + mulxq %rax, %r12, %rax ; \ + movl $0xffffffff, %ebx ; \ + mulxq %rbx, %rbx, %r12 ; \ + addq %rbx, %rax ; \ + adcq %rdx, %r12 ; \ + movl $0x0, %ebx ; \ + adcq %rbx, %rbx ; \ + subq %rax, %r13 ; \ + sbbq %r12, %r8 ; \ + sbbq %rbx, %r9 ; \ + sbbq $0x0, %r10 ; \ + sbbq $0x0, %r11 ; \ + movq %rdx, %r12 ; \ + sbbq $0x0, %r12 ; \ + movq %r13, %rdx ; \ + shlq $0x20, %rdx ; \ + addq %r13, %rdx ; \ + movq $0xffffffff00000001, %rax ; \ + mulxq %rax, %r13, %rax ; \ + movl $0xffffffff, %ebx ; \ + mulxq %rbx, %rbx, %r13 ; \ + addq %rbx, %rax ; \ + adcq %rdx, %r13 ; \ + movl $0x0, %ebx ; \ + adcq %rbx, %rbx ; \ + subq %rax, %r8 ; \ + sbbq %r13, %r9 ; \ + sbbq %rbx, %r10 ; \ + sbbq $0x0, %r11 ; \ + sbbq $0x0, %r12 ; \ + movq %rdx, %r13 ; \ + sbbq $0x0, %r13 ; \ + movq P0, %rbx ; \ + addq %r8, %r14 ; \ + adcq %r9, %r15 ; \ + adcq %r10, %rcx ; \ + adcq %r11, %rbx ; \ + adcq %r12, %rbp ; \ + adcq %r13, %rsi ; \ + movl $0x0, %r8d ; \ + movq $0xffffffff00000001, %rax ; \ + movl $0xffffffff, %r9d ; \ + movl $0x1, %r10d ; \ + cmovnc %r8, %rax ; \ + cmovnc %r8, %r9 ; \ + cmovnc %r8, %r10 ; \ + addq %rax, %r14 ; \ + adcq %r9, %r15 ; \ + adcq %r10, %rcx ; \ + adcq %r8, %rbx ; \ + adcq %r8, %rbp ; \ + adcq %r8, %rsi ; \ + movq %r14, P0 ; \ + movq %r15, 0x8+P0 ; \ + movq %rcx, 0x10+P0 ; \ + movq %rbx, 0x18+P0 ; \ + movq %rbp, 0x20+P0 ; \ + movq %rsi, 0x28+P0 + +// Corresponds exactly to bignum_sub_p384 + +#define sub_p384(P0,P1,P2) \ + movq P1, %rax ; \ + subq P2, %rax ; \ + movq 0x8+P1, %rdx ; \ + sbbq 0x8+P2, %rdx ; \ + movq 0x10+P1, %r8 ; \ + sbbq 0x10+P2, %r8 ; \ + movq 0x18+P1, %r9 ; \ + sbbq 0x18+P2, %r9 ; \ + movq 0x20+P1, %r10 ; \ + sbbq 0x20+P2, %r10 ; \ + movq 0x28+P1, %r11 ; \ + sbbq 0x28+P2, %r11 ; \ + sbbq %rcx, %rcx ; \ + movl $0xffffffff, %esi ; \ + andq %rsi, %rcx ; \ + xorq %rsi, %rsi ; \ + subq %rcx, %rsi ; \ + subq %rsi, %rax ; \ + movq %rax, P0 ; \ + sbbq %rcx, %rdx ; \ + movq %rdx, 0x8+P0 ; \ + sbbq %rax, %rax ; \ + andq %rsi, %rcx ; \ + negq %rax; \ + sbbq %rcx, %r8 ; \ + movq %r8, 0x10+P0 ; \ + sbbq $0x0, %r9 ; \ + movq %r9, 0x18+P0 ; \ + sbbq $0x0, %r10 ; \ + movq %r10, 0x20+P0 ; \ + sbbq $0x0, %r11 ; \ + movq %r11, 0x28+P0 + +S2N_BN_SYMBOL(p384_montjmixadd): + +#if WINDOWS_ABI + pushq %rdi + pushq %rsi + movq %rcx, %rdi + movq %rdx, %rsi + movq %r8, %rdx +#endif + +// Save registers and make room on stack for temporary variables +// Put the input arguments in non-volatile places on the stack + + pushq %rbx + pushq %rbp + pushq %r12 + pushq %r13 + pushq %r14 + pushq %r15 + + subq $NSPACE, %rsp + + movq %rdi, input_z + movq %rsi, input_x + movq %rdx, input_y + +// Main code, just a sequence of basic field operations +// 8 * multiply + 3 * square + 7 * subtract + + amontsqr_p384(zp2,z_1) + + movq input_x, %rsi + movq input_y, %rcx + montmul_p384(y2a,z_1,y_2) + + movq input_y, %rcx + montmul_p384(x2a,zp2,x_2) + + montmul_p384(y2a,zp2,y2a) + + movq input_x, %rsi + sub_p384(xd,x2a,x_1) + movq input_x, %rsi + sub_p384(yd,y2a,y_1) + + amontsqr_p384(zz,xd) + montsqr_p384(ww,yd) + + movq input_x, %rsi + montmul_p384(zzx1,zz,x_1) + montmul_p384(zzx2,zz,x2a) + + movq input_z, %rdi + sub_p384(x_3,ww,zzx1) + sub_p384(t1,zzx2,zzx1) + + movq input_z, %rdi + movq input_x, %rsi + montmul_p384(z_3,xd,z_1) + + movq input_z, %rdi + sub_p384(x_3,x_3,zzx2) + + movq input_z, %rdi + sub_p384(t2,zzx1,x_3) + + movq input_x, %rsi + montmul_p384(t1,t1,y_1) + montmul_p384(t2,yd,t2) + + movq input_z, %rdi + sub_p384(y_3,t2,t1) + +// Restore stack and registers + + addq $NSPACE, %rsp + popq %r15 + popq %r14 + popq %r13 + popq %r12 + popq %rbp + popq %rbx + +#if WINDOWS_ABI + popq %rsi + popq %rdi +#endif + ret + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack, "", %progbits +#endif From 57a43a3c6f4d29c822b1c226557ced539be575ef Mon Sep 17 00:00:00 2001 From: John Harrison Date: Fri, 15 Jul 2022 21:36:04 -0700 Subject: [PATCH 5/6] Tweak ARM bignum_sqr_p521_alt to use fewer registers --- arm/p521/bignum_sqr_p521_alt.S | 68 +++--- arm/proofs/bignum_sqr_p521_alt.ml | 339 ++++++++++++++++-------------- 2 files changed, 215 insertions(+), 192 deletions(-) diff --git a/arm/p521/bignum_sqr_p521_alt.S b/arm/p521/bignum_sqr_p521_alt.S index 6ba447f390..fe2201c00e 100644 --- a/arm/p521/bignum_sqr_p521_alt.S +++ b/arm/p521/bignum_sqr_p521_alt.S @@ -43,23 +43,23 @@ #define l x10 -#define u0 x11 -#define u1 x12 -#define u2 x13 -#define u3 x14 -#define u4 x15 -#define u5 x16 -#define u6 x17 -#define u7 x19 -#define u8 x20 -#define u9 x21 -#define u10 x22 -#define u11 x23 -#define u12 x24 -#define u13 x25 -#define u14 x26 -#define u15 x27 -#define u16 x29 +#define u0 x2 // The same as a0 +#define u1 x11 +#define u2 x12 +#define u3 x13 +#define u4 x14 +#define u5 x15 +#define u6 x16 +#define u7 x17 +#define u8 x19 +#define u9 x20 +#define u10 x21 +#define u11 x22 +#define u12 x23 +#define u13 x24 +#define u14 x25 +#define u15 x26 +#define u16 x4 // The same as a2 S2N_BN_SYMBOL(bignum_sqr_p521_alt): @@ -69,7 +69,6 @@ S2N_BN_SYMBOL(bignum_sqr_p521_alt): stp x21, x22, [sp, #-16]! stp x23, x24, [sp, #-16]! stp x25, x26, [sp, #-16]! - stp x27, x29, [sp, #-16]! // Load low 8 elements as [a7;a6;a5;a4;a3;a2;a1;a0], set up an initial // window [u8;u7;u6;u5;u4;u3;u2;u1] = 10 + 20 + 30 + 40 + 50 + 60 + 70 @@ -231,7 +230,6 @@ S2N_BN_SYMBOL(bignum_sqr_p521_alt): // Add the homogeneous terms 00 + 11 + 22 + 33 + 44 + 55 + 66 + 77 umulh l, a0, a0 - mul u0, a0, a0 adds u1, u1, l mul l, a1, a1 @@ -269,49 +267,58 @@ S2N_BN_SYMBOL(bignum_sqr_p521_alt): umulh l, a7, a7 adc u15, u15, l -// Now load in the top digit a8, and also set up its double and square +// Now load in the top digit a8, and immediately double the register ldr a8, [x, #64] - mul u16, a8, a8 add a8, a8, a8 -// Add a8 * [a7;...;a0] into the top of the buffer +// Add (2 * a8) * [a7;...;a0] into the top of the buffer +// At the end of the first chain we form u16 = a8 ^ 2. +// This needs us to shift right the modified a8 again but it saves a +// register, and the overall performance impact seems slightly positive. mul l, a8, a0 adds u8, u8, l - mul l, a8, a1 + umulh l, a8, a0 adcs u9, u9, l mul l, a8, a2 adcs u10, u10, l - mul l, a8, a3 + umulh l, a8, a2 adcs u11, u11, l mul l, a8, a4 adcs u12, u12, l - mul l, a8, a5 + umulh l, a8, a4 adcs u13, u13, l mul l, a8, a6 adcs u14, u14, l - mul l, a8, a7 + umulh l, a8, a6 adcs u15, u15, l + lsr u16, a8, #1 + mul u16, u16, u16 adc u16, u16, xzr - umulh l, a8, a0 + mul l, a8, a1 adds u9, u9, l umulh l, a8, a1 adcs u10, u10, l - umulh l, a8, a2 + mul l, a8, a3 adcs u11, u11, l umulh l, a8, a3 adcs u12, u12, l - umulh l, a8, a4 + mul l, a8, a5 adcs u13, u13, l umulh l, a8, a5 adcs u14, u14, l - umulh l, a8, a6 + mul l, a8, a7 adcs u15, u15, l umulh l, a8, a7 adc u16, u16, l +// Finally squeeze in the lowest mul. This didn't need to be involved +// in the addition chains and moreover lets us re-use u0 == a0 + + mul u0, a0, a0 + // Now we have the full product, which we consider as // 2^521 * h + l. Form h + l + 1 @@ -361,7 +368,6 @@ S2N_BN_SYMBOL(bignum_sqr_p521_alt): // Restore registers and return - ldp x27, x29, [sp], #16 ldp x25, x26, [sp], #16 ldp x23, x24, [sp], #16 ldp x21, x22, [sp], #16 diff --git a/arm/proofs/bignum_sqr_p521_alt.ml b/arm/proofs/bignum_sqr_p521_alt.ml index aa6e283e84..448aaba5c7 100644 --- a/arm/proofs/bignum_sqr_p521_alt.ml +++ b/arm/proofs/bignum_sqr_p521_alt.ml @@ -26,120 +26,120 @@ let bignum_sqr_p521_alt_mc = define_assert_from_elf "bignum_sqr_p521_alt_mc" "ar 0xa9bf5bf5; (* arm_STP X21 X22 SP (Preimmediate_Offset (iword (-- &16))) *) 0xa9bf63f7; (* arm_STP X23 X24 SP (Preimmediate_Offset (iword (-- &16))) *) 0xa9bf6bf9; (* arm_STP X25 X26 SP (Preimmediate_Offset (iword (-- &16))) *) - 0xa9bf77fb; (* arm_STP X27 X29 SP (Preimmediate_Offset (iword (-- &16))) *) 0xa9400c22; (* arm_LDP X2 X3 X1 (Immediate_Offset (iword (&0))) *) - 0x9b037c4c; (* arm_MUL X12 X2 X3 *) - 0x9bc37c4d; (* arm_UMULH X13 X2 X3 *) + 0x9b037c4b; (* arm_MUL X11 X2 X3 *) + 0x9bc37c4c; (* arm_UMULH X12 X2 X3 *) 0xa9411424; (* arm_LDP X4 X5 X1 (Immediate_Offset (iword (&16))) *) 0x9b047c4a; (* arm_MUL X10 X2 X4 *) - 0x9bc47c4e; (* arm_UMULH X14 X2 X4 *) - 0xab0a01ad; (* arm_ADDS X13 X13 X10 *) + 0x9bc47c4d; (* arm_UMULH X13 X2 X4 *) + 0xab0a018c; (* arm_ADDS X12 X12 X10 *) 0xa9421c26; (* arm_LDP X6 X7 X1 (Immediate_Offset (iword (&32))) *) 0x9b057c4a; (* arm_MUL X10 X2 X5 *) - 0x9bc57c4f; (* arm_UMULH X15 X2 X5 *) - 0xba0a01ce; (* arm_ADCS X14 X14 X10 *) + 0x9bc57c4e; (* arm_UMULH X14 X2 X5 *) + 0xba0a01ad; (* arm_ADCS X13 X13 X10 *) 0xa9432428; (* arm_LDP X8 X9 X1 (Immediate_Offset (iword (&48))) *) 0x9b067c4a; (* arm_MUL X10 X2 X6 *) - 0x9bc67c50; (* arm_UMULH X16 X2 X6 *) - 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x9bc67c4f; (* arm_UMULH X15 X2 X6 *) + 0xba0a01ce; (* arm_ADCS X14 X14 X10 *) 0x9b077c4a; (* arm_MUL X10 X2 X7 *) - 0x9bc77c51; (* arm_UMULH X17 X2 X7 *) - 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9bc77c50; (* arm_UMULH X16 X2 X7 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) 0x9b087c4a; (* arm_MUL X10 X2 X8 *) - 0x9bc87c53; (* arm_UMULH X19 X2 X8 *) - 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9bc87c51; (* arm_UMULH X17 X2 X8 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) 0x9b097c4a; (* arm_MUL X10 X2 X9 *) - 0x9bc97c54; (* arm_UMULH X20 X2 X9 *) - 0xba0a0273; (* arm_ADCS X19 X19 X10 *) - 0x9a1f0294; (* arm_ADC X20 X20 XZR *) + 0x9bc97c53; (* arm_UMULH X19 X2 X9 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) 0x9b047c6a; (* arm_MUL X10 X3 X4 *) - 0xab0a01ce; (* arm_ADDS X14 X14 X10 *) + 0xab0a01ad; (* arm_ADDS X13 X13 X10 *) 0x9b057c6a; (* arm_MUL X10 X3 X5 *) - 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0xba0a01ce; (* arm_ADCS X14 X14 X10 *) 0x9b067c6a; (* arm_MUL X10 X3 X6 *) - 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) 0x9b077c6a; (* arm_MUL X10 X3 X7 *) - 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) 0x9b087c6a; (* arm_MUL X10 X3 X8 *) - 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) 0x9b097c6a; (* arm_MUL X10 X3 X9 *) - 0xba0a0294; (* arm_ADCS X20 X20 X10 *) - 0x9a9f37f5; (* arm_CSET X21 Condition_CS *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) 0x9bc47c6a; (* arm_UMULH X10 X3 X4 *) - 0xab0a01ef; (* arm_ADDS X15 X15 X10 *) + 0xab0a01ce; (* arm_ADDS X14 X14 X10 *) 0x9bc57c6a; (* arm_UMULH X10 X3 X5 *) - 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) 0x9bc67c6a; (* arm_UMULH X10 X3 X6 *) - 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) 0x9bc77c6a; (* arm_UMULH X10 X3 X7 *) - 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) 0x9bc87c6a; (* arm_UMULH X10 X3 X8 *) - 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) 0x9bc97c6a; (* arm_UMULH X10 X3 X9 *) - 0x9a0a02b5; (* arm_ADC X21 X21 X10 *) + 0x9a0a0294; (* arm_ADC X20 X20 X10 *) 0x9b077cca; (* arm_MUL X10 X6 X7 *) - 0x9bc77cd6; (* arm_UMULH X22 X6 X7 *) - 0xab0a02b5; (* arm_ADDS X21 X21 X10 *) - 0x9a1f02d6; (* arm_ADC X22 X22 XZR *) + 0x9bc77cd5; (* arm_UMULH X21 X6 X7 *) + 0xab0a0294; (* arm_ADDS X20 X20 X10 *) + 0x9a1f02b5; (* arm_ADC X21 X21 XZR *) 0x9b057c8a; (* arm_MUL X10 X4 X5 *) - 0xab0a0210; (* arm_ADDS X16 X16 X10 *) + 0xab0a01ef; (* arm_ADDS X15 X15 X10 *) 0x9b067c8a; (* arm_MUL X10 X4 X6 *) - 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) 0x9b077c8a; (* arm_MUL X10 X4 X7 *) - 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) 0x9b087c8a; (* arm_MUL X10 X4 X8 *) - 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) 0x9b097c8a; (* arm_MUL X10 X4 X9 *) - 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) 0x9b087cca; (* arm_MUL X10 X6 X8 *) - 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) - 0x9a9f37f7; (* arm_CSET X23 Condition_CS *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9a9f37f6; (* arm_CSET X22 Condition_CS *) 0x9bc57c8a; (* arm_UMULH X10 X4 X5 *) - 0xab0a0231; (* arm_ADDS X17 X17 X10 *) + 0xab0a0210; (* arm_ADDS X16 X16 X10 *) 0x9bc67c8a; (* arm_UMULH X10 X4 X6 *) - 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) 0x9bc77c8a; (* arm_UMULH X10 X4 X7 *) - 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) 0x9bc87c8a; (* arm_UMULH X10 X4 X8 *) - 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) 0x9bc97c8a; (* arm_UMULH X10 X4 X9 *) - 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) 0x9bc87cca; (* arm_UMULH X10 X6 X8 *) - 0x9a0a02f7; (* arm_ADC X23 X23 X10 *) + 0x9a0a02d6; (* arm_ADC X22 X22 X10 *) 0x9b087cea; (* arm_MUL X10 X7 X8 *) - 0x9bc87cf8; (* arm_UMULH X24 X7 X8 *) - 0xab0a02f7; (* arm_ADDS X23 X23 X10 *) - 0x9a1f0318; (* arm_ADC X24 X24 XZR *) + 0x9bc87cf7; (* arm_UMULH X23 X7 X8 *) + 0xab0a02d6; (* arm_ADDS X22 X22 X10 *) + 0x9a1f02f7; (* arm_ADC X23 X23 XZR *) 0x9b067caa; (* arm_MUL X10 X5 X6 *) - 0xab0a0273; (* arm_ADDS X19 X19 X10 *) + 0xab0a0231; (* arm_ADDS X17 X17 X10 *) 0x9b077caa; (* arm_MUL X10 X5 X7 *) - 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) 0x9b087caa; (* arm_MUL X10 X5 X8 *) - 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) 0x9b097caa; (* arm_MUL X10 X5 X9 *) - 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) 0x9b097cca; (* arm_MUL X10 X6 X9 *) - 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) 0x9b097cea; (* arm_MUL X10 X7 X9 *) - 0xba0a0318; (* arm_ADCS X24 X24 X10 *) - 0x9a9f37f9; (* arm_CSET X25 Condition_CS *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9a9f37f8; (* arm_CSET X24 Condition_CS *) 0x9bc67caa; (* arm_UMULH X10 X5 X6 *) - 0xab0a0294; (* arm_ADDS X20 X20 X10 *) + 0xab0a0273; (* arm_ADDS X19 X19 X10 *) 0x9bc77caa; (* arm_UMULH X10 X5 X7 *) - 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) 0x9bc87caa; (* arm_UMULH X10 X5 X8 *) - 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) 0x9bc97caa; (* arm_UMULH X10 X5 X9 *) - 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) 0x9bc97cca; (* arm_UMULH X10 X6 X9 *) - 0xba0a0318; (* arm_ADCS X24 X24 X10 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) 0x9bc97cea; (* arm_UMULH X10 X7 X9 *) - 0x9a0a0339; (* arm_ADC X25 X25 X10 *) + 0x9a0a0318; (* arm_ADC X24 X24 X10 *) 0x9b097d0a; (* arm_MUL X10 X8 X9 *) - 0x9bc97d1a; (* arm_UMULH X26 X8 X9 *) - 0xab0a0339; (* arm_ADDS X25 X25 X10 *) - 0x9a1f035a; (* arm_ADC X26 X26 XZR *) - 0xab0c018c; (* arm_ADDS X12 X12 X12 *) + 0x9bc97d19; (* arm_UMULH X25 X8 X9 *) + 0xab0a0318; (* arm_ADDS X24 X24 X10 *) + 0x9a1f0339; (* arm_ADC X25 X25 XZR *) + 0xab0b016b; (* arm_ADDS X11 X11 X11 *) + 0xba0c018c; (* arm_ADCS X12 X12 X12 *) 0xba0d01ad; (* arm_ADCS X13 X13 X13 *) 0xba0e01ce; (* arm_ADCS X14 X14 X14 *) 0xba0f01ef; (* arm_ADCS X15 X15 X15 *) @@ -152,76 +152,78 @@ let bignum_sqr_p521_alt_mc = define_assert_from_elf "bignum_sqr_p521_alt_mc" "ar 0xba1702f7; (* arm_ADCS X23 X23 X23 *) 0xba180318; (* arm_ADCS X24 X24 X24 *) 0xba190339; (* arm_ADCS X25 X25 X25 *) - 0xba1a035a; (* arm_ADCS X26 X26 X26 *) - 0x9a9f37fb; (* arm_CSET X27 Condition_CS *) + 0x9a9f37fa; (* arm_CSET X26 Condition_CS *) 0x9bc27c4a; (* arm_UMULH X10 X2 X2 *) - 0x9b027c4b; (* arm_MUL X11 X2 X2 *) - 0xab0a018c; (* arm_ADDS X12 X12 X10 *) + 0xab0a016b; (* arm_ADDS X11 X11 X10 *) 0x9b037c6a; (* arm_MUL X10 X3 X3 *) - 0xba0a01ad; (* arm_ADCS X13 X13 X10 *) + 0xba0a018c; (* arm_ADCS X12 X12 X10 *) 0x9bc37c6a; (* arm_UMULH X10 X3 X3 *) - 0xba0a01ce; (* arm_ADCS X14 X14 X10 *) + 0xba0a01ad; (* arm_ADCS X13 X13 X10 *) 0x9b047c8a; (* arm_MUL X10 X4 X4 *) - 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0xba0a01ce; (* arm_ADCS X14 X14 X10 *) 0x9bc47c8a; (* arm_UMULH X10 X4 X4 *) - 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) 0x9b057caa; (* arm_MUL X10 X5 X5 *) - 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) 0x9bc57caa; (* arm_UMULH X10 X5 X5 *) - 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) 0x9b067cca; (* arm_MUL X10 X6 X6 *) - 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) 0x9bc67cca; (* arm_UMULH X10 X6 X6 *) - 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) 0x9b077cea; (* arm_MUL X10 X7 X7 *) - 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) 0x9bc77cea; (* arm_UMULH X10 X7 X7 *) - 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) 0x9b087d0a; (* arm_MUL X10 X8 X8 *) - 0xba0a0318; (* arm_ADCS X24 X24 X10 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) 0x9bc87d0a; (* arm_UMULH X10 X8 X8 *) - 0xba0a0339; (* arm_ADCS X25 X25 X10 *) + 0xba0a0318; (* arm_ADCS X24 X24 X10 *) 0x9b097d2a; (* arm_MUL X10 X9 X9 *) - 0xba0a035a; (* arm_ADCS X26 X26 X10 *) + 0xba0a0339; (* arm_ADCS X25 X25 X10 *) 0x9bc97d2a; (* arm_UMULH X10 X9 X9 *) - 0x9a0a037b; (* arm_ADC X27 X27 X10 *) + 0x9a0a035a; (* arm_ADC X26 X26 X10 *) 0xf9402021; (* arm_LDR X1 X1 (Immediate_Offset (word 64)) *) - 0x9b017c3d; (* arm_MUL X29 X1 X1 *) 0x8b010021; (* arm_ADD X1 X1 X1 *) 0x9b027c2a; (* arm_MUL X10 X1 X2 *) - 0xab0a0294; (* arm_ADDS X20 X20 X10 *) - 0x9b037c2a; (* arm_MUL X10 X1 X3 *) - 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0xab0a0273; (* arm_ADDS X19 X19 X10 *) + 0x9bc27c2a; (* arm_UMULH X10 X1 X2 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) 0x9b047c2a; (* arm_MUL X10 X1 X4 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9bc47c2a; (* arm_UMULH X10 X1 X4 *) 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) - 0x9b057c2a; (* arm_MUL X10 X1 X5 *) - 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) 0x9b067c2a; (* arm_MUL X10 X1 X6 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9bc67c2a; (* arm_UMULH X10 X1 X6 *) 0xba0a0318; (* arm_ADCS X24 X24 X10 *) - 0x9b077c2a; (* arm_MUL X10 X1 X7 *) - 0xba0a0339; (* arm_ADCS X25 X25 X10 *) 0x9b087c2a; (* arm_MUL X10 X1 X8 *) + 0xba0a0339; (* arm_ADCS X25 X25 X10 *) + 0x9bc87c2a; (* arm_UMULH X10 X1 X8 *) 0xba0a035a; (* arm_ADCS X26 X26 X10 *) - 0x9b097c2a; (* arm_MUL X10 X1 X9 *) - 0xba0a037b; (* arm_ADCS X27 X27 X10 *) - 0x9a1f03bd; (* arm_ADC X29 X29 XZR *) - 0x9bc27c2a; (* arm_UMULH X10 X1 X2 *) - 0xab0a02b5; (* arm_ADDS X21 X21 X10 *) + 0xd341fc24; (* arm_LSR X4 X1 1 *) + 0x9b047c84; (* arm_MUL X4 X4 X4 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b037c2a; (* arm_MUL X10 X1 X3 *) + 0xab0a0294; (* arm_ADDS X20 X20 X10 *) 0x9bc37c2a; (* arm_UMULH X10 X1 X3 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9b057c2a; (* arm_MUL X10 X1 X5 *) 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) - 0x9bc47c2a; (* arm_UMULH X10 X1 X4 *) - 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) 0x9bc57c2a; (* arm_UMULH X10 X1 X5 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9b077c2a; (* arm_MUL X10 X1 X7 *) 0xba0a0318; (* arm_ADCS X24 X24 X10 *) - 0x9bc67c2a; (* arm_UMULH X10 X1 X6 *) - 0xba0a0339; (* arm_ADCS X25 X25 X10 *) 0x9bc77c2a; (* arm_UMULH X10 X1 X7 *) + 0xba0a0339; (* arm_ADCS X25 X25 X10 *) + 0x9b097c2a; (* arm_MUL X10 X1 X9 *) 0xba0a035a; (* arm_ADCS X26 X26 X10 *) - 0x9bc87c2a; (* arm_UMULH X10 X1 X8 *) - 0xba0a037b; (* arm_ADCS X27 X27 X10 *) 0x9bc97c2a; (* arm_UMULH X10 X1 X9 *) - 0x9a0a03bd; (* arm_ADC X29 X29 X10 *) + 0x9a0a0084; (* arm_ADC X4 X4 X10 *) + 0x9b027c42; (* arm_MUL X2 X2 X2 *) 0xeb1f03ff; (* arm_CMP XZR XZR *) + 0x93d3268a; (* arm_EXTR X10 X20 X19 9 *) + 0xba0a0042; (* arm_ADCS X2 X2 X10 *) 0x93d426aa; (* arm_EXTR X10 X21 X20 9 *) 0xba0a016b; (* arm_ADCS X11 X11 X10 *) 0x93d526ca; (* arm_EXTR X10 X22 X21 9 *) @@ -234,13 +236,12 @@ let bignum_sqr_p521_alt_mc = define_assert_from_elf "bignum_sqr_p521_alt_mc" "ar 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) 0x93d9274a; (* arm_EXTR X10 X26 X25 9 *) 0xba0a0210; (* arm_ADCS X16 X16 X10 *) - 0x93da276a; (* arm_EXTR X10 X27 X26 9 *) + 0x93da248a; (* arm_EXTR X10 X4 X26 9 *) 0xba0a0231; (* arm_ADCS X17 X17 X10 *) - 0x93db27aa; (* arm_EXTR X10 X29 X27 9 *) + 0xb277da73; (* arm_ORR X19 X19 (rvalue (word 18446744073709551104)) *) + 0xd349fc8a; (* arm_LSR X10 X4 9 *) 0xba0a0273; (* arm_ADCS X19 X19 X10 *) - 0xb277da94; (* arm_ORR X20 X20 (rvalue (word 18446744073709551104)) *) - 0xd349ffaa; (* arm_LSR X10 X29 9 *) - 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0xfa1f0042; (* arm_SBCS X2 X2 XZR *) 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) @@ -248,15 +249,13 @@ let bignum_sqr_p521_alt_mc = define_assert_from_elf "bignum_sqr_p521_alt_mc" "ar 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) - 0xfa1f0273; (* arm_SBCS X19 X19 XZR *) - 0xda1f0294; (* arm_SBC X20 X20 XZR *) - 0x92402294; (* arm_AND X20 X20 (rvalue (word 511)) *) - 0xa900300b; (* arm_STP X11 X12 X0 (Immediate_Offset (iword (&0))) *) - 0xa901380d; (* arm_STP X13 X14 X0 (Immediate_Offset (iword (&16))) *) - 0xa902400f; (* arm_STP X15 X16 X0 (Immediate_Offset (iword (&32))) *) - 0xa9034c11; (* arm_STP X17 X19 X0 (Immediate_Offset (iword (&48))) *) - 0xf9002014; (* arm_STR X20 X0 (Immediate_Offset (word 64)) *) - 0xa8c177fb; (* arm_LDP X27 X29 SP (Postimmediate_Offset (iword (&16))) *) + 0xda1f0273; (* arm_SBC X19 X19 XZR *) + 0x92402273; (* arm_AND X19 X19 (rvalue (word 511)) *) + 0xa9002c02; (* arm_STP X2 X11 X0 (Immediate_Offset (iword (&0))) *) + 0xa901340c; (* arm_STP X12 X13 X0 (Immediate_Offset (iword (&16))) *) + 0xa9023c0e; (* arm_STP X14 X15 X0 (Immediate_Offset (iword (&32))) *) + 0xa9034410; (* arm_STP X16 X17 X0 (Immediate_Offset (iword (&48))) *) + 0xf9002013; (* arm_STR X19 X0 (Immediate_Offset (word 64)) *) 0xa8c16bf9; (* arm_LDP X25 X26 SP (Postimmediate_Offset (iword (&16))) *) 0xa8c163f7; (* arm_LDP X23 X24 SP (Postimmediate_Offset (iword (&16))) *) 0xa8c15bf5; (* arm_LDP X21 X22 SP (Postimmediate_Offset (iword (&16))) *) @@ -274,18 +273,18 @@ let p_521 = new_definition `p_521 = 68647976601306097149819007990813932172694353 let BIGNUM_SQR_P521_ALT_CORRECT = time prove (`!z x n pc. - nonoverlapping (word pc,0x3c0) (z,8 * 9) + nonoverlapping (word pc,0x3bc) (z,8 * 9) ==> ensures arm (\s. aligned_bytes_loaded s (word pc) bignum_sqr_p521_alt_mc /\ - read PC s = word(pc + 0x14) /\ + read PC s = word(pc + 0x10) /\ C_ARGUMENTS [z; x] s /\ bignum_from_memory (x,9) s = n) (\s. read PC s = word (pc + 0x3a8) /\ (n < p_521 ==> bignum_from_memory (z,9) s = (n EXP 2) MOD p_521)) - (MAYCHANGE [PC; X1; X2; X3; X4; X5; X6; X7; X8; X9; X10; X11; X12; - X13; X14; X15; X16; X17; X19; X20; X21; X22; X23; X24; - X25; X26; X27; X29] ,, + (MAYCHANGE [PC; X1; X2; X3; X4; X5; X6; X7; X8; X9; X10; + X11; X12; X13; X14; X15; X16; X17; X19; X20; + X21; X22; X23; X24; X25; X26] ,, MAYCHANGE SOME_FLAGS ,, MAYCHANGE [memory :> bignum(z,9)])`, MAP_EVERY X_GEN_TAC @@ -296,7 +295,7 @@ let BIGNUM_SQR_P521_ALT_CORRECT = time prove (*** Globalize the n < p_521 assumption for simplicity's sake ***) ASM_CASES_TAC `n < p_521` THENL - [ASM_REWRITE_TAC[]; ARM_SIM_TAC BIGNUM_SQR_P521_ALT_EXEC (1--229)] THEN + [ASM_REWRITE_TAC[]; ARM_SIM_TAC BIGNUM_SQR_P521_ALT_EXEC (1--230)] THEN (*** Digitize, deduce the bound on the top word specifically ***) @@ -310,29 +309,57 @@ let BIGNUM_SQR_P521_ALT_CORRECT = time prove (*** Simulate the initial squaring ***) - ARM_ACCSTEPS_TAC BIGNUM_SQR_P521_ALT_EXEC (1--194) (1--194) THEN + ARM_ACCSTEPS_TAC BIGNUM_SQR_P521_ALT_EXEC (1--195) (1--195) THEN RULE_ASSUM_TAC(REWRITE_RULE[COND_SWAP; GSYM WORD_BITVAL]) THEN (*** Introduce more systematic names for the high part digits ***) MAP_EVERY (fun s -> REABBREV_TAC s THEN POP_ASSUM SUBST_ALL_TAC) - [`l0 = read X11 s194`; - `l1 = read X12 s194`; - `l2 = read X13 s194`; - `l3 = read X14 s194`; - `l4 = read X15 s194`; - `l5 = read X16 s194`; - `l6 = read X17 s194`; - `l7 = read X19 s194`; - `h0 = read X20 s194`; - `h1 = read X21 s194`; - `h2 = read X22 s194`; - `h3 = read X23 s194`; - `h4 = read X24 s194`; - `h5 = read X25 s194`; - `h6 = read X26 s194`; - `h7 = read X27 s194`; - `h8 = read X29 s194`] THEN + [`l0 = read X2 s195`; + `l1 = read X11 s195`; + `l2 = read X12 s195`; + `l3 = read X13 s195`; + `l4 = read X14 s195`; + `l5 = read X15 s195`; + `l6 = read X16 s195`; + `l7 = read X17 s195`; + `h0 = read X19 s195`; + `h1 = read X20 s195`; + `h2 = read X21 s195`; + `h3 = read X22 s195`; + `h4 = read X23 s195`; + `h5 = read X24 s195`; + `h6 = read X25 s195`; + `h7 = read X26 s195`; + `h8 = read X4 s195`] THEN + + (*** Handle the two anomalous operations ***) + + UNDISCH_THEN + `&2 pow 64 * &(bitval carry_s159) + &(val(sum_s159:int64)):real = + &(val(n_8:int64)) + &(val n_8)` + (MP_TAC o REWRITE_RULE[REAL_OF_NUM_CLAUSES]) THEN + REWRITE_TAC[bitval] THEN COND_CASES_TAC THEN + ASM_REWRITE_TAC[ADD_CLAUSES; MULT_CLAUSES] THENL + [MATCH_MP_TAC(TAUT `~p ==> p ==> q`) THEN + MATCH_MP_TAC(ARITH_RULE `a < b ==> ~(b + s:num = a)`) THEN + ASM BOUNDER_TAC[]; + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN + DISCH_THEN SUBST_ALL_TAC] THEN + + UNDISCH_THEN + `&2 pow 64 * &(val(mulhi_s176:int64)) + &(val(mullo_s176:int64)):real = + &2 pow 63 * (&(val(n_8:int64)) + &(val n_8))` + (MP_TAC o REWRITE_RULE[REAL_OF_NUM_CLAUSES]) THEN + REWRITE_TAC[ARITH_RULE `2 EXP 63 * (n + n) = 2 EXP 64 * n`] THEN + DISCH_THEN(MP_TAC o MATCH_MP (NUMBER_RULE + `e * h + l = e * x ==> e divides l /\ e * h + l = e * x`)) THEN + GEN_REWRITE_TAC I [IMP_CONJ] THEN + DISCH_THEN(MP_TAC o MATCH_MP DIVIDES_LE) THEN + REWRITE_TAC[REWRITE_RULE[GSYM NOT_LE] VAL_BOUND_64] THEN + DISCH_THEN SUBST1_TAC THEN + REWRITE_TAC[ARITH_RULE `2 EXP 64 * x + 0 = 2 EXP 64 * y <=> x = y`] THEN + DISCH_THEN SUBST_ALL_TAC THEN (*** Show that the core squaring operation is correct ***) @@ -341,17 +368,7 @@ let BIGNUM_SQR_P521_ALT_CORRECT = time prove bignum_of_wordlist[l0;l1;l2;l3;l4;l5;l6;l7] = n EXP 2` ASSUME_TAC THENL - [UNDISCH_THEN - `&2 pow 64 * &(bitval carry_s161) + &(val(sum_s161:int64)) = - &(val(n_8:int64)) + &(val n_8)` - (MP_TAC o REWRITE_RULE[REAL_OF_NUM_CLAUSES]) THEN - REWRITE_TAC[bitval] THEN COND_CASES_TAC THEN - ASM_REWRITE_TAC[ADD_CLAUSES; MULT_CLAUSES] THENL - [MATCH_MP_TAC(ARITH_RULE `a < b ==> b + s:num = a ==> u:num = v`) THEN - ASM BOUNDER_TAC[]; - REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN - DISCH_THEN SUBST_ALL_TAC] THEN - ASM_REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + [ASM_REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN MAP_EVERY EXISTS_TAC [`1088`; `&0:real`] THEN CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN CONJ_TAC THENL @@ -374,7 +391,7 @@ let BIGNUM_SQR_P521_ALT_CORRECT = time prove (*** Now simulate the shift-and-add of high and lower parts ***) ARM_ACCSTEPS_TAC BIGNUM_SQR_P521_ALT_EXEC - [197;199;201;203;205;207;209;211;214] (195--214) THEN + [198;200;202;204;206;208;210;212;215] (196--215) THEN (*** Break up into high and low parts ***) @@ -438,7 +455,7 @@ let BIGNUM_SQR_P521_ALT_CORRECT = time prove CONV_TAC(DEPTH_CONV WORD_NUM_RED_CONV) THEN REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN REAL_ARITH_TAC; ALL_TAC] THEN - SUBGOAL_THEN `carry_s214 <=> p_521 <= h + l` SUBST_ALL_TAC THENL + SUBGOAL_THEN `carry_s215 <=> p_521 <= h + l` SUBST_ALL_TAC THENL [MATCH_MP_TAC FLAG_FROM_CARRY_LE THEN EXISTS_TAC `576` THEN MAP_EVERY EXPAND_TAC ["h"; "l"] THEN REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist; p_521] THEN @@ -448,8 +465,8 @@ let BIGNUM_SQR_P521_ALT_CORRECT = time prove (*** The final correction ***) - ARM_ACCSTEPS_TAC BIGNUM_SQR_P521_ALT_EXEC (215--223) (215--229) THEN - ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + ARM_ACCSTEPS_TAC BIGNUM_SQR_P521_ALT_EXEC (216--224) (216--230) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[REAL_OF_NUM_CLAUSES] THEN CONV_TAC SYM_CONV THEN CONV_TAC(RAND_CONV BIGNUM_LEXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN MATCH_MP_TAC EQUAL_FROM_CONGRUENT_MOD_MOD THEN MAP_EVERY EXISTS_TAC @@ -476,10 +493,10 @@ let BIGNUM_SQR_P521_ALT_CORRECT = time prove let BIGNUM_SQR_P521_ALT_SUBROUTINE_CORRECT = time prove (`!z x n pc stackpointer returnaddress. aligned 16 stackpointer /\ - nonoverlapping (z,8 * 9) (word_sub stackpointer (word 80),80) /\ + nonoverlapping (z,8 * 9) (word_sub stackpointer (word 64),64) /\ ALLPAIRS nonoverlapping - [(z,8 * 9); (word_sub stackpointer (word 80),80)] - [(word pc,0x3c0); (x,8 * 9)] + [(z,8 * 9); (word_sub stackpointer (word 64),64)] + [(word pc,0x3bc); (x,8 * 9)] ==> ensures arm (\s. aligned_bytes_loaded s (word pc) bignum_sqr_p521_alt_mc /\ read PC s = word pc /\ @@ -493,8 +510,8 @@ let BIGNUM_SQR_P521_ALT_SUBROUTINE_CORRECT = time prove (MAYCHANGE [PC; X1; X2; X3; X4; X5; X6; X7; X8; X9; X10; X11; X12; X13; X14; X15; X16; X17] ,, MAYCHANGE [memory :> bytes(z,8 * 9); - memory :> bytes(word_sub stackpointer (word 80),80)] ,, + memory :> bytes(word_sub stackpointer (word 64),64)] ,, MAYCHANGE SOME_FLAGS)`, ARM_ADD_RETURN_STACK_TAC BIGNUM_SQR_P521_ALT_EXEC BIGNUM_SQR_P521_ALT_CORRECT - `[X19;X20;X21;X22;X23;X24;X25;X26;X27;X29]` 80);; + `[X19;X20;X21;X22;X23;X24;X25;X26]` 64);; From 047c0b1401610f9933a60ce0836143f9217ffa34 Mon Sep 17 00:00:00 2001 From: John Harrison Date: Thu, 21 Jul 2022 06:35:02 -0700 Subject: [PATCH 6/6] Add basic NIST P-521 point operations The same trio of a point doubling function, point addition function and point mixed addition function, this time for the P-521 curve, all using Jacobian coordinates, with input nondegeneracy assumed. --- arm/Makefile | 3 + arm/p521/Makefile | 5 +- arm/p521/p521_jadd.S | 808 +++ arm/p521/p521_jdouble.S | 1470 ++++++ arm/p521/p521_jmixadd.S | 797 +++ arm/proofs/p521_jadd.ml | 6471 +++++++++++++++++++++++ arm/proofs/p521_jdouble.ml | 4687 ++++++++++++++++ arm/proofs/p521_jmixadd.ml | 4743 +++++++++++++++++ benchmarks/benchmark.c | 7 + include/s2n-bignum-c89.h | 12 + include/s2n-bignum.h | 12 + tests/test.c | 192 +- x86/Makefile | 3 + x86/p521/Makefile | 5 +- x86/p521/p521_jadd.S | 765 +++ x86/p521/p521_jdouble.S | 1386 +++++ x86/p521/p521_jmixadd.S | 756 +++ x86/proofs/p521_jadd.ml | 9964 +++++++++++++++++++++++++++++++++++ x86/proofs/p521_jdouble.ml | 6614 +++++++++++++++++++++++ x86/proofs/p521_jmixadd.ml | 7171 +++++++++++++++++++++++++ x86/yesbmi_functions | 3 + x86_att/Makefile | 3 + x86_att/p521/p521_jadd.S | 765 +++ x86_att/p521/p521_jdouble.S | 1386 +++++ x86_att/p521/p521_jmixadd.S | 756 +++ 25 files changed, 48755 insertions(+), 29 deletions(-) create mode 100644 arm/p521/p521_jadd.S create mode 100644 arm/p521/p521_jdouble.S create mode 100644 arm/p521/p521_jmixadd.S create mode 100644 arm/proofs/p521_jadd.ml create mode 100644 arm/proofs/p521_jdouble.ml create mode 100644 arm/proofs/p521_jmixadd.ml create mode 100644 x86/p521/p521_jadd.S create mode 100644 x86/p521/p521_jdouble.S create mode 100644 x86/p521/p521_jmixadd.S create mode 100644 x86/proofs/p521_jadd.ml create mode 100644 x86/proofs/p521_jdouble.ml create mode 100644 x86/proofs/p521_jmixadd.ml create mode 100644 x86_att/p521/p521_jadd.S create mode 100644 x86_att/p521/p521_jdouble.S create mode 100644 x86_att/p521/p521_jmixadd.S diff --git a/arm/Makefile b/arm/Makefile index 7465649f6d..b4b885775c 100644 --- a/arm/Makefile +++ b/arm/Makefile @@ -243,6 +243,9 @@ OBJ = curve25519/bignum_add_p25519.o \ p521/bignum_tolebytes_p521.o \ p521/bignum_tomont_p521.o \ p521/bignum_triple_p521.o \ + p521/p521_jadd.o \ + p521/p521_jdouble.o \ + p521/p521_jmixadd.o \ secp256k1/bignum_add_p256k1.o \ secp256k1/bignum_cmul_p256k1.o \ secp256k1/bignum_deamont_p256k1.o \ diff --git a/arm/p521/Makefile b/arm/p521/Makefile index 921016115f..9ea36beb96 100644 --- a/arm/p521/Makefile +++ b/arm/p521/Makefile @@ -53,7 +53,10 @@ OBJ = bignum_add_p521.o \ bignum_sub_p521.o \ bignum_tolebytes_p521.o \ bignum_tomont_p521.o \ - bignum_triple_p521.o + bignum_triple_p521.o \ + p521_jadd.o \ + p521_jdouble.o \ + p521_jmixadd.o %.o : %.S ; $(CC) -E -I../../include $< | $(GAS) -o $@ - diff --git a/arm/p521/p521_jadd.S b/arm/p521/p521_jadd.S new file mode 100644 index 0000000000..85e62e01e7 --- /dev/null +++ b/arm/p521/p521_jadd.S @@ -0,0 +1,808 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +// ---------------------------------------------------------------------------- +// Point addition on NIST curve P-521 in Jacobian coordinates +// +// extern void p521_jadd +// (uint64_t p3[static 27],uint64_t p1[static 27],uint64_t p2[static 27]); +// +// Does p3 := p1 + p2 where all points are regarded as Jacobian triples. +// A Jacobian triple (x,y,z) represents affine point (x/z^2,y/z^3). +// It is assumed that all coordinates of the input points p1 and p2 are +// fully reduced mod p_521, that both z coordinates are nonzero and +// that neither p1 =~= p2 or p1 =~= -p2, where "=~=" means "represents +// the same affine point as". +// +// Standard ARM ABI: X0 = p3, X1 = p1, X2 = p2 +// ---------------------------------------------------------------------------- +#include "_internal_s2n_bignum.h" + + S2N_BN_SYM_VISIBILITY_DIRECTIVE(p521_jadd) + S2N_BN_SYM_PRIVACY_DIRECTIVE(p521_jadd) + + .text + .balign 4 + +// Size of individual field elements + +#define NUMSIZE 72 + +// Stable homes for input arguments during main code sequence + +#define input_z x26 +#define input_x x27 +#define input_y x28 + +// Pointer-offset pairs for inputs and outputs + +#define x_1 input_x, #0 +#define y_1 input_x, #NUMSIZE +#define z_1 input_x, #(2*NUMSIZE) + +#define x_2 input_y, #0 +#define y_2 input_y, #NUMSIZE +#define z_2 input_y, #(2*NUMSIZE) + +#define x_3 input_z, #0 +#define y_3 input_z, #NUMSIZE +#define z_3 input_z, #(2*NUMSIZE) + +// Pointer-offset pairs for temporaries, with some aliasing +// NSPACE is the total stack needed for these temporaries + +#define z1sq sp, #(NUMSIZE*0) +#define ww sp, #(NUMSIZE*0) + +#define yd sp, #(NUMSIZE*1) +#define y2a sp, #(NUMSIZE*1) + +#define x2a sp, #(NUMSIZE*2) +#define zzx2 sp, #(NUMSIZE*2) + +#define zz sp, #(NUMSIZE*3) +#define t1 sp, #(NUMSIZE*3) + +#define t2 sp, #(NUMSIZE*4) +#define x1a sp, #(NUMSIZE*4) +#define zzx1 sp, #(NUMSIZE*4) + +#define xd sp, #(NUMSIZE*5) +#define z2sq sp, #(NUMSIZE*5) + +#define y1a sp, #(NUMSIZE*6) + +// NUMSIZE*7 is not 16-aligned so we round it up + +#define NSPACE (NUMSIZE*7+8) + +// Corresponds exactly to bignum_mul_p521_alt + +#define mul_p521(P0,P1,P2) \ + ldp x3, x4, [P1]; \ + ldp x5, x6, [P2]; \ + mul x15, x3, x5; \ + umulh x16, x3, x5; \ + mul x14, x3, x6; \ + umulh x17, x3, x6; \ + adds x16, x16, x14; \ + ldp x7, x8, [P2+16]; \ + mul x14, x3, x7; \ + umulh x19, x3, x7; \ + adcs x17, x17, x14; \ + mul x14, x3, x8; \ + umulh x20, x3, x8; \ + adcs x19, x19, x14; \ + ldp x9, x10, [P2+32]; \ + mul x14, x3, x9; \ + umulh x21, x3, x9; \ + adcs x20, x20, x14; \ + mul x14, x3, x10; \ + umulh x22, x3, x10; \ + adcs x21, x21, x14; \ + ldp x11, x12, [P2+48]; \ + mul x14, x3, x11; \ + umulh x23, x3, x11; \ + adcs x22, x22, x14; \ + ldr x13, [P2+64]; \ + mul x14, x3, x12; \ + umulh x24, x3, x12; \ + adcs x23, x23, x14; \ + mul x14, x3, x13; \ + umulh x1, x3, x13; \ + adcs x24, x24, x14; \ + adc x1, x1, xzr; \ + mul x14, x4, x5; \ + adds x16, x16, x14; \ + mul x14, x4, x6; \ + adcs x17, x17, x14; \ + mul x14, x4, x7; \ + adcs x19, x19, x14; \ + mul x14, x4, x8; \ + adcs x20, x20, x14; \ + mul x14, x4, x9; \ + adcs x21, x21, x14; \ + mul x14, x4, x10; \ + adcs x22, x22, x14; \ + mul x14, x4, x11; \ + adcs x23, x23, x14; \ + mul x14, x4, x12; \ + adcs x24, x24, x14; \ + mul x14, x4, x13; \ + adcs x1, x1, x14; \ + cset x0, hs; \ + umulh x14, x4, x5; \ + adds x17, x17, x14; \ + umulh x14, x4, x6; \ + adcs x19, x19, x14; \ + umulh x14, x4, x7; \ + adcs x20, x20, x14; \ + umulh x14, x4, x8; \ + adcs x21, x21, x14; \ + umulh x14, x4, x9; \ + adcs x22, x22, x14; \ + umulh x14, x4, x10; \ + adcs x23, x23, x14; \ + umulh x14, x4, x11; \ + adcs x24, x24, x14; \ + umulh x14, x4, x12; \ + adcs x1, x1, x14; \ + umulh x14, x4, x13; \ + adc x0, x0, x14; \ + stp x15, x16, [P0]; \ + ldp x3, x4, [P1+16]; \ + mul x14, x3, x5; \ + adds x17, x17, x14; \ + mul x14, x3, x6; \ + adcs x19, x19, x14; \ + mul x14, x3, x7; \ + adcs x20, x20, x14; \ + mul x14, x3, x8; \ + adcs x21, x21, x14; \ + mul x14, x3, x9; \ + adcs x22, x22, x14; \ + mul x14, x3, x10; \ + adcs x23, x23, x14; \ + mul x14, x3, x11; \ + adcs x24, x24, x14; \ + mul x14, x3, x12; \ + adcs x1, x1, x14; \ + mul x14, x3, x13; \ + adcs x0, x0, x14; \ + cset x15, hs; \ + umulh x14, x3, x5; \ + adds x19, x19, x14; \ + umulh x14, x3, x6; \ + adcs x20, x20, x14; \ + umulh x14, x3, x7; \ + adcs x21, x21, x14; \ + umulh x14, x3, x8; \ + adcs x22, x22, x14; \ + umulh x14, x3, x9; \ + adcs x23, x23, x14; \ + umulh x14, x3, x10; \ + adcs x24, x24, x14; \ + umulh x14, x3, x11; \ + adcs x1, x1, x14; \ + umulh x14, x3, x12; \ + adcs x0, x0, x14; \ + umulh x14, x3, x13; \ + adc x15, x15, x14; \ + mul x14, x4, x5; \ + adds x19, x19, x14; \ + mul x14, x4, x6; \ + adcs x20, x20, x14; \ + mul x14, x4, x7; \ + adcs x21, x21, x14; \ + mul x14, x4, x8; \ + adcs x22, x22, x14; \ + mul x14, x4, x9; \ + adcs x23, x23, x14; \ + mul x14, x4, x10; \ + adcs x24, x24, x14; \ + mul x14, x4, x11; \ + adcs x1, x1, x14; \ + mul x14, x4, x12; \ + adcs x0, x0, x14; \ + mul x14, x4, x13; \ + adcs x15, x15, x14; \ + cset x16, hs; \ + umulh x14, x4, x5; \ + adds x20, x20, x14; \ + umulh x14, x4, x6; \ + adcs x21, x21, x14; \ + umulh x14, x4, x7; \ + adcs x22, x22, x14; \ + umulh x14, x4, x8; \ + adcs x23, x23, x14; \ + umulh x14, x4, x9; \ + adcs x24, x24, x14; \ + umulh x14, x4, x10; \ + adcs x1, x1, x14; \ + umulh x14, x4, x11; \ + adcs x0, x0, x14; \ + umulh x14, x4, x12; \ + adcs x15, x15, x14; \ + umulh x14, x4, x13; \ + adc x16, x16, x14; \ + stp x17, x19, [P0+16]; \ + ldp x3, x4, [P1+32]; \ + mul x14, x3, x5; \ + adds x20, x20, x14; \ + mul x14, x3, x6; \ + adcs x21, x21, x14; \ + mul x14, x3, x7; \ + adcs x22, x22, x14; \ + mul x14, x3, x8; \ + adcs x23, x23, x14; \ + mul x14, x3, x9; \ + adcs x24, x24, x14; \ + mul x14, x3, x10; \ + adcs x1, x1, x14; \ + mul x14, x3, x11; \ + adcs x0, x0, x14; \ + mul x14, x3, x12; \ + adcs x15, x15, x14; \ + mul x14, x3, x13; \ + adcs x16, x16, x14; \ + cset x17, hs; \ + umulh x14, x3, x5; \ + adds x21, x21, x14; \ + umulh x14, x3, x6; \ + adcs x22, x22, x14; \ + umulh x14, x3, x7; \ + adcs x23, x23, x14; \ + umulh x14, x3, x8; \ + adcs x24, x24, x14; \ + umulh x14, x3, x9; \ + adcs x1, x1, x14; \ + umulh x14, x3, x10; \ + adcs x0, x0, x14; \ + umulh x14, x3, x11; \ + adcs x15, x15, x14; \ + umulh x14, x3, x12; \ + adcs x16, x16, x14; \ + umulh x14, x3, x13; \ + adc x17, x17, x14; \ + mul x14, x4, x5; \ + adds x21, x21, x14; \ + mul x14, x4, x6; \ + adcs x22, x22, x14; \ + mul x14, x4, x7; \ + adcs x23, x23, x14; \ + mul x14, x4, x8; \ + adcs x24, x24, x14; \ + mul x14, x4, x9; \ + adcs x1, x1, x14; \ + mul x14, x4, x10; \ + adcs x0, x0, x14; \ + mul x14, x4, x11; \ + adcs x15, x15, x14; \ + mul x14, x4, x12; \ + adcs x16, x16, x14; \ + mul x14, x4, x13; \ + adcs x17, x17, x14; \ + cset x19, hs; \ + umulh x14, x4, x5; \ + adds x22, x22, x14; \ + umulh x14, x4, x6; \ + adcs x23, x23, x14; \ + umulh x14, x4, x7; \ + adcs x24, x24, x14; \ + umulh x14, x4, x8; \ + adcs x1, x1, x14; \ + umulh x14, x4, x9; \ + adcs x0, x0, x14; \ + umulh x14, x4, x10; \ + adcs x15, x15, x14; \ + umulh x14, x4, x11; \ + adcs x16, x16, x14; \ + umulh x14, x4, x12; \ + adcs x17, x17, x14; \ + umulh x14, x4, x13; \ + adc x19, x19, x14; \ + stp x20, x21, [P0+32]; \ + ldp x3, x4, [P1+48]; \ + mul x14, x3, x5; \ + adds x22, x22, x14; \ + mul x14, x3, x6; \ + adcs x23, x23, x14; \ + mul x14, x3, x7; \ + adcs x24, x24, x14; \ + mul x14, x3, x8; \ + adcs x1, x1, x14; \ + mul x14, x3, x9; \ + adcs x0, x0, x14; \ + mul x14, x3, x10; \ + adcs x15, x15, x14; \ + mul x14, x3, x11; \ + adcs x16, x16, x14; \ + mul x14, x3, x12; \ + adcs x17, x17, x14; \ + mul x14, x3, x13; \ + adcs x19, x19, x14; \ + cset x20, hs; \ + umulh x14, x3, x5; \ + adds x23, x23, x14; \ + umulh x14, x3, x6; \ + adcs x24, x24, x14; \ + umulh x14, x3, x7; \ + adcs x1, x1, x14; \ + umulh x14, x3, x8; \ + adcs x0, x0, x14; \ + umulh x14, x3, x9; \ + adcs x15, x15, x14; \ + umulh x14, x3, x10; \ + adcs x16, x16, x14; \ + umulh x14, x3, x11; \ + adcs x17, x17, x14; \ + umulh x14, x3, x12; \ + adcs x19, x19, x14; \ + umulh x14, x3, x13; \ + adc x20, x20, x14; \ + mul x14, x4, x5; \ + adds x23, x23, x14; \ + mul x14, x4, x6; \ + adcs x24, x24, x14; \ + mul x14, x4, x7; \ + adcs x1, x1, x14; \ + mul x14, x4, x8; \ + adcs x0, x0, x14; \ + mul x14, x4, x9; \ + adcs x15, x15, x14; \ + mul x14, x4, x10; \ + adcs x16, x16, x14; \ + mul x14, x4, x11; \ + adcs x17, x17, x14; \ + mul x14, x4, x12; \ + adcs x19, x19, x14; \ + mul x14, x4, x13; \ + adcs x20, x20, x14; \ + cset x21, hs; \ + umulh x14, x4, x5; \ + adds x24, x24, x14; \ + umulh x14, x4, x6; \ + adcs x1, x1, x14; \ + umulh x14, x4, x7; \ + adcs x0, x0, x14; \ + umulh x14, x4, x8; \ + adcs x15, x15, x14; \ + umulh x14, x4, x9; \ + adcs x16, x16, x14; \ + umulh x14, x4, x10; \ + adcs x17, x17, x14; \ + umulh x14, x4, x11; \ + adcs x19, x19, x14; \ + umulh x14, x4, x12; \ + adcs x20, x20, x14; \ + umulh x14, x4, x13; \ + adc x21, x21, x14; \ + stp x22, x23, [P0+48]; \ + ldr x3, [P1+64]; \ + mul x14, x3, x5; \ + adds x24, x24, x14; \ + mul x14, x3, x6; \ + adcs x1, x1, x14; \ + mul x14, x3, x7; \ + adcs x0, x0, x14; \ + mul x14, x3, x8; \ + adcs x15, x15, x14; \ + mul x14, x3, x9; \ + adcs x16, x16, x14; \ + mul x14, x3, x10; \ + adcs x17, x17, x14; \ + mul x14, x3, x11; \ + adcs x19, x19, x14; \ + mul x14, x3, x12; \ + adcs x20, x20, x14; \ + mul x14, x3, x13; \ + adc x21, x21, x14; \ + umulh x14, x3, x5; \ + adds x1, x1, x14; \ + umulh x14, x3, x6; \ + adcs x0, x0, x14; \ + umulh x14, x3, x7; \ + adcs x15, x15, x14; \ + umulh x14, x3, x8; \ + adcs x16, x16, x14; \ + umulh x14, x3, x9; \ + adcs x17, x17, x14; \ + umulh x14, x3, x10; \ + adcs x19, x19, x14; \ + umulh x14, x3, x11; \ + adcs x20, x20, x14; \ + umulh x14, x3, x12; \ + adc x21, x21, x14; \ + cmp xzr, xzr; \ + ldp x5, x6, [P0]; \ + extr x14, x1, x24, #9; \ + adcs x5, x5, x14; \ + extr x14, x0, x1, #9; \ + adcs x6, x6, x14; \ + ldp x7, x8, [P0+16]; \ + extr x14, x15, x0, #9; \ + adcs x7, x7, x14; \ + extr x14, x16, x15, #9; \ + adcs x8, x8, x14; \ + ldp x9, x10, [P0+32]; \ + extr x14, x17, x16, #9; \ + adcs x9, x9, x14; \ + extr x14, x19, x17, #9; \ + adcs x10, x10, x14; \ + ldp x11, x12, [P0+48]; \ + extr x14, x20, x19, #9; \ + adcs x11, x11, x14; \ + extr x14, x21, x20, #9; \ + adcs x12, x12, x14; \ + orr x13, x24, #0xfffffffffffffe00; \ + lsr x14, x21, #9; \ + adcs x13, x13, x14; \ + sbcs x5, x5, xzr; \ + sbcs x6, x6, xzr; \ + sbcs x7, x7, xzr; \ + sbcs x8, x8, xzr; \ + sbcs x9, x9, xzr; \ + sbcs x10, x10, xzr; \ + sbcs x11, x11, xzr; \ + sbcs x12, x12, xzr; \ + sbc x13, x13, xzr; \ + and x13, x13, #0x1ff; \ + stp x5, x6, [P0]; \ + stp x7, x8, [P0+16]; \ + stp x9, x10, [P0+32]; \ + stp x11, x12, [P0+48]; \ + str x13, [P0+64] + +// Corresponds exactly to bignum_sqr_p521_alt + +#define sqr_p521(P0,P1) \ + ldp x2, x3, [P1]; \ + mul x11, x2, x3; \ + umulh x12, x2, x3; \ + ldp x4, x5, [P1+16]; \ + mul x10, x2, x4; \ + umulh x13, x2, x4; \ + adds x12, x12, x10; \ + ldp x6, x7, [P1+32]; \ + mul x10, x2, x5; \ + umulh x14, x2, x5; \ + adcs x13, x13, x10; \ + ldp x8, x9, [P1+48]; \ + mul x10, x2, x6; \ + umulh x15, x2, x6; \ + adcs x14, x14, x10; \ + mul x10, x2, x7; \ + umulh x16, x2, x7; \ + adcs x15, x15, x10; \ + mul x10, x2, x8; \ + umulh x17, x2, x8; \ + adcs x16, x16, x10; \ + mul x10, x2, x9; \ + umulh x19, x2, x9; \ + adcs x17, x17, x10; \ + adc x19, x19, xzr; \ + mul x10, x3, x4; \ + adds x13, x13, x10; \ + mul x10, x3, x5; \ + adcs x14, x14, x10; \ + mul x10, x3, x6; \ + adcs x15, x15, x10; \ + mul x10, x3, x7; \ + adcs x16, x16, x10; \ + mul x10, x3, x8; \ + adcs x17, x17, x10; \ + mul x10, x3, x9; \ + adcs x19, x19, x10; \ + cset x20, hs; \ + umulh x10, x3, x4; \ + adds x14, x14, x10; \ + umulh x10, x3, x5; \ + adcs x15, x15, x10; \ + umulh x10, x3, x6; \ + adcs x16, x16, x10; \ + umulh x10, x3, x7; \ + adcs x17, x17, x10; \ + umulh x10, x3, x8; \ + adcs x19, x19, x10; \ + umulh x10, x3, x9; \ + adc x20, x20, x10; \ + mul x10, x6, x7; \ + umulh x21, x6, x7; \ + adds x20, x20, x10; \ + adc x21, x21, xzr; \ + mul x10, x4, x5; \ + adds x15, x15, x10; \ + mul x10, x4, x6; \ + adcs x16, x16, x10; \ + mul x10, x4, x7; \ + adcs x17, x17, x10; \ + mul x10, x4, x8; \ + adcs x19, x19, x10; \ + mul x10, x4, x9; \ + adcs x20, x20, x10; \ + mul x10, x6, x8; \ + adcs x21, x21, x10; \ + cset x22, hs; \ + umulh x10, x4, x5; \ + adds x16, x16, x10; \ + umulh x10, x4, x6; \ + adcs x17, x17, x10; \ + umulh x10, x4, x7; \ + adcs x19, x19, x10; \ + umulh x10, x4, x8; \ + adcs x20, x20, x10; \ + umulh x10, x4, x9; \ + adcs x21, x21, x10; \ + umulh x10, x6, x8; \ + adc x22, x22, x10; \ + mul x10, x7, x8; \ + umulh x23, x7, x8; \ + adds x22, x22, x10; \ + adc x23, x23, xzr; \ + mul x10, x5, x6; \ + adds x17, x17, x10; \ + mul x10, x5, x7; \ + adcs x19, x19, x10; \ + mul x10, x5, x8; \ + adcs x20, x20, x10; \ + mul x10, x5, x9; \ + adcs x21, x21, x10; \ + mul x10, x6, x9; \ + adcs x22, x22, x10; \ + mul x10, x7, x9; \ + adcs x23, x23, x10; \ + cset x24, hs; \ + umulh x10, x5, x6; \ + adds x19, x19, x10; \ + umulh x10, x5, x7; \ + adcs x20, x20, x10; \ + umulh x10, x5, x8; \ + adcs x21, x21, x10; \ + umulh x10, x5, x9; \ + adcs x22, x22, x10; \ + umulh x10, x6, x9; \ + adcs x23, x23, x10; \ + umulh x10, x7, x9; \ + adc x24, x24, x10; \ + mul x10, x8, x9; \ + umulh x25, x8, x9; \ + adds x24, x24, x10; \ + adc x25, x25, xzr; \ + adds x11, x11, x11; \ + adcs x12, x12, x12; \ + adcs x13, x13, x13; \ + adcs x14, x14, x14; \ + adcs x15, x15, x15; \ + adcs x16, x16, x16; \ + adcs x17, x17, x17; \ + adcs x19, x19, x19; \ + adcs x20, x20, x20; \ + adcs x21, x21, x21; \ + adcs x22, x22, x22; \ + adcs x23, x23, x23; \ + adcs x24, x24, x24; \ + adcs x25, x25, x25; \ + cset x0, hs; \ + umulh x10, x2, x2; \ + adds x11, x11, x10; \ + mul x10, x3, x3; \ + adcs x12, x12, x10; \ + umulh x10, x3, x3; \ + adcs x13, x13, x10; \ + mul x10, x4, x4; \ + adcs x14, x14, x10; \ + umulh x10, x4, x4; \ + adcs x15, x15, x10; \ + mul x10, x5, x5; \ + adcs x16, x16, x10; \ + umulh x10, x5, x5; \ + adcs x17, x17, x10; \ + mul x10, x6, x6; \ + adcs x19, x19, x10; \ + umulh x10, x6, x6; \ + adcs x20, x20, x10; \ + mul x10, x7, x7; \ + adcs x21, x21, x10; \ + umulh x10, x7, x7; \ + adcs x22, x22, x10; \ + mul x10, x8, x8; \ + adcs x23, x23, x10; \ + umulh x10, x8, x8; \ + adcs x24, x24, x10; \ + mul x10, x9, x9; \ + adcs x25, x25, x10; \ + umulh x10, x9, x9; \ + adc x0, x0, x10; \ + ldr x1, [P1+64]; \ + add x1, x1, x1; \ + mul x10, x1, x2; \ + adds x19, x19, x10; \ + umulh x10, x1, x2; \ + adcs x20, x20, x10; \ + mul x10, x1, x4; \ + adcs x21, x21, x10; \ + umulh x10, x1, x4; \ + adcs x22, x22, x10; \ + mul x10, x1, x6; \ + adcs x23, x23, x10; \ + umulh x10, x1, x6; \ + adcs x24, x24, x10; \ + mul x10, x1, x8; \ + adcs x25, x25, x10; \ + umulh x10, x1, x8; \ + adcs x0, x0, x10; \ + lsr x4, x1, #1; \ + mul x4, x4, x4; \ + adc x4, x4, xzr; \ + mul x10, x1, x3; \ + adds x20, x20, x10; \ + umulh x10, x1, x3; \ + adcs x21, x21, x10; \ + mul x10, x1, x5; \ + adcs x22, x22, x10; \ + umulh x10, x1, x5; \ + adcs x23, x23, x10; \ + mul x10, x1, x7; \ + adcs x24, x24, x10; \ + umulh x10, x1, x7; \ + adcs x25, x25, x10; \ + mul x10, x1, x9; \ + adcs x0, x0, x10; \ + umulh x10, x1, x9; \ + adc x4, x4, x10; \ + mul x2, x2, x2; \ + cmp xzr, xzr; \ + extr x10, x20, x19, #9; \ + adcs x2, x2, x10; \ + extr x10, x21, x20, #9; \ + adcs x11, x11, x10; \ + extr x10, x22, x21, #9; \ + adcs x12, x12, x10; \ + extr x10, x23, x22, #9; \ + adcs x13, x13, x10; \ + extr x10, x24, x23, #9; \ + adcs x14, x14, x10; \ + extr x10, x25, x24, #9; \ + adcs x15, x15, x10; \ + extr x10, x0, x25, #9; \ + adcs x16, x16, x10; \ + extr x10, x4, x0, #9; \ + adcs x17, x17, x10; \ + orr x19, x19, #0xfffffffffffffe00; \ + lsr x10, x4, #9; \ + adcs x19, x19, x10; \ + sbcs x2, x2, xzr; \ + sbcs x11, x11, xzr; \ + sbcs x12, x12, xzr; \ + sbcs x13, x13, xzr; \ + sbcs x14, x14, xzr; \ + sbcs x15, x15, xzr; \ + sbcs x16, x16, xzr; \ + sbcs x17, x17, xzr; \ + sbc x19, x19, xzr; \ + and x19, x19, #0x1ff; \ + stp x2, x11, [P0]; \ + stp x12, x13, [P0+16]; \ + stp x14, x15, [P0+32]; \ + stp x16, x17, [P0+48]; \ + str x19, [P0+64] + +// Corresponds exactly to bignum_sub_p521 + +#define sub_p521(P0,P1,P2) \ + ldp x5, x6, [P1]; \ + ldp x4, x3, [P2]; \ + subs x5, x5, x4; \ + sbcs x6, x6, x3; \ + ldp x7, x8, [P1+16]; \ + ldp x4, x3, [P2+16]; \ + sbcs x7, x7, x4; \ + sbcs x8, x8, x3; \ + ldp x9, x10, [P1+32]; \ + ldp x4, x3, [P2+32]; \ + sbcs x9, x9, x4; \ + sbcs x10, x10, x3; \ + ldp x11, x12, [P1+48]; \ + ldp x4, x3, [P2+48]; \ + sbcs x11, x11, x4; \ + sbcs x12, x12, x3; \ + ldr x13, [P1+64]; \ + ldr x4, [P2+64]; \ + sbcs x13, x13, x4; \ + sbcs x5, x5, xzr; \ + sbcs x6, x6, xzr; \ + sbcs x7, x7, xzr; \ + sbcs x8, x8, xzr; \ + sbcs x9, x9, xzr; \ + sbcs x10, x10, xzr; \ + sbcs x11, x11, xzr; \ + sbcs x12, x12, xzr; \ + sbcs x13, x13, xzr; \ + and x13, x13, #0x1ff; \ + stp x5, x6, [P0]; \ + stp x7, x8, [P0+16]; \ + stp x9, x10, [P0+32]; \ + stp x11, x12, [P0+48]; \ + str x13, [P0+64] + +S2N_BN_SYMBOL(p521_jadd): + +// Save regs and make room on stack for temporary variables + + stp x19, x20, [sp, #-16]! + stp x21, x22, [sp, #-16]! + stp x23, x24, [sp, #-16]! + stp x25, x26, [sp, #-16]! + stp x27, x28, [sp, #-16]! + sub sp, sp, NSPACE + +// Move the input arguments to stable places + + mov input_z, x0 + mov input_x, x1 + mov input_y, x2 + +// Main code, just a sequence of basic field operations + + sqr_p521(z1sq,z_1) + sqr_p521(z2sq,z_2) + + mul_p521(y1a,z_2,y_1) + mul_p521(y2a,z_1,y_2) + + mul_p521(x2a,z1sq,x_2) + mul_p521(x1a,z2sq,x_1) + mul_p521(y2a,z1sq,y2a) + mul_p521(y1a,z2sq,y1a) + + sub_p521(xd,x2a,x1a) + sub_p521(yd,y2a,y1a) + + sqr_p521(zz,xd) + sqr_p521(ww,yd) + + mul_p521(zzx1,zz,x1a) + mul_p521(zzx2,zz,x2a) + + sub_p521(x_3,ww,zzx1) + sub_p521(t1,zzx2,zzx1) + + mul_p521(xd,xd,z_1) + + sub_p521(x_3,x_3,zzx2) + + sub_p521(t2,zzx1,x_3) + + mul_p521(t1,t1,y1a) + mul_p521(z_3,xd,z_2) + mul_p521(t2,yd,t2) + + sub_p521(y_3,t2,t1) + +// Restore stack and registers + + add sp, sp, NSPACE + + ldp x27, x28, [sp], 16 + ldp x25, x26, [sp], 16 + ldp x23, x24, [sp], 16 + ldp x21, x22, [sp], 16 + ldp x19, x20, [sp], 16 + + ret + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack, "", %progbits +#endif diff --git a/arm/p521/p521_jdouble.S b/arm/p521/p521_jdouble.S new file mode 100644 index 0000000000..242b492a81 --- /dev/null +++ b/arm/p521/p521_jdouble.S @@ -0,0 +1,1470 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +// ---------------------------------------------------------------------------- +// Point doubling on NIST curve P-521 in Jacobian coordinates +// +// extern void p521_jdouble +// (uint64_t p3[static 27],uint64_t p1[static 27]); +// +// Does p3 := 2 * p1 where all points are regarded as Jacobian triples. +// A Jacobian triple (x,y,z) represents affine point (x/z^2,y/z^3). +// It is assumed that all coordinates of the input point are fully +// reduced mod p_521 and that the z coordinate is not zero. +// +// Standard ARM ABI: X0 = p3, X1 = p1 +// ---------------------------------------------------------------------------- +#include "_internal_s2n_bignum.h" + + S2N_BN_SYM_VISIBILITY_DIRECTIVE(p521_jdouble) + S2N_BN_SYM_PRIVACY_DIRECTIVE(p521_jdouble) + + .text + .balign 4 + +// Size of individual field elements + +#define NUMSIZE 72 + +// Stable homes for input arguments during main code sequence + +#define input_z x26 +#define input_x x27 + +// Pointer-offset pairs for inputs and outputs + +#define x_1 input_x, #0 +#define y_1 input_x, #NUMSIZE +#define z_1 input_x, #(2*NUMSIZE) + +#define x_3 input_z, #0 +#define y_3 input_z, #NUMSIZE +#define z_3 input_z, #(2*NUMSIZE) + +// Pointer-offset pairs for temporaries + +#define z2 sp, #(NUMSIZE*0) +#define y2 sp, #(NUMSIZE*1) +#define x2p sp, #(NUMSIZE*2) +#define xy2 sp, #(NUMSIZE*3) + +#define y4 sp, #(NUMSIZE*4) +#define t2 sp, #(NUMSIZE*4) + +#define dx2 sp, #(NUMSIZE*5) +#define t1 sp, #(NUMSIZE*5) + +#define d sp, #(NUMSIZE*6) +#define x4p sp, #(NUMSIZE*6) + +// NUMSIZE*7 is not 16-aligned so we round it up + +#define NSPACE (NUMSIZE*7+8) + +// Corresponds exactly to bignum_mul_p521_alt + +#define mul_p521(P0,P1,P2) \ + ldp x3, x4, [P1]; \ + ldp x5, x6, [P2]; \ + mul x15, x3, x5; \ + umulh x16, x3, x5; \ + mul x14, x3, x6; \ + umulh x17, x3, x6; \ + adds x16, x16, x14; \ + ldp x7, x8, [P2+16]; \ + mul x14, x3, x7; \ + umulh x19, x3, x7; \ + adcs x17, x17, x14; \ + mul x14, x3, x8; \ + umulh x20, x3, x8; \ + adcs x19, x19, x14; \ + ldp x9, x10, [P2+32]; \ + mul x14, x3, x9; \ + umulh x21, x3, x9; \ + adcs x20, x20, x14; \ + mul x14, x3, x10; \ + umulh x22, x3, x10; \ + adcs x21, x21, x14; \ + ldp x11, x12, [P2+48]; \ + mul x14, x3, x11; \ + umulh x23, x3, x11; \ + adcs x22, x22, x14; \ + ldr x13, [P2+64]; \ + mul x14, x3, x12; \ + umulh x24, x3, x12; \ + adcs x23, x23, x14; \ + mul x14, x3, x13; \ + umulh x1, x3, x13; \ + adcs x24, x24, x14; \ + adc x1, x1, xzr; \ + mul x14, x4, x5; \ + adds x16, x16, x14; \ + mul x14, x4, x6; \ + adcs x17, x17, x14; \ + mul x14, x4, x7; \ + adcs x19, x19, x14; \ + mul x14, x4, x8; \ + adcs x20, x20, x14; \ + mul x14, x4, x9; \ + adcs x21, x21, x14; \ + mul x14, x4, x10; \ + adcs x22, x22, x14; \ + mul x14, x4, x11; \ + adcs x23, x23, x14; \ + mul x14, x4, x12; \ + adcs x24, x24, x14; \ + mul x14, x4, x13; \ + adcs x1, x1, x14; \ + cset x0, hs; \ + umulh x14, x4, x5; \ + adds x17, x17, x14; \ + umulh x14, x4, x6; \ + adcs x19, x19, x14; \ + umulh x14, x4, x7; \ + adcs x20, x20, x14; \ + umulh x14, x4, x8; \ + adcs x21, x21, x14; \ + umulh x14, x4, x9; \ + adcs x22, x22, x14; \ + umulh x14, x4, x10; \ + adcs x23, x23, x14; \ + umulh x14, x4, x11; \ + adcs x24, x24, x14; \ + umulh x14, x4, x12; \ + adcs x1, x1, x14; \ + umulh x14, x4, x13; \ + adc x0, x0, x14; \ + stp x15, x16, [P0]; \ + ldp x3, x4, [P1+16]; \ + mul x14, x3, x5; \ + adds x17, x17, x14; \ + mul x14, x3, x6; \ + adcs x19, x19, x14; \ + mul x14, x3, x7; \ + adcs x20, x20, x14; \ + mul x14, x3, x8; \ + adcs x21, x21, x14; \ + mul x14, x3, x9; \ + adcs x22, x22, x14; \ + mul x14, x3, x10; \ + adcs x23, x23, x14; \ + mul x14, x3, x11; \ + adcs x24, x24, x14; \ + mul x14, x3, x12; \ + adcs x1, x1, x14; \ + mul x14, x3, x13; \ + adcs x0, x0, x14; \ + cset x15, hs; \ + umulh x14, x3, x5; \ + adds x19, x19, x14; \ + umulh x14, x3, x6; \ + adcs x20, x20, x14; \ + umulh x14, x3, x7; \ + adcs x21, x21, x14; \ + umulh x14, x3, x8; \ + adcs x22, x22, x14; \ + umulh x14, x3, x9; \ + adcs x23, x23, x14; \ + umulh x14, x3, x10; \ + adcs x24, x24, x14; \ + umulh x14, x3, x11; \ + adcs x1, x1, x14; \ + umulh x14, x3, x12; \ + adcs x0, x0, x14; \ + umulh x14, x3, x13; \ + adc x15, x15, x14; \ + mul x14, x4, x5; \ + adds x19, x19, x14; \ + mul x14, x4, x6; \ + adcs x20, x20, x14; \ + mul x14, x4, x7; \ + adcs x21, x21, x14; \ + mul x14, x4, x8; \ + adcs x22, x22, x14; \ + mul x14, x4, x9; \ + adcs x23, x23, x14; \ + mul x14, x4, x10; \ + adcs x24, x24, x14; \ + mul x14, x4, x11; \ + adcs x1, x1, x14; \ + mul x14, x4, x12; \ + adcs x0, x0, x14; \ + mul x14, x4, x13; \ + adcs x15, x15, x14; \ + cset x16, hs; \ + umulh x14, x4, x5; \ + adds x20, x20, x14; \ + umulh x14, x4, x6; \ + adcs x21, x21, x14; \ + umulh x14, x4, x7; \ + adcs x22, x22, x14; \ + umulh x14, x4, x8; \ + adcs x23, x23, x14; \ + umulh x14, x4, x9; \ + adcs x24, x24, x14; \ + umulh x14, x4, x10; \ + adcs x1, x1, x14; \ + umulh x14, x4, x11; \ + adcs x0, x0, x14; \ + umulh x14, x4, x12; \ + adcs x15, x15, x14; \ + umulh x14, x4, x13; \ + adc x16, x16, x14; \ + stp x17, x19, [P0+16]; \ + ldp x3, x4, [P1+32]; \ + mul x14, x3, x5; \ + adds x20, x20, x14; \ + mul x14, x3, x6; \ + adcs x21, x21, x14; \ + mul x14, x3, x7; \ + adcs x22, x22, x14; \ + mul x14, x3, x8; \ + adcs x23, x23, x14; \ + mul x14, x3, x9; \ + adcs x24, x24, x14; \ + mul x14, x3, x10; \ + adcs x1, x1, x14; \ + mul x14, x3, x11; \ + adcs x0, x0, x14; \ + mul x14, x3, x12; \ + adcs x15, x15, x14; \ + mul x14, x3, x13; \ + adcs x16, x16, x14; \ + cset x17, hs; \ + umulh x14, x3, x5; \ + adds x21, x21, x14; \ + umulh x14, x3, x6; \ + adcs x22, x22, x14; \ + umulh x14, x3, x7; \ + adcs x23, x23, x14; \ + umulh x14, x3, x8; \ + adcs x24, x24, x14; \ + umulh x14, x3, x9; \ + adcs x1, x1, x14; \ + umulh x14, x3, x10; \ + adcs x0, x0, x14; \ + umulh x14, x3, x11; \ + adcs x15, x15, x14; \ + umulh x14, x3, x12; \ + adcs x16, x16, x14; \ + umulh x14, x3, x13; \ + adc x17, x17, x14; \ + mul x14, x4, x5; \ + adds x21, x21, x14; \ + mul x14, x4, x6; \ + adcs x22, x22, x14; \ + mul x14, x4, x7; \ + adcs x23, x23, x14; \ + mul x14, x4, x8; \ + adcs x24, x24, x14; \ + mul x14, x4, x9; \ + adcs x1, x1, x14; \ + mul x14, x4, x10; \ + adcs x0, x0, x14; \ + mul x14, x4, x11; \ + adcs x15, x15, x14; \ + mul x14, x4, x12; \ + adcs x16, x16, x14; \ + mul x14, x4, x13; \ + adcs x17, x17, x14; \ + cset x19, hs; \ + umulh x14, x4, x5; \ + adds x22, x22, x14; \ + umulh x14, x4, x6; \ + adcs x23, x23, x14; \ + umulh x14, x4, x7; \ + adcs x24, x24, x14; \ + umulh x14, x4, x8; \ + adcs x1, x1, x14; \ + umulh x14, x4, x9; \ + adcs x0, x0, x14; \ + umulh x14, x4, x10; \ + adcs x15, x15, x14; \ + umulh x14, x4, x11; \ + adcs x16, x16, x14; \ + umulh x14, x4, x12; \ + adcs x17, x17, x14; \ + umulh x14, x4, x13; \ + adc x19, x19, x14; \ + stp x20, x21, [P0+32]; \ + ldp x3, x4, [P1+48]; \ + mul x14, x3, x5; \ + adds x22, x22, x14; \ + mul x14, x3, x6; \ + adcs x23, x23, x14; \ + mul x14, x3, x7; \ + adcs x24, x24, x14; \ + mul x14, x3, x8; \ + adcs x1, x1, x14; \ + mul x14, x3, x9; \ + adcs x0, x0, x14; \ + mul x14, x3, x10; \ + adcs x15, x15, x14; \ + mul x14, x3, x11; \ + adcs x16, x16, x14; \ + mul x14, x3, x12; \ + adcs x17, x17, x14; \ + mul x14, x3, x13; \ + adcs x19, x19, x14; \ + cset x20, hs; \ + umulh x14, x3, x5; \ + adds x23, x23, x14; \ + umulh x14, x3, x6; \ + adcs x24, x24, x14; \ + umulh x14, x3, x7; \ + adcs x1, x1, x14; \ + umulh x14, x3, x8; \ + adcs x0, x0, x14; \ + umulh x14, x3, x9; \ + adcs x15, x15, x14; \ + umulh x14, x3, x10; \ + adcs x16, x16, x14; \ + umulh x14, x3, x11; \ + adcs x17, x17, x14; \ + umulh x14, x3, x12; \ + adcs x19, x19, x14; \ + umulh x14, x3, x13; \ + adc x20, x20, x14; \ + mul x14, x4, x5; \ + adds x23, x23, x14; \ + mul x14, x4, x6; \ + adcs x24, x24, x14; \ + mul x14, x4, x7; \ + adcs x1, x1, x14; \ + mul x14, x4, x8; \ + adcs x0, x0, x14; \ + mul x14, x4, x9; \ + adcs x15, x15, x14; \ + mul x14, x4, x10; \ + adcs x16, x16, x14; \ + mul x14, x4, x11; \ + adcs x17, x17, x14; \ + mul x14, x4, x12; \ + adcs x19, x19, x14; \ + mul x14, x4, x13; \ + adcs x20, x20, x14; \ + cset x21, hs; \ + umulh x14, x4, x5; \ + adds x24, x24, x14; \ + umulh x14, x4, x6; \ + adcs x1, x1, x14; \ + umulh x14, x4, x7; \ + adcs x0, x0, x14; \ + umulh x14, x4, x8; \ + adcs x15, x15, x14; \ + umulh x14, x4, x9; \ + adcs x16, x16, x14; \ + umulh x14, x4, x10; \ + adcs x17, x17, x14; \ + umulh x14, x4, x11; \ + adcs x19, x19, x14; \ + umulh x14, x4, x12; \ + adcs x20, x20, x14; \ + umulh x14, x4, x13; \ + adc x21, x21, x14; \ + stp x22, x23, [P0+48]; \ + ldr x3, [P1+64]; \ + mul x14, x3, x5; \ + adds x24, x24, x14; \ + mul x14, x3, x6; \ + adcs x1, x1, x14; \ + mul x14, x3, x7; \ + adcs x0, x0, x14; \ + mul x14, x3, x8; \ + adcs x15, x15, x14; \ + mul x14, x3, x9; \ + adcs x16, x16, x14; \ + mul x14, x3, x10; \ + adcs x17, x17, x14; \ + mul x14, x3, x11; \ + adcs x19, x19, x14; \ + mul x14, x3, x12; \ + adcs x20, x20, x14; \ + mul x14, x3, x13; \ + adc x21, x21, x14; \ + umulh x14, x3, x5; \ + adds x1, x1, x14; \ + umulh x14, x3, x6; \ + adcs x0, x0, x14; \ + umulh x14, x3, x7; \ + adcs x15, x15, x14; \ + umulh x14, x3, x8; \ + adcs x16, x16, x14; \ + umulh x14, x3, x9; \ + adcs x17, x17, x14; \ + umulh x14, x3, x10; \ + adcs x19, x19, x14; \ + umulh x14, x3, x11; \ + adcs x20, x20, x14; \ + umulh x14, x3, x12; \ + adc x21, x21, x14; \ + cmp xzr, xzr; \ + ldp x5, x6, [P0]; \ + extr x14, x1, x24, #9; \ + adcs x5, x5, x14; \ + extr x14, x0, x1, #9; \ + adcs x6, x6, x14; \ + ldp x7, x8, [P0+16]; \ + extr x14, x15, x0, #9; \ + adcs x7, x7, x14; \ + extr x14, x16, x15, #9; \ + adcs x8, x8, x14; \ + ldp x9, x10, [P0+32]; \ + extr x14, x17, x16, #9; \ + adcs x9, x9, x14; \ + extr x14, x19, x17, #9; \ + adcs x10, x10, x14; \ + ldp x11, x12, [P0+48]; \ + extr x14, x20, x19, #9; \ + adcs x11, x11, x14; \ + extr x14, x21, x20, #9; \ + adcs x12, x12, x14; \ + orr x13, x24, #0xfffffffffffffe00; \ + lsr x14, x21, #9; \ + adcs x13, x13, x14; \ + sbcs x5, x5, xzr; \ + sbcs x6, x6, xzr; \ + sbcs x7, x7, xzr; \ + sbcs x8, x8, xzr; \ + sbcs x9, x9, xzr; \ + sbcs x10, x10, xzr; \ + sbcs x11, x11, xzr; \ + sbcs x12, x12, xzr; \ + sbc x13, x13, xzr; \ + and x13, x13, #0x1ff; \ + stp x5, x6, [P0]; \ + stp x7, x8, [P0+16]; \ + stp x9, x10, [P0+32]; \ + stp x11, x12, [P0+48]; \ + str x13, [P0+64] + +// Corresponds exactly to bignum_sqr_p521_alt + +#define sqr_p521(P0,P1) \ + ldp x2, x3, [P1]; \ + mul x11, x2, x3; \ + umulh x12, x2, x3; \ + ldp x4, x5, [P1+16]; \ + mul x10, x2, x4; \ + umulh x13, x2, x4; \ + adds x12, x12, x10; \ + ldp x6, x7, [P1+32]; \ + mul x10, x2, x5; \ + umulh x14, x2, x5; \ + adcs x13, x13, x10; \ + ldp x8, x9, [P1+48]; \ + mul x10, x2, x6; \ + umulh x15, x2, x6; \ + adcs x14, x14, x10; \ + mul x10, x2, x7; \ + umulh x16, x2, x7; \ + adcs x15, x15, x10; \ + mul x10, x2, x8; \ + umulh x17, x2, x8; \ + adcs x16, x16, x10; \ + mul x10, x2, x9; \ + umulh x19, x2, x9; \ + adcs x17, x17, x10; \ + adc x19, x19, xzr; \ + mul x10, x3, x4; \ + adds x13, x13, x10; \ + mul x10, x3, x5; \ + adcs x14, x14, x10; \ + mul x10, x3, x6; \ + adcs x15, x15, x10; \ + mul x10, x3, x7; \ + adcs x16, x16, x10; \ + mul x10, x3, x8; \ + adcs x17, x17, x10; \ + mul x10, x3, x9; \ + adcs x19, x19, x10; \ + cset x20, hs; \ + umulh x10, x3, x4; \ + adds x14, x14, x10; \ + umulh x10, x3, x5; \ + adcs x15, x15, x10; \ + umulh x10, x3, x6; \ + adcs x16, x16, x10; \ + umulh x10, x3, x7; \ + adcs x17, x17, x10; \ + umulh x10, x3, x8; \ + adcs x19, x19, x10; \ + umulh x10, x3, x9; \ + adc x20, x20, x10; \ + mul x10, x6, x7; \ + umulh x21, x6, x7; \ + adds x20, x20, x10; \ + adc x21, x21, xzr; \ + mul x10, x4, x5; \ + adds x15, x15, x10; \ + mul x10, x4, x6; \ + adcs x16, x16, x10; \ + mul x10, x4, x7; \ + adcs x17, x17, x10; \ + mul x10, x4, x8; \ + adcs x19, x19, x10; \ + mul x10, x4, x9; \ + adcs x20, x20, x10; \ + mul x10, x6, x8; \ + adcs x21, x21, x10; \ + cset x22, hs; \ + umulh x10, x4, x5; \ + adds x16, x16, x10; \ + umulh x10, x4, x6; \ + adcs x17, x17, x10; \ + umulh x10, x4, x7; \ + adcs x19, x19, x10; \ + umulh x10, x4, x8; \ + adcs x20, x20, x10; \ + umulh x10, x4, x9; \ + adcs x21, x21, x10; \ + umulh x10, x6, x8; \ + adc x22, x22, x10; \ + mul x10, x7, x8; \ + umulh x23, x7, x8; \ + adds x22, x22, x10; \ + adc x23, x23, xzr; \ + mul x10, x5, x6; \ + adds x17, x17, x10; \ + mul x10, x5, x7; \ + adcs x19, x19, x10; \ + mul x10, x5, x8; \ + adcs x20, x20, x10; \ + mul x10, x5, x9; \ + adcs x21, x21, x10; \ + mul x10, x6, x9; \ + adcs x22, x22, x10; \ + mul x10, x7, x9; \ + adcs x23, x23, x10; \ + cset x24, hs; \ + umulh x10, x5, x6; \ + adds x19, x19, x10; \ + umulh x10, x5, x7; \ + adcs x20, x20, x10; \ + umulh x10, x5, x8; \ + adcs x21, x21, x10; \ + umulh x10, x5, x9; \ + adcs x22, x22, x10; \ + umulh x10, x6, x9; \ + adcs x23, x23, x10; \ + umulh x10, x7, x9; \ + adc x24, x24, x10; \ + mul x10, x8, x9; \ + umulh x25, x8, x9; \ + adds x24, x24, x10; \ + adc x25, x25, xzr; \ + adds x11, x11, x11; \ + adcs x12, x12, x12; \ + adcs x13, x13, x13; \ + adcs x14, x14, x14; \ + adcs x15, x15, x15; \ + adcs x16, x16, x16; \ + adcs x17, x17, x17; \ + adcs x19, x19, x19; \ + adcs x20, x20, x20; \ + adcs x21, x21, x21; \ + adcs x22, x22, x22; \ + adcs x23, x23, x23; \ + adcs x24, x24, x24; \ + adcs x25, x25, x25; \ + cset x0, hs; \ + umulh x10, x2, x2; \ + adds x11, x11, x10; \ + mul x10, x3, x3; \ + adcs x12, x12, x10; \ + umulh x10, x3, x3; \ + adcs x13, x13, x10; \ + mul x10, x4, x4; \ + adcs x14, x14, x10; \ + umulh x10, x4, x4; \ + adcs x15, x15, x10; \ + mul x10, x5, x5; \ + adcs x16, x16, x10; \ + umulh x10, x5, x5; \ + adcs x17, x17, x10; \ + mul x10, x6, x6; \ + adcs x19, x19, x10; \ + umulh x10, x6, x6; \ + adcs x20, x20, x10; \ + mul x10, x7, x7; \ + adcs x21, x21, x10; \ + umulh x10, x7, x7; \ + adcs x22, x22, x10; \ + mul x10, x8, x8; \ + adcs x23, x23, x10; \ + umulh x10, x8, x8; \ + adcs x24, x24, x10; \ + mul x10, x9, x9; \ + adcs x25, x25, x10; \ + umulh x10, x9, x9; \ + adc x0, x0, x10; \ + ldr x1, [P1+64]; \ + add x1, x1, x1; \ + mul x10, x1, x2; \ + adds x19, x19, x10; \ + umulh x10, x1, x2; \ + adcs x20, x20, x10; \ + mul x10, x1, x4; \ + adcs x21, x21, x10; \ + umulh x10, x1, x4; \ + adcs x22, x22, x10; \ + mul x10, x1, x6; \ + adcs x23, x23, x10; \ + umulh x10, x1, x6; \ + adcs x24, x24, x10; \ + mul x10, x1, x8; \ + adcs x25, x25, x10; \ + umulh x10, x1, x8; \ + adcs x0, x0, x10; \ + lsr x4, x1, #1; \ + mul x4, x4, x4; \ + adc x4, x4, xzr; \ + mul x10, x1, x3; \ + adds x20, x20, x10; \ + umulh x10, x1, x3; \ + adcs x21, x21, x10; \ + mul x10, x1, x5; \ + adcs x22, x22, x10; \ + umulh x10, x1, x5; \ + adcs x23, x23, x10; \ + mul x10, x1, x7; \ + adcs x24, x24, x10; \ + umulh x10, x1, x7; \ + adcs x25, x25, x10; \ + mul x10, x1, x9; \ + adcs x0, x0, x10; \ + umulh x10, x1, x9; \ + adc x4, x4, x10; \ + mul x2, x2, x2; \ + cmp xzr, xzr; \ + extr x10, x20, x19, #9; \ + adcs x2, x2, x10; \ + extr x10, x21, x20, #9; \ + adcs x11, x11, x10; \ + extr x10, x22, x21, #9; \ + adcs x12, x12, x10; \ + extr x10, x23, x22, #9; \ + adcs x13, x13, x10; \ + extr x10, x24, x23, #9; \ + adcs x14, x14, x10; \ + extr x10, x25, x24, #9; \ + adcs x15, x15, x10; \ + extr x10, x0, x25, #9; \ + adcs x16, x16, x10; \ + extr x10, x4, x0, #9; \ + adcs x17, x17, x10; \ + orr x19, x19, #0xfffffffffffffe00; \ + lsr x10, x4, #9; \ + adcs x19, x19, x10; \ + sbcs x2, x2, xzr; \ + sbcs x11, x11, xzr; \ + sbcs x12, x12, xzr; \ + sbcs x13, x13, xzr; \ + sbcs x14, x14, xzr; \ + sbcs x15, x15, xzr; \ + sbcs x16, x16, xzr; \ + sbcs x17, x17, xzr; \ + sbc x19, x19, xzr; \ + and x19, x19, #0x1ff; \ + stp x2, x11, [P0]; \ + stp x12, x13, [P0+16]; \ + stp x14, x15, [P0+32]; \ + stp x16, x17, [P0+48]; \ + str x19, [P0+64] + +// Corresponds exactly to bignum_add_p521 + +#define add_p521(P0,P1,P2) \ + cmp xzr, xzr; \ + ldp x5, x6, [P1]; \ + ldp x4, x3, [P2]; \ + adcs x5, x5, x4; \ + adcs x6, x6, x3; \ + ldp x7, x8, [P1+16]; \ + ldp x4, x3, [P2+16]; \ + adcs x7, x7, x4; \ + adcs x8, x8, x3; \ + ldp x9, x10, [P1+32]; \ + ldp x4, x3, [P2+32]; \ + adcs x9, x9, x4; \ + adcs x10, x10, x3; \ + ldp x11, x12, [P1+48]; \ + ldp x4, x3, [P2+48]; \ + adcs x11, x11, x4; \ + adcs x12, x12, x3; \ + ldr x13, [P1+64]; \ + ldr x4, [P2+64]; \ + adc x13, x13, x4; \ + subs x4, x13, #512; \ + csetm x4, hs; \ + sbcs x5, x5, xzr; \ + and x4, x4, #0x200; \ + sbcs x6, x6, xzr; \ + sbcs x7, x7, xzr; \ + sbcs x8, x8, xzr; \ + sbcs x9, x9, xzr; \ + sbcs x10, x10, xzr; \ + sbcs x11, x11, xzr; \ + sbcs x12, x12, xzr; \ + sbc x13, x13, x4; \ + stp x5, x6, [P0]; \ + stp x7, x8, [P0+16]; \ + stp x9, x10, [P0+32]; \ + stp x11, x12, [P0+48]; \ + str x13, [P0+64] + +// Corresponds exactly to bignum_sub_p521 + +#define sub_p521(P0,P1,P2) \ + ldp x5, x6, [P1]; \ + ldp x4, x3, [P2]; \ + subs x5, x5, x4; \ + sbcs x6, x6, x3; \ + ldp x7, x8, [P1+16]; \ + ldp x4, x3, [P2+16]; \ + sbcs x7, x7, x4; \ + sbcs x8, x8, x3; \ + ldp x9, x10, [P1+32]; \ + ldp x4, x3, [P2+32]; \ + sbcs x9, x9, x4; \ + sbcs x10, x10, x3; \ + ldp x11, x12, [P1+48]; \ + ldp x4, x3, [P2+48]; \ + sbcs x11, x11, x4; \ + sbcs x12, x12, x3; \ + ldr x13, [P1+64]; \ + ldr x4, [P2+64]; \ + sbcs x13, x13, x4; \ + sbcs x5, x5, xzr; \ + sbcs x6, x6, xzr; \ + sbcs x7, x7, xzr; \ + sbcs x8, x8, xzr; \ + sbcs x9, x9, xzr; \ + sbcs x10, x10, xzr; \ + sbcs x11, x11, xzr; \ + sbcs x12, x12, xzr; \ + sbcs x13, x13, xzr; \ + and x13, x13, #0x1ff; \ + stp x5, x6, [P0]; \ + stp x7, x8, [P0+16]; \ + stp x9, x10, [P0+32]; \ + stp x11, x12, [P0+48]; \ + str x13, [P0+64] + +// Weak multiplication not fully reducing + +#define weakmul_p521(P0,P1,P2) \ + ldp x3, x4, [P1]; \ + ldp x5, x6, [P2]; \ + mul x15, x3, x5; \ + umulh x16, x3, x5; \ + mul x14, x3, x6; \ + umulh x17, x3, x6; \ + adds x16, x16, x14; \ + ldp x7, x8, [P2+16]; \ + mul x14, x3, x7; \ + umulh x19, x3, x7; \ + adcs x17, x17, x14; \ + mul x14, x3, x8; \ + umulh x20, x3, x8; \ + adcs x19, x19, x14; \ + ldp x9, x10, [P2+32]; \ + mul x14, x3, x9; \ + umulh x21, x3, x9; \ + adcs x20, x20, x14; \ + mul x14, x3, x10; \ + umulh x22, x3, x10; \ + adcs x21, x21, x14; \ + ldp x11, x12, [P2+48]; \ + mul x14, x3, x11; \ + umulh x23, x3, x11; \ + adcs x22, x22, x14; \ + ldr x13, [P2+64]; \ + mul x14, x3, x12; \ + umulh x24, x3, x12; \ + adcs x23, x23, x14; \ + mul x14, x3, x13; \ + umulh x1, x3, x13; \ + adcs x24, x24, x14; \ + adc x1, x1, xzr; \ + mul x14, x4, x5; \ + adds x16, x16, x14; \ + mul x14, x4, x6; \ + adcs x17, x17, x14; \ + mul x14, x4, x7; \ + adcs x19, x19, x14; \ + mul x14, x4, x8; \ + adcs x20, x20, x14; \ + mul x14, x4, x9; \ + adcs x21, x21, x14; \ + mul x14, x4, x10; \ + adcs x22, x22, x14; \ + mul x14, x4, x11; \ + adcs x23, x23, x14; \ + mul x14, x4, x12; \ + adcs x24, x24, x14; \ + mul x14, x4, x13; \ + adcs x1, x1, x14; \ + cset x0, hs; \ + umulh x14, x4, x5; \ + adds x17, x17, x14; \ + umulh x14, x4, x6; \ + adcs x19, x19, x14; \ + umulh x14, x4, x7; \ + adcs x20, x20, x14; \ + umulh x14, x4, x8; \ + adcs x21, x21, x14; \ + umulh x14, x4, x9; \ + adcs x22, x22, x14; \ + umulh x14, x4, x10; \ + adcs x23, x23, x14; \ + umulh x14, x4, x11; \ + adcs x24, x24, x14; \ + umulh x14, x4, x12; \ + adcs x1, x1, x14; \ + umulh x14, x4, x13; \ + adc x0, x0, x14; \ + stp x15, x16, [P0]; \ + ldp x3, x4, [P1+16]; \ + mul x14, x3, x5; \ + adds x17, x17, x14; \ + mul x14, x3, x6; \ + adcs x19, x19, x14; \ + mul x14, x3, x7; \ + adcs x20, x20, x14; \ + mul x14, x3, x8; \ + adcs x21, x21, x14; \ + mul x14, x3, x9; \ + adcs x22, x22, x14; \ + mul x14, x3, x10; \ + adcs x23, x23, x14; \ + mul x14, x3, x11; \ + adcs x24, x24, x14; \ + mul x14, x3, x12; \ + adcs x1, x1, x14; \ + mul x14, x3, x13; \ + adcs x0, x0, x14; \ + cset x15, hs; \ + umulh x14, x3, x5; \ + adds x19, x19, x14; \ + umulh x14, x3, x6; \ + adcs x20, x20, x14; \ + umulh x14, x3, x7; \ + adcs x21, x21, x14; \ + umulh x14, x3, x8; \ + adcs x22, x22, x14; \ + umulh x14, x3, x9; \ + adcs x23, x23, x14; \ + umulh x14, x3, x10; \ + adcs x24, x24, x14; \ + umulh x14, x3, x11; \ + adcs x1, x1, x14; \ + umulh x14, x3, x12; \ + adcs x0, x0, x14; \ + umulh x14, x3, x13; \ + adc x15, x15, x14; \ + mul x14, x4, x5; \ + adds x19, x19, x14; \ + mul x14, x4, x6; \ + adcs x20, x20, x14; \ + mul x14, x4, x7; \ + adcs x21, x21, x14; \ + mul x14, x4, x8; \ + adcs x22, x22, x14; \ + mul x14, x4, x9; \ + adcs x23, x23, x14; \ + mul x14, x4, x10; \ + adcs x24, x24, x14; \ + mul x14, x4, x11; \ + adcs x1, x1, x14; \ + mul x14, x4, x12; \ + adcs x0, x0, x14; \ + mul x14, x4, x13; \ + adcs x15, x15, x14; \ + cset x16, hs; \ + umulh x14, x4, x5; \ + adds x20, x20, x14; \ + umulh x14, x4, x6; \ + adcs x21, x21, x14; \ + umulh x14, x4, x7; \ + adcs x22, x22, x14; \ + umulh x14, x4, x8; \ + adcs x23, x23, x14; \ + umulh x14, x4, x9; \ + adcs x24, x24, x14; \ + umulh x14, x4, x10; \ + adcs x1, x1, x14; \ + umulh x14, x4, x11; \ + adcs x0, x0, x14; \ + umulh x14, x4, x12; \ + adcs x15, x15, x14; \ + umulh x14, x4, x13; \ + adc x16, x16, x14; \ + stp x17, x19, [P0+16]; \ + ldp x3, x4, [P1+32]; \ + mul x14, x3, x5; \ + adds x20, x20, x14; \ + mul x14, x3, x6; \ + adcs x21, x21, x14; \ + mul x14, x3, x7; \ + adcs x22, x22, x14; \ + mul x14, x3, x8; \ + adcs x23, x23, x14; \ + mul x14, x3, x9; \ + adcs x24, x24, x14; \ + mul x14, x3, x10; \ + adcs x1, x1, x14; \ + mul x14, x3, x11; \ + adcs x0, x0, x14; \ + mul x14, x3, x12; \ + adcs x15, x15, x14; \ + mul x14, x3, x13; \ + adcs x16, x16, x14; \ + cset x17, hs; \ + umulh x14, x3, x5; \ + adds x21, x21, x14; \ + umulh x14, x3, x6; \ + adcs x22, x22, x14; \ + umulh x14, x3, x7; \ + adcs x23, x23, x14; \ + umulh x14, x3, x8; \ + adcs x24, x24, x14; \ + umulh x14, x3, x9; \ + adcs x1, x1, x14; \ + umulh x14, x3, x10; \ + adcs x0, x0, x14; \ + umulh x14, x3, x11; \ + adcs x15, x15, x14; \ + umulh x14, x3, x12; \ + adcs x16, x16, x14; \ + umulh x14, x3, x13; \ + adc x17, x17, x14; \ + mul x14, x4, x5; \ + adds x21, x21, x14; \ + mul x14, x4, x6; \ + adcs x22, x22, x14; \ + mul x14, x4, x7; \ + adcs x23, x23, x14; \ + mul x14, x4, x8; \ + adcs x24, x24, x14; \ + mul x14, x4, x9; \ + adcs x1, x1, x14; \ + mul x14, x4, x10; \ + adcs x0, x0, x14; \ + mul x14, x4, x11; \ + adcs x15, x15, x14; \ + mul x14, x4, x12; \ + adcs x16, x16, x14; \ + mul x14, x4, x13; \ + adcs x17, x17, x14; \ + cset x19, hs; \ + umulh x14, x4, x5; \ + adds x22, x22, x14; \ + umulh x14, x4, x6; \ + adcs x23, x23, x14; \ + umulh x14, x4, x7; \ + adcs x24, x24, x14; \ + umulh x14, x4, x8; \ + adcs x1, x1, x14; \ + umulh x14, x4, x9; \ + adcs x0, x0, x14; \ + umulh x14, x4, x10; \ + adcs x15, x15, x14; \ + umulh x14, x4, x11; \ + adcs x16, x16, x14; \ + umulh x14, x4, x12; \ + adcs x17, x17, x14; \ + umulh x14, x4, x13; \ + adc x19, x19, x14; \ + stp x20, x21, [P0+32]; \ + ldp x3, x4, [P1+48]; \ + mul x14, x3, x5; \ + adds x22, x22, x14; \ + mul x14, x3, x6; \ + adcs x23, x23, x14; \ + mul x14, x3, x7; \ + adcs x24, x24, x14; \ + mul x14, x3, x8; \ + adcs x1, x1, x14; \ + mul x14, x3, x9; \ + adcs x0, x0, x14; \ + mul x14, x3, x10; \ + adcs x15, x15, x14; \ + mul x14, x3, x11; \ + adcs x16, x16, x14; \ + mul x14, x3, x12; \ + adcs x17, x17, x14; \ + mul x14, x3, x13; \ + adcs x19, x19, x14; \ + cset x20, hs; \ + umulh x14, x3, x5; \ + adds x23, x23, x14; \ + umulh x14, x3, x6; \ + adcs x24, x24, x14; \ + umulh x14, x3, x7; \ + adcs x1, x1, x14; \ + umulh x14, x3, x8; \ + adcs x0, x0, x14; \ + umulh x14, x3, x9; \ + adcs x15, x15, x14; \ + umulh x14, x3, x10; \ + adcs x16, x16, x14; \ + umulh x14, x3, x11; \ + adcs x17, x17, x14; \ + umulh x14, x3, x12; \ + adcs x19, x19, x14; \ + umulh x14, x3, x13; \ + adc x20, x20, x14; \ + mul x14, x4, x5; \ + adds x23, x23, x14; \ + mul x14, x4, x6; \ + adcs x24, x24, x14; \ + mul x14, x4, x7; \ + adcs x1, x1, x14; \ + mul x14, x4, x8; \ + adcs x0, x0, x14; \ + mul x14, x4, x9; \ + adcs x15, x15, x14; \ + mul x14, x4, x10; \ + adcs x16, x16, x14; \ + mul x14, x4, x11; \ + adcs x17, x17, x14; \ + mul x14, x4, x12; \ + adcs x19, x19, x14; \ + mul x14, x4, x13; \ + adcs x20, x20, x14; \ + cset x21, hs; \ + umulh x14, x4, x5; \ + adds x24, x24, x14; \ + umulh x14, x4, x6; \ + adcs x1, x1, x14; \ + umulh x14, x4, x7; \ + adcs x0, x0, x14; \ + umulh x14, x4, x8; \ + adcs x15, x15, x14; \ + umulh x14, x4, x9; \ + adcs x16, x16, x14; \ + umulh x14, x4, x10; \ + adcs x17, x17, x14; \ + umulh x14, x4, x11; \ + adcs x19, x19, x14; \ + umulh x14, x4, x12; \ + adcs x20, x20, x14; \ + umulh x14, x4, x13; \ + adc x21, x21, x14; \ + stp x22, x23, [P0+48]; \ + ldr x3, [P1+64]; \ + mul x14, x3, x5; \ + adds x24, x24, x14; \ + mul x14, x3, x6; \ + adcs x1, x1, x14; \ + mul x14, x3, x7; \ + adcs x0, x0, x14; \ + mul x14, x3, x8; \ + adcs x15, x15, x14; \ + mul x14, x3, x9; \ + adcs x16, x16, x14; \ + mul x14, x3, x10; \ + adcs x17, x17, x14; \ + mul x14, x3, x11; \ + adcs x19, x19, x14; \ + mul x14, x3, x12; \ + adcs x20, x20, x14; \ + mul x14, x3, x13; \ + adc x21, x21, x14; \ + umulh x14, x3, x5; \ + adds x1, x1, x14; \ + umulh x14, x3, x6; \ + adcs x0, x0, x14; \ + umulh x14, x3, x7; \ + adcs x15, x15, x14; \ + umulh x14, x3, x8; \ + adcs x16, x16, x14; \ + umulh x14, x3, x9; \ + adcs x17, x17, x14; \ + umulh x14, x3, x10; \ + adcs x19, x19, x14; \ + umulh x14, x3, x11; \ + adcs x20, x20, x14; \ + umulh x14, x3, x12; \ + adc x21, x21, x14; \ + ldp x5, x6, [P0]; \ + extr x14, x1, x24, #9; \ + adds x5, x5, x14; \ + extr x14, x0, x1, #9; \ + adcs x6, x6, x14; \ + ldp x7, x8, [P0+16]; \ + extr x14, x15, x0, #9; \ + adcs x7, x7, x14; \ + extr x14, x16, x15, #9; \ + adcs x8, x8, x14; \ + ldp x9, x10, [P0+32]; \ + extr x14, x17, x16, #9; \ + adcs x9, x9, x14; \ + extr x14, x19, x17, #9; \ + adcs x10, x10, x14; \ + ldp x11, x12, [P0+48]; \ + extr x14, x20, x19, #9; \ + adcs x11, x11, x14; \ + extr x14, x21, x20, #9; \ + adcs x12, x12, x14; \ + and x13, x24, #0x1ff; \ + lsr x14, x21, #9; \ + adc x13, x13, x14; \ + stp x5, x6, [P0]; \ + stp x7, x8, [P0+16]; \ + stp x9, x10, [P0+32]; \ + stp x11, x12, [P0+48]; \ + str x13, [P0+64] + +// P0 = C * P1 - D * P2 == C * P1 + D * (p_521 - P2) + +#define cmsub_p521(P0,C,P1,D,P2) \ + ldp x6, x7, [P1]; \ + mov x1, #(C); \ + mul x3, x1, x6; \ + mul x4, x1, x7; \ + umulh x6, x1, x6; \ + adds x4, x4, x6; \ + umulh x7, x1, x7; \ + ldp x8, x9, [P1+16]; \ + mul x5, x1, x8; \ + mul x6, x1, x9; \ + umulh x8, x1, x8; \ + adcs x5, x5, x7; \ + umulh x9, x1, x9; \ + adcs x6, x6, x8; \ + ldp x10, x11, [P1+32]; \ + mul x7, x1, x10; \ + mul x8, x1, x11; \ + umulh x10, x1, x10; \ + adcs x7, x7, x9; \ + umulh x11, x1, x11; \ + adcs x8, x8, x10; \ + ldp x12, x13, [P1+48]; \ + mul x9, x1, x12; \ + mul x10, x1, x13; \ + umulh x12, x1, x12; \ + adcs x9, x9, x11; \ + umulh x13, x1, x13; \ + adcs x10, x10, x12; \ + ldr x14, [P1+64]; \ + mul x11, x1, x14; \ + adc x11, x11, x13; \ + mov x1, #(D); \ + ldp x20, x21, [P2]; \ + mvn x20, x20; \ + mul x0, x1, x20; \ + umulh x20, x1, x20; \ + adds x3, x3, x0; \ + mvn x21, x21; \ + mul x0, x1, x21; \ + umulh x21, x1, x21; \ + adcs x4, x4, x0; \ + ldp x22, x23, [P2+16]; \ + mvn x22, x22; \ + mul x0, x1, x22; \ + umulh x22, x1, x22; \ + adcs x5, x5, x0; \ + mvn x23, x23; \ + mul x0, x1, x23; \ + umulh x23, x1, x23; \ + adcs x6, x6, x0; \ + ldp x17, x19, [P2+32]; \ + mvn x17, x17; \ + mul x0, x1, x17; \ + umulh x17, x1, x17; \ + adcs x7, x7, x0; \ + mvn x19, x19; \ + mul x0, x1, x19; \ + umulh x19, x1, x19; \ + adcs x8, x8, x0; \ + ldp x2, x16, [P2+48]; \ + mvn x2, x2; \ + mul x0, x1, x2; \ + umulh x2, x1, x2; \ + adcs x9, x9, x0; \ + mvn x16, x16; \ + mul x0, x1, x16; \ + umulh x16, x1, x16; \ + adcs x10, x10, x0; \ + ldr x0, [P2+64]; \ + eor x0, x0, #0x1ff; \ + mul x0, x1, x0; \ + adc x11, x11, x0; \ + adds x4, x4, x20; \ + adcs x5, x5, x21; \ + and x15, x4, x5; \ + adcs x6, x6, x22; \ + and x15, x15, x6; \ + adcs x7, x7, x23; \ + and x15, x15, x7; \ + adcs x8, x8, x17; \ + and x15, x15, x8; \ + adcs x9, x9, x19; \ + and x15, x15, x9; \ + adcs x10, x10, x2; \ + and x15, x15, x10; \ + adc x11, x11, x16; \ + lsr x12, x11, #9; \ + orr x11, x11, #0xfffffffffffffe00; \ + cmp xzr, xzr; \ + adcs xzr, x3, x12; \ + adcs xzr, x15, xzr; \ + adcs xzr, x11, xzr; \ + adcs x3, x3, x12; \ + adcs x4, x4, xzr; \ + adcs x5, x5, xzr; \ + adcs x6, x6, xzr; \ + adcs x7, x7, xzr; \ + adcs x8, x8, xzr; \ + adcs x9, x9, xzr; \ + adcs x10, x10, xzr; \ + adc x11, x11, xzr; \ + and x11, x11, #0x1ff; \ + stp x3, x4, [P0]; \ + stp x5, x6, [P0+16]; \ + stp x7, x8, [P0+32]; \ + stp x9, x10, [P0+48]; \ + str x11, [P0+64] + +// P0 = 3 * P1 - 8 * P2 == 3 * P1 + 8 * (p_521 - P2) + +#define cmsub38_p521(P0,P1,P2) \ + ldp x6, x7, [P1]; \ + lsl x3, x6, #1; \ + adds x3, x3, x6; \ + extr x4, x7, x6, #63; \ + adcs x4, x4, x7; \ + ldp x8, x9, [P1+16]; \ + extr x5, x8, x7, #63; \ + adcs x5, x5, x8; \ + extr x6, x9, x8, #63; \ + adcs x6, x6, x9; \ + ldp x10, x11, [P1+32]; \ + extr x7, x10, x9, #63; \ + adcs x7, x7, x10; \ + extr x8, x11, x10, #63; \ + adcs x8, x8, x11; \ + ldp x12, x13, [P1+48]; \ + extr x9, x12, x11, #63; \ + adcs x9, x9, x12; \ + extr x10, x13, x12, #63; \ + adcs x10, x10, x13; \ + ldr x14, [P1+64]; \ + extr x11, x14, x13, #63; \ + adc x11, x11, x14; \ + ldp x20, x21, [P2]; \ + mvn x20, x20; \ + lsl x0, x20, #3; \ + adds x3, x3, x0; \ + mvn x21, x21; \ + extr x0, x21, x20, #61; \ + adcs x4, x4, x0; \ + ldp x22, x23, [P2+16]; \ + mvn x22, x22; \ + extr x0, x22, x21, #61; \ + adcs x5, x5, x0; \ + and x15, x4, x5; \ + mvn x23, x23; \ + extr x0, x23, x22, #61; \ + adcs x6, x6, x0; \ + and x15, x15, x6; \ + ldp x20, x21, [P2+32]; \ + mvn x20, x20; \ + extr x0, x20, x23, #61; \ + adcs x7, x7, x0; \ + and x15, x15, x7; \ + mvn x21, x21; \ + extr x0, x21, x20, #61; \ + adcs x8, x8, x0; \ + and x15, x15, x8; \ + ldp x22, x23, [P2+48]; \ + mvn x22, x22; \ + extr x0, x22, x21, #61; \ + adcs x9, x9, x0; \ + and x15, x15, x9; \ + mvn x23, x23; \ + extr x0, x23, x22, #61; \ + adcs x10, x10, x0; \ + and x15, x15, x10; \ + ldr x0, [P2+64]; \ + eor x0, x0, #0x1ff; \ + extr x0, x0, x23, #61; \ + adc x11, x11, x0; \ + lsr x12, x11, #9; \ + orr x11, x11, #0xfffffffffffffe00; \ + cmp xzr, xzr; \ + adcs xzr, x3, x12; \ + adcs xzr, x15, xzr; \ + adcs xzr, x11, xzr; \ + adcs x3, x3, x12; \ + adcs x4, x4, xzr; \ + adcs x5, x5, xzr; \ + adcs x6, x6, xzr; \ + adcs x7, x7, xzr; \ + adcs x8, x8, xzr; \ + adcs x9, x9, xzr; \ + adcs x10, x10, xzr; \ + adc x11, x11, xzr; \ + and x11, x11, #0x1ff; \ + stp x3, x4, [P0]; \ + stp x5, x6, [P0+16]; \ + stp x7, x8, [P0+32]; \ + stp x9, x10, [P0+48]; \ + str x11, [P0+64] + +// P0 = 4 * P1 - P2 = 4 * P1 + (p_521 - P2) + +#define cmsub41_p521(P0,P1,P2) \ + ldp x6, x7, [P1]; \ + lsl x3, x6, #2; \ + extr x4, x7, x6, #62; \ + ldp x8, x9, [P1+16]; \ + extr x5, x8, x7, #62; \ + extr x6, x9, x8, #62; \ + ldp x10, x11, [P1+32]; \ + extr x7, x10, x9, #62; \ + extr x8, x11, x10, #62; \ + ldp x12, x13, [P1+48]; \ + extr x9, x12, x11, #62; \ + extr x10, x13, x12, #62; \ + ldr x14, [P1+64]; \ + extr x11, x14, x13, #62; \ + ldp x0, x1, [P2]; \ + mvn x0, x0; \ + adds x3, x3, x0; \ + sbcs x4, x4, x1; \ + ldp x0, x1, [P2+16]; \ + sbcs x5, x5, x0; \ + and x15, x4, x5; \ + sbcs x6, x6, x1; \ + and x15, x15, x6; \ + ldp x0, x1, [P2+32]; \ + sbcs x7, x7, x0; \ + and x15, x15, x7; \ + sbcs x8, x8, x1; \ + and x15, x15, x8; \ + ldp x0, x1, [P2+48]; \ + sbcs x9, x9, x0; \ + and x15, x15, x9; \ + sbcs x10, x10, x1; \ + and x15, x15, x10; \ + ldr x0, [P2+64]; \ + eor x0, x0, #0x1ff; \ + adc x11, x11, x0; \ + lsr x12, x11, #9; \ + orr x11, x11, #0xfffffffffffffe00; \ + cmp xzr, xzr; \ + adcs xzr, x3, x12; \ + adcs xzr, x15, xzr; \ + adcs xzr, x11, xzr; \ + adcs x3, x3, x12; \ + adcs x4, x4, xzr; \ + adcs x5, x5, xzr; \ + adcs x6, x6, xzr; \ + adcs x7, x7, xzr; \ + adcs x8, x8, xzr; \ + adcs x9, x9, xzr; \ + adcs x10, x10, xzr; \ + adc x11, x11, xzr; \ + and x11, x11, #0x1ff; \ + stp x3, x4, [P0]; \ + stp x5, x6, [P0+16]; \ + stp x7, x8, [P0+32]; \ + stp x9, x10, [P0+48]; \ + str x11, [P0+64] + +S2N_BN_SYMBOL(p521_jdouble): + +// Save regs and make room on stack for temporary variables + + stp x19, x20, [sp, #-16]! + stp x21, x22, [sp, #-16]! + stp x23, x24, [sp, #-16]! + stp x25, x26, [sp, #-16]! + stp x27, x28, [sp, #-16]! + sub sp, sp, NSPACE + +// Move the input arguments to stable places + + mov input_z, x0 + mov input_x, x1 + +// Main code, just a sequence of basic field operations + +// z2 = z^2 +// y2 = y^2 + + sqr_p521(z2,z_1) + sqr_p521(y2,y_1) + +// x2p = x^2 - z^4 = (x + z^2) * (x - z^2) + + add_p521(t1,x_1,z2) + sub_p521(t2,x_1,z2) + mul_p521(x2p,t1,t2) + +// t1 = y + z +// x4p = x2p^2 +// xy2 = x * y^2 + + add_p521(t1,y_1,z_1) + sqr_p521(x4p,x2p) + weakmul_p521(xy2,x_1,y2) + +// t2 = (y + z)^2 + + sqr_p521(t2,t1) + +// d = 12 * xy2 - 9 * x4p +// t1 = y^2 + 2 * y * z + + cmsub_p521(d,12,xy2,9,x4p) + sub_p521(t1,t2,z2) + +// y4 = y^4 + + sqr_p521(y4,y2) + +// z_3' = 2 * y * z +// dx2 = d * x2p + + sub_p521(z_3,t1,y2) + weakmul_p521(dx2,d,x2p) + +// x' = 4 * xy2 - d + + cmsub41_p521(x_3,xy2,d) + +// y' = 3 * dx2 - 8 * y4 + + cmsub38_p521(y_3,dx2,y4) + +// Restore stack and registers + + add sp, sp, NSPACE + + ldp x27, x28, [sp], 16 + ldp x25, x26, [sp], 16 + ldp x23, x24, [sp], 16 + ldp x21, x22, [sp], 16 + ldp x19, x20, [sp], 16 + + ret + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack, "", %progbits +#endif diff --git a/arm/p521/p521_jmixadd.S b/arm/p521/p521_jmixadd.S new file mode 100644 index 0000000000..6e8b46b00c --- /dev/null +++ b/arm/p521/p521_jmixadd.S @@ -0,0 +1,797 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +// ---------------------------------------------------------------------------- +// Point mixed addition on NIST curve P-521 in Jacobian coordinates +// +// extern void p521_jmixadd +// (uint64_t p3[static 27],uint64_t p1[static 27],uint64_t p2[static 18]); +// +// Does p3 := p1 + p2 where all points are regarded as Jacobian triples. +// A Jacobian triple (x,y,z) represents affine point (x/z^2,y/z^3). +// The "mixed" part means that p2 only has x and y coordinates, with the +// implicit z coordinate assumed to be the identity. It is assumed that +// all the coordinates of the input points p1 and p2 are fully reduced +// mod p_521, that the z coordinate of p1 is nonzero and that neither +// p1 =~= p2 or p1 =~= -p2, where "=~=" means "represents the same affine +// point as". +// +// Standard ARM ABI: X0 = p3, X1 = p1, X2 = p2 +// ---------------------------------------------------------------------------- +#include "_internal_s2n_bignum.h" + + S2N_BN_SYM_VISIBILITY_DIRECTIVE(p521_jmixadd) + S2N_BN_SYM_PRIVACY_DIRECTIVE(p521_jmixadd) + + .text + .balign 4 + +// Size of individual field elements + +#define NUMSIZE 72 + +// Stable homes for input arguments during main code sequence + +#define input_z x26 +#define input_x x27 +#define input_y x28 + +// Pointer-offset pairs for inputs and outputs + +#define x_1 input_x, #0 +#define y_1 input_x, #NUMSIZE +#define z_1 input_x, #(2*NUMSIZE) + +#define x_2 input_y, #0 +#define y_2 input_y, #NUMSIZE + +#define x_3 input_z, #0 +#define y_3 input_z, #NUMSIZE +#define z_3 input_z, #(2*NUMSIZE) + +// Pointer-offset pairs for temporaries, with some aliasing +// NSPACE is the total stack needed for these temporaries + +#define zp2 sp, #(NUMSIZE*0) +#define ww sp, #(NUMSIZE*0) + +#define yd sp, #(NUMSIZE*1) +#define y2a sp, #(NUMSIZE*1) + +#define x2a sp, #(NUMSIZE*2) +#define zzx2 sp, #(NUMSIZE*2) + +#define zz sp, #(NUMSIZE*3) +#define t1 sp, #(NUMSIZE*3) + +#define t2 sp, #(NUMSIZE*4) +#define zzx1 sp, #(NUMSIZE*4) + +#define xd sp, #(NUMSIZE*5) + +#define NSPACE (NUMSIZE*6) + +// Corresponds exactly to bignum_mul_p521_alt + +#define mul_p521(P0,P1,P2) \ + ldp x3, x4, [P1]; \ + ldp x5, x6, [P2]; \ + mul x15, x3, x5; \ + umulh x16, x3, x5; \ + mul x14, x3, x6; \ + umulh x17, x3, x6; \ + adds x16, x16, x14; \ + ldp x7, x8, [P2+16]; \ + mul x14, x3, x7; \ + umulh x19, x3, x7; \ + adcs x17, x17, x14; \ + mul x14, x3, x8; \ + umulh x20, x3, x8; \ + adcs x19, x19, x14; \ + ldp x9, x10, [P2+32]; \ + mul x14, x3, x9; \ + umulh x21, x3, x9; \ + adcs x20, x20, x14; \ + mul x14, x3, x10; \ + umulh x22, x3, x10; \ + adcs x21, x21, x14; \ + ldp x11, x12, [P2+48]; \ + mul x14, x3, x11; \ + umulh x23, x3, x11; \ + adcs x22, x22, x14; \ + ldr x13, [P2+64]; \ + mul x14, x3, x12; \ + umulh x24, x3, x12; \ + adcs x23, x23, x14; \ + mul x14, x3, x13; \ + umulh x1, x3, x13; \ + adcs x24, x24, x14; \ + adc x1, x1, xzr; \ + mul x14, x4, x5; \ + adds x16, x16, x14; \ + mul x14, x4, x6; \ + adcs x17, x17, x14; \ + mul x14, x4, x7; \ + adcs x19, x19, x14; \ + mul x14, x4, x8; \ + adcs x20, x20, x14; \ + mul x14, x4, x9; \ + adcs x21, x21, x14; \ + mul x14, x4, x10; \ + adcs x22, x22, x14; \ + mul x14, x4, x11; \ + adcs x23, x23, x14; \ + mul x14, x4, x12; \ + adcs x24, x24, x14; \ + mul x14, x4, x13; \ + adcs x1, x1, x14; \ + cset x0, hs; \ + umulh x14, x4, x5; \ + adds x17, x17, x14; \ + umulh x14, x4, x6; \ + adcs x19, x19, x14; \ + umulh x14, x4, x7; \ + adcs x20, x20, x14; \ + umulh x14, x4, x8; \ + adcs x21, x21, x14; \ + umulh x14, x4, x9; \ + adcs x22, x22, x14; \ + umulh x14, x4, x10; \ + adcs x23, x23, x14; \ + umulh x14, x4, x11; \ + adcs x24, x24, x14; \ + umulh x14, x4, x12; \ + adcs x1, x1, x14; \ + umulh x14, x4, x13; \ + adc x0, x0, x14; \ + stp x15, x16, [P0]; \ + ldp x3, x4, [P1+16]; \ + mul x14, x3, x5; \ + adds x17, x17, x14; \ + mul x14, x3, x6; \ + adcs x19, x19, x14; \ + mul x14, x3, x7; \ + adcs x20, x20, x14; \ + mul x14, x3, x8; \ + adcs x21, x21, x14; \ + mul x14, x3, x9; \ + adcs x22, x22, x14; \ + mul x14, x3, x10; \ + adcs x23, x23, x14; \ + mul x14, x3, x11; \ + adcs x24, x24, x14; \ + mul x14, x3, x12; \ + adcs x1, x1, x14; \ + mul x14, x3, x13; \ + adcs x0, x0, x14; \ + cset x15, hs; \ + umulh x14, x3, x5; \ + adds x19, x19, x14; \ + umulh x14, x3, x6; \ + adcs x20, x20, x14; \ + umulh x14, x3, x7; \ + adcs x21, x21, x14; \ + umulh x14, x3, x8; \ + adcs x22, x22, x14; \ + umulh x14, x3, x9; \ + adcs x23, x23, x14; \ + umulh x14, x3, x10; \ + adcs x24, x24, x14; \ + umulh x14, x3, x11; \ + adcs x1, x1, x14; \ + umulh x14, x3, x12; \ + adcs x0, x0, x14; \ + umulh x14, x3, x13; \ + adc x15, x15, x14; \ + mul x14, x4, x5; \ + adds x19, x19, x14; \ + mul x14, x4, x6; \ + adcs x20, x20, x14; \ + mul x14, x4, x7; \ + adcs x21, x21, x14; \ + mul x14, x4, x8; \ + adcs x22, x22, x14; \ + mul x14, x4, x9; \ + adcs x23, x23, x14; \ + mul x14, x4, x10; \ + adcs x24, x24, x14; \ + mul x14, x4, x11; \ + adcs x1, x1, x14; \ + mul x14, x4, x12; \ + adcs x0, x0, x14; \ + mul x14, x4, x13; \ + adcs x15, x15, x14; \ + cset x16, hs; \ + umulh x14, x4, x5; \ + adds x20, x20, x14; \ + umulh x14, x4, x6; \ + adcs x21, x21, x14; \ + umulh x14, x4, x7; \ + adcs x22, x22, x14; \ + umulh x14, x4, x8; \ + adcs x23, x23, x14; \ + umulh x14, x4, x9; \ + adcs x24, x24, x14; \ + umulh x14, x4, x10; \ + adcs x1, x1, x14; \ + umulh x14, x4, x11; \ + adcs x0, x0, x14; \ + umulh x14, x4, x12; \ + adcs x15, x15, x14; \ + umulh x14, x4, x13; \ + adc x16, x16, x14; \ + stp x17, x19, [P0+16]; \ + ldp x3, x4, [P1+32]; \ + mul x14, x3, x5; \ + adds x20, x20, x14; \ + mul x14, x3, x6; \ + adcs x21, x21, x14; \ + mul x14, x3, x7; \ + adcs x22, x22, x14; \ + mul x14, x3, x8; \ + adcs x23, x23, x14; \ + mul x14, x3, x9; \ + adcs x24, x24, x14; \ + mul x14, x3, x10; \ + adcs x1, x1, x14; \ + mul x14, x3, x11; \ + adcs x0, x0, x14; \ + mul x14, x3, x12; \ + adcs x15, x15, x14; \ + mul x14, x3, x13; \ + adcs x16, x16, x14; \ + cset x17, hs; \ + umulh x14, x3, x5; \ + adds x21, x21, x14; \ + umulh x14, x3, x6; \ + adcs x22, x22, x14; \ + umulh x14, x3, x7; \ + adcs x23, x23, x14; \ + umulh x14, x3, x8; \ + adcs x24, x24, x14; \ + umulh x14, x3, x9; \ + adcs x1, x1, x14; \ + umulh x14, x3, x10; \ + adcs x0, x0, x14; \ + umulh x14, x3, x11; \ + adcs x15, x15, x14; \ + umulh x14, x3, x12; \ + adcs x16, x16, x14; \ + umulh x14, x3, x13; \ + adc x17, x17, x14; \ + mul x14, x4, x5; \ + adds x21, x21, x14; \ + mul x14, x4, x6; \ + adcs x22, x22, x14; \ + mul x14, x4, x7; \ + adcs x23, x23, x14; \ + mul x14, x4, x8; \ + adcs x24, x24, x14; \ + mul x14, x4, x9; \ + adcs x1, x1, x14; \ + mul x14, x4, x10; \ + adcs x0, x0, x14; \ + mul x14, x4, x11; \ + adcs x15, x15, x14; \ + mul x14, x4, x12; \ + adcs x16, x16, x14; \ + mul x14, x4, x13; \ + adcs x17, x17, x14; \ + cset x19, hs; \ + umulh x14, x4, x5; \ + adds x22, x22, x14; \ + umulh x14, x4, x6; \ + adcs x23, x23, x14; \ + umulh x14, x4, x7; \ + adcs x24, x24, x14; \ + umulh x14, x4, x8; \ + adcs x1, x1, x14; \ + umulh x14, x4, x9; \ + adcs x0, x0, x14; \ + umulh x14, x4, x10; \ + adcs x15, x15, x14; \ + umulh x14, x4, x11; \ + adcs x16, x16, x14; \ + umulh x14, x4, x12; \ + adcs x17, x17, x14; \ + umulh x14, x4, x13; \ + adc x19, x19, x14; \ + stp x20, x21, [P0+32]; \ + ldp x3, x4, [P1+48]; \ + mul x14, x3, x5; \ + adds x22, x22, x14; \ + mul x14, x3, x6; \ + adcs x23, x23, x14; \ + mul x14, x3, x7; \ + adcs x24, x24, x14; \ + mul x14, x3, x8; \ + adcs x1, x1, x14; \ + mul x14, x3, x9; \ + adcs x0, x0, x14; \ + mul x14, x3, x10; \ + adcs x15, x15, x14; \ + mul x14, x3, x11; \ + adcs x16, x16, x14; \ + mul x14, x3, x12; \ + adcs x17, x17, x14; \ + mul x14, x3, x13; \ + adcs x19, x19, x14; \ + cset x20, hs; \ + umulh x14, x3, x5; \ + adds x23, x23, x14; \ + umulh x14, x3, x6; \ + adcs x24, x24, x14; \ + umulh x14, x3, x7; \ + adcs x1, x1, x14; \ + umulh x14, x3, x8; \ + adcs x0, x0, x14; \ + umulh x14, x3, x9; \ + adcs x15, x15, x14; \ + umulh x14, x3, x10; \ + adcs x16, x16, x14; \ + umulh x14, x3, x11; \ + adcs x17, x17, x14; \ + umulh x14, x3, x12; \ + adcs x19, x19, x14; \ + umulh x14, x3, x13; \ + adc x20, x20, x14; \ + mul x14, x4, x5; \ + adds x23, x23, x14; \ + mul x14, x4, x6; \ + adcs x24, x24, x14; \ + mul x14, x4, x7; \ + adcs x1, x1, x14; \ + mul x14, x4, x8; \ + adcs x0, x0, x14; \ + mul x14, x4, x9; \ + adcs x15, x15, x14; \ + mul x14, x4, x10; \ + adcs x16, x16, x14; \ + mul x14, x4, x11; \ + adcs x17, x17, x14; \ + mul x14, x4, x12; \ + adcs x19, x19, x14; \ + mul x14, x4, x13; \ + adcs x20, x20, x14; \ + cset x21, hs; \ + umulh x14, x4, x5; \ + adds x24, x24, x14; \ + umulh x14, x4, x6; \ + adcs x1, x1, x14; \ + umulh x14, x4, x7; \ + adcs x0, x0, x14; \ + umulh x14, x4, x8; \ + adcs x15, x15, x14; \ + umulh x14, x4, x9; \ + adcs x16, x16, x14; \ + umulh x14, x4, x10; \ + adcs x17, x17, x14; \ + umulh x14, x4, x11; \ + adcs x19, x19, x14; \ + umulh x14, x4, x12; \ + adcs x20, x20, x14; \ + umulh x14, x4, x13; \ + adc x21, x21, x14; \ + stp x22, x23, [P0+48]; \ + ldr x3, [P1+64]; \ + mul x14, x3, x5; \ + adds x24, x24, x14; \ + mul x14, x3, x6; \ + adcs x1, x1, x14; \ + mul x14, x3, x7; \ + adcs x0, x0, x14; \ + mul x14, x3, x8; \ + adcs x15, x15, x14; \ + mul x14, x3, x9; \ + adcs x16, x16, x14; \ + mul x14, x3, x10; \ + adcs x17, x17, x14; \ + mul x14, x3, x11; \ + adcs x19, x19, x14; \ + mul x14, x3, x12; \ + adcs x20, x20, x14; \ + mul x14, x3, x13; \ + adc x21, x21, x14; \ + umulh x14, x3, x5; \ + adds x1, x1, x14; \ + umulh x14, x3, x6; \ + adcs x0, x0, x14; \ + umulh x14, x3, x7; \ + adcs x15, x15, x14; \ + umulh x14, x3, x8; \ + adcs x16, x16, x14; \ + umulh x14, x3, x9; \ + adcs x17, x17, x14; \ + umulh x14, x3, x10; \ + adcs x19, x19, x14; \ + umulh x14, x3, x11; \ + adcs x20, x20, x14; \ + umulh x14, x3, x12; \ + adc x21, x21, x14; \ + cmp xzr, xzr; \ + ldp x5, x6, [P0]; \ + extr x14, x1, x24, #9; \ + adcs x5, x5, x14; \ + extr x14, x0, x1, #9; \ + adcs x6, x6, x14; \ + ldp x7, x8, [P0+16]; \ + extr x14, x15, x0, #9; \ + adcs x7, x7, x14; \ + extr x14, x16, x15, #9; \ + adcs x8, x8, x14; \ + ldp x9, x10, [P0+32]; \ + extr x14, x17, x16, #9; \ + adcs x9, x9, x14; \ + extr x14, x19, x17, #9; \ + adcs x10, x10, x14; \ + ldp x11, x12, [P0+48]; \ + extr x14, x20, x19, #9; \ + adcs x11, x11, x14; \ + extr x14, x21, x20, #9; \ + adcs x12, x12, x14; \ + orr x13, x24, #0xfffffffffffffe00; \ + lsr x14, x21, #9; \ + adcs x13, x13, x14; \ + sbcs x5, x5, xzr; \ + sbcs x6, x6, xzr; \ + sbcs x7, x7, xzr; \ + sbcs x8, x8, xzr; \ + sbcs x9, x9, xzr; \ + sbcs x10, x10, xzr; \ + sbcs x11, x11, xzr; \ + sbcs x12, x12, xzr; \ + sbc x13, x13, xzr; \ + and x13, x13, #0x1ff; \ + stp x5, x6, [P0]; \ + stp x7, x8, [P0+16]; \ + stp x9, x10, [P0+32]; \ + stp x11, x12, [P0+48]; \ + str x13, [P0+64] + +// Corresponds exactly to bignum_sqr_p521_alt + +#define sqr_p521(P0,P1) \ + ldp x2, x3, [P1]; \ + mul x11, x2, x3; \ + umulh x12, x2, x3; \ + ldp x4, x5, [P1+16]; \ + mul x10, x2, x4; \ + umulh x13, x2, x4; \ + adds x12, x12, x10; \ + ldp x6, x7, [P1+32]; \ + mul x10, x2, x5; \ + umulh x14, x2, x5; \ + adcs x13, x13, x10; \ + ldp x8, x9, [P1+48]; \ + mul x10, x2, x6; \ + umulh x15, x2, x6; \ + adcs x14, x14, x10; \ + mul x10, x2, x7; \ + umulh x16, x2, x7; \ + adcs x15, x15, x10; \ + mul x10, x2, x8; \ + umulh x17, x2, x8; \ + adcs x16, x16, x10; \ + mul x10, x2, x9; \ + umulh x19, x2, x9; \ + adcs x17, x17, x10; \ + adc x19, x19, xzr; \ + mul x10, x3, x4; \ + adds x13, x13, x10; \ + mul x10, x3, x5; \ + adcs x14, x14, x10; \ + mul x10, x3, x6; \ + adcs x15, x15, x10; \ + mul x10, x3, x7; \ + adcs x16, x16, x10; \ + mul x10, x3, x8; \ + adcs x17, x17, x10; \ + mul x10, x3, x9; \ + adcs x19, x19, x10; \ + cset x20, hs; \ + umulh x10, x3, x4; \ + adds x14, x14, x10; \ + umulh x10, x3, x5; \ + adcs x15, x15, x10; \ + umulh x10, x3, x6; \ + adcs x16, x16, x10; \ + umulh x10, x3, x7; \ + adcs x17, x17, x10; \ + umulh x10, x3, x8; \ + adcs x19, x19, x10; \ + umulh x10, x3, x9; \ + adc x20, x20, x10; \ + mul x10, x6, x7; \ + umulh x21, x6, x7; \ + adds x20, x20, x10; \ + adc x21, x21, xzr; \ + mul x10, x4, x5; \ + adds x15, x15, x10; \ + mul x10, x4, x6; \ + adcs x16, x16, x10; \ + mul x10, x4, x7; \ + adcs x17, x17, x10; \ + mul x10, x4, x8; \ + adcs x19, x19, x10; \ + mul x10, x4, x9; \ + adcs x20, x20, x10; \ + mul x10, x6, x8; \ + adcs x21, x21, x10; \ + cset x22, hs; \ + umulh x10, x4, x5; \ + adds x16, x16, x10; \ + umulh x10, x4, x6; \ + adcs x17, x17, x10; \ + umulh x10, x4, x7; \ + adcs x19, x19, x10; \ + umulh x10, x4, x8; \ + adcs x20, x20, x10; \ + umulh x10, x4, x9; \ + adcs x21, x21, x10; \ + umulh x10, x6, x8; \ + adc x22, x22, x10; \ + mul x10, x7, x8; \ + umulh x23, x7, x8; \ + adds x22, x22, x10; \ + adc x23, x23, xzr; \ + mul x10, x5, x6; \ + adds x17, x17, x10; \ + mul x10, x5, x7; \ + adcs x19, x19, x10; \ + mul x10, x5, x8; \ + adcs x20, x20, x10; \ + mul x10, x5, x9; \ + adcs x21, x21, x10; \ + mul x10, x6, x9; \ + adcs x22, x22, x10; \ + mul x10, x7, x9; \ + adcs x23, x23, x10; \ + cset x24, hs; \ + umulh x10, x5, x6; \ + adds x19, x19, x10; \ + umulh x10, x5, x7; \ + adcs x20, x20, x10; \ + umulh x10, x5, x8; \ + adcs x21, x21, x10; \ + umulh x10, x5, x9; \ + adcs x22, x22, x10; \ + umulh x10, x6, x9; \ + adcs x23, x23, x10; \ + umulh x10, x7, x9; \ + adc x24, x24, x10; \ + mul x10, x8, x9; \ + umulh x25, x8, x9; \ + adds x24, x24, x10; \ + adc x25, x25, xzr; \ + adds x11, x11, x11; \ + adcs x12, x12, x12; \ + adcs x13, x13, x13; \ + adcs x14, x14, x14; \ + adcs x15, x15, x15; \ + adcs x16, x16, x16; \ + adcs x17, x17, x17; \ + adcs x19, x19, x19; \ + adcs x20, x20, x20; \ + adcs x21, x21, x21; \ + adcs x22, x22, x22; \ + adcs x23, x23, x23; \ + adcs x24, x24, x24; \ + adcs x25, x25, x25; \ + cset x0, hs; \ + umulh x10, x2, x2; \ + adds x11, x11, x10; \ + mul x10, x3, x3; \ + adcs x12, x12, x10; \ + umulh x10, x3, x3; \ + adcs x13, x13, x10; \ + mul x10, x4, x4; \ + adcs x14, x14, x10; \ + umulh x10, x4, x4; \ + adcs x15, x15, x10; \ + mul x10, x5, x5; \ + adcs x16, x16, x10; \ + umulh x10, x5, x5; \ + adcs x17, x17, x10; \ + mul x10, x6, x6; \ + adcs x19, x19, x10; \ + umulh x10, x6, x6; \ + adcs x20, x20, x10; \ + mul x10, x7, x7; \ + adcs x21, x21, x10; \ + umulh x10, x7, x7; \ + adcs x22, x22, x10; \ + mul x10, x8, x8; \ + adcs x23, x23, x10; \ + umulh x10, x8, x8; \ + adcs x24, x24, x10; \ + mul x10, x9, x9; \ + adcs x25, x25, x10; \ + umulh x10, x9, x9; \ + adc x0, x0, x10; \ + ldr x1, [P1+64]; \ + add x1, x1, x1; \ + mul x10, x1, x2; \ + adds x19, x19, x10; \ + umulh x10, x1, x2; \ + adcs x20, x20, x10; \ + mul x10, x1, x4; \ + adcs x21, x21, x10; \ + umulh x10, x1, x4; \ + adcs x22, x22, x10; \ + mul x10, x1, x6; \ + adcs x23, x23, x10; \ + umulh x10, x1, x6; \ + adcs x24, x24, x10; \ + mul x10, x1, x8; \ + adcs x25, x25, x10; \ + umulh x10, x1, x8; \ + adcs x0, x0, x10; \ + lsr x4, x1, #1; \ + mul x4, x4, x4; \ + adc x4, x4, xzr; \ + mul x10, x1, x3; \ + adds x20, x20, x10; \ + umulh x10, x1, x3; \ + adcs x21, x21, x10; \ + mul x10, x1, x5; \ + adcs x22, x22, x10; \ + umulh x10, x1, x5; \ + adcs x23, x23, x10; \ + mul x10, x1, x7; \ + adcs x24, x24, x10; \ + umulh x10, x1, x7; \ + adcs x25, x25, x10; \ + mul x10, x1, x9; \ + adcs x0, x0, x10; \ + umulh x10, x1, x9; \ + adc x4, x4, x10; \ + mul x2, x2, x2; \ + cmp xzr, xzr; \ + extr x10, x20, x19, #9; \ + adcs x2, x2, x10; \ + extr x10, x21, x20, #9; \ + adcs x11, x11, x10; \ + extr x10, x22, x21, #9; \ + adcs x12, x12, x10; \ + extr x10, x23, x22, #9; \ + adcs x13, x13, x10; \ + extr x10, x24, x23, #9; \ + adcs x14, x14, x10; \ + extr x10, x25, x24, #9; \ + adcs x15, x15, x10; \ + extr x10, x0, x25, #9; \ + adcs x16, x16, x10; \ + extr x10, x4, x0, #9; \ + adcs x17, x17, x10; \ + orr x19, x19, #0xfffffffffffffe00; \ + lsr x10, x4, #9; \ + adcs x19, x19, x10; \ + sbcs x2, x2, xzr; \ + sbcs x11, x11, xzr; \ + sbcs x12, x12, xzr; \ + sbcs x13, x13, xzr; \ + sbcs x14, x14, xzr; \ + sbcs x15, x15, xzr; \ + sbcs x16, x16, xzr; \ + sbcs x17, x17, xzr; \ + sbc x19, x19, xzr; \ + and x19, x19, #0x1ff; \ + stp x2, x11, [P0]; \ + stp x12, x13, [P0+16]; \ + stp x14, x15, [P0+32]; \ + stp x16, x17, [P0+48]; \ + str x19, [P0+64] + +// Corresponds exactly to bignum_sub_p521 + +#define sub_p521(P0,P1,P2) \ + ldp x5, x6, [P1]; \ + ldp x4, x3, [P2]; \ + subs x5, x5, x4; \ + sbcs x6, x6, x3; \ + ldp x7, x8, [P1+16]; \ + ldp x4, x3, [P2+16]; \ + sbcs x7, x7, x4; \ + sbcs x8, x8, x3; \ + ldp x9, x10, [P1+32]; \ + ldp x4, x3, [P2+32]; \ + sbcs x9, x9, x4; \ + sbcs x10, x10, x3; \ + ldp x11, x12, [P1+48]; \ + ldp x4, x3, [P2+48]; \ + sbcs x11, x11, x4; \ + sbcs x12, x12, x3; \ + ldr x13, [P1+64]; \ + ldr x4, [P2+64]; \ + sbcs x13, x13, x4; \ + sbcs x5, x5, xzr; \ + sbcs x6, x6, xzr; \ + sbcs x7, x7, xzr; \ + sbcs x8, x8, xzr; \ + sbcs x9, x9, xzr; \ + sbcs x10, x10, xzr; \ + sbcs x11, x11, xzr; \ + sbcs x12, x12, xzr; \ + sbcs x13, x13, xzr; \ + and x13, x13, #0x1ff; \ + stp x5, x6, [P0]; \ + stp x7, x8, [P0+16]; \ + stp x9, x10, [P0+32]; \ + stp x11, x12, [P0+48]; \ + str x13, [P0+64] + +S2N_BN_SYMBOL(p521_jmixadd): + +// Save regs and make room on stack for temporary variables + + stp x19, x20, [sp, #-16]! + stp x21, x22, [sp, #-16]! + stp x23, x24, [sp, #-16]! + stp x25, x26, [sp, #-16]! + stp x27, x28, [sp, #-16]! + sub sp, sp, NSPACE + +// Move the input arguments to stable places + + mov input_z, x0 + mov input_x, x1 + mov input_y, x2 + +// Main code, just a sequence of basic field operations + + sqr_p521(zp2,z_1) + mul_p521(y2a,z_1,y_2) + + mul_p521(x2a,zp2,x_2) + mul_p521(y2a,zp2,y2a) + + sub_p521(xd,x2a,x_1) + sub_p521(yd,y2a,y_1) + + sqr_p521(zz,xd) + sqr_p521(ww,yd) + + mul_p521(zzx1,zz,x_1) + mul_p521(zzx2,zz,x2a) + + sub_p521(x_3,ww,zzx1) + sub_p521(t1,zzx2,zzx1) + + mul_p521(z_3,xd,z_1) + + sub_p521(x_3,x_3,zzx2) + + sub_p521(t2,zzx1,x_3) + + mul_p521(t1,t1,y_1) + mul_p521(t2,yd,t2) + + sub_p521(y_3,t2,t1) + +// Restore stack and registers + + add sp, sp, NSPACE + + ldp x27, x28, [sp], 16 + ldp x25, x26, [sp], 16 + ldp x23, x24, [sp], 16 + ldp x21, x22, [sp], 16 + ldp x19, x20, [sp], 16 + + ret + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack, "", %progbits +#endif diff --git a/arm/proofs/p521_jadd.ml b/arm/proofs/p521_jadd.ml new file mode 100644 index 0000000000..5701984a07 --- /dev/null +++ b/arm/proofs/p521_jadd.ml @@ -0,0 +1,6471 @@ +(* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + *) + +(* ========================================================================= *) +(* Point addition in Jacobian coordinates for NIST p521 curve. *) +(* ========================================================================= *) + +needs "arm/proofs/base.ml";; +needs "common/ecencoding.ml";; +needs "EC/jacobian.ml";; +needs "EC/nistp521.ml";; + +prioritize_int();; +prioritize_real();; +prioritize_num();; + +(**** print_literal_from_elf "arm/p521/p521_jadd.o";; + ****) + +let p521_jadd_mc = define_assert_from_elf + "p521_jadd_mc" "arm/p521/p521_jadd.o" +[ + 0xa9bf53f3; (* arm_STP X19 X20 SP (Preimmediate_Offset (iword (-- &16))) *) + 0xa9bf5bf5; (* arm_STP X21 X22 SP (Preimmediate_Offset (iword (-- &16))) *) + 0xa9bf63f7; (* arm_STP X23 X24 SP (Preimmediate_Offset (iword (-- &16))) *) + 0xa9bf6bf9; (* arm_STP X25 X26 SP (Preimmediate_Offset (iword (-- &16))) *) + 0xa9bf73fb; (* arm_STP X27 X28 SP (Preimmediate_Offset (iword (-- &16))) *) + 0xd10803ff; (* arm_SUB SP SP (rvalue (word 512)) *) + 0xaa0003fa; (* arm_MOV X26 X0 *) + 0xaa0103fb; (* arm_MOV X27 X1 *) + 0xaa0203fc; (* arm_MOV X28 X2 *) + 0xa9490f62; (* arm_LDP X2 X3 X27 (Immediate_Offset (iword (&144))) *) + 0x9b037c4b; (* arm_MUL X11 X2 X3 *) + 0x9bc37c4c; (* arm_UMULH X12 X2 X3 *) + 0xa94a1764; (* arm_LDP X4 X5 X27 (Immediate_Offset (iword (&160))) *) + 0x9b047c4a; (* arm_MUL X10 X2 X4 *) + 0x9bc47c4d; (* arm_UMULH X13 X2 X4 *) + 0xab0a018c; (* arm_ADDS X12 X12 X10 *) + 0xa94b1f66; (* arm_LDP X6 X7 X27 (Immediate_Offset (iword (&176))) *) + 0x9b057c4a; (* arm_MUL X10 X2 X5 *) + 0x9bc57c4e; (* arm_UMULH X14 X2 X5 *) + 0xba0a01ad; (* arm_ADCS X13 X13 X10 *) + 0xa94c2768; (* arm_LDP X8 X9 X27 (Immediate_Offset (iword (&192))) *) + 0x9b067c4a; (* arm_MUL X10 X2 X6 *) + 0x9bc67c4f; (* arm_UMULH X15 X2 X6 *) + 0xba0a01ce; (* arm_ADCS X14 X14 X10 *) + 0x9b077c4a; (* arm_MUL X10 X2 X7 *) + 0x9bc77c50; (* arm_UMULH X16 X2 X7 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x9b087c4a; (* arm_MUL X10 X2 X8 *) + 0x9bc87c51; (* arm_UMULH X17 X2 X8 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9b097c4a; (* arm_MUL X10 X2 X9 *) + 0x9bc97c53; (* arm_UMULH X19 X2 X9 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0x9b047c6a; (* arm_MUL X10 X3 X4 *) + 0xab0a01ad; (* arm_ADDS X13 X13 X10 *) + 0x9b057c6a; (* arm_MUL X10 X3 X5 *) + 0xba0a01ce; (* arm_ADCS X14 X14 X10 *) + 0x9b067c6a; (* arm_MUL X10 X3 X6 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x9b077c6a; (* arm_MUL X10 X3 X7 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9b087c6a; (* arm_MUL X10 X3 X8 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9b097c6a; (* arm_MUL X10 X3 X9 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc47c6a; (* arm_UMULH X10 X3 X4 *) + 0xab0a01ce; (* arm_ADDS X14 X14 X10 *) + 0x9bc57c6a; (* arm_UMULH X10 X3 X5 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x9bc67c6a; (* arm_UMULH X10 X3 X6 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9bc77c6a; (* arm_UMULH X10 X3 X7 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9bc87c6a; (* arm_UMULH X10 X3 X8 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9bc97c6a; (* arm_UMULH X10 X3 X9 *) + 0x9a0a0294; (* arm_ADC X20 X20 X10 *) + 0x9b077cca; (* arm_MUL X10 X6 X7 *) + 0x9bc77cd5; (* arm_UMULH X21 X6 X7 *) + 0xab0a0294; (* arm_ADDS X20 X20 X10 *) + 0x9a1f02b5; (* arm_ADC X21 X21 XZR *) + 0x9b057c8a; (* arm_MUL X10 X4 X5 *) + 0xab0a01ef; (* arm_ADDS X15 X15 X10 *) + 0x9b067c8a; (* arm_MUL X10 X4 X6 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9b077c8a; (* arm_MUL X10 X4 X7 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9b087c8a; (* arm_MUL X10 X4 X8 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9b097c8a; (* arm_MUL X10 X4 X9 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9b087cca; (* arm_MUL X10 X6 X8 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9a9f37f6; (* arm_CSET X22 Condition_CS *) + 0x9bc57c8a; (* arm_UMULH X10 X4 X5 *) + 0xab0a0210; (* arm_ADDS X16 X16 X10 *) + 0x9bc67c8a; (* arm_UMULH X10 X4 X6 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9bc77c8a; (* arm_UMULH X10 X4 X7 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9bc87c8a; (* arm_UMULH X10 X4 X8 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9bc97c8a; (* arm_UMULH X10 X4 X9 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9bc87cca; (* arm_UMULH X10 X6 X8 *) + 0x9a0a02d6; (* arm_ADC X22 X22 X10 *) + 0x9b087cea; (* arm_MUL X10 X7 X8 *) + 0x9bc87cf7; (* arm_UMULH X23 X7 X8 *) + 0xab0a02d6; (* arm_ADDS X22 X22 X10 *) + 0x9a1f02f7; (* arm_ADC X23 X23 XZR *) + 0x9b067caa; (* arm_MUL X10 X5 X6 *) + 0xab0a0231; (* arm_ADDS X17 X17 X10 *) + 0x9b077caa; (* arm_MUL X10 X5 X7 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9b087caa; (* arm_MUL X10 X5 X8 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9b097caa; (* arm_MUL X10 X5 X9 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9b097cca; (* arm_MUL X10 X6 X9 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9b097cea; (* arm_MUL X10 X7 X9 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9a9f37f8; (* arm_CSET X24 Condition_CS *) + 0x9bc67caa; (* arm_UMULH X10 X5 X6 *) + 0xab0a0273; (* arm_ADDS X19 X19 X10 *) + 0x9bc77caa; (* arm_UMULH X10 X5 X7 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9bc87caa; (* arm_UMULH X10 X5 X8 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9bc97caa; (* arm_UMULH X10 X5 X9 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9bc97cca; (* arm_UMULH X10 X6 X9 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9bc97cea; (* arm_UMULH X10 X7 X9 *) + 0x9a0a0318; (* arm_ADC X24 X24 X10 *) + 0x9b097d0a; (* arm_MUL X10 X8 X9 *) + 0x9bc97d19; (* arm_UMULH X25 X8 X9 *) + 0xab0a0318; (* arm_ADDS X24 X24 X10 *) + 0x9a1f0339; (* arm_ADC X25 X25 XZR *) + 0xab0b016b; (* arm_ADDS X11 X11 X11 *) + 0xba0c018c; (* arm_ADCS X12 X12 X12 *) + 0xba0d01ad; (* arm_ADCS X13 X13 X13 *) + 0xba0e01ce; (* arm_ADCS X14 X14 X14 *) + 0xba0f01ef; (* arm_ADCS X15 X15 X15 *) + 0xba100210; (* arm_ADCS X16 X16 X16 *) + 0xba110231; (* arm_ADCS X17 X17 X17 *) + 0xba130273; (* arm_ADCS X19 X19 X19 *) + 0xba140294; (* arm_ADCS X20 X20 X20 *) + 0xba1502b5; (* arm_ADCS X21 X21 X21 *) + 0xba1602d6; (* arm_ADCS X22 X22 X22 *) + 0xba1702f7; (* arm_ADCS X23 X23 X23 *) + 0xba180318; (* arm_ADCS X24 X24 X24 *) + 0xba190339; (* arm_ADCS X25 X25 X25 *) + 0x9a9f37e0; (* arm_CSET X0 Condition_CS *) + 0x9bc27c4a; (* arm_UMULH X10 X2 X2 *) + 0xab0a016b; (* arm_ADDS X11 X11 X10 *) + 0x9b037c6a; (* arm_MUL X10 X3 X3 *) + 0xba0a018c; (* arm_ADCS X12 X12 X10 *) + 0x9bc37c6a; (* arm_UMULH X10 X3 X3 *) + 0xba0a01ad; (* arm_ADCS X13 X13 X10 *) + 0x9b047c8a; (* arm_MUL X10 X4 X4 *) + 0xba0a01ce; (* arm_ADCS X14 X14 X10 *) + 0x9bc47c8a; (* arm_UMULH X10 X4 X4 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x9b057caa; (* arm_MUL X10 X5 X5 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9bc57caa; (* arm_UMULH X10 X5 X5 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9b067cca; (* arm_MUL X10 X6 X6 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9bc67cca; (* arm_UMULH X10 X6 X6 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9b077cea; (* arm_MUL X10 X7 X7 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9bc77cea; (* arm_UMULH X10 X7 X7 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9b087d0a; (* arm_MUL X10 X8 X8 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9bc87d0a; (* arm_UMULH X10 X8 X8 *) + 0xba0a0318; (* arm_ADCS X24 X24 X10 *) + 0x9b097d2a; (* arm_MUL X10 X9 X9 *) + 0xba0a0339; (* arm_ADCS X25 X25 X10 *) + 0x9bc97d2a; (* arm_UMULH X10 X9 X9 *) + 0x9a0a0000; (* arm_ADC X0 X0 X10 *) + 0xf9406b61; (* arm_LDR X1 X27 (Immediate_Offset (word 208)) *) + 0x8b010021; (* arm_ADD X1 X1 X1 *) + 0x9b027c2a; (* arm_MUL X10 X1 X2 *) + 0xab0a0273; (* arm_ADDS X19 X19 X10 *) + 0x9bc27c2a; (* arm_UMULH X10 X1 X2 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9b047c2a; (* arm_MUL X10 X1 X4 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9bc47c2a; (* arm_UMULH X10 X1 X4 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9b067c2a; (* arm_MUL X10 X1 X6 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9bc67c2a; (* arm_UMULH X10 X1 X6 *) + 0xba0a0318; (* arm_ADCS X24 X24 X10 *) + 0x9b087c2a; (* arm_MUL X10 X1 X8 *) + 0xba0a0339; (* arm_ADCS X25 X25 X10 *) + 0x9bc87c2a; (* arm_UMULH X10 X1 X8 *) + 0xba0a0000; (* arm_ADCS X0 X0 X10 *) + 0xd341fc24; (* arm_LSR X4 X1 1 *) + 0x9b047c84; (* arm_MUL X4 X4 X4 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b037c2a; (* arm_MUL X10 X1 X3 *) + 0xab0a0294; (* arm_ADDS X20 X20 X10 *) + 0x9bc37c2a; (* arm_UMULH X10 X1 X3 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9b057c2a; (* arm_MUL X10 X1 X5 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9bc57c2a; (* arm_UMULH X10 X1 X5 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9b077c2a; (* arm_MUL X10 X1 X7 *) + 0xba0a0318; (* arm_ADCS X24 X24 X10 *) + 0x9bc77c2a; (* arm_UMULH X10 X1 X7 *) + 0xba0a0339; (* arm_ADCS X25 X25 X10 *) + 0x9b097c2a; (* arm_MUL X10 X1 X9 *) + 0xba0a0000; (* arm_ADCS X0 X0 X10 *) + 0x9bc97c2a; (* arm_UMULH X10 X1 X9 *) + 0x9a0a0084; (* arm_ADC X4 X4 X10 *) + 0x9b027c42; (* arm_MUL X2 X2 X2 *) + 0xeb1f03ff; (* arm_CMP XZR XZR *) + 0x93d3268a; (* arm_EXTR X10 X20 X19 9 *) + 0xba0a0042; (* arm_ADCS X2 X2 X10 *) + 0x93d426aa; (* arm_EXTR X10 X21 X20 9 *) + 0xba0a016b; (* arm_ADCS X11 X11 X10 *) + 0x93d526ca; (* arm_EXTR X10 X22 X21 9 *) + 0xba0a018c; (* arm_ADCS X12 X12 X10 *) + 0x93d626ea; (* arm_EXTR X10 X23 X22 9 *) + 0xba0a01ad; (* arm_ADCS X13 X13 X10 *) + 0x93d7270a; (* arm_EXTR X10 X24 X23 9 *) + 0xba0a01ce; (* arm_ADCS X14 X14 X10 *) + 0x93d8272a; (* arm_EXTR X10 X25 X24 9 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x93d9240a; (* arm_EXTR X10 X0 X25 9 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x93c0248a; (* arm_EXTR X10 X4 X0 9 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0xb277da73; (* arm_ORR X19 X19 (rvalue (word 18446744073709551104)) *) + 0xd349fc8a; (* arm_LSR X10 X4 9 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0xfa1f0042; (* arm_SBCS X2 X2 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xda1f0273; (* arm_SBC X19 X19 XZR *) + 0x92402273; (* arm_AND X19 X19 (rvalue (word 511)) *) + 0xa9002fe2; (* arm_STP X2 X11 SP (Immediate_Offset (iword (&0))) *) + 0xa90137ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&16))) *) + 0xa9023fee; (* arm_STP X14 X15 SP (Immediate_Offset (iword (&32))) *) + 0xa90347f0; (* arm_STP X16 X17 SP (Immediate_Offset (iword (&48))) *) + 0xf90023f3; (* arm_STR X19 SP (Immediate_Offset (word 64)) *) + 0xa9490f82; (* arm_LDP X2 X3 X28 (Immediate_Offset (iword (&144))) *) + 0x9b037c4b; (* arm_MUL X11 X2 X3 *) + 0x9bc37c4c; (* arm_UMULH X12 X2 X3 *) + 0xa94a1784; (* arm_LDP X4 X5 X28 (Immediate_Offset (iword (&160))) *) + 0x9b047c4a; (* arm_MUL X10 X2 X4 *) + 0x9bc47c4d; (* arm_UMULH X13 X2 X4 *) + 0xab0a018c; (* arm_ADDS X12 X12 X10 *) + 0xa94b1f86; (* arm_LDP X6 X7 X28 (Immediate_Offset (iword (&176))) *) + 0x9b057c4a; (* arm_MUL X10 X2 X5 *) + 0x9bc57c4e; (* arm_UMULH X14 X2 X5 *) + 0xba0a01ad; (* arm_ADCS X13 X13 X10 *) + 0xa94c2788; (* arm_LDP X8 X9 X28 (Immediate_Offset (iword (&192))) *) + 0x9b067c4a; (* arm_MUL X10 X2 X6 *) + 0x9bc67c4f; (* arm_UMULH X15 X2 X6 *) + 0xba0a01ce; (* arm_ADCS X14 X14 X10 *) + 0x9b077c4a; (* arm_MUL X10 X2 X7 *) + 0x9bc77c50; (* arm_UMULH X16 X2 X7 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x9b087c4a; (* arm_MUL X10 X2 X8 *) + 0x9bc87c51; (* arm_UMULH X17 X2 X8 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9b097c4a; (* arm_MUL X10 X2 X9 *) + 0x9bc97c53; (* arm_UMULH X19 X2 X9 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0x9b047c6a; (* arm_MUL X10 X3 X4 *) + 0xab0a01ad; (* arm_ADDS X13 X13 X10 *) + 0x9b057c6a; (* arm_MUL X10 X3 X5 *) + 0xba0a01ce; (* arm_ADCS X14 X14 X10 *) + 0x9b067c6a; (* arm_MUL X10 X3 X6 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x9b077c6a; (* arm_MUL X10 X3 X7 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9b087c6a; (* arm_MUL X10 X3 X8 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9b097c6a; (* arm_MUL X10 X3 X9 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc47c6a; (* arm_UMULH X10 X3 X4 *) + 0xab0a01ce; (* arm_ADDS X14 X14 X10 *) + 0x9bc57c6a; (* arm_UMULH X10 X3 X5 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x9bc67c6a; (* arm_UMULH X10 X3 X6 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9bc77c6a; (* arm_UMULH X10 X3 X7 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9bc87c6a; (* arm_UMULH X10 X3 X8 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9bc97c6a; (* arm_UMULH X10 X3 X9 *) + 0x9a0a0294; (* arm_ADC X20 X20 X10 *) + 0x9b077cca; (* arm_MUL X10 X6 X7 *) + 0x9bc77cd5; (* arm_UMULH X21 X6 X7 *) + 0xab0a0294; (* arm_ADDS X20 X20 X10 *) + 0x9a1f02b5; (* arm_ADC X21 X21 XZR *) + 0x9b057c8a; (* arm_MUL X10 X4 X5 *) + 0xab0a01ef; (* arm_ADDS X15 X15 X10 *) + 0x9b067c8a; (* arm_MUL X10 X4 X6 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9b077c8a; (* arm_MUL X10 X4 X7 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9b087c8a; (* arm_MUL X10 X4 X8 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9b097c8a; (* arm_MUL X10 X4 X9 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9b087cca; (* arm_MUL X10 X6 X8 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9a9f37f6; (* arm_CSET X22 Condition_CS *) + 0x9bc57c8a; (* arm_UMULH X10 X4 X5 *) + 0xab0a0210; (* arm_ADDS X16 X16 X10 *) + 0x9bc67c8a; (* arm_UMULH X10 X4 X6 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9bc77c8a; (* arm_UMULH X10 X4 X7 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9bc87c8a; (* arm_UMULH X10 X4 X8 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9bc97c8a; (* arm_UMULH X10 X4 X9 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9bc87cca; (* arm_UMULH X10 X6 X8 *) + 0x9a0a02d6; (* arm_ADC X22 X22 X10 *) + 0x9b087cea; (* arm_MUL X10 X7 X8 *) + 0x9bc87cf7; (* arm_UMULH X23 X7 X8 *) + 0xab0a02d6; (* arm_ADDS X22 X22 X10 *) + 0x9a1f02f7; (* arm_ADC X23 X23 XZR *) + 0x9b067caa; (* arm_MUL X10 X5 X6 *) + 0xab0a0231; (* arm_ADDS X17 X17 X10 *) + 0x9b077caa; (* arm_MUL X10 X5 X7 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9b087caa; (* arm_MUL X10 X5 X8 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9b097caa; (* arm_MUL X10 X5 X9 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9b097cca; (* arm_MUL X10 X6 X9 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9b097cea; (* arm_MUL X10 X7 X9 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9a9f37f8; (* arm_CSET X24 Condition_CS *) + 0x9bc67caa; (* arm_UMULH X10 X5 X6 *) + 0xab0a0273; (* arm_ADDS X19 X19 X10 *) + 0x9bc77caa; (* arm_UMULH X10 X5 X7 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9bc87caa; (* arm_UMULH X10 X5 X8 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9bc97caa; (* arm_UMULH X10 X5 X9 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9bc97cca; (* arm_UMULH X10 X6 X9 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9bc97cea; (* arm_UMULH X10 X7 X9 *) + 0x9a0a0318; (* arm_ADC X24 X24 X10 *) + 0x9b097d0a; (* arm_MUL X10 X8 X9 *) + 0x9bc97d19; (* arm_UMULH X25 X8 X9 *) + 0xab0a0318; (* arm_ADDS X24 X24 X10 *) + 0x9a1f0339; (* arm_ADC X25 X25 XZR *) + 0xab0b016b; (* arm_ADDS X11 X11 X11 *) + 0xba0c018c; (* arm_ADCS X12 X12 X12 *) + 0xba0d01ad; (* arm_ADCS X13 X13 X13 *) + 0xba0e01ce; (* arm_ADCS X14 X14 X14 *) + 0xba0f01ef; (* arm_ADCS X15 X15 X15 *) + 0xba100210; (* arm_ADCS X16 X16 X16 *) + 0xba110231; (* arm_ADCS X17 X17 X17 *) + 0xba130273; (* arm_ADCS X19 X19 X19 *) + 0xba140294; (* arm_ADCS X20 X20 X20 *) + 0xba1502b5; (* arm_ADCS X21 X21 X21 *) + 0xba1602d6; (* arm_ADCS X22 X22 X22 *) + 0xba1702f7; (* arm_ADCS X23 X23 X23 *) + 0xba180318; (* arm_ADCS X24 X24 X24 *) + 0xba190339; (* arm_ADCS X25 X25 X25 *) + 0x9a9f37e0; (* arm_CSET X0 Condition_CS *) + 0x9bc27c4a; (* arm_UMULH X10 X2 X2 *) + 0xab0a016b; (* arm_ADDS X11 X11 X10 *) + 0x9b037c6a; (* arm_MUL X10 X3 X3 *) + 0xba0a018c; (* arm_ADCS X12 X12 X10 *) + 0x9bc37c6a; (* arm_UMULH X10 X3 X3 *) + 0xba0a01ad; (* arm_ADCS X13 X13 X10 *) + 0x9b047c8a; (* arm_MUL X10 X4 X4 *) + 0xba0a01ce; (* arm_ADCS X14 X14 X10 *) + 0x9bc47c8a; (* arm_UMULH X10 X4 X4 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x9b057caa; (* arm_MUL X10 X5 X5 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9bc57caa; (* arm_UMULH X10 X5 X5 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9b067cca; (* arm_MUL X10 X6 X6 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9bc67cca; (* arm_UMULH X10 X6 X6 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9b077cea; (* arm_MUL X10 X7 X7 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9bc77cea; (* arm_UMULH X10 X7 X7 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9b087d0a; (* arm_MUL X10 X8 X8 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9bc87d0a; (* arm_UMULH X10 X8 X8 *) + 0xba0a0318; (* arm_ADCS X24 X24 X10 *) + 0x9b097d2a; (* arm_MUL X10 X9 X9 *) + 0xba0a0339; (* arm_ADCS X25 X25 X10 *) + 0x9bc97d2a; (* arm_UMULH X10 X9 X9 *) + 0x9a0a0000; (* arm_ADC X0 X0 X10 *) + 0xf9406b81; (* arm_LDR X1 X28 (Immediate_Offset (word 208)) *) + 0x8b010021; (* arm_ADD X1 X1 X1 *) + 0x9b027c2a; (* arm_MUL X10 X1 X2 *) + 0xab0a0273; (* arm_ADDS X19 X19 X10 *) + 0x9bc27c2a; (* arm_UMULH X10 X1 X2 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9b047c2a; (* arm_MUL X10 X1 X4 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9bc47c2a; (* arm_UMULH X10 X1 X4 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9b067c2a; (* arm_MUL X10 X1 X6 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9bc67c2a; (* arm_UMULH X10 X1 X6 *) + 0xba0a0318; (* arm_ADCS X24 X24 X10 *) + 0x9b087c2a; (* arm_MUL X10 X1 X8 *) + 0xba0a0339; (* arm_ADCS X25 X25 X10 *) + 0x9bc87c2a; (* arm_UMULH X10 X1 X8 *) + 0xba0a0000; (* arm_ADCS X0 X0 X10 *) + 0xd341fc24; (* arm_LSR X4 X1 1 *) + 0x9b047c84; (* arm_MUL X4 X4 X4 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b037c2a; (* arm_MUL X10 X1 X3 *) + 0xab0a0294; (* arm_ADDS X20 X20 X10 *) + 0x9bc37c2a; (* arm_UMULH X10 X1 X3 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9b057c2a; (* arm_MUL X10 X1 X5 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9bc57c2a; (* arm_UMULH X10 X1 X5 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9b077c2a; (* arm_MUL X10 X1 X7 *) + 0xba0a0318; (* arm_ADCS X24 X24 X10 *) + 0x9bc77c2a; (* arm_UMULH X10 X1 X7 *) + 0xba0a0339; (* arm_ADCS X25 X25 X10 *) + 0x9b097c2a; (* arm_MUL X10 X1 X9 *) + 0xba0a0000; (* arm_ADCS X0 X0 X10 *) + 0x9bc97c2a; (* arm_UMULH X10 X1 X9 *) + 0x9a0a0084; (* arm_ADC X4 X4 X10 *) + 0x9b027c42; (* arm_MUL X2 X2 X2 *) + 0xeb1f03ff; (* arm_CMP XZR XZR *) + 0x93d3268a; (* arm_EXTR X10 X20 X19 9 *) + 0xba0a0042; (* arm_ADCS X2 X2 X10 *) + 0x93d426aa; (* arm_EXTR X10 X21 X20 9 *) + 0xba0a016b; (* arm_ADCS X11 X11 X10 *) + 0x93d526ca; (* arm_EXTR X10 X22 X21 9 *) + 0xba0a018c; (* arm_ADCS X12 X12 X10 *) + 0x93d626ea; (* arm_EXTR X10 X23 X22 9 *) + 0xba0a01ad; (* arm_ADCS X13 X13 X10 *) + 0x93d7270a; (* arm_EXTR X10 X24 X23 9 *) + 0xba0a01ce; (* arm_ADCS X14 X14 X10 *) + 0x93d8272a; (* arm_EXTR X10 X25 X24 9 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x93d9240a; (* arm_EXTR X10 X0 X25 9 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x93c0248a; (* arm_EXTR X10 X4 X0 9 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0xb277da73; (* arm_ORR X19 X19 (rvalue (word 18446744073709551104)) *) + 0xd349fc8a; (* arm_LSR X10 X4 9 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0xfa1f0042; (* arm_SBCS X2 X2 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xda1f0273; (* arm_SBC X19 X19 XZR *) + 0x92402273; (* arm_AND X19 X19 (rvalue (word 511)) *) + 0xa916afe2; (* arm_STP X2 X11 SP (Immediate_Offset (iword (&360))) *) + 0xa917b7ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&376))) *) + 0xa918bfee; (* arm_STP X14 X15 SP (Immediate_Offset (iword (&392))) *) + 0xa919c7f0; (* arm_STP X16 X17 SP (Immediate_Offset (iword (&408))) *) + 0xf900d7f3; (* arm_STR X19 SP (Immediate_Offset (word 424)) *) + 0xa9491383; (* arm_LDP X3 X4 X28 (Immediate_Offset (iword (&144))) *) + 0xa9449b65; (* arm_LDP X5 X6 X27 (Immediate_Offset (iword (&72))) *) + 0x9b057c6f; (* arm_MUL X15 X3 X5 *) + 0x9bc57c70; (* arm_UMULH X16 X3 X5 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0x9bc67c71; (* arm_UMULH X17 X3 X6 *) + 0xab0e0210; (* arm_ADDS X16 X16 X14 *) + 0xa945a367; (* arm_LDP X7 X8 X27 (Immediate_Offset (iword (&88))) *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0x9bc77c73; (* arm_UMULH X19 X3 X7 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0x9bc87c74; (* arm_UMULH X20 X3 X8 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0xa946ab69; (* arm_LDP X9 X10 X27 (Immediate_Offset (iword (&104))) *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0x9bc97c75; (* arm_UMULH X21 X3 X9 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0x9bca7c76; (* arm_UMULH X22 X3 X10 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0xa947b36b; (* arm_LDP X11 X12 X27 (Immediate_Offset (iword (&120))) *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0x9bcb7c77; (* arm_UMULH X23 X3 X11 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0xf940476d; (* arm_LDR X13 X27 (Immediate_Offset (word 136)) *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0x9bcc7c78; (* arm_UMULH X24 X3 X12 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0x9bcd7c61; (* arm_UMULH X1 X3 X13 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e0210; (* arm_ADDS X16 X16 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9a9f37e0; (* arm_CSET X0 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0231; (* arm_ADDS X17 X17 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0000; (* arm_ADC X0 X0 X14 *) + 0xa91b43ef; (* arm_STP X15 X16 SP (Immediate_Offset (iword (&432))) *) + 0xa94a1383; (* arm_LDP X3 X4 X28 (Immediate_Offset (iword (&160))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0231; (* arm_ADDS X17 X17 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9a9f37ef; (* arm_CSET X15 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e0273; (* arm_ADDS X19 X19 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e01ef; (* arm_ADC X15 X15 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e0273; (* arm_ADDS X19 X19 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9a9f37f0; (* arm_CSET X16 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0294; (* arm_ADDS X20 X20 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0210; (* arm_ADC X16 X16 X14 *) + 0xa91c4ff1; (* arm_STP X17 X19 SP (Immediate_Offset (iword (&448))) *) + 0xa94b1383; (* arm_LDP X3 X4 X28 (Immediate_Offset (iword (&176))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0294; (* arm_ADDS X20 X20 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9a9f37f1; (* arm_CSET X17 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e02b5; (* arm_ADDS X21 X21 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e0231; (* arm_ADC X17 X17 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e02b5; (* arm_ADDS X21 X21 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9a9f37f3; (* arm_CSET X19 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e02d6; (* arm_ADDS X22 X22 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0273; (* arm_ADC X19 X19 X14 *) + 0xa91d57f4; (* arm_STP X20 X21 SP (Immediate_Offset (iword (&464))) *) + 0xa94c1383; (* arm_LDP X3 X4 X28 (Immediate_Offset (iword (&192))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e02d6; (* arm_ADDS X22 X22 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e02f7; (* arm_ADDS X23 X23 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e0294; (* arm_ADC X20 X20 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e02f7; (* arm_ADDS X23 X23 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9a9f37f5; (* arm_CSET X21 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0318; (* arm_ADDS X24 X24 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0xa91e5ff6; (* arm_STP X22 X23 SP (Immediate_Offset (iword (&480))) *) + 0xf9406b83; (* arm_LDR X3 X28 (Immediate_Offset (word 208)) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0318; (* arm_ADDS X24 X24 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e0021; (* arm_ADDS X1 X1 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0xeb1f03ff; (* arm_CMP XZR XZR *) + 0xa95b1be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&432))) *) + 0x93d8242e; (* arm_EXTR X14 X1 X24 9 *) + 0xba0e00a5; (* arm_ADCS X5 X5 X14 *) + 0x93c1240e; (* arm_EXTR X14 X0 X1 9 *) + 0xba0e00c6; (* arm_ADCS X6 X6 X14 *) + 0xa95c23e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&448))) *) + 0x93c025ee; (* arm_EXTR X14 X15 X0 9 *) + 0xba0e00e7; (* arm_ADCS X7 X7 X14 *) + 0x93cf260e; (* arm_EXTR X14 X16 X15 9 *) + 0xba0e0108; (* arm_ADCS X8 X8 X14 *) + 0xa95d2be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&464))) *) + 0x93d0262e; (* arm_EXTR X14 X17 X16 9 *) + 0xba0e0129; (* arm_ADCS X9 X9 X14 *) + 0x93d1266e; (* arm_EXTR X14 X19 X17 9 *) + 0xba0e014a; (* arm_ADCS X10 X10 X14 *) + 0xa95e33eb; (* arm_LDP X11 X12 SP (Immediate_Offset (iword (&480))) *) + 0x93d3268e; (* arm_EXTR X14 X20 X19 9 *) + 0xba0e016b; (* arm_ADCS X11 X11 X14 *) + 0x93d426ae; (* arm_EXTR X14 X21 X20 9 *) + 0xba0e018c; (* arm_ADCS X12 X12 X14 *) + 0xb277db0d; (* arm_ORR X13 X24 (rvalue (word 18446744073709551104)) *) + 0xd349feae; (* arm_LSR X14 X21 9 *) + 0xba0e01ad; (* arm_ADCS X13 X13 X14 *) + 0xfa1f00a5; (* arm_SBCS X5 X5 XZR *) + 0xfa1f00c6; (* arm_SBCS X6 X6 XZR *) + 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) + 0xfa1f0108; (* arm_SBCS X8 X8 XZR *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda1f01ad; (* arm_SBC X13 X13 XZR *) + 0x924021ad; (* arm_AND X13 X13 (rvalue (word 511)) *) + 0xa91b1be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&432))) *) + 0xa91c23e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&448))) *) + 0xa91d2be9; (* arm_STP X9 X10 SP (Immediate_Offset (iword (&464))) *) + 0xa91e33eb; (* arm_STP X11 X12 SP (Immediate_Offset (iword (&480))) *) + 0xf900fbed; (* arm_STR X13 SP (Immediate_Offset (word 496)) *) + 0xa9491363; (* arm_LDP X3 X4 X27 (Immediate_Offset (iword (&144))) *) + 0xa9449b85; (* arm_LDP X5 X6 X28 (Immediate_Offset (iword (&72))) *) + 0x9b057c6f; (* arm_MUL X15 X3 X5 *) + 0x9bc57c70; (* arm_UMULH X16 X3 X5 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0x9bc67c71; (* arm_UMULH X17 X3 X6 *) + 0xab0e0210; (* arm_ADDS X16 X16 X14 *) + 0xa945a387; (* arm_LDP X7 X8 X28 (Immediate_Offset (iword (&88))) *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0x9bc77c73; (* arm_UMULH X19 X3 X7 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0x9bc87c74; (* arm_UMULH X20 X3 X8 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0xa946ab89; (* arm_LDP X9 X10 X28 (Immediate_Offset (iword (&104))) *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0x9bc97c75; (* arm_UMULH X21 X3 X9 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0x9bca7c76; (* arm_UMULH X22 X3 X10 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0xa947b38b; (* arm_LDP X11 X12 X28 (Immediate_Offset (iword (&120))) *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0x9bcb7c77; (* arm_UMULH X23 X3 X11 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0xf940478d; (* arm_LDR X13 X28 (Immediate_Offset (word 136)) *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0x9bcc7c78; (* arm_UMULH X24 X3 X12 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0x9bcd7c61; (* arm_UMULH X1 X3 X13 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e0210; (* arm_ADDS X16 X16 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9a9f37e0; (* arm_CSET X0 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0231; (* arm_ADDS X17 X17 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0000; (* arm_ADC X0 X0 X14 *) + 0xa904c3ef; (* arm_STP X15 X16 SP (Immediate_Offset (iword (&72))) *) + 0xa94a1363; (* arm_LDP X3 X4 X27 (Immediate_Offset (iword (&160))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0231; (* arm_ADDS X17 X17 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9a9f37ef; (* arm_CSET X15 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e0273; (* arm_ADDS X19 X19 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e01ef; (* arm_ADC X15 X15 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e0273; (* arm_ADDS X19 X19 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9a9f37f0; (* arm_CSET X16 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0294; (* arm_ADDS X20 X20 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0210; (* arm_ADC X16 X16 X14 *) + 0xa905cff1; (* arm_STP X17 X19 SP (Immediate_Offset (iword (&88))) *) + 0xa94b1363; (* arm_LDP X3 X4 X27 (Immediate_Offset (iword (&176))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0294; (* arm_ADDS X20 X20 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9a9f37f1; (* arm_CSET X17 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e02b5; (* arm_ADDS X21 X21 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e0231; (* arm_ADC X17 X17 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e02b5; (* arm_ADDS X21 X21 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9a9f37f3; (* arm_CSET X19 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e02d6; (* arm_ADDS X22 X22 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0273; (* arm_ADC X19 X19 X14 *) + 0xa906d7f4; (* arm_STP X20 X21 SP (Immediate_Offset (iword (&104))) *) + 0xa94c1363; (* arm_LDP X3 X4 X27 (Immediate_Offset (iword (&192))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e02d6; (* arm_ADDS X22 X22 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e02f7; (* arm_ADDS X23 X23 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e0294; (* arm_ADC X20 X20 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e02f7; (* arm_ADDS X23 X23 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9a9f37f5; (* arm_CSET X21 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0318; (* arm_ADDS X24 X24 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0xa907dff6; (* arm_STP X22 X23 SP (Immediate_Offset (iword (&120))) *) + 0xf9406b63; (* arm_LDR X3 X27 (Immediate_Offset (word 208)) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0318; (* arm_ADDS X24 X24 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e0021; (* arm_ADDS X1 X1 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0xeb1f03ff; (* arm_CMP XZR XZR *) + 0xa9449be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&72))) *) + 0x93d8242e; (* arm_EXTR X14 X1 X24 9 *) + 0xba0e00a5; (* arm_ADCS X5 X5 X14 *) + 0x93c1240e; (* arm_EXTR X14 X0 X1 9 *) + 0xba0e00c6; (* arm_ADCS X6 X6 X14 *) + 0xa945a3e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&88))) *) + 0x93c025ee; (* arm_EXTR X14 X15 X0 9 *) + 0xba0e00e7; (* arm_ADCS X7 X7 X14 *) + 0x93cf260e; (* arm_EXTR X14 X16 X15 9 *) + 0xba0e0108; (* arm_ADCS X8 X8 X14 *) + 0xa946abe9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&104))) *) + 0x93d0262e; (* arm_EXTR X14 X17 X16 9 *) + 0xba0e0129; (* arm_ADCS X9 X9 X14 *) + 0x93d1266e; (* arm_EXTR X14 X19 X17 9 *) + 0xba0e014a; (* arm_ADCS X10 X10 X14 *) + 0xa947b3eb; (* arm_LDP X11 X12 SP (Immediate_Offset (iword (&120))) *) + 0x93d3268e; (* arm_EXTR X14 X20 X19 9 *) + 0xba0e016b; (* arm_ADCS X11 X11 X14 *) + 0x93d426ae; (* arm_EXTR X14 X21 X20 9 *) + 0xba0e018c; (* arm_ADCS X12 X12 X14 *) + 0xb277db0d; (* arm_ORR X13 X24 (rvalue (word 18446744073709551104)) *) + 0xd349feae; (* arm_LSR X14 X21 9 *) + 0xba0e01ad; (* arm_ADCS X13 X13 X14 *) + 0xfa1f00a5; (* arm_SBCS X5 X5 XZR *) + 0xfa1f00c6; (* arm_SBCS X6 X6 XZR *) + 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) + 0xfa1f0108; (* arm_SBCS X8 X8 XZR *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda1f01ad; (* arm_SBC X13 X13 XZR *) + 0x924021ad; (* arm_AND X13 X13 (rvalue (word 511)) *) + 0xa9049be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&72))) *) + 0xa905a3e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&88))) *) + 0xa906abe9; (* arm_STP X9 X10 SP (Immediate_Offset (iword (&104))) *) + 0xa907b3eb; (* arm_STP X11 X12 SP (Immediate_Offset (iword (&120))) *) + 0xf90047ed; (* arm_STR X13 SP (Immediate_Offset (word 136)) *) + 0xa94013e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&0))) *) + 0xa9401b85; (* arm_LDP X5 X6 X28 (Immediate_Offset (iword (&0))) *) + 0x9b057c6f; (* arm_MUL X15 X3 X5 *) + 0x9bc57c70; (* arm_UMULH X16 X3 X5 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0x9bc67c71; (* arm_UMULH X17 X3 X6 *) + 0xab0e0210; (* arm_ADDS X16 X16 X14 *) + 0xa9412387; (* arm_LDP X7 X8 X28 (Immediate_Offset (iword (&16))) *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0x9bc77c73; (* arm_UMULH X19 X3 X7 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0x9bc87c74; (* arm_UMULH X20 X3 X8 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0xa9422b89; (* arm_LDP X9 X10 X28 (Immediate_Offset (iword (&32))) *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0x9bc97c75; (* arm_UMULH X21 X3 X9 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0x9bca7c76; (* arm_UMULH X22 X3 X10 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0xa943338b; (* arm_LDP X11 X12 X28 (Immediate_Offset (iword (&48))) *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0x9bcb7c77; (* arm_UMULH X23 X3 X11 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0xf940238d; (* arm_LDR X13 X28 (Immediate_Offset (word 64)) *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0x9bcc7c78; (* arm_UMULH X24 X3 X12 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0x9bcd7c61; (* arm_UMULH X1 X3 X13 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e0210; (* arm_ADDS X16 X16 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9a9f37e0; (* arm_CSET X0 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0231; (* arm_ADDS X17 X17 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0000; (* arm_ADC X0 X0 X14 *) + 0xa90943ef; (* arm_STP X15 X16 SP (Immediate_Offset (iword (&144))) *) + 0xa94113e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&16))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0231; (* arm_ADDS X17 X17 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9a9f37ef; (* arm_CSET X15 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e0273; (* arm_ADDS X19 X19 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e01ef; (* arm_ADC X15 X15 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e0273; (* arm_ADDS X19 X19 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9a9f37f0; (* arm_CSET X16 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0294; (* arm_ADDS X20 X20 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0210; (* arm_ADC X16 X16 X14 *) + 0xa90a4ff1; (* arm_STP X17 X19 SP (Immediate_Offset (iword (&160))) *) + 0xa94213e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&32))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0294; (* arm_ADDS X20 X20 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9a9f37f1; (* arm_CSET X17 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e02b5; (* arm_ADDS X21 X21 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e0231; (* arm_ADC X17 X17 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e02b5; (* arm_ADDS X21 X21 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9a9f37f3; (* arm_CSET X19 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e02d6; (* arm_ADDS X22 X22 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0273; (* arm_ADC X19 X19 X14 *) + 0xa90b57f4; (* arm_STP X20 X21 SP (Immediate_Offset (iword (&176))) *) + 0xa94313e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&48))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e02d6; (* arm_ADDS X22 X22 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e02f7; (* arm_ADDS X23 X23 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e0294; (* arm_ADC X20 X20 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e02f7; (* arm_ADDS X23 X23 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9a9f37f5; (* arm_CSET X21 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0318; (* arm_ADDS X24 X24 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0xa90c5ff6; (* arm_STP X22 X23 SP (Immediate_Offset (iword (&192))) *) + 0xf94023e3; (* arm_LDR X3 SP (Immediate_Offset (word 64)) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0318; (* arm_ADDS X24 X24 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e0021; (* arm_ADDS X1 X1 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0xeb1f03ff; (* arm_CMP XZR XZR *) + 0xa9491be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&144))) *) + 0x93d8242e; (* arm_EXTR X14 X1 X24 9 *) + 0xba0e00a5; (* arm_ADCS X5 X5 X14 *) + 0x93c1240e; (* arm_EXTR X14 X0 X1 9 *) + 0xba0e00c6; (* arm_ADCS X6 X6 X14 *) + 0xa94a23e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&160))) *) + 0x93c025ee; (* arm_EXTR X14 X15 X0 9 *) + 0xba0e00e7; (* arm_ADCS X7 X7 X14 *) + 0x93cf260e; (* arm_EXTR X14 X16 X15 9 *) + 0xba0e0108; (* arm_ADCS X8 X8 X14 *) + 0xa94b2be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&176))) *) + 0x93d0262e; (* arm_EXTR X14 X17 X16 9 *) + 0xba0e0129; (* arm_ADCS X9 X9 X14 *) + 0x93d1266e; (* arm_EXTR X14 X19 X17 9 *) + 0xba0e014a; (* arm_ADCS X10 X10 X14 *) + 0xa94c33eb; (* arm_LDP X11 X12 SP (Immediate_Offset (iword (&192))) *) + 0x93d3268e; (* arm_EXTR X14 X20 X19 9 *) + 0xba0e016b; (* arm_ADCS X11 X11 X14 *) + 0x93d426ae; (* arm_EXTR X14 X21 X20 9 *) + 0xba0e018c; (* arm_ADCS X12 X12 X14 *) + 0xb277db0d; (* arm_ORR X13 X24 (rvalue (word 18446744073709551104)) *) + 0xd349feae; (* arm_LSR X14 X21 9 *) + 0xba0e01ad; (* arm_ADCS X13 X13 X14 *) + 0xfa1f00a5; (* arm_SBCS X5 X5 XZR *) + 0xfa1f00c6; (* arm_SBCS X6 X6 XZR *) + 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) + 0xfa1f0108; (* arm_SBCS X8 X8 XZR *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda1f01ad; (* arm_SBC X13 X13 XZR *) + 0x924021ad; (* arm_AND X13 X13 (rvalue (word 511)) *) + 0xa9091be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&144))) *) + 0xa90a23e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&160))) *) + 0xa90b2be9; (* arm_STP X9 X10 SP (Immediate_Offset (iword (&176))) *) + 0xa90c33eb; (* arm_STP X11 X12 SP (Immediate_Offset (iword (&192))) *) + 0xf9006bed; (* arm_STR X13 SP (Immediate_Offset (word 208)) *) + 0xa95693e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&360))) *) + 0xa9401b65; (* arm_LDP X5 X6 X27 (Immediate_Offset (iword (&0))) *) + 0x9b057c6f; (* arm_MUL X15 X3 X5 *) + 0x9bc57c70; (* arm_UMULH X16 X3 X5 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0x9bc67c71; (* arm_UMULH X17 X3 X6 *) + 0xab0e0210; (* arm_ADDS X16 X16 X14 *) + 0xa9412367; (* arm_LDP X7 X8 X27 (Immediate_Offset (iword (&16))) *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0x9bc77c73; (* arm_UMULH X19 X3 X7 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0x9bc87c74; (* arm_UMULH X20 X3 X8 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0xa9422b69; (* arm_LDP X9 X10 X27 (Immediate_Offset (iword (&32))) *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0x9bc97c75; (* arm_UMULH X21 X3 X9 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0x9bca7c76; (* arm_UMULH X22 X3 X10 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0xa943336b; (* arm_LDP X11 X12 X27 (Immediate_Offset (iword (&48))) *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0x9bcb7c77; (* arm_UMULH X23 X3 X11 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0xf940236d; (* arm_LDR X13 X27 (Immediate_Offset (word 64)) *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0x9bcc7c78; (* arm_UMULH X24 X3 X12 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0x9bcd7c61; (* arm_UMULH X1 X3 X13 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e0210; (* arm_ADDS X16 X16 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9a9f37e0; (* arm_CSET X0 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0231; (* arm_ADDS X17 X17 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0000; (* arm_ADC X0 X0 X14 *) + 0xa91243ef; (* arm_STP X15 X16 SP (Immediate_Offset (iword (&288))) *) + 0xa95793e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&376))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0231; (* arm_ADDS X17 X17 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9a9f37ef; (* arm_CSET X15 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e0273; (* arm_ADDS X19 X19 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e01ef; (* arm_ADC X15 X15 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e0273; (* arm_ADDS X19 X19 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9a9f37f0; (* arm_CSET X16 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0294; (* arm_ADDS X20 X20 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0210; (* arm_ADC X16 X16 X14 *) + 0xa9134ff1; (* arm_STP X17 X19 SP (Immediate_Offset (iword (&304))) *) + 0xa95893e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&392))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0294; (* arm_ADDS X20 X20 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9a9f37f1; (* arm_CSET X17 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e02b5; (* arm_ADDS X21 X21 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e0231; (* arm_ADC X17 X17 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e02b5; (* arm_ADDS X21 X21 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9a9f37f3; (* arm_CSET X19 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e02d6; (* arm_ADDS X22 X22 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0273; (* arm_ADC X19 X19 X14 *) + 0xa91457f4; (* arm_STP X20 X21 SP (Immediate_Offset (iword (&320))) *) + 0xa95993e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&408))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e02d6; (* arm_ADDS X22 X22 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e02f7; (* arm_ADDS X23 X23 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e0294; (* arm_ADC X20 X20 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e02f7; (* arm_ADDS X23 X23 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9a9f37f5; (* arm_CSET X21 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0318; (* arm_ADDS X24 X24 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0xa9155ff6; (* arm_STP X22 X23 SP (Immediate_Offset (iword (&336))) *) + 0xf940d7e3; (* arm_LDR X3 SP (Immediate_Offset (word 424)) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0318; (* arm_ADDS X24 X24 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e0021; (* arm_ADDS X1 X1 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0xeb1f03ff; (* arm_CMP XZR XZR *) + 0xa9521be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&288))) *) + 0x93d8242e; (* arm_EXTR X14 X1 X24 9 *) + 0xba0e00a5; (* arm_ADCS X5 X5 X14 *) + 0x93c1240e; (* arm_EXTR X14 X0 X1 9 *) + 0xba0e00c6; (* arm_ADCS X6 X6 X14 *) + 0xa95323e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&304))) *) + 0x93c025ee; (* arm_EXTR X14 X15 X0 9 *) + 0xba0e00e7; (* arm_ADCS X7 X7 X14 *) + 0x93cf260e; (* arm_EXTR X14 X16 X15 9 *) + 0xba0e0108; (* arm_ADCS X8 X8 X14 *) + 0xa9542be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&320))) *) + 0x93d0262e; (* arm_EXTR X14 X17 X16 9 *) + 0xba0e0129; (* arm_ADCS X9 X9 X14 *) + 0x93d1266e; (* arm_EXTR X14 X19 X17 9 *) + 0xba0e014a; (* arm_ADCS X10 X10 X14 *) + 0xa95533eb; (* arm_LDP X11 X12 SP (Immediate_Offset (iword (&336))) *) + 0x93d3268e; (* arm_EXTR X14 X20 X19 9 *) + 0xba0e016b; (* arm_ADCS X11 X11 X14 *) + 0x93d426ae; (* arm_EXTR X14 X21 X20 9 *) + 0xba0e018c; (* arm_ADCS X12 X12 X14 *) + 0xb277db0d; (* arm_ORR X13 X24 (rvalue (word 18446744073709551104)) *) + 0xd349feae; (* arm_LSR X14 X21 9 *) + 0xba0e01ad; (* arm_ADCS X13 X13 X14 *) + 0xfa1f00a5; (* arm_SBCS X5 X5 XZR *) + 0xfa1f00c6; (* arm_SBCS X6 X6 XZR *) + 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) + 0xfa1f0108; (* arm_SBCS X8 X8 XZR *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda1f01ad; (* arm_SBC X13 X13 XZR *) + 0x924021ad; (* arm_AND X13 X13 (rvalue (word 511)) *) + 0xa9121be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&288))) *) + 0xa91323e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&304))) *) + 0xa9142be9; (* arm_STP X9 X10 SP (Immediate_Offset (iword (&320))) *) + 0xa91533eb; (* arm_STP X11 X12 SP (Immediate_Offset (iword (&336))) *) + 0xf900b3ed; (* arm_STR X13 SP (Immediate_Offset (word 352)) *) + 0xa94013e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&0))) *) + 0xa9449be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&72))) *) + 0x9b057c6f; (* arm_MUL X15 X3 X5 *) + 0x9bc57c70; (* arm_UMULH X16 X3 X5 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0x9bc67c71; (* arm_UMULH X17 X3 X6 *) + 0xab0e0210; (* arm_ADDS X16 X16 X14 *) + 0xa945a3e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&88))) *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0x9bc77c73; (* arm_UMULH X19 X3 X7 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0x9bc87c74; (* arm_UMULH X20 X3 X8 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0xa946abe9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&104))) *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0x9bc97c75; (* arm_UMULH X21 X3 X9 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0x9bca7c76; (* arm_UMULH X22 X3 X10 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0xa947b3eb; (* arm_LDP X11 X12 SP (Immediate_Offset (iword (&120))) *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0x9bcb7c77; (* arm_UMULH X23 X3 X11 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0xf94047ed; (* arm_LDR X13 SP (Immediate_Offset (word 136)) *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0x9bcc7c78; (* arm_UMULH X24 X3 X12 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0x9bcd7c61; (* arm_UMULH X1 X3 X13 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e0210; (* arm_ADDS X16 X16 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9a9f37e0; (* arm_CSET X0 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0231; (* arm_ADDS X17 X17 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0000; (* arm_ADC X0 X0 X14 *) + 0xa904c3ef; (* arm_STP X15 X16 SP (Immediate_Offset (iword (&72))) *) + 0xa94113e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&16))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0231; (* arm_ADDS X17 X17 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9a9f37ef; (* arm_CSET X15 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e0273; (* arm_ADDS X19 X19 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e01ef; (* arm_ADC X15 X15 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e0273; (* arm_ADDS X19 X19 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9a9f37f0; (* arm_CSET X16 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0294; (* arm_ADDS X20 X20 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0210; (* arm_ADC X16 X16 X14 *) + 0xa905cff1; (* arm_STP X17 X19 SP (Immediate_Offset (iword (&88))) *) + 0xa94213e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&32))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0294; (* arm_ADDS X20 X20 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9a9f37f1; (* arm_CSET X17 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e02b5; (* arm_ADDS X21 X21 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e0231; (* arm_ADC X17 X17 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e02b5; (* arm_ADDS X21 X21 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9a9f37f3; (* arm_CSET X19 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e02d6; (* arm_ADDS X22 X22 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0273; (* arm_ADC X19 X19 X14 *) + 0xa906d7f4; (* arm_STP X20 X21 SP (Immediate_Offset (iword (&104))) *) + 0xa94313e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&48))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e02d6; (* arm_ADDS X22 X22 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e02f7; (* arm_ADDS X23 X23 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e0294; (* arm_ADC X20 X20 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e02f7; (* arm_ADDS X23 X23 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9a9f37f5; (* arm_CSET X21 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0318; (* arm_ADDS X24 X24 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0xa907dff6; (* arm_STP X22 X23 SP (Immediate_Offset (iword (&120))) *) + 0xf94023e3; (* arm_LDR X3 SP (Immediate_Offset (word 64)) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0318; (* arm_ADDS X24 X24 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e0021; (* arm_ADDS X1 X1 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0xeb1f03ff; (* arm_CMP XZR XZR *) + 0xa9449be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&72))) *) + 0x93d8242e; (* arm_EXTR X14 X1 X24 9 *) + 0xba0e00a5; (* arm_ADCS X5 X5 X14 *) + 0x93c1240e; (* arm_EXTR X14 X0 X1 9 *) + 0xba0e00c6; (* arm_ADCS X6 X6 X14 *) + 0xa945a3e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&88))) *) + 0x93c025ee; (* arm_EXTR X14 X15 X0 9 *) + 0xba0e00e7; (* arm_ADCS X7 X7 X14 *) + 0x93cf260e; (* arm_EXTR X14 X16 X15 9 *) + 0xba0e0108; (* arm_ADCS X8 X8 X14 *) + 0xa946abe9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&104))) *) + 0x93d0262e; (* arm_EXTR X14 X17 X16 9 *) + 0xba0e0129; (* arm_ADCS X9 X9 X14 *) + 0x93d1266e; (* arm_EXTR X14 X19 X17 9 *) + 0xba0e014a; (* arm_ADCS X10 X10 X14 *) + 0xa947b3eb; (* arm_LDP X11 X12 SP (Immediate_Offset (iword (&120))) *) + 0x93d3268e; (* arm_EXTR X14 X20 X19 9 *) + 0xba0e016b; (* arm_ADCS X11 X11 X14 *) + 0x93d426ae; (* arm_EXTR X14 X21 X20 9 *) + 0xba0e018c; (* arm_ADCS X12 X12 X14 *) + 0xb277db0d; (* arm_ORR X13 X24 (rvalue (word 18446744073709551104)) *) + 0xd349feae; (* arm_LSR X14 X21 9 *) + 0xba0e01ad; (* arm_ADCS X13 X13 X14 *) + 0xfa1f00a5; (* arm_SBCS X5 X5 XZR *) + 0xfa1f00c6; (* arm_SBCS X6 X6 XZR *) + 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) + 0xfa1f0108; (* arm_SBCS X8 X8 XZR *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda1f01ad; (* arm_SBC X13 X13 XZR *) + 0x924021ad; (* arm_AND X13 X13 (rvalue (word 511)) *) + 0xa9049be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&72))) *) + 0xa905a3e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&88))) *) + 0xa906abe9; (* arm_STP X9 X10 SP (Immediate_Offset (iword (&104))) *) + 0xa907b3eb; (* arm_STP X11 X12 SP (Immediate_Offset (iword (&120))) *) + 0xf90047ed; (* arm_STR X13 SP (Immediate_Offset (word 136)) *) + 0xa95693e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&360))) *) + 0xa95b1be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&432))) *) + 0x9b057c6f; (* arm_MUL X15 X3 X5 *) + 0x9bc57c70; (* arm_UMULH X16 X3 X5 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0x9bc67c71; (* arm_UMULH X17 X3 X6 *) + 0xab0e0210; (* arm_ADDS X16 X16 X14 *) + 0xa95c23e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&448))) *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0x9bc77c73; (* arm_UMULH X19 X3 X7 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0x9bc87c74; (* arm_UMULH X20 X3 X8 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0xa95d2be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&464))) *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0x9bc97c75; (* arm_UMULH X21 X3 X9 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0x9bca7c76; (* arm_UMULH X22 X3 X10 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0xa95e33eb; (* arm_LDP X11 X12 SP (Immediate_Offset (iword (&480))) *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0x9bcb7c77; (* arm_UMULH X23 X3 X11 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0xf940fbed; (* arm_LDR X13 SP (Immediate_Offset (word 496)) *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0x9bcc7c78; (* arm_UMULH X24 X3 X12 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0x9bcd7c61; (* arm_UMULH X1 X3 X13 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e0210; (* arm_ADDS X16 X16 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9a9f37e0; (* arm_CSET X0 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0231; (* arm_ADDS X17 X17 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0000; (* arm_ADC X0 X0 X14 *) + 0xa91b43ef; (* arm_STP X15 X16 SP (Immediate_Offset (iword (&432))) *) + 0xa95793e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&376))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0231; (* arm_ADDS X17 X17 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9a9f37ef; (* arm_CSET X15 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e0273; (* arm_ADDS X19 X19 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e01ef; (* arm_ADC X15 X15 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e0273; (* arm_ADDS X19 X19 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9a9f37f0; (* arm_CSET X16 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0294; (* arm_ADDS X20 X20 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0210; (* arm_ADC X16 X16 X14 *) + 0xa91c4ff1; (* arm_STP X17 X19 SP (Immediate_Offset (iword (&448))) *) + 0xa95893e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&392))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0294; (* arm_ADDS X20 X20 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9a9f37f1; (* arm_CSET X17 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e02b5; (* arm_ADDS X21 X21 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e0231; (* arm_ADC X17 X17 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e02b5; (* arm_ADDS X21 X21 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9a9f37f3; (* arm_CSET X19 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e02d6; (* arm_ADDS X22 X22 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0273; (* arm_ADC X19 X19 X14 *) + 0xa91d57f4; (* arm_STP X20 X21 SP (Immediate_Offset (iword (&464))) *) + 0xa95993e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&408))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e02d6; (* arm_ADDS X22 X22 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e02f7; (* arm_ADDS X23 X23 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e0294; (* arm_ADC X20 X20 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e02f7; (* arm_ADDS X23 X23 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9a9f37f5; (* arm_CSET X21 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0318; (* arm_ADDS X24 X24 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0xa91e5ff6; (* arm_STP X22 X23 SP (Immediate_Offset (iword (&480))) *) + 0xf940d7e3; (* arm_LDR X3 SP (Immediate_Offset (word 424)) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0318; (* arm_ADDS X24 X24 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e0021; (* arm_ADDS X1 X1 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0xeb1f03ff; (* arm_CMP XZR XZR *) + 0xa95b1be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&432))) *) + 0x93d8242e; (* arm_EXTR X14 X1 X24 9 *) + 0xba0e00a5; (* arm_ADCS X5 X5 X14 *) + 0x93c1240e; (* arm_EXTR X14 X0 X1 9 *) + 0xba0e00c6; (* arm_ADCS X6 X6 X14 *) + 0xa95c23e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&448))) *) + 0x93c025ee; (* arm_EXTR X14 X15 X0 9 *) + 0xba0e00e7; (* arm_ADCS X7 X7 X14 *) + 0x93cf260e; (* arm_EXTR X14 X16 X15 9 *) + 0xba0e0108; (* arm_ADCS X8 X8 X14 *) + 0xa95d2be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&464))) *) + 0x93d0262e; (* arm_EXTR X14 X17 X16 9 *) + 0xba0e0129; (* arm_ADCS X9 X9 X14 *) + 0x93d1266e; (* arm_EXTR X14 X19 X17 9 *) + 0xba0e014a; (* arm_ADCS X10 X10 X14 *) + 0xa95e33eb; (* arm_LDP X11 X12 SP (Immediate_Offset (iword (&480))) *) + 0x93d3268e; (* arm_EXTR X14 X20 X19 9 *) + 0xba0e016b; (* arm_ADCS X11 X11 X14 *) + 0x93d426ae; (* arm_EXTR X14 X21 X20 9 *) + 0xba0e018c; (* arm_ADCS X12 X12 X14 *) + 0xb277db0d; (* arm_ORR X13 X24 (rvalue (word 18446744073709551104)) *) + 0xd349feae; (* arm_LSR X14 X21 9 *) + 0xba0e01ad; (* arm_ADCS X13 X13 X14 *) + 0xfa1f00a5; (* arm_SBCS X5 X5 XZR *) + 0xfa1f00c6; (* arm_SBCS X6 X6 XZR *) + 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) + 0xfa1f0108; (* arm_SBCS X8 X8 XZR *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda1f01ad; (* arm_SBC X13 X13 XZR *) + 0x924021ad; (* arm_AND X13 X13 (rvalue (word 511)) *) + 0xa91b1be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&432))) *) + 0xa91c23e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&448))) *) + 0xa91d2be9; (* arm_STP X9 X10 SP (Immediate_Offset (iword (&464))) *) + 0xa91e33eb; (* arm_STP X11 X12 SP (Immediate_Offset (iword (&480))) *) + 0xf900fbed; (* arm_STR X13 SP (Immediate_Offset (word 496)) *) + 0xa9491be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&144))) *) + 0xa9520fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&288))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa94a23e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&160))) *) + 0xa9530fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&304))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xa94b2be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&176))) *) + 0xa9540fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&320))) *) + 0xfa040129; (* arm_SBCS X9 X9 X4 *) + 0xfa03014a; (* arm_SBCS X10 X10 X3 *) + 0xa94c33eb; (* arm_LDP X11 X12 SP (Immediate_Offset (iword (&192))) *) + 0xa9550fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&336))) *) + 0xfa04016b; (* arm_SBCS X11 X11 X4 *) + 0xfa03018c; (* arm_SBCS X12 X12 X3 *) + 0xf9406bed; (* arm_LDR X13 SP (Immediate_Offset (word 208)) *) + 0xf940b3e4; (* arm_LDR X4 SP (Immediate_Offset (word 352)) *) + 0xfa0401ad; (* arm_SBCS X13 X13 X4 *) + 0xfa1f00a5; (* arm_SBCS X5 X5 XZR *) + 0xfa1f00c6; (* arm_SBCS X6 X6 XZR *) + 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) + 0xfa1f0108; (* arm_SBCS X8 X8 XZR *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0x924021ad; (* arm_AND X13 X13 (rvalue (word 511)) *) + 0xa9169be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&360))) *) + 0xa917a3e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&376))) *) + 0xa918abe9; (* arm_STP X9 X10 SP (Immediate_Offset (iword (&392))) *) + 0xa919b3eb; (* arm_STP X11 X12 SP (Immediate_Offset (iword (&408))) *) + 0xf900d7ed; (* arm_STR X13 SP (Immediate_Offset (word 424)) *) + 0xa9449be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&72))) *) + 0xa95b0fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&432))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa945a3e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&88))) *) + 0xa95c0fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&448))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xa946abe9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&104))) *) + 0xa95d0fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&464))) *) + 0xfa040129; (* arm_SBCS X9 X9 X4 *) + 0xfa03014a; (* arm_SBCS X10 X10 X3 *) + 0xa947b3eb; (* arm_LDP X11 X12 SP (Immediate_Offset (iword (&120))) *) + 0xa95e0fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&480))) *) + 0xfa04016b; (* arm_SBCS X11 X11 X4 *) + 0xfa03018c; (* arm_SBCS X12 X12 X3 *) + 0xf94047ed; (* arm_LDR X13 SP (Immediate_Offset (word 136)) *) + 0xf940fbe4; (* arm_LDR X4 SP (Immediate_Offset (word 496)) *) + 0xfa0401ad; (* arm_SBCS X13 X13 X4 *) + 0xfa1f00a5; (* arm_SBCS X5 X5 XZR *) + 0xfa1f00c6; (* arm_SBCS X6 X6 XZR *) + 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) + 0xfa1f0108; (* arm_SBCS X8 X8 XZR *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0x924021ad; (* arm_AND X13 X13 (rvalue (word 511)) *) + 0xa9049be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&72))) *) + 0xa905a3e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&88))) *) + 0xa906abe9; (* arm_STP X9 X10 SP (Immediate_Offset (iword (&104))) *) + 0xa907b3eb; (* arm_STP X11 X12 SP (Immediate_Offset (iword (&120))) *) + 0xf90047ed; (* arm_STR X13 SP (Immediate_Offset (word 136)) *) + 0xa9568fe2; (* arm_LDP X2 X3 SP (Immediate_Offset (iword (&360))) *) + 0x9b037c4b; (* arm_MUL X11 X2 X3 *) + 0x9bc37c4c; (* arm_UMULH X12 X2 X3 *) + 0xa95797e4; (* arm_LDP X4 X5 SP (Immediate_Offset (iword (&376))) *) + 0x9b047c4a; (* arm_MUL X10 X2 X4 *) + 0x9bc47c4d; (* arm_UMULH X13 X2 X4 *) + 0xab0a018c; (* arm_ADDS X12 X12 X10 *) + 0xa9589fe6; (* arm_LDP X6 X7 SP (Immediate_Offset (iword (&392))) *) + 0x9b057c4a; (* arm_MUL X10 X2 X5 *) + 0x9bc57c4e; (* arm_UMULH X14 X2 X5 *) + 0xba0a01ad; (* arm_ADCS X13 X13 X10 *) + 0xa959a7e8; (* arm_LDP X8 X9 SP (Immediate_Offset (iword (&408))) *) + 0x9b067c4a; (* arm_MUL X10 X2 X6 *) + 0x9bc67c4f; (* arm_UMULH X15 X2 X6 *) + 0xba0a01ce; (* arm_ADCS X14 X14 X10 *) + 0x9b077c4a; (* arm_MUL X10 X2 X7 *) + 0x9bc77c50; (* arm_UMULH X16 X2 X7 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x9b087c4a; (* arm_MUL X10 X2 X8 *) + 0x9bc87c51; (* arm_UMULH X17 X2 X8 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9b097c4a; (* arm_MUL X10 X2 X9 *) + 0x9bc97c53; (* arm_UMULH X19 X2 X9 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0x9b047c6a; (* arm_MUL X10 X3 X4 *) + 0xab0a01ad; (* arm_ADDS X13 X13 X10 *) + 0x9b057c6a; (* arm_MUL X10 X3 X5 *) + 0xba0a01ce; (* arm_ADCS X14 X14 X10 *) + 0x9b067c6a; (* arm_MUL X10 X3 X6 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x9b077c6a; (* arm_MUL X10 X3 X7 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9b087c6a; (* arm_MUL X10 X3 X8 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9b097c6a; (* arm_MUL X10 X3 X9 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc47c6a; (* arm_UMULH X10 X3 X4 *) + 0xab0a01ce; (* arm_ADDS X14 X14 X10 *) + 0x9bc57c6a; (* arm_UMULH X10 X3 X5 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x9bc67c6a; (* arm_UMULH X10 X3 X6 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9bc77c6a; (* arm_UMULH X10 X3 X7 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9bc87c6a; (* arm_UMULH X10 X3 X8 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9bc97c6a; (* arm_UMULH X10 X3 X9 *) + 0x9a0a0294; (* arm_ADC X20 X20 X10 *) + 0x9b077cca; (* arm_MUL X10 X6 X7 *) + 0x9bc77cd5; (* arm_UMULH X21 X6 X7 *) + 0xab0a0294; (* arm_ADDS X20 X20 X10 *) + 0x9a1f02b5; (* arm_ADC X21 X21 XZR *) + 0x9b057c8a; (* arm_MUL X10 X4 X5 *) + 0xab0a01ef; (* arm_ADDS X15 X15 X10 *) + 0x9b067c8a; (* arm_MUL X10 X4 X6 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9b077c8a; (* arm_MUL X10 X4 X7 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9b087c8a; (* arm_MUL X10 X4 X8 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9b097c8a; (* arm_MUL X10 X4 X9 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9b087cca; (* arm_MUL X10 X6 X8 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9a9f37f6; (* arm_CSET X22 Condition_CS *) + 0x9bc57c8a; (* arm_UMULH X10 X4 X5 *) + 0xab0a0210; (* arm_ADDS X16 X16 X10 *) + 0x9bc67c8a; (* arm_UMULH X10 X4 X6 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9bc77c8a; (* arm_UMULH X10 X4 X7 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9bc87c8a; (* arm_UMULH X10 X4 X8 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9bc97c8a; (* arm_UMULH X10 X4 X9 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9bc87cca; (* arm_UMULH X10 X6 X8 *) + 0x9a0a02d6; (* arm_ADC X22 X22 X10 *) + 0x9b087cea; (* arm_MUL X10 X7 X8 *) + 0x9bc87cf7; (* arm_UMULH X23 X7 X8 *) + 0xab0a02d6; (* arm_ADDS X22 X22 X10 *) + 0x9a1f02f7; (* arm_ADC X23 X23 XZR *) + 0x9b067caa; (* arm_MUL X10 X5 X6 *) + 0xab0a0231; (* arm_ADDS X17 X17 X10 *) + 0x9b077caa; (* arm_MUL X10 X5 X7 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9b087caa; (* arm_MUL X10 X5 X8 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9b097caa; (* arm_MUL X10 X5 X9 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9b097cca; (* arm_MUL X10 X6 X9 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9b097cea; (* arm_MUL X10 X7 X9 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9a9f37f8; (* arm_CSET X24 Condition_CS *) + 0x9bc67caa; (* arm_UMULH X10 X5 X6 *) + 0xab0a0273; (* arm_ADDS X19 X19 X10 *) + 0x9bc77caa; (* arm_UMULH X10 X5 X7 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9bc87caa; (* arm_UMULH X10 X5 X8 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9bc97caa; (* arm_UMULH X10 X5 X9 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9bc97cca; (* arm_UMULH X10 X6 X9 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9bc97cea; (* arm_UMULH X10 X7 X9 *) + 0x9a0a0318; (* arm_ADC X24 X24 X10 *) + 0x9b097d0a; (* arm_MUL X10 X8 X9 *) + 0x9bc97d19; (* arm_UMULH X25 X8 X9 *) + 0xab0a0318; (* arm_ADDS X24 X24 X10 *) + 0x9a1f0339; (* arm_ADC X25 X25 XZR *) + 0xab0b016b; (* arm_ADDS X11 X11 X11 *) + 0xba0c018c; (* arm_ADCS X12 X12 X12 *) + 0xba0d01ad; (* arm_ADCS X13 X13 X13 *) + 0xba0e01ce; (* arm_ADCS X14 X14 X14 *) + 0xba0f01ef; (* arm_ADCS X15 X15 X15 *) + 0xba100210; (* arm_ADCS X16 X16 X16 *) + 0xba110231; (* arm_ADCS X17 X17 X17 *) + 0xba130273; (* arm_ADCS X19 X19 X19 *) + 0xba140294; (* arm_ADCS X20 X20 X20 *) + 0xba1502b5; (* arm_ADCS X21 X21 X21 *) + 0xba1602d6; (* arm_ADCS X22 X22 X22 *) + 0xba1702f7; (* arm_ADCS X23 X23 X23 *) + 0xba180318; (* arm_ADCS X24 X24 X24 *) + 0xba190339; (* arm_ADCS X25 X25 X25 *) + 0x9a9f37e0; (* arm_CSET X0 Condition_CS *) + 0x9bc27c4a; (* arm_UMULH X10 X2 X2 *) + 0xab0a016b; (* arm_ADDS X11 X11 X10 *) + 0x9b037c6a; (* arm_MUL X10 X3 X3 *) + 0xba0a018c; (* arm_ADCS X12 X12 X10 *) + 0x9bc37c6a; (* arm_UMULH X10 X3 X3 *) + 0xba0a01ad; (* arm_ADCS X13 X13 X10 *) + 0x9b047c8a; (* arm_MUL X10 X4 X4 *) + 0xba0a01ce; (* arm_ADCS X14 X14 X10 *) + 0x9bc47c8a; (* arm_UMULH X10 X4 X4 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x9b057caa; (* arm_MUL X10 X5 X5 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9bc57caa; (* arm_UMULH X10 X5 X5 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9b067cca; (* arm_MUL X10 X6 X6 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9bc67cca; (* arm_UMULH X10 X6 X6 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9b077cea; (* arm_MUL X10 X7 X7 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9bc77cea; (* arm_UMULH X10 X7 X7 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9b087d0a; (* arm_MUL X10 X8 X8 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9bc87d0a; (* arm_UMULH X10 X8 X8 *) + 0xba0a0318; (* arm_ADCS X24 X24 X10 *) + 0x9b097d2a; (* arm_MUL X10 X9 X9 *) + 0xba0a0339; (* arm_ADCS X25 X25 X10 *) + 0x9bc97d2a; (* arm_UMULH X10 X9 X9 *) + 0x9a0a0000; (* arm_ADC X0 X0 X10 *) + 0xf940d7e1; (* arm_LDR X1 SP (Immediate_Offset (word 424)) *) + 0x8b010021; (* arm_ADD X1 X1 X1 *) + 0x9b027c2a; (* arm_MUL X10 X1 X2 *) + 0xab0a0273; (* arm_ADDS X19 X19 X10 *) + 0x9bc27c2a; (* arm_UMULH X10 X1 X2 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9b047c2a; (* arm_MUL X10 X1 X4 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9bc47c2a; (* arm_UMULH X10 X1 X4 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9b067c2a; (* arm_MUL X10 X1 X6 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9bc67c2a; (* arm_UMULH X10 X1 X6 *) + 0xba0a0318; (* arm_ADCS X24 X24 X10 *) + 0x9b087c2a; (* arm_MUL X10 X1 X8 *) + 0xba0a0339; (* arm_ADCS X25 X25 X10 *) + 0x9bc87c2a; (* arm_UMULH X10 X1 X8 *) + 0xba0a0000; (* arm_ADCS X0 X0 X10 *) + 0xd341fc24; (* arm_LSR X4 X1 1 *) + 0x9b047c84; (* arm_MUL X4 X4 X4 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b037c2a; (* arm_MUL X10 X1 X3 *) + 0xab0a0294; (* arm_ADDS X20 X20 X10 *) + 0x9bc37c2a; (* arm_UMULH X10 X1 X3 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9b057c2a; (* arm_MUL X10 X1 X5 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9bc57c2a; (* arm_UMULH X10 X1 X5 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9b077c2a; (* arm_MUL X10 X1 X7 *) + 0xba0a0318; (* arm_ADCS X24 X24 X10 *) + 0x9bc77c2a; (* arm_UMULH X10 X1 X7 *) + 0xba0a0339; (* arm_ADCS X25 X25 X10 *) + 0x9b097c2a; (* arm_MUL X10 X1 X9 *) + 0xba0a0000; (* arm_ADCS X0 X0 X10 *) + 0x9bc97c2a; (* arm_UMULH X10 X1 X9 *) + 0x9a0a0084; (* arm_ADC X4 X4 X10 *) + 0x9b027c42; (* arm_MUL X2 X2 X2 *) + 0xeb1f03ff; (* arm_CMP XZR XZR *) + 0x93d3268a; (* arm_EXTR X10 X20 X19 9 *) + 0xba0a0042; (* arm_ADCS X2 X2 X10 *) + 0x93d426aa; (* arm_EXTR X10 X21 X20 9 *) + 0xba0a016b; (* arm_ADCS X11 X11 X10 *) + 0x93d526ca; (* arm_EXTR X10 X22 X21 9 *) + 0xba0a018c; (* arm_ADCS X12 X12 X10 *) + 0x93d626ea; (* arm_EXTR X10 X23 X22 9 *) + 0xba0a01ad; (* arm_ADCS X13 X13 X10 *) + 0x93d7270a; (* arm_EXTR X10 X24 X23 9 *) + 0xba0a01ce; (* arm_ADCS X14 X14 X10 *) + 0x93d8272a; (* arm_EXTR X10 X25 X24 9 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x93d9240a; (* arm_EXTR X10 X0 X25 9 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x93c0248a; (* arm_EXTR X10 X4 X0 9 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0xb277da73; (* arm_ORR X19 X19 (rvalue (word 18446744073709551104)) *) + 0xd349fc8a; (* arm_LSR X10 X4 9 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0xfa1f0042; (* arm_SBCS X2 X2 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xda1f0273; (* arm_SBC X19 X19 XZR *) + 0x92402273; (* arm_AND X19 X19 (rvalue (word 511)) *) + 0xa90dafe2; (* arm_STP X2 X11 SP (Immediate_Offset (iword (&216))) *) + 0xa90eb7ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&232))) *) + 0xa90fbfee; (* arm_STP X14 X15 SP (Immediate_Offset (iword (&248))) *) + 0xa910c7f0; (* arm_STP X16 X17 SP (Immediate_Offset (iword (&264))) *) + 0xf9008ff3; (* arm_STR X19 SP (Immediate_Offset (word 280)) *) + 0xa9448fe2; (* arm_LDP X2 X3 SP (Immediate_Offset (iword (&72))) *) + 0x9b037c4b; (* arm_MUL X11 X2 X3 *) + 0x9bc37c4c; (* arm_UMULH X12 X2 X3 *) + 0xa94597e4; (* arm_LDP X4 X5 SP (Immediate_Offset (iword (&88))) *) + 0x9b047c4a; (* arm_MUL X10 X2 X4 *) + 0x9bc47c4d; (* arm_UMULH X13 X2 X4 *) + 0xab0a018c; (* arm_ADDS X12 X12 X10 *) + 0xa9469fe6; (* arm_LDP X6 X7 SP (Immediate_Offset (iword (&104))) *) + 0x9b057c4a; (* arm_MUL X10 X2 X5 *) + 0x9bc57c4e; (* arm_UMULH X14 X2 X5 *) + 0xba0a01ad; (* arm_ADCS X13 X13 X10 *) + 0xa947a7e8; (* arm_LDP X8 X9 SP (Immediate_Offset (iword (&120))) *) + 0x9b067c4a; (* arm_MUL X10 X2 X6 *) + 0x9bc67c4f; (* arm_UMULH X15 X2 X6 *) + 0xba0a01ce; (* arm_ADCS X14 X14 X10 *) + 0x9b077c4a; (* arm_MUL X10 X2 X7 *) + 0x9bc77c50; (* arm_UMULH X16 X2 X7 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x9b087c4a; (* arm_MUL X10 X2 X8 *) + 0x9bc87c51; (* arm_UMULH X17 X2 X8 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9b097c4a; (* arm_MUL X10 X2 X9 *) + 0x9bc97c53; (* arm_UMULH X19 X2 X9 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0x9b047c6a; (* arm_MUL X10 X3 X4 *) + 0xab0a01ad; (* arm_ADDS X13 X13 X10 *) + 0x9b057c6a; (* arm_MUL X10 X3 X5 *) + 0xba0a01ce; (* arm_ADCS X14 X14 X10 *) + 0x9b067c6a; (* arm_MUL X10 X3 X6 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x9b077c6a; (* arm_MUL X10 X3 X7 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9b087c6a; (* arm_MUL X10 X3 X8 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9b097c6a; (* arm_MUL X10 X3 X9 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc47c6a; (* arm_UMULH X10 X3 X4 *) + 0xab0a01ce; (* arm_ADDS X14 X14 X10 *) + 0x9bc57c6a; (* arm_UMULH X10 X3 X5 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x9bc67c6a; (* arm_UMULH X10 X3 X6 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9bc77c6a; (* arm_UMULH X10 X3 X7 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9bc87c6a; (* arm_UMULH X10 X3 X8 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9bc97c6a; (* arm_UMULH X10 X3 X9 *) + 0x9a0a0294; (* arm_ADC X20 X20 X10 *) + 0x9b077cca; (* arm_MUL X10 X6 X7 *) + 0x9bc77cd5; (* arm_UMULH X21 X6 X7 *) + 0xab0a0294; (* arm_ADDS X20 X20 X10 *) + 0x9a1f02b5; (* arm_ADC X21 X21 XZR *) + 0x9b057c8a; (* arm_MUL X10 X4 X5 *) + 0xab0a01ef; (* arm_ADDS X15 X15 X10 *) + 0x9b067c8a; (* arm_MUL X10 X4 X6 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9b077c8a; (* arm_MUL X10 X4 X7 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9b087c8a; (* arm_MUL X10 X4 X8 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9b097c8a; (* arm_MUL X10 X4 X9 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9b087cca; (* arm_MUL X10 X6 X8 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9a9f37f6; (* arm_CSET X22 Condition_CS *) + 0x9bc57c8a; (* arm_UMULH X10 X4 X5 *) + 0xab0a0210; (* arm_ADDS X16 X16 X10 *) + 0x9bc67c8a; (* arm_UMULH X10 X4 X6 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9bc77c8a; (* arm_UMULH X10 X4 X7 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9bc87c8a; (* arm_UMULH X10 X4 X8 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9bc97c8a; (* arm_UMULH X10 X4 X9 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9bc87cca; (* arm_UMULH X10 X6 X8 *) + 0x9a0a02d6; (* arm_ADC X22 X22 X10 *) + 0x9b087cea; (* arm_MUL X10 X7 X8 *) + 0x9bc87cf7; (* arm_UMULH X23 X7 X8 *) + 0xab0a02d6; (* arm_ADDS X22 X22 X10 *) + 0x9a1f02f7; (* arm_ADC X23 X23 XZR *) + 0x9b067caa; (* arm_MUL X10 X5 X6 *) + 0xab0a0231; (* arm_ADDS X17 X17 X10 *) + 0x9b077caa; (* arm_MUL X10 X5 X7 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9b087caa; (* arm_MUL X10 X5 X8 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9b097caa; (* arm_MUL X10 X5 X9 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9b097cca; (* arm_MUL X10 X6 X9 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9b097cea; (* arm_MUL X10 X7 X9 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9a9f37f8; (* arm_CSET X24 Condition_CS *) + 0x9bc67caa; (* arm_UMULH X10 X5 X6 *) + 0xab0a0273; (* arm_ADDS X19 X19 X10 *) + 0x9bc77caa; (* arm_UMULH X10 X5 X7 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9bc87caa; (* arm_UMULH X10 X5 X8 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9bc97caa; (* arm_UMULH X10 X5 X9 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9bc97cca; (* arm_UMULH X10 X6 X9 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9bc97cea; (* arm_UMULH X10 X7 X9 *) + 0x9a0a0318; (* arm_ADC X24 X24 X10 *) + 0x9b097d0a; (* arm_MUL X10 X8 X9 *) + 0x9bc97d19; (* arm_UMULH X25 X8 X9 *) + 0xab0a0318; (* arm_ADDS X24 X24 X10 *) + 0x9a1f0339; (* arm_ADC X25 X25 XZR *) + 0xab0b016b; (* arm_ADDS X11 X11 X11 *) + 0xba0c018c; (* arm_ADCS X12 X12 X12 *) + 0xba0d01ad; (* arm_ADCS X13 X13 X13 *) + 0xba0e01ce; (* arm_ADCS X14 X14 X14 *) + 0xba0f01ef; (* arm_ADCS X15 X15 X15 *) + 0xba100210; (* arm_ADCS X16 X16 X16 *) + 0xba110231; (* arm_ADCS X17 X17 X17 *) + 0xba130273; (* arm_ADCS X19 X19 X19 *) + 0xba140294; (* arm_ADCS X20 X20 X20 *) + 0xba1502b5; (* arm_ADCS X21 X21 X21 *) + 0xba1602d6; (* arm_ADCS X22 X22 X22 *) + 0xba1702f7; (* arm_ADCS X23 X23 X23 *) + 0xba180318; (* arm_ADCS X24 X24 X24 *) + 0xba190339; (* arm_ADCS X25 X25 X25 *) + 0x9a9f37e0; (* arm_CSET X0 Condition_CS *) + 0x9bc27c4a; (* arm_UMULH X10 X2 X2 *) + 0xab0a016b; (* arm_ADDS X11 X11 X10 *) + 0x9b037c6a; (* arm_MUL X10 X3 X3 *) + 0xba0a018c; (* arm_ADCS X12 X12 X10 *) + 0x9bc37c6a; (* arm_UMULH X10 X3 X3 *) + 0xba0a01ad; (* arm_ADCS X13 X13 X10 *) + 0x9b047c8a; (* arm_MUL X10 X4 X4 *) + 0xba0a01ce; (* arm_ADCS X14 X14 X10 *) + 0x9bc47c8a; (* arm_UMULH X10 X4 X4 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x9b057caa; (* arm_MUL X10 X5 X5 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9bc57caa; (* arm_UMULH X10 X5 X5 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9b067cca; (* arm_MUL X10 X6 X6 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9bc67cca; (* arm_UMULH X10 X6 X6 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9b077cea; (* arm_MUL X10 X7 X7 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9bc77cea; (* arm_UMULH X10 X7 X7 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9b087d0a; (* arm_MUL X10 X8 X8 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9bc87d0a; (* arm_UMULH X10 X8 X8 *) + 0xba0a0318; (* arm_ADCS X24 X24 X10 *) + 0x9b097d2a; (* arm_MUL X10 X9 X9 *) + 0xba0a0339; (* arm_ADCS X25 X25 X10 *) + 0x9bc97d2a; (* arm_UMULH X10 X9 X9 *) + 0x9a0a0000; (* arm_ADC X0 X0 X10 *) + 0xf94047e1; (* arm_LDR X1 SP (Immediate_Offset (word 136)) *) + 0x8b010021; (* arm_ADD X1 X1 X1 *) + 0x9b027c2a; (* arm_MUL X10 X1 X2 *) + 0xab0a0273; (* arm_ADDS X19 X19 X10 *) + 0x9bc27c2a; (* arm_UMULH X10 X1 X2 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9b047c2a; (* arm_MUL X10 X1 X4 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9bc47c2a; (* arm_UMULH X10 X1 X4 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9b067c2a; (* arm_MUL X10 X1 X6 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9bc67c2a; (* arm_UMULH X10 X1 X6 *) + 0xba0a0318; (* arm_ADCS X24 X24 X10 *) + 0x9b087c2a; (* arm_MUL X10 X1 X8 *) + 0xba0a0339; (* arm_ADCS X25 X25 X10 *) + 0x9bc87c2a; (* arm_UMULH X10 X1 X8 *) + 0xba0a0000; (* arm_ADCS X0 X0 X10 *) + 0xd341fc24; (* arm_LSR X4 X1 1 *) + 0x9b047c84; (* arm_MUL X4 X4 X4 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b037c2a; (* arm_MUL X10 X1 X3 *) + 0xab0a0294; (* arm_ADDS X20 X20 X10 *) + 0x9bc37c2a; (* arm_UMULH X10 X1 X3 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9b057c2a; (* arm_MUL X10 X1 X5 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9bc57c2a; (* arm_UMULH X10 X1 X5 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9b077c2a; (* arm_MUL X10 X1 X7 *) + 0xba0a0318; (* arm_ADCS X24 X24 X10 *) + 0x9bc77c2a; (* arm_UMULH X10 X1 X7 *) + 0xba0a0339; (* arm_ADCS X25 X25 X10 *) + 0x9b097c2a; (* arm_MUL X10 X1 X9 *) + 0xba0a0000; (* arm_ADCS X0 X0 X10 *) + 0x9bc97c2a; (* arm_UMULH X10 X1 X9 *) + 0x9a0a0084; (* arm_ADC X4 X4 X10 *) + 0x9b027c42; (* arm_MUL X2 X2 X2 *) + 0xeb1f03ff; (* arm_CMP XZR XZR *) + 0x93d3268a; (* arm_EXTR X10 X20 X19 9 *) + 0xba0a0042; (* arm_ADCS X2 X2 X10 *) + 0x93d426aa; (* arm_EXTR X10 X21 X20 9 *) + 0xba0a016b; (* arm_ADCS X11 X11 X10 *) + 0x93d526ca; (* arm_EXTR X10 X22 X21 9 *) + 0xba0a018c; (* arm_ADCS X12 X12 X10 *) + 0x93d626ea; (* arm_EXTR X10 X23 X22 9 *) + 0xba0a01ad; (* arm_ADCS X13 X13 X10 *) + 0x93d7270a; (* arm_EXTR X10 X24 X23 9 *) + 0xba0a01ce; (* arm_ADCS X14 X14 X10 *) + 0x93d8272a; (* arm_EXTR X10 X25 X24 9 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x93d9240a; (* arm_EXTR X10 X0 X25 9 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x93c0248a; (* arm_EXTR X10 X4 X0 9 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0xb277da73; (* arm_ORR X19 X19 (rvalue (word 18446744073709551104)) *) + 0xd349fc8a; (* arm_LSR X10 X4 9 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0xfa1f0042; (* arm_SBCS X2 X2 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xda1f0273; (* arm_SBC X19 X19 XZR *) + 0x92402273; (* arm_AND X19 X19 (rvalue (word 511)) *) + 0xa9002fe2; (* arm_STP X2 X11 SP (Immediate_Offset (iword (&0))) *) + 0xa90137ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&16))) *) + 0xa9023fee; (* arm_STP X14 X15 SP (Immediate_Offset (iword (&32))) *) + 0xa90347f0; (* arm_STP X16 X17 SP (Immediate_Offset (iword (&48))) *) + 0xf90023f3; (* arm_STR X19 SP (Immediate_Offset (word 64)) *) + 0xa94d93e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&216))) *) + 0xa9521be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&288))) *) + 0x9b057c6f; (* arm_MUL X15 X3 X5 *) + 0x9bc57c70; (* arm_UMULH X16 X3 X5 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0x9bc67c71; (* arm_UMULH X17 X3 X6 *) + 0xab0e0210; (* arm_ADDS X16 X16 X14 *) + 0xa95323e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&304))) *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0x9bc77c73; (* arm_UMULH X19 X3 X7 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0x9bc87c74; (* arm_UMULH X20 X3 X8 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0xa9542be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&320))) *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0x9bc97c75; (* arm_UMULH X21 X3 X9 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0x9bca7c76; (* arm_UMULH X22 X3 X10 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0xa95533eb; (* arm_LDP X11 X12 SP (Immediate_Offset (iword (&336))) *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0x9bcb7c77; (* arm_UMULH X23 X3 X11 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0xf940b3ed; (* arm_LDR X13 SP (Immediate_Offset (word 352)) *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0x9bcc7c78; (* arm_UMULH X24 X3 X12 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0x9bcd7c61; (* arm_UMULH X1 X3 X13 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e0210; (* arm_ADDS X16 X16 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9a9f37e0; (* arm_CSET X0 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0231; (* arm_ADDS X17 X17 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0000; (* arm_ADC X0 X0 X14 *) + 0xa91243ef; (* arm_STP X15 X16 SP (Immediate_Offset (iword (&288))) *) + 0xa94e93e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&232))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0231; (* arm_ADDS X17 X17 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9a9f37ef; (* arm_CSET X15 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e0273; (* arm_ADDS X19 X19 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e01ef; (* arm_ADC X15 X15 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e0273; (* arm_ADDS X19 X19 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9a9f37f0; (* arm_CSET X16 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0294; (* arm_ADDS X20 X20 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0210; (* arm_ADC X16 X16 X14 *) + 0xa9134ff1; (* arm_STP X17 X19 SP (Immediate_Offset (iword (&304))) *) + 0xa94f93e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&248))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0294; (* arm_ADDS X20 X20 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9a9f37f1; (* arm_CSET X17 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e02b5; (* arm_ADDS X21 X21 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e0231; (* arm_ADC X17 X17 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e02b5; (* arm_ADDS X21 X21 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9a9f37f3; (* arm_CSET X19 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e02d6; (* arm_ADDS X22 X22 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0273; (* arm_ADC X19 X19 X14 *) + 0xa91457f4; (* arm_STP X20 X21 SP (Immediate_Offset (iword (&320))) *) + 0xa95093e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&264))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e02d6; (* arm_ADDS X22 X22 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e02f7; (* arm_ADDS X23 X23 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e0294; (* arm_ADC X20 X20 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e02f7; (* arm_ADDS X23 X23 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9a9f37f5; (* arm_CSET X21 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0318; (* arm_ADDS X24 X24 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0xa9155ff6; (* arm_STP X22 X23 SP (Immediate_Offset (iword (&336))) *) + 0xf9408fe3; (* arm_LDR X3 SP (Immediate_Offset (word 280)) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0318; (* arm_ADDS X24 X24 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e0021; (* arm_ADDS X1 X1 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0xeb1f03ff; (* arm_CMP XZR XZR *) + 0xa9521be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&288))) *) + 0x93d8242e; (* arm_EXTR X14 X1 X24 9 *) + 0xba0e00a5; (* arm_ADCS X5 X5 X14 *) + 0x93c1240e; (* arm_EXTR X14 X0 X1 9 *) + 0xba0e00c6; (* arm_ADCS X6 X6 X14 *) + 0xa95323e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&304))) *) + 0x93c025ee; (* arm_EXTR X14 X15 X0 9 *) + 0xba0e00e7; (* arm_ADCS X7 X7 X14 *) + 0x93cf260e; (* arm_EXTR X14 X16 X15 9 *) + 0xba0e0108; (* arm_ADCS X8 X8 X14 *) + 0xa9542be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&320))) *) + 0x93d0262e; (* arm_EXTR X14 X17 X16 9 *) + 0xba0e0129; (* arm_ADCS X9 X9 X14 *) + 0x93d1266e; (* arm_EXTR X14 X19 X17 9 *) + 0xba0e014a; (* arm_ADCS X10 X10 X14 *) + 0xa95533eb; (* arm_LDP X11 X12 SP (Immediate_Offset (iword (&336))) *) + 0x93d3268e; (* arm_EXTR X14 X20 X19 9 *) + 0xba0e016b; (* arm_ADCS X11 X11 X14 *) + 0x93d426ae; (* arm_EXTR X14 X21 X20 9 *) + 0xba0e018c; (* arm_ADCS X12 X12 X14 *) + 0xb277db0d; (* arm_ORR X13 X24 (rvalue (word 18446744073709551104)) *) + 0xd349feae; (* arm_LSR X14 X21 9 *) + 0xba0e01ad; (* arm_ADCS X13 X13 X14 *) + 0xfa1f00a5; (* arm_SBCS X5 X5 XZR *) + 0xfa1f00c6; (* arm_SBCS X6 X6 XZR *) + 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) + 0xfa1f0108; (* arm_SBCS X8 X8 XZR *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda1f01ad; (* arm_SBC X13 X13 XZR *) + 0x924021ad; (* arm_AND X13 X13 (rvalue (word 511)) *) + 0xa9121be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&288))) *) + 0xa91323e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&304))) *) + 0xa9142be9; (* arm_STP X9 X10 SP (Immediate_Offset (iword (&320))) *) + 0xa91533eb; (* arm_STP X11 X12 SP (Immediate_Offset (iword (&336))) *) + 0xf900b3ed; (* arm_STR X13 SP (Immediate_Offset (word 352)) *) + 0xa94d93e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&216))) *) + 0xa9491be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&144))) *) + 0x9b057c6f; (* arm_MUL X15 X3 X5 *) + 0x9bc57c70; (* arm_UMULH X16 X3 X5 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0x9bc67c71; (* arm_UMULH X17 X3 X6 *) + 0xab0e0210; (* arm_ADDS X16 X16 X14 *) + 0xa94a23e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&160))) *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0x9bc77c73; (* arm_UMULH X19 X3 X7 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0x9bc87c74; (* arm_UMULH X20 X3 X8 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0xa94b2be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&176))) *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0x9bc97c75; (* arm_UMULH X21 X3 X9 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0x9bca7c76; (* arm_UMULH X22 X3 X10 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0xa94c33eb; (* arm_LDP X11 X12 SP (Immediate_Offset (iword (&192))) *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0x9bcb7c77; (* arm_UMULH X23 X3 X11 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0xf9406bed; (* arm_LDR X13 SP (Immediate_Offset (word 208)) *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0x9bcc7c78; (* arm_UMULH X24 X3 X12 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0x9bcd7c61; (* arm_UMULH X1 X3 X13 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e0210; (* arm_ADDS X16 X16 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9a9f37e0; (* arm_CSET X0 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0231; (* arm_ADDS X17 X17 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0000; (* arm_ADC X0 X0 X14 *) + 0xa90943ef; (* arm_STP X15 X16 SP (Immediate_Offset (iword (&144))) *) + 0xa94e93e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&232))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0231; (* arm_ADDS X17 X17 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9a9f37ef; (* arm_CSET X15 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e0273; (* arm_ADDS X19 X19 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e01ef; (* arm_ADC X15 X15 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e0273; (* arm_ADDS X19 X19 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9a9f37f0; (* arm_CSET X16 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0294; (* arm_ADDS X20 X20 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0210; (* arm_ADC X16 X16 X14 *) + 0xa90a4ff1; (* arm_STP X17 X19 SP (Immediate_Offset (iword (&160))) *) + 0xa94f93e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&248))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0294; (* arm_ADDS X20 X20 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9a9f37f1; (* arm_CSET X17 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e02b5; (* arm_ADDS X21 X21 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e0231; (* arm_ADC X17 X17 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e02b5; (* arm_ADDS X21 X21 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9a9f37f3; (* arm_CSET X19 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e02d6; (* arm_ADDS X22 X22 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0273; (* arm_ADC X19 X19 X14 *) + 0xa90b57f4; (* arm_STP X20 X21 SP (Immediate_Offset (iword (&176))) *) + 0xa95093e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&264))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e02d6; (* arm_ADDS X22 X22 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e02f7; (* arm_ADDS X23 X23 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e0294; (* arm_ADC X20 X20 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e02f7; (* arm_ADDS X23 X23 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9a9f37f5; (* arm_CSET X21 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0318; (* arm_ADDS X24 X24 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0xa90c5ff6; (* arm_STP X22 X23 SP (Immediate_Offset (iword (&192))) *) + 0xf9408fe3; (* arm_LDR X3 SP (Immediate_Offset (word 280)) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0318; (* arm_ADDS X24 X24 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e0021; (* arm_ADDS X1 X1 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0xeb1f03ff; (* arm_CMP XZR XZR *) + 0xa9491be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&144))) *) + 0x93d8242e; (* arm_EXTR X14 X1 X24 9 *) + 0xba0e00a5; (* arm_ADCS X5 X5 X14 *) + 0x93c1240e; (* arm_EXTR X14 X0 X1 9 *) + 0xba0e00c6; (* arm_ADCS X6 X6 X14 *) + 0xa94a23e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&160))) *) + 0x93c025ee; (* arm_EXTR X14 X15 X0 9 *) + 0xba0e00e7; (* arm_ADCS X7 X7 X14 *) + 0x93cf260e; (* arm_EXTR X14 X16 X15 9 *) + 0xba0e0108; (* arm_ADCS X8 X8 X14 *) + 0xa94b2be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&176))) *) + 0x93d0262e; (* arm_EXTR X14 X17 X16 9 *) + 0xba0e0129; (* arm_ADCS X9 X9 X14 *) + 0x93d1266e; (* arm_EXTR X14 X19 X17 9 *) + 0xba0e014a; (* arm_ADCS X10 X10 X14 *) + 0xa94c33eb; (* arm_LDP X11 X12 SP (Immediate_Offset (iword (&192))) *) + 0x93d3268e; (* arm_EXTR X14 X20 X19 9 *) + 0xba0e016b; (* arm_ADCS X11 X11 X14 *) + 0x93d426ae; (* arm_EXTR X14 X21 X20 9 *) + 0xba0e018c; (* arm_ADCS X12 X12 X14 *) + 0xb277db0d; (* arm_ORR X13 X24 (rvalue (word 18446744073709551104)) *) + 0xd349feae; (* arm_LSR X14 X21 9 *) + 0xba0e01ad; (* arm_ADCS X13 X13 X14 *) + 0xfa1f00a5; (* arm_SBCS X5 X5 XZR *) + 0xfa1f00c6; (* arm_SBCS X6 X6 XZR *) + 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) + 0xfa1f0108; (* arm_SBCS X8 X8 XZR *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda1f01ad; (* arm_SBC X13 X13 XZR *) + 0x924021ad; (* arm_AND X13 X13 (rvalue (word 511)) *) + 0xa9091be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&144))) *) + 0xa90a23e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&160))) *) + 0xa90b2be9; (* arm_STP X9 X10 SP (Immediate_Offset (iword (&176))) *) + 0xa90c33eb; (* arm_STP X11 X12 SP (Immediate_Offset (iword (&192))) *) + 0xf9006bed; (* arm_STR X13 SP (Immediate_Offset (word 208)) *) + 0xa9401be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&0))) *) + 0xa9520fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&288))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa94123e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&16))) *) + 0xa9530fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&304))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xa9422be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&32))) *) + 0xa9540fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&320))) *) + 0xfa040129; (* arm_SBCS X9 X9 X4 *) + 0xfa03014a; (* arm_SBCS X10 X10 X3 *) + 0xa94333eb; (* arm_LDP X11 X12 SP (Immediate_Offset (iword (&48))) *) + 0xa9550fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&336))) *) + 0xfa04016b; (* arm_SBCS X11 X11 X4 *) + 0xfa03018c; (* arm_SBCS X12 X12 X3 *) + 0xf94023ed; (* arm_LDR X13 SP (Immediate_Offset (word 64)) *) + 0xf940b3e4; (* arm_LDR X4 SP (Immediate_Offset (word 352)) *) + 0xfa0401ad; (* arm_SBCS X13 X13 X4 *) + 0xfa1f00a5; (* arm_SBCS X5 X5 XZR *) + 0xfa1f00c6; (* arm_SBCS X6 X6 XZR *) + 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) + 0xfa1f0108; (* arm_SBCS X8 X8 XZR *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0x924021ad; (* arm_AND X13 X13 (rvalue (word 511)) *) + 0xa9001b45; (* arm_STP X5 X6 X26 (Immediate_Offset (iword (&0))) *) + 0xa9012347; (* arm_STP X7 X8 X26 (Immediate_Offset (iword (&16))) *) + 0xa9022b49; (* arm_STP X9 X10 X26 (Immediate_Offset (iword (&32))) *) + 0xa903334b; (* arm_STP X11 X12 X26 (Immediate_Offset (iword (&48))) *) + 0xf900234d; (* arm_STR X13 X26 (Immediate_Offset (word 64)) *) + 0xa9491be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&144))) *) + 0xa9520fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&288))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa94a23e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&160))) *) + 0xa9530fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&304))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xa94b2be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&176))) *) + 0xa9540fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&320))) *) + 0xfa040129; (* arm_SBCS X9 X9 X4 *) + 0xfa03014a; (* arm_SBCS X10 X10 X3 *) + 0xa94c33eb; (* arm_LDP X11 X12 SP (Immediate_Offset (iword (&192))) *) + 0xa9550fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&336))) *) + 0xfa04016b; (* arm_SBCS X11 X11 X4 *) + 0xfa03018c; (* arm_SBCS X12 X12 X3 *) + 0xf9406bed; (* arm_LDR X13 SP (Immediate_Offset (word 208)) *) + 0xf940b3e4; (* arm_LDR X4 SP (Immediate_Offset (word 352)) *) + 0xfa0401ad; (* arm_SBCS X13 X13 X4 *) + 0xfa1f00a5; (* arm_SBCS X5 X5 XZR *) + 0xfa1f00c6; (* arm_SBCS X6 X6 XZR *) + 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) + 0xfa1f0108; (* arm_SBCS X8 X8 XZR *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0x924021ad; (* arm_AND X13 X13 (rvalue (word 511)) *) + 0xa90d9be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&216))) *) + 0xa90ea3e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&232))) *) + 0xa90fabe9; (* arm_STP X9 X10 SP (Immediate_Offset (iword (&248))) *) + 0xa910b3eb; (* arm_STP X11 X12 SP (Immediate_Offset (iword (&264))) *) + 0xf9008fed; (* arm_STR X13 SP (Immediate_Offset (word 280)) *) + 0xa95693e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&360))) *) + 0xa9491b65; (* arm_LDP X5 X6 X27 (Immediate_Offset (iword (&144))) *) + 0x9b057c6f; (* arm_MUL X15 X3 X5 *) + 0x9bc57c70; (* arm_UMULH X16 X3 X5 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0x9bc67c71; (* arm_UMULH X17 X3 X6 *) + 0xab0e0210; (* arm_ADDS X16 X16 X14 *) + 0xa94a2367; (* arm_LDP X7 X8 X27 (Immediate_Offset (iword (&160))) *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0x9bc77c73; (* arm_UMULH X19 X3 X7 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0x9bc87c74; (* arm_UMULH X20 X3 X8 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0xa94b2b69; (* arm_LDP X9 X10 X27 (Immediate_Offset (iword (&176))) *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0x9bc97c75; (* arm_UMULH X21 X3 X9 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0x9bca7c76; (* arm_UMULH X22 X3 X10 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0xa94c336b; (* arm_LDP X11 X12 X27 (Immediate_Offset (iword (&192))) *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0x9bcb7c77; (* arm_UMULH X23 X3 X11 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0xf9406b6d; (* arm_LDR X13 X27 (Immediate_Offset (word 208)) *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0x9bcc7c78; (* arm_UMULH X24 X3 X12 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0x9bcd7c61; (* arm_UMULH X1 X3 X13 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e0210; (* arm_ADDS X16 X16 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9a9f37e0; (* arm_CSET X0 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0231; (* arm_ADDS X17 X17 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0000; (* arm_ADC X0 X0 X14 *) + 0xa916c3ef; (* arm_STP X15 X16 SP (Immediate_Offset (iword (&360))) *) + 0xa95793e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&376))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0231; (* arm_ADDS X17 X17 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9a9f37ef; (* arm_CSET X15 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e0273; (* arm_ADDS X19 X19 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e01ef; (* arm_ADC X15 X15 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e0273; (* arm_ADDS X19 X19 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9a9f37f0; (* arm_CSET X16 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0294; (* arm_ADDS X20 X20 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0210; (* arm_ADC X16 X16 X14 *) + 0xa917cff1; (* arm_STP X17 X19 SP (Immediate_Offset (iword (&376))) *) + 0xa95893e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&392))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0294; (* arm_ADDS X20 X20 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9a9f37f1; (* arm_CSET X17 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e02b5; (* arm_ADDS X21 X21 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e0231; (* arm_ADC X17 X17 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e02b5; (* arm_ADDS X21 X21 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9a9f37f3; (* arm_CSET X19 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e02d6; (* arm_ADDS X22 X22 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0273; (* arm_ADC X19 X19 X14 *) + 0xa918d7f4; (* arm_STP X20 X21 SP (Immediate_Offset (iword (&392))) *) + 0xa95993e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&408))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e02d6; (* arm_ADDS X22 X22 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e02f7; (* arm_ADDS X23 X23 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e0294; (* arm_ADC X20 X20 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e02f7; (* arm_ADDS X23 X23 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9a9f37f5; (* arm_CSET X21 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0318; (* arm_ADDS X24 X24 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0xa919dff6; (* arm_STP X22 X23 SP (Immediate_Offset (iword (&408))) *) + 0xf940d7e3; (* arm_LDR X3 SP (Immediate_Offset (word 424)) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0318; (* arm_ADDS X24 X24 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e0021; (* arm_ADDS X1 X1 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0xeb1f03ff; (* arm_CMP XZR XZR *) + 0xa9569be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&360))) *) + 0x93d8242e; (* arm_EXTR X14 X1 X24 9 *) + 0xba0e00a5; (* arm_ADCS X5 X5 X14 *) + 0x93c1240e; (* arm_EXTR X14 X0 X1 9 *) + 0xba0e00c6; (* arm_ADCS X6 X6 X14 *) + 0xa957a3e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&376))) *) + 0x93c025ee; (* arm_EXTR X14 X15 X0 9 *) + 0xba0e00e7; (* arm_ADCS X7 X7 X14 *) + 0x93cf260e; (* arm_EXTR X14 X16 X15 9 *) + 0xba0e0108; (* arm_ADCS X8 X8 X14 *) + 0xa958abe9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&392))) *) + 0x93d0262e; (* arm_EXTR X14 X17 X16 9 *) + 0xba0e0129; (* arm_ADCS X9 X9 X14 *) + 0x93d1266e; (* arm_EXTR X14 X19 X17 9 *) + 0xba0e014a; (* arm_ADCS X10 X10 X14 *) + 0xa959b3eb; (* arm_LDP X11 X12 SP (Immediate_Offset (iword (&408))) *) + 0x93d3268e; (* arm_EXTR X14 X20 X19 9 *) + 0xba0e016b; (* arm_ADCS X11 X11 X14 *) + 0x93d426ae; (* arm_EXTR X14 X21 X20 9 *) + 0xba0e018c; (* arm_ADCS X12 X12 X14 *) + 0xb277db0d; (* arm_ORR X13 X24 (rvalue (word 18446744073709551104)) *) + 0xd349feae; (* arm_LSR X14 X21 9 *) + 0xba0e01ad; (* arm_ADCS X13 X13 X14 *) + 0xfa1f00a5; (* arm_SBCS X5 X5 XZR *) + 0xfa1f00c6; (* arm_SBCS X6 X6 XZR *) + 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) + 0xfa1f0108; (* arm_SBCS X8 X8 XZR *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda1f01ad; (* arm_SBC X13 X13 XZR *) + 0x924021ad; (* arm_AND X13 X13 (rvalue (word 511)) *) + 0xa9169be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&360))) *) + 0xa917a3e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&376))) *) + 0xa918abe9; (* arm_STP X9 X10 SP (Immediate_Offset (iword (&392))) *) + 0xa919b3eb; (* arm_STP X11 X12 SP (Immediate_Offset (iword (&408))) *) + 0xf900d7ed; (* arm_STR X13 SP (Immediate_Offset (word 424)) *) + 0xa9401b45; (* arm_LDP X5 X6 X26 (Immediate_Offset (iword (&0))) *) + 0xa9490fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&144))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa9412347; (* arm_LDP X7 X8 X26 (Immediate_Offset (iword (&16))) *) + 0xa94a0fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&160))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xa9422b49; (* arm_LDP X9 X10 X26 (Immediate_Offset (iword (&32))) *) + 0xa94b0fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&176))) *) + 0xfa040129; (* arm_SBCS X9 X9 X4 *) + 0xfa03014a; (* arm_SBCS X10 X10 X3 *) + 0xa943334b; (* arm_LDP X11 X12 X26 (Immediate_Offset (iword (&48))) *) + 0xa94c0fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&192))) *) + 0xfa04016b; (* arm_SBCS X11 X11 X4 *) + 0xfa03018c; (* arm_SBCS X12 X12 X3 *) + 0xf940234d; (* arm_LDR X13 X26 (Immediate_Offset (word 64)) *) + 0xf9406be4; (* arm_LDR X4 SP (Immediate_Offset (word 208)) *) + 0xfa0401ad; (* arm_SBCS X13 X13 X4 *) + 0xfa1f00a5; (* arm_SBCS X5 X5 XZR *) + 0xfa1f00c6; (* arm_SBCS X6 X6 XZR *) + 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) + 0xfa1f0108; (* arm_SBCS X8 X8 XZR *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0x924021ad; (* arm_AND X13 X13 (rvalue (word 511)) *) + 0xa9001b45; (* arm_STP X5 X6 X26 (Immediate_Offset (iword (&0))) *) + 0xa9012347; (* arm_STP X7 X8 X26 (Immediate_Offset (iword (&16))) *) + 0xa9022b49; (* arm_STP X9 X10 X26 (Immediate_Offset (iword (&32))) *) + 0xa903334b; (* arm_STP X11 X12 X26 (Immediate_Offset (iword (&48))) *) + 0xf900234d; (* arm_STR X13 X26 (Immediate_Offset (word 64)) *) + 0xa9521be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&288))) *) + 0xa9400f44; (* arm_LDP X4 X3 X26 (Immediate_Offset (iword (&0))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa95323e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&304))) *) + 0xa9410f44; (* arm_LDP X4 X3 X26 (Immediate_Offset (iword (&16))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xa9542be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&320))) *) + 0xa9420f44; (* arm_LDP X4 X3 X26 (Immediate_Offset (iword (&32))) *) + 0xfa040129; (* arm_SBCS X9 X9 X4 *) + 0xfa03014a; (* arm_SBCS X10 X10 X3 *) + 0xa95533eb; (* arm_LDP X11 X12 SP (Immediate_Offset (iword (&336))) *) + 0xa9430f44; (* arm_LDP X4 X3 X26 (Immediate_Offset (iword (&48))) *) + 0xfa04016b; (* arm_SBCS X11 X11 X4 *) + 0xfa03018c; (* arm_SBCS X12 X12 X3 *) + 0xf940b3ed; (* arm_LDR X13 SP (Immediate_Offset (word 352)) *) + 0xf9402344; (* arm_LDR X4 X26 (Immediate_Offset (word 64)) *) + 0xfa0401ad; (* arm_SBCS X13 X13 X4 *) + 0xfa1f00a5; (* arm_SBCS X5 X5 XZR *) + 0xfa1f00c6; (* arm_SBCS X6 X6 XZR *) + 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) + 0xfa1f0108; (* arm_SBCS X8 X8 XZR *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0x924021ad; (* arm_AND X13 X13 (rvalue (word 511)) *) + 0xa9121be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&288))) *) + 0xa91323e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&304))) *) + 0xa9142be9; (* arm_STP X9 X10 SP (Immediate_Offset (iword (&320))) *) + 0xa91533eb; (* arm_STP X11 X12 SP (Immediate_Offset (iword (&336))) *) + 0xf900b3ed; (* arm_STR X13 SP (Immediate_Offset (word 352)) *) + 0xa94d93e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&216))) *) + 0xa95b1be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&432))) *) + 0x9b057c6f; (* arm_MUL X15 X3 X5 *) + 0x9bc57c70; (* arm_UMULH X16 X3 X5 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0x9bc67c71; (* arm_UMULH X17 X3 X6 *) + 0xab0e0210; (* arm_ADDS X16 X16 X14 *) + 0xa95c23e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&448))) *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0x9bc77c73; (* arm_UMULH X19 X3 X7 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0x9bc87c74; (* arm_UMULH X20 X3 X8 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0xa95d2be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&464))) *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0x9bc97c75; (* arm_UMULH X21 X3 X9 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0x9bca7c76; (* arm_UMULH X22 X3 X10 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0xa95e33eb; (* arm_LDP X11 X12 SP (Immediate_Offset (iword (&480))) *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0x9bcb7c77; (* arm_UMULH X23 X3 X11 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0xf940fbed; (* arm_LDR X13 SP (Immediate_Offset (word 496)) *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0x9bcc7c78; (* arm_UMULH X24 X3 X12 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0x9bcd7c61; (* arm_UMULH X1 X3 X13 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e0210; (* arm_ADDS X16 X16 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9a9f37e0; (* arm_CSET X0 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0231; (* arm_ADDS X17 X17 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0000; (* arm_ADC X0 X0 X14 *) + 0xa90dc3ef; (* arm_STP X15 X16 SP (Immediate_Offset (iword (&216))) *) + 0xa94e93e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&232))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0231; (* arm_ADDS X17 X17 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9a9f37ef; (* arm_CSET X15 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e0273; (* arm_ADDS X19 X19 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e01ef; (* arm_ADC X15 X15 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e0273; (* arm_ADDS X19 X19 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9a9f37f0; (* arm_CSET X16 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0294; (* arm_ADDS X20 X20 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0210; (* arm_ADC X16 X16 X14 *) + 0xa90ecff1; (* arm_STP X17 X19 SP (Immediate_Offset (iword (&232))) *) + 0xa94f93e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&248))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0294; (* arm_ADDS X20 X20 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9a9f37f1; (* arm_CSET X17 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e02b5; (* arm_ADDS X21 X21 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e0231; (* arm_ADC X17 X17 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e02b5; (* arm_ADDS X21 X21 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9a9f37f3; (* arm_CSET X19 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e02d6; (* arm_ADDS X22 X22 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0273; (* arm_ADC X19 X19 X14 *) + 0xa90fd7f4; (* arm_STP X20 X21 SP (Immediate_Offset (iword (&248))) *) + 0xa95093e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&264))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e02d6; (* arm_ADDS X22 X22 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e02f7; (* arm_ADDS X23 X23 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e0294; (* arm_ADC X20 X20 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e02f7; (* arm_ADDS X23 X23 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9a9f37f5; (* arm_CSET X21 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0318; (* arm_ADDS X24 X24 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0xa910dff6; (* arm_STP X22 X23 SP (Immediate_Offset (iword (&264))) *) + 0xf9408fe3; (* arm_LDR X3 SP (Immediate_Offset (word 280)) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0318; (* arm_ADDS X24 X24 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e0021; (* arm_ADDS X1 X1 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0xeb1f03ff; (* arm_CMP XZR XZR *) + 0xa94d9be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&216))) *) + 0x93d8242e; (* arm_EXTR X14 X1 X24 9 *) + 0xba0e00a5; (* arm_ADCS X5 X5 X14 *) + 0x93c1240e; (* arm_EXTR X14 X0 X1 9 *) + 0xba0e00c6; (* arm_ADCS X6 X6 X14 *) + 0xa94ea3e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&232))) *) + 0x93c025ee; (* arm_EXTR X14 X15 X0 9 *) + 0xba0e00e7; (* arm_ADCS X7 X7 X14 *) + 0x93cf260e; (* arm_EXTR X14 X16 X15 9 *) + 0xba0e0108; (* arm_ADCS X8 X8 X14 *) + 0xa94fabe9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&248))) *) + 0x93d0262e; (* arm_EXTR X14 X17 X16 9 *) + 0xba0e0129; (* arm_ADCS X9 X9 X14 *) + 0x93d1266e; (* arm_EXTR X14 X19 X17 9 *) + 0xba0e014a; (* arm_ADCS X10 X10 X14 *) + 0xa950b3eb; (* arm_LDP X11 X12 SP (Immediate_Offset (iword (&264))) *) + 0x93d3268e; (* arm_EXTR X14 X20 X19 9 *) + 0xba0e016b; (* arm_ADCS X11 X11 X14 *) + 0x93d426ae; (* arm_EXTR X14 X21 X20 9 *) + 0xba0e018c; (* arm_ADCS X12 X12 X14 *) + 0xb277db0d; (* arm_ORR X13 X24 (rvalue (word 18446744073709551104)) *) + 0xd349feae; (* arm_LSR X14 X21 9 *) + 0xba0e01ad; (* arm_ADCS X13 X13 X14 *) + 0xfa1f00a5; (* arm_SBCS X5 X5 XZR *) + 0xfa1f00c6; (* arm_SBCS X6 X6 XZR *) + 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) + 0xfa1f0108; (* arm_SBCS X8 X8 XZR *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda1f01ad; (* arm_SBC X13 X13 XZR *) + 0x924021ad; (* arm_AND X13 X13 (rvalue (word 511)) *) + 0xa90d9be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&216))) *) + 0xa90ea3e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&232))) *) + 0xa90fabe9; (* arm_STP X9 X10 SP (Immediate_Offset (iword (&248))) *) + 0xa910b3eb; (* arm_STP X11 X12 SP (Immediate_Offset (iword (&264))) *) + 0xf9008fed; (* arm_STR X13 SP (Immediate_Offset (word 280)) *) + 0xa95693e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&360))) *) + 0xa9491b85; (* arm_LDP X5 X6 X28 (Immediate_Offset (iword (&144))) *) + 0x9b057c6f; (* arm_MUL X15 X3 X5 *) + 0x9bc57c70; (* arm_UMULH X16 X3 X5 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0x9bc67c71; (* arm_UMULH X17 X3 X6 *) + 0xab0e0210; (* arm_ADDS X16 X16 X14 *) + 0xa94a2387; (* arm_LDP X7 X8 X28 (Immediate_Offset (iword (&160))) *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0x9bc77c73; (* arm_UMULH X19 X3 X7 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0x9bc87c74; (* arm_UMULH X20 X3 X8 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0xa94b2b89; (* arm_LDP X9 X10 X28 (Immediate_Offset (iword (&176))) *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0x9bc97c75; (* arm_UMULH X21 X3 X9 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0x9bca7c76; (* arm_UMULH X22 X3 X10 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0xa94c338b; (* arm_LDP X11 X12 X28 (Immediate_Offset (iword (&192))) *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0x9bcb7c77; (* arm_UMULH X23 X3 X11 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0xf9406b8d; (* arm_LDR X13 X28 (Immediate_Offset (word 208)) *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0x9bcc7c78; (* arm_UMULH X24 X3 X12 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0x9bcd7c61; (* arm_UMULH X1 X3 X13 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e0210; (* arm_ADDS X16 X16 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9a9f37e0; (* arm_CSET X0 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0231; (* arm_ADDS X17 X17 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0000; (* arm_ADC X0 X0 X14 *) + 0xa909434f; (* arm_STP X15 X16 X26 (Immediate_Offset (iword (&144))) *) + 0xa95793e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&376))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0231; (* arm_ADDS X17 X17 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9a9f37ef; (* arm_CSET X15 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e0273; (* arm_ADDS X19 X19 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e01ef; (* arm_ADC X15 X15 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e0273; (* arm_ADDS X19 X19 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9a9f37f0; (* arm_CSET X16 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0294; (* arm_ADDS X20 X20 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0210; (* arm_ADC X16 X16 X14 *) + 0xa90a4f51; (* arm_STP X17 X19 X26 (Immediate_Offset (iword (&160))) *) + 0xa95893e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&392))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0294; (* arm_ADDS X20 X20 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9a9f37f1; (* arm_CSET X17 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e02b5; (* arm_ADDS X21 X21 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e0231; (* arm_ADC X17 X17 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e02b5; (* arm_ADDS X21 X21 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9a9f37f3; (* arm_CSET X19 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e02d6; (* arm_ADDS X22 X22 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0273; (* arm_ADC X19 X19 X14 *) + 0xa90b5754; (* arm_STP X20 X21 X26 (Immediate_Offset (iword (&176))) *) + 0xa95993e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&408))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e02d6; (* arm_ADDS X22 X22 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e02f7; (* arm_ADDS X23 X23 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e0294; (* arm_ADC X20 X20 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e02f7; (* arm_ADDS X23 X23 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9a9f37f5; (* arm_CSET X21 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0318; (* arm_ADDS X24 X24 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0xa90c5f56; (* arm_STP X22 X23 X26 (Immediate_Offset (iword (&192))) *) + 0xf940d7e3; (* arm_LDR X3 SP (Immediate_Offset (word 424)) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0318; (* arm_ADDS X24 X24 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e0021; (* arm_ADDS X1 X1 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0xeb1f03ff; (* arm_CMP XZR XZR *) + 0xa9491b45; (* arm_LDP X5 X6 X26 (Immediate_Offset (iword (&144))) *) + 0x93d8242e; (* arm_EXTR X14 X1 X24 9 *) + 0xba0e00a5; (* arm_ADCS X5 X5 X14 *) + 0x93c1240e; (* arm_EXTR X14 X0 X1 9 *) + 0xba0e00c6; (* arm_ADCS X6 X6 X14 *) + 0xa94a2347; (* arm_LDP X7 X8 X26 (Immediate_Offset (iword (&160))) *) + 0x93c025ee; (* arm_EXTR X14 X15 X0 9 *) + 0xba0e00e7; (* arm_ADCS X7 X7 X14 *) + 0x93cf260e; (* arm_EXTR X14 X16 X15 9 *) + 0xba0e0108; (* arm_ADCS X8 X8 X14 *) + 0xa94b2b49; (* arm_LDP X9 X10 X26 (Immediate_Offset (iword (&176))) *) + 0x93d0262e; (* arm_EXTR X14 X17 X16 9 *) + 0xba0e0129; (* arm_ADCS X9 X9 X14 *) + 0x93d1266e; (* arm_EXTR X14 X19 X17 9 *) + 0xba0e014a; (* arm_ADCS X10 X10 X14 *) + 0xa94c334b; (* arm_LDP X11 X12 X26 (Immediate_Offset (iword (&192))) *) + 0x93d3268e; (* arm_EXTR X14 X20 X19 9 *) + 0xba0e016b; (* arm_ADCS X11 X11 X14 *) + 0x93d426ae; (* arm_EXTR X14 X21 X20 9 *) + 0xba0e018c; (* arm_ADCS X12 X12 X14 *) + 0xb277db0d; (* arm_ORR X13 X24 (rvalue (word 18446744073709551104)) *) + 0xd349feae; (* arm_LSR X14 X21 9 *) + 0xba0e01ad; (* arm_ADCS X13 X13 X14 *) + 0xfa1f00a5; (* arm_SBCS X5 X5 XZR *) + 0xfa1f00c6; (* arm_SBCS X6 X6 XZR *) + 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) + 0xfa1f0108; (* arm_SBCS X8 X8 XZR *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda1f01ad; (* arm_SBC X13 X13 XZR *) + 0x924021ad; (* arm_AND X13 X13 (rvalue (word 511)) *) + 0xa9091b45; (* arm_STP X5 X6 X26 (Immediate_Offset (iword (&144))) *) + 0xa90a2347; (* arm_STP X7 X8 X26 (Immediate_Offset (iword (&160))) *) + 0xa90b2b49; (* arm_STP X9 X10 X26 (Immediate_Offset (iword (&176))) *) + 0xa90c334b; (* arm_STP X11 X12 X26 (Immediate_Offset (iword (&192))) *) + 0xf9006b4d; (* arm_STR X13 X26 (Immediate_Offset (word 208)) *) + 0xa94493e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&72))) *) + 0xa9521be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&288))) *) + 0x9b057c6f; (* arm_MUL X15 X3 X5 *) + 0x9bc57c70; (* arm_UMULH X16 X3 X5 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0x9bc67c71; (* arm_UMULH X17 X3 X6 *) + 0xab0e0210; (* arm_ADDS X16 X16 X14 *) + 0xa95323e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&304))) *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0x9bc77c73; (* arm_UMULH X19 X3 X7 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0x9bc87c74; (* arm_UMULH X20 X3 X8 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0xa9542be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&320))) *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0x9bc97c75; (* arm_UMULH X21 X3 X9 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0x9bca7c76; (* arm_UMULH X22 X3 X10 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0xa95533eb; (* arm_LDP X11 X12 SP (Immediate_Offset (iword (&336))) *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0x9bcb7c77; (* arm_UMULH X23 X3 X11 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0xf940b3ed; (* arm_LDR X13 SP (Immediate_Offset (word 352)) *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0x9bcc7c78; (* arm_UMULH X24 X3 X12 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0x9bcd7c61; (* arm_UMULH X1 X3 X13 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e0210; (* arm_ADDS X16 X16 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9a9f37e0; (* arm_CSET X0 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0231; (* arm_ADDS X17 X17 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0000; (* arm_ADC X0 X0 X14 *) + 0xa91243ef; (* arm_STP X15 X16 SP (Immediate_Offset (iword (&288))) *) + 0xa94593e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&88))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0231; (* arm_ADDS X17 X17 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9a9f37ef; (* arm_CSET X15 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e0273; (* arm_ADDS X19 X19 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e01ef; (* arm_ADC X15 X15 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e0273; (* arm_ADDS X19 X19 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9a9f37f0; (* arm_CSET X16 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0294; (* arm_ADDS X20 X20 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0210; (* arm_ADC X16 X16 X14 *) + 0xa9134ff1; (* arm_STP X17 X19 SP (Immediate_Offset (iword (&304))) *) + 0xa94693e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&104))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0294; (* arm_ADDS X20 X20 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9a9f37f1; (* arm_CSET X17 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e02b5; (* arm_ADDS X21 X21 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e0231; (* arm_ADC X17 X17 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e02b5; (* arm_ADDS X21 X21 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9a9f37f3; (* arm_CSET X19 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e02d6; (* arm_ADDS X22 X22 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0273; (* arm_ADC X19 X19 X14 *) + 0xa91457f4; (* arm_STP X20 X21 SP (Immediate_Offset (iword (&320))) *) + 0xa94793e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&120))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e02d6; (* arm_ADDS X22 X22 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e02f7; (* arm_ADDS X23 X23 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e0294; (* arm_ADC X20 X20 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e02f7; (* arm_ADDS X23 X23 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9a9f37f5; (* arm_CSET X21 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0318; (* arm_ADDS X24 X24 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0xa9155ff6; (* arm_STP X22 X23 SP (Immediate_Offset (iword (&336))) *) + 0xf94047e3; (* arm_LDR X3 SP (Immediate_Offset (word 136)) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0318; (* arm_ADDS X24 X24 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e0021; (* arm_ADDS X1 X1 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0xeb1f03ff; (* arm_CMP XZR XZR *) + 0xa9521be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&288))) *) + 0x93d8242e; (* arm_EXTR X14 X1 X24 9 *) + 0xba0e00a5; (* arm_ADCS X5 X5 X14 *) + 0x93c1240e; (* arm_EXTR X14 X0 X1 9 *) + 0xba0e00c6; (* arm_ADCS X6 X6 X14 *) + 0xa95323e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&304))) *) + 0x93c025ee; (* arm_EXTR X14 X15 X0 9 *) + 0xba0e00e7; (* arm_ADCS X7 X7 X14 *) + 0x93cf260e; (* arm_EXTR X14 X16 X15 9 *) + 0xba0e0108; (* arm_ADCS X8 X8 X14 *) + 0xa9542be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&320))) *) + 0x93d0262e; (* arm_EXTR X14 X17 X16 9 *) + 0xba0e0129; (* arm_ADCS X9 X9 X14 *) + 0x93d1266e; (* arm_EXTR X14 X19 X17 9 *) + 0xba0e014a; (* arm_ADCS X10 X10 X14 *) + 0xa95533eb; (* arm_LDP X11 X12 SP (Immediate_Offset (iword (&336))) *) + 0x93d3268e; (* arm_EXTR X14 X20 X19 9 *) + 0xba0e016b; (* arm_ADCS X11 X11 X14 *) + 0x93d426ae; (* arm_EXTR X14 X21 X20 9 *) + 0xba0e018c; (* arm_ADCS X12 X12 X14 *) + 0xb277db0d; (* arm_ORR X13 X24 (rvalue (word 18446744073709551104)) *) + 0xd349feae; (* arm_LSR X14 X21 9 *) + 0xba0e01ad; (* arm_ADCS X13 X13 X14 *) + 0xfa1f00a5; (* arm_SBCS X5 X5 XZR *) + 0xfa1f00c6; (* arm_SBCS X6 X6 XZR *) + 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) + 0xfa1f0108; (* arm_SBCS X8 X8 XZR *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda1f01ad; (* arm_SBC X13 X13 XZR *) + 0x924021ad; (* arm_AND X13 X13 (rvalue (word 511)) *) + 0xa9121be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&288))) *) + 0xa91323e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&304))) *) + 0xa9142be9; (* arm_STP X9 X10 SP (Immediate_Offset (iword (&320))) *) + 0xa91533eb; (* arm_STP X11 X12 SP (Immediate_Offset (iword (&336))) *) + 0xf900b3ed; (* arm_STR X13 SP (Immediate_Offset (word 352)) *) + 0xa9521be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&288))) *) + 0xa94d8fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&216))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa95323e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&304))) *) + 0xa94e8fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&232))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xa9542be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&320))) *) + 0xa94f8fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&248))) *) + 0xfa040129; (* arm_SBCS X9 X9 X4 *) + 0xfa03014a; (* arm_SBCS X10 X10 X3 *) + 0xa95533eb; (* arm_LDP X11 X12 SP (Immediate_Offset (iword (&336))) *) + 0xa9508fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&264))) *) + 0xfa04016b; (* arm_SBCS X11 X11 X4 *) + 0xfa03018c; (* arm_SBCS X12 X12 X3 *) + 0xf940b3ed; (* arm_LDR X13 SP (Immediate_Offset (word 352)) *) + 0xf9408fe4; (* arm_LDR X4 SP (Immediate_Offset (word 280)) *) + 0xfa0401ad; (* arm_SBCS X13 X13 X4 *) + 0xfa1f00a5; (* arm_SBCS X5 X5 XZR *) + 0xfa1f00c6; (* arm_SBCS X6 X6 XZR *) + 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) + 0xfa1f0108; (* arm_SBCS X8 X8 XZR *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0x924021ad; (* arm_AND X13 X13 (rvalue (word 511)) *) + 0xa9049b45; (* arm_STP X5 X6 X26 (Immediate_Offset (iword (&72))) *) + 0xa905a347; (* arm_STP X7 X8 X26 (Immediate_Offset (iword (&88))) *) + 0xa906ab49; (* arm_STP X9 X10 X26 (Immediate_Offset (iword (&104))) *) + 0xa907b34b; (* arm_STP X11 X12 X26 (Immediate_Offset (iword (&120))) *) + 0xf900474d; (* arm_STR X13 X26 (Immediate_Offset (word 136)) *) + 0x910803ff; (* arm_ADD SP SP (rvalue (word 512)) *) + 0xa8c173fb; (* arm_LDP X27 X28 SP (Postimmediate_Offset (iword (&16))) *) + 0xa8c16bf9; (* arm_LDP X25 X26 SP (Postimmediate_Offset (iword (&16))) *) + 0xa8c163f7; (* arm_LDP X23 X24 SP (Postimmediate_Offset (iword (&16))) *) + 0xa8c15bf5; (* arm_LDP X21 X22 SP (Postimmediate_Offset (iword (&16))) *) + 0xa8c153f3; (* arm_LDP X19 X20 SP (Postimmediate_Offset (iword (&16))) *) + 0xd65f03c0 (* arm_RET X30 *) +];; + +let P521_JADD_EXEC = ARM_MK_EXEC_RULE p521_jadd_mc;; + +(* ------------------------------------------------------------------------- *) +(* Common supporting definitions and lemmas for component proofs. *) +(* ------------------------------------------------------------------------- *) + +let p_521 = new_definition `p_521 = 6864797660130609714981900799081393217269435300143305409394463459185543183397656052122559640661454554977296311391480858037121987999716643812574028291115057151`;; + +let P_521 = prove + (`p_521 = 2 EXP 521 - 1`, + REWRITE_TAC[p_521] THEN CONV_TAC NUM_REDUCE_CONV);; + +let P_521_AS_WORDLIST = prove + (`p_521 = + bignum_of_wordlist + [word_not(word 0);word_not(word 0);word_not(word 0);word_not(word 0); + word_not(word 0);word_not(word 0);word_not(word 0);word_not(word 0); + word(0x1FF)]`, + REWRITE_TAC[p_521; bignum_of_wordlist] THEN + CONV_TAC WORD_REDUCE_CONV THEN CONV_TAC NUM_REDUCE_CONV);; + +let BIGNUM_FROM_MEMORY_EQ_P521 = prove + (`bignum_of_wordlist[n0;n1;n2;n3;n4;n5;n6;n7;n8] = p_521 <=> + (!i. i < 64 + ==> bit i n0 /\ bit i n1 /\ bit i n2 /\ bit i n3 /\ + bit i n4 /\ bit i n5 /\ bit i n6 /\ bit i n7) /\ + (!i. i < 9 ==> bit i n8) /\ (!i. i < 64 ==> 9 <= i ==> ~bit i n8)`, + REWRITE_TAC[P_521_AS_WORDLIST; BIGNUM_OF_WORDLIST_EQ] THEN + REWRITE_TAC[WORD_EQ_BITS_ALT; DIMINDEX_64] THEN + CONV_TAC(ONCE_DEPTH_CONV EXPAND_CASES_CONV) THEN + CONV_TAC NUM_REDUCE_CONV THEN CONV_TAC WORD_REDUCE_CONV THEN + CONV_TAC CONJ_ACI_RULE);; + +let BIGNUM_FROM_MEMORY_LE_P521 = prove + (`bignum_of_wordlist[n0;n1;n2;n3;n4;n5;n6;n7;n8] <= p_521 <=> + !i. i < 64 ==> 9 <= i ==> ~bit i n8`, + SIMP_TAC[P_521; ARITH_RULE `p_521 = 2 EXP 521 - 1 ==> + (n <= p_521 <=> n DIV 2 EXP (8 * 64) < 2 EXP 9)`] THEN + REWRITE_TAC[TOP_DEPTH_CONV num_CONV `8`; MULT_CLAUSES; EXP_ADD] THEN + REWRITE_TAC[GSYM DIV_DIV; BIGNUM_OF_WORDLIST_DIV; EXP; DIV_1] THEN + REWRITE_TAC[BIGNUM_OF_WORDLIST_SING; GSYM UPPER_BITS_ZERO] THEN + MP_TAC(ISPEC `n8:int64` BIT_TRIVIAL) THEN REWRITE_TAC[DIMINDEX_64] THEN + MESON_TAC[NOT_LE]);; + +let BIGNUM_FROM_MEMORY_LT_P521 = prove + (`bignum_of_wordlist[n0;n1;n2;n3;n4;n5;n6;n7;n8] < p_521 <=> + (!i. i < 64 ==> 9 <= i ==> ~bit i n8) /\ + ~((!i. i < 64 + ==> bit i n0 /\ bit i n1 /\ bit i n2 /\ bit i n3 /\ + bit i n4 /\ bit i n5 /\ bit i n6 /\ bit i n7) /\ + (!i. i < 9 ==> bit i n8))`, + GEN_REWRITE_TAC LAND_CONV [LT_LE] THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_EQ_P521; BIGNUM_FROM_MEMORY_LE_P521] THEN + MESON_TAC[]);; + +let nistp521 = define + `nistp521 = + (integer_mod_ring p_521, + ring_neg (integer_mod_ring p_521) (&3), + &b_521:int)`;; + +let nistp521_encode = new_definition + `nistp521_encode = modular_encode(521,p_521)`;; + +let nintlemma = prove + (`&(num_of_int(x rem &p_521)) = x rem &p_521`, + MATCH_MP_TAC INT_OF_NUM_OF_INT THEN MATCH_MP_TAC INT_REM_POS THEN + REWRITE_TAC[INT_OF_NUM_EQ; p_521] THEN CONV_TAC NUM_REDUCE_CONV);; + +let unilemma0 = prove + (`x = a MOD p_521 ==> x < p_521 /\ &x = &a rem &p_521`, + REWRITE_TAC[INT_OF_NUM_REM; p_521] THEN ARITH_TAC);; + +let unilemma1 = prove + (`&x = a rem &p_521 ==> x < p_521 /\ &x = a rem &p_521`, + SIMP_TAC[GSYM INT_OF_NUM_LT; INT_LT_REM_EQ; p_521] THEN INT_ARITH_TAC);; + +let unilemma2 = prove + (`X = num_of_int(x rem &p_521) ==> X < p_521 /\ &X = x rem &p_521`, + DISCH_THEN SUBST1_TAC THEN + REWRITE_TAC[GSYM INT_OF_NUM_LT; nintlemma; INT_LT_REM_EQ] THEN + REWRITE_TAC[INT_OF_NUM_LT; p_521] THEN CONV_TAC NUM_REDUCE_CONV);; + +let lvs = + ["x_1",[`X27`;`0`]; + "y_1",[`X27`;`72`]; + "z_1",[`X27`;`144`]; + "x_2",[`X28`;`0`]; + "y_2",[`X28`;`72`]; + "z_2",[`X28`;`144`]; + "x_3",[`X26`;`0`]; + "y_3",[`X26`;`72`]; + "z_3",[`X26`;`144`]; + "z1sq",[`SP`;`0`]; + "ww",[`SP`;`0`]; + "yd",[`SP`;`72`]; + "y2a",[`SP`;`72`]; + "x2a",[`SP`;`144`]; + "zzx2",[`SP`;`144`]; + "zz",[`SP`;`216`]; + "t1",[`SP`;`216`]; + "t2",[`SP`;`288`]; + "x1a",[`SP`;`288`]; + "zzx1",[`SP`;`288`]; + "xd",[`SP`;`360`]; + "z2sq",[`SP`;`360`]; + "y1a",[`SP`;`432`]];; + +(* ------------------------------------------------------------------------- *) +(* Instances of sqr. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_SQR_P521_TAC = + ARM_MACRO_SIM_ABBREV_TAC p521_jadd_mc 230 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1. + !n. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 9)) t = n + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0x5848) (word_add (read p3 t) (word n3),72) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p521_jadd_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X26 s = read X26 t /\ + read X27 s = read X27 t /\ + read X28 s = read X28 t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 9)) s = + n) + (\s. read PC s = pcout /\ + (n < p_521 + ==> read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 9)) s = (n EXP 2) MOD p_521)) + (MAYCHANGE [PC; X0; X1; X2; X3; X4; X5; X6; X7; X8; X9; X10; + X11; X12; X13; X14; X15; X16; X17; X19; X20; + X21; X22; X23; X24; X25] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 9)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + (*** Globalize the n < p_521 assumption for simplicity's sake ***) + + ASM_CASES_TAC `n < p_521` THENL + [ASM_REWRITE_TAC[]; ARM_SIM_TAC P521_JADD_EXEC (1--230)] THEN + + (*** Digitize, deduce the bound on the top word specifically ***) + + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "n_" o lhand o concl) THEN + SUBGOAL_THEN `n DIV 2 EXP 512 < 2 EXP 9` MP_TAC THENL + [UNDISCH_TAC `n < p_521` THEN REWRITE_TAC[p_521] THEN ARITH_TAC; + FIRST_ASSUM(fun th -> GEN_REWRITE_TAC (funpow 3 LAND_CONV) [SYM th]) THEN + CONV_TAC(LAND_CONV(ONCE_DEPTH_CONV BIGNUM_OF_WORDLIST_DIV_CONV)) THEN + DISCH_TAC] THEN + + (*** Simulate the initial squaring ***) + + ARM_ACCSTEPS_TAC P521_JADD_EXEC (1--195) (1--195) THEN + RULE_ASSUM_TAC(REWRITE_RULE[COND_SWAP; GSYM WORD_BITVAL]) THEN + + (*** Introduce more systematic names for the high part digits ***) + + MAP_EVERY (fun s -> REABBREV_TAC s THEN POP_ASSUM SUBST_ALL_TAC) + [`l0 = read X2 s195`; + `l1 = read X11 s195`; + `l2 = read X12 s195`; + `l3 = read X13 s195`; + `l4 = read X14 s195`; + `l5 = read X15 s195`; + `l6 = read X16 s195`; + `l7 = read X17 s195`; + `h0 = read X19 s195`; + `h1 = read X20 s195`; + `h2 = read X21 s195`; + `h3 = read X22 s195`; + `h4 = read X23 s195`; + `h5 = read X24 s195`; + `h6 = read X25 s195`; + `h7 = read X0 s195`; + `h8 = read X4 s195`] THEN + + (*** Handle the two anomalous operations ***) + + UNDISCH_THEN + `&2 pow 64 * &(bitval carry_s159) + &(val(sum_s159:int64)):real = + &(val(n_8:int64)) + &(val n_8)` + (MP_TAC o REWRITE_RULE[REAL_OF_NUM_CLAUSES]) THEN + REWRITE_TAC[bitval] THEN COND_CASES_TAC THEN + ASM_REWRITE_TAC[ADD_CLAUSES; MULT_CLAUSES] THENL + [MATCH_MP_TAC(TAUT `~p ==> p ==> q`) THEN + MATCH_MP_TAC(ARITH_RULE `a < b ==> ~(b + s:num = a)`) THEN + ASM BOUNDER_TAC[]; + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN + DISCH_THEN SUBST_ALL_TAC] THEN + + UNDISCH_THEN + `&2 pow 64 * &(val(mulhi_s176:int64)) + &(val(mullo_s176:int64)):real = + &2 pow 63 * (&(val(n_8:int64)) + &(val n_8))` + (MP_TAC o REWRITE_RULE[REAL_OF_NUM_CLAUSES]) THEN + REWRITE_TAC[ARITH_RULE `2 EXP 63 * (n + n) = 2 EXP 64 * n`] THEN + DISCH_THEN(MP_TAC o MATCH_MP (NUMBER_RULE + `e * h + l = e * x ==> e divides l /\ e * h + l = e * x`)) THEN + GEN_REWRITE_TAC I [IMP_CONJ] THEN + DISCH_THEN(MP_TAC o MATCH_MP DIVIDES_LE) THEN + REWRITE_TAC[REWRITE_RULE[GSYM NOT_LE] VAL_BOUND_64] THEN + DISCH_THEN SUBST1_TAC THEN + REWRITE_TAC[ARITH_RULE `2 EXP 64 * x + 0 = 2 EXP 64 * y <=> x = y`] THEN + DISCH_THEN SUBST_ALL_TAC THEN + + (*** Show that the core squaring operation is correct ***) + + SUBGOAL_THEN + `2 EXP 512 * bignum_of_wordlist[h0;h1;h2;h3;h4;h5;h6;h7;h8] + + bignum_of_wordlist[l0;l1;l2;l3;l4;l5;l6;l7] = + n EXP 2` + ASSUME_TAC THENL + [ASM_REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`1088`; `&0:real`] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN CONJ_TAC THENL + [REWRITE_TAC[REAL_OF_NUM_CLAUSES; LE_0] THEN + REWRITE_TAC[EXP_2; ARITH_RULE `2 EXP 1088 = 2 EXP 544 EXP 2`] THEN + MATCH_MP_TAC LT_MULT2 THEN UNDISCH_TAC `n < p_521` THEN + REWRITE_TAC[p_521] THEN ARITH_TAC; + REWRITE_TAC[INTEGER_CLOSED]] THEN + EXPAND_TAC "n" THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + CONV_TAC(RAND_CONV REAL_POLY_CONV) THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o + filter (is_ratconst o rand o concl) o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC) THEN + RULE_ASSUM_TAC(REWRITE_RULE[BIGNUM_FROM_MEMORY_BYTES])] THEN + + (*** Now simulate the shift-and-add of high and lower parts ***) + + ARM_ACCSTEPS_TAC P521_JADD_EXEC + [198;200;202;204;206;208;210;212;215] (196--215) THEN + + (*** Break up into high and low parts ***) + + ABBREV_TAC `h = (n EXP 2) DIV 2 EXP 521` THEN + ABBREV_TAC `l = (n EXP 2) MOD 2 EXP 521` THEN + SUBGOAL_THEN `h < p_521 /\ l <= p_521` STRIP_ASSUME_TAC THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"] THEN REWRITE_TAC[p_521] THEN + CONJ_TAC THENL [ALL_TAC; ARITH_TAC] THEN + SIMP_TAC[RDIV_LT_EQ; EXP_EQ_0; ARITH_EQ] THEN + TRANS_TAC LET_TRANS `(p_521 - 1) EXP 2` THEN + CONJ_TAC THENL [ALL_TAC; REWRITE_TAC[p_521] THEN ARITH_TAC] THEN + REWRITE_TAC[EXP_2] THEN MATCH_MP_TAC LE_MULT2 THEN CONJ_TAC THEN + MATCH_MP_TAC(ARITH_RULE `x < n ==> x <= n - 1`) THEN ASM_REWRITE_TAC[]; + ALL_TAC] THEN + SUBGOAL_THEN `(n EXP 2) MOD p_521 = (h + l) MOD p_521` SUBST1_TAC THENL + [SUBST1_TAC(SYM(SPECL + [`n EXP 2:num`; `2 EXP 521`] (CONJUNCT2 DIVISION_SIMP))) THEN + ASM_REWRITE_TAC[GSYM CONG] THEN MATCH_MP_TAC(NUMBER_RULE + `(e == 1) (mod p) ==> (e * h + l == h + l) (mod p)`) THEN + REWRITE_TAC[CONG; p_521] THEN ARITH_TAC; + ALL_TAC] THEN + SUBGOAL_THEN + `(n EXP 2) DIV 2 EXP 521 = + bignum_of_wordlist + [word_subword (word_join (h1:int64) h0:int128) (9,64); + word_subword (word_join (h2:int64) h1:int128) (9,64); + word_subword (word_join (h3:int64) h2:int128) (9,64); + word_subword (word_join (h4:int64) h3:int128) (9,64); + word_subword (word_join (h5:int64) h4:int128) (9,64); + word_subword (word_join (h6:int64) h5:int128) (9,64); + word_subword (word_join (h7:int64) h6:int128) (9,64); + word_subword (word_join (h8:int64) h7:int128) (9,64); + word_ushr h8 9] /\ + (n EXP 2) MOD 2 EXP 521 = + 2 EXP 512 * val(word_and h0 (word 511):int64) + + bignum_of_wordlist [l0; l1; l2; l3; l4; l5; l6; l7]` + (CONJUNCTS_THEN SUBST_ALL_TAC) THENL + [MATCH_MP_TAC DIVMOD_UNIQ THEN + REWRITE_TAC[VAL_WORD_AND_MASK_WORD; ARITH_RULE `511 = 2 EXP 9 - 1`] THEN + CONJ_TAC THENL + [FIRST_X_ASSUM(fun th -> GEN_REWRITE_TAC LAND_CONV [SYM th]) THEN + ASM_REWRITE_TAC[ADD_ASSOC; EQ_ADD_RCANCEL] THEN + REWRITE_TAC[bignum_of_wordlist; VAL_WORD_USHR] THEN + SIMP_TAC[VAL_WORD_SUBWORD_JOIN_64; DIMINDEX_64; ARITH_LE; ARITH_LT] THEN + ARITH_TAC; + MATCH_MP_TAC(ARITH_RULE + `x < 2 EXP (64 * 8) ==> 2 EXP 512 * h MOD 2 EXP 9 + x < 2 EXP 521`) THEN + MATCH_MP_TAC BIGNUM_OF_WORDLIST_BOUND THEN REWRITE_TAC[LENGTH; ARITH]]; + ALL_TAC] THEN + + (*** The net comparison h + l >= p_521 ***) + + SUBGOAL_THEN + `&(val (word_or h0 (word 18446744073709551104))):real = + (&2 pow 64 - &2 pow 9) + &(val(word_and h0 (word 511):int64))` + SUBST_ALL_TAC THENL + [ONCE_REWRITE_TAC[WORD_BITWISE_RULE + `word_or a b = word_or b (word_and a (word_not b))`] THEN + SIMP_TAC[VAL_WORD_OR_DISJOINT; WORD_BITWISE_RULE + `word_and x (word_and y (word_not x)) = word 0`] THEN + CONV_TAC(DEPTH_CONV WORD_NUM_RED_CONV) THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN REAL_ARITH_TAC; + ALL_TAC] THEN + SUBGOAL_THEN `carry_s215 <=> p_521 <= h + l` SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LE THEN EXISTS_TAC `576` THEN + MAP_EVERY EXPAND_TAC ["h"; "l"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist; p_521] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ALL_TAC] THEN + + (*** The final correction ***) + + ARM_ACCSTEPS_TAC P521_JADD_EXEC (216--224) (216--230) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[REAL_OF_NUM_CLAUSES] THEN + CONV_TAC SYM_CONV THEN CONV_TAC(RAND_CONV BIGNUM_LEXPAND_CONV) THEN + ASM_REWRITE_TAC[] THEN MATCH_MP_TAC EQUAL_FROM_CONGRUENT_MOD_MOD THEN + MAP_EVERY EXISTS_TAC + [`521`; + `if h + l < p_521 then &h + &l:real else (&h + &l) - &p_521`] THEN + REPEAT CONJ_TAC THENL + [BOUNDER_TAC[]; + REWRITE_TAC[p_521] THEN ARITH_TAC; + REWRITE_TAC[p_521] THEN ARITH_TAC; + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + REWRITE_TAC[GSYM NOT_LT] THEN ABBREV_TAC `bb <=> h + l < p_521` THEN + MAP_EVERY EXPAND_TAC ["h"; "l"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist; p_521] THEN + REWRITE_TAC[VAL_WORD_AND_MASK_WORD; ARITH_RULE `511 = 2 EXP 9 - 1`] THEN + REWRITE_TAC[REAL_OF_NUM_MOD] THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC NUM_REDUCE_CONV THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC; + ASM_SIMP_TAC[MOD_CASES; ARITH_RULE + `h < p /\ l <= p ==> h + l < 2 * p`] THEN + SIMP_TAC[REAL_OF_NUM_CLAUSES; REAL_OF_NUM_SUB; COND_SWAP; GSYM NOT_LE] THEN + MESON_TAC[]]);; + +(* ------------------------------------------------------------------------- *) +(* Instances of mul. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_MUL_P521_TAC = + ARM_MACRO_SIM_ABBREV_TAC p521_jadd_mc 373 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1 p2 n2. + !a. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 9)) t = a + ==> + !b. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 9)) t = b + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0x5848) (word_add (read p3 t) (word n3),72) /\ + nonoverlapping (read X27 t,216) (read X26 t,216) /\ + nonoverlapping (read X28 t,216) (read X26 t,216) /\ + nonoverlapping (read X26 t,216) (stackpointer,512) /\ + nonoverlapping (read X27 t,216) (stackpointer,512) /\ + nonoverlapping (read X28 t,216) (stackpointer,512) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p521_jadd_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X26 s = read X26 t /\ + read X27 s = read X27 t /\ + read X28 s = read X28 t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 9)) s = + a /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 9)) s = + b) + (\s. read PC s = pcout /\ + (a < p_521 /\ b < p_521 + ==> read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 9)) s = (a * b) MOD p_521)) + (MAYCHANGE [PC; X0; X1; X3; X4; X5; X6; X7; X8; X9; + X10; X11; X12; X13; X14; X15; X16; X17; X19; + X20; X21; X22; X23; X24] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 9)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + (*** Globalize the a < p_521 /\ b < p_521 assumption for simplicity ***) + + ASM_CASES_TAC `a < p_521 /\ b < p_521` THENL + [ASM_REWRITE_TAC[] THEN FIRST_X_ASSUM(CONJUNCTS_THEN ASSUME_TAC); + ARM_SIM_TAC P521_JADD_EXEC (1--373)] THEN + + (*** Digitize, deduce the bound on the top words ***) + + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "y_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "x_" o lhand o concl) THEN + SUBGOAL_THEN + `a DIV 2 EXP 512 < 2 EXP 9 /\ b DIV 2 EXP 512 < 2 EXP 9` + MP_TAC THENL + [MAP_EVERY UNDISCH_TAC [`a < p_521`; `b < p_521`] THEN + REWRITE_TAC[p_521] THEN ARITH_TAC; + MAP_EVERY EXPAND_TAC ["a"; "b"] THEN + CONV_TAC(LAND_CONV(ONCE_DEPTH_CONV BIGNUM_OF_WORDLIST_DIV_CONV)) THEN + ASM_REWRITE_TAC[] THEN STRIP_TAC] THEN + + (*** Simulate the initial multiplication ***) + + ARM_ACCSTEPS_TAC P521_JADD_EXEC (1--334) (1--334) THEN + RULE_ASSUM_TAC(REWRITE_RULE[COND_SWAP; GSYM WORD_BITVAL]) THEN + + (*** Introduce more systematic names for the high part digits ***) + + MAP_EVERY (fun s -> REABBREV_TAC s THEN POP_ASSUM SUBST_ALL_TAC) + [`h0 = read X24 s334`; + `h1 = read X1 s334`; + `h2 = read X0 s334`; + `h3 = read X15 s334`; + `h4 = read X16 s334`; + `h5 = read X17 s334`; + `h6 = read X19 s334`; + `h7 = read X20 s334`; + `h8 = read X21 s334`] THEN + + (*** Show that the core multiplication operation is correct ***) + + SUBGOAL_THEN + `2 EXP 512 * bignum_of_wordlist[h0;h1;h2;h3;h4;h5;h6;h7;h8] + + bignum_of_wordlist + [mullo_s3; sum_s35; sum_s74; sum_s111; + sum_s150; sum_s187; sum_s226; sum_s263] = + a * b` + ASSUME_TAC THENL + [ASM_REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`1088`; `&0:real`] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN CONJ_TAC THENL + [REWRITE_TAC[REAL_OF_NUM_CLAUSES; LE_0] THEN + REWRITE_TAC[EXP_2; ARITH_RULE `2 EXP 1088 = 2 EXP 544 EXP 2`] THEN + MATCH_MP_TAC LT_MULT2 THEN + MAP_EVERY UNDISCH_TAC [`a < p_521`; `b < p_521`] THEN + REWRITE_TAC[p_521] THEN ARITH_TAC; + REWRITE_TAC[INTEGER_CLOSED]] THEN + MAP_EVERY EXPAND_TAC ["a"; "b"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + CONV_TAC(RAND_CONV REAL_POLY_CONV) THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o + filter (is_ratconst o rand o concl) o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC) THEN + RULE_ASSUM_TAC(REWRITE_RULE[BIGNUM_FROM_MEMORY_BYTES])] THEN + + (*** Now simulate the shift-and-add of high and lower parts ***) + + ARM_ACCSTEPS_TAC P521_JADD_EXEC + [338;340;343;345;348;350;353;355;358] (335--358) THEN + + (*** Break up into high and low parts ***) + + ABBREV_TAC `h = (a * b) DIV 2 EXP 521` THEN + ABBREV_TAC `l = (a * b) MOD 2 EXP 521` THEN + SUBGOAL_THEN `h < p_521 /\ l <= p_521` STRIP_ASSUME_TAC THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"] THEN REWRITE_TAC[p_521] THEN + CONJ_TAC THENL [ALL_TAC; ARITH_TAC] THEN + SIMP_TAC[RDIV_LT_EQ; EXP_EQ_0; ARITH_EQ] THEN + TRANS_TAC LET_TRANS `(p_521 - 1) EXP 2` THEN + CONJ_TAC THENL [ALL_TAC; REWRITE_TAC[p_521] THEN ARITH_TAC] THEN + REWRITE_TAC[EXP_2] THEN MATCH_MP_TAC LE_MULT2 THEN CONJ_TAC THEN + MATCH_MP_TAC(ARITH_RULE `x < n ==> x <= n - 1`) THEN ASM_REWRITE_TAC[]; + ALL_TAC] THEN + SUBGOAL_THEN `(a * b) MOD p_521 = (h + l) MOD p_521` SUBST1_TAC THENL + [SUBST1_TAC(SYM(SPECL + [`a * b:num`; `2 EXP 521`] (CONJUNCT2 DIVISION_SIMP))) THEN + ASM_REWRITE_TAC[GSYM CONG] THEN MATCH_MP_TAC(NUMBER_RULE + `(e == 1) (mod p) ==> (e * h + l == h + l) (mod p)`) THEN + REWRITE_TAC[CONG; p_521] THEN ARITH_TAC; + ALL_TAC] THEN + SUBGOAL_THEN + `(a * b) DIV 2 EXP 521 = + bignum_of_wordlist + [word_subword (word_join (h1:int64) h0:int128) (9,64); + word_subword (word_join (h2:int64) h1:int128) (9,64); + word_subword (word_join (h3:int64) h2:int128) (9,64); + word_subword (word_join (h4:int64) h3:int128) (9,64); + word_subword (word_join (h5:int64) h4:int128) (9,64); + word_subword (word_join (h6:int64) h5:int128) (9,64); + word_subword (word_join (h7:int64) h6:int128) (9,64); + word_subword (word_join (h8:int64) h7:int128) (9,64); + word_ushr h8 9] /\ + (a * b) MOD 2 EXP 521 = + 2 EXP 512 * val(word_and h0 (word 511):int64) + + bignum_of_wordlist + [mullo_s3; sum_s35; sum_s74; sum_s111; + sum_s150; sum_s187; sum_s226; sum_s263]` + (CONJUNCTS_THEN SUBST_ALL_TAC) THENL + [MATCH_MP_TAC DIVMOD_UNIQ THEN + REWRITE_TAC[VAL_WORD_AND_MASK_WORD; ARITH_RULE `511 = 2 EXP 9 - 1`] THEN + CONJ_TAC THENL + [FIRST_X_ASSUM(fun th -> GEN_REWRITE_TAC LAND_CONV [SYM th]) THEN + CONV_TAC(ONCE_DEPTH_CONV BIGNUM_LEXPAND_CONV) THEN + ASM_REWRITE_TAC[ADD_ASSOC; EQ_ADD_RCANCEL] THEN + REWRITE_TAC[bignum_of_wordlist; VAL_WORD_USHR] THEN + SIMP_TAC[VAL_WORD_SUBWORD_JOIN_64; DIMINDEX_64; ARITH_LE; ARITH_LT] THEN + ARITH_TAC; + MATCH_MP_TAC(ARITH_RULE + `x < 2 EXP (64 * 8) ==> 2 EXP 512 * h MOD 2 EXP 9 + x < 2 EXP 521`) THEN + MATCH_MP_TAC BIGNUM_OF_WORDLIST_BOUND THEN REWRITE_TAC[LENGTH; ARITH]]; + ALL_TAC] THEN + + (*** The net comparison h + l >= p_521 ***) + + SUBGOAL_THEN + `&(val (word_or h0 (word 18446744073709551104))):real = + (&2 pow 64 - &2 pow 9) + &(val(word_and h0 (word 511):int64))` + SUBST_ALL_TAC THENL + [ONCE_REWRITE_TAC[WORD_BITWISE_RULE + `word_or a b = word_or b (word_and a (word_not b))`] THEN + SIMP_TAC[VAL_WORD_OR_DISJOINT; WORD_BITWISE_RULE + `word_and x (word_and y (word_not x)) = word 0`] THEN + CONV_TAC(DEPTH_CONV WORD_NUM_RED_CONV) THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN REAL_ARITH_TAC; + ALL_TAC] THEN + SUBGOAL_THEN `carry_s358 <=> p_521 <= h + l` SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LE THEN EXISTS_TAC `576` THEN + MAP_EVERY EXPAND_TAC ["h"; "l"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist; p_521] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ALL_TAC] THEN + + (*** The final correction ***) + + ARM_ACCSTEPS_TAC P521_JADD_EXEC (359--367) (359--373) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC SYM_CONV THEN CONV_TAC(RAND_CONV BIGNUM_LEXPAND_CONV) THEN + ASM_REWRITE_TAC[] THEN MATCH_MP_TAC EQUAL_FROM_CONGRUENT_MOD_MOD THEN + MAP_EVERY EXISTS_TAC + [`521`; + `if h + l < p_521 then &h + &l:real else (&h + &l) - &p_521`] THEN + REPEAT CONJ_TAC THENL + [BOUNDER_TAC[]; + REWRITE_TAC[p_521] THEN ARITH_TAC; + REWRITE_TAC[p_521] THEN ARITH_TAC; + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + REWRITE_TAC[GSYM NOT_LT] THEN ABBREV_TAC `bb <=> h + l < p_521` THEN + MAP_EVERY EXPAND_TAC ["h"; "l"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist; p_521] THEN + REWRITE_TAC[VAL_WORD_AND_MASK_WORD; ARITH_RULE `511 = 2 EXP 9 - 1`] THEN + REWRITE_TAC[REAL_OF_NUM_MOD] THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC NUM_REDUCE_CONV THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC; + ASM_SIMP_TAC[MOD_CASES; ARITH_RULE + `h < p /\ l <= p ==> h + l < 2 * p`] THEN + SIMP_TAC[REAL_OF_NUM_CLAUSES; REAL_OF_NUM_SUB; COND_SWAP; GSYM NOT_LE] THEN + MESON_TAC[]]);; + +(* ------------------------------------------------------------------------- *) +(* Instances of sub. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_SUB_P521_TAC = + ARM_MACRO_SIM_ABBREV_TAC p521_jadd_mc 34 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 9)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 9)) t = n + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0x5848) (word_add (read p3 t) (word n3),72) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p521_jadd_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X26 s = read X26 t /\ + read X27 s = read X27 t /\ + read X28 s = read X28 t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 9)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 9)) s = + n) + (\s. read PC s = pcout /\ + (m < p_521 /\ n < p_521 + ==> &(read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 9)) s) = (&m - &n) rem &p_521)) + (MAYCHANGE [PC; X3; X4; X5; X6; X7; X8; X9; X10; X11; X12; X13] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 9)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "m_" o lhand o concl) THEN + + (*** Initial subtraction x - y, comparison result ***) + + ARM_ACCSTEPS_TAC P521_JADD_EXEC [3;4;7;8;11;12;15;16;19] (1--19) THEN + + SUBGOAL_THEN `carry_s19 <=> m < n` SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN EXISTS_TAC `576` THEN + MAP_EVERY EXPAND_TAC ["m"; "n"] THEN + REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ALL_TAC] THEN + + (*** Further optional subtraction mod 2^521 ***) + + ARM_ACCSTEPS_TAC P521_JADD_EXEC (20--28) (20--34) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN STRIP_TAC THEN + + (*** Map things into the reals, doing case analysis over comparison ***) + + TRANS_TAC EQ_TRANS `if m < n then &m - &n + &p_521:int else &m - &n` THEN + CONJ_TAC THENL + [ONCE_REWRITE_TAC[int_eq] THEN ONCE_REWRITE_TAC[COND_RAND] THEN + REWRITE_TAC[int_of_num_th; int_sub_th; int_add_th]; + CONV_TAC SYM_CONV THEN MATCH_MP_TAC INT_REM_UNIQ THEN + EXISTS_TAC `if m:num < n then --(&1):int else &0` THEN + MAP_EVERY UNDISCH_TAC [`m < p_521`; `n < p_521`] THEN + REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES; p_521] THEN INT_ARITH_TAC] THEN + + (*** Hence show that we get the right result in 521 bits ***) + + CONV_TAC SYM_CONV THEN + CONV_TAC(RAND_CONV(RAND_CONV BIGNUM_LEXPAND_CONV)) THEN + ASM_REWRITE_TAC[SYM(NUM_REDUCE_CONV `2 EXP 9 - 1`)] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`521`; `&0:real`] THEN CONJ_TAC THENL + [MAP_EVERY UNDISCH_TAC [`m < p_521`; `n < p_521`] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; p_521] THEN REAL_ARITH_TAC; + ALL_TAC] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; REWRITE_TAC[INTEGER_CLOSED]] THEN + ABBREV_TAC `bb <=> m:num < n` THEN MAP_EVERY EXPAND_TAC ["m"; "n"] THEN + REWRITE_TAC[bignum_of_wordlist; VAL_WORD_AND_MASK_WORD] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; REAL_OF_NUM_MOD; p_521] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Overall point operation proof. *) +(* ------------------------------------------------------------------------- *) + +let P521_JADD_CORRECT = time prove + (`!p3 p1 t1 p2 t2 pc stackpointer. + aligned 16 stackpointer /\ + ALLPAIRS nonoverlapping + [(p3,216); (stackpointer,512)] + [(word pc,0x5848); (p1,216); (p2,216)] /\ + nonoverlapping (p3,216) (stackpointer,512) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p521_jadd_mc /\ + read PC s = word(pc + 0x18) /\ + read SP s = stackpointer /\ + C_ARGUMENTS [p3; p1; p2] s /\ + bignum_triple_from_memory (p1,9) s = t1 /\ + bignum_triple_from_memory (p2,9) s = t2) + (\s. read PC s = word (pc + 0x582c) /\ + (!x1 y1 z1 x2 y2 z2. + ~(z1 = &0) /\ ~(z2 = &0) /\ + ~(jacobian_eq (integer_mod_ring p_521) + (x1,y1,z1) (x2,y2,z2)) /\ + ~(jacobian_eq (integer_mod_ring p_521) + (jacobian_neg nistp521 (x1,y1,z1)) + (x2,y2,z2)) /\ + t1 = tripled nistp521_encode (x1,y1,z1) /\ + t2 = tripled nistp521_encode (x2,y2,z2) + ==> bignum_triple_from_memory(p3,9) s = + tripled nistp521_encode + (jacobian_add nistp521 (x1,y1,z1) (x2,y2,z2)))) + (MAYCHANGE [PC; X0; X1; X2; X3; X4; X5; X6; X7; X8; X9; X10; + X11; X12; X13; X14; X15; X16; X17; X19; X20; + X21; X22; X23; X24; X25; X26; X27; X28] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,216); + memory :> bytes(stackpointer,512)])`, + REWRITE_TAC[FORALL_PAIR_THM] THEN + MAP_EVERY X_GEN_TAC + [`p3:int64`; `p1:int64`; `x1:num`; `y1:num`; `z1:num`; `p2:int64`; + `x2:num`; `y2:num`; `z2:num`; `pc:num`; `stackpointer:int64`] THEN + REWRITE_TAC[ALLPAIRS; ALL; NONOVERLAPPING_CLAUSES] THEN STRIP_TAC THEN + REWRITE_TAC[C_ARGUMENTS; SOME_FLAGS; PAIR_EQ; bignum_triple_from_memory] THEN + CONV_TAC(ONCE_DEPTH_CONV NUM_MULT_CONV) THEN + CONV_TAC(ONCE_DEPTH_CONV NORMALIZE_RELATIVE_ADDRESS_CONV) THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + + LOCAL_SQR_P521_TAC 3 ["z1sq";"z_1"] THEN + LOCAL_SQR_P521_TAC 0 ["z2sq";"z_2"] THEN + LOCAL_MUL_P521_TAC 0 ["y1a";"z_2";"y_1"] THEN + LOCAL_MUL_P521_TAC 0 ["y2a";"z_1";"y_2"] THEN + LOCAL_MUL_P521_TAC 0 ["x2a";"z1sq";"x_2"] THEN + LOCAL_MUL_P521_TAC 0 ["x1a";"z2sq";"x_1"] THEN + LOCAL_MUL_P521_TAC 0 ["y2a";"z1sq";"y2a"] THEN + LOCAL_MUL_P521_TAC 0 ["y1a";"z2sq";"y1a"] THEN + LOCAL_SUB_P521_TAC 0 ["xd";"x2a";"x1a"] THEN + LOCAL_SUB_P521_TAC 0 ["yd";"y2a";"y1a"] THEN + LOCAL_SQR_P521_TAC 0 ["zz";"xd"] THEN + LOCAL_SQR_P521_TAC 0 ["ww";"yd"] THEN + LOCAL_MUL_P521_TAC 0 ["zzx1";"zz";"x1a"] THEN + LOCAL_MUL_P521_TAC 0 ["zzx2";"zz";"x2a"] THEN + LOCAL_SUB_P521_TAC 0 ["x_3";"ww";"zzx1"] THEN + LOCAL_SUB_P521_TAC 0 ["t1";"zzx2";"zzx1"] THEN + LOCAL_MUL_P521_TAC 0 ["xd";"xd";"z_1"] THEN + LOCAL_SUB_P521_TAC 0 ["x_3";"x_3";"zzx2"] THEN + LOCAL_SUB_P521_TAC 0 ["t2";"zzx1";"x_3"] THEN + LOCAL_MUL_P521_TAC 0 ["t1";"t1";"y1a"] THEN + LOCAL_MUL_P521_TAC 0 ["z_3";"xd";"z_2"] THEN + LOCAL_MUL_P521_TAC 0 ["t2";"yd";"t2"] THEN + LOCAL_SUB_P521_TAC 0 ["y_3";"t2";"t1"] THEN + + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + DISCARD_STATE_TAC "s26" THEN + DISCARD_MATCHING_ASSUMPTIONS [`nonoverlapping_modulo a b c`] THEN + MAP_EVERY X_GEN_TAC + [`x1':int`; `y1':int`; `z1':int`; `x2':int`; `y2':int`; `z2':int`] THEN + REPLICATE_TAC 4 (DISCH_THEN(CONJUNCTS_THEN2 ASSUME_TAC MP_TAC)) THEN + REWRITE_TAC[tripled; nistp521_encode; PAIR_EQ; modular_encode] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN + (STRIP_ASSUME_TAC o MATCH_MP unilemma2)) THEN + + (*** Dispose of any range hypotheses ***) + + REPEAT(FIRST_X_ASSUM(MP_TAC o check (is_imp o concl))) THEN + REPEAT(ANTS_TAC THENL + [REWRITE_TAC[p_521] THEN RULE_ASSUM_TAC(REWRITE_RULE[p_521]) THEN + CONV_TAC NUM_REDUCE_CONV THEN ASM BOUNDER_TAC[]; + (DISCH_THEN(STRIP_ASSUME_TAC o MATCH_MP unilemma0) ORELSE + DISCH_THEN(STRIP_ASSUME_TAC o MATCH_MP unilemma1))]) THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o GEN_REWRITE_RULE I [GSYM NOT_LE])) THEN + + (*** Now push the moduli around then do the algebra ***) + + RULE_ASSUM_TAC(REWRITE_RULE + [num_congruent; GSYM INT_OF_NUM_CLAUSES; GSYM INT_OF_NUM_REM]) THEN + ASM_REWRITE_TAC[tripled; jacobian_add; nistp521] THEN + ASM_REWRITE_TAC[GSYM nistp521] THEN + REWRITE_TAC[INTEGER_MOD_RING_CLAUSES] THEN + CONV_TAC INT_REDUCE_CONV THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN + CONV_TAC INT_REM_DOWN_CONV THEN + REWRITE_TAC[tripled; modular_encode] THEN + REWRITE_TAC[PAIR_EQ; GSYM INT_OF_NUM_EQ; nintlemma] THEN + CONV_TAC INT_REM_DOWN_CONV THEN + REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES; GSYM INT_OF_NUM_REM] THEN + ASM_REWRITE_TAC[] THEN CONV_TAC INT_REM_DOWN_CONV THEN + REPEAT CONJ_TAC THEN AP_THM_TAC THEN AP_TERM_TAC THEN + INT_ARITH_TAC);; + +let P521_JADD_SUBROUTINE_CORRECT = time prove + (`!p3 p1 t1 p2 t2 pc stackpointer returnaddress. + aligned 16 stackpointer /\ + ALLPAIRS nonoverlapping + [(p3,216); (word_sub stackpointer (word 592),592)] + [(word pc,0x5848); (p1,216); (p2,216)] /\ + nonoverlapping (p3,216) (word_sub stackpointer (word 592),592) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p521_jadd_mc /\ + read PC s = word pc /\ + read SP s = stackpointer /\ + read X30 s = returnaddress /\ + C_ARGUMENTS [p3; p1; p2] s /\ + bignum_triple_from_memory (p1,9) s = t1 /\ + bignum_triple_from_memory (p2,9) s = t2) + (\s. read PC s = returnaddress /\ + (!x1 y1 z1 x2 y2 z2. + ~(z1 = &0) /\ ~(z2 = &0) /\ + ~(jacobian_eq (integer_mod_ring p_521) + (x1,y1,z1) (x2,y2,z2)) /\ + ~(jacobian_eq (integer_mod_ring p_521) + (jacobian_neg nistp521 (x1,y1,z1)) + (x2,y2,z2)) /\ + t1 = tripled nistp521_encode (x1,y1,z1) /\ + t2 = tripled nistp521_encode (x2,y2,z2) + ==> bignum_triple_from_memory(p3,9) s = + tripled nistp521_encode + (jacobian_add nistp521 (x1,y1,z1) (x2,y2,z2)))) + (MAYCHANGE [PC; X0; X1; X2; X3; X4; X5; X6; X7; X8; X9; X10; + X11; X12; X13; X14; X15; X16; X17] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,216); + memory :> bytes(word_sub stackpointer (word 592),592)])`, + ARM_ADD_RETURN_STACK_TAC P521_JADD_EXEC + P521_JADD_CORRECT + `[X19; X20; X21; X22; X23; X24; X25; X26; X27; X28]` + 592);; diff --git a/arm/proofs/p521_jdouble.ml b/arm/proofs/p521_jdouble.ml new file mode 100644 index 0000000000..55f1ef85ff --- /dev/null +++ b/arm/proofs/p521_jdouble.ml @@ -0,0 +1,4687 @@ +(* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + *) + +(* ========================================================================= *) +(* Point doubling in Jacobian coordinates for NIST p521 curve. *) +(* ========================================================================= *) + +needs "arm/proofs/base.ml";; +needs "common/ecencoding.ml";; +needs "EC/jacobian.ml";; +needs "EC/nistp521.ml";; + +prioritize_int();; +prioritize_real();; +prioritize_num();; + +(**** print_literal_from_elf "arm/p521/p521_jdouble.o";; + ****) + +let p521_jdouble_mc = define_assert_from_elf + "p521_jdouble_mc" "arm/p521/p521_jdouble.o" +[ + 0xa9bf53f3; (* arm_STP X19 X20 SP (Preimmediate_Offset (iword (-- &16))) *) + 0xa9bf5bf5; (* arm_STP X21 X22 SP (Preimmediate_Offset (iword (-- &16))) *) + 0xa9bf63f7; (* arm_STP X23 X24 SP (Preimmediate_Offset (iword (-- &16))) *) + 0xa9bf6bf9; (* arm_STP X25 X26 SP (Preimmediate_Offset (iword (-- &16))) *) + 0xa9bf73fb; (* arm_STP X27 X28 SP (Preimmediate_Offset (iword (-- &16))) *) + 0xd10803ff; (* arm_SUB SP SP (rvalue (word 512)) *) + 0xaa0003fa; (* arm_MOV X26 X0 *) + 0xaa0103fb; (* arm_MOV X27 X1 *) + 0xa9490f62; (* arm_LDP X2 X3 X27 (Immediate_Offset (iword (&144))) *) + 0x9b037c4b; (* arm_MUL X11 X2 X3 *) + 0x9bc37c4c; (* arm_UMULH X12 X2 X3 *) + 0xa94a1764; (* arm_LDP X4 X5 X27 (Immediate_Offset (iword (&160))) *) + 0x9b047c4a; (* arm_MUL X10 X2 X4 *) + 0x9bc47c4d; (* arm_UMULH X13 X2 X4 *) + 0xab0a018c; (* arm_ADDS X12 X12 X10 *) + 0xa94b1f66; (* arm_LDP X6 X7 X27 (Immediate_Offset (iword (&176))) *) + 0x9b057c4a; (* arm_MUL X10 X2 X5 *) + 0x9bc57c4e; (* arm_UMULH X14 X2 X5 *) + 0xba0a01ad; (* arm_ADCS X13 X13 X10 *) + 0xa94c2768; (* arm_LDP X8 X9 X27 (Immediate_Offset (iword (&192))) *) + 0x9b067c4a; (* arm_MUL X10 X2 X6 *) + 0x9bc67c4f; (* arm_UMULH X15 X2 X6 *) + 0xba0a01ce; (* arm_ADCS X14 X14 X10 *) + 0x9b077c4a; (* arm_MUL X10 X2 X7 *) + 0x9bc77c50; (* arm_UMULH X16 X2 X7 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x9b087c4a; (* arm_MUL X10 X2 X8 *) + 0x9bc87c51; (* arm_UMULH X17 X2 X8 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9b097c4a; (* arm_MUL X10 X2 X9 *) + 0x9bc97c53; (* arm_UMULH X19 X2 X9 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0x9b047c6a; (* arm_MUL X10 X3 X4 *) + 0xab0a01ad; (* arm_ADDS X13 X13 X10 *) + 0x9b057c6a; (* arm_MUL X10 X3 X5 *) + 0xba0a01ce; (* arm_ADCS X14 X14 X10 *) + 0x9b067c6a; (* arm_MUL X10 X3 X6 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x9b077c6a; (* arm_MUL X10 X3 X7 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9b087c6a; (* arm_MUL X10 X3 X8 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9b097c6a; (* arm_MUL X10 X3 X9 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc47c6a; (* arm_UMULH X10 X3 X4 *) + 0xab0a01ce; (* arm_ADDS X14 X14 X10 *) + 0x9bc57c6a; (* arm_UMULH X10 X3 X5 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x9bc67c6a; (* arm_UMULH X10 X3 X6 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9bc77c6a; (* arm_UMULH X10 X3 X7 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9bc87c6a; (* arm_UMULH X10 X3 X8 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9bc97c6a; (* arm_UMULH X10 X3 X9 *) + 0x9a0a0294; (* arm_ADC X20 X20 X10 *) + 0x9b077cca; (* arm_MUL X10 X6 X7 *) + 0x9bc77cd5; (* arm_UMULH X21 X6 X7 *) + 0xab0a0294; (* arm_ADDS X20 X20 X10 *) + 0x9a1f02b5; (* arm_ADC X21 X21 XZR *) + 0x9b057c8a; (* arm_MUL X10 X4 X5 *) + 0xab0a01ef; (* arm_ADDS X15 X15 X10 *) + 0x9b067c8a; (* arm_MUL X10 X4 X6 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9b077c8a; (* arm_MUL X10 X4 X7 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9b087c8a; (* arm_MUL X10 X4 X8 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9b097c8a; (* arm_MUL X10 X4 X9 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9b087cca; (* arm_MUL X10 X6 X8 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9a9f37f6; (* arm_CSET X22 Condition_CS *) + 0x9bc57c8a; (* arm_UMULH X10 X4 X5 *) + 0xab0a0210; (* arm_ADDS X16 X16 X10 *) + 0x9bc67c8a; (* arm_UMULH X10 X4 X6 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9bc77c8a; (* arm_UMULH X10 X4 X7 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9bc87c8a; (* arm_UMULH X10 X4 X8 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9bc97c8a; (* arm_UMULH X10 X4 X9 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9bc87cca; (* arm_UMULH X10 X6 X8 *) + 0x9a0a02d6; (* arm_ADC X22 X22 X10 *) + 0x9b087cea; (* arm_MUL X10 X7 X8 *) + 0x9bc87cf7; (* arm_UMULH X23 X7 X8 *) + 0xab0a02d6; (* arm_ADDS X22 X22 X10 *) + 0x9a1f02f7; (* arm_ADC X23 X23 XZR *) + 0x9b067caa; (* arm_MUL X10 X5 X6 *) + 0xab0a0231; (* arm_ADDS X17 X17 X10 *) + 0x9b077caa; (* arm_MUL X10 X5 X7 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9b087caa; (* arm_MUL X10 X5 X8 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9b097caa; (* arm_MUL X10 X5 X9 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9b097cca; (* arm_MUL X10 X6 X9 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9b097cea; (* arm_MUL X10 X7 X9 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9a9f37f8; (* arm_CSET X24 Condition_CS *) + 0x9bc67caa; (* arm_UMULH X10 X5 X6 *) + 0xab0a0273; (* arm_ADDS X19 X19 X10 *) + 0x9bc77caa; (* arm_UMULH X10 X5 X7 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9bc87caa; (* arm_UMULH X10 X5 X8 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9bc97caa; (* arm_UMULH X10 X5 X9 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9bc97cca; (* arm_UMULH X10 X6 X9 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9bc97cea; (* arm_UMULH X10 X7 X9 *) + 0x9a0a0318; (* arm_ADC X24 X24 X10 *) + 0x9b097d0a; (* arm_MUL X10 X8 X9 *) + 0x9bc97d19; (* arm_UMULH X25 X8 X9 *) + 0xab0a0318; (* arm_ADDS X24 X24 X10 *) + 0x9a1f0339; (* arm_ADC X25 X25 XZR *) + 0xab0b016b; (* arm_ADDS X11 X11 X11 *) + 0xba0c018c; (* arm_ADCS X12 X12 X12 *) + 0xba0d01ad; (* arm_ADCS X13 X13 X13 *) + 0xba0e01ce; (* arm_ADCS X14 X14 X14 *) + 0xba0f01ef; (* arm_ADCS X15 X15 X15 *) + 0xba100210; (* arm_ADCS X16 X16 X16 *) + 0xba110231; (* arm_ADCS X17 X17 X17 *) + 0xba130273; (* arm_ADCS X19 X19 X19 *) + 0xba140294; (* arm_ADCS X20 X20 X20 *) + 0xba1502b5; (* arm_ADCS X21 X21 X21 *) + 0xba1602d6; (* arm_ADCS X22 X22 X22 *) + 0xba1702f7; (* arm_ADCS X23 X23 X23 *) + 0xba180318; (* arm_ADCS X24 X24 X24 *) + 0xba190339; (* arm_ADCS X25 X25 X25 *) + 0x9a9f37e0; (* arm_CSET X0 Condition_CS *) + 0x9bc27c4a; (* arm_UMULH X10 X2 X2 *) + 0xab0a016b; (* arm_ADDS X11 X11 X10 *) + 0x9b037c6a; (* arm_MUL X10 X3 X3 *) + 0xba0a018c; (* arm_ADCS X12 X12 X10 *) + 0x9bc37c6a; (* arm_UMULH X10 X3 X3 *) + 0xba0a01ad; (* arm_ADCS X13 X13 X10 *) + 0x9b047c8a; (* arm_MUL X10 X4 X4 *) + 0xba0a01ce; (* arm_ADCS X14 X14 X10 *) + 0x9bc47c8a; (* arm_UMULH X10 X4 X4 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x9b057caa; (* arm_MUL X10 X5 X5 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9bc57caa; (* arm_UMULH X10 X5 X5 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9b067cca; (* arm_MUL X10 X6 X6 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9bc67cca; (* arm_UMULH X10 X6 X6 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9b077cea; (* arm_MUL X10 X7 X7 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9bc77cea; (* arm_UMULH X10 X7 X7 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9b087d0a; (* arm_MUL X10 X8 X8 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9bc87d0a; (* arm_UMULH X10 X8 X8 *) + 0xba0a0318; (* arm_ADCS X24 X24 X10 *) + 0x9b097d2a; (* arm_MUL X10 X9 X9 *) + 0xba0a0339; (* arm_ADCS X25 X25 X10 *) + 0x9bc97d2a; (* arm_UMULH X10 X9 X9 *) + 0x9a0a0000; (* arm_ADC X0 X0 X10 *) + 0xf9406b61; (* arm_LDR X1 X27 (Immediate_Offset (word 208)) *) + 0x8b010021; (* arm_ADD X1 X1 X1 *) + 0x9b027c2a; (* arm_MUL X10 X1 X2 *) + 0xab0a0273; (* arm_ADDS X19 X19 X10 *) + 0x9bc27c2a; (* arm_UMULH X10 X1 X2 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9b047c2a; (* arm_MUL X10 X1 X4 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9bc47c2a; (* arm_UMULH X10 X1 X4 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9b067c2a; (* arm_MUL X10 X1 X6 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9bc67c2a; (* arm_UMULH X10 X1 X6 *) + 0xba0a0318; (* arm_ADCS X24 X24 X10 *) + 0x9b087c2a; (* arm_MUL X10 X1 X8 *) + 0xba0a0339; (* arm_ADCS X25 X25 X10 *) + 0x9bc87c2a; (* arm_UMULH X10 X1 X8 *) + 0xba0a0000; (* arm_ADCS X0 X0 X10 *) + 0xd341fc24; (* arm_LSR X4 X1 1 *) + 0x9b047c84; (* arm_MUL X4 X4 X4 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b037c2a; (* arm_MUL X10 X1 X3 *) + 0xab0a0294; (* arm_ADDS X20 X20 X10 *) + 0x9bc37c2a; (* arm_UMULH X10 X1 X3 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9b057c2a; (* arm_MUL X10 X1 X5 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9bc57c2a; (* arm_UMULH X10 X1 X5 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9b077c2a; (* arm_MUL X10 X1 X7 *) + 0xba0a0318; (* arm_ADCS X24 X24 X10 *) + 0x9bc77c2a; (* arm_UMULH X10 X1 X7 *) + 0xba0a0339; (* arm_ADCS X25 X25 X10 *) + 0x9b097c2a; (* arm_MUL X10 X1 X9 *) + 0xba0a0000; (* arm_ADCS X0 X0 X10 *) + 0x9bc97c2a; (* arm_UMULH X10 X1 X9 *) + 0x9a0a0084; (* arm_ADC X4 X4 X10 *) + 0x9b027c42; (* arm_MUL X2 X2 X2 *) + 0xeb1f03ff; (* arm_CMP XZR XZR *) + 0x93d3268a; (* arm_EXTR X10 X20 X19 9 *) + 0xba0a0042; (* arm_ADCS X2 X2 X10 *) + 0x93d426aa; (* arm_EXTR X10 X21 X20 9 *) + 0xba0a016b; (* arm_ADCS X11 X11 X10 *) + 0x93d526ca; (* arm_EXTR X10 X22 X21 9 *) + 0xba0a018c; (* arm_ADCS X12 X12 X10 *) + 0x93d626ea; (* arm_EXTR X10 X23 X22 9 *) + 0xba0a01ad; (* arm_ADCS X13 X13 X10 *) + 0x93d7270a; (* arm_EXTR X10 X24 X23 9 *) + 0xba0a01ce; (* arm_ADCS X14 X14 X10 *) + 0x93d8272a; (* arm_EXTR X10 X25 X24 9 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x93d9240a; (* arm_EXTR X10 X0 X25 9 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x93c0248a; (* arm_EXTR X10 X4 X0 9 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0xb277da73; (* arm_ORR X19 X19 (rvalue (word 18446744073709551104)) *) + 0xd349fc8a; (* arm_LSR X10 X4 9 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0xfa1f0042; (* arm_SBCS X2 X2 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xda1f0273; (* arm_SBC X19 X19 XZR *) + 0x92402273; (* arm_AND X19 X19 (rvalue (word 511)) *) + 0xa9002fe2; (* arm_STP X2 X11 SP (Immediate_Offset (iword (&0))) *) + 0xa90137ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&16))) *) + 0xa9023fee; (* arm_STP X14 X15 SP (Immediate_Offset (iword (&32))) *) + 0xa90347f0; (* arm_STP X16 X17 SP (Immediate_Offset (iword (&48))) *) + 0xf90023f3; (* arm_STR X19 SP (Immediate_Offset (word 64)) *) + 0xa9448f62; (* arm_LDP X2 X3 X27 (Immediate_Offset (iword (&72))) *) + 0x9b037c4b; (* arm_MUL X11 X2 X3 *) + 0x9bc37c4c; (* arm_UMULH X12 X2 X3 *) + 0xa9459764; (* arm_LDP X4 X5 X27 (Immediate_Offset (iword (&88))) *) + 0x9b047c4a; (* arm_MUL X10 X2 X4 *) + 0x9bc47c4d; (* arm_UMULH X13 X2 X4 *) + 0xab0a018c; (* arm_ADDS X12 X12 X10 *) + 0xa9469f66; (* arm_LDP X6 X7 X27 (Immediate_Offset (iword (&104))) *) + 0x9b057c4a; (* arm_MUL X10 X2 X5 *) + 0x9bc57c4e; (* arm_UMULH X14 X2 X5 *) + 0xba0a01ad; (* arm_ADCS X13 X13 X10 *) + 0xa947a768; (* arm_LDP X8 X9 X27 (Immediate_Offset (iword (&120))) *) + 0x9b067c4a; (* arm_MUL X10 X2 X6 *) + 0x9bc67c4f; (* arm_UMULH X15 X2 X6 *) + 0xba0a01ce; (* arm_ADCS X14 X14 X10 *) + 0x9b077c4a; (* arm_MUL X10 X2 X7 *) + 0x9bc77c50; (* arm_UMULH X16 X2 X7 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x9b087c4a; (* arm_MUL X10 X2 X8 *) + 0x9bc87c51; (* arm_UMULH X17 X2 X8 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9b097c4a; (* arm_MUL X10 X2 X9 *) + 0x9bc97c53; (* arm_UMULH X19 X2 X9 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0x9b047c6a; (* arm_MUL X10 X3 X4 *) + 0xab0a01ad; (* arm_ADDS X13 X13 X10 *) + 0x9b057c6a; (* arm_MUL X10 X3 X5 *) + 0xba0a01ce; (* arm_ADCS X14 X14 X10 *) + 0x9b067c6a; (* arm_MUL X10 X3 X6 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x9b077c6a; (* arm_MUL X10 X3 X7 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9b087c6a; (* arm_MUL X10 X3 X8 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9b097c6a; (* arm_MUL X10 X3 X9 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc47c6a; (* arm_UMULH X10 X3 X4 *) + 0xab0a01ce; (* arm_ADDS X14 X14 X10 *) + 0x9bc57c6a; (* arm_UMULH X10 X3 X5 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x9bc67c6a; (* arm_UMULH X10 X3 X6 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9bc77c6a; (* arm_UMULH X10 X3 X7 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9bc87c6a; (* arm_UMULH X10 X3 X8 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9bc97c6a; (* arm_UMULH X10 X3 X9 *) + 0x9a0a0294; (* arm_ADC X20 X20 X10 *) + 0x9b077cca; (* arm_MUL X10 X6 X7 *) + 0x9bc77cd5; (* arm_UMULH X21 X6 X7 *) + 0xab0a0294; (* arm_ADDS X20 X20 X10 *) + 0x9a1f02b5; (* arm_ADC X21 X21 XZR *) + 0x9b057c8a; (* arm_MUL X10 X4 X5 *) + 0xab0a01ef; (* arm_ADDS X15 X15 X10 *) + 0x9b067c8a; (* arm_MUL X10 X4 X6 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9b077c8a; (* arm_MUL X10 X4 X7 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9b087c8a; (* arm_MUL X10 X4 X8 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9b097c8a; (* arm_MUL X10 X4 X9 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9b087cca; (* arm_MUL X10 X6 X8 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9a9f37f6; (* arm_CSET X22 Condition_CS *) + 0x9bc57c8a; (* arm_UMULH X10 X4 X5 *) + 0xab0a0210; (* arm_ADDS X16 X16 X10 *) + 0x9bc67c8a; (* arm_UMULH X10 X4 X6 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9bc77c8a; (* arm_UMULH X10 X4 X7 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9bc87c8a; (* arm_UMULH X10 X4 X8 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9bc97c8a; (* arm_UMULH X10 X4 X9 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9bc87cca; (* arm_UMULH X10 X6 X8 *) + 0x9a0a02d6; (* arm_ADC X22 X22 X10 *) + 0x9b087cea; (* arm_MUL X10 X7 X8 *) + 0x9bc87cf7; (* arm_UMULH X23 X7 X8 *) + 0xab0a02d6; (* arm_ADDS X22 X22 X10 *) + 0x9a1f02f7; (* arm_ADC X23 X23 XZR *) + 0x9b067caa; (* arm_MUL X10 X5 X6 *) + 0xab0a0231; (* arm_ADDS X17 X17 X10 *) + 0x9b077caa; (* arm_MUL X10 X5 X7 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9b087caa; (* arm_MUL X10 X5 X8 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9b097caa; (* arm_MUL X10 X5 X9 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9b097cca; (* arm_MUL X10 X6 X9 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9b097cea; (* arm_MUL X10 X7 X9 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9a9f37f8; (* arm_CSET X24 Condition_CS *) + 0x9bc67caa; (* arm_UMULH X10 X5 X6 *) + 0xab0a0273; (* arm_ADDS X19 X19 X10 *) + 0x9bc77caa; (* arm_UMULH X10 X5 X7 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9bc87caa; (* arm_UMULH X10 X5 X8 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9bc97caa; (* arm_UMULH X10 X5 X9 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9bc97cca; (* arm_UMULH X10 X6 X9 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9bc97cea; (* arm_UMULH X10 X7 X9 *) + 0x9a0a0318; (* arm_ADC X24 X24 X10 *) + 0x9b097d0a; (* arm_MUL X10 X8 X9 *) + 0x9bc97d19; (* arm_UMULH X25 X8 X9 *) + 0xab0a0318; (* arm_ADDS X24 X24 X10 *) + 0x9a1f0339; (* arm_ADC X25 X25 XZR *) + 0xab0b016b; (* arm_ADDS X11 X11 X11 *) + 0xba0c018c; (* arm_ADCS X12 X12 X12 *) + 0xba0d01ad; (* arm_ADCS X13 X13 X13 *) + 0xba0e01ce; (* arm_ADCS X14 X14 X14 *) + 0xba0f01ef; (* arm_ADCS X15 X15 X15 *) + 0xba100210; (* arm_ADCS X16 X16 X16 *) + 0xba110231; (* arm_ADCS X17 X17 X17 *) + 0xba130273; (* arm_ADCS X19 X19 X19 *) + 0xba140294; (* arm_ADCS X20 X20 X20 *) + 0xba1502b5; (* arm_ADCS X21 X21 X21 *) + 0xba1602d6; (* arm_ADCS X22 X22 X22 *) + 0xba1702f7; (* arm_ADCS X23 X23 X23 *) + 0xba180318; (* arm_ADCS X24 X24 X24 *) + 0xba190339; (* arm_ADCS X25 X25 X25 *) + 0x9a9f37e0; (* arm_CSET X0 Condition_CS *) + 0x9bc27c4a; (* arm_UMULH X10 X2 X2 *) + 0xab0a016b; (* arm_ADDS X11 X11 X10 *) + 0x9b037c6a; (* arm_MUL X10 X3 X3 *) + 0xba0a018c; (* arm_ADCS X12 X12 X10 *) + 0x9bc37c6a; (* arm_UMULH X10 X3 X3 *) + 0xba0a01ad; (* arm_ADCS X13 X13 X10 *) + 0x9b047c8a; (* arm_MUL X10 X4 X4 *) + 0xba0a01ce; (* arm_ADCS X14 X14 X10 *) + 0x9bc47c8a; (* arm_UMULH X10 X4 X4 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x9b057caa; (* arm_MUL X10 X5 X5 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9bc57caa; (* arm_UMULH X10 X5 X5 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9b067cca; (* arm_MUL X10 X6 X6 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9bc67cca; (* arm_UMULH X10 X6 X6 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9b077cea; (* arm_MUL X10 X7 X7 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9bc77cea; (* arm_UMULH X10 X7 X7 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9b087d0a; (* arm_MUL X10 X8 X8 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9bc87d0a; (* arm_UMULH X10 X8 X8 *) + 0xba0a0318; (* arm_ADCS X24 X24 X10 *) + 0x9b097d2a; (* arm_MUL X10 X9 X9 *) + 0xba0a0339; (* arm_ADCS X25 X25 X10 *) + 0x9bc97d2a; (* arm_UMULH X10 X9 X9 *) + 0x9a0a0000; (* arm_ADC X0 X0 X10 *) + 0xf9404761; (* arm_LDR X1 X27 (Immediate_Offset (word 136)) *) + 0x8b010021; (* arm_ADD X1 X1 X1 *) + 0x9b027c2a; (* arm_MUL X10 X1 X2 *) + 0xab0a0273; (* arm_ADDS X19 X19 X10 *) + 0x9bc27c2a; (* arm_UMULH X10 X1 X2 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9b047c2a; (* arm_MUL X10 X1 X4 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9bc47c2a; (* arm_UMULH X10 X1 X4 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9b067c2a; (* arm_MUL X10 X1 X6 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9bc67c2a; (* arm_UMULH X10 X1 X6 *) + 0xba0a0318; (* arm_ADCS X24 X24 X10 *) + 0x9b087c2a; (* arm_MUL X10 X1 X8 *) + 0xba0a0339; (* arm_ADCS X25 X25 X10 *) + 0x9bc87c2a; (* arm_UMULH X10 X1 X8 *) + 0xba0a0000; (* arm_ADCS X0 X0 X10 *) + 0xd341fc24; (* arm_LSR X4 X1 1 *) + 0x9b047c84; (* arm_MUL X4 X4 X4 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b037c2a; (* arm_MUL X10 X1 X3 *) + 0xab0a0294; (* arm_ADDS X20 X20 X10 *) + 0x9bc37c2a; (* arm_UMULH X10 X1 X3 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9b057c2a; (* arm_MUL X10 X1 X5 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9bc57c2a; (* arm_UMULH X10 X1 X5 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9b077c2a; (* arm_MUL X10 X1 X7 *) + 0xba0a0318; (* arm_ADCS X24 X24 X10 *) + 0x9bc77c2a; (* arm_UMULH X10 X1 X7 *) + 0xba0a0339; (* arm_ADCS X25 X25 X10 *) + 0x9b097c2a; (* arm_MUL X10 X1 X9 *) + 0xba0a0000; (* arm_ADCS X0 X0 X10 *) + 0x9bc97c2a; (* arm_UMULH X10 X1 X9 *) + 0x9a0a0084; (* arm_ADC X4 X4 X10 *) + 0x9b027c42; (* arm_MUL X2 X2 X2 *) + 0xeb1f03ff; (* arm_CMP XZR XZR *) + 0x93d3268a; (* arm_EXTR X10 X20 X19 9 *) + 0xba0a0042; (* arm_ADCS X2 X2 X10 *) + 0x93d426aa; (* arm_EXTR X10 X21 X20 9 *) + 0xba0a016b; (* arm_ADCS X11 X11 X10 *) + 0x93d526ca; (* arm_EXTR X10 X22 X21 9 *) + 0xba0a018c; (* arm_ADCS X12 X12 X10 *) + 0x93d626ea; (* arm_EXTR X10 X23 X22 9 *) + 0xba0a01ad; (* arm_ADCS X13 X13 X10 *) + 0x93d7270a; (* arm_EXTR X10 X24 X23 9 *) + 0xba0a01ce; (* arm_ADCS X14 X14 X10 *) + 0x93d8272a; (* arm_EXTR X10 X25 X24 9 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x93d9240a; (* arm_EXTR X10 X0 X25 9 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x93c0248a; (* arm_EXTR X10 X4 X0 9 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0xb277da73; (* arm_ORR X19 X19 (rvalue (word 18446744073709551104)) *) + 0xd349fc8a; (* arm_LSR X10 X4 9 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0xfa1f0042; (* arm_SBCS X2 X2 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xda1f0273; (* arm_SBC X19 X19 XZR *) + 0x92402273; (* arm_AND X19 X19 (rvalue (word 511)) *) + 0xa904afe2; (* arm_STP X2 X11 SP (Immediate_Offset (iword (&72))) *) + 0xa905b7ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&88))) *) + 0xa906bfee; (* arm_STP X14 X15 SP (Immediate_Offset (iword (&104))) *) + 0xa907c7f0; (* arm_STP X16 X17 SP (Immediate_Offset (iword (&120))) *) + 0xf90047f3; (* arm_STR X19 SP (Immediate_Offset (word 136)) *) + 0xeb1f03ff; (* arm_CMP XZR XZR *) + 0xa9401b65; (* arm_LDP X5 X6 X27 (Immediate_Offset (iword (&0))) *) + 0xa9400fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&0))) *) + 0xba0400a5; (* arm_ADCS X5 X5 X4 *) + 0xba0300c6; (* arm_ADCS X6 X6 X3 *) + 0xa9412367; (* arm_LDP X7 X8 X27 (Immediate_Offset (iword (&16))) *) + 0xa9410fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&16))) *) + 0xba0400e7; (* arm_ADCS X7 X7 X4 *) + 0xba030108; (* arm_ADCS X8 X8 X3 *) + 0xa9422b69; (* arm_LDP X9 X10 X27 (Immediate_Offset (iword (&32))) *) + 0xa9420fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&32))) *) + 0xba040129; (* arm_ADCS X9 X9 X4 *) + 0xba03014a; (* arm_ADCS X10 X10 X3 *) + 0xa943336b; (* arm_LDP X11 X12 X27 (Immediate_Offset (iword (&48))) *) + 0xa9430fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&48))) *) + 0xba04016b; (* arm_ADCS X11 X11 X4 *) + 0xba03018c; (* arm_ADCS X12 X12 X3 *) + 0xf940236d; (* arm_LDR X13 X27 (Immediate_Offset (word 64)) *) + 0xf94023e4; (* arm_LDR X4 SP (Immediate_Offset (word 64)) *) + 0x9a0401ad; (* arm_ADC X13 X13 X4 *) + 0xf10801a4; (* arm_SUBS X4 X13 (rvalue (word 512)) *) + 0xda9f33e4; (* arm_CSETM X4 Condition_CS *) + 0xfa1f00a5; (* arm_SBCS X5 X5 XZR *) + 0x92770084; (* arm_AND X4 X4 (rvalue (word 512)) *) + 0xfa1f00c6; (* arm_SBCS X6 X6 XZR *) + 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) + 0xfa1f0108; (* arm_SBCS X8 X8 XZR *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda0401ad; (* arm_SBC X13 X13 X4 *) + 0xa9169be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&360))) *) + 0xa917a3e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&376))) *) + 0xa918abe9; (* arm_STP X9 X10 SP (Immediate_Offset (iword (&392))) *) + 0xa919b3eb; (* arm_STP X11 X12 SP (Immediate_Offset (iword (&408))) *) + 0xf900d7ed; (* arm_STR X13 SP (Immediate_Offset (word 424)) *) + 0xa9401b65; (* arm_LDP X5 X6 X27 (Immediate_Offset (iword (&0))) *) + 0xa9400fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&0))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa9412367; (* arm_LDP X7 X8 X27 (Immediate_Offset (iword (&16))) *) + 0xa9410fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&16))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xa9422b69; (* arm_LDP X9 X10 X27 (Immediate_Offset (iword (&32))) *) + 0xa9420fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&32))) *) + 0xfa040129; (* arm_SBCS X9 X9 X4 *) + 0xfa03014a; (* arm_SBCS X10 X10 X3 *) + 0xa943336b; (* arm_LDP X11 X12 X27 (Immediate_Offset (iword (&48))) *) + 0xa9430fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&48))) *) + 0xfa04016b; (* arm_SBCS X11 X11 X4 *) + 0xfa03018c; (* arm_SBCS X12 X12 X3 *) + 0xf940236d; (* arm_LDR X13 X27 (Immediate_Offset (word 64)) *) + 0xf94023e4; (* arm_LDR X4 SP (Immediate_Offset (word 64)) *) + 0xfa0401ad; (* arm_SBCS X13 X13 X4 *) + 0xfa1f00a5; (* arm_SBCS X5 X5 XZR *) + 0xfa1f00c6; (* arm_SBCS X6 X6 XZR *) + 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) + 0xfa1f0108; (* arm_SBCS X8 X8 XZR *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0x924021ad; (* arm_AND X13 X13 (rvalue (word 511)) *) + 0xa9121be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&288))) *) + 0xa91323e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&304))) *) + 0xa9142be9; (* arm_STP X9 X10 SP (Immediate_Offset (iword (&320))) *) + 0xa91533eb; (* arm_STP X11 X12 SP (Immediate_Offset (iword (&336))) *) + 0xf900b3ed; (* arm_STR X13 SP (Immediate_Offset (word 352)) *) + 0xa95693e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&360))) *) + 0xa9521be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&288))) *) + 0x9b057c6f; (* arm_MUL X15 X3 X5 *) + 0x9bc57c70; (* arm_UMULH X16 X3 X5 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0x9bc67c71; (* arm_UMULH X17 X3 X6 *) + 0xab0e0210; (* arm_ADDS X16 X16 X14 *) + 0xa95323e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&304))) *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0x9bc77c73; (* arm_UMULH X19 X3 X7 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0x9bc87c74; (* arm_UMULH X20 X3 X8 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0xa9542be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&320))) *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0x9bc97c75; (* arm_UMULH X21 X3 X9 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0x9bca7c76; (* arm_UMULH X22 X3 X10 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0xa95533eb; (* arm_LDP X11 X12 SP (Immediate_Offset (iword (&336))) *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0x9bcb7c77; (* arm_UMULH X23 X3 X11 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0xf940b3ed; (* arm_LDR X13 SP (Immediate_Offset (word 352)) *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0x9bcc7c78; (* arm_UMULH X24 X3 X12 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0x9bcd7c61; (* arm_UMULH X1 X3 X13 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e0210; (* arm_ADDS X16 X16 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9a9f37e0; (* arm_CSET X0 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0231; (* arm_ADDS X17 X17 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0000; (* arm_ADC X0 X0 X14 *) + 0xa90943ef; (* arm_STP X15 X16 SP (Immediate_Offset (iword (&144))) *) + 0xa95793e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&376))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0231; (* arm_ADDS X17 X17 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9a9f37ef; (* arm_CSET X15 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e0273; (* arm_ADDS X19 X19 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e01ef; (* arm_ADC X15 X15 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e0273; (* arm_ADDS X19 X19 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9a9f37f0; (* arm_CSET X16 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0294; (* arm_ADDS X20 X20 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0210; (* arm_ADC X16 X16 X14 *) + 0xa90a4ff1; (* arm_STP X17 X19 SP (Immediate_Offset (iword (&160))) *) + 0xa95893e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&392))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0294; (* arm_ADDS X20 X20 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9a9f37f1; (* arm_CSET X17 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e02b5; (* arm_ADDS X21 X21 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e0231; (* arm_ADC X17 X17 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e02b5; (* arm_ADDS X21 X21 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9a9f37f3; (* arm_CSET X19 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e02d6; (* arm_ADDS X22 X22 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0273; (* arm_ADC X19 X19 X14 *) + 0xa90b57f4; (* arm_STP X20 X21 SP (Immediate_Offset (iword (&176))) *) + 0xa95993e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&408))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e02d6; (* arm_ADDS X22 X22 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e02f7; (* arm_ADDS X23 X23 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e0294; (* arm_ADC X20 X20 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e02f7; (* arm_ADDS X23 X23 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9a9f37f5; (* arm_CSET X21 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0318; (* arm_ADDS X24 X24 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0xa90c5ff6; (* arm_STP X22 X23 SP (Immediate_Offset (iword (&192))) *) + 0xf940d7e3; (* arm_LDR X3 SP (Immediate_Offset (word 424)) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0318; (* arm_ADDS X24 X24 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e0021; (* arm_ADDS X1 X1 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0xeb1f03ff; (* arm_CMP XZR XZR *) + 0xa9491be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&144))) *) + 0x93d8242e; (* arm_EXTR X14 X1 X24 9 *) + 0xba0e00a5; (* arm_ADCS X5 X5 X14 *) + 0x93c1240e; (* arm_EXTR X14 X0 X1 9 *) + 0xba0e00c6; (* arm_ADCS X6 X6 X14 *) + 0xa94a23e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&160))) *) + 0x93c025ee; (* arm_EXTR X14 X15 X0 9 *) + 0xba0e00e7; (* arm_ADCS X7 X7 X14 *) + 0x93cf260e; (* arm_EXTR X14 X16 X15 9 *) + 0xba0e0108; (* arm_ADCS X8 X8 X14 *) + 0xa94b2be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&176))) *) + 0x93d0262e; (* arm_EXTR X14 X17 X16 9 *) + 0xba0e0129; (* arm_ADCS X9 X9 X14 *) + 0x93d1266e; (* arm_EXTR X14 X19 X17 9 *) + 0xba0e014a; (* arm_ADCS X10 X10 X14 *) + 0xa94c33eb; (* arm_LDP X11 X12 SP (Immediate_Offset (iword (&192))) *) + 0x93d3268e; (* arm_EXTR X14 X20 X19 9 *) + 0xba0e016b; (* arm_ADCS X11 X11 X14 *) + 0x93d426ae; (* arm_EXTR X14 X21 X20 9 *) + 0xba0e018c; (* arm_ADCS X12 X12 X14 *) + 0xb277db0d; (* arm_ORR X13 X24 (rvalue (word 18446744073709551104)) *) + 0xd349feae; (* arm_LSR X14 X21 9 *) + 0xba0e01ad; (* arm_ADCS X13 X13 X14 *) + 0xfa1f00a5; (* arm_SBCS X5 X5 XZR *) + 0xfa1f00c6; (* arm_SBCS X6 X6 XZR *) + 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) + 0xfa1f0108; (* arm_SBCS X8 X8 XZR *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda1f01ad; (* arm_SBC X13 X13 XZR *) + 0x924021ad; (* arm_AND X13 X13 (rvalue (word 511)) *) + 0xa9091be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&144))) *) + 0xa90a23e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&160))) *) + 0xa90b2be9; (* arm_STP X9 X10 SP (Immediate_Offset (iword (&176))) *) + 0xa90c33eb; (* arm_STP X11 X12 SP (Immediate_Offset (iword (&192))) *) + 0xf9006bed; (* arm_STR X13 SP (Immediate_Offset (word 208)) *) + 0xeb1f03ff; (* arm_CMP XZR XZR *) + 0xa9449b65; (* arm_LDP X5 X6 X27 (Immediate_Offset (iword (&72))) *) + 0xa9490f64; (* arm_LDP X4 X3 X27 (Immediate_Offset (iword (&144))) *) + 0xba0400a5; (* arm_ADCS X5 X5 X4 *) + 0xba0300c6; (* arm_ADCS X6 X6 X3 *) + 0xa945a367; (* arm_LDP X7 X8 X27 (Immediate_Offset (iword (&88))) *) + 0xa94a0f64; (* arm_LDP X4 X3 X27 (Immediate_Offset (iword (&160))) *) + 0xba0400e7; (* arm_ADCS X7 X7 X4 *) + 0xba030108; (* arm_ADCS X8 X8 X3 *) + 0xa946ab69; (* arm_LDP X9 X10 X27 (Immediate_Offset (iword (&104))) *) + 0xa94b0f64; (* arm_LDP X4 X3 X27 (Immediate_Offset (iword (&176))) *) + 0xba040129; (* arm_ADCS X9 X9 X4 *) + 0xba03014a; (* arm_ADCS X10 X10 X3 *) + 0xa947b36b; (* arm_LDP X11 X12 X27 (Immediate_Offset (iword (&120))) *) + 0xa94c0f64; (* arm_LDP X4 X3 X27 (Immediate_Offset (iword (&192))) *) + 0xba04016b; (* arm_ADCS X11 X11 X4 *) + 0xba03018c; (* arm_ADCS X12 X12 X3 *) + 0xf940476d; (* arm_LDR X13 X27 (Immediate_Offset (word 136)) *) + 0xf9406b64; (* arm_LDR X4 X27 (Immediate_Offset (word 208)) *) + 0x9a0401ad; (* arm_ADC X13 X13 X4 *) + 0xf10801a4; (* arm_SUBS X4 X13 (rvalue (word 512)) *) + 0xda9f33e4; (* arm_CSETM X4 Condition_CS *) + 0xfa1f00a5; (* arm_SBCS X5 X5 XZR *) + 0x92770084; (* arm_AND X4 X4 (rvalue (word 512)) *) + 0xfa1f00c6; (* arm_SBCS X6 X6 XZR *) + 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) + 0xfa1f0108; (* arm_SBCS X8 X8 XZR *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda0401ad; (* arm_SBC X13 X13 X4 *) + 0xa9169be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&360))) *) + 0xa917a3e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&376))) *) + 0xa918abe9; (* arm_STP X9 X10 SP (Immediate_Offset (iword (&392))) *) + 0xa919b3eb; (* arm_STP X11 X12 SP (Immediate_Offset (iword (&408))) *) + 0xf900d7ed; (* arm_STR X13 SP (Immediate_Offset (word 424)) *) + 0xa9490fe2; (* arm_LDP X2 X3 SP (Immediate_Offset (iword (&144))) *) + 0x9b037c4b; (* arm_MUL X11 X2 X3 *) + 0x9bc37c4c; (* arm_UMULH X12 X2 X3 *) + 0xa94a17e4; (* arm_LDP X4 X5 SP (Immediate_Offset (iword (&160))) *) + 0x9b047c4a; (* arm_MUL X10 X2 X4 *) + 0x9bc47c4d; (* arm_UMULH X13 X2 X4 *) + 0xab0a018c; (* arm_ADDS X12 X12 X10 *) + 0xa94b1fe6; (* arm_LDP X6 X7 SP (Immediate_Offset (iword (&176))) *) + 0x9b057c4a; (* arm_MUL X10 X2 X5 *) + 0x9bc57c4e; (* arm_UMULH X14 X2 X5 *) + 0xba0a01ad; (* arm_ADCS X13 X13 X10 *) + 0xa94c27e8; (* arm_LDP X8 X9 SP (Immediate_Offset (iword (&192))) *) + 0x9b067c4a; (* arm_MUL X10 X2 X6 *) + 0x9bc67c4f; (* arm_UMULH X15 X2 X6 *) + 0xba0a01ce; (* arm_ADCS X14 X14 X10 *) + 0x9b077c4a; (* arm_MUL X10 X2 X7 *) + 0x9bc77c50; (* arm_UMULH X16 X2 X7 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x9b087c4a; (* arm_MUL X10 X2 X8 *) + 0x9bc87c51; (* arm_UMULH X17 X2 X8 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9b097c4a; (* arm_MUL X10 X2 X9 *) + 0x9bc97c53; (* arm_UMULH X19 X2 X9 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0x9b047c6a; (* arm_MUL X10 X3 X4 *) + 0xab0a01ad; (* arm_ADDS X13 X13 X10 *) + 0x9b057c6a; (* arm_MUL X10 X3 X5 *) + 0xba0a01ce; (* arm_ADCS X14 X14 X10 *) + 0x9b067c6a; (* arm_MUL X10 X3 X6 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x9b077c6a; (* arm_MUL X10 X3 X7 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9b087c6a; (* arm_MUL X10 X3 X8 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9b097c6a; (* arm_MUL X10 X3 X9 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc47c6a; (* arm_UMULH X10 X3 X4 *) + 0xab0a01ce; (* arm_ADDS X14 X14 X10 *) + 0x9bc57c6a; (* arm_UMULH X10 X3 X5 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x9bc67c6a; (* arm_UMULH X10 X3 X6 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9bc77c6a; (* arm_UMULH X10 X3 X7 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9bc87c6a; (* arm_UMULH X10 X3 X8 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9bc97c6a; (* arm_UMULH X10 X3 X9 *) + 0x9a0a0294; (* arm_ADC X20 X20 X10 *) + 0x9b077cca; (* arm_MUL X10 X6 X7 *) + 0x9bc77cd5; (* arm_UMULH X21 X6 X7 *) + 0xab0a0294; (* arm_ADDS X20 X20 X10 *) + 0x9a1f02b5; (* arm_ADC X21 X21 XZR *) + 0x9b057c8a; (* arm_MUL X10 X4 X5 *) + 0xab0a01ef; (* arm_ADDS X15 X15 X10 *) + 0x9b067c8a; (* arm_MUL X10 X4 X6 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9b077c8a; (* arm_MUL X10 X4 X7 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9b087c8a; (* arm_MUL X10 X4 X8 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9b097c8a; (* arm_MUL X10 X4 X9 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9b087cca; (* arm_MUL X10 X6 X8 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9a9f37f6; (* arm_CSET X22 Condition_CS *) + 0x9bc57c8a; (* arm_UMULH X10 X4 X5 *) + 0xab0a0210; (* arm_ADDS X16 X16 X10 *) + 0x9bc67c8a; (* arm_UMULH X10 X4 X6 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9bc77c8a; (* arm_UMULH X10 X4 X7 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9bc87c8a; (* arm_UMULH X10 X4 X8 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9bc97c8a; (* arm_UMULH X10 X4 X9 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9bc87cca; (* arm_UMULH X10 X6 X8 *) + 0x9a0a02d6; (* arm_ADC X22 X22 X10 *) + 0x9b087cea; (* arm_MUL X10 X7 X8 *) + 0x9bc87cf7; (* arm_UMULH X23 X7 X8 *) + 0xab0a02d6; (* arm_ADDS X22 X22 X10 *) + 0x9a1f02f7; (* arm_ADC X23 X23 XZR *) + 0x9b067caa; (* arm_MUL X10 X5 X6 *) + 0xab0a0231; (* arm_ADDS X17 X17 X10 *) + 0x9b077caa; (* arm_MUL X10 X5 X7 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9b087caa; (* arm_MUL X10 X5 X8 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9b097caa; (* arm_MUL X10 X5 X9 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9b097cca; (* arm_MUL X10 X6 X9 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9b097cea; (* arm_MUL X10 X7 X9 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9a9f37f8; (* arm_CSET X24 Condition_CS *) + 0x9bc67caa; (* arm_UMULH X10 X5 X6 *) + 0xab0a0273; (* arm_ADDS X19 X19 X10 *) + 0x9bc77caa; (* arm_UMULH X10 X5 X7 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9bc87caa; (* arm_UMULH X10 X5 X8 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9bc97caa; (* arm_UMULH X10 X5 X9 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9bc97cca; (* arm_UMULH X10 X6 X9 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9bc97cea; (* arm_UMULH X10 X7 X9 *) + 0x9a0a0318; (* arm_ADC X24 X24 X10 *) + 0x9b097d0a; (* arm_MUL X10 X8 X9 *) + 0x9bc97d19; (* arm_UMULH X25 X8 X9 *) + 0xab0a0318; (* arm_ADDS X24 X24 X10 *) + 0x9a1f0339; (* arm_ADC X25 X25 XZR *) + 0xab0b016b; (* arm_ADDS X11 X11 X11 *) + 0xba0c018c; (* arm_ADCS X12 X12 X12 *) + 0xba0d01ad; (* arm_ADCS X13 X13 X13 *) + 0xba0e01ce; (* arm_ADCS X14 X14 X14 *) + 0xba0f01ef; (* arm_ADCS X15 X15 X15 *) + 0xba100210; (* arm_ADCS X16 X16 X16 *) + 0xba110231; (* arm_ADCS X17 X17 X17 *) + 0xba130273; (* arm_ADCS X19 X19 X19 *) + 0xba140294; (* arm_ADCS X20 X20 X20 *) + 0xba1502b5; (* arm_ADCS X21 X21 X21 *) + 0xba1602d6; (* arm_ADCS X22 X22 X22 *) + 0xba1702f7; (* arm_ADCS X23 X23 X23 *) + 0xba180318; (* arm_ADCS X24 X24 X24 *) + 0xba190339; (* arm_ADCS X25 X25 X25 *) + 0x9a9f37e0; (* arm_CSET X0 Condition_CS *) + 0x9bc27c4a; (* arm_UMULH X10 X2 X2 *) + 0xab0a016b; (* arm_ADDS X11 X11 X10 *) + 0x9b037c6a; (* arm_MUL X10 X3 X3 *) + 0xba0a018c; (* arm_ADCS X12 X12 X10 *) + 0x9bc37c6a; (* arm_UMULH X10 X3 X3 *) + 0xba0a01ad; (* arm_ADCS X13 X13 X10 *) + 0x9b047c8a; (* arm_MUL X10 X4 X4 *) + 0xba0a01ce; (* arm_ADCS X14 X14 X10 *) + 0x9bc47c8a; (* arm_UMULH X10 X4 X4 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x9b057caa; (* arm_MUL X10 X5 X5 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9bc57caa; (* arm_UMULH X10 X5 X5 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9b067cca; (* arm_MUL X10 X6 X6 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9bc67cca; (* arm_UMULH X10 X6 X6 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9b077cea; (* arm_MUL X10 X7 X7 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9bc77cea; (* arm_UMULH X10 X7 X7 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9b087d0a; (* arm_MUL X10 X8 X8 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9bc87d0a; (* arm_UMULH X10 X8 X8 *) + 0xba0a0318; (* arm_ADCS X24 X24 X10 *) + 0x9b097d2a; (* arm_MUL X10 X9 X9 *) + 0xba0a0339; (* arm_ADCS X25 X25 X10 *) + 0x9bc97d2a; (* arm_UMULH X10 X9 X9 *) + 0x9a0a0000; (* arm_ADC X0 X0 X10 *) + 0xf9406be1; (* arm_LDR X1 SP (Immediate_Offset (word 208)) *) + 0x8b010021; (* arm_ADD X1 X1 X1 *) + 0x9b027c2a; (* arm_MUL X10 X1 X2 *) + 0xab0a0273; (* arm_ADDS X19 X19 X10 *) + 0x9bc27c2a; (* arm_UMULH X10 X1 X2 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9b047c2a; (* arm_MUL X10 X1 X4 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9bc47c2a; (* arm_UMULH X10 X1 X4 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9b067c2a; (* arm_MUL X10 X1 X6 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9bc67c2a; (* arm_UMULH X10 X1 X6 *) + 0xba0a0318; (* arm_ADCS X24 X24 X10 *) + 0x9b087c2a; (* arm_MUL X10 X1 X8 *) + 0xba0a0339; (* arm_ADCS X25 X25 X10 *) + 0x9bc87c2a; (* arm_UMULH X10 X1 X8 *) + 0xba0a0000; (* arm_ADCS X0 X0 X10 *) + 0xd341fc24; (* arm_LSR X4 X1 1 *) + 0x9b047c84; (* arm_MUL X4 X4 X4 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b037c2a; (* arm_MUL X10 X1 X3 *) + 0xab0a0294; (* arm_ADDS X20 X20 X10 *) + 0x9bc37c2a; (* arm_UMULH X10 X1 X3 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9b057c2a; (* arm_MUL X10 X1 X5 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9bc57c2a; (* arm_UMULH X10 X1 X5 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9b077c2a; (* arm_MUL X10 X1 X7 *) + 0xba0a0318; (* arm_ADCS X24 X24 X10 *) + 0x9bc77c2a; (* arm_UMULH X10 X1 X7 *) + 0xba0a0339; (* arm_ADCS X25 X25 X10 *) + 0x9b097c2a; (* arm_MUL X10 X1 X9 *) + 0xba0a0000; (* arm_ADCS X0 X0 X10 *) + 0x9bc97c2a; (* arm_UMULH X10 X1 X9 *) + 0x9a0a0084; (* arm_ADC X4 X4 X10 *) + 0x9b027c42; (* arm_MUL X2 X2 X2 *) + 0xeb1f03ff; (* arm_CMP XZR XZR *) + 0x93d3268a; (* arm_EXTR X10 X20 X19 9 *) + 0xba0a0042; (* arm_ADCS X2 X2 X10 *) + 0x93d426aa; (* arm_EXTR X10 X21 X20 9 *) + 0xba0a016b; (* arm_ADCS X11 X11 X10 *) + 0x93d526ca; (* arm_EXTR X10 X22 X21 9 *) + 0xba0a018c; (* arm_ADCS X12 X12 X10 *) + 0x93d626ea; (* arm_EXTR X10 X23 X22 9 *) + 0xba0a01ad; (* arm_ADCS X13 X13 X10 *) + 0x93d7270a; (* arm_EXTR X10 X24 X23 9 *) + 0xba0a01ce; (* arm_ADCS X14 X14 X10 *) + 0x93d8272a; (* arm_EXTR X10 X25 X24 9 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x93d9240a; (* arm_EXTR X10 X0 X25 9 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x93c0248a; (* arm_EXTR X10 X4 X0 9 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0xb277da73; (* arm_ORR X19 X19 (rvalue (word 18446744073709551104)) *) + 0xd349fc8a; (* arm_LSR X10 X4 9 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0xfa1f0042; (* arm_SBCS X2 X2 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xda1f0273; (* arm_SBC X19 X19 XZR *) + 0x92402273; (* arm_AND X19 X19 (rvalue (word 511)) *) + 0xa91b2fe2; (* arm_STP X2 X11 SP (Immediate_Offset (iword (&432))) *) + 0xa91c37ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&448))) *) + 0xa91d3fee; (* arm_STP X14 X15 SP (Immediate_Offset (iword (&464))) *) + 0xa91e47f0; (* arm_STP X16 X17 SP (Immediate_Offset (iword (&480))) *) + 0xf900fbf3; (* arm_STR X19 SP (Immediate_Offset (word 496)) *) + 0xa9401363; (* arm_LDP X3 X4 X27 (Immediate_Offset (iword (&0))) *) + 0xa9449be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&72))) *) + 0x9b057c6f; (* arm_MUL X15 X3 X5 *) + 0x9bc57c70; (* arm_UMULH X16 X3 X5 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0x9bc67c71; (* arm_UMULH X17 X3 X6 *) + 0xab0e0210; (* arm_ADDS X16 X16 X14 *) + 0xa945a3e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&88))) *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0x9bc77c73; (* arm_UMULH X19 X3 X7 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0x9bc87c74; (* arm_UMULH X20 X3 X8 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0xa946abe9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&104))) *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0x9bc97c75; (* arm_UMULH X21 X3 X9 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0x9bca7c76; (* arm_UMULH X22 X3 X10 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0xa947b3eb; (* arm_LDP X11 X12 SP (Immediate_Offset (iword (&120))) *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0x9bcb7c77; (* arm_UMULH X23 X3 X11 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0xf94047ed; (* arm_LDR X13 SP (Immediate_Offset (word 136)) *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0x9bcc7c78; (* arm_UMULH X24 X3 X12 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0x9bcd7c61; (* arm_UMULH X1 X3 X13 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e0210; (* arm_ADDS X16 X16 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9a9f37e0; (* arm_CSET X0 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0231; (* arm_ADDS X17 X17 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0000; (* arm_ADC X0 X0 X14 *) + 0xa90dc3ef; (* arm_STP X15 X16 SP (Immediate_Offset (iword (&216))) *) + 0xa9411363; (* arm_LDP X3 X4 X27 (Immediate_Offset (iword (&16))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0231; (* arm_ADDS X17 X17 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9a9f37ef; (* arm_CSET X15 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e0273; (* arm_ADDS X19 X19 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e01ef; (* arm_ADC X15 X15 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e0273; (* arm_ADDS X19 X19 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9a9f37f0; (* arm_CSET X16 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0294; (* arm_ADDS X20 X20 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0210; (* arm_ADC X16 X16 X14 *) + 0xa90ecff1; (* arm_STP X17 X19 SP (Immediate_Offset (iword (&232))) *) + 0xa9421363; (* arm_LDP X3 X4 X27 (Immediate_Offset (iword (&32))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0294; (* arm_ADDS X20 X20 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9a9f37f1; (* arm_CSET X17 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e02b5; (* arm_ADDS X21 X21 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e0231; (* arm_ADC X17 X17 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e02b5; (* arm_ADDS X21 X21 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9a9f37f3; (* arm_CSET X19 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e02d6; (* arm_ADDS X22 X22 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0273; (* arm_ADC X19 X19 X14 *) + 0xa90fd7f4; (* arm_STP X20 X21 SP (Immediate_Offset (iword (&248))) *) + 0xa9431363; (* arm_LDP X3 X4 X27 (Immediate_Offset (iword (&48))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e02d6; (* arm_ADDS X22 X22 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e02f7; (* arm_ADDS X23 X23 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e0294; (* arm_ADC X20 X20 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e02f7; (* arm_ADDS X23 X23 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9a9f37f5; (* arm_CSET X21 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0318; (* arm_ADDS X24 X24 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0xa910dff6; (* arm_STP X22 X23 SP (Immediate_Offset (iword (&264))) *) + 0xf9402363; (* arm_LDR X3 X27 (Immediate_Offset (word 64)) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0318; (* arm_ADDS X24 X24 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e0021; (* arm_ADDS X1 X1 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0xa94d9be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&216))) *) + 0x93d8242e; (* arm_EXTR X14 X1 X24 9 *) + 0xab0e00a5; (* arm_ADDS X5 X5 X14 *) + 0x93c1240e; (* arm_EXTR X14 X0 X1 9 *) + 0xba0e00c6; (* arm_ADCS X6 X6 X14 *) + 0xa94ea3e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&232))) *) + 0x93c025ee; (* arm_EXTR X14 X15 X0 9 *) + 0xba0e00e7; (* arm_ADCS X7 X7 X14 *) + 0x93cf260e; (* arm_EXTR X14 X16 X15 9 *) + 0xba0e0108; (* arm_ADCS X8 X8 X14 *) + 0xa94fabe9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&248))) *) + 0x93d0262e; (* arm_EXTR X14 X17 X16 9 *) + 0xba0e0129; (* arm_ADCS X9 X9 X14 *) + 0x93d1266e; (* arm_EXTR X14 X19 X17 9 *) + 0xba0e014a; (* arm_ADCS X10 X10 X14 *) + 0xa950b3eb; (* arm_LDP X11 X12 SP (Immediate_Offset (iword (&264))) *) + 0x93d3268e; (* arm_EXTR X14 X20 X19 9 *) + 0xba0e016b; (* arm_ADCS X11 X11 X14 *) + 0x93d426ae; (* arm_EXTR X14 X21 X20 9 *) + 0xba0e018c; (* arm_ADCS X12 X12 X14 *) + 0x9240230d; (* arm_AND X13 X24 (rvalue (word 511)) *) + 0xd349feae; (* arm_LSR X14 X21 9 *) + 0x9a0e01ad; (* arm_ADC X13 X13 X14 *) + 0xa90d9be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&216))) *) + 0xa90ea3e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&232))) *) + 0xa90fabe9; (* arm_STP X9 X10 SP (Immediate_Offset (iword (&248))) *) + 0xa910b3eb; (* arm_STP X11 X12 SP (Immediate_Offset (iword (&264))) *) + 0xf9008fed; (* arm_STR X13 SP (Immediate_Offset (word 280)) *) + 0xa9568fe2; (* arm_LDP X2 X3 SP (Immediate_Offset (iword (&360))) *) + 0x9b037c4b; (* arm_MUL X11 X2 X3 *) + 0x9bc37c4c; (* arm_UMULH X12 X2 X3 *) + 0xa95797e4; (* arm_LDP X4 X5 SP (Immediate_Offset (iword (&376))) *) + 0x9b047c4a; (* arm_MUL X10 X2 X4 *) + 0x9bc47c4d; (* arm_UMULH X13 X2 X4 *) + 0xab0a018c; (* arm_ADDS X12 X12 X10 *) + 0xa9589fe6; (* arm_LDP X6 X7 SP (Immediate_Offset (iword (&392))) *) + 0x9b057c4a; (* arm_MUL X10 X2 X5 *) + 0x9bc57c4e; (* arm_UMULH X14 X2 X5 *) + 0xba0a01ad; (* arm_ADCS X13 X13 X10 *) + 0xa959a7e8; (* arm_LDP X8 X9 SP (Immediate_Offset (iword (&408))) *) + 0x9b067c4a; (* arm_MUL X10 X2 X6 *) + 0x9bc67c4f; (* arm_UMULH X15 X2 X6 *) + 0xba0a01ce; (* arm_ADCS X14 X14 X10 *) + 0x9b077c4a; (* arm_MUL X10 X2 X7 *) + 0x9bc77c50; (* arm_UMULH X16 X2 X7 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x9b087c4a; (* arm_MUL X10 X2 X8 *) + 0x9bc87c51; (* arm_UMULH X17 X2 X8 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9b097c4a; (* arm_MUL X10 X2 X9 *) + 0x9bc97c53; (* arm_UMULH X19 X2 X9 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0x9b047c6a; (* arm_MUL X10 X3 X4 *) + 0xab0a01ad; (* arm_ADDS X13 X13 X10 *) + 0x9b057c6a; (* arm_MUL X10 X3 X5 *) + 0xba0a01ce; (* arm_ADCS X14 X14 X10 *) + 0x9b067c6a; (* arm_MUL X10 X3 X6 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x9b077c6a; (* arm_MUL X10 X3 X7 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9b087c6a; (* arm_MUL X10 X3 X8 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9b097c6a; (* arm_MUL X10 X3 X9 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc47c6a; (* arm_UMULH X10 X3 X4 *) + 0xab0a01ce; (* arm_ADDS X14 X14 X10 *) + 0x9bc57c6a; (* arm_UMULH X10 X3 X5 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x9bc67c6a; (* arm_UMULH X10 X3 X6 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9bc77c6a; (* arm_UMULH X10 X3 X7 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9bc87c6a; (* arm_UMULH X10 X3 X8 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9bc97c6a; (* arm_UMULH X10 X3 X9 *) + 0x9a0a0294; (* arm_ADC X20 X20 X10 *) + 0x9b077cca; (* arm_MUL X10 X6 X7 *) + 0x9bc77cd5; (* arm_UMULH X21 X6 X7 *) + 0xab0a0294; (* arm_ADDS X20 X20 X10 *) + 0x9a1f02b5; (* arm_ADC X21 X21 XZR *) + 0x9b057c8a; (* arm_MUL X10 X4 X5 *) + 0xab0a01ef; (* arm_ADDS X15 X15 X10 *) + 0x9b067c8a; (* arm_MUL X10 X4 X6 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9b077c8a; (* arm_MUL X10 X4 X7 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9b087c8a; (* arm_MUL X10 X4 X8 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9b097c8a; (* arm_MUL X10 X4 X9 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9b087cca; (* arm_MUL X10 X6 X8 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9a9f37f6; (* arm_CSET X22 Condition_CS *) + 0x9bc57c8a; (* arm_UMULH X10 X4 X5 *) + 0xab0a0210; (* arm_ADDS X16 X16 X10 *) + 0x9bc67c8a; (* arm_UMULH X10 X4 X6 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9bc77c8a; (* arm_UMULH X10 X4 X7 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9bc87c8a; (* arm_UMULH X10 X4 X8 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9bc97c8a; (* arm_UMULH X10 X4 X9 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9bc87cca; (* arm_UMULH X10 X6 X8 *) + 0x9a0a02d6; (* arm_ADC X22 X22 X10 *) + 0x9b087cea; (* arm_MUL X10 X7 X8 *) + 0x9bc87cf7; (* arm_UMULH X23 X7 X8 *) + 0xab0a02d6; (* arm_ADDS X22 X22 X10 *) + 0x9a1f02f7; (* arm_ADC X23 X23 XZR *) + 0x9b067caa; (* arm_MUL X10 X5 X6 *) + 0xab0a0231; (* arm_ADDS X17 X17 X10 *) + 0x9b077caa; (* arm_MUL X10 X5 X7 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9b087caa; (* arm_MUL X10 X5 X8 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9b097caa; (* arm_MUL X10 X5 X9 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9b097cca; (* arm_MUL X10 X6 X9 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9b097cea; (* arm_MUL X10 X7 X9 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9a9f37f8; (* arm_CSET X24 Condition_CS *) + 0x9bc67caa; (* arm_UMULH X10 X5 X6 *) + 0xab0a0273; (* arm_ADDS X19 X19 X10 *) + 0x9bc77caa; (* arm_UMULH X10 X5 X7 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9bc87caa; (* arm_UMULH X10 X5 X8 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9bc97caa; (* arm_UMULH X10 X5 X9 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9bc97cca; (* arm_UMULH X10 X6 X9 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9bc97cea; (* arm_UMULH X10 X7 X9 *) + 0x9a0a0318; (* arm_ADC X24 X24 X10 *) + 0x9b097d0a; (* arm_MUL X10 X8 X9 *) + 0x9bc97d19; (* arm_UMULH X25 X8 X9 *) + 0xab0a0318; (* arm_ADDS X24 X24 X10 *) + 0x9a1f0339; (* arm_ADC X25 X25 XZR *) + 0xab0b016b; (* arm_ADDS X11 X11 X11 *) + 0xba0c018c; (* arm_ADCS X12 X12 X12 *) + 0xba0d01ad; (* arm_ADCS X13 X13 X13 *) + 0xba0e01ce; (* arm_ADCS X14 X14 X14 *) + 0xba0f01ef; (* arm_ADCS X15 X15 X15 *) + 0xba100210; (* arm_ADCS X16 X16 X16 *) + 0xba110231; (* arm_ADCS X17 X17 X17 *) + 0xba130273; (* arm_ADCS X19 X19 X19 *) + 0xba140294; (* arm_ADCS X20 X20 X20 *) + 0xba1502b5; (* arm_ADCS X21 X21 X21 *) + 0xba1602d6; (* arm_ADCS X22 X22 X22 *) + 0xba1702f7; (* arm_ADCS X23 X23 X23 *) + 0xba180318; (* arm_ADCS X24 X24 X24 *) + 0xba190339; (* arm_ADCS X25 X25 X25 *) + 0x9a9f37e0; (* arm_CSET X0 Condition_CS *) + 0x9bc27c4a; (* arm_UMULH X10 X2 X2 *) + 0xab0a016b; (* arm_ADDS X11 X11 X10 *) + 0x9b037c6a; (* arm_MUL X10 X3 X3 *) + 0xba0a018c; (* arm_ADCS X12 X12 X10 *) + 0x9bc37c6a; (* arm_UMULH X10 X3 X3 *) + 0xba0a01ad; (* arm_ADCS X13 X13 X10 *) + 0x9b047c8a; (* arm_MUL X10 X4 X4 *) + 0xba0a01ce; (* arm_ADCS X14 X14 X10 *) + 0x9bc47c8a; (* arm_UMULH X10 X4 X4 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x9b057caa; (* arm_MUL X10 X5 X5 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9bc57caa; (* arm_UMULH X10 X5 X5 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9b067cca; (* arm_MUL X10 X6 X6 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9bc67cca; (* arm_UMULH X10 X6 X6 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9b077cea; (* arm_MUL X10 X7 X7 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9bc77cea; (* arm_UMULH X10 X7 X7 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9b087d0a; (* arm_MUL X10 X8 X8 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9bc87d0a; (* arm_UMULH X10 X8 X8 *) + 0xba0a0318; (* arm_ADCS X24 X24 X10 *) + 0x9b097d2a; (* arm_MUL X10 X9 X9 *) + 0xba0a0339; (* arm_ADCS X25 X25 X10 *) + 0x9bc97d2a; (* arm_UMULH X10 X9 X9 *) + 0x9a0a0000; (* arm_ADC X0 X0 X10 *) + 0xf940d7e1; (* arm_LDR X1 SP (Immediate_Offset (word 424)) *) + 0x8b010021; (* arm_ADD X1 X1 X1 *) + 0x9b027c2a; (* arm_MUL X10 X1 X2 *) + 0xab0a0273; (* arm_ADDS X19 X19 X10 *) + 0x9bc27c2a; (* arm_UMULH X10 X1 X2 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9b047c2a; (* arm_MUL X10 X1 X4 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9bc47c2a; (* arm_UMULH X10 X1 X4 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9b067c2a; (* arm_MUL X10 X1 X6 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9bc67c2a; (* arm_UMULH X10 X1 X6 *) + 0xba0a0318; (* arm_ADCS X24 X24 X10 *) + 0x9b087c2a; (* arm_MUL X10 X1 X8 *) + 0xba0a0339; (* arm_ADCS X25 X25 X10 *) + 0x9bc87c2a; (* arm_UMULH X10 X1 X8 *) + 0xba0a0000; (* arm_ADCS X0 X0 X10 *) + 0xd341fc24; (* arm_LSR X4 X1 1 *) + 0x9b047c84; (* arm_MUL X4 X4 X4 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b037c2a; (* arm_MUL X10 X1 X3 *) + 0xab0a0294; (* arm_ADDS X20 X20 X10 *) + 0x9bc37c2a; (* arm_UMULH X10 X1 X3 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9b057c2a; (* arm_MUL X10 X1 X5 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9bc57c2a; (* arm_UMULH X10 X1 X5 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9b077c2a; (* arm_MUL X10 X1 X7 *) + 0xba0a0318; (* arm_ADCS X24 X24 X10 *) + 0x9bc77c2a; (* arm_UMULH X10 X1 X7 *) + 0xba0a0339; (* arm_ADCS X25 X25 X10 *) + 0x9b097c2a; (* arm_MUL X10 X1 X9 *) + 0xba0a0000; (* arm_ADCS X0 X0 X10 *) + 0x9bc97c2a; (* arm_UMULH X10 X1 X9 *) + 0x9a0a0084; (* arm_ADC X4 X4 X10 *) + 0x9b027c42; (* arm_MUL X2 X2 X2 *) + 0xeb1f03ff; (* arm_CMP XZR XZR *) + 0x93d3268a; (* arm_EXTR X10 X20 X19 9 *) + 0xba0a0042; (* arm_ADCS X2 X2 X10 *) + 0x93d426aa; (* arm_EXTR X10 X21 X20 9 *) + 0xba0a016b; (* arm_ADCS X11 X11 X10 *) + 0x93d526ca; (* arm_EXTR X10 X22 X21 9 *) + 0xba0a018c; (* arm_ADCS X12 X12 X10 *) + 0x93d626ea; (* arm_EXTR X10 X23 X22 9 *) + 0xba0a01ad; (* arm_ADCS X13 X13 X10 *) + 0x93d7270a; (* arm_EXTR X10 X24 X23 9 *) + 0xba0a01ce; (* arm_ADCS X14 X14 X10 *) + 0x93d8272a; (* arm_EXTR X10 X25 X24 9 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x93d9240a; (* arm_EXTR X10 X0 X25 9 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x93c0248a; (* arm_EXTR X10 X4 X0 9 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0xb277da73; (* arm_ORR X19 X19 (rvalue (word 18446744073709551104)) *) + 0xd349fc8a; (* arm_LSR X10 X4 9 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0xfa1f0042; (* arm_SBCS X2 X2 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xda1f0273; (* arm_SBC X19 X19 XZR *) + 0x92402273; (* arm_AND X19 X19 (rvalue (word 511)) *) + 0xa9122fe2; (* arm_STP X2 X11 SP (Immediate_Offset (iword (&288))) *) + 0xa91337ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&304))) *) + 0xa9143fee; (* arm_STP X14 X15 SP (Immediate_Offset (iword (&320))) *) + 0xa91547f0; (* arm_STP X16 X17 SP (Immediate_Offset (iword (&336))) *) + 0xf900b3f3; (* arm_STR X19 SP (Immediate_Offset (word 352)) *) + 0xa94d9fe6; (* arm_LDP X6 X7 SP (Immediate_Offset (iword (&216))) *) + 0xd2800181; (* arm_MOV X1 (rvalue (word 12)) *) + 0x9b067c23; (* arm_MUL X3 X1 X6 *) + 0x9b077c24; (* arm_MUL X4 X1 X7 *) + 0x9bc67c26; (* arm_UMULH X6 X1 X6 *) + 0xab060084; (* arm_ADDS X4 X4 X6 *) + 0x9bc77c27; (* arm_UMULH X7 X1 X7 *) + 0xa94ea7e8; (* arm_LDP X8 X9 SP (Immediate_Offset (iword (&232))) *) + 0x9b087c25; (* arm_MUL X5 X1 X8 *) + 0x9b097c26; (* arm_MUL X6 X1 X9 *) + 0x9bc87c28; (* arm_UMULH X8 X1 X8 *) + 0xba0700a5; (* arm_ADCS X5 X5 X7 *) + 0x9bc97c29; (* arm_UMULH X9 X1 X9 *) + 0xba0800c6; (* arm_ADCS X6 X6 X8 *) + 0xa94fafea; (* arm_LDP X10 X11 SP (Immediate_Offset (iword (&248))) *) + 0x9b0a7c27; (* arm_MUL X7 X1 X10 *) + 0x9b0b7c28; (* arm_MUL X8 X1 X11 *) + 0x9bca7c2a; (* arm_UMULH X10 X1 X10 *) + 0xba0900e7; (* arm_ADCS X7 X7 X9 *) + 0x9bcb7c2b; (* arm_UMULH X11 X1 X11 *) + 0xba0a0108; (* arm_ADCS X8 X8 X10 *) + 0xa950b7ec; (* arm_LDP X12 X13 SP (Immediate_Offset (iword (&264))) *) + 0x9b0c7c29; (* arm_MUL X9 X1 X12 *) + 0x9b0d7c2a; (* arm_MUL X10 X1 X13 *) + 0x9bcc7c2c; (* arm_UMULH X12 X1 X12 *) + 0xba0b0129; (* arm_ADCS X9 X9 X11 *) + 0x9bcd7c2d; (* arm_UMULH X13 X1 X13 *) + 0xba0c014a; (* arm_ADCS X10 X10 X12 *) + 0xf9408fee; (* arm_LDR X14 SP (Immediate_Offset (word 280)) *) + 0x9b0e7c2b; (* arm_MUL X11 X1 X14 *) + 0x9a0d016b; (* arm_ADC X11 X11 X13 *) + 0xd2800121; (* arm_MOV X1 (rvalue (word 9)) *) + 0xa95b57f4; (* arm_LDP X20 X21 SP (Immediate_Offset (iword (&432))) *) + 0xaa3403f4; (* arm_MVN X20 X20 *) + 0x9b147c20; (* arm_MUL X0 X1 X20 *) + 0x9bd47c34; (* arm_UMULH X20 X1 X20 *) + 0xab000063; (* arm_ADDS X3 X3 X0 *) + 0xaa3503f5; (* arm_MVN X21 X21 *) + 0x9b157c20; (* arm_MUL X0 X1 X21 *) + 0x9bd57c35; (* arm_UMULH X21 X1 X21 *) + 0xba000084; (* arm_ADCS X4 X4 X0 *) + 0xa95c5ff6; (* arm_LDP X22 X23 SP (Immediate_Offset (iword (&448))) *) + 0xaa3603f6; (* arm_MVN X22 X22 *) + 0x9b167c20; (* arm_MUL X0 X1 X22 *) + 0x9bd67c36; (* arm_UMULH X22 X1 X22 *) + 0xba0000a5; (* arm_ADCS X5 X5 X0 *) + 0xaa3703f7; (* arm_MVN X23 X23 *) + 0x9b177c20; (* arm_MUL X0 X1 X23 *) + 0x9bd77c37; (* arm_UMULH X23 X1 X23 *) + 0xba0000c6; (* arm_ADCS X6 X6 X0 *) + 0xa95d4ff1; (* arm_LDP X17 X19 SP (Immediate_Offset (iword (&464))) *) + 0xaa3103f1; (* arm_MVN X17 X17 *) + 0x9b117c20; (* arm_MUL X0 X1 X17 *) + 0x9bd17c31; (* arm_UMULH X17 X1 X17 *) + 0xba0000e7; (* arm_ADCS X7 X7 X0 *) + 0xaa3303f3; (* arm_MVN X19 X19 *) + 0x9b137c20; (* arm_MUL X0 X1 X19 *) + 0x9bd37c33; (* arm_UMULH X19 X1 X19 *) + 0xba000108; (* arm_ADCS X8 X8 X0 *) + 0xa95e43e2; (* arm_LDP X2 X16 SP (Immediate_Offset (iword (&480))) *) + 0xaa2203e2; (* arm_MVN X2 X2 *) + 0x9b027c20; (* arm_MUL X0 X1 X2 *) + 0x9bc27c22; (* arm_UMULH X2 X1 X2 *) + 0xba000129; (* arm_ADCS X9 X9 X0 *) + 0xaa3003f0; (* arm_MVN X16 X16 *) + 0x9b107c20; (* arm_MUL X0 X1 X16 *) + 0x9bd07c30; (* arm_UMULH X16 X1 X16 *) + 0xba00014a; (* arm_ADCS X10 X10 X0 *) + 0xf940fbe0; (* arm_LDR X0 SP (Immediate_Offset (word 496)) *) + 0xd2402000; (* arm_EOR X0 X0 (rvalue (word 511)) *) + 0x9b007c20; (* arm_MUL X0 X1 X0 *) + 0x9a00016b; (* arm_ADC X11 X11 X0 *) + 0xab140084; (* arm_ADDS X4 X4 X20 *) + 0xba1500a5; (* arm_ADCS X5 X5 X21 *) + 0x8a05008f; (* arm_AND X15 X4 X5 *) + 0xba1600c6; (* arm_ADCS X6 X6 X22 *) + 0x8a0601ef; (* arm_AND X15 X15 X6 *) + 0xba1700e7; (* arm_ADCS X7 X7 X23 *) + 0x8a0701ef; (* arm_AND X15 X15 X7 *) + 0xba110108; (* arm_ADCS X8 X8 X17 *) + 0x8a0801ef; (* arm_AND X15 X15 X8 *) + 0xba130129; (* arm_ADCS X9 X9 X19 *) + 0x8a0901ef; (* arm_AND X15 X15 X9 *) + 0xba02014a; (* arm_ADCS X10 X10 X2 *) + 0x8a0a01ef; (* arm_AND X15 X15 X10 *) + 0x9a10016b; (* arm_ADC X11 X11 X16 *) + 0xd349fd6c; (* arm_LSR X12 X11 9 *) + 0xb277d96b; (* arm_ORR X11 X11 (rvalue (word 18446744073709551104)) *) + 0xeb1f03ff; (* arm_CMP XZR XZR *) + 0xba0c007f; (* arm_ADCS XZR X3 X12 *) + 0xba1f01ff; (* arm_ADCS XZR X15 XZR *) + 0xba1f017f; (* arm_ADCS XZR X11 XZR *) + 0xba0c0063; (* arm_ADCS X3 X3 X12 *) + 0xba1f0084; (* arm_ADCS X4 X4 XZR *) + 0xba1f00a5; (* arm_ADCS X5 X5 XZR *) + 0xba1f00c6; (* arm_ADCS X6 X6 XZR *) + 0xba1f00e7; (* arm_ADCS X7 X7 XZR *) + 0xba1f0108; (* arm_ADCS X8 X8 XZR *) + 0xba1f0129; (* arm_ADCS X9 X9 XZR *) + 0xba1f014a; (* arm_ADCS X10 X10 XZR *) + 0x9a1f016b; (* arm_ADC X11 X11 XZR *) + 0x9240216b; (* arm_AND X11 X11 (rvalue (word 511)) *) + 0xa91b13e3; (* arm_STP X3 X4 SP (Immediate_Offset (iword (&432))) *) + 0xa91c1be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&448))) *) + 0xa91d23e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&464))) *) + 0xa91e2be9; (* arm_STP X9 X10 SP (Immediate_Offset (iword (&480))) *) + 0xf900fbeb; (* arm_STR X11 SP (Immediate_Offset (word 496)) *) + 0xa9521be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&288))) *) + 0xa9400fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&0))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa95323e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&304))) *) + 0xa9410fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&16))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xa9542be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&320))) *) + 0xa9420fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&32))) *) + 0xfa040129; (* arm_SBCS X9 X9 X4 *) + 0xfa03014a; (* arm_SBCS X10 X10 X3 *) + 0xa95533eb; (* arm_LDP X11 X12 SP (Immediate_Offset (iword (&336))) *) + 0xa9430fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&48))) *) + 0xfa04016b; (* arm_SBCS X11 X11 X4 *) + 0xfa03018c; (* arm_SBCS X12 X12 X3 *) + 0xf940b3ed; (* arm_LDR X13 SP (Immediate_Offset (word 352)) *) + 0xf94023e4; (* arm_LDR X4 SP (Immediate_Offset (word 64)) *) + 0xfa0401ad; (* arm_SBCS X13 X13 X4 *) + 0xfa1f00a5; (* arm_SBCS X5 X5 XZR *) + 0xfa1f00c6; (* arm_SBCS X6 X6 XZR *) + 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) + 0xfa1f0108; (* arm_SBCS X8 X8 XZR *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0x924021ad; (* arm_AND X13 X13 (rvalue (word 511)) *) + 0xa9169be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&360))) *) + 0xa917a3e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&376))) *) + 0xa918abe9; (* arm_STP X9 X10 SP (Immediate_Offset (iword (&392))) *) + 0xa919b3eb; (* arm_STP X11 X12 SP (Immediate_Offset (iword (&408))) *) + 0xf900d7ed; (* arm_STR X13 SP (Immediate_Offset (word 424)) *) + 0xa9448fe2; (* arm_LDP X2 X3 SP (Immediate_Offset (iword (&72))) *) + 0x9b037c4b; (* arm_MUL X11 X2 X3 *) + 0x9bc37c4c; (* arm_UMULH X12 X2 X3 *) + 0xa94597e4; (* arm_LDP X4 X5 SP (Immediate_Offset (iword (&88))) *) + 0x9b047c4a; (* arm_MUL X10 X2 X4 *) + 0x9bc47c4d; (* arm_UMULH X13 X2 X4 *) + 0xab0a018c; (* arm_ADDS X12 X12 X10 *) + 0xa9469fe6; (* arm_LDP X6 X7 SP (Immediate_Offset (iword (&104))) *) + 0x9b057c4a; (* arm_MUL X10 X2 X5 *) + 0x9bc57c4e; (* arm_UMULH X14 X2 X5 *) + 0xba0a01ad; (* arm_ADCS X13 X13 X10 *) + 0xa947a7e8; (* arm_LDP X8 X9 SP (Immediate_Offset (iword (&120))) *) + 0x9b067c4a; (* arm_MUL X10 X2 X6 *) + 0x9bc67c4f; (* arm_UMULH X15 X2 X6 *) + 0xba0a01ce; (* arm_ADCS X14 X14 X10 *) + 0x9b077c4a; (* arm_MUL X10 X2 X7 *) + 0x9bc77c50; (* arm_UMULH X16 X2 X7 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x9b087c4a; (* arm_MUL X10 X2 X8 *) + 0x9bc87c51; (* arm_UMULH X17 X2 X8 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9b097c4a; (* arm_MUL X10 X2 X9 *) + 0x9bc97c53; (* arm_UMULH X19 X2 X9 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0x9b047c6a; (* arm_MUL X10 X3 X4 *) + 0xab0a01ad; (* arm_ADDS X13 X13 X10 *) + 0x9b057c6a; (* arm_MUL X10 X3 X5 *) + 0xba0a01ce; (* arm_ADCS X14 X14 X10 *) + 0x9b067c6a; (* arm_MUL X10 X3 X6 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x9b077c6a; (* arm_MUL X10 X3 X7 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9b087c6a; (* arm_MUL X10 X3 X8 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9b097c6a; (* arm_MUL X10 X3 X9 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc47c6a; (* arm_UMULH X10 X3 X4 *) + 0xab0a01ce; (* arm_ADDS X14 X14 X10 *) + 0x9bc57c6a; (* arm_UMULH X10 X3 X5 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x9bc67c6a; (* arm_UMULH X10 X3 X6 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9bc77c6a; (* arm_UMULH X10 X3 X7 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9bc87c6a; (* arm_UMULH X10 X3 X8 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9bc97c6a; (* arm_UMULH X10 X3 X9 *) + 0x9a0a0294; (* arm_ADC X20 X20 X10 *) + 0x9b077cca; (* arm_MUL X10 X6 X7 *) + 0x9bc77cd5; (* arm_UMULH X21 X6 X7 *) + 0xab0a0294; (* arm_ADDS X20 X20 X10 *) + 0x9a1f02b5; (* arm_ADC X21 X21 XZR *) + 0x9b057c8a; (* arm_MUL X10 X4 X5 *) + 0xab0a01ef; (* arm_ADDS X15 X15 X10 *) + 0x9b067c8a; (* arm_MUL X10 X4 X6 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9b077c8a; (* arm_MUL X10 X4 X7 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9b087c8a; (* arm_MUL X10 X4 X8 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9b097c8a; (* arm_MUL X10 X4 X9 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9b087cca; (* arm_MUL X10 X6 X8 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9a9f37f6; (* arm_CSET X22 Condition_CS *) + 0x9bc57c8a; (* arm_UMULH X10 X4 X5 *) + 0xab0a0210; (* arm_ADDS X16 X16 X10 *) + 0x9bc67c8a; (* arm_UMULH X10 X4 X6 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9bc77c8a; (* arm_UMULH X10 X4 X7 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9bc87c8a; (* arm_UMULH X10 X4 X8 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9bc97c8a; (* arm_UMULH X10 X4 X9 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9bc87cca; (* arm_UMULH X10 X6 X8 *) + 0x9a0a02d6; (* arm_ADC X22 X22 X10 *) + 0x9b087cea; (* arm_MUL X10 X7 X8 *) + 0x9bc87cf7; (* arm_UMULH X23 X7 X8 *) + 0xab0a02d6; (* arm_ADDS X22 X22 X10 *) + 0x9a1f02f7; (* arm_ADC X23 X23 XZR *) + 0x9b067caa; (* arm_MUL X10 X5 X6 *) + 0xab0a0231; (* arm_ADDS X17 X17 X10 *) + 0x9b077caa; (* arm_MUL X10 X5 X7 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9b087caa; (* arm_MUL X10 X5 X8 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9b097caa; (* arm_MUL X10 X5 X9 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9b097cca; (* arm_MUL X10 X6 X9 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9b097cea; (* arm_MUL X10 X7 X9 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9a9f37f8; (* arm_CSET X24 Condition_CS *) + 0x9bc67caa; (* arm_UMULH X10 X5 X6 *) + 0xab0a0273; (* arm_ADDS X19 X19 X10 *) + 0x9bc77caa; (* arm_UMULH X10 X5 X7 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9bc87caa; (* arm_UMULH X10 X5 X8 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9bc97caa; (* arm_UMULH X10 X5 X9 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9bc97cca; (* arm_UMULH X10 X6 X9 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9bc97cea; (* arm_UMULH X10 X7 X9 *) + 0x9a0a0318; (* arm_ADC X24 X24 X10 *) + 0x9b097d0a; (* arm_MUL X10 X8 X9 *) + 0x9bc97d19; (* arm_UMULH X25 X8 X9 *) + 0xab0a0318; (* arm_ADDS X24 X24 X10 *) + 0x9a1f0339; (* arm_ADC X25 X25 XZR *) + 0xab0b016b; (* arm_ADDS X11 X11 X11 *) + 0xba0c018c; (* arm_ADCS X12 X12 X12 *) + 0xba0d01ad; (* arm_ADCS X13 X13 X13 *) + 0xba0e01ce; (* arm_ADCS X14 X14 X14 *) + 0xba0f01ef; (* arm_ADCS X15 X15 X15 *) + 0xba100210; (* arm_ADCS X16 X16 X16 *) + 0xba110231; (* arm_ADCS X17 X17 X17 *) + 0xba130273; (* arm_ADCS X19 X19 X19 *) + 0xba140294; (* arm_ADCS X20 X20 X20 *) + 0xba1502b5; (* arm_ADCS X21 X21 X21 *) + 0xba1602d6; (* arm_ADCS X22 X22 X22 *) + 0xba1702f7; (* arm_ADCS X23 X23 X23 *) + 0xba180318; (* arm_ADCS X24 X24 X24 *) + 0xba190339; (* arm_ADCS X25 X25 X25 *) + 0x9a9f37e0; (* arm_CSET X0 Condition_CS *) + 0x9bc27c4a; (* arm_UMULH X10 X2 X2 *) + 0xab0a016b; (* arm_ADDS X11 X11 X10 *) + 0x9b037c6a; (* arm_MUL X10 X3 X3 *) + 0xba0a018c; (* arm_ADCS X12 X12 X10 *) + 0x9bc37c6a; (* arm_UMULH X10 X3 X3 *) + 0xba0a01ad; (* arm_ADCS X13 X13 X10 *) + 0x9b047c8a; (* arm_MUL X10 X4 X4 *) + 0xba0a01ce; (* arm_ADCS X14 X14 X10 *) + 0x9bc47c8a; (* arm_UMULH X10 X4 X4 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x9b057caa; (* arm_MUL X10 X5 X5 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9bc57caa; (* arm_UMULH X10 X5 X5 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9b067cca; (* arm_MUL X10 X6 X6 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9bc67cca; (* arm_UMULH X10 X6 X6 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9b077cea; (* arm_MUL X10 X7 X7 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9bc77cea; (* arm_UMULH X10 X7 X7 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9b087d0a; (* arm_MUL X10 X8 X8 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9bc87d0a; (* arm_UMULH X10 X8 X8 *) + 0xba0a0318; (* arm_ADCS X24 X24 X10 *) + 0x9b097d2a; (* arm_MUL X10 X9 X9 *) + 0xba0a0339; (* arm_ADCS X25 X25 X10 *) + 0x9bc97d2a; (* arm_UMULH X10 X9 X9 *) + 0x9a0a0000; (* arm_ADC X0 X0 X10 *) + 0xf94047e1; (* arm_LDR X1 SP (Immediate_Offset (word 136)) *) + 0x8b010021; (* arm_ADD X1 X1 X1 *) + 0x9b027c2a; (* arm_MUL X10 X1 X2 *) + 0xab0a0273; (* arm_ADDS X19 X19 X10 *) + 0x9bc27c2a; (* arm_UMULH X10 X1 X2 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9b047c2a; (* arm_MUL X10 X1 X4 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9bc47c2a; (* arm_UMULH X10 X1 X4 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9b067c2a; (* arm_MUL X10 X1 X6 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9bc67c2a; (* arm_UMULH X10 X1 X6 *) + 0xba0a0318; (* arm_ADCS X24 X24 X10 *) + 0x9b087c2a; (* arm_MUL X10 X1 X8 *) + 0xba0a0339; (* arm_ADCS X25 X25 X10 *) + 0x9bc87c2a; (* arm_UMULH X10 X1 X8 *) + 0xba0a0000; (* arm_ADCS X0 X0 X10 *) + 0xd341fc24; (* arm_LSR X4 X1 1 *) + 0x9b047c84; (* arm_MUL X4 X4 X4 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b037c2a; (* arm_MUL X10 X1 X3 *) + 0xab0a0294; (* arm_ADDS X20 X20 X10 *) + 0x9bc37c2a; (* arm_UMULH X10 X1 X3 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9b057c2a; (* arm_MUL X10 X1 X5 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9bc57c2a; (* arm_UMULH X10 X1 X5 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9b077c2a; (* arm_MUL X10 X1 X7 *) + 0xba0a0318; (* arm_ADCS X24 X24 X10 *) + 0x9bc77c2a; (* arm_UMULH X10 X1 X7 *) + 0xba0a0339; (* arm_ADCS X25 X25 X10 *) + 0x9b097c2a; (* arm_MUL X10 X1 X9 *) + 0xba0a0000; (* arm_ADCS X0 X0 X10 *) + 0x9bc97c2a; (* arm_UMULH X10 X1 X9 *) + 0x9a0a0084; (* arm_ADC X4 X4 X10 *) + 0x9b027c42; (* arm_MUL X2 X2 X2 *) + 0xeb1f03ff; (* arm_CMP XZR XZR *) + 0x93d3268a; (* arm_EXTR X10 X20 X19 9 *) + 0xba0a0042; (* arm_ADCS X2 X2 X10 *) + 0x93d426aa; (* arm_EXTR X10 X21 X20 9 *) + 0xba0a016b; (* arm_ADCS X11 X11 X10 *) + 0x93d526ca; (* arm_EXTR X10 X22 X21 9 *) + 0xba0a018c; (* arm_ADCS X12 X12 X10 *) + 0x93d626ea; (* arm_EXTR X10 X23 X22 9 *) + 0xba0a01ad; (* arm_ADCS X13 X13 X10 *) + 0x93d7270a; (* arm_EXTR X10 X24 X23 9 *) + 0xba0a01ce; (* arm_ADCS X14 X14 X10 *) + 0x93d8272a; (* arm_EXTR X10 X25 X24 9 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x93d9240a; (* arm_EXTR X10 X0 X25 9 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x93c0248a; (* arm_EXTR X10 X4 X0 9 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0xb277da73; (* arm_ORR X19 X19 (rvalue (word 18446744073709551104)) *) + 0xd349fc8a; (* arm_LSR X10 X4 9 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0xfa1f0042; (* arm_SBCS X2 X2 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xda1f0273; (* arm_SBC X19 X19 XZR *) + 0x92402273; (* arm_AND X19 X19 (rvalue (word 511)) *) + 0xa9122fe2; (* arm_STP X2 X11 SP (Immediate_Offset (iword (&288))) *) + 0xa91337ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&304))) *) + 0xa9143fee; (* arm_STP X14 X15 SP (Immediate_Offset (iword (&320))) *) + 0xa91547f0; (* arm_STP X16 X17 SP (Immediate_Offset (iword (&336))) *) + 0xf900b3f3; (* arm_STR X19 SP (Immediate_Offset (word 352)) *) + 0xa9569be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&360))) *) + 0xa9448fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&72))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa957a3e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&376))) *) + 0xa9458fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&88))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xa958abe9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&392))) *) + 0xa9468fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&104))) *) + 0xfa040129; (* arm_SBCS X9 X9 X4 *) + 0xfa03014a; (* arm_SBCS X10 X10 X3 *) + 0xa959b3eb; (* arm_LDP X11 X12 SP (Immediate_Offset (iword (&408))) *) + 0xa9478fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&120))) *) + 0xfa04016b; (* arm_SBCS X11 X11 X4 *) + 0xfa03018c; (* arm_SBCS X12 X12 X3 *) + 0xf940d7ed; (* arm_LDR X13 SP (Immediate_Offset (word 424)) *) + 0xf94047e4; (* arm_LDR X4 SP (Immediate_Offset (word 136)) *) + 0xfa0401ad; (* arm_SBCS X13 X13 X4 *) + 0xfa1f00a5; (* arm_SBCS X5 X5 XZR *) + 0xfa1f00c6; (* arm_SBCS X6 X6 XZR *) + 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) + 0xfa1f0108; (* arm_SBCS X8 X8 XZR *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0x924021ad; (* arm_AND X13 X13 (rvalue (word 511)) *) + 0xa9091b45; (* arm_STP X5 X6 X26 (Immediate_Offset (iword (&144))) *) + 0xa90a2347; (* arm_STP X7 X8 X26 (Immediate_Offset (iword (&160))) *) + 0xa90b2b49; (* arm_STP X9 X10 X26 (Immediate_Offset (iword (&176))) *) + 0xa90c334b; (* arm_STP X11 X12 X26 (Immediate_Offset (iword (&192))) *) + 0xf9006b4d; (* arm_STR X13 X26 (Immediate_Offset (word 208)) *) + 0xa95b13e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&432))) *) + 0xa9491be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&144))) *) + 0x9b057c6f; (* arm_MUL X15 X3 X5 *) + 0x9bc57c70; (* arm_UMULH X16 X3 X5 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0x9bc67c71; (* arm_UMULH X17 X3 X6 *) + 0xab0e0210; (* arm_ADDS X16 X16 X14 *) + 0xa94a23e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&160))) *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0x9bc77c73; (* arm_UMULH X19 X3 X7 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0x9bc87c74; (* arm_UMULH X20 X3 X8 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0xa94b2be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&176))) *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0x9bc97c75; (* arm_UMULH X21 X3 X9 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0x9bca7c76; (* arm_UMULH X22 X3 X10 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0xa94c33eb; (* arm_LDP X11 X12 SP (Immediate_Offset (iword (&192))) *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0x9bcb7c77; (* arm_UMULH X23 X3 X11 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0xf9406bed; (* arm_LDR X13 SP (Immediate_Offset (word 208)) *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0x9bcc7c78; (* arm_UMULH X24 X3 X12 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0x9bcd7c61; (* arm_UMULH X1 X3 X13 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e0210; (* arm_ADDS X16 X16 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9a9f37e0; (* arm_CSET X0 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0231; (* arm_ADDS X17 X17 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0000; (* arm_ADC X0 X0 X14 *) + 0xa916c3ef; (* arm_STP X15 X16 SP (Immediate_Offset (iword (&360))) *) + 0xa95c13e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&448))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0231; (* arm_ADDS X17 X17 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9a9f37ef; (* arm_CSET X15 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e0273; (* arm_ADDS X19 X19 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e01ef; (* arm_ADC X15 X15 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e0273; (* arm_ADDS X19 X19 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9a9f37f0; (* arm_CSET X16 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0294; (* arm_ADDS X20 X20 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0210; (* arm_ADC X16 X16 X14 *) + 0xa917cff1; (* arm_STP X17 X19 SP (Immediate_Offset (iword (&376))) *) + 0xa95d13e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&464))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0294; (* arm_ADDS X20 X20 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9a9f37f1; (* arm_CSET X17 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e02b5; (* arm_ADDS X21 X21 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e0231; (* arm_ADC X17 X17 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e02b5; (* arm_ADDS X21 X21 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9a9f37f3; (* arm_CSET X19 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e02d6; (* arm_ADDS X22 X22 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0273; (* arm_ADC X19 X19 X14 *) + 0xa918d7f4; (* arm_STP X20 X21 SP (Immediate_Offset (iword (&392))) *) + 0xa95e13e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&480))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e02d6; (* arm_ADDS X22 X22 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e02f7; (* arm_ADDS X23 X23 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e0294; (* arm_ADC X20 X20 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e02f7; (* arm_ADDS X23 X23 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9a9f37f5; (* arm_CSET X21 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0318; (* arm_ADDS X24 X24 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0xa919dff6; (* arm_STP X22 X23 SP (Immediate_Offset (iword (&408))) *) + 0xf940fbe3; (* arm_LDR X3 SP (Immediate_Offset (word 496)) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0318; (* arm_ADDS X24 X24 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e0021; (* arm_ADDS X1 X1 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0xa9569be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&360))) *) + 0x93d8242e; (* arm_EXTR X14 X1 X24 9 *) + 0xab0e00a5; (* arm_ADDS X5 X5 X14 *) + 0x93c1240e; (* arm_EXTR X14 X0 X1 9 *) + 0xba0e00c6; (* arm_ADCS X6 X6 X14 *) + 0xa957a3e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&376))) *) + 0x93c025ee; (* arm_EXTR X14 X15 X0 9 *) + 0xba0e00e7; (* arm_ADCS X7 X7 X14 *) + 0x93cf260e; (* arm_EXTR X14 X16 X15 9 *) + 0xba0e0108; (* arm_ADCS X8 X8 X14 *) + 0xa958abe9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&392))) *) + 0x93d0262e; (* arm_EXTR X14 X17 X16 9 *) + 0xba0e0129; (* arm_ADCS X9 X9 X14 *) + 0x93d1266e; (* arm_EXTR X14 X19 X17 9 *) + 0xba0e014a; (* arm_ADCS X10 X10 X14 *) + 0xa959b3eb; (* arm_LDP X11 X12 SP (Immediate_Offset (iword (&408))) *) + 0x93d3268e; (* arm_EXTR X14 X20 X19 9 *) + 0xba0e016b; (* arm_ADCS X11 X11 X14 *) + 0x93d426ae; (* arm_EXTR X14 X21 X20 9 *) + 0xba0e018c; (* arm_ADCS X12 X12 X14 *) + 0x9240230d; (* arm_AND X13 X24 (rvalue (word 511)) *) + 0xd349feae; (* arm_LSR X14 X21 9 *) + 0x9a0e01ad; (* arm_ADC X13 X13 X14 *) + 0xa9169be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&360))) *) + 0xa917a3e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&376))) *) + 0xa918abe9; (* arm_STP X9 X10 SP (Immediate_Offset (iword (&392))) *) + 0xa919b3eb; (* arm_STP X11 X12 SP (Immediate_Offset (iword (&408))) *) + 0xf900d7ed; (* arm_STR X13 SP (Immediate_Offset (word 424)) *) + 0xa94d9fe6; (* arm_LDP X6 X7 SP (Immediate_Offset (iword (&216))) *) + 0xd37ef4c3; (* arm_LSL X3 X6 2 *) + 0x93c6f8e4; (* arm_EXTR X4 X7 X6 62 *) + 0xa94ea7e8; (* arm_LDP X8 X9 SP (Immediate_Offset (iword (&232))) *) + 0x93c7f905; (* arm_EXTR X5 X8 X7 62 *) + 0x93c8f926; (* arm_EXTR X6 X9 X8 62 *) + 0xa94fafea; (* arm_LDP X10 X11 SP (Immediate_Offset (iword (&248))) *) + 0x93c9f947; (* arm_EXTR X7 X10 X9 62 *) + 0x93caf968; (* arm_EXTR X8 X11 X10 62 *) + 0xa950b7ec; (* arm_LDP X12 X13 SP (Immediate_Offset (iword (&264))) *) + 0x93cbf989; (* arm_EXTR X9 X12 X11 62 *) + 0x93ccf9aa; (* arm_EXTR X10 X13 X12 62 *) + 0xf9408fee; (* arm_LDR X14 SP (Immediate_Offset (word 280)) *) + 0x93cdf9cb; (* arm_EXTR X11 X14 X13 62 *) + 0xa95b07e0; (* arm_LDP X0 X1 SP (Immediate_Offset (iword (&432))) *) + 0xaa2003e0; (* arm_MVN X0 X0 *) + 0xab000063; (* arm_ADDS X3 X3 X0 *) + 0xfa010084; (* arm_SBCS X4 X4 X1 *) + 0xa95c07e0; (* arm_LDP X0 X1 SP (Immediate_Offset (iword (&448))) *) + 0xfa0000a5; (* arm_SBCS X5 X5 X0 *) + 0x8a05008f; (* arm_AND X15 X4 X5 *) + 0xfa0100c6; (* arm_SBCS X6 X6 X1 *) + 0x8a0601ef; (* arm_AND X15 X15 X6 *) + 0xa95d07e0; (* arm_LDP X0 X1 SP (Immediate_Offset (iword (&464))) *) + 0xfa0000e7; (* arm_SBCS X7 X7 X0 *) + 0x8a0701ef; (* arm_AND X15 X15 X7 *) + 0xfa010108; (* arm_SBCS X8 X8 X1 *) + 0x8a0801ef; (* arm_AND X15 X15 X8 *) + 0xa95e07e0; (* arm_LDP X0 X1 SP (Immediate_Offset (iword (&480))) *) + 0xfa000129; (* arm_SBCS X9 X9 X0 *) + 0x8a0901ef; (* arm_AND X15 X15 X9 *) + 0xfa01014a; (* arm_SBCS X10 X10 X1 *) + 0x8a0a01ef; (* arm_AND X15 X15 X10 *) + 0xf940fbe0; (* arm_LDR X0 SP (Immediate_Offset (word 496)) *) + 0xd2402000; (* arm_EOR X0 X0 (rvalue (word 511)) *) + 0x9a00016b; (* arm_ADC X11 X11 X0 *) + 0xd349fd6c; (* arm_LSR X12 X11 9 *) + 0xb277d96b; (* arm_ORR X11 X11 (rvalue (word 18446744073709551104)) *) + 0xeb1f03ff; (* arm_CMP XZR XZR *) + 0xba0c007f; (* arm_ADCS XZR X3 X12 *) + 0xba1f01ff; (* arm_ADCS XZR X15 XZR *) + 0xba1f017f; (* arm_ADCS XZR X11 XZR *) + 0xba0c0063; (* arm_ADCS X3 X3 X12 *) + 0xba1f0084; (* arm_ADCS X4 X4 XZR *) + 0xba1f00a5; (* arm_ADCS X5 X5 XZR *) + 0xba1f00c6; (* arm_ADCS X6 X6 XZR *) + 0xba1f00e7; (* arm_ADCS X7 X7 XZR *) + 0xba1f0108; (* arm_ADCS X8 X8 XZR *) + 0xba1f0129; (* arm_ADCS X9 X9 XZR *) + 0xba1f014a; (* arm_ADCS X10 X10 XZR *) + 0x9a1f016b; (* arm_ADC X11 X11 XZR *) + 0x9240216b; (* arm_AND X11 X11 (rvalue (word 511)) *) + 0xa9001343; (* arm_STP X3 X4 X26 (Immediate_Offset (iword (&0))) *) + 0xa9011b45; (* arm_STP X5 X6 X26 (Immediate_Offset (iword (&16))) *) + 0xa9022347; (* arm_STP X7 X8 X26 (Immediate_Offset (iword (&32))) *) + 0xa9032b49; (* arm_STP X9 X10 X26 (Immediate_Offset (iword (&48))) *) + 0xf900234b; (* arm_STR X11 X26 (Immediate_Offset (word 64)) *) + 0xa9569fe6; (* arm_LDP X6 X7 SP (Immediate_Offset (iword (&360))) *) + 0xd37ff8c3; (* arm_LSL X3 X6 1 *) + 0xab060063; (* arm_ADDS X3 X3 X6 *) + 0x93c6fce4; (* arm_EXTR X4 X7 X6 63 *) + 0xba070084; (* arm_ADCS X4 X4 X7 *) + 0xa957a7e8; (* arm_LDP X8 X9 SP (Immediate_Offset (iword (&376))) *) + 0x93c7fd05; (* arm_EXTR X5 X8 X7 63 *) + 0xba0800a5; (* arm_ADCS X5 X5 X8 *) + 0x93c8fd26; (* arm_EXTR X6 X9 X8 63 *) + 0xba0900c6; (* arm_ADCS X6 X6 X9 *) + 0xa958afea; (* arm_LDP X10 X11 SP (Immediate_Offset (iword (&392))) *) + 0x93c9fd47; (* arm_EXTR X7 X10 X9 63 *) + 0xba0a00e7; (* arm_ADCS X7 X7 X10 *) + 0x93cafd68; (* arm_EXTR X8 X11 X10 63 *) + 0xba0b0108; (* arm_ADCS X8 X8 X11 *) + 0xa959b7ec; (* arm_LDP X12 X13 SP (Immediate_Offset (iword (&408))) *) + 0x93cbfd89; (* arm_EXTR X9 X12 X11 63 *) + 0xba0c0129; (* arm_ADCS X9 X9 X12 *) + 0x93ccfdaa; (* arm_EXTR X10 X13 X12 63 *) + 0xba0d014a; (* arm_ADCS X10 X10 X13 *) + 0xf940d7ee; (* arm_LDR X14 SP (Immediate_Offset (word 424)) *) + 0x93cdfdcb; (* arm_EXTR X11 X14 X13 63 *) + 0x9a0e016b; (* arm_ADC X11 X11 X14 *) + 0xa95257f4; (* arm_LDP X20 X21 SP (Immediate_Offset (iword (&288))) *) + 0xaa3403f4; (* arm_MVN X20 X20 *) + 0xd37df280; (* arm_LSL X0 X20 3 *) + 0xab000063; (* arm_ADDS X3 X3 X0 *) + 0xaa3503f5; (* arm_MVN X21 X21 *) + 0x93d4f6a0; (* arm_EXTR X0 X21 X20 61 *) + 0xba000084; (* arm_ADCS X4 X4 X0 *) + 0xa9535ff6; (* arm_LDP X22 X23 SP (Immediate_Offset (iword (&304))) *) + 0xaa3603f6; (* arm_MVN X22 X22 *) + 0x93d5f6c0; (* arm_EXTR X0 X22 X21 61 *) + 0xba0000a5; (* arm_ADCS X5 X5 X0 *) + 0x8a05008f; (* arm_AND X15 X4 X5 *) + 0xaa3703f7; (* arm_MVN X23 X23 *) + 0x93d6f6e0; (* arm_EXTR X0 X23 X22 61 *) + 0xba0000c6; (* arm_ADCS X6 X6 X0 *) + 0x8a0601ef; (* arm_AND X15 X15 X6 *) + 0xa95457f4; (* arm_LDP X20 X21 SP (Immediate_Offset (iword (&320))) *) + 0xaa3403f4; (* arm_MVN X20 X20 *) + 0x93d7f680; (* arm_EXTR X0 X20 X23 61 *) + 0xba0000e7; (* arm_ADCS X7 X7 X0 *) + 0x8a0701ef; (* arm_AND X15 X15 X7 *) + 0xaa3503f5; (* arm_MVN X21 X21 *) + 0x93d4f6a0; (* arm_EXTR X0 X21 X20 61 *) + 0xba000108; (* arm_ADCS X8 X8 X0 *) + 0x8a0801ef; (* arm_AND X15 X15 X8 *) + 0xa9555ff6; (* arm_LDP X22 X23 SP (Immediate_Offset (iword (&336))) *) + 0xaa3603f6; (* arm_MVN X22 X22 *) + 0x93d5f6c0; (* arm_EXTR X0 X22 X21 61 *) + 0xba000129; (* arm_ADCS X9 X9 X0 *) + 0x8a0901ef; (* arm_AND X15 X15 X9 *) + 0xaa3703f7; (* arm_MVN X23 X23 *) + 0x93d6f6e0; (* arm_EXTR X0 X23 X22 61 *) + 0xba00014a; (* arm_ADCS X10 X10 X0 *) + 0x8a0a01ef; (* arm_AND X15 X15 X10 *) + 0xf940b3e0; (* arm_LDR X0 SP (Immediate_Offset (word 352)) *) + 0xd2402000; (* arm_EOR X0 X0 (rvalue (word 511)) *) + 0x93d7f400; (* arm_EXTR X0 X0 X23 61 *) + 0x9a00016b; (* arm_ADC X11 X11 X0 *) + 0xd349fd6c; (* arm_LSR X12 X11 9 *) + 0xb277d96b; (* arm_ORR X11 X11 (rvalue (word 18446744073709551104)) *) + 0xeb1f03ff; (* arm_CMP XZR XZR *) + 0xba0c007f; (* arm_ADCS XZR X3 X12 *) + 0xba1f01ff; (* arm_ADCS XZR X15 XZR *) + 0xba1f017f; (* arm_ADCS XZR X11 XZR *) + 0xba0c0063; (* arm_ADCS X3 X3 X12 *) + 0xba1f0084; (* arm_ADCS X4 X4 XZR *) + 0xba1f00a5; (* arm_ADCS X5 X5 XZR *) + 0xba1f00c6; (* arm_ADCS X6 X6 XZR *) + 0xba1f00e7; (* arm_ADCS X7 X7 XZR *) + 0xba1f0108; (* arm_ADCS X8 X8 XZR *) + 0xba1f0129; (* arm_ADCS X9 X9 XZR *) + 0xba1f014a; (* arm_ADCS X10 X10 XZR *) + 0x9a1f016b; (* arm_ADC X11 X11 XZR *) + 0x9240216b; (* arm_AND X11 X11 (rvalue (word 511)) *) + 0xa9049343; (* arm_STP X3 X4 X26 (Immediate_Offset (iword (&72))) *) + 0xa9059b45; (* arm_STP X5 X6 X26 (Immediate_Offset (iword (&88))) *) + 0xa906a347; (* arm_STP X7 X8 X26 (Immediate_Offset (iword (&104))) *) + 0xa907ab49; (* arm_STP X9 X10 X26 (Immediate_Offset (iword (&120))) *) + 0xf900474b; (* arm_STR X11 X26 (Immediate_Offset (word 136)) *) + 0x910803ff; (* arm_ADD SP SP (rvalue (word 512)) *) + 0xa8c173fb; (* arm_LDP X27 X28 SP (Postimmediate_Offset (iword (&16))) *) + 0xa8c16bf9; (* arm_LDP X25 X26 SP (Postimmediate_Offset (iword (&16))) *) + 0xa8c163f7; (* arm_LDP X23 X24 SP (Postimmediate_Offset (iword (&16))) *) + 0xa8c15bf5; (* arm_LDP X21 X22 SP (Postimmediate_Offset (iword (&16))) *) + 0xa8c153f3; (* arm_LDP X19 X20 SP (Postimmediate_Offset (iword (&16))) *) + 0xd65f03c0 (* arm_RET X30 *) +];; + +let P521_JDOUBLE_EXEC = ARM_MK_EXEC_RULE p521_jdouble_mc;; + +(* ------------------------------------------------------------------------- *) +(* Common supporting definitions and lemmas for component proofs. *) +(* ------------------------------------------------------------------------- *) + +let p_521 = new_definition `p_521 = 6864797660130609714981900799081393217269435300143305409394463459185543183397656052122559640661454554977296311391480858037121987999716643812574028291115057151`;; + +let P_521 = prove + (`p_521 = 2 EXP 521 - 1`, + REWRITE_TAC[p_521] THEN CONV_TAC NUM_REDUCE_CONV);; + +let P_521_AS_WORDLIST = prove + (`p_521 = + bignum_of_wordlist + [word_not(word 0);word_not(word 0);word_not(word 0);word_not(word 0); + word_not(word 0);word_not(word 0);word_not(word 0);word_not(word 0); + word(0x1FF)]`, + REWRITE_TAC[p_521; bignum_of_wordlist] THEN + CONV_TAC WORD_REDUCE_CONV THEN CONV_TAC NUM_REDUCE_CONV);; + +let BIGNUM_FROM_MEMORY_EQ_P521 = prove + (`bignum_of_wordlist[n0;n1;n2;n3;n4;n5;n6;n7;n8] = p_521 <=> + (!i. i < 64 + ==> bit i n0 /\ bit i n1 /\ bit i n2 /\ bit i n3 /\ + bit i n4 /\ bit i n5 /\ bit i n6 /\ bit i n7) /\ + (!i. i < 9 ==> bit i n8) /\ (!i. i < 64 ==> 9 <= i ==> ~bit i n8)`, + REWRITE_TAC[P_521_AS_WORDLIST; BIGNUM_OF_WORDLIST_EQ] THEN + REWRITE_TAC[WORD_EQ_BITS_ALT; DIMINDEX_64] THEN + CONV_TAC(ONCE_DEPTH_CONV EXPAND_CASES_CONV) THEN + CONV_TAC NUM_REDUCE_CONV THEN CONV_TAC WORD_REDUCE_CONV THEN + CONV_TAC CONJ_ACI_RULE);; + +let BIGNUM_FROM_MEMORY_LE_P521 = prove + (`bignum_of_wordlist[n0;n1;n2;n3;n4;n5;n6;n7;n8] <= p_521 <=> + !i. i < 64 ==> 9 <= i ==> ~bit i n8`, + SIMP_TAC[P_521; ARITH_RULE `p_521 = 2 EXP 521 - 1 ==> + (n <= p_521 <=> n DIV 2 EXP (8 * 64) < 2 EXP 9)`] THEN + REWRITE_TAC[TOP_DEPTH_CONV num_CONV `8`; MULT_CLAUSES; EXP_ADD] THEN + REWRITE_TAC[GSYM DIV_DIV; BIGNUM_OF_WORDLIST_DIV; EXP; DIV_1] THEN + REWRITE_TAC[BIGNUM_OF_WORDLIST_SING; GSYM UPPER_BITS_ZERO] THEN + MP_TAC(ISPEC `n8:int64` BIT_TRIVIAL) THEN REWRITE_TAC[DIMINDEX_64] THEN + MESON_TAC[NOT_LE]);; + +let BIGNUM_FROM_MEMORY_LT_P521 = prove + (`bignum_of_wordlist[n0;n1;n2;n3;n4;n5;n6;n7;n8] < p_521 <=> + (!i. i < 64 ==> 9 <= i ==> ~bit i n8) /\ + ~((!i. i < 64 + ==> bit i n0 /\ bit i n1 /\ bit i n2 /\ bit i n3 /\ + bit i n4 /\ bit i n5 /\ bit i n6 /\ bit i n7) /\ + (!i. i < 9 ==> bit i n8))`, + GEN_REWRITE_TAC LAND_CONV [LT_LE] THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_EQ_P521; BIGNUM_FROM_MEMORY_LE_P521] THEN + MESON_TAC[]);; + +let nistp521 = define + `nistp521 = + (integer_mod_ring p_521, + ring_neg (integer_mod_ring p_521) (&3), + &b_521:int)`;; + +let nistp521_encode = new_definition + `nistp521_encode = modular_encode(521,p_521)`;; + +let nintlemma = prove + (`&(num_of_int(x rem &p_521)) = x rem &p_521`, + MATCH_MP_TAC INT_OF_NUM_OF_INT THEN MATCH_MP_TAC INT_REM_POS THEN + REWRITE_TAC[INT_OF_NUM_EQ; p_521] THEN CONV_TAC NUM_REDUCE_CONV);; + +let unilemma0 = prove + (`x = a MOD p_521 ==> x < p_521 /\ &x = &a rem &p_521`, + REWRITE_TAC[INT_OF_NUM_REM; p_521] THEN ARITH_TAC);; + +let unilemma1 = prove + (`&x = a rem &p_521 ==> x < p_521 /\ &x = a rem &p_521`, + SIMP_TAC[GSYM INT_OF_NUM_LT; INT_LT_REM_EQ; p_521] THEN INT_ARITH_TAC);; + +let unilemma2 = prove + (`X = num_of_int(x rem &p_521) ==> X < p_521 /\ &X = x rem &p_521`, + DISCH_THEN SUBST1_TAC THEN + REWRITE_TAC[GSYM INT_OF_NUM_LT; nintlemma; INT_LT_REM_EQ] THEN + REWRITE_TAC[INT_OF_NUM_LT; p_521] THEN CONV_TAC NUM_REDUCE_CONV);; + +let lvs = + ["x_1",[`X27`;`0`]; + "y_1",[`X27`;`72`]; + "z_1",[`X27`;`144`]; + "x_3",[`X26`;`0`]; + "y_3",[`X26`;`72`]; + "z_3",[`X26`;`144`]; + "z2",[`SP`;`0`]; + "y2",[`SP`;`72`]; + "x2p",[`SP`;`144`]; + "xy2",[`SP`;`216`]; + "y4",[`SP`;`288`]; + "t2",[`SP`;`288`]; + "dx2",[`SP`;`360`]; + "t1",[`SP`;`360`]; + "d",[`SP`;`432`]; + "x4p",[`SP`;`432`]];; + +(* ------------------------------------------------------------------------- *) +(* Instances of sqr. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_SQR_P521_TAC = + ARM_MACRO_SIM_ABBREV_TAC p521_jdouble_mc 230 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1. + !n. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 9)) t = n + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0x29f0) (word_add (read p3 t) (word n3),72) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p521_jdouble_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X26 s = read X26 t /\ + read X27 s = read X27 t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 9)) s = + n) + (\s. read PC s = pcout /\ + (n < p_521 + ==> read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 9)) s = (n EXP 2) MOD p_521)) + (MAYCHANGE [PC; X0; X1; X2; X3; X4; X5; X6; X7; X8; X9; X10; + X11; X12; X13; X14; X15; X16; X17; X19; X20; + X21; X22; X23; X24; X25] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 9)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + (*** Globalize the n < p_521 assumption for simplicity's sake ***) + + ASM_CASES_TAC `n < p_521` THENL + [ASM_REWRITE_TAC[]; ARM_SIM_TAC P521_JDOUBLE_EXEC (1--230)] THEN + + (*** Digitize, deduce the bound on the top word specifically ***) + + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "n_" o lhand o concl) THEN + SUBGOAL_THEN `n DIV 2 EXP 512 < 2 EXP 9` MP_TAC THENL + [UNDISCH_TAC `n < p_521` THEN REWRITE_TAC[p_521] THEN ARITH_TAC; + FIRST_ASSUM(fun th -> GEN_REWRITE_TAC (funpow 3 LAND_CONV) [SYM th]) THEN + CONV_TAC(LAND_CONV(ONCE_DEPTH_CONV BIGNUM_OF_WORDLIST_DIV_CONV)) THEN + DISCH_TAC] THEN + + (*** Simulate the initial squaring ***) + + ARM_ACCSTEPS_TAC P521_JDOUBLE_EXEC (1--195) (1--195) THEN + RULE_ASSUM_TAC(REWRITE_RULE[COND_SWAP; GSYM WORD_BITVAL]) THEN + + (*** Introduce more systematic names for the high part digits ***) + + MAP_EVERY (fun s -> REABBREV_TAC s THEN POP_ASSUM SUBST_ALL_TAC) + [`l0 = read X2 s195`; + `l1 = read X11 s195`; + `l2 = read X12 s195`; + `l3 = read X13 s195`; + `l4 = read X14 s195`; + `l5 = read X15 s195`; + `l6 = read X16 s195`; + `l7 = read X17 s195`; + `h0 = read X19 s195`; + `h1 = read X20 s195`; + `h2 = read X21 s195`; + `h3 = read X22 s195`; + `h4 = read X23 s195`; + `h5 = read X24 s195`; + `h6 = read X25 s195`; + `h7 = read X0 s195`; + `h8 = read X4 s195`] THEN + + (*** Handle the two anomalous operations ***) + + UNDISCH_THEN + `&2 pow 64 * &(bitval carry_s159) + &(val(sum_s159:int64)):real = + &(val(n_8:int64)) + &(val n_8)` + (MP_TAC o REWRITE_RULE[REAL_OF_NUM_CLAUSES]) THEN + REWRITE_TAC[bitval] THEN COND_CASES_TAC THEN + ASM_REWRITE_TAC[ADD_CLAUSES; MULT_CLAUSES] THENL + [MATCH_MP_TAC(TAUT `~p ==> p ==> q`) THEN + MATCH_MP_TAC(ARITH_RULE `a < b ==> ~(b + s:num = a)`) THEN + ASM BOUNDER_TAC[]; + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN + DISCH_THEN SUBST_ALL_TAC] THEN + + UNDISCH_THEN + `&2 pow 64 * &(val(mulhi_s176:int64)) + &(val(mullo_s176:int64)):real = + &2 pow 63 * (&(val(n_8:int64)) + &(val n_8))` + (MP_TAC o REWRITE_RULE[REAL_OF_NUM_CLAUSES]) THEN + REWRITE_TAC[ARITH_RULE `2 EXP 63 * (n + n) = 2 EXP 64 * n`] THEN + DISCH_THEN(MP_TAC o MATCH_MP (NUMBER_RULE + `e * h + l = e * x ==> e divides l /\ e * h + l = e * x`)) THEN + GEN_REWRITE_TAC I [IMP_CONJ] THEN + DISCH_THEN(MP_TAC o MATCH_MP DIVIDES_LE) THEN + REWRITE_TAC[REWRITE_RULE[GSYM NOT_LE] VAL_BOUND_64] THEN + DISCH_THEN SUBST1_TAC THEN + REWRITE_TAC[ARITH_RULE `2 EXP 64 * x + 0 = 2 EXP 64 * y <=> x = y`] THEN + DISCH_THEN SUBST_ALL_TAC THEN + + (*** Show that the core squaring operation is correct ***) + + SUBGOAL_THEN + `2 EXP 512 * bignum_of_wordlist[h0;h1;h2;h3;h4;h5;h6;h7;h8] + + bignum_of_wordlist[l0;l1;l2;l3;l4;l5;l6;l7] = + n EXP 2` + ASSUME_TAC THENL + [ASM_REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`1088`; `&0:real`] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN CONJ_TAC THENL + [REWRITE_TAC[REAL_OF_NUM_CLAUSES; LE_0] THEN + REWRITE_TAC[EXP_2; ARITH_RULE `2 EXP 1088 = 2 EXP 544 EXP 2`] THEN + MATCH_MP_TAC LT_MULT2 THEN UNDISCH_TAC `n < p_521` THEN + REWRITE_TAC[p_521] THEN ARITH_TAC; + REWRITE_TAC[INTEGER_CLOSED]] THEN + EXPAND_TAC "n" THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + CONV_TAC(RAND_CONV REAL_POLY_CONV) THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o + filter (is_ratconst o rand o concl) o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC) THEN + RULE_ASSUM_TAC(REWRITE_RULE[BIGNUM_FROM_MEMORY_BYTES])] THEN + + (*** Now simulate the shift-and-add of high and lower parts ***) + + ARM_ACCSTEPS_TAC P521_JDOUBLE_EXEC + [198;200;202;204;206;208;210;212;215] (196--215) THEN + + (*** Break up into high and low parts ***) + + ABBREV_TAC `h = (n EXP 2) DIV 2 EXP 521` THEN + ABBREV_TAC `l = (n EXP 2) MOD 2 EXP 521` THEN + SUBGOAL_THEN `h < p_521 /\ l <= p_521` STRIP_ASSUME_TAC THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"] THEN REWRITE_TAC[p_521] THEN + CONJ_TAC THENL [ALL_TAC; ARITH_TAC] THEN + SIMP_TAC[RDIV_LT_EQ; EXP_EQ_0; ARITH_EQ] THEN + TRANS_TAC LET_TRANS `(p_521 - 1) EXP 2` THEN + CONJ_TAC THENL [ALL_TAC; REWRITE_TAC[p_521] THEN ARITH_TAC] THEN + REWRITE_TAC[EXP_2] THEN MATCH_MP_TAC LE_MULT2 THEN CONJ_TAC THEN + MATCH_MP_TAC(ARITH_RULE `x < n ==> x <= n - 1`) THEN ASM_REWRITE_TAC[]; + ALL_TAC] THEN + SUBGOAL_THEN `(n EXP 2) MOD p_521 = (h + l) MOD p_521` SUBST1_TAC THENL + [SUBST1_TAC(SYM(SPECL + [`n EXP 2:num`; `2 EXP 521`] (CONJUNCT2 DIVISION_SIMP))) THEN + ASM_REWRITE_TAC[GSYM CONG] THEN MATCH_MP_TAC(NUMBER_RULE + `(e == 1) (mod p) ==> (e * h + l == h + l) (mod p)`) THEN + REWRITE_TAC[CONG; p_521] THEN ARITH_TAC; + ALL_TAC] THEN + SUBGOAL_THEN + `(n EXP 2) DIV 2 EXP 521 = + bignum_of_wordlist + [word_subword (word_join (h1:int64) h0:int128) (9,64); + word_subword (word_join (h2:int64) h1:int128) (9,64); + word_subword (word_join (h3:int64) h2:int128) (9,64); + word_subword (word_join (h4:int64) h3:int128) (9,64); + word_subword (word_join (h5:int64) h4:int128) (9,64); + word_subword (word_join (h6:int64) h5:int128) (9,64); + word_subword (word_join (h7:int64) h6:int128) (9,64); + word_subword (word_join (h8:int64) h7:int128) (9,64); + word_ushr h8 9] /\ + (n EXP 2) MOD 2 EXP 521 = + 2 EXP 512 * val(word_and h0 (word 511):int64) + + bignum_of_wordlist [l0; l1; l2; l3; l4; l5; l6; l7]` + (CONJUNCTS_THEN SUBST_ALL_TAC) THENL + [MATCH_MP_TAC DIVMOD_UNIQ THEN + REWRITE_TAC[VAL_WORD_AND_MASK_WORD; ARITH_RULE `511 = 2 EXP 9 - 1`] THEN + CONJ_TAC THENL + [FIRST_X_ASSUM(fun th -> GEN_REWRITE_TAC LAND_CONV [SYM th]) THEN + ASM_REWRITE_TAC[ADD_ASSOC; EQ_ADD_RCANCEL] THEN + REWRITE_TAC[bignum_of_wordlist; VAL_WORD_USHR] THEN + SIMP_TAC[VAL_WORD_SUBWORD_JOIN_64; DIMINDEX_64; ARITH_LE; ARITH_LT] THEN + ARITH_TAC; + MATCH_MP_TAC(ARITH_RULE + `x < 2 EXP (64 * 8) ==> 2 EXP 512 * h MOD 2 EXP 9 + x < 2 EXP 521`) THEN + MATCH_MP_TAC BIGNUM_OF_WORDLIST_BOUND THEN REWRITE_TAC[LENGTH; ARITH]]; + ALL_TAC] THEN + + (*** The net comparison h + l >= p_521 ***) + + SUBGOAL_THEN + `&(val (word_or h0 (word 18446744073709551104))):real = + (&2 pow 64 - &2 pow 9) + &(val(word_and h0 (word 511):int64))` + SUBST_ALL_TAC THENL + [ONCE_REWRITE_TAC[WORD_BITWISE_RULE + `word_or a b = word_or b (word_and a (word_not b))`] THEN + SIMP_TAC[VAL_WORD_OR_DISJOINT; WORD_BITWISE_RULE + `word_and x (word_and y (word_not x)) = word 0`] THEN + CONV_TAC(DEPTH_CONV WORD_NUM_RED_CONV) THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN REAL_ARITH_TAC; + ALL_TAC] THEN + SUBGOAL_THEN `carry_s215 <=> p_521 <= h + l` SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LE THEN EXISTS_TAC `576` THEN + MAP_EVERY EXPAND_TAC ["h"; "l"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist; p_521] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ALL_TAC] THEN + + (*** The final correction ***) + + ARM_ACCSTEPS_TAC P521_JDOUBLE_EXEC (216--224) (216--230) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[REAL_OF_NUM_CLAUSES] THEN + CONV_TAC SYM_CONV THEN CONV_TAC(RAND_CONV BIGNUM_LEXPAND_CONV) THEN + ASM_REWRITE_TAC[] THEN MATCH_MP_TAC EQUAL_FROM_CONGRUENT_MOD_MOD THEN + MAP_EVERY EXISTS_TAC + [`521`; + `if h + l < p_521 then &h + &l:real else (&h + &l) - &p_521`] THEN + REPEAT CONJ_TAC THENL + [BOUNDER_TAC[]; + REWRITE_TAC[p_521] THEN ARITH_TAC; + REWRITE_TAC[p_521] THEN ARITH_TAC; + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + REWRITE_TAC[GSYM NOT_LT] THEN ABBREV_TAC `bb <=> h + l < p_521` THEN + MAP_EVERY EXPAND_TAC ["h"; "l"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist; p_521] THEN + REWRITE_TAC[VAL_WORD_AND_MASK_WORD; ARITH_RULE `511 = 2 EXP 9 - 1`] THEN + REWRITE_TAC[REAL_OF_NUM_MOD] THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC NUM_REDUCE_CONV THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC; + ASM_SIMP_TAC[MOD_CASES; ARITH_RULE + `h < p /\ l <= p ==> h + l < 2 * p`] THEN + SIMP_TAC[REAL_OF_NUM_CLAUSES; REAL_OF_NUM_SUB; COND_SWAP; GSYM NOT_LE] THEN + MESON_TAC[]]);; + +(* ------------------------------------------------------------------------- *) +(* Instances of mul. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_MUL_P521_TAC = + ARM_MACRO_SIM_ABBREV_TAC p521_jdouble_mc 373 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1 p2 n2. + !a. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 9)) t = a + ==> + !b. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 9)) t = b + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0x29f0) (word_add (read p3 t) (word n3),72) /\ + nonoverlapping (read X27 t,216) (read X26 t,216) /\ + nonoverlapping (read X26 t,216) (stackpointer,512) /\ + nonoverlapping (read X27 t,216) (stackpointer,512) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p521_jdouble_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X26 s = read X26 t /\ + read X27 s = read X27 t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 9)) s = + a /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 9)) s = + b) + (\s. read PC s = pcout /\ + (a < p_521 /\ b < p_521 + ==> read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 9)) s = (a * b) MOD p_521)) + (MAYCHANGE [PC; X0; X1; X3; X4; X5; X6; X7; X8; X9; + X10; X11; X12; X13; X14; X15; X16; X17; X19; + X20; X21; X22; X23; X24] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 9)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + (*** Globalize the a < p_521 /\ b < p_521 assumption for simplicity ***) + + ASM_CASES_TAC `a < p_521 /\ b < p_521` THENL + [ASM_REWRITE_TAC[] THEN FIRST_X_ASSUM(CONJUNCTS_THEN ASSUME_TAC); + ARM_SIM_TAC P521_JDOUBLE_EXEC (1--373)] THEN + + (*** Digitize, deduce the bound on the top words ***) + + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "y_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "x_" o lhand o concl) THEN + SUBGOAL_THEN + `a DIV 2 EXP 512 < 2 EXP 9 /\ b DIV 2 EXP 512 < 2 EXP 9` + MP_TAC THENL + [MAP_EVERY UNDISCH_TAC [`a < p_521`; `b < p_521`] THEN + REWRITE_TAC[p_521] THEN ARITH_TAC; + MAP_EVERY EXPAND_TAC ["a"; "b"] THEN + CONV_TAC(LAND_CONV(ONCE_DEPTH_CONV BIGNUM_OF_WORDLIST_DIV_CONV)) THEN + ASM_REWRITE_TAC[] THEN STRIP_TAC] THEN + + (*** Simulate the initial multiplication ***) + + ARM_ACCSTEPS_TAC P521_JDOUBLE_EXEC (1--334) (1--334) THEN + RULE_ASSUM_TAC(REWRITE_RULE[COND_SWAP; GSYM WORD_BITVAL]) THEN + + (*** Introduce more systematic names for the high part digits ***) + + MAP_EVERY (fun s -> REABBREV_TAC s THEN POP_ASSUM SUBST_ALL_TAC) + [`h0 = read X24 s334`; + `h1 = read X1 s334`; + `h2 = read X0 s334`; + `h3 = read X15 s334`; + `h4 = read X16 s334`; + `h5 = read X17 s334`; + `h6 = read X19 s334`; + `h7 = read X20 s334`; + `h8 = read X21 s334`] THEN + + (*** Show that the core multiplication operation is correct ***) + + SUBGOAL_THEN + `2 EXP 512 * bignum_of_wordlist[h0;h1;h2;h3;h4;h5;h6;h7;h8] + + bignum_of_wordlist + [mullo_s3; sum_s35; sum_s74; sum_s111; + sum_s150; sum_s187; sum_s226; sum_s263] = + a * b` + ASSUME_TAC THENL + [ASM_REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`1088`; `&0:real`] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN CONJ_TAC THENL + [REWRITE_TAC[REAL_OF_NUM_CLAUSES; LE_0] THEN + REWRITE_TAC[EXP_2; ARITH_RULE `2 EXP 1088 = 2 EXP 544 EXP 2`] THEN + MATCH_MP_TAC LT_MULT2 THEN + MAP_EVERY UNDISCH_TAC [`a < p_521`; `b < p_521`] THEN + REWRITE_TAC[p_521] THEN ARITH_TAC; + REWRITE_TAC[INTEGER_CLOSED]] THEN + MAP_EVERY EXPAND_TAC ["a"; "b"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + CONV_TAC(RAND_CONV REAL_POLY_CONV) THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o + filter (is_ratconst o rand o concl) o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC) THEN + RULE_ASSUM_TAC(REWRITE_RULE[BIGNUM_FROM_MEMORY_BYTES])] THEN + + (*** Now simulate the shift-and-add of high and lower parts ***) + + ARM_ACCSTEPS_TAC P521_JDOUBLE_EXEC + [338;340;343;345;348;350;353;355;358] (335--358) THEN + + (*** Break up into high and low parts ***) + + ABBREV_TAC `h = (a * b) DIV 2 EXP 521` THEN + ABBREV_TAC `l = (a * b) MOD 2 EXP 521` THEN + SUBGOAL_THEN `h < p_521 /\ l <= p_521` STRIP_ASSUME_TAC THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"] THEN REWRITE_TAC[p_521] THEN + CONJ_TAC THENL [ALL_TAC; ARITH_TAC] THEN + SIMP_TAC[RDIV_LT_EQ; EXP_EQ_0; ARITH_EQ] THEN + TRANS_TAC LET_TRANS `(p_521 - 1) EXP 2` THEN + CONJ_TAC THENL [ALL_TAC; REWRITE_TAC[p_521] THEN ARITH_TAC] THEN + REWRITE_TAC[EXP_2] THEN MATCH_MP_TAC LE_MULT2 THEN CONJ_TAC THEN + MATCH_MP_TAC(ARITH_RULE `x < n ==> x <= n - 1`) THEN ASM_REWRITE_TAC[]; + ALL_TAC] THEN + SUBGOAL_THEN `(a * b) MOD p_521 = (h + l) MOD p_521` SUBST1_TAC THENL + [SUBST1_TAC(SYM(SPECL + [`a * b:num`; `2 EXP 521`] (CONJUNCT2 DIVISION_SIMP))) THEN + ASM_REWRITE_TAC[GSYM CONG] THEN MATCH_MP_TAC(NUMBER_RULE + `(e == 1) (mod p) ==> (e * h + l == h + l) (mod p)`) THEN + REWRITE_TAC[CONG; p_521] THEN ARITH_TAC; + ALL_TAC] THEN + SUBGOAL_THEN + `(a * b) DIV 2 EXP 521 = + bignum_of_wordlist + [word_subword (word_join (h1:int64) h0:int128) (9,64); + word_subword (word_join (h2:int64) h1:int128) (9,64); + word_subword (word_join (h3:int64) h2:int128) (9,64); + word_subword (word_join (h4:int64) h3:int128) (9,64); + word_subword (word_join (h5:int64) h4:int128) (9,64); + word_subword (word_join (h6:int64) h5:int128) (9,64); + word_subword (word_join (h7:int64) h6:int128) (9,64); + word_subword (word_join (h8:int64) h7:int128) (9,64); + word_ushr h8 9] /\ + (a * b) MOD 2 EXP 521 = + 2 EXP 512 * val(word_and h0 (word 511):int64) + + bignum_of_wordlist + [mullo_s3; sum_s35; sum_s74; sum_s111; + sum_s150; sum_s187; sum_s226; sum_s263]` + (CONJUNCTS_THEN SUBST_ALL_TAC) THENL + [MATCH_MP_TAC DIVMOD_UNIQ THEN + REWRITE_TAC[VAL_WORD_AND_MASK_WORD; ARITH_RULE `511 = 2 EXP 9 - 1`] THEN + CONJ_TAC THENL + [FIRST_X_ASSUM(fun th -> GEN_REWRITE_TAC LAND_CONV [SYM th]) THEN + CONV_TAC(ONCE_DEPTH_CONV BIGNUM_LEXPAND_CONV) THEN + ASM_REWRITE_TAC[ADD_ASSOC; EQ_ADD_RCANCEL] THEN + REWRITE_TAC[bignum_of_wordlist; VAL_WORD_USHR] THEN + SIMP_TAC[VAL_WORD_SUBWORD_JOIN_64; DIMINDEX_64; ARITH_LE; ARITH_LT] THEN + ARITH_TAC; + MATCH_MP_TAC(ARITH_RULE + `x < 2 EXP (64 * 8) ==> 2 EXP 512 * h MOD 2 EXP 9 + x < 2 EXP 521`) THEN + MATCH_MP_TAC BIGNUM_OF_WORDLIST_BOUND THEN REWRITE_TAC[LENGTH; ARITH]]; + ALL_TAC] THEN + + (*** The net comparison h + l >= p_521 ***) + + SUBGOAL_THEN + `&(val (word_or h0 (word 18446744073709551104))):real = + (&2 pow 64 - &2 pow 9) + &(val(word_and h0 (word 511):int64))` + SUBST_ALL_TAC THENL + [ONCE_REWRITE_TAC[WORD_BITWISE_RULE + `word_or a b = word_or b (word_and a (word_not b))`] THEN + SIMP_TAC[VAL_WORD_OR_DISJOINT; WORD_BITWISE_RULE + `word_and x (word_and y (word_not x)) = word 0`] THEN + CONV_TAC(DEPTH_CONV WORD_NUM_RED_CONV) THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN REAL_ARITH_TAC; + ALL_TAC] THEN + SUBGOAL_THEN `carry_s358 <=> p_521 <= h + l` SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LE THEN EXISTS_TAC `576` THEN + MAP_EVERY EXPAND_TAC ["h"; "l"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist; p_521] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ALL_TAC] THEN + + (*** The final correction ***) + + ARM_ACCSTEPS_TAC P521_JDOUBLE_EXEC (359--367) (359--373) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC SYM_CONV THEN CONV_TAC(RAND_CONV BIGNUM_LEXPAND_CONV) THEN + ASM_REWRITE_TAC[] THEN MATCH_MP_TAC EQUAL_FROM_CONGRUENT_MOD_MOD THEN + MAP_EVERY EXISTS_TAC + [`521`; + `if h + l < p_521 then &h + &l:real else (&h + &l) - &p_521`] THEN + REPEAT CONJ_TAC THENL + [BOUNDER_TAC[]; + REWRITE_TAC[p_521] THEN ARITH_TAC; + REWRITE_TAC[p_521] THEN ARITH_TAC; + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + REWRITE_TAC[GSYM NOT_LT] THEN ABBREV_TAC `bb <=> h + l < p_521` THEN + MAP_EVERY EXPAND_TAC ["h"; "l"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist; p_521] THEN + REWRITE_TAC[VAL_WORD_AND_MASK_WORD; ARITH_RULE `511 = 2 EXP 9 - 1`] THEN + REWRITE_TAC[REAL_OF_NUM_MOD] THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC NUM_REDUCE_CONV THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC; + ASM_SIMP_TAC[MOD_CASES; ARITH_RULE + `h < p /\ l <= p ==> h + l < 2 * p`] THEN + SIMP_TAC[REAL_OF_NUM_CLAUSES; REAL_OF_NUM_SUB; COND_SWAP; GSYM NOT_LE] THEN + MESON_TAC[]]);; + +(* ------------------------------------------------------------------------- *) +(* Instances of add. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_ADD_P521_TAC = + ARM_MACRO_SIM_ABBREV_TAC p521_jdouble_mc 37 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 9)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 9)) t = n + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0x29f0) (word_add (read p3 t) (word n3),72) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p521_jdouble_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X26 s = read X26 t /\ + read X27 s = read X27 t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 9)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 9)) s = + n) + (\s. read PC s = pcout /\ + (m < p_521 /\ n < p_521 + ==> read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 9)) s = (m + n) MOD p_521)) + (MAYCHANGE [PC; X3; X4; X5; X6; X7; X8; X9; X10; X11; X12; X13] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 9)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + (*** Globalize the m < p_521 /\ n < p_521 assumption ***) + + ASM_CASES_TAC `m < p_521 /\ n < p_521` THENL + [ASM_REWRITE_TAC[]; ARM_SIM_TAC P521_JDOUBLE_EXEC (1--37)] THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "m_" o lhand o concl) THEN + + (*** Initial non-overflowing addition s = x + y + 1 ***) + + ARM_ACCSTEPS_TAC P521_JDOUBLE_EXEC [4;5;8;9;12;13;16;17;20] (1--20) THEN + SUBGOAL_THEN + `bignum_of_wordlist + [sum_s4;sum_s5;sum_s8;sum_s9;sum_s12;sum_s13;sum_s16;sum_s17;sum_s20] = + m + n + 1` + ASSUME_TAC THENL + [REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`576`; `&0:real`] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN + CONJ_TAC THENL + [MAP_EVERY UNDISCH_TAC [`m < p_521`; `n < p_521`] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_LT; GSYM REAL_OF_NUM_ADD] THEN + REWRITE_TAC[p_521] THEN REAL_ARITH_TAC; + REWRITE_TAC[INTEGER_CLOSED]] THEN + MAP_EVERY EXPAND_TAC ["m"; "n"] THEN + REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** The net comparison s >= 2^521 <=> x + y >= p_521 ***) + + ARM_STEPS_TAC P521_JDOUBLE_EXEC (21--22) THEN + RULE_ASSUM_TAC(REWRITE_RULE[WORD_UNMASK_64; NOT_LT]) THEN + SUBGOAL_THEN `512 <= val(sum_s20:int64) <=> p_521 <= m + n` + SUBST_ALL_TAC THENL + [TRANS_TAC EQ_TRANS `512 <= (m + n + 1) DIV 2 EXP 512` THEN + CONJ_TAC THENL [ALL_TAC; REWRITE_TAC[p_521] THEN ARITH_TAC] THEN + FIRST_X_ASSUM(fun th -> + GEN_REWRITE_TAC (RAND_CONV o RAND_CONV o LAND_CONV) [SYM th]) THEN + CONV_TAC(ONCE_DEPTH_CONV BIGNUM_OF_WORDLIST_DIV_CONV) THEN + REWRITE_TAC[]; + ALL_TAC] THEN + + (*** The final optional subtraction of either 1 or 2^521 ***) + + ARM_ACCSTEPS_TAC P521_JDOUBLE_EXEC (23::(25--32)) (23--37) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC SYM_CONV THEN CONV_TAC(RAND_CONV BIGNUM_LEXPAND_CONV) THEN + ASM_REWRITE_TAC[] THEN MATCH_MP_TAC EQUAL_FROM_CONGRUENT_MOD_MOD THEN + MAP_EVERY EXISTS_TAC + [`64 * 9`; + `if p_521 <= m + n then &(m + n + 1) - &2 pow 521 + else &(m + n + 1) - &1:real`] THEN + REPEAT CONJ_TAC THENL + [MATCH_MP_TAC BIGNUM_OF_WORDLIST_BOUND THEN + REWRITE_TAC[LENGTH] THEN ARITH_TAC; + REWRITE_TAC[p_521] THEN ARITH_TAC; + REWRITE_TAC[p_521] THEN ARITH_TAC; + ALL_TAC; + ASM_SIMP_TAC[MOD_ADD_CASES; GSYM NOT_LE; COND_SWAP] THEN + COND_CASES_TAC THEN ASM_SIMP_TAC[GSYM REAL_OF_NUM_SUB] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; p_521] THEN REAL_ARITH_TAC] THEN + ABBREV_TAC `s = m + n + 1` THEN POP_ASSUM(K ALL_TAC) THEN EXPAND_TAC "s" THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + REWRITE_TAC[WORD_AND_MASK; GSYM NOT_LE] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC NUM_REDUCE_CONV THEN CONV_TAC WORD_REDUCE_CONV THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instances of sub. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_SUB_P521_TAC = + ARM_MACRO_SIM_ABBREV_TAC p521_jdouble_mc 34 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 9)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 9)) t = n + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0x29f0) (word_add (read p3 t) (word n3),72) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p521_jdouble_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X26 s = read X26 t /\ + read X27 s = read X27 t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 9)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 9)) s = + n) + (\s. read PC s = pcout /\ + (m < p_521 /\ n < p_521 + ==> &(read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 9)) s) = (&m - &n) rem &p_521)) + (MAYCHANGE [PC; X3; X4; X5; X6; X7; X8; X9; X10; X11; X12; X13] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 9)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "m_" o lhand o concl) THEN + + (*** Initial subtraction x - y, comparison result ***) + + ARM_ACCSTEPS_TAC P521_JDOUBLE_EXEC [3;4;7;8;11;12;15;16;19] (1--19) THEN + + SUBGOAL_THEN `carry_s19 <=> m < n` SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN EXISTS_TAC `576` THEN + MAP_EVERY EXPAND_TAC ["m"; "n"] THEN + REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ALL_TAC] THEN + + (*** Further optional subtraction mod 2^521 ***) + + ARM_ACCSTEPS_TAC P521_JDOUBLE_EXEC (20--28) (20--34) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN STRIP_TAC THEN + + (*** Map things into the reals, doing case analysis over comparison ***) + + TRANS_TAC EQ_TRANS `if m < n then &m - &n + &p_521:int else &m - &n` THEN + CONJ_TAC THENL + [ONCE_REWRITE_TAC[int_eq] THEN ONCE_REWRITE_TAC[COND_RAND] THEN + REWRITE_TAC[int_of_num_th; int_sub_th; int_add_th]; + CONV_TAC SYM_CONV THEN MATCH_MP_TAC INT_REM_UNIQ THEN + EXISTS_TAC `if m:num < n then --(&1):int else &0` THEN + MAP_EVERY UNDISCH_TAC [`m < p_521`; `n < p_521`] THEN + REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES; p_521] THEN INT_ARITH_TAC] THEN + + (*** Hence show that we get the right result in 521 bits ***) + + CONV_TAC SYM_CONV THEN + CONV_TAC(RAND_CONV(RAND_CONV BIGNUM_LEXPAND_CONV)) THEN + ASM_REWRITE_TAC[SYM(NUM_REDUCE_CONV `2 EXP 9 - 1`)] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`521`; `&0:real`] THEN CONJ_TAC THENL + [MAP_EVERY UNDISCH_TAC [`m < p_521`; `n < p_521`] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; p_521] THEN REAL_ARITH_TAC; + ALL_TAC] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; REWRITE_TAC[INTEGER_CLOSED]] THEN + ABBREV_TAC `bb <=> m:num < n` THEN MAP_EVERY EXPAND_TAC ["m"; "n"] THEN + REWRITE_TAC[bignum_of_wordlist; VAL_WORD_AND_MASK_WORD] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; REAL_OF_NUM_MOD; p_521] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instances of weakmul. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_WEAKMUL_P521_TAC = + ARM_MACRO_SIM_ABBREV_TAC p521_jdouble_mc 362 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1 p2 n2. + !a. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 9)) t = a + ==> + !b. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 9)) t = b + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0x29f0) (word_add (read p3 t) (word n3),72) /\ + nonoverlapping (read X27 t,216) (read X26 t,216) /\ + nonoverlapping (read X26 t,216) (stackpointer,512) /\ + nonoverlapping (read X27 t,216) (stackpointer,512) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p521_jdouble_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X26 s = read X26 t /\ + read X27 s = read X27 t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 9)) s = + a /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 9)) s = + b) + (\s. read PC s = pcout /\ + (a < p_521 /\ b < p_521 + ==> read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 9)) s < 2 * p_521 /\ + (read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 9)) s == a * b) (mod p_521))) + (MAYCHANGE [PC; X0; X1; X3; X4; X5; X6; X7; X8; X9; + X10; X11; X12; X13; X14; X15; X16; X17; X19; + X20; X21; X22; X23; X24] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 9)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + (*** Globalize the a < p_521 /\ b < p_521 assumption for simplicity ***) + + ASM_CASES_TAC `a < p_521 /\ b < p_521` THENL + [ASM_REWRITE_TAC[] THEN FIRST_X_ASSUM(CONJUNCTS_THEN ASSUME_TAC); + ARM_SIM_TAC P521_JDOUBLE_EXEC (1--362)] THEN + + (*** Digitize, deduce the bound on the top words ***) + + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "y_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "x_" o lhand o concl) THEN + SUBGOAL_THEN + `a DIV 2 EXP 512 < 2 EXP 9 /\ b DIV 2 EXP 512 < 2 EXP 9` + MP_TAC THENL + [MAP_EVERY UNDISCH_TAC [`a < p_521`; `b < p_521`] THEN + REWRITE_TAC[p_521] THEN ARITH_TAC; + MAP_EVERY EXPAND_TAC ["a"; "b"] THEN + CONV_TAC(LAND_CONV(ONCE_DEPTH_CONV BIGNUM_OF_WORDLIST_DIV_CONV)) THEN + ASM_REWRITE_TAC[] THEN STRIP_TAC] THEN + + (*** Simulate the initial multiplication ***) + + ARM_ACCSTEPS_TAC P521_JDOUBLE_EXEC (1--334) (1--334) THEN + RULE_ASSUM_TAC(REWRITE_RULE[COND_SWAP; GSYM WORD_BITVAL]) THEN + + (*** Introduce more systematic names for the high part digits ***) + + MAP_EVERY (fun s -> REABBREV_TAC s THEN POP_ASSUM SUBST_ALL_TAC) + [`h0 = read X24 s334`; + `h1 = read X1 s334`; + `h2 = read X0 s334`; + `h3 = read X15 s334`; + `h4 = read X16 s334`; + `h5 = read X17 s334`; + `h6 = read X19 s334`; + `h7 = read X20 s334`; + `h8 = read X21 s334`] THEN + + (*** Show that the core multiplication operation is correct ***) + + SUBGOAL_THEN + `2 EXP 512 * bignum_of_wordlist[h0;h1;h2;h3;h4;h5;h6;h7;h8] + + bignum_of_wordlist + [mullo_s3; sum_s35; sum_s74; sum_s111; + sum_s150; sum_s187; sum_s226; sum_s263] = + a * b` + ASSUME_TAC THENL + [ASM_REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`1088`; `&0:real`] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN CONJ_TAC THENL + [REWRITE_TAC[REAL_OF_NUM_CLAUSES; LE_0] THEN + REWRITE_TAC[EXP_2; ARITH_RULE `2 EXP 1088 = 2 EXP 544 EXP 2`] THEN + MATCH_MP_TAC LT_MULT2 THEN + MAP_EVERY UNDISCH_TAC [`a < p_521`; `b < p_521`] THEN + REWRITE_TAC[p_521] THEN ARITH_TAC; + REWRITE_TAC[INTEGER_CLOSED]] THEN + MAP_EVERY EXPAND_TAC ["a"; "b"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + CONV_TAC(RAND_CONV REAL_POLY_CONV) THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o + filter (is_ratconst o rand o concl) o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC) THEN + RULE_ASSUM_TAC(REWRITE_RULE[BIGNUM_FROM_MEMORY_BYTES])] THEN + + (*** Break up into high and low parts ***) + + ABBREV_TAC `h = (a * b) DIV 2 EXP 521` THEN + ABBREV_TAC `l = (a * b) MOD 2 EXP 521` THEN + SUBGOAL_THEN `h < p_521 /\ l <= p_521` STRIP_ASSUME_TAC THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"] THEN REWRITE_TAC[p_521] THEN + CONJ_TAC THENL [ALL_TAC; ARITH_TAC] THEN + SIMP_TAC[RDIV_LT_EQ; EXP_EQ_0; ARITH_EQ] THEN + TRANS_TAC LET_TRANS `(p_521 - 1) EXP 2` THEN + CONJ_TAC THENL [ALL_TAC; REWRITE_TAC[p_521] THEN ARITH_TAC] THEN + REWRITE_TAC[EXP_2] THEN MATCH_MP_TAC LE_MULT2 THEN CONJ_TAC THEN + MATCH_MP_TAC(ARITH_RULE `x < n ==> x <= n - 1`) THEN ASM_REWRITE_TAC[]; + ALL_TAC] THEN + REWRITE_TAC[CONG] THEN + SUBGOAL_THEN `(a * b) MOD p_521 = (h + l) MOD p_521` SUBST1_TAC THENL + [SUBST1_TAC(SYM(SPECL + [`a * b:num`; `2 EXP 521`] (CONJUNCT2 DIVISION_SIMP))) THEN + ASM_REWRITE_TAC[GSYM CONG] THEN MATCH_MP_TAC(NUMBER_RULE + `(e == 1) (mod p) ==> (e * h + l == h + l) (mod p)`) THEN + REWRITE_TAC[CONG; p_521] THEN ARITH_TAC; + ALL_TAC] THEN + SUBGOAL_THEN + `(a * b) DIV 2 EXP 521 = + bignum_of_wordlist + [word_subword (word_join (h1:int64) h0:int128) (9,64); + word_subword (word_join (h2:int64) h1:int128) (9,64); + word_subword (word_join (h3:int64) h2:int128) (9,64); + word_subword (word_join (h4:int64) h3:int128) (9,64); + word_subword (word_join (h5:int64) h4:int128) (9,64); + word_subword (word_join (h6:int64) h5:int128) (9,64); + word_subword (word_join (h7:int64) h6:int128) (9,64); + word_subword (word_join (h8:int64) h7:int128) (9,64); + word_ushr h8 9] /\ + (a * b) MOD 2 EXP 521 = + 2 EXP 512 * val(word_and h0 (word 511):int64) + + bignum_of_wordlist + [mullo_s3; sum_s35; sum_s74; sum_s111; + sum_s150; sum_s187; sum_s226; sum_s263]` + (CONJUNCTS_THEN SUBST_ALL_TAC) THENL + [MATCH_MP_TAC DIVMOD_UNIQ THEN + REWRITE_TAC[VAL_WORD_AND_MASK_WORD; ARITH_RULE `511 = 2 EXP 9 - 1`] THEN + CONJ_TAC THENL + [FIRST_X_ASSUM(fun th -> GEN_REWRITE_TAC LAND_CONV [SYM th]) THEN + CONV_TAC(ONCE_DEPTH_CONV BIGNUM_LEXPAND_CONV) THEN + ASM_REWRITE_TAC[ADD_ASSOC; EQ_ADD_RCANCEL] THEN + REWRITE_TAC[bignum_of_wordlist; VAL_WORD_USHR] THEN + SIMP_TAC[VAL_WORD_SUBWORD_JOIN_64; DIMINDEX_64; ARITH_LE; ARITH_LT] THEN + ARITH_TAC; + MATCH_MP_TAC(ARITH_RULE + `x < 2 EXP (64 * 8) ==> 2 EXP 512 * h MOD 2 EXP 9 + x < 2 EXP 521`) THEN + MATCH_MP_TAC BIGNUM_OF_WORDLIST_BOUND THEN REWRITE_TAC[LENGTH; ARITH]]; + ALL_TAC] THEN + + (*** Now the simple addition of h + l as the result ***) + + ARM_ACCSTEPS_TAC P521_JDOUBLE_EXEC + [337; 339; 342; 344; 347; 349; 352; 354; 357] (335--362) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + + MATCH_MP_TAC(MESON[] + `x' < a /\ x = x' ==> x < a /\ x MOD p = x' MOD p`) THEN + CONJ_TAC THENL + [MAP_EVERY UNDISCH_TAC [`h < p_521`; `l <= p_521`] THEN ARITH_TAC; + ALL_TAC] THEN + CONV_TAC(LAND_CONV BIGNUM_LEXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`576`; `&0:real`] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN CONJ_TAC THENL + [REWRITE_TAC[REAL_OF_NUM_CLAUSES; LE_0] THEN + MAP_EVERY UNDISCH_TAC [`h < p_521`; `l <= p_521`] THEN + REWRITE_TAC[p_521] THEN ARITH_TAC; + REWRITE_TAC[INTEGER_CLOSED]] THEN + MAP_EVERY EXPAND_TAC ["h"; "l"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist; p_521] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + REWRITE_TAC[VAL_WORD_AND_MASK_WORD; ARITH_RULE `511 = 2 EXP 9 - 1`] THEN + REWRITE_TAC[REAL_OF_NUM_MOD] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instance (12,9) of cmsub (the only one used in this code). *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_CMSUBC9_P521_TAC = + ARM_MACRO_SIM_ABBREV_TAC p521_jdouble_mc 107 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 9)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 9)) t = n + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0x29f0) (word_add (read p3 t) (word n3),72) /\ + nonoverlapping (read X27 t,216) (read X26 t,216) /\ + nonoverlapping (read X26 t,216) (stackpointer,512) /\ + nonoverlapping (read X27 t,216) (stackpointer,512) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p521_jdouble_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X26 s = read X26 t /\ + read X27 s = read X27 t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 9)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 9)) s = + n) + (\s. read PC s = pcout /\ + (m < 2 * p_521 /\ n <= p_521 + ==> &(read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 9)) s) = (&12 * &m - &9 * &n) rem &p_521)) + (MAYCHANGE [PC; X0; X1; X2; X3; X4; X5; X6; X7; X8; X9; + X10; X11; X12; X13; X14; X15; X16; X17; + X19; X20; X21; X22; X23] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 9)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + (*** Globalize the bound assumption for simplicity ***) + + ASM_CASES_TAC `m < 2 * p_521 /\ n <= p_521` THENL + [ASM_REWRITE_TAC[] THEN FIRST_X_ASSUM(CONJUNCTS_THEN ASSUME_TAC); + ARM_SIM_TAC P521_JDOUBLE_EXEC (1--107)] THEN + + (*** Digitize and introduce the sign-flipped version of n ***) + + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "m_" o lhand o concl) THEN + ABBREV_TAC + `n' = bignum_of_wordlist + [word_not n_0; word_not n_1; word_not n_2; word_not n_3; word_not n_4; + word_not n_5; word_not n_6; word_not n_7; word_xor n_8 (word 0x1FF)]` THEN + + SUBGOAL_THEN `p_521 - n = n'` ASSUME_TAC THENL + [MATCH_MP_TAC(ARITH_RULE `n + m:num = p ==> p - n = m`) THEN + MAP_EVERY EXPAND_TAC ["n"; "n'"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + SUBGOAL_THEN + `&(val(word_xor (n_8:int64) (word 511))):real = &2 pow 9 - &1 - &(val n_8)` + SUBST1_TAC THENL + [REWRITE_TAC[REAL_VAL_WORD_XOR]; + REWRITE_TAC[REAL_VAL_WORD_NOT; DIMINDEX_64; p_521] THEN + REAL_ARITH_TAC] THEN + CONV_TAC WORD_REDUCE_CONV THEN CONV_TAC REAL_RAT_REDUCE_CONV THEN + MATCH_MP_TAC(REAL_ARITH + `n':real = n ==> (n + c) - &2 * n' = c - n`) THEN + REWRITE_TAC[VAL_WORD_AND_MASK_WORD; ARITH_RULE `511 = 2 EXP 9 - 1`] THEN + REWRITE_TAC[REAL_OF_NUM_EQ] THEN MATCH_MP_TAC MOD_LT THEN + UNDISCH_TAC `n <= p_521` THEN + DISCH_THEN(MP_TAC o MATCH_MP (ARITH_RULE + `n <= p ==> n DIV 2 EXP 512 <= p DIV 2 EXP 512`)) THEN + EXPAND_TAC "n" THEN + CONV_TAC(ONCE_DEPTH_CONV BIGNUM_OF_WORDLIST_DIV_CONV) THEN + REWRITE_TAC[p_521] THEN ARITH_TAC; + ALL_TAC] THEN + + SUBGOAL_THEN + `(&12 * &m - &9 * &n) rem &p_521 = + (&12 * &m + &9 * (&p_521 - &n)) rem &p_521` + SUBST1_TAC THENL + [REWRITE_TAC[INT_REM_EQ] THEN CONV_TAC INTEGER_RULE; + ASM_SIMP_TAC[INT_OF_NUM_CLAUSES; INT_OF_NUM_SUB; INT_OF_NUM_REM]] THEN + + (*** The basic multiply-add block = ca, then forget the components ***) + + ABBREV_TAC `ca = 12 * m + 9 * n'` THEN + SUBGOAL_THEN `ca < 2 EXP 527` ASSUME_TAC THENL + [MAP_EVERY EXPAND_TAC ["ca"; "n'"] THEN UNDISCH_TAC `m < 2 * p_521` THEN + REWRITE_TAC[p_521] THEN ARITH_TAC; + ALL_TAC] THEN + + ARM_ACCSTEPS_TAC P521_JDOUBLE_EXEC (1--86) (1--86) THEN + SUBGOAL_THEN + `bignum_of_wordlist + [sum_s37; sum_s73; sum_s74; sum_s76; + sum_s78; sum_s80; sum_s82; sum_s84; sum_s86] = ca` + ASSUME_TAC THENL + [REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`576`; `&0:real`] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN + EXPAND_TAC "ca" THEN CONJ_TAC THENL + [UNDISCH_TAC `m < 2 * p_521` THEN EXPAND_TAC "n'" THEN + REWRITE_TAC[REAL_OF_NUM_CLAUSES; LE_0; p_521] THEN ARITH_TAC; + REWRITE_TAC[INTEGER_CLOSED]] THEN + UNDISCH_THEN `p_521 - n = n'` (K ALL_TAC) THEN + MAP_EVERY EXPAND_TAC ["m"; "n'"] THEN + REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + REWRITE_TAC[REAL_VAL_WORD_NOT; DIMINDEX_64] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC) THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o check (free_in `m:num` o concl))) THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o check (free_in `n:num` o concl))) THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o check (free_in `n':num` o concl)))] THEN + + (*** Breaking the problem down to (h + l) MOD p_521 ***) + + SUBGOAL_THEN `ca MOD p_521 = (ca DIV 2 EXP 521 + ca MOD 2 EXP 521) MOD p_521` + SUBST1_TAC THENL + [GEN_REWRITE_TAC (LAND_CONV o LAND_CONV) + [ARITH_RULE `ca = 2 EXP 521 * ca DIV 2 EXP 521 + ca MOD 2 EXP 521`] THEN + REWRITE_TAC[GSYM CONG] THEN MATCH_MP_TAC(NUMBER_RULE + `(e == 1) (mod p) ==> (e * h + l == h + l) (mod p)`) THEN + REWRITE_TAC[p_521; CONG] THEN ARITH_TAC; + ALL_TAC] THEN + SUBGOAL_THEN `ca DIV 2 EXP 521 < 2 EXP 64 /\ ca MOD 2 EXP 521 < 2 EXP 521` + STRIP_ASSUME_TAC THENL + [REWRITE_TAC[MOD_LT_EQ] THEN UNDISCH_TAC `ca < 2 EXP 527` THEN ARITH_TAC; + ALL_TAC] THEN + + (*** Splitting up and stuffing 1 bits into the low part ***) + + ARM_STEPS_TAC P521_JDOUBLE_EXEC (87--89) THEN + RULE_ASSUM_TAC(REWRITE_RULE[GSYM WORD_AND_ASSOC; DIMINDEX_64; + NUM_REDUCE_CONV `9 MOD 64`]) THEN + MAP_EVERY ABBREV_TAC + [`h:int64 = word_ushr sum_s86 9`; + `d:int64 = word_or sum_s86 (word 18446744073709551104)`; + `dd:int64 = word_and sum_s73 (word_and sum_s74 (word_and sum_s76 + (word_and sum_s78 (word_and sum_s80 (word_and sum_s82 sum_s84)))))`] THEN + + (*** The comparison in its direct condensed form ***) + + ARM_ACCSTEPS_TAC P521_JDOUBLE_EXEC (90--92) (90--92) THEN + SUBGOAL_THEN + `carry_s92 <=> + 2 EXP 192 <= + 2 EXP 128 * val(d:int64) + 2 EXP 64 * val(dd:int64) + + val(h:int64) + val(sum_s37:int64) + 1` + (ASSUME_TAC o SYM) THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LE THEN EXISTS_TAC `192` THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Finish the simulation before completing the mathematics ***) + + ARM_ACCSTEPS_TAC P521_JDOUBLE_EXEC (93--101) (93--107) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(LAND_CONV BIGNUM_LEXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + DISCARD_STATE_TAC "s107" THEN + + (*** Evaluate d and un-condense the inequality ***) + + SUBGOAL_THEN + `val(d:int64) = 2 EXP 9 * (2 EXP 55 - 1) + val(sum_s86:int64) MOD 2 EXP 9` + SUBST_ALL_TAC THENL + [EXPAND_TAC "d" THEN ONCE_REWRITE_TAC[WORD_BITWISE_RULE + `word_or a b = word_or b (word_and a (word_not b))`] THEN + SIMP_TAC[VAL_WORD_OR_DISJOINT; WORD_BITWISE_RULE + `word_and x (word_and y (word_not x)) = word 0`] THEN + REWRITE_TAC[GSYM VAL_WORD_AND_MASK_WORD] THEN + CONV_TAC NUM_REDUCE_CONV THEN CONV_TAC WORD_REDUCE_CONV; + ALL_TAC] THEN + + SUBGOAL_THEN + `2 EXP 512 * val(sum_s86:int64) MOD 2 EXP 9 + + bignum_of_wordlist + [sum_s37; sum_s73; sum_s74; sum_s76; sum_s78; sum_s80; sum_s82; sum_s84] = + ca MOD 2 EXP 521` + (LABEL_TAC "*") THENL + [CONV_TAC SYM_CONV THEN EXPAND_TAC "ca" THEN + REWRITE_TAC[BIGNUM_OF_WORDLIST_SPLIT_RULE(8,1)] THEN + REWRITE_TAC[ARITH_RULE `2 EXP 521 = 2 EXP 512 * 2 EXP 9`] THEN + REWRITE_TAC[SYM(NUM_REDUCE_CONV `64 * 8`)] THEN + SIMP_TAC[LENGTH; ARITH_LT; ARITH_LE; MOD_MULT_MOD; ADD_CLAUSES; + ARITH_SUC; BIGNUM_OF_WORDLIST_BOUND; MOD_LT; DIV_LT; + MOD_MULT_ADD; DIV_MULT_ADD; EXP_EQ_0; ARITH_EQ] THEN + REWRITE_TAC[BIGNUM_OF_WORDLIST_SING] THEN ARITH_TAC; + ALL_TAC] THEN + + SUBGOAL_THEN + `2 EXP 521 <= ca MOD 2 EXP 521 + val(h:int64) + 1 <=> carry_s92` + MP_TAC THENL + [REMOVE_THEN "*" (SUBST1_TAC o SYM) THEN EXPAND_TAC "carry_s92" THEN + ONCE_REWRITE_TAC[bignum_of_wordlist] THEN + MATCH_MP_TAC(TAUT + `!p q. ((p ==> ~r) /\ (q ==> ~s)) /\ (p <=> q) /\ (~p /\ ~q ==> (r <=> s)) + ==> (r <=> s)`) THEN + MAP_EVERY EXISTS_TAC + [`bignum_of_wordlist + [sum_s73; sum_s74; sum_s76; sum_s78; sum_s80; sum_s82; sum_s84] < + 2 EXP (64 * 7) - 1`; + `val(dd:int64) < 2 EXP 64 - 1`] THEN + CONJ_TAC THENL + [CONJ_TAC THEN MATCH_MP_TAC(ARITH_RULE + `2 EXP 64 * b + d < 2 EXP 64 * (a + 1) + c ==> a < b ==> ~(c <= d)`) THEN + MP_TAC(SPEC `h:int64` VAL_BOUND_64) THEN + MP_TAC(SPEC `sum_s37:int64` VAL_BOUND_64) THEN ARITH_TAC; + SIMP_TAC[BIGNUM_OF_WORDLIST_LT_MAX; LENGTH; ARITH_EQ; ARITH_SUC]] THEN + REWRITE_TAC[GSYM NOT_ALL] THEN MP_TAC(ISPEC `dd:int64` VAL_EQ_MAX) THEN + SIMP_TAC[VAL_BOUND_64; DIMINDEX_64; ARITH_RULE + `a < n ==> (a < n - 1 <=> ~(a = n - 1))`] THEN + DISCH_THEN SUBST1_TAC THEN EXPAND_TAC "dd" THEN + REWRITE_TAC[WORD_NOT_AND; ALL; WORD_OR_EQ_0] THEN + REWRITE_TAC[WORD_RULE `word_not d = e <=> d = word_not e`] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN SUBST1_TAC) THEN + REWRITE_TAC[bignum_of_wordlist] THEN CONV_TAC WORD_REDUCE_CONV THEN + MP_TAC(ARITH_RULE `val(sum_s86:int64) MOD 2 EXP 9 = 511 \/ + val(sum_s86:int64) MOD 2 EXP 9 < 511`) THEN + MP_TAC(SPEC `h:int64` VAL_BOUND_64) THEN + MP_TAC(SPEC `sum_s37:int64` VAL_BOUND_64) THEN ARITH_TAC; + FIRST_X_ASSUM(K ALL_TAC o check (is_iff o concl))] THEN + + (*** Also evaluate h ***) + + SUBGOAL_THEN `val(h:int64) = ca DIV 2 EXP 521` SUBST_ALL_TAC THENL + [EXPAND_TAC "h" THEN REWRITE_TAC[VAL_WORD_USHR] THEN + EXPAND_TAC "ca" THEN + CONV_TAC(ONCE_DEPTH_CONV BIGNUM_OF_WORDLIST_DIV_CONV) THEN + REWRITE_TAC[]; + ALL_TAC] THEN + + (*** Now complete the mathematics ***) + + SUBGOAL_THEN + `2 EXP 521 <= ca MOD 2 EXP 521 + ca DIV 2 EXP 521 + 1 <=> + p_521 <= ca DIV 2 EXP 521 + ca MOD 2 EXP 521` + SUBST1_TAC THENL [REWRITE_TAC[p_521] THEN ARITH_TAC; DISCH_TAC] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC EQUAL_FROM_CONGRUENT_MOD_MOD THEN + MAP_EVERY EXISTS_TAC + [`521`; + `if ca DIV 2 EXP 521 + ca MOD 2 EXP 521 < p_521 + then &(ca DIV 2 EXP 521 + ca MOD 2 EXP 521) + else &(ca DIV 2 EXP 521 + ca MOD 2 EXP 521) - &p_521`] THEN + REPEAT CONJ_TAC THENL + [BOUNDER_TAC[]; + REWRITE_TAC[p_521] THEN ARITH_TAC; + REWRITE_TAC[p_521] THEN ARITH_TAC; + ALL_TAC; + W(MP_TAC o PART_MATCH (lhand o rand) MOD_CASES o rand o lhand o snd) THEN + ANTS_TAC THENL + [UNDISCH_TAC `ca < 2 EXP 527` THEN REWRITE_TAC[p_521] THEN ARITH_TAC; + DISCH_THEN SUBST1_TAC] THEN + ONCE_REWRITE_TAC[COND_RAND] THEN + SIMP_TAC[GSYM NOT_LE; COND_SWAP; GSYM REAL_OF_NUM_SUB; COND_ID]] THEN + ASM_REWRITE_TAC[GSYM NOT_LE; COND_SWAP] THEN + REMOVE_THEN "*" (SUBST1_TAC o SYM) THEN + REWRITE_TAC[SYM(NUM_REDUCE_CONV `2 EXP 9 - 1`)] THEN + REWRITE_TAC[VAL_WORD_AND_MASK_WORD; bignum_of_wordlist] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; REAL_OF_NUM_MOD; p_521] THEN + CONV_TAC NUM_REDUCE_CONV THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instances of cmsub41 (there is only one). *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_CMSUB41_P521_TAC = + ARM_MACRO_SIM_ABBREV_TAC p521_jdouble_mc 57 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 9)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 9)) t = n + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0x29f0) (word_add (read p3 t) (word n3),72) /\ + nonoverlapping (read X27 t,216) (read X26 t,216) /\ + nonoverlapping (read X26 t,216) (stackpointer,512) /\ + nonoverlapping (read X27 t,216) (stackpointer,512) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p521_jdouble_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X26 s = read X26 t /\ + read X27 s = read X27 t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 9)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 9)) s = + n) + (\s. read PC s = pcout /\ + (m < 2 * p_521 /\ n <= p_521 + ==> &(read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 9)) s) = (&4 * &m - &n) rem &p_521)) + (MAYCHANGE [PC; X0; X1; X2; X3; X4; X5; X6; X7; X8; X9; + X10; X11; X12; X13; X14; X15] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 9)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + (*** Globalize the bound assumption for simplicity ***) + + ASM_CASES_TAC `m < 2 * p_521 /\ n <= p_521` THENL + [ASM_REWRITE_TAC[] THEN FIRST_X_ASSUM(CONJUNCTS_THEN ASSUME_TAC); + ARM_SIM_TAC P521_JDOUBLE_EXEC (1--57)] THEN + + (*** Digitize and introduce the sign-flipped version of n ***) + + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "m_" o lhand o concl) THEN + ABBREV_TAC + `n' = bignum_of_wordlist + [word_not n_0; word_not n_1; word_not n_2; word_not n_3; word_not n_4; + word_not n_5; word_not n_6; word_not n_7; word_xor n_8 (word 0x1FF)]` THEN + + SUBGOAL_THEN `p_521 - n = n'` ASSUME_TAC THENL + [MATCH_MP_TAC(ARITH_RULE `n + m:num = p ==> p - n = m`) THEN + MAP_EVERY EXPAND_TAC ["n"; "n'"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + SUBGOAL_THEN + `&(val(word_xor (n_8:int64) (word 511))):real = &2 pow 9 - &1 - &(val n_8)` + SUBST1_TAC THENL + [REWRITE_TAC[REAL_VAL_WORD_XOR]; + REWRITE_TAC[REAL_VAL_WORD_NOT; DIMINDEX_64; p_521] THEN + REAL_ARITH_TAC] THEN + CONV_TAC WORD_REDUCE_CONV THEN CONV_TAC REAL_RAT_REDUCE_CONV THEN + MATCH_MP_TAC(REAL_ARITH + `n':real = n ==> (n + c) - &2 * n' = c - n`) THEN + REWRITE_TAC[VAL_WORD_AND_MASK_WORD; ARITH_RULE `511 = 2 EXP 9 - 1`] THEN + REWRITE_TAC[REAL_OF_NUM_EQ] THEN MATCH_MP_TAC MOD_LT THEN + UNDISCH_TAC `n <= p_521` THEN + DISCH_THEN(MP_TAC o MATCH_MP (ARITH_RULE + `n <= p ==> n DIV 2 EXP 512 <= p DIV 2 EXP 512`)) THEN + EXPAND_TAC "n" THEN + CONV_TAC(ONCE_DEPTH_CONV BIGNUM_OF_WORDLIST_DIV_CONV) THEN + REWRITE_TAC[p_521] THEN ARITH_TAC; + ALL_TAC] THEN + + (*** Now introduce the shifted version of m ***) + + ABBREV_TAC + `m' = bignum_of_wordlist + [word_shl m_0 2; + word_subword ((word_join:int64->int64->int128) m_1 m_0) (62,64); + word_subword ((word_join:int64->int64->int128) m_2 m_1) (62,64); + word_subword ((word_join:int64->int64->int128) m_3 m_2) (62,64); + word_subword ((word_join:int64->int64->int128) m_4 m_3) (62,64); + word_subword ((word_join:int64->int64->int128) m_5 m_4) (62,64); + word_subword ((word_join:int64->int64->int128) m_6 m_5) (62,64); + word_subword ((word_join:int64->int64->int128) m_7 m_6) (62,64); + word_subword ((word_join:int64->int64->int128) m_8 m_7) (62,64)]` THEN + SUBGOAL_THEN `4 * m = m'` ASSUME_TAC THENL + [SUBGOAL_THEN `m DIV 2 EXP 512 < 2 EXP 62` MP_TAC THENL + [UNDISCH_TAC `m < 2 * p_521` THEN REWRITE_TAC[p_521] THEN ARITH_TAC; + EXPAND_TAC "m" THEN + CONV_TAC(ONCE_DEPTH_CONV BIGNUM_OF_WORDLIST_DIV_CONV) THEN + REWRITE_TAC[GSYM UPPER_BITS_ZERO]] THEN + EXPAND_TAC "m'" THEN POP_ASSUM_LIST(K ALL_TAC) THEN + DISCH_THEN(fun th -> MP_TAC(SPEC `62` th) THEN MP_TAC(SPEC `63` th)) THEN + CONV_TAC NUM_REDUCE_CONV THEN DISCH_TAC THEN DISCH_TAC THEN + REWRITE_TAC[bignum_of_wordlist; REAL_OF_NUM_CLAUSES] THEN + REWRITE_TAC[val_def; DIMINDEX_64; bignum_of_wordlist] THEN + REWRITE_TAC[ARITH_RULE `i < 64 <=> 0 <= i /\ i <= 63`] THEN + REWRITE_TAC[GSYM IN_NUMSEG; IN_GSPEC] THEN + REWRITE_TAC[BIT_WORD_SUBWORD; BIT_WORD_JOIN; BIT_WORD_USHR; + BIT_WORD_SHL; DIMINDEX_64; DIMINDEX_128] THEN + CONV_TAC NUM_REDUCE_CONV THEN + CONV_TAC(ONCE_DEPTH_CONV EXPAND_NSUM_CONV) THEN + CONV_TAC NUM_REDUCE_CONV THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC WORD_REDUCE_CONV THEN REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC NUM_RING; + ALL_TAC] THEN + + SUBGOAL_THEN + `(&4 * &m - &n) rem &p_521 = + (&4 * &m + (&p_521 - &n)) rem &p_521` + SUBST1_TAC THENL + [REWRITE_TAC[INT_REM_EQ] THEN CONV_TAC INTEGER_RULE; + ASM_SIMP_TAC[INT_OF_NUM_CLAUSES; INT_OF_NUM_SUB; INT_OF_NUM_REM]] THEN + + (*** The basic multiply-add block = ca, then forget the components ***) + + ABBREV_TAC `ca:num = m' + n'` THEN + SUBGOAL_THEN `ca < 2 EXP 527` ASSUME_TAC THENL + [MAP_EVERY EXPAND_TAC ["ca"; "m'"; "n'"] THEN + UNDISCH_TAC `m < 2 * p_521` THEN + REWRITE_TAC[p_521] THEN ARITH_TAC; + ALL_TAC] THEN + + ARM_ACCSTEPS_TAC P521_JDOUBLE_EXEC [17;18;20;22;25;27;30;32;36] (1--36) THEN + SUBGOAL_THEN + `bignum_of_wordlist + [sum_s17; sum_s18; sum_s20; sum_s22; + sum_s25; sum_s27; sum_s30; sum_s32; sum_s36] = ca` + ASSUME_TAC THENL + [REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`576`; `&0:real`] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN CONJ_TAC THENL + [UNDISCH_TAC `ca < 2 EXP 527` THEN REWRITE_TAC[REAL_OF_NUM_CLAUSES] THEN + ARITH_TAC; + REWRITE_TAC[INTEGER_CLOSED] THEN EXPAND_TAC "ca"] THEN + UNDISCH_THEN `p_521 - n = n'` (K ALL_TAC) THEN + UNDISCH_THEN `4 * m = m'` (K ALL_TAC) THEN + MAP_EVERY EXPAND_TAC ["m'"; "n'"] THEN + REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + RULE_ASSUM_TAC(REWRITE_RULE[REAL_BITVAL_NOT]) THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + REWRITE_TAC[REAL_VAL_WORD_NOT; DIMINDEX_64] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC) THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o check (free_in `m:num` o concl))) THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o check (free_in `n:num` o concl))) THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o check (free_in `n':num` o concl)))] THEN + + (*** Breaking the problem down to (h + l) MOD p_521 ***) + + SUBGOAL_THEN `ca MOD p_521 = (ca DIV 2 EXP 521 + ca MOD 2 EXP 521) MOD p_521` + SUBST1_TAC THENL + [GEN_REWRITE_TAC (LAND_CONV o LAND_CONV) + [ARITH_RULE `ca = 2 EXP 521 * ca DIV 2 EXP 521 + ca MOD 2 EXP 521`] THEN + REWRITE_TAC[GSYM CONG] THEN MATCH_MP_TAC(NUMBER_RULE + `(e == 1) (mod p) ==> (e * h + l == h + l) (mod p)`) THEN + REWRITE_TAC[p_521; CONG] THEN ARITH_TAC; + ALL_TAC] THEN + SUBGOAL_THEN `ca DIV 2 EXP 521 < 2 EXP 64 /\ ca MOD 2 EXP 521 < 2 EXP 521` + STRIP_ASSUME_TAC THENL + [REWRITE_TAC[MOD_LT_EQ] THEN UNDISCH_TAC `ca < 2 EXP 527` THEN ARITH_TAC; + ALL_TAC] THEN + + (*** Splitting up and stuffing 1 bits into the low part ***) + + ARM_STEPS_TAC P521_JDOUBLE_EXEC (37--39) THEN + RULE_ASSUM_TAC(REWRITE_RULE[GSYM WORD_AND_ASSOC; DIMINDEX_64; + NUM_REDUCE_CONV `9 MOD 64`]) THEN + MAP_EVERY ABBREV_TAC + [`h:int64 = word_ushr sum_s36 9`; + `d:int64 = word_or sum_s36 (word 18446744073709551104)`; + `dd:int64 = word_and sum_s18 (word_and sum_s20 (word_and sum_s22 + (word_and sum_s25 (word_and sum_s27 (word_and sum_s30 sum_s32)))))`] THEN + + (*** The comparison in its direct condensed form ***) + + ARM_ACCSTEPS_TAC P521_JDOUBLE_EXEC (40--42) (40--42) THEN + SUBGOAL_THEN + `carry_s42 <=> + 2 EXP 192 <= + 2 EXP 128 * val(d:int64) + 2 EXP 64 * val(dd:int64) + + val(h:int64) + val(sum_s17:int64) + 1` + (ASSUME_TAC o SYM) THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LE THEN EXISTS_TAC `192` THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Finish the simulation before completing the mathematics ***) + + ARM_ACCSTEPS_TAC P521_JDOUBLE_EXEC (43--51) (43--57) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(LAND_CONV BIGNUM_LEXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + DISCARD_STATE_TAC "s57" THEN + + (*** Evaluate d and un-condense the inequality ***) + + SUBGOAL_THEN + `val(d:int64) = 2 EXP 9 * (2 EXP 55 - 1) + val(sum_s36:int64) MOD 2 EXP 9` + SUBST_ALL_TAC THENL + [EXPAND_TAC "d" THEN ONCE_REWRITE_TAC[WORD_BITWISE_RULE + `word_or a b = word_or b (word_and a (word_not b))`] THEN + SIMP_TAC[VAL_WORD_OR_DISJOINT; WORD_BITWISE_RULE + `word_and x (word_and y (word_not x)) = word 0`] THEN + REWRITE_TAC[GSYM VAL_WORD_AND_MASK_WORD] THEN + CONV_TAC NUM_REDUCE_CONV THEN CONV_TAC WORD_REDUCE_CONV; + ALL_TAC] THEN + + SUBGOAL_THEN + `2 EXP 512 * val(sum_s36:int64) MOD 2 EXP 9 + + bignum_of_wordlist + [sum_s17; sum_s18; sum_s20; sum_s22; sum_s25; sum_s27; sum_s30; sum_s32] = + ca MOD 2 EXP 521` + (LABEL_TAC "*") THENL + [CONV_TAC SYM_CONV THEN EXPAND_TAC "ca" THEN + REWRITE_TAC[BIGNUM_OF_WORDLIST_SPLIT_RULE(8,1)] THEN + REWRITE_TAC[ARITH_RULE `2 EXP 521 = 2 EXP 512 * 2 EXP 9`] THEN + REWRITE_TAC[SYM(NUM_REDUCE_CONV `64 * 8`)] THEN + SIMP_TAC[LENGTH; ARITH_LT; ARITH_LE; MOD_MULT_MOD; ADD_CLAUSES; + ARITH_SUC; BIGNUM_OF_WORDLIST_BOUND; MOD_LT; DIV_LT; + MOD_MULT_ADD; DIV_MULT_ADD; EXP_EQ_0; ARITH_EQ] THEN + REWRITE_TAC[BIGNUM_OF_WORDLIST_SING] THEN ARITH_TAC; + ALL_TAC] THEN + + SUBGOAL_THEN + `2 EXP 521 <= ca MOD 2 EXP 521 + val(h:int64) + 1 <=> carry_s42` + MP_TAC THENL + [REMOVE_THEN "*" (SUBST1_TAC o SYM) THEN EXPAND_TAC "carry_s42" THEN + ONCE_REWRITE_TAC[bignum_of_wordlist] THEN + MATCH_MP_TAC(TAUT + `!p q. ((p ==> ~r) /\ (q ==> ~s)) /\ (p <=> q) /\ (~p /\ ~q ==> (r <=> s)) + ==> (r <=> s)`) THEN + MAP_EVERY EXISTS_TAC + [`bignum_of_wordlist + [sum_s18; sum_s20; sum_s22; sum_s25; sum_s27; sum_s30; sum_s32] < + 2 EXP (64 * 7) - 1`; + `val(dd:int64) < 2 EXP 64 - 1`] THEN + CONJ_TAC THENL + [CONJ_TAC THEN MATCH_MP_TAC(ARITH_RULE + `2 EXP 64 * b + d < 2 EXP 64 * (a + 1) + c ==> a < b ==> ~(c <= d)`) THEN + MP_TAC(SPEC `h:int64` VAL_BOUND_64) THEN + MP_TAC(SPEC `sum_s17:int64` VAL_BOUND_64) THEN ARITH_TAC; + SIMP_TAC[BIGNUM_OF_WORDLIST_LT_MAX; LENGTH; ARITH_EQ; ARITH_SUC]] THEN + REWRITE_TAC[GSYM NOT_ALL] THEN MP_TAC(ISPEC `dd:int64` VAL_EQ_MAX) THEN + SIMP_TAC[VAL_BOUND_64; DIMINDEX_64; ARITH_RULE + `a < n ==> (a < n - 1 <=> ~(a = n - 1))`] THEN + DISCH_THEN SUBST1_TAC THEN EXPAND_TAC "dd" THEN + REWRITE_TAC[WORD_NOT_AND; ALL; WORD_OR_EQ_0] THEN + REWRITE_TAC[WORD_RULE `word_not d = e <=> d = word_not e`] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN SUBST1_TAC) THEN + REWRITE_TAC[bignum_of_wordlist] THEN CONV_TAC WORD_REDUCE_CONV THEN + MP_TAC(ARITH_RULE `val(sum_s36:int64) MOD 2 EXP 9 = 511 \/ + val(sum_s36:int64) MOD 2 EXP 9 < 511`) THEN + MP_TAC(SPEC `h:int64` VAL_BOUND_64) THEN + MP_TAC(SPEC `sum_s17:int64` VAL_BOUND_64) THEN ARITH_TAC; + FIRST_X_ASSUM(K ALL_TAC o check (is_iff o concl))] THEN + + (*** Also evaluate h ***) + + SUBGOAL_THEN `val(h:int64) = ca DIV 2 EXP 521` SUBST_ALL_TAC THENL + [EXPAND_TAC "h" THEN REWRITE_TAC[VAL_WORD_USHR] THEN + EXPAND_TAC "ca" THEN + CONV_TAC(ONCE_DEPTH_CONV BIGNUM_OF_WORDLIST_DIV_CONV) THEN + REWRITE_TAC[]; + ALL_TAC] THEN + + (*** Now complete the mathematics ***) + + SUBGOAL_THEN + `2 EXP 521 <= ca MOD 2 EXP 521 + ca DIV 2 EXP 521 + 1 <=> + p_521 <= ca DIV 2 EXP 521 + ca MOD 2 EXP 521` + SUBST1_TAC THENL [REWRITE_TAC[p_521] THEN ARITH_TAC; DISCH_TAC] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC EQUAL_FROM_CONGRUENT_MOD_MOD THEN + MAP_EVERY EXISTS_TAC + [`521`; + `if ca DIV 2 EXP 521 + ca MOD 2 EXP 521 < p_521 + then &(ca DIV 2 EXP 521 + ca MOD 2 EXP 521) + else &(ca DIV 2 EXP 521 + ca MOD 2 EXP 521) - &p_521`] THEN + REPEAT CONJ_TAC THENL + [BOUNDER_TAC[]; + REWRITE_TAC[p_521] THEN ARITH_TAC; + REWRITE_TAC[p_521] THEN ARITH_TAC; + ALL_TAC; + W(MP_TAC o PART_MATCH (lhand o rand) MOD_CASES o rand o lhand o snd) THEN + ANTS_TAC THENL + [UNDISCH_TAC `ca < 2 EXP 527` THEN REWRITE_TAC[p_521] THEN ARITH_TAC; + DISCH_THEN SUBST1_TAC] THEN + ONCE_REWRITE_TAC[COND_RAND] THEN + SIMP_TAC[GSYM NOT_LE; COND_SWAP; GSYM REAL_OF_NUM_SUB; COND_ID]] THEN + ASM_REWRITE_TAC[GSYM NOT_LE; COND_SWAP] THEN + REMOVE_THEN "*" (SUBST1_TAC o SYM) THEN + REWRITE_TAC[SYM(NUM_REDUCE_CONV `2 EXP 9 - 1`)] THEN + REWRITE_TAC[VAL_WORD_AND_MASK_WORD; bignum_of_wordlist] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; REAL_OF_NUM_MOD; p_521] THEN + CONV_TAC NUM_REDUCE_CONV THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instances cmsub38 (there is only one). *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_CMSUB38_P521_TAC = + ARM_MACRO_SIM_ABBREV_TAC p521_jdouble_mc 82 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 9)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 9)) t = n + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0x29f0) (word_add (read p3 t) (word n3),72) /\ + nonoverlapping (read X27 t,216) (read X26 t,216) /\ + nonoverlapping (read X26 t,216) (stackpointer,512) /\ + nonoverlapping (read X27 t,216) (stackpointer,512) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p521_jdouble_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X26 s = read X26 t /\ + read X27 s = read X27 t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 9)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 9)) s = + n) + (\s. read PC s = pcout /\ + (m < 2 * p_521 /\ n <= p_521 + ==> &(read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 9)) s) = (&3 * &m - &8 * &n) rem &p_521)) + (MAYCHANGE [PC; X0; X1; X2; X3; X4; X5; X6; X7; X8; X9; + X10; X11; X12; X13; X14; X15; X16; X17; + X19; X20; X21; X22; X23] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 9)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + (*** Globalize the bound assumption for simplicity ***) + + ASM_CASES_TAC `m < 2 * p_521 /\ n <= p_521` THENL + [ASM_REWRITE_TAC[] THEN FIRST_X_ASSUM(CONJUNCTS_THEN ASSUME_TAC); + ARM_SIM_TAC P521_JDOUBLE_EXEC (1--82)] THEN + + (*** Digitize and introduce the shifted and flipped version of n ***) + + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "m_" o lhand o concl) THEN + ABBREV_TAC + `n' = bignum_of_wordlist + [word_shl (word_not n_0) 3; + word_subword ((word_join:int64->int64->int128) + (word_not n_1) (word_not n_0)) (61,64); + word_subword ((word_join:int64->int64->int128) + (word_not n_2) (word_not n_1)) (61,64); + word_subword ((word_join:int64->int64->int128) + (word_not n_3) (word_not n_2)) (61,64); + word_subword ((word_join:int64->int64->int128) + (word_not n_4) (word_not n_3)) (61,64); + word_subword ((word_join:int64->int64->int128) + (word_not n_5) (word_not n_4)) (61,64); + word_subword ((word_join:int64->int64->int128) + (word_not n_6) (word_not n_5)) (61,64); + word_subword ((word_join:int64->int64->int128) + (word_not n_7) (word_not n_6)) (61,64); + word_subword ((word_join:int64->int64->int128) + (word_xor n_8 (word 0x1FF)) (word_not n_7)) (61,64)]` THEN + SUBGOAL_THEN `8 * (p_521 - n) = n'` ASSUME_TAC THENL + [MATCH_MP_TAC(ARITH_RULE `8 * n + m = 8 * p ==> 8 * (p - n) = m`) THEN + SUBGOAL_THEN `n DIV 2 EXP 512 < 2 EXP 9` MP_TAC THENL + [UNDISCH_TAC `n <= p_521` THEN REWRITE_TAC[p_521] THEN ARITH_TAC; + EXPAND_TAC "n" THEN + CONV_TAC(ONCE_DEPTH_CONV BIGNUM_OF_WORDLIST_DIV_CONV) THEN + REWRITE_TAC[GSYM UPPER_BITS_ZERO]] THEN + EXPAND_TAC "n'" THEN POP_ASSUM_LIST(K ALL_TAC) THEN + DISCH_THEN(MP_TAC o MATCH_MP (MESON[] + `(!i. P i) ==> (!i. i < 64 ==> P i)`)) THEN + CONV_TAC(LAND_CONV EXPAND_CASES_CONV) THEN + CONV_TAC NUM_REDUCE_CONV THEN STRIP_TAC THEN + REWRITE_TAC[bignum_of_wordlist; REAL_OF_NUM_CLAUSES] THEN + REWRITE_TAC[val_def; DIMINDEX_64; bignum_of_wordlist] THEN + REWRITE_TAC[ARITH_RULE `i < 64 <=> 0 <= i /\ i <= 63`] THEN + REWRITE_TAC[GSYM IN_NUMSEG; IN_GSPEC] THEN + REWRITE_TAC[BIT_WORD_SUBWORD; BIT_WORD_JOIN; BIT_WORD_SHL; + BIT_WORD_NOT; BIT_WORD_XOR; DIMINDEX_64; DIMINDEX_128] THEN + CONV_TAC NUM_REDUCE_CONV THEN + CONV_TAC(ONCE_DEPTH_CONV EXPAND_NSUM_CONV) THEN + CONV_TAC NUM_REDUCE_CONV THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC WORD_REDUCE_CONV THEN REWRITE_TAC[BITVAL_CLAUSES] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; REAL_BITVAL_NOT] THEN + REWRITE_TAC[p_521] THEN CONV_TAC REAL_RING; + ALL_TAC] THEN + + (*** Now introduce the shifted version of m for 3 * m = 2 * m + m ***) + + ABBREV_TAC + `m' = bignum_of_wordlist + [word_shl m_0 1; + word_subword ((word_join:int64->int64->int128) m_1 m_0) (63,64); + word_subword ((word_join:int64->int64->int128) m_2 m_1) (63,64); + word_subword ((word_join:int64->int64->int128) m_3 m_2) (63,64); + word_subword ((word_join:int64->int64->int128) m_4 m_3) (63,64); + word_subword ((word_join:int64->int64->int128) m_5 m_4) (63,64); + word_subword ((word_join:int64->int64->int128) m_6 m_5) (63,64); + word_subword ((word_join:int64->int64->int128) m_7 m_6) (63,64); + word_subword ((word_join:int64->int64->int128) m_8 m_7) (63,64)]` THEN + SUBGOAL_THEN `2 * m = m'` ASSUME_TAC THENL + [SUBGOAL_THEN `m DIV 2 EXP 512 < 2 EXP 63` MP_TAC THENL + [UNDISCH_TAC `m < 2 * p_521` THEN REWRITE_TAC[p_521] THEN ARITH_TAC; + EXPAND_TAC "m" THEN + CONV_TAC(ONCE_DEPTH_CONV BIGNUM_OF_WORDLIST_DIV_CONV) THEN + REWRITE_TAC[GSYM UPPER_BITS_ZERO]] THEN + EXPAND_TAC "m'" THEN POP_ASSUM_LIST(K ALL_TAC) THEN + DISCH_THEN(MP_TAC o SPEC `63`) THEN + CONV_TAC NUM_REDUCE_CONV THEN DISCH_TAC THEN + REWRITE_TAC[bignum_of_wordlist; REAL_OF_NUM_CLAUSES] THEN + REWRITE_TAC[val_def; DIMINDEX_64; bignum_of_wordlist] THEN + REWRITE_TAC[ARITH_RULE `i < 64 <=> 0 <= i /\ i <= 63`] THEN + REWRITE_TAC[GSYM IN_NUMSEG; IN_GSPEC] THEN + REWRITE_TAC[BIT_WORD_SUBWORD; BIT_WORD_JOIN; BIT_WORD_USHR; + BIT_WORD_SHL; DIMINDEX_64; DIMINDEX_128] THEN + CONV_TAC NUM_REDUCE_CONV THEN + CONV_TAC(ONCE_DEPTH_CONV EXPAND_NSUM_CONV) THEN + CONV_TAC NUM_REDUCE_CONV THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC WORD_REDUCE_CONV THEN REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC NUM_RING; + ALL_TAC] THEN + + SUBGOAL_THEN + `(&3 * &m - &8 * &n) rem &p_521 = + (&2 * &m + &m + &8 * (&p_521 - &n)) rem &p_521` + SUBST1_TAC THENL + [REWRITE_TAC[INT_REM_EQ] THEN CONV_TAC INTEGER_RULE; + ASM_SIMP_TAC[INT_OF_NUM_CLAUSES; INT_OF_NUM_SUB; INT_OF_NUM_REM]] THEN + + (*** The basic multiply-add block = ca, then forget the components ***) + + ABBREV_TAC `ca = m' + m + n'` THEN + SUBGOAL_THEN `ca < 2 EXP 527` ASSUME_TAC THENL + [MAP_EVERY EXPAND_TAC ["ca"; "m'"; "n'"] THEN + UNDISCH_TAC `m < 2 * p_521` THEN + REWRITE_TAC[p_521] THEN ARITH_TAC; + ALL_TAC] THEN + + ARM_ACCSTEPS_TAC P521_JDOUBLE_EXEC + [3;5;8;10;13;15;18;20;23;27;30;34;38;43;47;52;56;61] (1--61) THEN + SUBGOAL_THEN + `bignum_of_wordlist + [sum_s27; sum_s30; sum_s34; sum_s38; + sum_s43; sum_s47; sum_s52; sum_s56; sum_s61] = ca` + ASSUME_TAC THENL + [REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`576`; `&0:real`] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN CONJ_TAC THENL + [UNDISCH_TAC `ca < 2 EXP 527` THEN REWRITE_TAC[REAL_OF_NUM_CLAUSES] THEN + ARITH_TAC; + REWRITE_TAC[INTEGER_CLOSED] THEN EXPAND_TAC "ca"] THEN + UNDISCH_THEN `8 * (p_521 - n) = n'` (K ALL_TAC) THEN + UNDISCH_THEN `2 * m = m'` (K ALL_TAC) THEN + MAP_EVERY EXPAND_TAC ["m"; "m'"; "n'"] THEN + REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + REWRITE_TAC[REAL_VAL_WORD_NOT; DIMINDEX_64] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC) THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o check (free_in `m:num` o concl))) THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o check (free_in `n:num` o concl))) THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o check (free_in `n':num` o concl)))] THEN + + (*** Breaking the problem down to (h + l) MOD p_521 ***) + + SUBGOAL_THEN `ca MOD p_521 = (ca DIV 2 EXP 521 + ca MOD 2 EXP 521) MOD p_521` + SUBST1_TAC THENL + [GEN_REWRITE_TAC (LAND_CONV o LAND_CONV) + [ARITH_RULE `ca = 2 EXP 521 * ca DIV 2 EXP 521 + ca MOD 2 EXP 521`] THEN + REWRITE_TAC[GSYM CONG] THEN MATCH_MP_TAC(NUMBER_RULE + `(e == 1) (mod p) ==> (e * h + l == h + l) (mod p)`) THEN + REWRITE_TAC[p_521; CONG] THEN ARITH_TAC; + ALL_TAC] THEN + SUBGOAL_THEN `ca DIV 2 EXP 521 < 2 EXP 64 /\ ca MOD 2 EXP 521 < 2 EXP 521` + STRIP_ASSUME_TAC THENL + [REWRITE_TAC[MOD_LT_EQ] THEN UNDISCH_TAC `ca < 2 EXP 527` THEN ARITH_TAC; + ALL_TAC] THEN + + (*** Splitting up and stuffing 1 bits into the low part ***) + + ARM_STEPS_TAC P521_JDOUBLE_EXEC (62--64) THEN + RULE_ASSUM_TAC(REWRITE_RULE[GSYM WORD_AND_ASSOC; DIMINDEX_64; + NUM_REDUCE_CONV `9 MOD 64`]) THEN + MAP_EVERY ABBREV_TAC + [`h:int64 = word_ushr sum_s61 9`; + `d:int64 = word_or sum_s61 (word 18446744073709551104)`; + `dd:int64 = word_and sum_s30 (word_and sum_s34 (word_and sum_s38 + (word_and sum_s43 (word_and sum_s47 (word_and sum_s52 sum_s56)))))`] THEN + + (*** The comparison in its direct condensed form ***) + + ARM_ACCSTEPS_TAC P521_JDOUBLE_EXEC (65--67) (65--67) THEN + SUBGOAL_THEN + `carry_s67 <=> + 2 EXP 192 <= + 2 EXP 128 * val(d:int64) + 2 EXP 64 * val(dd:int64) + + val(h:int64) + val(sum_s27:int64) + 1` + (ASSUME_TAC o SYM) THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LE THEN EXISTS_TAC `192` THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Finish the simulation before completing the mathematics ***) + + ARM_ACCSTEPS_TAC P521_JDOUBLE_EXEC (68--76) (68--82) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(LAND_CONV BIGNUM_LEXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + DISCARD_STATE_TAC "s82" THEN + + (*** Evaluate d and un-condense the inequality ***) + + SUBGOAL_THEN + `val(d:int64) = 2 EXP 9 * (2 EXP 55 - 1) + val(sum_s61:int64) MOD 2 EXP 9` + SUBST_ALL_TAC THENL + [EXPAND_TAC "d" THEN ONCE_REWRITE_TAC[WORD_BITWISE_RULE + `word_or a b = word_or b (word_and a (word_not b))`] THEN + SIMP_TAC[VAL_WORD_OR_DISJOINT; WORD_BITWISE_RULE + `word_and x (word_and y (word_not x)) = word 0`] THEN + REWRITE_TAC[GSYM VAL_WORD_AND_MASK_WORD] THEN + CONV_TAC NUM_REDUCE_CONV THEN CONV_TAC WORD_REDUCE_CONV; + ALL_TAC] THEN + + SUBGOAL_THEN + `2 EXP 512 * val(sum_s61:int64) MOD 2 EXP 9 + + bignum_of_wordlist + [sum_s27; sum_s30; sum_s34; sum_s38; sum_s43; sum_s47; sum_s52; sum_s56] = + ca MOD 2 EXP 521` + (LABEL_TAC "*") THENL + [CONV_TAC SYM_CONV THEN EXPAND_TAC "ca" THEN + REWRITE_TAC[BIGNUM_OF_WORDLIST_SPLIT_RULE(8,1)] THEN + REWRITE_TAC[ARITH_RULE `2 EXP 521 = 2 EXP 512 * 2 EXP 9`] THEN + REWRITE_TAC[SYM(NUM_REDUCE_CONV `64 * 8`)] THEN + SIMP_TAC[LENGTH; ARITH_LT; ARITH_LE; MOD_MULT_MOD; ADD_CLAUSES; + ARITH_SUC; BIGNUM_OF_WORDLIST_BOUND; MOD_LT; DIV_LT; + MOD_MULT_ADD; DIV_MULT_ADD; EXP_EQ_0; ARITH_EQ] THEN + REWRITE_TAC[BIGNUM_OF_WORDLIST_SING] THEN ARITH_TAC; + ALL_TAC] THEN + + SUBGOAL_THEN + `2 EXP 521 <= ca MOD 2 EXP 521 + val(h:int64) + 1 <=> carry_s67` + MP_TAC THENL + [REMOVE_THEN "*" (SUBST1_TAC o SYM) THEN EXPAND_TAC "carry_s67" THEN + ONCE_REWRITE_TAC[bignum_of_wordlist] THEN + MATCH_MP_TAC(TAUT + `!p q. ((p ==> ~r) /\ (q ==> ~s)) /\ (p <=> q) /\ (~p /\ ~q ==> (r <=> s)) + ==> (r <=> s)`) THEN + MAP_EVERY EXISTS_TAC + [`bignum_of_wordlist + [sum_s30; sum_s34; sum_s38; sum_s43; sum_s47; sum_s52; sum_s56] < + 2 EXP (64 * 7) - 1`; + `val(dd:int64) < 2 EXP 64 - 1`] THEN + CONJ_TAC THENL + [CONJ_TAC THEN MATCH_MP_TAC(ARITH_RULE + `2 EXP 64 * b + d < 2 EXP 64 * (a + 1) + c ==> a < b ==> ~(c <= d)`) THEN + MP_TAC(SPEC `h:int64` VAL_BOUND_64) THEN + MP_TAC(SPEC `sum_s27:int64` VAL_BOUND_64) THEN ARITH_TAC; + SIMP_TAC[BIGNUM_OF_WORDLIST_LT_MAX; LENGTH; ARITH_EQ; ARITH_SUC]] THEN + REWRITE_TAC[GSYM NOT_ALL] THEN MP_TAC(ISPEC `dd:int64` VAL_EQ_MAX) THEN + SIMP_TAC[VAL_BOUND_64; DIMINDEX_64; ARITH_RULE + `a < n ==> (a < n - 1 <=> ~(a = n - 1))`] THEN + DISCH_THEN SUBST1_TAC THEN EXPAND_TAC "dd" THEN + REWRITE_TAC[WORD_NOT_AND; ALL; WORD_OR_EQ_0] THEN + REWRITE_TAC[WORD_RULE `word_not d = e <=> d = word_not e`] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN SUBST1_TAC) THEN + REWRITE_TAC[bignum_of_wordlist] THEN CONV_TAC WORD_REDUCE_CONV THEN + MP_TAC(ARITH_RULE `val(sum_s61:int64) MOD 2 EXP 9 = 511 \/ + val(sum_s61:int64) MOD 2 EXP 9 < 511`) THEN + MP_TAC(SPEC `h:int64` VAL_BOUND_64) THEN + MP_TAC(SPEC `sum_s27:int64` VAL_BOUND_64) THEN ARITH_TAC; + FIRST_X_ASSUM(K ALL_TAC o check (is_iff o concl))] THEN + + (*** Also evaluate h ***) + + SUBGOAL_THEN `val(h:int64) = ca DIV 2 EXP 521` SUBST_ALL_TAC THENL + [EXPAND_TAC "h" THEN REWRITE_TAC[VAL_WORD_USHR] THEN + EXPAND_TAC "ca" THEN + CONV_TAC(ONCE_DEPTH_CONV BIGNUM_OF_WORDLIST_DIV_CONV) THEN + REWRITE_TAC[]; + ALL_TAC] THEN + + (*** Now complete the mathematics ***) + + SUBGOAL_THEN + `2 EXP 521 <= ca MOD 2 EXP 521 + ca DIV 2 EXP 521 + 1 <=> + p_521 <= ca DIV 2 EXP 521 + ca MOD 2 EXP 521` + SUBST1_TAC THENL [REWRITE_TAC[p_521] THEN ARITH_TAC; DISCH_TAC] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC EQUAL_FROM_CONGRUENT_MOD_MOD THEN + MAP_EVERY EXISTS_TAC + [`521`; + `if ca DIV 2 EXP 521 + ca MOD 2 EXP 521 < p_521 + then &(ca DIV 2 EXP 521 + ca MOD 2 EXP 521) + else &(ca DIV 2 EXP 521 + ca MOD 2 EXP 521) - &p_521`] THEN + REPEAT CONJ_TAC THENL + [BOUNDER_TAC[]; + REWRITE_TAC[p_521] THEN ARITH_TAC; + REWRITE_TAC[p_521] THEN ARITH_TAC; + ALL_TAC; + W(MP_TAC o PART_MATCH (lhand o rand) MOD_CASES o rand o lhand o snd) THEN + ANTS_TAC THENL + [UNDISCH_TAC `ca < 2 EXP 527` THEN REWRITE_TAC[p_521] THEN ARITH_TAC; + DISCH_THEN SUBST1_TAC] THEN + ONCE_REWRITE_TAC[COND_RAND] THEN + SIMP_TAC[GSYM NOT_LE; COND_SWAP; GSYM REAL_OF_NUM_SUB; COND_ID]] THEN + ASM_REWRITE_TAC[GSYM NOT_LE; COND_SWAP] THEN + REMOVE_THEN "*" (SUBST1_TAC o SYM) THEN + REWRITE_TAC[SYM(NUM_REDUCE_CONV `2 EXP 9 - 1`)] THEN + REWRITE_TAC[VAL_WORD_AND_MASK_WORD; bignum_of_wordlist] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; REAL_OF_NUM_MOD; p_521] THEN + CONV_TAC NUM_REDUCE_CONV THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Overall point operation proof. *) +(* ------------------------------------------------------------------------- *) + +let P521_JDOUBLE_CORRECT = time prove + (`!p3 p1 t1 pc stackpointer. + aligned 16 stackpointer /\ + ALLPAIRS nonoverlapping + [(p3,216); (stackpointer,512)] + [(word pc,0x29f0); (p1,216)] /\ + nonoverlapping (p3,216) (stackpointer,512) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p521_jdouble_mc /\ + read PC s = word(pc + 0x18) /\ + read SP s = stackpointer /\ + C_ARGUMENTS [p3; p1] s /\ + bignum_triple_from_memory (p1,9) s = t1) + (\s. read PC s = word (pc + 0x29d4) /\ + (!x y z. + ~(z = &0) /\ + t1 = tripled nistp521_encode (x,y,z) + ==> bignum_triple_from_memory(p3,9) s = + tripled nistp521_encode + (jacobian_add nistp521 (x,y,z) (x,y,z)))) + (MAYCHANGE [PC; X0; X1; X2; X3; X4; X5; X6; X7; X8; X9; X10; + X11; X12; X13; X14; X15; X16; X17; X19; X20; + X21; X22; X23; X24; X25; X26; X27] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,216); + memory :> bytes(stackpointer,512)])`, + REWRITE_TAC[FORALL_PAIR_THM] THEN + MAP_EVERY X_GEN_TAC + [`p3:int64`; `p1:int64`; `x:num`; `y:num`; `z:num`; + `pc:num`; `stackpointer:int64`] THEN + REWRITE_TAC[ALLPAIRS; ALL; NONOVERLAPPING_CLAUSES] THEN STRIP_TAC THEN + REWRITE_TAC[C_ARGUMENTS; SOME_FLAGS; PAIR_EQ; bignum_triple_from_memory] THEN + CONV_TAC(ONCE_DEPTH_CONV NUM_MULT_CONV) THEN + CONV_TAC(ONCE_DEPTH_CONV NORMALIZE_RELATIVE_ADDRESS_CONV) THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + + LOCAL_SQR_P521_TAC 2 ["z2";"z_1"] THEN + LOCAL_SQR_P521_TAC 0 ["y2";"y_1"] THEN + LOCAL_ADD_P521_TAC 0 ["t1";"x_1";"z2"] THEN + LOCAL_SUB_P521_TAC 0 ["t2";"x_1";"z2"] THEN + LOCAL_MUL_P521_TAC 0 ["x2p";"t1";"t2"] THEN + LOCAL_ADD_P521_TAC 0 ["t1";"y_1";"z_1"] THEN + LOCAL_SQR_P521_TAC 0 ["x4p";"x2p"] THEN + LOCAL_WEAKMUL_P521_TAC 0 ["xy2";"x_1";"y2"] THEN + LOCAL_SQR_P521_TAC 0 ["t2";"t1"] THEN + LOCAL_CMSUBC9_P521_TAC 0 ["d";"xy2";"x4p"] THEN + LOCAL_SUB_P521_TAC 0 ["t1";"t2";"z2"] THEN + LOCAL_SQR_P521_TAC 0 ["y4";"y2"] THEN + LOCAL_SUB_P521_TAC 0 ["z_3";"t1";"y2"] THEN + LOCAL_WEAKMUL_P521_TAC 0 ["dx2";"d";"x2p"] THEN + LOCAL_CMSUB41_P521_TAC 0 ["x_3";"xy2";"d"] THEN + LOCAL_CMSUB38_P521_TAC 0 ["y_3";"dx2";"y4"] THEN + + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + DISCARD_STATE_TAC "s18" THEN + DISCARD_MATCHING_ASSUMPTIONS [`nonoverlapping_modulo a b c`] THEN + MAP_EVERY X_GEN_TAC [`x':int`; `y':int`; `z':int`] THEN + DISCH_THEN(CONJUNCTS_THEN2 ASSUME_TAC MP_TAC) THEN + REWRITE_TAC[tripled; paired; nistp521_encode; PAIR_EQ; modular_encode] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN + (STRIP_ASSUME_TAC o MATCH_MP unilemma2)) THEN + + (*** Dispose of any range hypotheses ***) + + REPEAT(FIRST_X_ASSUM(MP_TAC o check (is_imp o concl))) THEN + REPEAT(ANTS_TAC THENL + [REWRITE_TAC[p_521] THEN RULE_ASSUM_TAC(REWRITE_RULE[p_521]) THEN + CONV_TAC NUM_REDUCE_CONV THEN ASM BOUNDER_TAC[]; + (DISCH_THEN(STRIP_ASSUME_TAC o MATCH_MP unilemma0) ORELSE + DISCH_THEN(STRIP_ASSUME_TAC o MATCH_MP unilemma1) ORELSE + STRIP_TAC)]) THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o GEN_REWRITE_RULE I [GSYM NOT_LE])) THEN + + (*** Manually push around a few moduli to avoid fuss later ***) + + SUBGOAL_THEN + `!a b x y p. (a * x - b * y) rem p = (a * x rem p - b * y rem p) rem p` + (fun th -> RULE_ASSUM_TAC(ONCE_REWRITE_RULE[th])) + THENL + [CONV_TAC INT_REM_DOWN_CONV THEN REPEAT GEN_TAC THEN REFL_TAC; + ALL_TAC] THEN + SUBGOAL_THEN + `!a x y p. (a * x - y) rem p = (a * x rem p - y) rem p` + (fun th -> RULE_ASSUM_TAC(ONCE_REWRITE_RULE[th])) + THENL + [CONV_TAC INT_REM_DOWN_CONV THEN REPEAT GEN_TAC THEN REFL_TAC; + ALL_TAC] THEN + SUBGOAL_THEN `(z * tmp) MOD p_521 = (z * tmp MOD p_521) MOD p_521` + SUBST_ALL_TAC THENL [CONV_TAC MOD_DOWN_CONV THEN REFL_TAC; ALL_TAC] THEN + + (*** Now do the algebra ***) + + RULE_ASSUM_TAC(REWRITE_RULE + [num_congruent; GSYM INT_OF_NUM_CLAUSES; GSYM INT_OF_NUM_REM]) THEN + RULE_ASSUM_TAC(REWRITE_RULE[GSYM INT_REM_EQ]) THEN + RULE_ASSUM_TAC(ONCE_REWRITE_RULE[GSYM INT_SUB_REM; GSYM INT_ADD_REM]) THEN + RULE_ASSUM_TAC(REWRITE_RULE[INT_POW_2]) THEN + ASM_REWRITE_TAC[tripled; jacobian_add; jacobian_eq; nistp521] THEN + ASM_REWRITE_TAC[GSYM nistp521] THEN + REWRITE_TAC[INTEGER_MOD_RING_CLAUSES] THEN + CONV_TAC INT_REDUCE_CONV THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN + CONV_TAC INT_REM_DOWN_CONV THEN + REWRITE_TAC[tripled; modular_encode] THEN + REWRITE_TAC[PAIR_EQ; GSYM INT_OF_NUM_EQ; nintlemma] THEN + CONV_TAC INT_REM_DOWN_CONV THEN + REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES; GSYM INT_OF_NUM_REM] THEN + ASM_REWRITE_TAC[] THEN CONV_TAC INT_REM_DOWN_CONV THEN + REPEAT CONJ_TAC THEN AP_THM_TAC THEN AP_TERM_TAC THEN + INT_ARITH_TAC);; + +let P521_JDOUBLE_SUBROUTINE_CORRECT = time prove + (`!p3 p1 t1 pc stackpointer returnaddress. + aligned 16 stackpointer /\ + ALLPAIRS nonoverlapping + [(p3,216); (word_sub stackpointer (word 592),592)] + [(word pc,0x29f0); (p1,216)] /\ + nonoverlapping (p3,216) (word_sub stackpointer (word 592),592) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p521_jdouble_mc /\ + read PC s = word pc /\ + read SP s = stackpointer /\ + read X30 s = returnaddress /\ + C_ARGUMENTS [p3; p1] s /\ + bignum_triple_from_memory (p1,9) s = t1) + (\s. read PC s = returnaddress /\ + (!x y z. + ~(z = &0) /\ + t1 = tripled nistp521_encode (x,y,z) + ==> bignum_triple_from_memory(p3,9) s = + tripled nistp521_encode + (jacobian_add nistp521 (x,y,z) (x,y,z)))) + (MAYCHANGE [PC; X0; X1; X2; X3; X4; X5; X6; X7; X8; X9; X10; + X11; X12; X13; X14; X15; X16; X17] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,216); + memory :> bytes(word_sub stackpointer (word 592),592)])`, + ARM_ADD_RETURN_STACK_TAC P521_JDOUBLE_EXEC + P521_JDOUBLE_CORRECT + `[X19; X20; X21; X22; X23; X24; X25; X26; X27; X28]` + 592);; diff --git a/arm/proofs/p521_jmixadd.ml b/arm/proofs/p521_jmixadd.ml new file mode 100644 index 0000000000..b1165e99f4 --- /dev/null +++ b/arm/proofs/p521_jmixadd.ml @@ -0,0 +1,4743 @@ +(* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + *) + +(* ========================================================================= *) +(* Point mixed addition in Jacobian coordinates for NIST p521 curve. *) +(* ========================================================================= *) + +needs "arm/proofs/base.ml";; +needs "common/ecencoding.ml";; +needs "EC/jacobian.ml";; +needs "EC/nistp521.ml";; + +prioritize_int();; +prioritize_real();; +prioritize_num();; + +(**** print_literal_from_elf "arm/p521/p521_jmixadd.o";; + ****) + +let p521_jmixadd_mc = define_assert_from_elf + "p521_jmixadd_mc" "arm/p521/p521_jmixadd.o" +[ + 0xa9bf53f3; (* arm_STP X19 X20 SP (Preimmediate_Offset (iword (-- &16))) *) + 0xa9bf5bf5; (* arm_STP X21 X22 SP (Preimmediate_Offset (iword (-- &16))) *) + 0xa9bf63f7; (* arm_STP X23 X24 SP (Preimmediate_Offset (iword (-- &16))) *) + 0xa9bf6bf9; (* arm_STP X25 X26 SP (Preimmediate_Offset (iword (-- &16))) *) + 0xa9bf73fb; (* arm_STP X27 X28 SP (Preimmediate_Offset (iword (-- &16))) *) + 0xd106c3ff; (* arm_SUB SP SP (rvalue (word 432)) *) + 0xaa0003fa; (* arm_MOV X26 X0 *) + 0xaa0103fb; (* arm_MOV X27 X1 *) + 0xaa0203fc; (* arm_MOV X28 X2 *) + 0xa9490f62; (* arm_LDP X2 X3 X27 (Immediate_Offset (iword (&144))) *) + 0x9b037c4b; (* arm_MUL X11 X2 X3 *) + 0x9bc37c4c; (* arm_UMULH X12 X2 X3 *) + 0xa94a1764; (* arm_LDP X4 X5 X27 (Immediate_Offset (iword (&160))) *) + 0x9b047c4a; (* arm_MUL X10 X2 X4 *) + 0x9bc47c4d; (* arm_UMULH X13 X2 X4 *) + 0xab0a018c; (* arm_ADDS X12 X12 X10 *) + 0xa94b1f66; (* arm_LDP X6 X7 X27 (Immediate_Offset (iword (&176))) *) + 0x9b057c4a; (* arm_MUL X10 X2 X5 *) + 0x9bc57c4e; (* arm_UMULH X14 X2 X5 *) + 0xba0a01ad; (* arm_ADCS X13 X13 X10 *) + 0xa94c2768; (* arm_LDP X8 X9 X27 (Immediate_Offset (iword (&192))) *) + 0x9b067c4a; (* arm_MUL X10 X2 X6 *) + 0x9bc67c4f; (* arm_UMULH X15 X2 X6 *) + 0xba0a01ce; (* arm_ADCS X14 X14 X10 *) + 0x9b077c4a; (* arm_MUL X10 X2 X7 *) + 0x9bc77c50; (* arm_UMULH X16 X2 X7 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x9b087c4a; (* arm_MUL X10 X2 X8 *) + 0x9bc87c51; (* arm_UMULH X17 X2 X8 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9b097c4a; (* arm_MUL X10 X2 X9 *) + 0x9bc97c53; (* arm_UMULH X19 X2 X9 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0x9b047c6a; (* arm_MUL X10 X3 X4 *) + 0xab0a01ad; (* arm_ADDS X13 X13 X10 *) + 0x9b057c6a; (* arm_MUL X10 X3 X5 *) + 0xba0a01ce; (* arm_ADCS X14 X14 X10 *) + 0x9b067c6a; (* arm_MUL X10 X3 X6 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x9b077c6a; (* arm_MUL X10 X3 X7 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9b087c6a; (* arm_MUL X10 X3 X8 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9b097c6a; (* arm_MUL X10 X3 X9 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc47c6a; (* arm_UMULH X10 X3 X4 *) + 0xab0a01ce; (* arm_ADDS X14 X14 X10 *) + 0x9bc57c6a; (* arm_UMULH X10 X3 X5 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x9bc67c6a; (* arm_UMULH X10 X3 X6 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9bc77c6a; (* arm_UMULH X10 X3 X7 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9bc87c6a; (* arm_UMULH X10 X3 X8 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9bc97c6a; (* arm_UMULH X10 X3 X9 *) + 0x9a0a0294; (* arm_ADC X20 X20 X10 *) + 0x9b077cca; (* arm_MUL X10 X6 X7 *) + 0x9bc77cd5; (* arm_UMULH X21 X6 X7 *) + 0xab0a0294; (* arm_ADDS X20 X20 X10 *) + 0x9a1f02b5; (* arm_ADC X21 X21 XZR *) + 0x9b057c8a; (* arm_MUL X10 X4 X5 *) + 0xab0a01ef; (* arm_ADDS X15 X15 X10 *) + 0x9b067c8a; (* arm_MUL X10 X4 X6 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9b077c8a; (* arm_MUL X10 X4 X7 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9b087c8a; (* arm_MUL X10 X4 X8 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9b097c8a; (* arm_MUL X10 X4 X9 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9b087cca; (* arm_MUL X10 X6 X8 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9a9f37f6; (* arm_CSET X22 Condition_CS *) + 0x9bc57c8a; (* arm_UMULH X10 X4 X5 *) + 0xab0a0210; (* arm_ADDS X16 X16 X10 *) + 0x9bc67c8a; (* arm_UMULH X10 X4 X6 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9bc77c8a; (* arm_UMULH X10 X4 X7 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9bc87c8a; (* arm_UMULH X10 X4 X8 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9bc97c8a; (* arm_UMULH X10 X4 X9 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9bc87cca; (* arm_UMULH X10 X6 X8 *) + 0x9a0a02d6; (* arm_ADC X22 X22 X10 *) + 0x9b087cea; (* arm_MUL X10 X7 X8 *) + 0x9bc87cf7; (* arm_UMULH X23 X7 X8 *) + 0xab0a02d6; (* arm_ADDS X22 X22 X10 *) + 0x9a1f02f7; (* arm_ADC X23 X23 XZR *) + 0x9b067caa; (* arm_MUL X10 X5 X6 *) + 0xab0a0231; (* arm_ADDS X17 X17 X10 *) + 0x9b077caa; (* arm_MUL X10 X5 X7 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9b087caa; (* arm_MUL X10 X5 X8 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9b097caa; (* arm_MUL X10 X5 X9 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9b097cca; (* arm_MUL X10 X6 X9 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9b097cea; (* arm_MUL X10 X7 X9 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9a9f37f8; (* arm_CSET X24 Condition_CS *) + 0x9bc67caa; (* arm_UMULH X10 X5 X6 *) + 0xab0a0273; (* arm_ADDS X19 X19 X10 *) + 0x9bc77caa; (* arm_UMULH X10 X5 X7 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9bc87caa; (* arm_UMULH X10 X5 X8 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9bc97caa; (* arm_UMULH X10 X5 X9 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9bc97cca; (* arm_UMULH X10 X6 X9 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9bc97cea; (* arm_UMULH X10 X7 X9 *) + 0x9a0a0318; (* arm_ADC X24 X24 X10 *) + 0x9b097d0a; (* arm_MUL X10 X8 X9 *) + 0x9bc97d19; (* arm_UMULH X25 X8 X9 *) + 0xab0a0318; (* arm_ADDS X24 X24 X10 *) + 0x9a1f0339; (* arm_ADC X25 X25 XZR *) + 0xab0b016b; (* arm_ADDS X11 X11 X11 *) + 0xba0c018c; (* arm_ADCS X12 X12 X12 *) + 0xba0d01ad; (* arm_ADCS X13 X13 X13 *) + 0xba0e01ce; (* arm_ADCS X14 X14 X14 *) + 0xba0f01ef; (* arm_ADCS X15 X15 X15 *) + 0xba100210; (* arm_ADCS X16 X16 X16 *) + 0xba110231; (* arm_ADCS X17 X17 X17 *) + 0xba130273; (* arm_ADCS X19 X19 X19 *) + 0xba140294; (* arm_ADCS X20 X20 X20 *) + 0xba1502b5; (* arm_ADCS X21 X21 X21 *) + 0xba1602d6; (* arm_ADCS X22 X22 X22 *) + 0xba1702f7; (* arm_ADCS X23 X23 X23 *) + 0xba180318; (* arm_ADCS X24 X24 X24 *) + 0xba190339; (* arm_ADCS X25 X25 X25 *) + 0x9a9f37e0; (* arm_CSET X0 Condition_CS *) + 0x9bc27c4a; (* arm_UMULH X10 X2 X2 *) + 0xab0a016b; (* arm_ADDS X11 X11 X10 *) + 0x9b037c6a; (* arm_MUL X10 X3 X3 *) + 0xba0a018c; (* arm_ADCS X12 X12 X10 *) + 0x9bc37c6a; (* arm_UMULH X10 X3 X3 *) + 0xba0a01ad; (* arm_ADCS X13 X13 X10 *) + 0x9b047c8a; (* arm_MUL X10 X4 X4 *) + 0xba0a01ce; (* arm_ADCS X14 X14 X10 *) + 0x9bc47c8a; (* arm_UMULH X10 X4 X4 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x9b057caa; (* arm_MUL X10 X5 X5 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9bc57caa; (* arm_UMULH X10 X5 X5 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9b067cca; (* arm_MUL X10 X6 X6 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9bc67cca; (* arm_UMULH X10 X6 X6 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9b077cea; (* arm_MUL X10 X7 X7 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9bc77cea; (* arm_UMULH X10 X7 X7 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9b087d0a; (* arm_MUL X10 X8 X8 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9bc87d0a; (* arm_UMULH X10 X8 X8 *) + 0xba0a0318; (* arm_ADCS X24 X24 X10 *) + 0x9b097d2a; (* arm_MUL X10 X9 X9 *) + 0xba0a0339; (* arm_ADCS X25 X25 X10 *) + 0x9bc97d2a; (* arm_UMULH X10 X9 X9 *) + 0x9a0a0000; (* arm_ADC X0 X0 X10 *) + 0xf9406b61; (* arm_LDR X1 X27 (Immediate_Offset (word 208)) *) + 0x8b010021; (* arm_ADD X1 X1 X1 *) + 0x9b027c2a; (* arm_MUL X10 X1 X2 *) + 0xab0a0273; (* arm_ADDS X19 X19 X10 *) + 0x9bc27c2a; (* arm_UMULH X10 X1 X2 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9b047c2a; (* arm_MUL X10 X1 X4 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9bc47c2a; (* arm_UMULH X10 X1 X4 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9b067c2a; (* arm_MUL X10 X1 X6 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9bc67c2a; (* arm_UMULH X10 X1 X6 *) + 0xba0a0318; (* arm_ADCS X24 X24 X10 *) + 0x9b087c2a; (* arm_MUL X10 X1 X8 *) + 0xba0a0339; (* arm_ADCS X25 X25 X10 *) + 0x9bc87c2a; (* arm_UMULH X10 X1 X8 *) + 0xba0a0000; (* arm_ADCS X0 X0 X10 *) + 0xd341fc24; (* arm_LSR X4 X1 1 *) + 0x9b047c84; (* arm_MUL X4 X4 X4 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b037c2a; (* arm_MUL X10 X1 X3 *) + 0xab0a0294; (* arm_ADDS X20 X20 X10 *) + 0x9bc37c2a; (* arm_UMULH X10 X1 X3 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9b057c2a; (* arm_MUL X10 X1 X5 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9bc57c2a; (* arm_UMULH X10 X1 X5 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9b077c2a; (* arm_MUL X10 X1 X7 *) + 0xba0a0318; (* arm_ADCS X24 X24 X10 *) + 0x9bc77c2a; (* arm_UMULH X10 X1 X7 *) + 0xba0a0339; (* arm_ADCS X25 X25 X10 *) + 0x9b097c2a; (* arm_MUL X10 X1 X9 *) + 0xba0a0000; (* arm_ADCS X0 X0 X10 *) + 0x9bc97c2a; (* arm_UMULH X10 X1 X9 *) + 0x9a0a0084; (* arm_ADC X4 X4 X10 *) + 0x9b027c42; (* arm_MUL X2 X2 X2 *) + 0xeb1f03ff; (* arm_CMP XZR XZR *) + 0x93d3268a; (* arm_EXTR X10 X20 X19 9 *) + 0xba0a0042; (* arm_ADCS X2 X2 X10 *) + 0x93d426aa; (* arm_EXTR X10 X21 X20 9 *) + 0xba0a016b; (* arm_ADCS X11 X11 X10 *) + 0x93d526ca; (* arm_EXTR X10 X22 X21 9 *) + 0xba0a018c; (* arm_ADCS X12 X12 X10 *) + 0x93d626ea; (* arm_EXTR X10 X23 X22 9 *) + 0xba0a01ad; (* arm_ADCS X13 X13 X10 *) + 0x93d7270a; (* arm_EXTR X10 X24 X23 9 *) + 0xba0a01ce; (* arm_ADCS X14 X14 X10 *) + 0x93d8272a; (* arm_EXTR X10 X25 X24 9 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x93d9240a; (* arm_EXTR X10 X0 X25 9 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x93c0248a; (* arm_EXTR X10 X4 X0 9 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0xb277da73; (* arm_ORR X19 X19 (rvalue (word 18446744073709551104)) *) + 0xd349fc8a; (* arm_LSR X10 X4 9 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0xfa1f0042; (* arm_SBCS X2 X2 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xda1f0273; (* arm_SBC X19 X19 XZR *) + 0x92402273; (* arm_AND X19 X19 (rvalue (word 511)) *) + 0xa9002fe2; (* arm_STP X2 X11 SP (Immediate_Offset (iword (&0))) *) + 0xa90137ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&16))) *) + 0xa9023fee; (* arm_STP X14 X15 SP (Immediate_Offset (iword (&32))) *) + 0xa90347f0; (* arm_STP X16 X17 SP (Immediate_Offset (iword (&48))) *) + 0xf90023f3; (* arm_STR X19 SP (Immediate_Offset (word 64)) *) + 0xa9491363; (* arm_LDP X3 X4 X27 (Immediate_Offset (iword (&144))) *) + 0xa9449b85; (* arm_LDP X5 X6 X28 (Immediate_Offset (iword (&72))) *) + 0x9b057c6f; (* arm_MUL X15 X3 X5 *) + 0x9bc57c70; (* arm_UMULH X16 X3 X5 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0x9bc67c71; (* arm_UMULH X17 X3 X6 *) + 0xab0e0210; (* arm_ADDS X16 X16 X14 *) + 0xa945a387; (* arm_LDP X7 X8 X28 (Immediate_Offset (iword (&88))) *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0x9bc77c73; (* arm_UMULH X19 X3 X7 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0x9bc87c74; (* arm_UMULH X20 X3 X8 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0xa946ab89; (* arm_LDP X9 X10 X28 (Immediate_Offset (iword (&104))) *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0x9bc97c75; (* arm_UMULH X21 X3 X9 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0x9bca7c76; (* arm_UMULH X22 X3 X10 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0xa947b38b; (* arm_LDP X11 X12 X28 (Immediate_Offset (iword (&120))) *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0x9bcb7c77; (* arm_UMULH X23 X3 X11 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0xf940478d; (* arm_LDR X13 X28 (Immediate_Offset (word 136)) *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0x9bcc7c78; (* arm_UMULH X24 X3 X12 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0x9bcd7c61; (* arm_UMULH X1 X3 X13 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e0210; (* arm_ADDS X16 X16 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9a9f37e0; (* arm_CSET X0 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0231; (* arm_ADDS X17 X17 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0000; (* arm_ADC X0 X0 X14 *) + 0xa904c3ef; (* arm_STP X15 X16 SP (Immediate_Offset (iword (&72))) *) + 0xa94a1363; (* arm_LDP X3 X4 X27 (Immediate_Offset (iword (&160))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0231; (* arm_ADDS X17 X17 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9a9f37ef; (* arm_CSET X15 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e0273; (* arm_ADDS X19 X19 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e01ef; (* arm_ADC X15 X15 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e0273; (* arm_ADDS X19 X19 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9a9f37f0; (* arm_CSET X16 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0294; (* arm_ADDS X20 X20 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0210; (* arm_ADC X16 X16 X14 *) + 0xa905cff1; (* arm_STP X17 X19 SP (Immediate_Offset (iword (&88))) *) + 0xa94b1363; (* arm_LDP X3 X4 X27 (Immediate_Offset (iword (&176))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0294; (* arm_ADDS X20 X20 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9a9f37f1; (* arm_CSET X17 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e02b5; (* arm_ADDS X21 X21 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e0231; (* arm_ADC X17 X17 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e02b5; (* arm_ADDS X21 X21 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9a9f37f3; (* arm_CSET X19 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e02d6; (* arm_ADDS X22 X22 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0273; (* arm_ADC X19 X19 X14 *) + 0xa906d7f4; (* arm_STP X20 X21 SP (Immediate_Offset (iword (&104))) *) + 0xa94c1363; (* arm_LDP X3 X4 X27 (Immediate_Offset (iword (&192))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e02d6; (* arm_ADDS X22 X22 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e02f7; (* arm_ADDS X23 X23 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e0294; (* arm_ADC X20 X20 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e02f7; (* arm_ADDS X23 X23 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9a9f37f5; (* arm_CSET X21 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0318; (* arm_ADDS X24 X24 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0xa907dff6; (* arm_STP X22 X23 SP (Immediate_Offset (iword (&120))) *) + 0xf9406b63; (* arm_LDR X3 X27 (Immediate_Offset (word 208)) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0318; (* arm_ADDS X24 X24 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e0021; (* arm_ADDS X1 X1 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0xeb1f03ff; (* arm_CMP XZR XZR *) + 0xa9449be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&72))) *) + 0x93d8242e; (* arm_EXTR X14 X1 X24 9 *) + 0xba0e00a5; (* arm_ADCS X5 X5 X14 *) + 0x93c1240e; (* arm_EXTR X14 X0 X1 9 *) + 0xba0e00c6; (* arm_ADCS X6 X6 X14 *) + 0xa945a3e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&88))) *) + 0x93c025ee; (* arm_EXTR X14 X15 X0 9 *) + 0xba0e00e7; (* arm_ADCS X7 X7 X14 *) + 0x93cf260e; (* arm_EXTR X14 X16 X15 9 *) + 0xba0e0108; (* arm_ADCS X8 X8 X14 *) + 0xa946abe9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&104))) *) + 0x93d0262e; (* arm_EXTR X14 X17 X16 9 *) + 0xba0e0129; (* arm_ADCS X9 X9 X14 *) + 0x93d1266e; (* arm_EXTR X14 X19 X17 9 *) + 0xba0e014a; (* arm_ADCS X10 X10 X14 *) + 0xa947b3eb; (* arm_LDP X11 X12 SP (Immediate_Offset (iword (&120))) *) + 0x93d3268e; (* arm_EXTR X14 X20 X19 9 *) + 0xba0e016b; (* arm_ADCS X11 X11 X14 *) + 0x93d426ae; (* arm_EXTR X14 X21 X20 9 *) + 0xba0e018c; (* arm_ADCS X12 X12 X14 *) + 0xb277db0d; (* arm_ORR X13 X24 (rvalue (word 18446744073709551104)) *) + 0xd349feae; (* arm_LSR X14 X21 9 *) + 0xba0e01ad; (* arm_ADCS X13 X13 X14 *) + 0xfa1f00a5; (* arm_SBCS X5 X5 XZR *) + 0xfa1f00c6; (* arm_SBCS X6 X6 XZR *) + 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) + 0xfa1f0108; (* arm_SBCS X8 X8 XZR *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda1f01ad; (* arm_SBC X13 X13 XZR *) + 0x924021ad; (* arm_AND X13 X13 (rvalue (word 511)) *) + 0xa9049be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&72))) *) + 0xa905a3e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&88))) *) + 0xa906abe9; (* arm_STP X9 X10 SP (Immediate_Offset (iword (&104))) *) + 0xa907b3eb; (* arm_STP X11 X12 SP (Immediate_Offset (iword (&120))) *) + 0xf90047ed; (* arm_STR X13 SP (Immediate_Offset (word 136)) *) + 0xa94013e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&0))) *) + 0xa9401b85; (* arm_LDP X5 X6 X28 (Immediate_Offset (iword (&0))) *) + 0x9b057c6f; (* arm_MUL X15 X3 X5 *) + 0x9bc57c70; (* arm_UMULH X16 X3 X5 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0x9bc67c71; (* arm_UMULH X17 X3 X6 *) + 0xab0e0210; (* arm_ADDS X16 X16 X14 *) + 0xa9412387; (* arm_LDP X7 X8 X28 (Immediate_Offset (iword (&16))) *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0x9bc77c73; (* arm_UMULH X19 X3 X7 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0x9bc87c74; (* arm_UMULH X20 X3 X8 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0xa9422b89; (* arm_LDP X9 X10 X28 (Immediate_Offset (iword (&32))) *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0x9bc97c75; (* arm_UMULH X21 X3 X9 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0x9bca7c76; (* arm_UMULH X22 X3 X10 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0xa943338b; (* arm_LDP X11 X12 X28 (Immediate_Offset (iword (&48))) *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0x9bcb7c77; (* arm_UMULH X23 X3 X11 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0xf940238d; (* arm_LDR X13 X28 (Immediate_Offset (word 64)) *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0x9bcc7c78; (* arm_UMULH X24 X3 X12 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0x9bcd7c61; (* arm_UMULH X1 X3 X13 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e0210; (* arm_ADDS X16 X16 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9a9f37e0; (* arm_CSET X0 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0231; (* arm_ADDS X17 X17 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0000; (* arm_ADC X0 X0 X14 *) + 0xa90943ef; (* arm_STP X15 X16 SP (Immediate_Offset (iword (&144))) *) + 0xa94113e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&16))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0231; (* arm_ADDS X17 X17 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9a9f37ef; (* arm_CSET X15 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e0273; (* arm_ADDS X19 X19 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e01ef; (* arm_ADC X15 X15 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e0273; (* arm_ADDS X19 X19 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9a9f37f0; (* arm_CSET X16 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0294; (* arm_ADDS X20 X20 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0210; (* arm_ADC X16 X16 X14 *) + 0xa90a4ff1; (* arm_STP X17 X19 SP (Immediate_Offset (iword (&160))) *) + 0xa94213e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&32))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0294; (* arm_ADDS X20 X20 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9a9f37f1; (* arm_CSET X17 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e02b5; (* arm_ADDS X21 X21 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e0231; (* arm_ADC X17 X17 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e02b5; (* arm_ADDS X21 X21 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9a9f37f3; (* arm_CSET X19 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e02d6; (* arm_ADDS X22 X22 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0273; (* arm_ADC X19 X19 X14 *) + 0xa90b57f4; (* arm_STP X20 X21 SP (Immediate_Offset (iword (&176))) *) + 0xa94313e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&48))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e02d6; (* arm_ADDS X22 X22 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e02f7; (* arm_ADDS X23 X23 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e0294; (* arm_ADC X20 X20 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e02f7; (* arm_ADDS X23 X23 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9a9f37f5; (* arm_CSET X21 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0318; (* arm_ADDS X24 X24 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0xa90c5ff6; (* arm_STP X22 X23 SP (Immediate_Offset (iword (&192))) *) + 0xf94023e3; (* arm_LDR X3 SP (Immediate_Offset (word 64)) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0318; (* arm_ADDS X24 X24 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e0021; (* arm_ADDS X1 X1 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0xeb1f03ff; (* arm_CMP XZR XZR *) + 0xa9491be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&144))) *) + 0x93d8242e; (* arm_EXTR X14 X1 X24 9 *) + 0xba0e00a5; (* arm_ADCS X5 X5 X14 *) + 0x93c1240e; (* arm_EXTR X14 X0 X1 9 *) + 0xba0e00c6; (* arm_ADCS X6 X6 X14 *) + 0xa94a23e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&160))) *) + 0x93c025ee; (* arm_EXTR X14 X15 X0 9 *) + 0xba0e00e7; (* arm_ADCS X7 X7 X14 *) + 0x93cf260e; (* arm_EXTR X14 X16 X15 9 *) + 0xba0e0108; (* arm_ADCS X8 X8 X14 *) + 0xa94b2be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&176))) *) + 0x93d0262e; (* arm_EXTR X14 X17 X16 9 *) + 0xba0e0129; (* arm_ADCS X9 X9 X14 *) + 0x93d1266e; (* arm_EXTR X14 X19 X17 9 *) + 0xba0e014a; (* arm_ADCS X10 X10 X14 *) + 0xa94c33eb; (* arm_LDP X11 X12 SP (Immediate_Offset (iword (&192))) *) + 0x93d3268e; (* arm_EXTR X14 X20 X19 9 *) + 0xba0e016b; (* arm_ADCS X11 X11 X14 *) + 0x93d426ae; (* arm_EXTR X14 X21 X20 9 *) + 0xba0e018c; (* arm_ADCS X12 X12 X14 *) + 0xb277db0d; (* arm_ORR X13 X24 (rvalue (word 18446744073709551104)) *) + 0xd349feae; (* arm_LSR X14 X21 9 *) + 0xba0e01ad; (* arm_ADCS X13 X13 X14 *) + 0xfa1f00a5; (* arm_SBCS X5 X5 XZR *) + 0xfa1f00c6; (* arm_SBCS X6 X6 XZR *) + 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) + 0xfa1f0108; (* arm_SBCS X8 X8 XZR *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda1f01ad; (* arm_SBC X13 X13 XZR *) + 0x924021ad; (* arm_AND X13 X13 (rvalue (word 511)) *) + 0xa9091be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&144))) *) + 0xa90a23e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&160))) *) + 0xa90b2be9; (* arm_STP X9 X10 SP (Immediate_Offset (iword (&176))) *) + 0xa90c33eb; (* arm_STP X11 X12 SP (Immediate_Offset (iword (&192))) *) + 0xf9006bed; (* arm_STR X13 SP (Immediate_Offset (word 208)) *) + 0xa94013e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&0))) *) + 0xa9449be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&72))) *) + 0x9b057c6f; (* arm_MUL X15 X3 X5 *) + 0x9bc57c70; (* arm_UMULH X16 X3 X5 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0x9bc67c71; (* arm_UMULH X17 X3 X6 *) + 0xab0e0210; (* arm_ADDS X16 X16 X14 *) + 0xa945a3e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&88))) *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0x9bc77c73; (* arm_UMULH X19 X3 X7 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0x9bc87c74; (* arm_UMULH X20 X3 X8 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0xa946abe9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&104))) *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0x9bc97c75; (* arm_UMULH X21 X3 X9 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0x9bca7c76; (* arm_UMULH X22 X3 X10 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0xa947b3eb; (* arm_LDP X11 X12 SP (Immediate_Offset (iword (&120))) *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0x9bcb7c77; (* arm_UMULH X23 X3 X11 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0xf94047ed; (* arm_LDR X13 SP (Immediate_Offset (word 136)) *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0x9bcc7c78; (* arm_UMULH X24 X3 X12 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0x9bcd7c61; (* arm_UMULH X1 X3 X13 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e0210; (* arm_ADDS X16 X16 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9a9f37e0; (* arm_CSET X0 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0231; (* arm_ADDS X17 X17 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0000; (* arm_ADC X0 X0 X14 *) + 0xa904c3ef; (* arm_STP X15 X16 SP (Immediate_Offset (iword (&72))) *) + 0xa94113e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&16))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0231; (* arm_ADDS X17 X17 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9a9f37ef; (* arm_CSET X15 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e0273; (* arm_ADDS X19 X19 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e01ef; (* arm_ADC X15 X15 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e0273; (* arm_ADDS X19 X19 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9a9f37f0; (* arm_CSET X16 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0294; (* arm_ADDS X20 X20 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0210; (* arm_ADC X16 X16 X14 *) + 0xa905cff1; (* arm_STP X17 X19 SP (Immediate_Offset (iword (&88))) *) + 0xa94213e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&32))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0294; (* arm_ADDS X20 X20 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9a9f37f1; (* arm_CSET X17 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e02b5; (* arm_ADDS X21 X21 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e0231; (* arm_ADC X17 X17 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e02b5; (* arm_ADDS X21 X21 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9a9f37f3; (* arm_CSET X19 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e02d6; (* arm_ADDS X22 X22 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0273; (* arm_ADC X19 X19 X14 *) + 0xa906d7f4; (* arm_STP X20 X21 SP (Immediate_Offset (iword (&104))) *) + 0xa94313e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&48))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e02d6; (* arm_ADDS X22 X22 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e02f7; (* arm_ADDS X23 X23 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e0294; (* arm_ADC X20 X20 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e02f7; (* arm_ADDS X23 X23 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9a9f37f5; (* arm_CSET X21 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0318; (* arm_ADDS X24 X24 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0xa907dff6; (* arm_STP X22 X23 SP (Immediate_Offset (iword (&120))) *) + 0xf94023e3; (* arm_LDR X3 SP (Immediate_Offset (word 64)) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0318; (* arm_ADDS X24 X24 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e0021; (* arm_ADDS X1 X1 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0xeb1f03ff; (* arm_CMP XZR XZR *) + 0xa9449be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&72))) *) + 0x93d8242e; (* arm_EXTR X14 X1 X24 9 *) + 0xba0e00a5; (* arm_ADCS X5 X5 X14 *) + 0x93c1240e; (* arm_EXTR X14 X0 X1 9 *) + 0xba0e00c6; (* arm_ADCS X6 X6 X14 *) + 0xa945a3e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&88))) *) + 0x93c025ee; (* arm_EXTR X14 X15 X0 9 *) + 0xba0e00e7; (* arm_ADCS X7 X7 X14 *) + 0x93cf260e; (* arm_EXTR X14 X16 X15 9 *) + 0xba0e0108; (* arm_ADCS X8 X8 X14 *) + 0xa946abe9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&104))) *) + 0x93d0262e; (* arm_EXTR X14 X17 X16 9 *) + 0xba0e0129; (* arm_ADCS X9 X9 X14 *) + 0x93d1266e; (* arm_EXTR X14 X19 X17 9 *) + 0xba0e014a; (* arm_ADCS X10 X10 X14 *) + 0xa947b3eb; (* arm_LDP X11 X12 SP (Immediate_Offset (iword (&120))) *) + 0x93d3268e; (* arm_EXTR X14 X20 X19 9 *) + 0xba0e016b; (* arm_ADCS X11 X11 X14 *) + 0x93d426ae; (* arm_EXTR X14 X21 X20 9 *) + 0xba0e018c; (* arm_ADCS X12 X12 X14 *) + 0xb277db0d; (* arm_ORR X13 X24 (rvalue (word 18446744073709551104)) *) + 0xd349feae; (* arm_LSR X14 X21 9 *) + 0xba0e01ad; (* arm_ADCS X13 X13 X14 *) + 0xfa1f00a5; (* arm_SBCS X5 X5 XZR *) + 0xfa1f00c6; (* arm_SBCS X6 X6 XZR *) + 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) + 0xfa1f0108; (* arm_SBCS X8 X8 XZR *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda1f01ad; (* arm_SBC X13 X13 XZR *) + 0x924021ad; (* arm_AND X13 X13 (rvalue (word 511)) *) + 0xa9049be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&72))) *) + 0xa905a3e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&88))) *) + 0xa906abe9; (* arm_STP X9 X10 SP (Immediate_Offset (iword (&104))) *) + 0xa907b3eb; (* arm_STP X11 X12 SP (Immediate_Offset (iword (&120))) *) + 0xf90047ed; (* arm_STR X13 SP (Immediate_Offset (word 136)) *) + 0xa9491be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&144))) *) + 0xa9400f64; (* arm_LDP X4 X3 X27 (Immediate_Offset (iword (&0))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa94a23e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&160))) *) + 0xa9410f64; (* arm_LDP X4 X3 X27 (Immediate_Offset (iword (&16))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xa94b2be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&176))) *) + 0xa9420f64; (* arm_LDP X4 X3 X27 (Immediate_Offset (iword (&32))) *) + 0xfa040129; (* arm_SBCS X9 X9 X4 *) + 0xfa03014a; (* arm_SBCS X10 X10 X3 *) + 0xa94c33eb; (* arm_LDP X11 X12 SP (Immediate_Offset (iword (&192))) *) + 0xa9430f64; (* arm_LDP X4 X3 X27 (Immediate_Offset (iword (&48))) *) + 0xfa04016b; (* arm_SBCS X11 X11 X4 *) + 0xfa03018c; (* arm_SBCS X12 X12 X3 *) + 0xf9406bed; (* arm_LDR X13 SP (Immediate_Offset (word 208)) *) + 0xf9402364; (* arm_LDR X4 X27 (Immediate_Offset (word 64)) *) + 0xfa0401ad; (* arm_SBCS X13 X13 X4 *) + 0xfa1f00a5; (* arm_SBCS X5 X5 XZR *) + 0xfa1f00c6; (* arm_SBCS X6 X6 XZR *) + 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) + 0xfa1f0108; (* arm_SBCS X8 X8 XZR *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0x924021ad; (* arm_AND X13 X13 (rvalue (word 511)) *) + 0xa9169be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&360))) *) + 0xa917a3e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&376))) *) + 0xa918abe9; (* arm_STP X9 X10 SP (Immediate_Offset (iword (&392))) *) + 0xa919b3eb; (* arm_STP X11 X12 SP (Immediate_Offset (iword (&408))) *) + 0xf900d7ed; (* arm_STR X13 SP (Immediate_Offset (word 424)) *) + 0xa9449be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&72))) *) + 0xa9448f64; (* arm_LDP X4 X3 X27 (Immediate_Offset (iword (&72))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa945a3e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&88))) *) + 0xa9458f64; (* arm_LDP X4 X3 X27 (Immediate_Offset (iword (&88))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xa946abe9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&104))) *) + 0xa9468f64; (* arm_LDP X4 X3 X27 (Immediate_Offset (iword (&104))) *) + 0xfa040129; (* arm_SBCS X9 X9 X4 *) + 0xfa03014a; (* arm_SBCS X10 X10 X3 *) + 0xa947b3eb; (* arm_LDP X11 X12 SP (Immediate_Offset (iword (&120))) *) + 0xa9478f64; (* arm_LDP X4 X3 X27 (Immediate_Offset (iword (&120))) *) + 0xfa04016b; (* arm_SBCS X11 X11 X4 *) + 0xfa03018c; (* arm_SBCS X12 X12 X3 *) + 0xf94047ed; (* arm_LDR X13 SP (Immediate_Offset (word 136)) *) + 0xf9404764; (* arm_LDR X4 X27 (Immediate_Offset (word 136)) *) + 0xfa0401ad; (* arm_SBCS X13 X13 X4 *) + 0xfa1f00a5; (* arm_SBCS X5 X5 XZR *) + 0xfa1f00c6; (* arm_SBCS X6 X6 XZR *) + 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) + 0xfa1f0108; (* arm_SBCS X8 X8 XZR *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0x924021ad; (* arm_AND X13 X13 (rvalue (word 511)) *) + 0xa9049be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&72))) *) + 0xa905a3e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&88))) *) + 0xa906abe9; (* arm_STP X9 X10 SP (Immediate_Offset (iword (&104))) *) + 0xa907b3eb; (* arm_STP X11 X12 SP (Immediate_Offset (iword (&120))) *) + 0xf90047ed; (* arm_STR X13 SP (Immediate_Offset (word 136)) *) + 0xa9568fe2; (* arm_LDP X2 X3 SP (Immediate_Offset (iword (&360))) *) + 0x9b037c4b; (* arm_MUL X11 X2 X3 *) + 0x9bc37c4c; (* arm_UMULH X12 X2 X3 *) + 0xa95797e4; (* arm_LDP X4 X5 SP (Immediate_Offset (iword (&376))) *) + 0x9b047c4a; (* arm_MUL X10 X2 X4 *) + 0x9bc47c4d; (* arm_UMULH X13 X2 X4 *) + 0xab0a018c; (* arm_ADDS X12 X12 X10 *) + 0xa9589fe6; (* arm_LDP X6 X7 SP (Immediate_Offset (iword (&392))) *) + 0x9b057c4a; (* arm_MUL X10 X2 X5 *) + 0x9bc57c4e; (* arm_UMULH X14 X2 X5 *) + 0xba0a01ad; (* arm_ADCS X13 X13 X10 *) + 0xa959a7e8; (* arm_LDP X8 X9 SP (Immediate_Offset (iword (&408))) *) + 0x9b067c4a; (* arm_MUL X10 X2 X6 *) + 0x9bc67c4f; (* arm_UMULH X15 X2 X6 *) + 0xba0a01ce; (* arm_ADCS X14 X14 X10 *) + 0x9b077c4a; (* arm_MUL X10 X2 X7 *) + 0x9bc77c50; (* arm_UMULH X16 X2 X7 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x9b087c4a; (* arm_MUL X10 X2 X8 *) + 0x9bc87c51; (* arm_UMULH X17 X2 X8 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9b097c4a; (* arm_MUL X10 X2 X9 *) + 0x9bc97c53; (* arm_UMULH X19 X2 X9 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0x9b047c6a; (* arm_MUL X10 X3 X4 *) + 0xab0a01ad; (* arm_ADDS X13 X13 X10 *) + 0x9b057c6a; (* arm_MUL X10 X3 X5 *) + 0xba0a01ce; (* arm_ADCS X14 X14 X10 *) + 0x9b067c6a; (* arm_MUL X10 X3 X6 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x9b077c6a; (* arm_MUL X10 X3 X7 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9b087c6a; (* arm_MUL X10 X3 X8 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9b097c6a; (* arm_MUL X10 X3 X9 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc47c6a; (* arm_UMULH X10 X3 X4 *) + 0xab0a01ce; (* arm_ADDS X14 X14 X10 *) + 0x9bc57c6a; (* arm_UMULH X10 X3 X5 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x9bc67c6a; (* arm_UMULH X10 X3 X6 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9bc77c6a; (* arm_UMULH X10 X3 X7 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9bc87c6a; (* arm_UMULH X10 X3 X8 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9bc97c6a; (* arm_UMULH X10 X3 X9 *) + 0x9a0a0294; (* arm_ADC X20 X20 X10 *) + 0x9b077cca; (* arm_MUL X10 X6 X7 *) + 0x9bc77cd5; (* arm_UMULH X21 X6 X7 *) + 0xab0a0294; (* arm_ADDS X20 X20 X10 *) + 0x9a1f02b5; (* arm_ADC X21 X21 XZR *) + 0x9b057c8a; (* arm_MUL X10 X4 X5 *) + 0xab0a01ef; (* arm_ADDS X15 X15 X10 *) + 0x9b067c8a; (* arm_MUL X10 X4 X6 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9b077c8a; (* arm_MUL X10 X4 X7 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9b087c8a; (* arm_MUL X10 X4 X8 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9b097c8a; (* arm_MUL X10 X4 X9 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9b087cca; (* arm_MUL X10 X6 X8 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9a9f37f6; (* arm_CSET X22 Condition_CS *) + 0x9bc57c8a; (* arm_UMULH X10 X4 X5 *) + 0xab0a0210; (* arm_ADDS X16 X16 X10 *) + 0x9bc67c8a; (* arm_UMULH X10 X4 X6 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9bc77c8a; (* arm_UMULH X10 X4 X7 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9bc87c8a; (* arm_UMULH X10 X4 X8 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9bc97c8a; (* arm_UMULH X10 X4 X9 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9bc87cca; (* arm_UMULH X10 X6 X8 *) + 0x9a0a02d6; (* arm_ADC X22 X22 X10 *) + 0x9b087cea; (* arm_MUL X10 X7 X8 *) + 0x9bc87cf7; (* arm_UMULH X23 X7 X8 *) + 0xab0a02d6; (* arm_ADDS X22 X22 X10 *) + 0x9a1f02f7; (* arm_ADC X23 X23 XZR *) + 0x9b067caa; (* arm_MUL X10 X5 X6 *) + 0xab0a0231; (* arm_ADDS X17 X17 X10 *) + 0x9b077caa; (* arm_MUL X10 X5 X7 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9b087caa; (* arm_MUL X10 X5 X8 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9b097caa; (* arm_MUL X10 X5 X9 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9b097cca; (* arm_MUL X10 X6 X9 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9b097cea; (* arm_MUL X10 X7 X9 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9a9f37f8; (* arm_CSET X24 Condition_CS *) + 0x9bc67caa; (* arm_UMULH X10 X5 X6 *) + 0xab0a0273; (* arm_ADDS X19 X19 X10 *) + 0x9bc77caa; (* arm_UMULH X10 X5 X7 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9bc87caa; (* arm_UMULH X10 X5 X8 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9bc97caa; (* arm_UMULH X10 X5 X9 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9bc97cca; (* arm_UMULH X10 X6 X9 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9bc97cea; (* arm_UMULH X10 X7 X9 *) + 0x9a0a0318; (* arm_ADC X24 X24 X10 *) + 0x9b097d0a; (* arm_MUL X10 X8 X9 *) + 0x9bc97d19; (* arm_UMULH X25 X8 X9 *) + 0xab0a0318; (* arm_ADDS X24 X24 X10 *) + 0x9a1f0339; (* arm_ADC X25 X25 XZR *) + 0xab0b016b; (* arm_ADDS X11 X11 X11 *) + 0xba0c018c; (* arm_ADCS X12 X12 X12 *) + 0xba0d01ad; (* arm_ADCS X13 X13 X13 *) + 0xba0e01ce; (* arm_ADCS X14 X14 X14 *) + 0xba0f01ef; (* arm_ADCS X15 X15 X15 *) + 0xba100210; (* arm_ADCS X16 X16 X16 *) + 0xba110231; (* arm_ADCS X17 X17 X17 *) + 0xba130273; (* arm_ADCS X19 X19 X19 *) + 0xba140294; (* arm_ADCS X20 X20 X20 *) + 0xba1502b5; (* arm_ADCS X21 X21 X21 *) + 0xba1602d6; (* arm_ADCS X22 X22 X22 *) + 0xba1702f7; (* arm_ADCS X23 X23 X23 *) + 0xba180318; (* arm_ADCS X24 X24 X24 *) + 0xba190339; (* arm_ADCS X25 X25 X25 *) + 0x9a9f37e0; (* arm_CSET X0 Condition_CS *) + 0x9bc27c4a; (* arm_UMULH X10 X2 X2 *) + 0xab0a016b; (* arm_ADDS X11 X11 X10 *) + 0x9b037c6a; (* arm_MUL X10 X3 X3 *) + 0xba0a018c; (* arm_ADCS X12 X12 X10 *) + 0x9bc37c6a; (* arm_UMULH X10 X3 X3 *) + 0xba0a01ad; (* arm_ADCS X13 X13 X10 *) + 0x9b047c8a; (* arm_MUL X10 X4 X4 *) + 0xba0a01ce; (* arm_ADCS X14 X14 X10 *) + 0x9bc47c8a; (* arm_UMULH X10 X4 X4 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x9b057caa; (* arm_MUL X10 X5 X5 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9bc57caa; (* arm_UMULH X10 X5 X5 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9b067cca; (* arm_MUL X10 X6 X6 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9bc67cca; (* arm_UMULH X10 X6 X6 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9b077cea; (* arm_MUL X10 X7 X7 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9bc77cea; (* arm_UMULH X10 X7 X7 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9b087d0a; (* arm_MUL X10 X8 X8 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9bc87d0a; (* arm_UMULH X10 X8 X8 *) + 0xba0a0318; (* arm_ADCS X24 X24 X10 *) + 0x9b097d2a; (* arm_MUL X10 X9 X9 *) + 0xba0a0339; (* arm_ADCS X25 X25 X10 *) + 0x9bc97d2a; (* arm_UMULH X10 X9 X9 *) + 0x9a0a0000; (* arm_ADC X0 X0 X10 *) + 0xf940d7e1; (* arm_LDR X1 SP (Immediate_Offset (word 424)) *) + 0x8b010021; (* arm_ADD X1 X1 X1 *) + 0x9b027c2a; (* arm_MUL X10 X1 X2 *) + 0xab0a0273; (* arm_ADDS X19 X19 X10 *) + 0x9bc27c2a; (* arm_UMULH X10 X1 X2 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9b047c2a; (* arm_MUL X10 X1 X4 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9bc47c2a; (* arm_UMULH X10 X1 X4 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9b067c2a; (* arm_MUL X10 X1 X6 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9bc67c2a; (* arm_UMULH X10 X1 X6 *) + 0xba0a0318; (* arm_ADCS X24 X24 X10 *) + 0x9b087c2a; (* arm_MUL X10 X1 X8 *) + 0xba0a0339; (* arm_ADCS X25 X25 X10 *) + 0x9bc87c2a; (* arm_UMULH X10 X1 X8 *) + 0xba0a0000; (* arm_ADCS X0 X0 X10 *) + 0xd341fc24; (* arm_LSR X4 X1 1 *) + 0x9b047c84; (* arm_MUL X4 X4 X4 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b037c2a; (* arm_MUL X10 X1 X3 *) + 0xab0a0294; (* arm_ADDS X20 X20 X10 *) + 0x9bc37c2a; (* arm_UMULH X10 X1 X3 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9b057c2a; (* arm_MUL X10 X1 X5 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9bc57c2a; (* arm_UMULH X10 X1 X5 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9b077c2a; (* arm_MUL X10 X1 X7 *) + 0xba0a0318; (* arm_ADCS X24 X24 X10 *) + 0x9bc77c2a; (* arm_UMULH X10 X1 X7 *) + 0xba0a0339; (* arm_ADCS X25 X25 X10 *) + 0x9b097c2a; (* arm_MUL X10 X1 X9 *) + 0xba0a0000; (* arm_ADCS X0 X0 X10 *) + 0x9bc97c2a; (* arm_UMULH X10 X1 X9 *) + 0x9a0a0084; (* arm_ADC X4 X4 X10 *) + 0x9b027c42; (* arm_MUL X2 X2 X2 *) + 0xeb1f03ff; (* arm_CMP XZR XZR *) + 0x93d3268a; (* arm_EXTR X10 X20 X19 9 *) + 0xba0a0042; (* arm_ADCS X2 X2 X10 *) + 0x93d426aa; (* arm_EXTR X10 X21 X20 9 *) + 0xba0a016b; (* arm_ADCS X11 X11 X10 *) + 0x93d526ca; (* arm_EXTR X10 X22 X21 9 *) + 0xba0a018c; (* arm_ADCS X12 X12 X10 *) + 0x93d626ea; (* arm_EXTR X10 X23 X22 9 *) + 0xba0a01ad; (* arm_ADCS X13 X13 X10 *) + 0x93d7270a; (* arm_EXTR X10 X24 X23 9 *) + 0xba0a01ce; (* arm_ADCS X14 X14 X10 *) + 0x93d8272a; (* arm_EXTR X10 X25 X24 9 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x93d9240a; (* arm_EXTR X10 X0 X25 9 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x93c0248a; (* arm_EXTR X10 X4 X0 9 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0xb277da73; (* arm_ORR X19 X19 (rvalue (word 18446744073709551104)) *) + 0xd349fc8a; (* arm_LSR X10 X4 9 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0xfa1f0042; (* arm_SBCS X2 X2 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xda1f0273; (* arm_SBC X19 X19 XZR *) + 0x92402273; (* arm_AND X19 X19 (rvalue (word 511)) *) + 0xa90dafe2; (* arm_STP X2 X11 SP (Immediate_Offset (iword (&216))) *) + 0xa90eb7ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&232))) *) + 0xa90fbfee; (* arm_STP X14 X15 SP (Immediate_Offset (iword (&248))) *) + 0xa910c7f0; (* arm_STP X16 X17 SP (Immediate_Offset (iword (&264))) *) + 0xf9008ff3; (* arm_STR X19 SP (Immediate_Offset (word 280)) *) + 0xa9448fe2; (* arm_LDP X2 X3 SP (Immediate_Offset (iword (&72))) *) + 0x9b037c4b; (* arm_MUL X11 X2 X3 *) + 0x9bc37c4c; (* arm_UMULH X12 X2 X3 *) + 0xa94597e4; (* arm_LDP X4 X5 SP (Immediate_Offset (iword (&88))) *) + 0x9b047c4a; (* arm_MUL X10 X2 X4 *) + 0x9bc47c4d; (* arm_UMULH X13 X2 X4 *) + 0xab0a018c; (* arm_ADDS X12 X12 X10 *) + 0xa9469fe6; (* arm_LDP X6 X7 SP (Immediate_Offset (iword (&104))) *) + 0x9b057c4a; (* arm_MUL X10 X2 X5 *) + 0x9bc57c4e; (* arm_UMULH X14 X2 X5 *) + 0xba0a01ad; (* arm_ADCS X13 X13 X10 *) + 0xa947a7e8; (* arm_LDP X8 X9 SP (Immediate_Offset (iword (&120))) *) + 0x9b067c4a; (* arm_MUL X10 X2 X6 *) + 0x9bc67c4f; (* arm_UMULH X15 X2 X6 *) + 0xba0a01ce; (* arm_ADCS X14 X14 X10 *) + 0x9b077c4a; (* arm_MUL X10 X2 X7 *) + 0x9bc77c50; (* arm_UMULH X16 X2 X7 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x9b087c4a; (* arm_MUL X10 X2 X8 *) + 0x9bc87c51; (* arm_UMULH X17 X2 X8 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9b097c4a; (* arm_MUL X10 X2 X9 *) + 0x9bc97c53; (* arm_UMULH X19 X2 X9 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9a1f0273; (* arm_ADC X19 X19 XZR *) + 0x9b047c6a; (* arm_MUL X10 X3 X4 *) + 0xab0a01ad; (* arm_ADDS X13 X13 X10 *) + 0x9b057c6a; (* arm_MUL X10 X3 X5 *) + 0xba0a01ce; (* arm_ADCS X14 X14 X10 *) + 0x9b067c6a; (* arm_MUL X10 X3 X6 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x9b077c6a; (* arm_MUL X10 X3 X7 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9b087c6a; (* arm_MUL X10 X3 X8 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9b097c6a; (* arm_MUL X10 X3 X9 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc47c6a; (* arm_UMULH X10 X3 X4 *) + 0xab0a01ce; (* arm_ADDS X14 X14 X10 *) + 0x9bc57c6a; (* arm_UMULH X10 X3 X5 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x9bc67c6a; (* arm_UMULH X10 X3 X6 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9bc77c6a; (* arm_UMULH X10 X3 X7 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9bc87c6a; (* arm_UMULH X10 X3 X8 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9bc97c6a; (* arm_UMULH X10 X3 X9 *) + 0x9a0a0294; (* arm_ADC X20 X20 X10 *) + 0x9b077cca; (* arm_MUL X10 X6 X7 *) + 0x9bc77cd5; (* arm_UMULH X21 X6 X7 *) + 0xab0a0294; (* arm_ADDS X20 X20 X10 *) + 0x9a1f02b5; (* arm_ADC X21 X21 XZR *) + 0x9b057c8a; (* arm_MUL X10 X4 X5 *) + 0xab0a01ef; (* arm_ADDS X15 X15 X10 *) + 0x9b067c8a; (* arm_MUL X10 X4 X6 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9b077c8a; (* arm_MUL X10 X4 X7 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9b087c8a; (* arm_MUL X10 X4 X8 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9b097c8a; (* arm_MUL X10 X4 X9 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9b087cca; (* arm_MUL X10 X6 X8 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9a9f37f6; (* arm_CSET X22 Condition_CS *) + 0x9bc57c8a; (* arm_UMULH X10 X4 X5 *) + 0xab0a0210; (* arm_ADDS X16 X16 X10 *) + 0x9bc67c8a; (* arm_UMULH X10 X4 X6 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9bc77c8a; (* arm_UMULH X10 X4 X7 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9bc87c8a; (* arm_UMULH X10 X4 X8 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9bc97c8a; (* arm_UMULH X10 X4 X9 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9bc87cca; (* arm_UMULH X10 X6 X8 *) + 0x9a0a02d6; (* arm_ADC X22 X22 X10 *) + 0x9b087cea; (* arm_MUL X10 X7 X8 *) + 0x9bc87cf7; (* arm_UMULH X23 X7 X8 *) + 0xab0a02d6; (* arm_ADDS X22 X22 X10 *) + 0x9a1f02f7; (* arm_ADC X23 X23 XZR *) + 0x9b067caa; (* arm_MUL X10 X5 X6 *) + 0xab0a0231; (* arm_ADDS X17 X17 X10 *) + 0x9b077caa; (* arm_MUL X10 X5 X7 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9b087caa; (* arm_MUL X10 X5 X8 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9b097caa; (* arm_MUL X10 X5 X9 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9b097cca; (* arm_MUL X10 X6 X9 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9b097cea; (* arm_MUL X10 X7 X9 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9a9f37f8; (* arm_CSET X24 Condition_CS *) + 0x9bc67caa; (* arm_UMULH X10 X5 X6 *) + 0xab0a0273; (* arm_ADDS X19 X19 X10 *) + 0x9bc77caa; (* arm_UMULH X10 X5 X7 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9bc87caa; (* arm_UMULH X10 X5 X8 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9bc97caa; (* arm_UMULH X10 X5 X9 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9bc97cca; (* arm_UMULH X10 X6 X9 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9bc97cea; (* arm_UMULH X10 X7 X9 *) + 0x9a0a0318; (* arm_ADC X24 X24 X10 *) + 0x9b097d0a; (* arm_MUL X10 X8 X9 *) + 0x9bc97d19; (* arm_UMULH X25 X8 X9 *) + 0xab0a0318; (* arm_ADDS X24 X24 X10 *) + 0x9a1f0339; (* arm_ADC X25 X25 XZR *) + 0xab0b016b; (* arm_ADDS X11 X11 X11 *) + 0xba0c018c; (* arm_ADCS X12 X12 X12 *) + 0xba0d01ad; (* arm_ADCS X13 X13 X13 *) + 0xba0e01ce; (* arm_ADCS X14 X14 X14 *) + 0xba0f01ef; (* arm_ADCS X15 X15 X15 *) + 0xba100210; (* arm_ADCS X16 X16 X16 *) + 0xba110231; (* arm_ADCS X17 X17 X17 *) + 0xba130273; (* arm_ADCS X19 X19 X19 *) + 0xba140294; (* arm_ADCS X20 X20 X20 *) + 0xba1502b5; (* arm_ADCS X21 X21 X21 *) + 0xba1602d6; (* arm_ADCS X22 X22 X22 *) + 0xba1702f7; (* arm_ADCS X23 X23 X23 *) + 0xba180318; (* arm_ADCS X24 X24 X24 *) + 0xba190339; (* arm_ADCS X25 X25 X25 *) + 0x9a9f37e0; (* arm_CSET X0 Condition_CS *) + 0x9bc27c4a; (* arm_UMULH X10 X2 X2 *) + 0xab0a016b; (* arm_ADDS X11 X11 X10 *) + 0x9b037c6a; (* arm_MUL X10 X3 X3 *) + 0xba0a018c; (* arm_ADCS X12 X12 X10 *) + 0x9bc37c6a; (* arm_UMULH X10 X3 X3 *) + 0xba0a01ad; (* arm_ADCS X13 X13 X10 *) + 0x9b047c8a; (* arm_MUL X10 X4 X4 *) + 0xba0a01ce; (* arm_ADCS X14 X14 X10 *) + 0x9bc47c8a; (* arm_UMULH X10 X4 X4 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x9b057caa; (* arm_MUL X10 X5 X5 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x9bc57caa; (* arm_UMULH X10 X5 X5 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0x9b067cca; (* arm_MUL X10 X6 X6 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0x9bc67cca; (* arm_UMULH X10 X6 X6 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9b077cea; (* arm_MUL X10 X7 X7 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9bc77cea; (* arm_UMULH X10 X7 X7 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9b087d0a; (* arm_MUL X10 X8 X8 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9bc87d0a; (* arm_UMULH X10 X8 X8 *) + 0xba0a0318; (* arm_ADCS X24 X24 X10 *) + 0x9b097d2a; (* arm_MUL X10 X9 X9 *) + 0xba0a0339; (* arm_ADCS X25 X25 X10 *) + 0x9bc97d2a; (* arm_UMULH X10 X9 X9 *) + 0x9a0a0000; (* arm_ADC X0 X0 X10 *) + 0xf94047e1; (* arm_LDR X1 SP (Immediate_Offset (word 136)) *) + 0x8b010021; (* arm_ADD X1 X1 X1 *) + 0x9b027c2a; (* arm_MUL X10 X1 X2 *) + 0xab0a0273; (* arm_ADDS X19 X19 X10 *) + 0x9bc27c2a; (* arm_UMULH X10 X1 X2 *) + 0xba0a0294; (* arm_ADCS X20 X20 X10 *) + 0x9b047c2a; (* arm_MUL X10 X1 X4 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9bc47c2a; (* arm_UMULH X10 X1 X4 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9b067c2a; (* arm_MUL X10 X1 X6 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9bc67c2a; (* arm_UMULH X10 X1 X6 *) + 0xba0a0318; (* arm_ADCS X24 X24 X10 *) + 0x9b087c2a; (* arm_MUL X10 X1 X8 *) + 0xba0a0339; (* arm_ADCS X25 X25 X10 *) + 0x9bc87c2a; (* arm_UMULH X10 X1 X8 *) + 0xba0a0000; (* arm_ADCS X0 X0 X10 *) + 0xd341fc24; (* arm_LSR X4 X1 1 *) + 0x9b047c84; (* arm_MUL X4 X4 X4 *) + 0x9a1f0084; (* arm_ADC X4 X4 XZR *) + 0x9b037c2a; (* arm_MUL X10 X1 X3 *) + 0xab0a0294; (* arm_ADDS X20 X20 X10 *) + 0x9bc37c2a; (* arm_UMULH X10 X1 X3 *) + 0xba0a02b5; (* arm_ADCS X21 X21 X10 *) + 0x9b057c2a; (* arm_MUL X10 X1 X5 *) + 0xba0a02d6; (* arm_ADCS X22 X22 X10 *) + 0x9bc57c2a; (* arm_UMULH X10 X1 X5 *) + 0xba0a02f7; (* arm_ADCS X23 X23 X10 *) + 0x9b077c2a; (* arm_MUL X10 X1 X7 *) + 0xba0a0318; (* arm_ADCS X24 X24 X10 *) + 0x9bc77c2a; (* arm_UMULH X10 X1 X7 *) + 0xba0a0339; (* arm_ADCS X25 X25 X10 *) + 0x9b097c2a; (* arm_MUL X10 X1 X9 *) + 0xba0a0000; (* arm_ADCS X0 X0 X10 *) + 0x9bc97c2a; (* arm_UMULH X10 X1 X9 *) + 0x9a0a0084; (* arm_ADC X4 X4 X10 *) + 0x9b027c42; (* arm_MUL X2 X2 X2 *) + 0xeb1f03ff; (* arm_CMP XZR XZR *) + 0x93d3268a; (* arm_EXTR X10 X20 X19 9 *) + 0xba0a0042; (* arm_ADCS X2 X2 X10 *) + 0x93d426aa; (* arm_EXTR X10 X21 X20 9 *) + 0xba0a016b; (* arm_ADCS X11 X11 X10 *) + 0x93d526ca; (* arm_EXTR X10 X22 X21 9 *) + 0xba0a018c; (* arm_ADCS X12 X12 X10 *) + 0x93d626ea; (* arm_EXTR X10 X23 X22 9 *) + 0xba0a01ad; (* arm_ADCS X13 X13 X10 *) + 0x93d7270a; (* arm_EXTR X10 X24 X23 9 *) + 0xba0a01ce; (* arm_ADCS X14 X14 X10 *) + 0x93d8272a; (* arm_EXTR X10 X25 X24 9 *) + 0xba0a01ef; (* arm_ADCS X15 X15 X10 *) + 0x93d9240a; (* arm_EXTR X10 X0 X25 9 *) + 0xba0a0210; (* arm_ADCS X16 X16 X10 *) + 0x93c0248a; (* arm_EXTR X10 X4 X0 9 *) + 0xba0a0231; (* arm_ADCS X17 X17 X10 *) + 0xb277da73; (* arm_ORR X19 X19 (rvalue (word 18446744073709551104)) *) + 0xd349fc8a; (* arm_LSR X10 X4 9 *) + 0xba0a0273; (* arm_ADCS X19 X19 X10 *) + 0xfa1f0042; (* arm_SBCS X2 X2 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0xfa1f01ce; (* arm_SBCS X14 X14 XZR *) + 0xfa1f01ef; (* arm_SBCS X15 X15 XZR *) + 0xfa1f0210; (* arm_SBCS X16 X16 XZR *) + 0xfa1f0231; (* arm_SBCS X17 X17 XZR *) + 0xda1f0273; (* arm_SBC X19 X19 XZR *) + 0x92402273; (* arm_AND X19 X19 (rvalue (word 511)) *) + 0xa9002fe2; (* arm_STP X2 X11 SP (Immediate_Offset (iword (&0))) *) + 0xa90137ec; (* arm_STP X12 X13 SP (Immediate_Offset (iword (&16))) *) + 0xa9023fee; (* arm_STP X14 X15 SP (Immediate_Offset (iword (&32))) *) + 0xa90347f0; (* arm_STP X16 X17 SP (Immediate_Offset (iword (&48))) *) + 0xf90023f3; (* arm_STR X19 SP (Immediate_Offset (word 64)) *) + 0xa94d93e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&216))) *) + 0xa9401b65; (* arm_LDP X5 X6 X27 (Immediate_Offset (iword (&0))) *) + 0x9b057c6f; (* arm_MUL X15 X3 X5 *) + 0x9bc57c70; (* arm_UMULH X16 X3 X5 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0x9bc67c71; (* arm_UMULH X17 X3 X6 *) + 0xab0e0210; (* arm_ADDS X16 X16 X14 *) + 0xa9412367; (* arm_LDP X7 X8 X27 (Immediate_Offset (iword (&16))) *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0x9bc77c73; (* arm_UMULH X19 X3 X7 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0x9bc87c74; (* arm_UMULH X20 X3 X8 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0xa9422b69; (* arm_LDP X9 X10 X27 (Immediate_Offset (iword (&32))) *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0x9bc97c75; (* arm_UMULH X21 X3 X9 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0x9bca7c76; (* arm_UMULH X22 X3 X10 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0xa943336b; (* arm_LDP X11 X12 X27 (Immediate_Offset (iword (&48))) *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0x9bcb7c77; (* arm_UMULH X23 X3 X11 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0xf940236d; (* arm_LDR X13 X27 (Immediate_Offset (word 64)) *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0x9bcc7c78; (* arm_UMULH X24 X3 X12 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0x9bcd7c61; (* arm_UMULH X1 X3 X13 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e0210; (* arm_ADDS X16 X16 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9a9f37e0; (* arm_CSET X0 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0231; (* arm_ADDS X17 X17 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0000; (* arm_ADC X0 X0 X14 *) + 0xa91243ef; (* arm_STP X15 X16 SP (Immediate_Offset (iword (&288))) *) + 0xa94e93e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&232))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0231; (* arm_ADDS X17 X17 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9a9f37ef; (* arm_CSET X15 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e0273; (* arm_ADDS X19 X19 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e01ef; (* arm_ADC X15 X15 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e0273; (* arm_ADDS X19 X19 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9a9f37f0; (* arm_CSET X16 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0294; (* arm_ADDS X20 X20 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0210; (* arm_ADC X16 X16 X14 *) + 0xa9134ff1; (* arm_STP X17 X19 SP (Immediate_Offset (iword (&304))) *) + 0xa94f93e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&248))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0294; (* arm_ADDS X20 X20 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9a9f37f1; (* arm_CSET X17 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e02b5; (* arm_ADDS X21 X21 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e0231; (* arm_ADC X17 X17 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e02b5; (* arm_ADDS X21 X21 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9a9f37f3; (* arm_CSET X19 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e02d6; (* arm_ADDS X22 X22 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0273; (* arm_ADC X19 X19 X14 *) + 0xa91457f4; (* arm_STP X20 X21 SP (Immediate_Offset (iword (&320))) *) + 0xa95093e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&264))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e02d6; (* arm_ADDS X22 X22 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e02f7; (* arm_ADDS X23 X23 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e0294; (* arm_ADC X20 X20 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e02f7; (* arm_ADDS X23 X23 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9a9f37f5; (* arm_CSET X21 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0318; (* arm_ADDS X24 X24 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0xa9155ff6; (* arm_STP X22 X23 SP (Immediate_Offset (iword (&336))) *) + 0xf9408fe3; (* arm_LDR X3 SP (Immediate_Offset (word 280)) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0318; (* arm_ADDS X24 X24 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e0021; (* arm_ADDS X1 X1 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0xeb1f03ff; (* arm_CMP XZR XZR *) + 0xa9521be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&288))) *) + 0x93d8242e; (* arm_EXTR X14 X1 X24 9 *) + 0xba0e00a5; (* arm_ADCS X5 X5 X14 *) + 0x93c1240e; (* arm_EXTR X14 X0 X1 9 *) + 0xba0e00c6; (* arm_ADCS X6 X6 X14 *) + 0xa95323e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&304))) *) + 0x93c025ee; (* arm_EXTR X14 X15 X0 9 *) + 0xba0e00e7; (* arm_ADCS X7 X7 X14 *) + 0x93cf260e; (* arm_EXTR X14 X16 X15 9 *) + 0xba0e0108; (* arm_ADCS X8 X8 X14 *) + 0xa9542be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&320))) *) + 0x93d0262e; (* arm_EXTR X14 X17 X16 9 *) + 0xba0e0129; (* arm_ADCS X9 X9 X14 *) + 0x93d1266e; (* arm_EXTR X14 X19 X17 9 *) + 0xba0e014a; (* arm_ADCS X10 X10 X14 *) + 0xa95533eb; (* arm_LDP X11 X12 SP (Immediate_Offset (iword (&336))) *) + 0x93d3268e; (* arm_EXTR X14 X20 X19 9 *) + 0xba0e016b; (* arm_ADCS X11 X11 X14 *) + 0x93d426ae; (* arm_EXTR X14 X21 X20 9 *) + 0xba0e018c; (* arm_ADCS X12 X12 X14 *) + 0xb277db0d; (* arm_ORR X13 X24 (rvalue (word 18446744073709551104)) *) + 0xd349feae; (* arm_LSR X14 X21 9 *) + 0xba0e01ad; (* arm_ADCS X13 X13 X14 *) + 0xfa1f00a5; (* arm_SBCS X5 X5 XZR *) + 0xfa1f00c6; (* arm_SBCS X6 X6 XZR *) + 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) + 0xfa1f0108; (* arm_SBCS X8 X8 XZR *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda1f01ad; (* arm_SBC X13 X13 XZR *) + 0x924021ad; (* arm_AND X13 X13 (rvalue (word 511)) *) + 0xa9121be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&288))) *) + 0xa91323e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&304))) *) + 0xa9142be9; (* arm_STP X9 X10 SP (Immediate_Offset (iword (&320))) *) + 0xa91533eb; (* arm_STP X11 X12 SP (Immediate_Offset (iword (&336))) *) + 0xf900b3ed; (* arm_STR X13 SP (Immediate_Offset (word 352)) *) + 0xa94d93e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&216))) *) + 0xa9491be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&144))) *) + 0x9b057c6f; (* arm_MUL X15 X3 X5 *) + 0x9bc57c70; (* arm_UMULH X16 X3 X5 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0x9bc67c71; (* arm_UMULH X17 X3 X6 *) + 0xab0e0210; (* arm_ADDS X16 X16 X14 *) + 0xa94a23e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&160))) *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0x9bc77c73; (* arm_UMULH X19 X3 X7 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0x9bc87c74; (* arm_UMULH X20 X3 X8 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0xa94b2be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&176))) *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0x9bc97c75; (* arm_UMULH X21 X3 X9 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0x9bca7c76; (* arm_UMULH X22 X3 X10 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0xa94c33eb; (* arm_LDP X11 X12 SP (Immediate_Offset (iword (&192))) *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0x9bcb7c77; (* arm_UMULH X23 X3 X11 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0xf9406bed; (* arm_LDR X13 SP (Immediate_Offset (word 208)) *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0x9bcc7c78; (* arm_UMULH X24 X3 X12 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0x9bcd7c61; (* arm_UMULH X1 X3 X13 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e0210; (* arm_ADDS X16 X16 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9a9f37e0; (* arm_CSET X0 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0231; (* arm_ADDS X17 X17 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0000; (* arm_ADC X0 X0 X14 *) + 0xa90943ef; (* arm_STP X15 X16 SP (Immediate_Offset (iword (&144))) *) + 0xa94e93e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&232))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0231; (* arm_ADDS X17 X17 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9a9f37ef; (* arm_CSET X15 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e0273; (* arm_ADDS X19 X19 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e01ef; (* arm_ADC X15 X15 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e0273; (* arm_ADDS X19 X19 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9a9f37f0; (* arm_CSET X16 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0294; (* arm_ADDS X20 X20 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0210; (* arm_ADC X16 X16 X14 *) + 0xa90a4ff1; (* arm_STP X17 X19 SP (Immediate_Offset (iword (&160))) *) + 0xa94f93e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&248))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0294; (* arm_ADDS X20 X20 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9a9f37f1; (* arm_CSET X17 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e02b5; (* arm_ADDS X21 X21 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e0231; (* arm_ADC X17 X17 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e02b5; (* arm_ADDS X21 X21 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9a9f37f3; (* arm_CSET X19 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e02d6; (* arm_ADDS X22 X22 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0273; (* arm_ADC X19 X19 X14 *) + 0xa90b57f4; (* arm_STP X20 X21 SP (Immediate_Offset (iword (&176))) *) + 0xa95093e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&264))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e02d6; (* arm_ADDS X22 X22 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e02f7; (* arm_ADDS X23 X23 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e0294; (* arm_ADC X20 X20 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e02f7; (* arm_ADDS X23 X23 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9a9f37f5; (* arm_CSET X21 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0318; (* arm_ADDS X24 X24 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0xa90c5ff6; (* arm_STP X22 X23 SP (Immediate_Offset (iword (&192))) *) + 0xf9408fe3; (* arm_LDR X3 SP (Immediate_Offset (word 280)) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0318; (* arm_ADDS X24 X24 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e0021; (* arm_ADDS X1 X1 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0xeb1f03ff; (* arm_CMP XZR XZR *) + 0xa9491be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&144))) *) + 0x93d8242e; (* arm_EXTR X14 X1 X24 9 *) + 0xba0e00a5; (* arm_ADCS X5 X5 X14 *) + 0x93c1240e; (* arm_EXTR X14 X0 X1 9 *) + 0xba0e00c6; (* arm_ADCS X6 X6 X14 *) + 0xa94a23e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&160))) *) + 0x93c025ee; (* arm_EXTR X14 X15 X0 9 *) + 0xba0e00e7; (* arm_ADCS X7 X7 X14 *) + 0x93cf260e; (* arm_EXTR X14 X16 X15 9 *) + 0xba0e0108; (* arm_ADCS X8 X8 X14 *) + 0xa94b2be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&176))) *) + 0x93d0262e; (* arm_EXTR X14 X17 X16 9 *) + 0xba0e0129; (* arm_ADCS X9 X9 X14 *) + 0x93d1266e; (* arm_EXTR X14 X19 X17 9 *) + 0xba0e014a; (* arm_ADCS X10 X10 X14 *) + 0xa94c33eb; (* arm_LDP X11 X12 SP (Immediate_Offset (iword (&192))) *) + 0x93d3268e; (* arm_EXTR X14 X20 X19 9 *) + 0xba0e016b; (* arm_ADCS X11 X11 X14 *) + 0x93d426ae; (* arm_EXTR X14 X21 X20 9 *) + 0xba0e018c; (* arm_ADCS X12 X12 X14 *) + 0xb277db0d; (* arm_ORR X13 X24 (rvalue (word 18446744073709551104)) *) + 0xd349feae; (* arm_LSR X14 X21 9 *) + 0xba0e01ad; (* arm_ADCS X13 X13 X14 *) + 0xfa1f00a5; (* arm_SBCS X5 X5 XZR *) + 0xfa1f00c6; (* arm_SBCS X6 X6 XZR *) + 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) + 0xfa1f0108; (* arm_SBCS X8 X8 XZR *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda1f01ad; (* arm_SBC X13 X13 XZR *) + 0x924021ad; (* arm_AND X13 X13 (rvalue (word 511)) *) + 0xa9091be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&144))) *) + 0xa90a23e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&160))) *) + 0xa90b2be9; (* arm_STP X9 X10 SP (Immediate_Offset (iword (&176))) *) + 0xa90c33eb; (* arm_STP X11 X12 SP (Immediate_Offset (iword (&192))) *) + 0xf9006bed; (* arm_STR X13 SP (Immediate_Offset (word 208)) *) + 0xa9401be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&0))) *) + 0xa9520fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&288))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa94123e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&16))) *) + 0xa9530fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&304))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xa9422be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&32))) *) + 0xa9540fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&320))) *) + 0xfa040129; (* arm_SBCS X9 X9 X4 *) + 0xfa03014a; (* arm_SBCS X10 X10 X3 *) + 0xa94333eb; (* arm_LDP X11 X12 SP (Immediate_Offset (iword (&48))) *) + 0xa9550fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&336))) *) + 0xfa04016b; (* arm_SBCS X11 X11 X4 *) + 0xfa03018c; (* arm_SBCS X12 X12 X3 *) + 0xf94023ed; (* arm_LDR X13 SP (Immediate_Offset (word 64)) *) + 0xf940b3e4; (* arm_LDR X4 SP (Immediate_Offset (word 352)) *) + 0xfa0401ad; (* arm_SBCS X13 X13 X4 *) + 0xfa1f00a5; (* arm_SBCS X5 X5 XZR *) + 0xfa1f00c6; (* arm_SBCS X6 X6 XZR *) + 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) + 0xfa1f0108; (* arm_SBCS X8 X8 XZR *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0x924021ad; (* arm_AND X13 X13 (rvalue (word 511)) *) + 0xa9001b45; (* arm_STP X5 X6 X26 (Immediate_Offset (iword (&0))) *) + 0xa9012347; (* arm_STP X7 X8 X26 (Immediate_Offset (iword (&16))) *) + 0xa9022b49; (* arm_STP X9 X10 X26 (Immediate_Offset (iword (&32))) *) + 0xa903334b; (* arm_STP X11 X12 X26 (Immediate_Offset (iword (&48))) *) + 0xf900234d; (* arm_STR X13 X26 (Immediate_Offset (word 64)) *) + 0xa9491be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&144))) *) + 0xa9520fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&288))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa94a23e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&160))) *) + 0xa9530fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&304))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xa94b2be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&176))) *) + 0xa9540fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&320))) *) + 0xfa040129; (* arm_SBCS X9 X9 X4 *) + 0xfa03014a; (* arm_SBCS X10 X10 X3 *) + 0xa94c33eb; (* arm_LDP X11 X12 SP (Immediate_Offset (iword (&192))) *) + 0xa9550fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&336))) *) + 0xfa04016b; (* arm_SBCS X11 X11 X4 *) + 0xfa03018c; (* arm_SBCS X12 X12 X3 *) + 0xf9406bed; (* arm_LDR X13 SP (Immediate_Offset (word 208)) *) + 0xf940b3e4; (* arm_LDR X4 SP (Immediate_Offset (word 352)) *) + 0xfa0401ad; (* arm_SBCS X13 X13 X4 *) + 0xfa1f00a5; (* arm_SBCS X5 X5 XZR *) + 0xfa1f00c6; (* arm_SBCS X6 X6 XZR *) + 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) + 0xfa1f0108; (* arm_SBCS X8 X8 XZR *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0x924021ad; (* arm_AND X13 X13 (rvalue (word 511)) *) + 0xa90d9be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&216))) *) + 0xa90ea3e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&232))) *) + 0xa90fabe9; (* arm_STP X9 X10 SP (Immediate_Offset (iword (&248))) *) + 0xa910b3eb; (* arm_STP X11 X12 SP (Immediate_Offset (iword (&264))) *) + 0xf9008fed; (* arm_STR X13 SP (Immediate_Offset (word 280)) *) + 0xa95693e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&360))) *) + 0xa9491b65; (* arm_LDP X5 X6 X27 (Immediate_Offset (iword (&144))) *) + 0x9b057c6f; (* arm_MUL X15 X3 X5 *) + 0x9bc57c70; (* arm_UMULH X16 X3 X5 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0x9bc67c71; (* arm_UMULH X17 X3 X6 *) + 0xab0e0210; (* arm_ADDS X16 X16 X14 *) + 0xa94a2367; (* arm_LDP X7 X8 X27 (Immediate_Offset (iword (&160))) *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0x9bc77c73; (* arm_UMULH X19 X3 X7 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0x9bc87c74; (* arm_UMULH X20 X3 X8 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0xa94b2b69; (* arm_LDP X9 X10 X27 (Immediate_Offset (iword (&176))) *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0x9bc97c75; (* arm_UMULH X21 X3 X9 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0x9bca7c76; (* arm_UMULH X22 X3 X10 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0xa94c336b; (* arm_LDP X11 X12 X27 (Immediate_Offset (iword (&192))) *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0x9bcb7c77; (* arm_UMULH X23 X3 X11 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0xf9406b6d; (* arm_LDR X13 X27 (Immediate_Offset (word 208)) *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0x9bcc7c78; (* arm_UMULH X24 X3 X12 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0x9bcd7c61; (* arm_UMULH X1 X3 X13 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e0210; (* arm_ADDS X16 X16 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9a9f37e0; (* arm_CSET X0 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0231; (* arm_ADDS X17 X17 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0000; (* arm_ADC X0 X0 X14 *) + 0xa909434f; (* arm_STP X15 X16 X26 (Immediate_Offset (iword (&144))) *) + 0xa95793e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&376))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0231; (* arm_ADDS X17 X17 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9a9f37ef; (* arm_CSET X15 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e0273; (* arm_ADDS X19 X19 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e01ef; (* arm_ADC X15 X15 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e0273; (* arm_ADDS X19 X19 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9a9f37f0; (* arm_CSET X16 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0294; (* arm_ADDS X20 X20 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0210; (* arm_ADC X16 X16 X14 *) + 0xa90a4f51; (* arm_STP X17 X19 X26 (Immediate_Offset (iword (&160))) *) + 0xa95893e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&392))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0294; (* arm_ADDS X20 X20 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9a9f37f1; (* arm_CSET X17 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e02b5; (* arm_ADDS X21 X21 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e0231; (* arm_ADC X17 X17 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e02b5; (* arm_ADDS X21 X21 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9a9f37f3; (* arm_CSET X19 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e02d6; (* arm_ADDS X22 X22 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0273; (* arm_ADC X19 X19 X14 *) + 0xa90b5754; (* arm_STP X20 X21 X26 (Immediate_Offset (iword (&176))) *) + 0xa95993e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&408))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e02d6; (* arm_ADDS X22 X22 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e02f7; (* arm_ADDS X23 X23 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e0294; (* arm_ADC X20 X20 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e02f7; (* arm_ADDS X23 X23 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9a9f37f5; (* arm_CSET X21 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0318; (* arm_ADDS X24 X24 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0xa90c5f56; (* arm_STP X22 X23 X26 (Immediate_Offset (iword (&192))) *) + 0xf940d7e3; (* arm_LDR X3 SP (Immediate_Offset (word 424)) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0318; (* arm_ADDS X24 X24 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e0021; (* arm_ADDS X1 X1 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0xeb1f03ff; (* arm_CMP XZR XZR *) + 0xa9491b45; (* arm_LDP X5 X6 X26 (Immediate_Offset (iword (&144))) *) + 0x93d8242e; (* arm_EXTR X14 X1 X24 9 *) + 0xba0e00a5; (* arm_ADCS X5 X5 X14 *) + 0x93c1240e; (* arm_EXTR X14 X0 X1 9 *) + 0xba0e00c6; (* arm_ADCS X6 X6 X14 *) + 0xa94a2347; (* arm_LDP X7 X8 X26 (Immediate_Offset (iword (&160))) *) + 0x93c025ee; (* arm_EXTR X14 X15 X0 9 *) + 0xba0e00e7; (* arm_ADCS X7 X7 X14 *) + 0x93cf260e; (* arm_EXTR X14 X16 X15 9 *) + 0xba0e0108; (* arm_ADCS X8 X8 X14 *) + 0xa94b2b49; (* arm_LDP X9 X10 X26 (Immediate_Offset (iword (&176))) *) + 0x93d0262e; (* arm_EXTR X14 X17 X16 9 *) + 0xba0e0129; (* arm_ADCS X9 X9 X14 *) + 0x93d1266e; (* arm_EXTR X14 X19 X17 9 *) + 0xba0e014a; (* arm_ADCS X10 X10 X14 *) + 0xa94c334b; (* arm_LDP X11 X12 X26 (Immediate_Offset (iword (&192))) *) + 0x93d3268e; (* arm_EXTR X14 X20 X19 9 *) + 0xba0e016b; (* arm_ADCS X11 X11 X14 *) + 0x93d426ae; (* arm_EXTR X14 X21 X20 9 *) + 0xba0e018c; (* arm_ADCS X12 X12 X14 *) + 0xb277db0d; (* arm_ORR X13 X24 (rvalue (word 18446744073709551104)) *) + 0xd349feae; (* arm_LSR X14 X21 9 *) + 0xba0e01ad; (* arm_ADCS X13 X13 X14 *) + 0xfa1f00a5; (* arm_SBCS X5 X5 XZR *) + 0xfa1f00c6; (* arm_SBCS X6 X6 XZR *) + 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) + 0xfa1f0108; (* arm_SBCS X8 X8 XZR *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda1f01ad; (* arm_SBC X13 X13 XZR *) + 0x924021ad; (* arm_AND X13 X13 (rvalue (word 511)) *) + 0xa9091b45; (* arm_STP X5 X6 X26 (Immediate_Offset (iword (&144))) *) + 0xa90a2347; (* arm_STP X7 X8 X26 (Immediate_Offset (iword (&160))) *) + 0xa90b2b49; (* arm_STP X9 X10 X26 (Immediate_Offset (iword (&176))) *) + 0xa90c334b; (* arm_STP X11 X12 X26 (Immediate_Offset (iword (&192))) *) + 0xf9006b4d; (* arm_STR X13 X26 (Immediate_Offset (word 208)) *) + 0xa9401b45; (* arm_LDP X5 X6 X26 (Immediate_Offset (iword (&0))) *) + 0xa9490fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&144))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa9412347; (* arm_LDP X7 X8 X26 (Immediate_Offset (iword (&16))) *) + 0xa94a0fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&160))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xa9422b49; (* arm_LDP X9 X10 X26 (Immediate_Offset (iword (&32))) *) + 0xa94b0fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&176))) *) + 0xfa040129; (* arm_SBCS X9 X9 X4 *) + 0xfa03014a; (* arm_SBCS X10 X10 X3 *) + 0xa943334b; (* arm_LDP X11 X12 X26 (Immediate_Offset (iword (&48))) *) + 0xa94c0fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&192))) *) + 0xfa04016b; (* arm_SBCS X11 X11 X4 *) + 0xfa03018c; (* arm_SBCS X12 X12 X3 *) + 0xf940234d; (* arm_LDR X13 X26 (Immediate_Offset (word 64)) *) + 0xf9406be4; (* arm_LDR X4 SP (Immediate_Offset (word 208)) *) + 0xfa0401ad; (* arm_SBCS X13 X13 X4 *) + 0xfa1f00a5; (* arm_SBCS X5 X5 XZR *) + 0xfa1f00c6; (* arm_SBCS X6 X6 XZR *) + 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) + 0xfa1f0108; (* arm_SBCS X8 X8 XZR *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0x924021ad; (* arm_AND X13 X13 (rvalue (word 511)) *) + 0xa9001b45; (* arm_STP X5 X6 X26 (Immediate_Offset (iword (&0))) *) + 0xa9012347; (* arm_STP X7 X8 X26 (Immediate_Offset (iword (&16))) *) + 0xa9022b49; (* arm_STP X9 X10 X26 (Immediate_Offset (iword (&32))) *) + 0xa903334b; (* arm_STP X11 X12 X26 (Immediate_Offset (iword (&48))) *) + 0xf900234d; (* arm_STR X13 X26 (Immediate_Offset (word 64)) *) + 0xa9521be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&288))) *) + 0xa9400f44; (* arm_LDP X4 X3 X26 (Immediate_Offset (iword (&0))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa95323e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&304))) *) + 0xa9410f44; (* arm_LDP X4 X3 X26 (Immediate_Offset (iword (&16))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xa9542be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&320))) *) + 0xa9420f44; (* arm_LDP X4 X3 X26 (Immediate_Offset (iword (&32))) *) + 0xfa040129; (* arm_SBCS X9 X9 X4 *) + 0xfa03014a; (* arm_SBCS X10 X10 X3 *) + 0xa95533eb; (* arm_LDP X11 X12 SP (Immediate_Offset (iword (&336))) *) + 0xa9430f44; (* arm_LDP X4 X3 X26 (Immediate_Offset (iword (&48))) *) + 0xfa04016b; (* arm_SBCS X11 X11 X4 *) + 0xfa03018c; (* arm_SBCS X12 X12 X3 *) + 0xf940b3ed; (* arm_LDR X13 SP (Immediate_Offset (word 352)) *) + 0xf9402344; (* arm_LDR X4 X26 (Immediate_Offset (word 64)) *) + 0xfa0401ad; (* arm_SBCS X13 X13 X4 *) + 0xfa1f00a5; (* arm_SBCS X5 X5 XZR *) + 0xfa1f00c6; (* arm_SBCS X6 X6 XZR *) + 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) + 0xfa1f0108; (* arm_SBCS X8 X8 XZR *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0x924021ad; (* arm_AND X13 X13 (rvalue (word 511)) *) + 0xa9121be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&288))) *) + 0xa91323e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&304))) *) + 0xa9142be9; (* arm_STP X9 X10 SP (Immediate_Offset (iword (&320))) *) + 0xa91533eb; (* arm_STP X11 X12 SP (Immediate_Offset (iword (&336))) *) + 0xf900b3ed; (* arm_STR X13 SP (Immediate_Offset (word 352)) *) + 0xa94d93e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&216))) *) + 0xa9449b65; (* arm_LDP X5 X6 X27 (Immediate_Offset (iword (&72))) *) + 0x9b057c6f; (* arm_MUL X15 X3 X5 *) + 0x9bc57c70; (* arm_UMULH X16 X3 X5 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0x9bc67c71; (* arm_UMULH X17 X3 X6 *) + 0xab0e0210; (* arm_ADDS X16 X16 X14 *) + 0xa945a367; (* arm_LDP X7 X8 X27 (Immediate_Offset (iword (&88))) *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0x9bc77c73; (* arm_UMULH X19 X3 X7 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0x9bc87c74; (* arm_UMULH X20 X3 X8 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0xa946ab69; (* arm_LDP X9 X10 X27 (Immediate_Offset (iword (&104))) *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0x9bc97c75; (* arm_UMULH X21 X3 X9 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0x9bca7c76; (* arm_UMULH X22 X3 X10 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0xa947b36b; (* arm_LDP X11 X12 X27 (Immediate_Offset (iword (&120))) *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0x9bcb7c77; (* arm_UMULH X23 X3 X11 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0xf940476d; (* arm_LDR X13 X27 (Immediate_Offset (word 136)) *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0x9bcc7c78; (* arm_UMULH X24 X3 X12 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0x9bcd7c61; (* arm_UMULH X1 X3 X13 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e0210; (* arm_ADDS X16 X16 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9a9f37e0; (* arm_CSET X0 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0231; (* arm_ADDS X17 X17 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0000; (* arm_ADC X0 X0 X14 *) + 0xa90dc3ef; (* arm_STP X15 X16 SP (Immediate_Offset (iword (&216))) *) + 0xa94e93e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&232))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0231; (* arm_ADDS X17 X17 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9a9f37ef; (* arm_CSET X15 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e0273; (* arm_ADDS X19 X19 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e01ef; (* arm_ADC X15 X15 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e0273; (* arm_ADDS X19 X19 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9a9f37f0; (* arm_CSET X16 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0294; (* arm_ADDS X20 X20 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0210; (* arm_ADC X16 X16 X14 *) + 0xa90ecff1; (* arm_STP X17 X19 SP (Immediate_Offset (iword (&232))) *) + 0xa94f93e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&248))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0294; (* arm_ADDS X20 X20 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9a9f37f1; (* arm_CSET X17 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e02b5; (* arm_ADDS X21 X21 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e0231; (* arm_ADC X17 X17 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e02b5; (* arm_ADDS X21 X21 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9a9f37f3; (* arm_CSET X19 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e02d6; (* arm_ADDS X22 X22 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0273; (* arm_ADC X19 X19 X14 *) + 0xa90fd7f4; (* arm_STP X20 X21 SP (Immediate_Offset (iword (&248))) *) + 0xa95093e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&264))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e02d6; (* arm_ADDS X22 X22 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e02f7; (* arm_ADDS X23 X23 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e0294; (* arm_ADC X20 X20 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e02f7; (* arm_ADDS X23 X23 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9a9f37f5; (* arm_CSET X21 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0318; (* arm_ADDS X24 X24 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0xa910dff6; (* arm_STP X22 X23 SP (Immediate_Offset (iword (&264))) *) + 0xf9408fe3; (* arm_LDR X3 SP (Immediate_Offset (word 280)) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0318; (* arm_ADDS X24 X24 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e0021; (* arm_ADDS X1 X1 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0xeb1f03ff; (* arm_CMP XZR XZR *) + 0xa94d9be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&216))) *) + 0x93d8242e; (* arm_EXTR X14 X1 X24 9 *) + 0xba0e00a5; (* arm_ADCS X5 X5 X14 *) + 0x93c1240e; (* arm_EXTR X14 X0 X1 9 *) + 0xba0e00c6; (* arm_ADCS X6 X6 X14 *) + 0xa94ea3e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&232))) *) + 0x93c025ee; (* arm_EXTR X14 X15 X0 9 *) + 0xba0e00e7; (* arm_ADCS X7 X7 X14 *) + 0x93cf260e; (* arm_EXTR X14 X16 X15 9 *) + 0xba0e0108; (* arm_ADCS X8 X8 X14 *) + 0xa94fabe9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&248))) *) + 0x93d0262e; (* arm_EXTR X14 X17 X16 9 *) + 0xba0e0129; (* arm_ADCS X9 X9 X14 *) + 0x93d1266e; (* arm_EXTR X14 X19 X17 9 *) + 0xba0e014a; (* arm_ADCS X10 X10 X14 *) + 0xa950b3eb; (* arm_LDP X11 X12 SP (Immediate_Offset (iword (&264))) *) + 0x93d3268e; (* arm_EXTR X14 X20 X19 9 *) + 0xba0e016b; (* arm_ADCS X11 X11 X14 *) + 0x93d426ae; (* arm_EXTR X14 X21 X20 9 *) + 0xba0e018c; (* arm_ADCS X12 X12 X14 *) + 0xb277db0d; (* arm_ORR X13 X24 (rvalue (word 18446744073709551104)) *) + 0xd349feae; (* arm_LSR X14 X21 9 *) + 0xba0e01ad; (* arm_ADCS X13 X13 X14 *) + 0xfa1f00a5; (* arm_SBCS X5 X5 XZR *) + 0xfa1f00c6; (* arm_SBCS X6 X6 XZR *) + 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) + 0xfa1f0108; (* arm_SBCS X8 X8 XZR *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda1f01ad; (* arm_SBC X13 X13 XZR *) + 0x924021ad; (* arm_AND X13 X13 (rvalue (word 511)) *) + 0xa90d9be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&216))) *) + 0xa90ea3e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&232))) *) + 0xa90fabe9; (* arm_STP X9 X10 SP (Immediate_Offset (iword (&248))) *) + 0xa910b3eb; (* arm_STP X11 X12 SP (Immediate_Offset (iword (&264))) *) + 0xf9008fed; (* arm_STR X13 SP (Immediate_Offset (word 280)) *) + 0xa94493e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&72))) *) + 0xa9521be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&288))) *) + 0x9b057c6f; (* arm_MUL X15 X3 X5 *) + 0x9bc57c70; (* arm_UMULH X16 X3 X5 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0x9bc67c71; (* arm_UMULH X17 X3 X6 *) + 0xab0e0210; (* arm_ADDS X16 X16 X14 *) + 0xa95323e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&304))) *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0x9bc77c73; (* arm_UMULH X19 X3 X7 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0x9bc87c74; (* arm_UMULH X20 X3 X8 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0xa9542be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&320))) *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0x9bc97c75; (* arm_UMULH X21 X3 X9 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0x9bca7c76; (* arm_UMULH X22 X3 X10 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0xa95533eb; (* arm_LDP X11 X12 SP (Immediate_Offset (iword (&336))) *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0x9bcb7c77; (* arm_UMULH X23 X3 X11 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0xf940b3ed; (* arm_LDR X13 SP (Immediate_Offset (word 352)) *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0x9bcc7c78; (* arm_UMULH X24 X3 X12 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0x9bcd7c61; (* arm_UMULH X1 X3 X13 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9a1f0021; (* arm_ADC X1 X1 XZR *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e0210; (* arm_ADDS X16 X16 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9a9f37e0; (* arm_CSET X0 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0231; (* arm_ADDS X17 X17 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0000; (* arm_ADC X0 X0 X14 *) + 0xa91243ef; (* arm_STP X15 X16 SP (Immediate_Offset (iword (&288))) *) + 0xa94593e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&88))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0231; (* arm_ADDS X17 X17 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9a9f37ef; (* arm_CSET X15 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e0273; (* arm_ADDS X19 X19 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e01ef; (* arm_ADC X15 X15 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e0273; (* arm_ADDS X19 X19 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9a9f37f0; (* arm_CSET X16 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0294; (* arm_ADDS X20 X20 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0210; (* arm_ADC X16 X16 X14 *) + 0xa9134ff1; (* arm_STP X17 X19 SP (Immediate_Offset (iword (&304))) *) + 0xa94693e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&104))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0294; (* arm_ADDS X20 X20 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e02b5; (* arm_ADCS X21 X21 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9a9f37f1; (* arm_CSET X17 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e02b5; (* arm_ADDS X21 X21 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e0231; (* arm_ADC X17 X17 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e02b5; (* arm_ADDS X21 X21 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e02d6; (* arm_ADCS X22 X22 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9a9f37f3; (* arm_CSET X19 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e02d6; (* arm_ADDS X22 X22 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e0273; (* arm_ADC X19 X19 X14 *) + 0xa91457f4; (* arm_STP X20 X21 SP (Immediate_Offset (iword (&320))) *) + 0xa94793e3; (* arm_LDP X3 X4 SP (Immediate_Offset (iword (&120))) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e02d6; (* arm_ADDS X22 X22 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e02f7; (* arm_ADCS X23 X23 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9a9f37f4; (* arm_CSET X20 Condition_CS *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e02f7; (* arm_ADDS X23 X23 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcd7c6e; (* arm_UMULH X14 X3 X13 *) + 0x9a0e0294; (* arm_ADC X20 X20 X14 *) + 0x9b057c8e; (* arm_MUL X14 X4 X5 *) + 0xab0e02f7; (* arm_ADDS X23 X23 X14 *) + 0x9b067c8e; (* arm_MUL X14 X4 X6 *) + 0xba0e0318; (* arm_ADCS X24 X24 X14 *) + 0x9b077c8e; (* arm_MUL X14 X4 X7 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b087c8e; (* arm_MUL X14 X4 X8 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b097c8e; (* arm_MUL X14 X4 X9 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b0a7c8e; (* arm_MUL X14 X4 X10 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0b7c8e; (* arm_MUL X14 X4 X11 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0c7c8e; (* arm_MUL X14 X4 X12 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b0d7c8e; (* arm_MUL X14 X4 X13 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9a9f37f5; (* arm_CSET X21 Condition_CS *) + 0x9bc57c8e; (* arm_UMULH X14 X4 X5 *) + 0xab0e0318; (* arm_ADDS X24 X24 X14 *) + 0x9bc67c8e; (* arm_UMULH X14 X4 X6 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9bc77c8e; (* arm_UMULH X14 X4 X7 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc87c8e; (* arm_UMULH X14 X4 X8 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bc97c8e; (* arm_UMULH X14 X4 X9 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bca7c8e; (* arm_UMULH X14 X4 X10 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bcb7c8e; (* arm_UMULH X14 X4 X11 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcc7c8e; (* arm_UMULH X14 X4 X12 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bcd7c8e; (* arm_UMULH X14 X4 X13 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0xa9155ff6; (* arm_STP X22 X23 SP (Immediate_Offset (iword (&336))) *) + 0xf94047e3; (* arm_LDR X3 SP (Immediate_Offset (word 136)) *) + 0x9b057c6e; (* arm_MUL X14 X3 X5 *) + 0xab0e0318; (* arm_ADDS X24 X24 X14 *) + 0x9b067c6e; (* arm_MUL X14 X3 X6 *) + 0xba0e0021; (* arm_ADCS X1 X1 X14 *) + 0x9b077c6e; (* arm_MUL X14 X3 X7 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9b087c6e; (* arm_MUL X14 X3 X8 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9b097c6e; (* arm_MUL X14 X3 X9 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9b0a7c6e; (* arm_MUL X14 X3 X10 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9b0b7c6e; (* arm_MUL X14 X3 X11 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9b0c7c6e; (* arm_MUL X14 X3 X12 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9b0d7c6e; (* arm_MUL X14 X3 X13 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0x9bc57c6e; (* arm_UMULH X14 X3 X5 *) + 0xab0e0021; (* arm_ADDS X1 X1 X14 *) + 0x9bc67c6e; (* arm_UMULH X14 X3 X6 *) + 0xba0e0000; (* arm_ADCS X0 X0 X14 *) + 0x9bc77c6e; (* arm_UMULH X14 X3 X7 *) + 0xba0e01ef; (* arm_ADCS X15 X15 X14 *) + 0x9bc87c6e; (* arm_UMULH X14 X3 X8 *) + 0xba0e0210; (* arm_ADCS X16 X16 X14 *) + 0x9bc97c6e; (* arm_UMULH X14 X3 X9 *) + 0xba0e0231; (* arm_ADCS X17 X17 X14 *) + 0x9bca7c6e; (* arm_UMULH X14 X3 X10 *) + 0xba0e0273; (* arm_ADCS X19 X19 X14 *) + 0x9bcb7c6e; (* arm_UMULH X14 X3 X11 *) + 0xba0e0294; (* arm_ADCS X20 X20 X14 *) + 0x9bcc7c6e; (* arm_UMULH X14 X3 X12 *) + 0x9a0e02b5; (* arm_ADC X21 X21 X14 *) + 0xeb1f03ff; (* arm_CMP XZR XZR *) + 0xa9521be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&288))) *) + 0x93d8242e; (* arm_EXTR X14 X1 X24 9 *) + 0xba0e00a5; (* arm_ADCS X5 X5 X14 *) + 0x93c1240e; (* arm_EXTR X14 X0 X1 9 *) + 0xba0e00c6; (* arm_ADCS X6 X6 X14 *) + 0xa95323e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&304))) *) + 0x93c025ee; (* arm_EXTR X14 X15 X0 9 *) + 0xba0e00e7; (* arm_ADCS X7 X7 X14 *) + 0x93cf260e; (* arm_EXTR X14 X16 X15 9 *) + 0xba0e0108; (* arm_ADCS X8 X8 X14 *) + 0xa9542be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&320))) *) + 0x93d0262e; (* arm_EXTR X14 X17 X16 9 *) + 0xba0e0129; (* arm_ADCS X9 X9 X14 *) + 0x93d1266e; (* arm_EXTR X14 X19 X17 9 *) + 0xba0e014a; (* arm_ADCS X10 X10 X14 *) + 0xa95533eb; (* arm_LDP X11 X12 SP (Immediate_Offset (iword (&336))) *) + 0x93d3268e; (* arm_EXTR X14 X20 X19 9 *) + 0xba0e016b; (* arm_ADCS X11 X11 X14 *) + 0x93d426ae; (* arm_EXTR X14 X21 X20 9 *) + 0xba0e018c; (* arm_ADCS X12 X12 X14 *) + 0xb277db0d; (* arm_ORR X13 X24 (rvalue (word 18446744073709551104)) *) + 0xd349feae; (* arm_LSR X14 X21 9 *) + 0xba0e01ad; (* arm_ADCS X13 X13 X14 *) + 0xfa1f00a5; (* arm_SBCS X5 X5 XZR *) + 0xfa1f00c6; (* arm_SBCS X6 X6 XZR *) + 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) + 0xfa1f0108; (* arm_SBCS X8 X8 XZR *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xda1f01ad; (* arm_SBC X13 X13 XZR *) + 0x924021ad; (* arm_AND X13 X13 (rvalue (word 511)) *) + 0xa9121be5; (* arm_STP X5 X6 SP (Immediate_Offset (iword (&288))) *) + 0xa91323e7; (* arm_STP X7 X8 SP (Immediate_Offset (iword (&304))) *) + 0xa9142be9; (* arm_STP X9 X10 SP (Immediate_Offset (iword (&320))) *) + 0xa91533eb; (* arm_STP X11 X12 SP (Immediate_Offset (iword (&336))) *) + 0xf900b3ed; (* arm_STR X13 SP (Immediate_Offset (word 352)) *) + 0xa9521be5; (* arm_LDP X5 X6 SP (Immediate_Offset (iword (&288))) *) + 0xa94d8fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&216))) *) + 0xeb0400a5; (* arm_SUBS X5 X5 X4 *) + 0xfa0300c6; (* arm_SBCS X6 X6 X3 *) + 0xa95323e7; (* arm_LDP X7 X8 SP (Immediate_Offset (iword (&304))) *) + 0xa94e8fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&232))) *) + 0xfa0400e7; (* arm_SBCS X7 X7 X4 *) + 0xfa030108; (* arm_SBCS X8 X8 X3 *) + 0xa9542be9; (* arm_LDP X9 X10 SP (Immediate_Offset (iword (&320))) *) + 0xa94f8fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&248))) *) + 0xfa040129; (* arm_SBCS X9 X9 X4 *) + 0xfa03014a; (* arm_SBCS X10 X10 X3 *) + 0xa95533eb; (* arm_LDP X11 X12 SP (Immediate_Offset (iword (&336))) *) + 0xa9508fe4; (* arm_LDP X4 X3 SP (Immediate_Offset (iword (&264))) *) + 0xfa04016b; (* arm_SBCS X11 X11 X4 *) + 0xfa03018c; (* arm_SBCS X12 X12 X3 *) + 0xf940b3ed; (* arm_LDR X13 SP (Immediate_Offset (word 352)) *) + 0xf9408fe4; (* arm_LDR X4 SP (Immediate_Offset (word 280)) *) + 0xfa0401ad; (* arm_SBCS X13 X13 X4 *) + 0xfa1f00a5; (* arm_SBCS X5 X5 XZR *) + 0xfa1f00c6; (* arm_SBCS X6 X6 XZR *) + 0xfa1f00e7; (* arm_SBCS X7 X7 XZR *) + 0xfa1f0108; (* arm_SBCS X8 X8 XZR *) + 0xfa1f0129; (* arm_SBCS X9 X9 XZR *) + 0xfa1f014a; (* arm_SBCS X10 X10 XZR *) + 0xfa1f016b; (* arm_SBCS X11 X11 XZR *) + 0xfa1f018c; (* arm_SBCS X12 X12 XZR *) + 0xfa1f01ad; (* arm_SBCS X13 X13 XZR *) + 0x924021ad; (* arm_AND X13 X13 (rvalue (word 511)) *) + 0xa9049b45; (* arm_STP X5 X6 X26 (Immediate_Offset (iword (&72))) *) + 0xa905a347; (* arm_STP X7 X8 X26 (Immediate_Offset (iword (&88))) *) + 0xa906ab49; (* arm_STP X9 X10 X26 (Immediate_Offset (iword (&104))) *) + 0xa907b34b; (* arm_STP X11 X12 X26 (Immediate_Offset (iword (&120))) *) + 0xf900474d; (* arm_STR X13 X26 (Immediate_Offset (word 136)) *) + 0x9106c3ff; (* arm_ADD SP SP (rvalue (word 432)) *) + 0xa8c173fb; (* arm_LDP X27 X28 SP (Postimmediate_Offset (iword (&16))) *) + 0xa8c16bf9; (* arm_LDP X25 X26 SP (Postimmediate_Offset (iword (&16))) *) + 0xa8c163f7; (* arm_LDP X23 X24 SP (Postimmediate_Offset (iword (&16))) *) + 0xa8c15bf5; (* arm_LDP X21 X22 SP (Postimmediate_Offset (iword (&16))) *) + 0xa8c153f3; (* arm_LDP X19 X20 SP (Postimmediate_Offset (iword (&16))) *) + 0xd65f03c0 (* arm_RET X30 *) +];; + +let P521_JMIXADD_EXEC = ARM_MK_EXEC_RULE p521_jmixadd_mc;; + +(* ------------------------------------------------------------------------- *) +(* Common supporting definitions and lemmas for component proofs. *) +(* ------------------------------------------------------------------------- *) + +let p_521 = new_definition `p_521 = 6864797660130609714981900799081393217269435300143305409394463459185543183397656052122559640661454554977296311391480858037121987999716643812574028291115057151`;; + +let P_521 = prove + (`p_521 = 2 EXP 521 - 1`, + REWRITE_TAC[p_521] THEN CONV_TAC NUM_REDUCE_CONV);; + +let P_521_AS_WORDLIST = prove + (`p_521 = + bignum_of_wordlist + [word_not(word 0);word_not(word 0);word_not(word 0);word_not(word 0); + word_not(word 0);word_not(word 0);word_not(word 0);word_not(word 0); + word(0x1FF)]`, + REWRITE_TAC[p_521; bignum_of_wordlist] THEN + CONV_TAC WORD_REDUCE_CONV THEN CONV_TAC NUM_REDUCE_CONV);; + +let BIGNUM_FROM_MEMORY_EQ_P521 = prove + (`bignum_of_wordlist[n0;n1;n2;n3;n4;n5;n6;n7;n8] = p_521 <=> + (!i. i < 64 + ==> bit i n0 /\ bit i n1 /\ bit i n2 /\ bit i n3 /\ + bit i n4 /\ bit i n5 /\ bit i n6 /\ bit i n7) /\ + (!i. i < 9 ==> bit i n8) /\ (!i. i < 64 ==> 9 <= i ==> ~bit i n8)`, + REWRITE_TAC[P_521_AS_WORDLIST; BIGNUM_OF_WORDLIST_EQ] THEN + REWRITE_TAC[WORD_EQ_BITS_ALT; DIMINDEX_64] THEN + CONV_TAC(ONCE_DEPTH_CONV EXPAND_CASES_CONV) THEN + CONV_TAC NUM_REDUCE_CONV THEN CONV_TAC WORD_REDUCE_CONV THEN + CONV_TAC CONJ_ACI_RULE);; + +let BIGNUM_FROM_MEMORY_LE_P521 = prove + (`bignum_of_wordlist[n0;n1;n2;n3;n4;n5;n6;n7;n8] <= p_521 <=> + !i. i < 64 ==> 9 <= i ==> ~bit i n8`, + SIMP_TAC[P_521; ARITH_RULE `p_521 = 2 EXP 521 - 1 ==> + (n <= p_521 <=> n DIV 2 EXP (8 * 64) < 2 EXP 9)`] THEN + REWRITE_TAC[TOP_DEPTH_CONV num_CONV `8`; MULT_CLAUSES; EXP_ADD] THEN + REWRITE_TAC[GSYM DIV_DIV; BIGNUM_OF_WORDLIST_DIV; EXP; DIV_1] THEN + REWRITE_TAC[BIGNUM_OF_WORDLIST_SING; GSYM UPPER_BITS_ZERO] THEN + MP_TAC(ISPEC `n8:int64` BIT_TRIVIAL) THEN REWRITE_TAC[DIMINDEX_64] THEN + MESON_TAC[NOT_LE]);; + +let BIGNUM_FROM_MEMORY_LT_P521 = prove + (`bignum_of_wordlist[n0;n1;n2;n3;n4;n5;n6;n7;n8] < p_521 <=> + (!i. i < 64 ==> 9 <= i ==> ~bit i n8) /\ + ~((!i. i < 64 + ==> bit i n0 /\ bit i n1 /\ bit i n2 /\ bit i n3 /\ + bit i n4 /\ bit i n5 /\ bit i n6 /\ bit i n7) /\ + (!i. i < 9 ==> bit i n8))`, + GEN_REWRITE_TAC LAND_CONV [LT_LE] THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_EQ_P521; BIGNUM_FROM_MEMORY_LE_P521] THEN + MESON_TAC[]);; + +let nistp521 = define + `nistp521 = + (integer_mod_ring p_521, + ring_neg (integer_mod_ring p_521) (&3), + &b_521:int)`;; + +let nistp521_encode = new_definition + `nistp521_encode = modular_encode(521,p_521)`;; + +let nintlemma = prove + (`&(num_of_int(x rem &p_521)) = x rem &p_521`, + MATCH_MP_TAC INT_OF_NUM_OF_INT THEN MATCH_MP_TAC INT_REM_POS THEN + REWRITE_TAC[INT_OF_NUM_EQ; p_521] THEN CONV_TAC NUM_REDUCE_CONV);; + +let unilemma0 = prove + (`x = a MOD p_521 ==> x < p_521 /\ &x = &a rem &p_521`, + REWRITE_TAC[INT_OF_NUM_REM; p_521] THEN ARITH_TAC);; + +let unilemma1 = prove + (`&x = a rem &p_521 ==> x < p_521 /\ &x = a rem &p_521`, + SIMP_TAC[GSYM INT_OF_NUM_LT; INT_LT_REM_EQ; p_521] THEN INT_ARITH_TAC);; + +let unilemma2 = prove + (`X = num_of_int(x rem &p_521) ==> X < p_521 /\ &X = x rem &p_521`, + DISCH_THEN SUBST1_TAC THEN + REWRITE_TAC[GSYM INT_OF_NUM_LT; nintlemma; INT_LT_REM_EQ] THEN + REWRITE_TAC[INT_OF_NUM_LT; p_521] THEN CONV_TAC NUM_REDUCE_CONV);; + +let lvs = + ["x_1",[`X27`;`0`]; + "y_1",[`X27`;`72`]; + "z_1",[`X27`;`144`]; + "x_2",[`X28`;`0`]; + "y_2",[`X28`;`72`]; + "x_3",[`X26`;`0`]; + "y_3",[`X26`;`72`]; + "z_3",[`X26`;`144`]; + "zp2",[`SP`;`0`]; + "ww",[`SP`;`0`]; + "yd",[`SP`;`72`]; + "y2a",[`SP`;`72`]; + "x2a",[`SP`;`144`]; + "zzx2",[`SP`;`144`]; + "zz",[`SP`;`216`]; + "t1",[`SP`;`216`]; + "t2",[`SP`;`288`]; + "zzx1",[`SP`;`288`]; + "xd",[`SP`;`360`]];; + +(* ------------------------------------------------------------------------- *) +(* Instances of sqr. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_SQR_P521_TAC = + ARM_MACRO_SIM_ABBREV_TAC p521_jmixadd_mc 230 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1. + !n. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 9)) t = n + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0x3d60) (word_add (read p3 t) (word n3),72) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p521_jmixadd_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X26 s = read X26 t /\ + read X27 s = read X27 t /\ + read X28 s = read X28 t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 9)) s = + n) + (\s. read PC s = pcout /\ + (n < p_521 + ==> read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 9)) s = (n EXP 2) MOD p_521)) + (MAYCHANGE [PC; X0; X1; X2; X3; X4; X5; X6; X7; X8; X9; X10; + X11; X12; X13; X14; X15; X16; X17; X19; X20; + X21; X22; X23; X24; X25] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 9)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + (*** Globalize the n < p_521 assumption for simplicity's sake ***) + + ASM_CASES_TAC `n < p_521` THENL + [ASM_REWRITE_TAC[]; ARM_SIM_TAC P521_JMIXADD_EXEC (1--230)] THEN + + (*** Digitize, deduce the bound on the top word specifically ***) + + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "n_" o lhand o concl) THEN + SUBGOAL_THEN `n DIV 2 EXP 512 < 2 EXP 9` MP_TAC THENL + [UNDISCH_TAC `n < p_521` THEN REWRITE_TAC[p_521] THEN ARITH_TAC; + FIRST_ASSUM(fun th -> GEN_REWRITE_TAC (funpow 3 LAND_CONV) [SYM th]) THEN + CONV_TAC(LAND_CONV(ONCE_DEPTH_CONV BIGNUM_OF_WORDLIST_DIV_CONV)) THEN + DISCH_TAC] THEN + + (*** Simulate the initial squaring ***) + + ARM_ACCSTEPS_TAC P521_JMIXADD_EXEC (1--195) (1--195) THEN + RULE_ASSUM_TAC(REWRITE_RULE[COND_SWAP; GSYM WORD_BITVAL]) THEN + + (*** Introduce more systematic names for the high part digits ***) + + MAP_EVERY (fun s -> REABBREV_TAC s THEN POP_ASSUM SUBST_ALL_TAC) + [`l0 = read X2 s195`; + `l1 = read X11 s195`; + `l2 = read X12 s195`; + `l3 = read X13 s195`; + `l4 = read X14 s195`; + `l5 = read X15 s195`; + `l6 = read X16 s195`; + `l7 = read X17 s195`; + `h0 = read X19 s195`; + `h1 = read X20 s195`; + `h2 = read X21 s195`; + `h3 = read X22 s195`; + `h4 = read X23 s195`; + `h5 = read X24 s195`; + `h6 = read X25 s195`; + `h7 = read X0 s195`; + `h8 = read X4 s195`] THEN + + (*** Handle the two anomalous operations ***) + + UNDISCH_THEN + `&2 pow 64 * &(bitval carry_s159) + &(val(sum_s159:int64)):real = + &(val(n_8:int64)) + &(val n_8)` + (MP_TAC o REWRITE_RULE[REAL_OF_NUM_CLAUSES]) THEN + REWRITE_TAC[bitval] THEN COND_CASES_TAC THEN + ASM_REWRITE_TAC[ADD_CLAUSES; MULT_CLAUSES] THENL + [MATCH_MP_TAC(TAUT `~p ==> p ==> q`) THEN + MATCH_MP_TAC(ARITH_RULE `a < b ==> ~(b + s:num = a)`) THEN + ASM BOUNDER_TAC[]; + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN + DISCH_THEN SUBST_ALL_TAC] THEN + + UNDISCH_THEN + `&2 pow 64 * &(val(mulhi_s176:int64)) + &(val(mullo_s176:int64)):real = + &2 pow 63 * (&(val(n_8:int64)) + &(val n_8))` + (MP_TAC o REWRITE_RULE[REAL_OF_NUM_CLAUSES]) THEN + REWRITE_TAC[ARITH_RULE `2 EXP 63 * (n + n) = 2 EXP 64 * n`] THEN + DISCH_THEN(MP_TAC o MATCH_MP (NUMBER_RULE + `e * h + l = e * x ==> e divides l /\ e * h + l = e * x`)) THEN + GEN_REWRITE_TAC I [IMP_CONJ] THEN + DISCH_THEN(MP_TAC o MATCH_MP DIVIDES_LE) THEN + REWRITE_TAC[REWRITE_RULE[GSYM NOT_LE] VAL_BOUND_64] THEN + DISCH_THEN SUBST1_TAC THEN + REWRITE_TAC[ARITH_RULE `2 EXP 64 * x + 0 = 2 EXP 64 * y <=> x = y`] THEN + DISCH_THEN SUBST_ALL_TAC THEN + + (*** Show that the core squaring operation is correct ***) + + SUBGOAL_THEN + `2 EXP 512 * bignum_of_wordlist[h0;h1;h2;h3;h4;h5;h6;h7;h8] + + bignum_of_wordlist[l0;l1;l2;l3;l4;l5;l6;l7] = + n EXP 2` + ASSUME_TAC THENL + [ASM_REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`1088`; `&0:real`] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN CONJ_TAC THENL + [REWRITE_TAC[REAL_OF_NUM_CLAUSES; LE_0] THEN + REWRITE_TAC[EXP_2; ARITH_RULE `2 EXP 1088 = 2 EXP 544 EXP 2`] THEN + MATCH_MP_TAC LT_MULT2 THEN UNDISCH_TAC `n < p_521` THEN + REWRITE_TAC[p_521] THEN ARITH_TAC; + REWRITE_TAC[INTEGER_CLOSED]] THEN + EXPAND_TAC "n" THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + CONV_TAC(RAND_CONV REAL_POLY_CONV) THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o + filter (is_ratconst o rand o concl) o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC) THEN + RULE_ASSUM_TAC(REWRITE_RULE[BIGNUM_FROM_MEMORY_BYTES])] THEN + + (*** Now simulate the shift-and-add of high and lower parts ***) + + ARM_ACCSTEPS_TAC P521_JMIXADD_EXEC + [198;200;202;204;206;208;210;212;215] (196--215) THEN + + (*** Break up into high and low parts ***) + + ABBREV_TAC `h = (n EXP 2) DIV 2 EXP 521` THEN + ABBREV_TAC `l = (n EXP 2) MOD 2 EXP 521` THEN + SUBGOAL_THEN `h < p_521 /\ l <= p_521` STRIP_ASSUME_TAC THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"] THEN REWRITE_TAC[p_521] THEN + CONJ_TAC THENL [ALL_TAC; ARITH_TAC] THEN + SIMP_TAC[RDIV_LT_EQ; EXP_EQ_0; ARITH_EQ] THEN + TRANS_TAC LET_TRANS `(p_521 - 1) EXP 2` THEN + CONJ_TAC THENL [ALL_TAC; REWRITE_TAC[p_521] THEN ARITH_TAC] THEN + REWRITE_TAC[EXP_2] THEN MATCH_MP_TAC LE_MULT2 THEN CONJ_TAC THEN + MATCH_MP_TAC(ARITH_RULE `x < n ==> x <= n - 1`) THEN ASM_REWRITE_TAC[]; + ALL_TAC] THEN + SUBGOAL_THEN `(n EXP 2) MOD p_521 = (h + l) MOD p_521` SUBST1_TAC THENL + [SUBST1_TAC(SYM(SPECL + [`n EXP 2:num`; `2 EXP 521`] (CONJUNCT2 DIVISION_SIMP))) THEN + ASM_REWRITE_TAC[GSYM CONG] THEN MATCH_MP_TAC(NUMBER_RULE + `(e == 1) (mod p) ==> (e * h + l == h + l) (mod p)`) THEN + REWRITE_TAC[CONG; p_521] THEN ARITH_TAC; + ALL_TAC] THEN + SUBGOAL_THEN + `(n EXP 2) DIV 2 EXP 521 = + bignum_of_wordlist + [word_subword (word_join (h1:int64) h0:int128) (9,64); + word_subword (word_join (h2:int64) h1:int128) (9,64); + word_subword (word_join (h3:int64) h2:int128) (9,64); + word_subword (word_join (h4:int64) h3:int128) (9,64); + word_subword (word_join (h5:int64) h4:int128) (9,64); + word_subword (word_join (h6:int64) h5:int128) (9,64); + word_subword (word_join (h7:int64) h6:int128) (9,64); + word_subword (word_join (h8:int64) h7:int128) (9,64); + word_ushr h8 9] /\ + (n EXP 2) MOD 2 EXP 521 = + 2 EXP 512 * val(word_and h0 (word 511):int64) + + bignum_of_wordlist [l0; l1; l2; l3; l4; l5; l6; l7]` + (CONJUNCTS_THEN SUBST_ALL_TAC) THENL + [MATCH_MP_TAC DIVMOD_UNIQ THEN + REWRITE_TAC[VAL_WORD_AND_MASK_WORD; ARITH_RULE `511 = 2 EXP 9 - 1`] THEN + CONJ_TAC THENL + [FIRST_X_ASSUM(fun th -> GEN_REWRITE_TAC LAND_CONV [SYM th]) THEN + ASM_REWRITE_TAC[ADD_ASSOC; EQ_ADD_RCANCEL] THEN + REWRITE_TAC[bignum_of_wordlist; VAL_WORD_USHR] THEN + SIMP_TAC[VAL_WORD_SUBWORD_JOIN_64; DIMINDEX_64; ARITH_LE; ARITH_LT] THEN + ARITH_TAC; + MATCH_MP_TAC(ARITH_RULE + `x < 2 EXP (64 * 8) ==> 2 EXP 512 * h MOD 2 EXP 9 + x < 2 EXP 521`) THEN + MATCH_MP_TAC BIGNUM_OF_WORDLIST_BOUND THEN REWRITE_TAC[LENGTH; ARITH]]; + ALL_TAC] THEN + + (*** The net comparison h + l >= p_521 ***) + + SUBGOAL_THEN + `&(val (word_or h0 (word 18446744073709551104))):real = + (&2 pow 64 - &2 pow 9) + &(val(word_and h0 (word 511):int64))` + SUBST_ALL_TAC THENL + [ONCE_REWRITE_TAC[WORD_BITWISE_RULE + `word_or a b = word_or b (word_and a (word_not b))`] THEN + SIMP_TAC[VAL_WORD_OR_DISJOINT; WORD_BITWISE_RULE + `word_and x (word_and y (word_not x)) = word 0`] THEN + CONV_TAC(DEPTH_CONV WORD_NUM_RED_CONV) THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN REAL_ARITH_TAC; + ALL_TAC] THEN + SUBGOAL_THEN `carry_s215 <=> p_521 <= h + l` SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LE THEN EXISTS_TAC `576` THEN + MAP_EVERY EXPAND_TAC ["h"; "l"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist; p_521] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ALL_TAC] THEN + + (*** The final correction ***) + + ARM_ACCSTEPS_TAC P521_JMIXADD_EXEC (216--224) (216--230) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[REAL_OF_NUM_CLAUSES] THEN + CONV_TAC SYM_CONV THEN CONV_TAC(RAND_CONV BIGNUM_LEXPAND_CONV) THEN + ASM_REWRITE_TAC[] THEN MATCH_MP_TAC EQUAL_FROM_CONGRUENT_MOD_MOD THEN + MAP_EVERY EXISTS_TAC + [`521`; + `if h + l < p_521 then &h + &l:real else (&h + &l) - &p_521`] THEN + REPEAT CONJ_TAC THENL + [BOUNDER_TAC[]; + REWRITE_TAC[p_521] THEN ARITH_TAC; + REWRITE_TAC[p_521] THEN ARITH_TAC; + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + REWRITE_TAC[GSYM NOT_LT] THEN ABBREV_TAC `bb <=> h + l < p_521` THEN + MAP_EVERY EXPAND_TAC ["h"; "l"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist; p_521] THEN + REWRITE_TAC[VAL_WORD_AND_MASK_WORD; ARITH_RULE `511 = 2 EXP 9 - 1`] THEN + REWRITE_TAC[REAL_OF_NUM_MOD] THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC NUM_REDUCE_CONV THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC; + ASM_SIMP_TAC[MOD_CASES; ARITH_RULE + `h < p /\ l <= p ==> h + l < 2 * p`] THEN + SIMP_TAC[REAL_OF_NUM_CLAUSES; REAL_OF_NUM_SUB; COND_SWAP; GSYM NOT_LE] THEN + MESON_TAC[]]);; + +(* ------------------------------------------------------------------------- *) +(* Instances of mul. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_MUL_P521_TAC = + ARM_MACRO_SIM_ABBREV_TAC p521_jmixadd_mc 373 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1 p2 n2. + !a. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 9)) t = a + ==> + !b. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 9)) t = b + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0x3d60) (word_add (read p3 t) (word n3),72) /\ + nonoverlapping (read X27 t,216) (read X26 t,216) /\ + nonoverlapping (read X28 t,144) (read X26 t,216) /\ + nonoverlapping (read X26 t,216) (stackpointer,432) /\ + nonoverlapping (read X27 t,216) (stackpointer,432) /\ + nonoverlapping (read X28 t,144) (stackpointer,432) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p521_jmixadd_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X26 s = read X26 t /\ + read X27 s = read X27 t /\ + read X28 s = read X28 t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 9)) s = + a /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 9)) s = + b) + (\s. read PC s = pcout /\ + (a < p_521 /\ b < p_521 + ==> read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 9)) s = (a * b) MOD p_521)) + (MAYCHANGE [PC; X0; X1; X3; X4; X5; X6; X7; X8; X9; + X10; X11; X12; X13; X14; X15; X16; X17; X19; + X20; X21; X22; X23; X24] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 9)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + (*** Globalize the a < p_521 /\ b < p_521 assumption for simplicity ***) + + ASM_CASES_TAC `a < p_521 /\ b < p_521` THENL + [ASM_REWRITE_TAC[] THEN FIRST_X_ASSUM(CONJUNCTS_THEN ASSUME_TAC); + ARM_SIM_TAC P521_JMIXADD_EXEC (1--373)] THEN + + (*** Digitize, deduce the bound on the top words ***) + + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "y_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "x_" o lhand o concl) THEN + SUBGOAL_THEN + `a DIV 2 EXP 512 < 2 EXP 9 /\ b DIV 2 EXP 512 < 2 EXP 9` + MP_TAC THENL + [MAP_EVERY UNDISCH_TAC [`a < p_521`; `b < p_521`] THEN + REWRITE_TAC[p_521] THEN ARITH_TAC; + MAP_EVERY EXPAND_TAC ["a"; "b"] THEN + CONV_TAC(LAND_CONV(ONCE_DEPTH_CONV BIGNUM_OF_WORDLIST_DIV_CONV)) THEN + ASM_REWRITE_TAC[] THEN STRIP_TAC] THEN + + (*** Simulate the initial multiplication ***) + + ARM_ACCSTEPS_TAC P521_JMIXADD_EXEC (1--334) (1--334) THEN + RULE_ASSUM_TAC(REWRITE_RULE[COND_SWAP; GSYM WORD_BITVAL]) THEN + + (*** Introduce more systematic names for the high part digits ***) + + MAP_EVERY (fun s -> REABBREV_TAC s THEN POP_ASSUM SUBST_ALL_TAC) + [`h0 = read X24 s334`; + `h1 = read X1 s334`; + `h2 = read X0 s334`; + `h3 = read X15 s334`; + `h4 = read X16 s334`; + `h5 = read X17 s334`; + `h6 = read X19 s334`; + `h7 = read X20 s334`; + `h8 = read X21 s334`] THEN + + (*** Show that the core multiplication operation is correct ***) + + SUBGOAL_THEN + `2 EXP 512 * bignum_of_wordlist[h0;h1;h2;h3;h4;h5;h6;h7;h8] + + bignum_of_wordlist + [mullo_s3; sum_s35; sum_s74; sum_s111; + sum_s150; sum_s187; sum_s226; sum_s263] = + a * b` + ASSUME_TAC THENL + [ASM_REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`1088`; `&0:real`] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN CONJ_TAC THENL + [REWRITE_TAC[REAL_OF_NUM_CLAUSES; LE_0] THEN + REWRITE_TAC[EXP_2; ARITH_RULE `2 EXP 1088 = 2 EXP 544 EXP 2`] THEN + MATCH_MP_TAC LT_MULT2 THEN + MAP_EVERY UNDISCH_TAC [`a < p_521`; `b < p_521`] THEN + REWRITE_TAC[p_521] THEN ARITH_TAC; + REWRITE_TAC[INTEGER_CLOSED]] THEN + MAP_EVERY EXPAND_TAC ["a"; "b"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + CONV_TAC(RAND_CONV REAL_POLY_CONV) THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o + filter (is_ratconst o rand o concl) o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC) THEN + RULE_ASSUM_TAC(REWRITE_RULE[BIGNUM_FROM_MEMORY_BYTES])] THEN + + (*** Now simulate the shift-and-add of high and lower parts ***) + + ARM_ACCSTEPS_TAC P521_JMIXADD_EXEC + [338;340;343;345;348;350;353;355;358] (335--358) THEN + + (*** Break up into high and low parts ***) + + ABBREV_TAC `h = (a * b) DIV 2 EXP 521` THEN + ABBREV_TAC `l = (a * b) MOD 2 EXP 521` THEN + SUBGOAL_THEN `h < p_521 /\ l <= p_521` STRIP_ASSUME_TAC THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"] THEN REWRITE_TAC[p_521] THEN + CONJ_TAC THENL [ALL_TAC; ARITH_TAC] THEN + SIMP_TAC[RDIV_LT_EQ; EXP_EQ_0; ARITH_EQ] THEN + TRANS_TAC LET_TRANS `(p_521 - 1) EXP 2` THEN + CONJ_TAC THENL [ALL_TAC; REWRITE_TAC[p_521] THEN ARITH_TAC] THEN + REWRITE_TAC[EXP_2] THEN MATCH_MP_TAC LE_MULT2 THEN CONJ_TAC THEN + MATCH_MP_TAC(ARITH_RULE `x < n ==> x <= n - 1`) THEN ASM_REWRITE_TAC[]; + ALL_TAC] THEN + SUBGOAL_THEN `(a * b) MOD p_521 = (h + l) MOD p_521` SUBST1_TAC THENL + [SUBST1_TAC(SYM(SPECL + [`a * b:num`; `2 EXP 521`] (CONJUNCT2 DIVISION_SIMP))) THEN + ASM_REWRITE_TAC[GSYM CONG] THEN MATCH_MP_TAC(NUMBER_RULE + `(e == 1) (mod p) ==> (e * h + l == h + l) (mod p)`) THEN + REWRITE_TAC[CONG; p_521] THEN ARITH_TAC; + ALL_TAC] THEN + SUBGOAL_THEN + `(a * b) DIV 2 EXP 521 = + bignum_of_wordlist + [word_subword (word_join (h1:int64) h0:int128) (9,64); + word_subword (word_join (h2:int64) h1:int128) (9,64); + word_subword (word_join (h3:int64) h2:int128) (9,64); + word_subword (word_join (h4:int64) h3:int128) (9,64); + word_subword (word_join (h5:int64) h4:int128) (9,64); + word_subword (word_join (h6:int64) h5:int128) (9,64); + word_subword (word_join (h7:int64) h6:int128) (9,64); + word_subword (word_join (h8:int64) h7:int128) (9,64); + word_ushr h8 9] /\ + (a * b) MOD 2 EXP 521 = + 2 EXP 512 * val(word_and h0 (word 511):int64) + + bignum_of_wordlist + [mullo_s3; sum_s35; sum_s74; sum_s111; + sum_s150; sum_s187; sum_s226; sum_s263]` + (CONJUNCTS_THEN SUBST_ALL_TAC) THENL + [MATCH_MP_TAC DIVMOD_UNIQ THEN + REWRITE_TAC[VAL_WORD_AND_MASK_WORD; ARITH_RULE `511 = 2 EXP 9 - 1`] THEN + CONJ_TAC THENL + [FIRST_X_ASSUM(fun th -> GEN_REWRITE_TAC LAND_CONV [SYM th]) THEN + CONV_TAC(ONCE_DEPTH_CONV BIGNUM_LEXPAND_CONV) THEN + ASM_REWRITE_TAC[ADD_ASSOC; EQ_ADD_RCANCEL] THEN + REWRITE_TAC[bignum_of_wordlist; VAL_WORD_USHR] THEN + SIMP_TAC[VAL_WORD_SUBWORD_JOIN_64; DIMINDEX_64; ARITH_LE; ARITH_LT] THEN + ARITH_TAC; + MATCH_MP_TAC(ARITH_RULE + `x < 2 EXP (64 * 8) ==> 2 EXP 512 * h MOD 2 EXP 9 + x < 2 EXP 521`) THEN + MATCH_MP_TAC BIGNUM_OF_WORDLIST_BOUND THEN REWRITE_TAC[LENGTH; ARITH]]; + ALL_TAC] THEN + + (*** The net comparison h + l >= p_521 ***) + + SUBGOAL_THEN + `&(val (word_or h0 (word 18446744073709551104))):real = + (&2 pow 64 - &2 pow 9) + &(val(word_and h0 (word 511):int64))` + SUBST_ALL_TAC THENL + [ONCE_REWRITE_TAC[WORD_BITWISE_RULE + `word_or a b = word_or b (word_and a (word_not b))`] THEN + SIMP_TAC[VAL_WORD_OR_DISJOINT; WORD_BITWISE_RULE + `word_and x (word_and y (word_not x)) = word 0`] THEN + CONV_TAC(DEPTH_CONV WORD_NUM_RED_CONV) THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN REAL_ARITH_TAC; + ALL_TAC] THEN + SUBGOAL_THEN `carry_s358 <=> p_521 <= h + l` SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LE THEN EXISTS_TAC `576` THEN + MAP_EVERY EXPAND_TAC ["h"; "l"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist; p_521] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ALL_TAC] THEN + + (*** The final correction ***) + + ARM_ACCSTEPS_TAC P521_JMIXADD_EXEC (359--367) (359--373) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC SYM_CONV THEN CONV_TAC(RAND_CONV BIGNUM_LEXPAND_CONV) THEN + ASM_REWRITE_TAC[] THEN MATCH_MP_TAC EQUAL_FROM_CONGRUENT_MOD_MOD THEN + MAP_EVERY EXISTS_TAC + [`521`; + `if h + l < p_521 then &h + &l:real else (&h + &l) - &p_521`] THEN + REPEAT CONJ_TAC THENL + [BOUNDER_TAC[]; + REWRITE_TAC[p_521] THEN ARITH_TAC; + REWRITE_TAC[p_521] THEN ARITH_TAC; + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + REWRITE_TAC[GSYM NOT_LT] THEN ABBREV_TAC `bb <=> h + l < p_521` THEN + MAP_EVERY EXPAND_TAC ["h"; "l"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist; p_521] THEN + REWRITE_TAC[VAL_WORD_AND_MASK_WORD; ARITH_RULE `511 = 2 EXP 9 - 1`] THEN + REWRITE_TAC[REAL_OF_NUM_MOD] THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC NUM_REDUCE_CONV THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC; + ASM_SIMP_TAC[MOD_CASES; ARITH_RULE + `h < p /\ l <= p ==> h + l < 2 * p`] THEN + SIMP_TAC[REAL_OF_NUM_CLAUSES; REAL_OF_NUM_SUB; COND_SWAP; GSYM NOT_LE] THEN + MESON_TAC[]]);; + +(* ------------------------------------------------------------------------- *) +(* Instances of sub. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_SUB_P521_TAC = + ARM_MACRO_SIM_ABBREV_TAC p521_jmixadd_mc 34 lvs + `!(t:armstate) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 9)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 9)) t = n + ==> + aligned 16 (read SP t) /\ + nonoverlapping (word pc,0x3d60) (word_add (read p3 t) (word n3),72) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p521_jmixadd_mc /\ + read PC s = pcin /\ + read SP s = read SP t /\ + read X26 s = read X26 t /\ + read X27 s = read X27 t /\ + read X28 s = read X28 t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 9)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 9)) s = + n) + (\s. read PC s = pcout /\ + (m < p_521 /\ n < p_521 + ==> &(read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 9)) s) = (&m - &n) rem &p_521)) + (MAYCHANGE [PC; X3; X4; X5; X6; X7; X8; X9; X10; X11; X12; X13] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 9)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "m_" o lhand o concl) THEN + + (*** Initial subtraction x - y, comparison result ***) + + ARM_ACCSTEPS_TAC P521_JMIXADD_EXEC [3;4;7;8;11;12;15;16;19] (1--19) THEN + + SUBGOAL_THEN `carry_s19 <=> m < n` SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN EXISTS_TAC `576` THEN + MAP_EVERY EXPAND_TAC ["m"; "n"] THEN + REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ALL_TAC] THEN + + (*** Further optional subtraction mod 2^521 ***) + + ARM_ACCSTEPS_TAC P521_JMIXADD_EXEC (20--28) (20--34) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN STRIP_TAC THEN + + (*** Map things into the reals, doing case analysis over comparison ***) + + TRANS_TAC EQ_TRANS `if m < n then &m - &n + &p_521:int else &m - &n` THEN + CONJ_TAC THENL + [ONCE_REWRITE_TAC[int_eq] THEN ONCE_REWRITE_TAC[COND_RAND] THEN + REWRITE_TAC[int_of_num_th; int_sub_th; int_add_th]; + CONV_TAC SYM_CONV THEN MATCH_MP_TAC INT_REM_UNIQ THEN + EXISTS_TAC `if m:num < n then --(&1):int else &0` THEN + MAP_EVERY UNDISCH_TAC [`m < p_521`; `n < p_521`] THEN + REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES; p_521] THEN INT_ARITH_TAC] THEN + + (*** Hence show that we get the right result in 521 bits ***) + + CONV_TAC SYM_CONV THEN + CONV_TAC(RAND_CONV(RAND_CONV BIGNUM_LEXPAND_CONV)) THEN + ASM_REWRITE_TAC[SYM(NUM_REDUCE_CONV `2 EXP 9 - 1`)] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`521`; `&0:real`] THEN CONJ_TAC THENL + [MAP_EVERY UNDISCH_TAC [`m < p_521`; `n < p_521`] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; p_521] THEN REAL_ARITH_TAC; + ALL_TAC] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; REWRITE_TAC[INTEGER_CLOSED]] THEN + ABBREV_TAC `bb <=> m:num < n` THEN MAP_EVERY EXPAND_TAC ["m"; "n"] THEN + REWRITE_TAC[bignum_of_wordlist; VAL_WORD_AND_MASK_WORD] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; REAL_OF_NUM_MOD; p_521] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Overall point operation proof. *) +(* ------------------------------------------------------------------------- *) + +let P521_JMIXADD_CORRECT = time prove + (`!p3 p1 t1 p2 t2 pc stackpointer. + aligned 16 stackpointer /\ + ALLPAIRS nonoverlapping + [(p3,216); (stackpointer,432)] + [(word pc,0x3d60); (p1,216); (p2,144)] /\ + nonoverlapping (p3,216) (stackpointer,432) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p521_jmixadd_mc /\ + read PC s = word(pc + 0x18) /\ + read SP s = stackpointer /\ + C_ARGUMENTS [p3; p1; p2] s /\ + bignum_triple_from_memory (p1,9) s = t1 /\ + bignum_pair_from_memory (p2,9) s = t2) + (\s. read PC s = word (pc + 0x3d44) /\ + (!x1 y1 z1 x2 y2 z2. + ~(z1 = &0) /\ z2 = &1 /\ + ~(jacobian_eq (integer_mod_ring p_521) + (x1,y1,z1) (x2,y2,z2)) /\ + ~(jacobian_eq (integer_mod_ring p_521) + (jacobian_neg nistp521 (x1,y1,z1)) + (x2,y2,z2)) /\ + t1 = tripled nistp521_encode (x1,y1,z1) /\ + t2 = paired nistp521_encode (x2,y2) + ==> bignum_triple_from_memory(p3,9) s = + tripled nistp521_encode + (jacobian_add nistp521 (x1,y1,z1) (x2,y2,z2)))) + (MAYCHANGE [PC; X0; X1; X2; X3; X4; X5; X6; X7; X8; X9; X10; + X11; X12; X13; X14; X15; X16; X17; X19; X20; + X21; X22; X23; X24; X25; X26; X27; X28] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,216); + memory :> bytes(stackpointer,432)])`, + REWRITE_TAC[FORALL_PAIR_THM] THEN + MAP_EVERY X_GEN_TAC + [`p3:int64`; `p1:int64`; `x1:num`; `y1:num`; `z1:num`; `p2:int64`; + `x2:num`; `y2:num`; `pc:num`; `stackpointer:int64`] THEN + REWRITE_TAC[ALLPAIRS; ALL; NONOVERLAPPING_CLAUSES] THEN STRIP_TAC THEN + REWRITE_TAC[C_ARGUMENTS; SOME_FLAGS; PAIR_EQ; + bignum_pair_from_memory; bignum_triple_from_memory] THEN + CONV_TAC(ONCE_DEPTH_CONV NUM_MULT_CONV) THEN + CONV_TAC(ONCE_DEPTH_CONV NORMALIZE_RELATIVE_ADDRESS_CONV) THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + + LOCAL_SQR_P521_TAC 3 ["zp2";"z_1"] THEN + LOCAL_MUL_P521_TAC 0 ["y2a";"z_1";"y_2"] THEN + LOCAL_MUL_P521_TAC 0 ["x2a";"zp2";"x_2"] THEN + LOCAL_MUL_P521_TAC 0 ["y2a";"zp2";"y2a"] THEN + LOCAL_SUB_P521_TAC 0 ["xd";"x2a";"x_1"] THEN + LOCAL_SUB_P521_TAC 0 ["yd";"y2a";"y_1"] THEN + LOCAL_SQR_P521_TAC 0 ["zz";"xd"] THEN + LOCAL_SQR_P521_TAC 0 ["ww";"yd"] THEN + LOCAL_MUL_P521_TAC 0 ["zzx1";"zz";"x_1"] THEN + LOCAL_MUL_P521_TAC 0 ["zzx2";"zz";"x2a"] THEN + LOCAL_SUB_P521_TAC 0 ["x_3";"ww";"zzx1"] THEN + LOCAL_SUB_P521_TAC 0 ["t1";"zzx2";"zzx1"] THEN + LOCAL_MUL_P521_TAC 0 ["z_3";"xd";"z_1"] THEN + LOCAL_SUB_P521_TAC 0 ["x_3";"x_3";"zzx2"] THEN + LOCAL_SUB_P521_TAC 0 ["t2";"zzx1";"x_3"] THEN + LOCAL_MUL_P521_TAC 0 ["t1";"t1";"y_1"] THEN + LOCAL_MUL_P521_TAC 0 ["t2";"yd";"t2"] THEN + LOCAL_SUB_P521_TAC 0 ["y_3";"t2";"t1"] THEN + + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + DISCARD_STATE_TAC "s21" THEN + DISCARD_MATCHING_ASSUMPTIONS [`nonoverlapping_modulo a b c`] THEN + MAP_EVERY X_GEN_TAC + [`x1':int`; `y1':int`; `z1':int`; `x2':int`; `y2':int`; `z2':int`] THEN + DISCH_THEN(CONJUNCTS_THEN2 ASSUME_TAC MP_TAC) THEN + GEN_REWRITE_TAC I [IMP_CONJ] THEN DISCH_THEN SUBST_ALL_TAC THEN + REPLICATE_TAC 2 (DISCH_THEN(CONJUNCTS_THEN2 ASSUME_TAC MP_TAC)) THEN + REWRITE_TAC[tripled; paired; nistp521_encode; PAIR_EQ; modular_encode] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN + (STRIP_ASSUME_TAC o MATCH_MP unilemma2)) THEN + + (*** Dispose of any range hypotheses ***) + + REPEAT(FIRST_X_ASSUM(MP_TAC o check (is_imp o concl))) THEN + REPEAT(ANTS_TAC THENL + [REWRITE_TAC[p_521] THEN RULE_ASSUM_TAC(REWRITE_RULE[p_521]) THEN + CONV_TAC NUM_REDUCE_CONV THEN ASM BOUNDER_TAC[]; + (DISCH_THEN(STRIP_ASSUME_TAC o MATCH_MP unilemma0) ORELSE + DISCH_THEN(STRIP_ASSUME_TAC o MATCH_MP unilemma1))]) THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o GEN_REWRITE_RULE I [GSYM NOT_LE])) THEN + + (*** Now push the moduli around then do the algebra ***) + + RULE_ASSUM_TAC(REWRITE_RULE + [num_congruent; GSYM INT_OF_NUM_CLAUSES; GSYM INT_OF_NUM_REM]) THEN + ASM_REWRITE_TAC[tripled; paired; jacobian_add; nistp521] THEN + ASM_REWRITE_TAC[GSYM nistp521] THEN + REWRITE_TAC[INTEGER_MOD_RING_CLAUSES] THEN + CONV_TAC INT_REDUCE_CONV THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN + CONV_TAC INT_REM_DOWN_CONV THEN + REWRITE_TAC[tripled; modular_encode] THEN + REWRITE_TAC[PAIR_EQ; GSYM INT_OF_NUM_EQ; nintlemma] THEN + CONV_TAC INT_REM_DOWN_CONV THEN + REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES; GSYM INT_OF_NUM_REM] THEN + ASM_REWRITE_TAC[] THEN CONV_TAC INT_REM_DOWN_CONV THEN + REPEAT CONJ_TAC THEN AP_THM_TAC THEN AP_TERM_TAC THEN + INT_ARITH_TAC);; + +let P521_JMIXADD_SUBROUTINE_CORRECT = time prove + (`!p3 p1 t1 p2 t2 pc stackpointer returnaddress. + aligned 16 stackpointer /\ + ALLPAIRS nonoverlapping + [(p3,216); (word_sub stackpointer (word 512),512)] + [(word pc,0x3d60); (p1,216); (p2,144)] /\ + nonoverlapping (p3,216) (word_sub stackpointer (word 512),512) + ==> ensures arm + (\s. aligned_bytes_loaded s (word pc) p521_jmixadd_mc /\ + read PC s = word pc /\ + read SP s = stackpointer /\ + read X30 s = returnaddress /\ + C_ARGUMENTS [p3; p1; p2] s /\ + bignum_triple_from_memory (p1,9) s = t1 /\ + bignum_pair_from_memory (p2,9) s = t2) + (\s. read PC s = returnaddress /\ + (!x1 y1 z1 x2 y2 z2. + ~(z1 = &0) /\ z2 = &1 /\ + ~(jacobian_eq (integer_mod_ring p_521) + (x1,y1,z1) (x2,y2,z2)) /\ + ~(jacobian_eq (integer_mod_ring p_521) + (jacobian_neg nistp521 (x1,y1,z1)) + (x2,y2,z2)) /\ + t1 = tripled nistp521_encode (x1,y1,z1) /\ + t2 = paired nistp521_encode (x2,y2) + ==> bignum_triple_from_memory(p3,9) s = + tripled nistp521_encode + (jacobian_add nistp521 (x1,y1,z1) (x2,y2,z2)))) + (MAYCHANGE [PC; X0; X1; X2; X3; X4; X5; X6; X7; X8; X9; X10; + X11; X12; X13; X14; X15; X16; X17] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,216); + memory :> bytes(word_sub stackpointer (word 512),512)])`, + ARM_ADD_RETURN_STACK_TAC P521_JMIXADD_EXEC + P521_JMIXADD_CORRECT + `[X19; X20; X21; X22; X23; X24; X25; X26; X27; X28]` + 512);; diff --git a/benchmarks/benchmark.c b/benchmarks/benchmark.c index e29656060f..13cbf38361 100644 --- a/benchmarks/benchmark.c +++ b/benchmarks/benchmark.c @@ -653,6 +653,10 @@ void call_p384_montjadd(void) repeat(p384_montjadd(b1,b2,b3)) void call_p384_montjdouble(void) repeat(p384_montjdouble(b1,b2)) void call_p384_montjmixadd(void) repeat(p384_montjmixadd(b1,b2,b3)) +void call_p521_jadd(void) repeat(p521_jadd(b1,b2,b3)) +void call_p521_jdouble(void) repeat(p521_jdouble(b1,b2)) +void call_p521_jmixadd(void) repeat(p521_jmixadd(b1,b2,b3)) + void call_secp256k1_jadd(void) repeat(secp256k1_jadd(b1,b2,b3)) void call_secp256k1_jdouble(void) repeat(secp256k1_jdouble(b1,b2)) void call_secp256k1_jmixadd(void) repeat(secp256k1_jmixadd(b1,b2,b3)) @@ -934,6 +938,9 @@ int main(void) timingtest(bmi,"p384_montjadd",call_p384_montjadd); timingtest(bmi,"p384_montjdouble",call_p384_montjdouble); timingtest(bmi,"p384_montjmixadd",call_p384_montjmixadd); + timingtest(bmi,"p521_jadd",call_p521_jadd); + timingtest(bmi,"p521_jdouble",call_p521_jdouble); + timingtest(bmi,"p521_jmixadd",call_p521_jmixadd); timingtest(bmi,"secp256k1_jadd",call_secp256k1_jadd); timingtest(bmi,"secp256k1_jdouble",call_secp256k1_jdouble); timingtest(bmi,"secp256k1_jmixadd",call_secp256k1_jmixadd); diff --git a/include/s2n-bignum-c89.h b/include/s2n-bignum-c89.h index c697c4d310..0997464557 100644 --- a/include/s2n-bignum-c89.h +++ b/include/s2n-bignum-c89.h @@ -758,6 +758,18 @@ extern void p384_montjdouble(uint64_t p3[18],uint64_t p1[18]); /* Inputs p1[18], p2[12]; output p3[18] */ extern void p384_montjmixadd(uint64_t p3[18],uint64_t p1[18],uint64_t p2[12]); +/* Point addition on NIST curve P-521 in Jacobian coordinates */ +/* Inputs p1[27], p2[27]; output p3[27] */ +extern void p521_jadd(uint64_t p3[27],uint64_t p1[27],uint64_t p2[27]); + +/* Point doubling on NIST curve P-521 in Jacobian coordinates */ +/* Input p1[27]; output p3[27] */ +extern void p521_jdouble(uint64_t p3[27],uint64_t p1[27]); + +/* Point mixed addition on NIST curve P-521 in Jacobian coordinates */ +/* Inputs p1[27], p2[18]; output p3[27] */ +extern void p521_jmixadd(uint64_t p3[27],uint64_t p1[27],uint64_t p2[18]); + /* Point addition on SECG curve secp256k1 in Jacobian coordinates */ /* Inputs p1[12], p2[12]; output p3[12] */ extern void secp256k1_jadd(uint64_t p3[12],uint64_t p1[12],uint64_t p2[12]); diff --git a/include/s2n-bignum.h b/include/s2n-bignum.h index dc85919321..78dda96ebd 100644 --- a/include/s2n-bignum.h +++ b/include/s2n-bignum.h @@ -757,6 +757,18 @@ extern void p384_montjdouble(uint64_t p3[static 18],uint64_t p1[static 18]); // Inputs p1[18], p2[12]; output p3[18] extern void p384_montjmixadd(uint64_t p3[static 18],uint64_t p1[static 18],uint64_t p2[static 12]); +// Point addition on NIST curve P-521 in Jacobian coordinates +// Inputs p1[27], p2[27]; output p3[27] +extern void p521_jadd(uint64_t p3[static 27],uint64_t p1[static 27],uint64_t p2[static 27]); + +// Point doubling on NIST curve P-521 in Jacobian coordinates +// Input p1[27]; output p3[27] +extern void p521_jdouble(uint64_t p3[static 27],uint64_t p1[static 27]); + +// Point mixed addition on NIST curve P-521 in Jacobian coordinates +// Inputs p1[27], p2[18]; output p3[27] +extern void p521_jmixadd(uint64_t p3[static 27],uint64_t p1[static 27],uint64_t p2[static 18]); + // Point addition on SECG curve secp256k1 in Jacobian coordinates // Inputs p1[12], p2[12]; output p3[12] extern void secp256k1_jadd(uint64_t p3[static 12],uint64_t p1[static 12],uint64_t p2[static 12]); diff --git a/tests/test.c b/tests/test.c index dd022cc50d..31f7be71d2 100644 --- a/tests/test.c +++ b/tests/test.c @@ -277,6 +277,9 @@ enum { TEST_P384_MONTJADD, TEST_P384_MONTJDOUBLE, TEST_P384_MONTJMIXADD, + TEST_P521_JADD, + TEST_P521_JDOUBLE, + TEST_P521_JMIXADD, TEST_SECP256K1_JADD, TEST_SECP256K1_JDOUBLE, TEST_SECP256K1_JMIXADD, @@ -463,6 +466,20 @@ uint64_t n_521[9] = UINT64_C(0x00000000000001ff) }; +// (-3) mod p_521 + +uint64_t a_521[9] = + { UINT64_C(0xfffffffffffffffc), + UINT64_C(0xffffffffffffffff), + UINT64_C(0xffffffffffffffff), + UINT64_C(0xffffffffffffffff), + UINT64_C(0xffffffffffffffff), + UINT64_C(0xffffffffffffffff), + UINT64_C(0xffffffffffffffff), + UINT64_C(0xffffffffffffffff), + UINT64_C(0x00000000000001ff) + }; + uint64_t p_25519[4] = { UINT64_C(0xffffffffffffffed), UINT64_C(0xffffffffffffffff), @@ -1082,15 +1099,19 @@ void reference_jdouble (uint64_t k,uint64_t *p3,uint64_t *p1,uint64_t *a,uint64_t *m) { uint64_t *i = alloca(8 * k); uint64_t *t = alloca(8 * k); + uint64_t *p1m = alloca(8 * 3 * k); + uint64_t *am = alloca(8 * k); + uint64_t *p3m = alloca(8 * 3 * k); + bignum_montifier(k,i,m,t); - bignum_montmul(k,t,i,p1,m); bignum_copy(k,p1,k,t); - bignum_montmul(k,t,i,p1+k,m); bignum_copy(k,p1+k,k,t); - bignum_montmul(k,t,i,p1+2*k,m); bignum_copy(k,p1+2*k,k,t); - bignum_montmul(k,t,i,a,m); bignum_copy(k,a,k,t); - reference_montjdouble(k,p3,p1,a,m); - bignum_montredc(k,t,k,p3,m,k); bignum_copy(k,p3,k,t); - bignum_montredc(k,t,k,p3+k,m,k); bignum_copy(k,p3+k,k,t); - bignum_montredc(k,t,k,p3+2*k,m,k); bignum_copy(k,p3+2*k,k,t); + bignum_montmul(k,p1m,i,p1,m); + bignum_montmul(k,p1m+k,i,p1+k,m); + bignum_montmul(k,p1m+2*k,i,p1+2*k,m); + bignum_montmul(k,am,i,a,m); + reference_montjdouble(k,p3m,p1m,am,m); + bignum_montredc(k,p3,k,p3m,m,k); + bignum_montredc(k,p3+k,k,p3m+k,m,k); + bignum_montredc(k,p3+2*k,k,p3m+2*k,m,k); } void reference_montjmixadd @@ -1137,16 +1158,20 @@ void reference_jmixadd (uint64_t k,uint64_t *p3,uint64_t *p1,uint64_t *p2,uint64_t *m) { uint64_t *i = alloca(8 * k); uint64_t *t = alloca(8 * k); + uint64_t *p1m = alloca(8 * 3 * k); + uint64_t *p2m = alloca(8 * 2 * k); + uint64_t *p3m = alloca(8 * 3 * k); + bignum_montifier(k,i,m,t); - bignum_montmul(k,t,i,p1,m); bignum_copy(k,p1,k,t); - bignum_montmul(k,t,i,p1+k,m); bignum_copy(k,p1+k,k,t); - bignum_montmul(k,t,i,p1+2*k,m); bignum_copy(k,p1+2*k,k,t); - bignum_montmul(k,t,i,p2,m); bignum_copy(k,p2,k,t); - bignum_montmul(k,t,i,p2+k,m); bignum_copy(k,p2+k,k,t); - reference_montjmixadd(k,p3,p1,p2,m); - bignum_montredc(k,t,k,p3,m,k); bignum_copy(k,p3,k,t); - bignum_montredc(k,t,k,p3+k,m,k); bignum_copy(k,p3+k,k,t); - bignum_montredc(k,t,k,p3+2*k,m,k); bignum_copy(k,p3+2*k,k,t); + bignum_montmul(k,p1m,i,p1,m); + bignum_montmul(k,p1m+k,i,p1+k,m); + bignum_montmul(k,p1m+2*k,i,p1+2*k,m); + bignum_montmul(k,p2m,i,p2,m); + bignum_montmul(k,p2m+k,i,p2+k,m); + reference_montjmixadd(k,p3m,p1m,p2m,m); + bignum_montredc(k,p3,k,p3m,m,k); + bignum_montredc(k,p3+k,k,p3m+k,m,k); + bignum_montredc(k,p3+2*k,k,p3m+2*k,m,k); } void reference_montjadd @@ -1203,17 +1228,21 @@ void reference_jadd (uint64_t k,uint64_t *p3,uint64_t *p1,uint64_t *p2,uint64_t *m) { uint64_t *i = alloca(8 * k); uint64_t *t = alloca(8 * k); + uint64_t *p1m = alloca(8 * 3 * k); + uint64_t *p2m = alloca(8 * 3 * k); + uint64_t *p3m = alloca(8 * 3 * k); + bignum_montifier(k,i,m,t); - bignum_montmul(k,t,i,p1,m); bignum_copy(k,p1,k,t); - bignum_montmul(k,t,i,p1+k,m); bignum_copy(k,p1+k,k,t); - bignum_montmul(k,t,i,p1+2*k,m); bignum_copy(k,p1+2*k,k,t); - bignum_montmul(k,t,i,p2,m); bignum_copy(k,p2,k,t); - bignum_montmul(k,t,i,p2+k,m); bignum_copy(k,p2+k,k,t); - bignum_montmul(k,t,i,p2+2*k,m); bignum_copy(k,p2+2*k,k,t); - reference_montjadd(k,p3,p1,p2,m); - bignum_montredc(k,t,k,p3,m,k); bignum_copy(k,p3,k,t); - bignum_montredc(k,t,k,p3+k,m,k); bignum_copy(k,p3+k,k,t); - bignum_montredc(k,t,k,p3+2*k,m,k); bignum_copy(k,p3+2*k,k,t); + bignum_montmul(k,p1m,i,p1,m); + bignum_montmul(k,p1m+k,i,p1+k,m); + bignum_montmul(k,p1m+2*k,i,p1+2*k,m); + bignum_montmul(k,p2m,i,p2,m); + bignum_montmul(k,p2m+k,i,p2+k,m); + bignum_montmul(k,p2m+2*k,i,p2+2*k,m); + reference_montjadd(k,p3m,p1m,p2m,m); + bignum_montredc(k,p3,k,p3m,m,k); + bignum_montredc(k,p3+k,k,p3m+k,m,k); + bignum_montredc(k,p3+2*k,k,p3m+2*k,m,k); } // **************************************************************************** @@ -7802,6 +7831,109 @@ int test_p384_montjmixadd(void) } +int test_p521_jadd(void) +{ uint64_t t, k; + printf("Testing p521_jadd with %d cases\n",tests); + k = 9; + + int c; + for (t = 0; t < tests; ++t) + { random_bignum(k,b0); reference_mod(k,b1,b0,p_521); + random_bignum(k,b0); reference_mod(k,b1+k,b0,p_521); + random_bignum(k,b0); reference_mod(k,b1+2*k,b0,p_521); + random_bignum(k,b0); reference_mod(k,b2,b0,p_521); + random_bignum(k,b0); reference_mod(k,b2+k,b0,p_521); + random_bignum(k,b0); reference_mod(k,b2+2*k,b0,p_521); + + p521_jadd(b3,b1,b2); + reference_jadd(k,b4,b1,b2,p_521); + + c = reference_compare(3*k,b3,3*k,b4); + if (c != 0) + { printf("### Disparity: [size %4"PRIu64"] " + "<...0x%016"PRIx64"> + <...0x%016"PRIx64"> = " + "<...0x%016"PRIx64"> not <...0x%016"PRIx64">\n", + k,b1[0],b2[0],b3[0],b4[0]); + return 1; + } + else if (VERBOSE) + { printf("OK: [size %4"PRIu64"] " + "<...0x%016"PRIx64"> + <...0x%016"PRIx64"> = " + "<...0x%016"PRIx64">\n", + k,b1[0],b2[0],b3[0]); + } + } + printf("All OK\n"); + return 0; +} + +int test_p521_jdouble(void) +{ uint64_t t, k; + printf("Testing p521_jdouble with %d cases\n",tests); + k = 9; + + int c; + for (t = 0; t < tests; ++t) + { random_bignum(k,b0); reference_mod(k,b1,b0,p_521); + random_bignum(k,b0); reference_mod(k,b1+k,b0,p_521); + random_bignum(k,b0); reference_mod(k,b1+2*k,b0,p_521); + + p521_jdouble(b3,b1); + reference_jdouble(k,b4,b1,a_521,p_521); + + c = reference_compare(3*k,b3,3*k,b4); + if (c != 0) + { printf("### Disparity: [size %4"PRIu64"] " + "2 * <...0x%016"PRIx64"> = " + "<...0x%016"PRIx64"> not <...0x%016"PRIx64">\n", + k,b1[0],b3[0],b4[0]); + return 1; + } + else if (VERBOSE) + { printf("OK: [size %4"PRIu64"] " + "2 * <...0x%016"PRIx64"> = " + "<...0x%016"PRIx64">\n", + k,b1[0],b3[0]); + } + } + printf("All OK\n"); + return 0; +} + +int test_p521_jmixadd(void) +{ uint64_t t, k; + printf("Testing p521_jmixadd with %d cases\n",tests); + k = 9; + + int c; + for (t = 0; t < tests; ++t) + { random_bignum(k,b0); reference_mod(k,b1,b0,p_521); + random_bignum(k,b0); reference_mod(k,b1+k,b0,p_521); + random_bignum(k,b0); reference_mod(k,b1+2*k,b0,p_521); + random_bignum(k,b0); reference_mod(k,b2,b0,p_521); + random_bignum(k,b0); reference_mod(k,b2+k,b0,p_521); + p521_jmixadd(b3,b1,b2); + reference_jmixadd(k,b4,b1,b2,p_521); + + c = reference_compare(3*k,b3,3*k,b4); + if (c != 0) + { printf("### Disparity: [size %4"PRIu64"] " + "<...0x%016"PRIx64"> + <...0x%016"PRIx64"> = " + "<...0x%016"PRIx64"> not <...0x%016"PRIx64">\n", + k,b1[0],b2[0],b3[0],b4[0]); + return 1; + } + else if (VERBOSE) + { printf("OK: [size %4"PRIu64"] " + "<...0x%016"PRIx64"> + <...0x%016"PRIx64"> = " + "<...0x%016"PRIx64">\n", + k,b1[0],b2[0],b3[0]); + } + } + printf("All OK\n"); + return 0; +} + int test_secp256k1_jadd(void) { uint64_t t, k; printf("Testing secp256k1_jadd with %d cases\n",tests); @@ -8297,6 +8429,9 @@ int test_all(void) dotest(test_p384_montjadd); dotest(test_p384_montjdouble); dotest(test_p384_montjmixadd); + dotest(test_p521_jadd); + dotest(test_p521_jdouble); + dotest(test_p521_jmixadd); dotest(test_secp256k1_jadd); dotest(test_secp256k1_jdouble); dotest(test_secp256k1_jmixadd); @@ -8787,6 +8922,9 @@ int main(int argc, char *argv[]) case TEST_P384_MONTJADD: return test_p384_montjadd(); case TEST_P384_MONTJDOUBLE: return test_p384_montjdouble(); case TEST_P384_MONTJMIXADD: return test_p384_montjmixadd(); + case TEST_P521_JADD: return test_p521_jadd(); + case TEST_P521_JDOUBLE: return test_p521_jdouble(); + case TEST_P521_JMIXADD: return test_p521_jmixadd(); case TEST_SECP256K1_JADD: return test_secp256k1_jadd(); case TEST_SECP256K1_JDOUBLE: return test_secp256k1_jdouble(); case TEST_SECP256K1_JMIXADD: return test_secp256k1_jmixadd(); diff --git a/x86/Makefile b/x86/Makefile index dbc1b236b8..1bd5dfac7d 100644 --- a/x86/Makefile +++ b/x86/Makefile @@ -270,6 +270,9 @@ OBJ = curve25519/bignum_add_p25519.o \ p521/bignum_tomont_p521.o \ p521/bignum_triple_p521.o \ p521/bignum_triple_p521_alt.o \ + p521/p521_jadd.o \ + p521/p521_jdouble.o \ + p521/p521_jmixadd.o \ secp256k1/bignum_add_p256k1.o \ secp256k1/bignum_cmul_p256k1.o \ secp256k1/bignum_cmul_p256k1_alt.o \ diff --git a/x86/p521/Makefile b/x86/p521/Makefile index c3fe2b20db..b0cd51270f 100644 --- a/x86/p521/Makefile +++ b/x86/p521/Makefile @@ -40,7 +40,10 @@ OBJ = bignum_add_p521.o \ bignum_tolebytes_p521.o \ bignum_tomont_p521.o \ bignum_triple_p521.o \ - bignum_triple_p521_alt.o + bignum_triple_p521_alt.o \ + p521_jadd.o \ + p521_jdouble.o \ + p521_jmixadd.o %.o : %.S ; $(CC) -E -I../../include $< | as -o $@ - diff --git a/x86/p521/p521_jadd.S b/x86/p521/p521_jadd.S new file mode 100644 index 0000000000..d1688f2977 --- /dev/null +++ b/x86/p521/p521_jadd.S @@ -0,0 +1,765 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +// ---------------------------------------------------------------------------- +// Point addition on NIST curve P-521 in Jacobian coordinates +// +// extern void p521_jadd +// (uint64_t p3[static 27],uint64_t p1[static 27],uint64_t p2[static 27]); +// +// Does p3 := p1 + p2 where all points are regarded as Jacobian triples. +// A Jacobian triple (x,y,z) represents affine point (x/z^2,y/z^3). +// It is assumed that all coordinates of the input points p1 and p2 are +// fully reduced mod p_521, that both z coordinates are nonzero and +// that neither p1 =~= p2 or p1 =~= -p2, where "=~=" means "represents +// the same affine point as". +// +// Standard x86-64 ABI: RDI = p3, RSI = p1, RDX = p2 +// Microsoft x64 ABI: RCX = p3, RDX = p1, R8 = p2 +// ---------------------------------------------------------------------------- +#include "_internal_s2n_bignum.h" + + .intel_syntax noprefix + S2N_BN_SYM_VISIBILITY_DIRECTIVE(p521_jadd) + S2N_BN_SYM_PRIVACY_DIRECTIVE(p521_jadd) + .text + +// Size of individual field elements + +#define NUMSIZE 72 + +// Stable homes for input arguments during main code sequence +// These are where they arrive except for input_y, initially in rdx + +#define input_z rdi +#define input_x rsi +#define input_y rcx + +// Pointer-offset pairs for inputs and outputs + +#define x_1 input_x+0 +#define y_1 input_x+NUMSIZE +#define z_1 input_x+(2*NUMSIZE) + +#define x_2 input_y+0 +#define y_2 input_y+NUMSIZE +#define z_2 input_y+(2*NUMSIZE) + +#define x_3 input_z+0 +#define y_3 input_z+NUMSIZE +#define z_3 input_z+(2*NUMSIZE) + +// Pointer-offset pairs for temporaries, with some aliasing +// The tmp field is internal storage for field mul and sqr. +// NSPACE is the total stack needed for these temporaries + +#define z1sq rsp+(NUMSIZE*0) +#define ww rsp+(NUMSIZE*0) + +#define yd rsp+(NUMSIZE*1) +#define y2a rsp+(NUMSIZE*1) + +#define x2a rsp+(NUMSIZE*2) +#define zzx2 rsp+(NUMSIZE*2) + +#define zz rsp+(NUMSIZE*3) +#define t1 rsp+(NUMSIZE*3) + +#define t2 rsp+(NUMSIZE*4) +#define x1a rsp+(NUMSIZE*4) +#define zzx1 rsp+(NUMSIZE*4) + +#define xd rsp+(NUMSIZE*5) +#define z2sq rsp+(NUMSIZE*5) + +#define y1a rsp+(NUMSIZE*6) + +#define tmp rsp+(NUMSIZE*7) + +#define NSPACE (NUMSIZE*7+64) + +// Corresponds exactly to bignum_mul_p521 + +#define mul_p521(P0,P1,P2) \ + xor ebp,ebp; \ + mov rdx,[P2]; \ + mulx r9,r8,[P1]; \ + mov [rsp+504],r8; \ + mulx r10,rbx,[P1+0x8]; \ + adc r9,rbx; \ + mulx r11,rbx,[P1+0x10]; \ + adc r10,rbx; \ + mulx r12,rbx,[P1+0x18]; \ + adc r11,rbx; \ + mulx r13,rbx,[P1+0x20]; \ + adc r12,rbx; \ + mulx r14,rbx,[P1+0x28]; \ + adc r13,rbx; \ + mulx r15,rbx,[P1+0x30]; \ + adc r14,rbx; \ + mulx r8,rbx,[P1+0x38]; \ + adc r15,rbx; \ + adc r8,rbp; \ + mov rdx,[P2+0x8]; \ + xor ebp,ebp; \ + mulx rbx,rax,[P1]; \ + adcx r9,rax; \ + adox r10,rbx; \ + mov [rsp+512],r9; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,[P1+0x28]; \ + adcx r14,rax; \ + adox r15,rbx; \ + mulx rbx,rax,[P1+0x30]; \ + adcx r15,rax; \ + adox r8,rbx; \ + mulx r9,rax,[P1+0x38]; \ + adcx r8,rax; \ + adox r9,rbp; \ + adc r9,rbp; \ + mov rdx,[P2+0x10]; \ + xor ebp,ebp; \ + mulx rbx,rax,[P1]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mov [rsp+520],r10; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r14,rax; \ + adox r15,rbx; \ + mulx rbx,rax,[P1+0x28]; \ + adcx r15,rax; \ + adox r8,rbx; \ + mulx rbx,rax,[P1+0x30]; \ + adcx r8,rax; \ + adox r9,rbx; \ + mulx r10,rax,[P1+0x38]; \ + adcx r9,rax; \ + adox r10,rbp; \ + adc r10,rbp; \ + mov rdx,[P2+0x18]; \ + xor ebp,ebp; \ + mulx rbx,rax,[P1]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mov [rsp+528],r11; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r14,rax; \ + adox r15,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r15,rax; \ + adox r8,rbx; \ + mulx rbx,rax,[P1+0x28]; \ + adcx r8,rax; \ + adox r9,rbx; \ + mulx rbx,rax,[P1+0x30]; \ + adcx r9,rax; \ + adox r10,rbx; \ + mulx r11,rax,[P1+0x38]; \ + adcx r10,rax; \ + adox r11,rbp; \ + adc r11,rbp; \ + mov rdx,[P2+0x20]; \ + xor ebp,ebp; \ + mulx rbx,rax,[P1]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mov [rsp+536],r12; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r14,rax; \ + adox r15,rbx; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r15,rax; \ + adox r8,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r8,rax; \ + adox r9,rbx; \ + mulx rbx,rax,[P1+0x28]; \ + adcx r9,rax; \ + adox r10,rbx; \ + mulx rbx,rax,[P1+0x30]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx r12,rax,[P1+0x38]; \ + adcx r11,rax; \ + adox r12,rbp; \ + adc r12,rbp; \ + mov rdx,[P2+0x28]; \ + xor ebp,ebp; \ + mulx rbx,rax,[P1]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mov [rsp+544],r13; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r14,rax; \ + adox r15,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r15,rax; \ + adox r8,rbx; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r8,rax; \ + adox r9,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r9,rax; \ + adox r10,rbx; \ + mulx rbx,rax,[P1+0x28]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P1+0x30]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx r13,rax,[P1+0x38]; \ + adcx r12,rax; \ + adox r13,rbp; \ + adc r13,rbp; \ + mov rdx,[P2+0x30]; \ + xor ebp,ebp; \ + mulx rbx,rax,[P1]; \ + adcx r14,rax; \ + adox r15,rbx; \ + mov [rsp+552],r14; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r15,rax; \ + adox r8,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r8,rax; \ + adox r9,rbx; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r9,rax; \ + adox r10,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P1+0x28]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,[P1+0x30]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx r14,rax,[P1+0x38]; \ + adcx r13,rax; \ + adox r14,rbp; \ + adc r14,rbp; \ + mov rdx,[P2+0x38]; \ + xor ebp,ebp; \ + mulx rbx,rax,[P1]; \ + adcx r15,rax; \ + adox r8,rbx; \ + mov [rsp+560],r15; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r8,rax; \ + adox r9,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r9,rax; \ + adox r10,rbx; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,[P1+0x28]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx rbx,rax,[P1+0x30]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx r15,rax,[P1+0x38]; \ + adcx r14,rax; \ + adox r15,rbp; \ + adc r15,rbp; \ + mov rdx,[P1+0x40]; \ + xor ebp,ebp; \ + mulx rbx,rax,[P2]; \ + adcx r8,rax; \ + adox r9,rbx; \ + mulx rbx,rax,[P2+0x8]; \ + adcx r9,rax; \ + adox r10,rbx; \ + mulx rbx,rax,[P2+0x10]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P2+0x18]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,[P2+0x20]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx rbx,rax,[P2+0x28]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,[P2+0x30]; \ + adcx r14,rax; \ + adox r15,rbx; \ + mulx rbx,rax,[P2+0x38]; \ + adcx r15,rax; \ + adox rbx,rbp; \ + adc rbp,rbx; \ + mov rdx,[P2+0x40]; \ + xor eax,eax; \ + mulx rbx,rax,[P1]; \ + adcx r8,rax; \ + adox r9,rbx; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r9,rax; \ + adox r10,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx rbx,rax,[P1+0x28]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,[P1+0x30]; \ + adcx r14,rax; \ + adox r15,rbx; \ + mulx rbx,rax,[P1+0x38]; \ + adcx r15,rax; \ + adox rbp,rbx; \ + mulx rbx,rax,[P1+0x40]; \ + adc rbp,rax; \ + mov rax,r8; \ + and rax,0x1ff; \ + shrd r8,r9,0x9; \ + shrd r9,r10,0x9; \ + shrd r10,r11,0x9; \ + shrd r11,r12,0x9; \ + shrd r12,r13,0x9; \ + shrd r13,r14,0x9; \ + shrd r14,r15,0x9; \ + shrd r15,rbp,0x9; \ + shr rbp,0x9; \ + add rbp,rax; \ + stc; \ + adc r8,[rsp+504]; \ + adc r9,[rsp+512]; \ + adc r10,[rsp+520]; \ + adc r11,[rsp+528]; \ + adc r12,[rsp+536]; \ + adc r13,[rsp+544]; \ + adc r14,[rsp+552]; \ + adc r15,[rsp+560]; \ + adc rbp,0xfffffffffffffe00; \ + cmc; \ + sbb r8,0x0; \ + mov [P0],r8; \ + sbb r9,0x0; \ + mov [P0+0x8],r9; \ + sbb r10,0x0; \ + mov [P0+0x10],r10; \ + sbb r11,0x0; \ + mov [P0+0x18],r11; \ + sbb r12,0x0; \ + mov [P0+0x20],r12; \ + sbb r13,0x0; \ + mov [P0+0x28],r13; \ + sbb r14,0x0; \ + mov [P0+0x30],r14; \ + sbb r15,0x0; \ + mov [P0+0x38],r15; \ + sbb rbp,0x0; \ + and rbp,0x1ff; \ + mov [P0+0x40],rbp + +// Corresponds exactly to bignum_sqr_p521 + +#define sqr_p521(P0,P1) \ + xor ebp,ebp; \ + mov rdx,[P1]; \ + mulx rax,r9,[P1+0x8]; \ + mov [rsp+512],r9; \ + mulx rbx,r10,[P1+0x10]; \ + adcx r10,rax; \ + mov [rsp+520],r10; \ + mulx rax,r11,[P1+0x18]; \ + adcx r11,rbx; \ + mulx rbx,r12,[P1+0x20]; \ + adcx r12,rax; \ + mulx rax,r13,[P1+0x28]; \ + adcx r13,rbx; \ + mulx rbx,r14,[P1+0x30]; \ + adcx r14,rax; \ + mulx r8,r15,[P1+0x38]; \ + adcx r15,rbx; \ + adcx r8,rbp; \ + xor ebp,ebp; \ + mov rdx,[P1+0x8]; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mov [rsp+528],r11; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mov [rsp+536],r12; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,[P1+0x28]; \ + adcx r14,rax; \ + adox r15,rbx; \ + mulx rbx,rax,[P1+0x30]; \ + adcx r15,rax; \ + adox r8,rbx; \ + mulx r9,rax,[P1+0x38]; \ + adcx r8,rax; \ + adox r9,rbp; \ + mov rdx,[P1+0x20]; \ + mulx r10,rax,[P1+0x28]; \ + adcx r9,rax; \ + adox r10,rbp; \ + adcx r10,rbp; \ + xor ebp,ebp; \ + mov rdx,[P1+0x10]; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mov [rsp+544],r13; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r14,rax; \ + adox r15,rbx; \ + mov [rsp+552],r14; \ + mulx rbx,rax,[P1+0x28]; \ + adcx r15,rax; \ + adox r8,rbx; \ + mulx rbx,rax,[P1+0x30]; \ + adcx r8,rax; \ + adox r9,rbx; \ + mulx rbx,rax,[P1+0x38]; \ + adcx r9,rax; \ + adox r10,rbx; \ + mov rdx,[P1+0x30]; \ + mulx r11,rax,[P1+0x20]; \ + adcx r10,rax; \ + adox r11,rbp; \ + mulx r12,rax,[P1+0x28]; \ + adcx r11,rax; \ + adox r12,rbp; \ + adcx r12,rbp; \ + xor ebp,ebp; \ + mov rdx,[P1+0x18]; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r15,rax; \ + adox r8,rbx; \ + mov [rsp+560],r15; \ + mulx rbx,rax,[P1+0x28]; \ + adcx r8,rax; \ + adox r9,rbx; \ + mulx rbx,rax,[P1+0x30]; \ + adcx r9,rax; \ + adox r10,rbx; \ + mulx rbx,rax,[P1+0x38]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mov rdx,[P1+0x38]; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx r13,rax,[P1+0x28]; \ + adcx r12,rax; \ + adox r13,rbp; \ + mulx r14,rax,[P1+0x30]; \ + adcx r13,rax; \ + adox r14,rbp; \ + adcx r14,rbp; \ + xor ebp,ebp; \ + mov rdx,[P1]; \ + mulx rbx,rax,rdx; \ + mov [rsp+504],rax; \ + mov rax,[rsp+512]; \ + adcx rax,rax; \ + adox rax,rbx; \ + mov [rsp+512],rax; \ + mov rax,[rsp+520]; \ + mov rdx,[P1+0x8]; \ + mulx rbx,rdx,rdx; \ + adcx rax,rax; \ + adox rax,rdx; \ + mov [rsp+520],rax; \ + mov rax,[rsp+528]; \ + adcx rax,rax; \ + adox rax,rbx; \ + mov [rsp+528],rax; \ + mov rax,[rsp+536]; \ + mov rdx,[P1+0x10]; \ + mulx rbx,rdx,rdx; \ + adcx rax,rax; \ + adox rax,rdx; \ + mov [rsp+536],rax; \ + mov rax,[rsp+544]; \ + adcx rax,rax; \ + adox rax,rbx; \ + mov [rsp+544],rax; \ + mov rax,[rsp+552]; \ + mov rdx,[P1+0x18]; \ + mulx rbx,rdx,rdx; \ + adcx rax,rax; \ + adox rax,rdx; \ + mov [rsp+552],rax; \ + mov rax,[rsp+560]; \ + adcx rax,rax; \ + adox rax,rbx; \ + mov [rsp+560],rax; \ + mov rdx,[P1+0x20]; \ + mulx rbx,rdx,rdx; \ + adcx r8,r8; \ + adox r8,rdx; \ + adcx r9,r9; \ + adox r9,rbx; \ + mov rdx,[P1+0x28]; \ + mulx rbx,rdx,rdx; \ + adcx r10,r10; \ + adox r10,rdx; \ + adcx r11,r11; \ + adox r11,rbx; \ + mov rdx,[P1+0x30]; \ + mulx rbx,rdx,rdx; \ + adcx r12,r12; \ + adox r12,rdx; \ + adcx r13,r13; \ + adox r13,rbx; \ + mov rdx,[P1+0x38]; \ + mulx r15,rdx,rdx; \ + adcx r14,r14; \ + adox r14,rdx; \ + adcx r15,rbp; \ + adox r15,rbp; \ + mov rdx,[P1+0x40]; \ + mov rbp,rdx; \ + imul rbp,rbp; \ + add rdx,rdx; \ + mulx rbx,rax,[P1]; \ + adcx r8,rax; \ + adox r9,rbx; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r9,rax; \ + adox r10,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx rbx,rax,[P1+0x28]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,[P1+0x30]; \ + adcx r14,rax; \ + adox r15,rbx; \ + mulx rbx,rax,[P1+0x38]; \ + adcx r15,rax; \ + adox rbp,rbx; \ + adc rbp,0x0; \ + mov rax,r8; \ + and rax,0x1ff; \ + shrd r8,r9,0x9; \ + shrd r9,r10,0x9; \ + shrd r10,r11,0x9; \ + shrd r11,r12,0x9; \ + shrd r12,r13,0x9; \ + shrd r13,r14,0x9; \ + shrd r14,r15,0x9; \ + shrd r15,rbp,0x9; \ + shr rbp,0x9; \ + add rbp,rax; \ + stc; \ + adc r8,[rsp+504]; \ + adc r9,[rsp+512]; \ + adc r10,[rsp+520]; \ + adc r11,[rsp+528]; \ + adc r12,[rsp+536]; \ + adc r13,[rsp+544]; \ + adc r14,[rsp+552]; \ + adc r15,[rsp+560]; \ + adc rbp,0xfffffffffffffe00; \ + cmc; \ + sbb r8,0x0; \ + mov [P0],r8; \ + sbb r9,0x0; \ + mov [P0+0x8],r9; \ + sbb r10,0x0; \ + mov [P0+0x10],r10; \ + sbb r11,0x0; \ + mov [P0+0x18],r11; \ + sbb r12,0x0; \ + mov [P0+0x20],r12; \ + sbb r13,0x0; \ + mov [P0+0x28],r13; \ + sbb r14,0x0; \ + mov [P0+0x30],r14; \ + sbb r15,0x0; \ + mov [P0+0x38],r15; \ + sbb rbp,0x0; \ + and rbp,0x1ff; \ + mov [P0+0x40],rbp + +// Corresponds exactly to bignum_sub_p521 + +#define sub_p521(P0,P1,P2) \ + mov rax,[P1]; \ + sub rax,[P2]; \ + mov rdx,[P1+0x8]; \ + sbb rdx,[P2+0x8]; \ + mov r8,[P1+0x10]; \ + sbb r8,[P2+0x10]; \ + mov r9,[P1+0x18]; \ + sbb r9,[P2+0x18]; \ + mov r10,[P1+0x20]; \ + sbb r10,[P2+0x20]; \ + mov r11,[P1+0x28]; \ + sbb r11,[P2+0x28]; \ + mov r12,[P1+0x30]; \ + sbb r12,[P2+0x30]; \ + mov r13,[P1+0x38]; \ + sbb r13,[P2+0x38]; \ + mov r14,[P1+0x40]; \ + sbb r14,[P2+0x40]; \ + sbb rax,0x0; \ + mov [P0],rax; \ + sbb rdx,0x0; \ + mov [P0+0x8],rdx; \ + sbb r8,0x0; \ + mov [P0+0x10],r8; \ + sbb r9,0x0; \ + mov [P0+0x18],r9; \ + sbb r10,0x0; \ + mov [P0+0x20],r10; \ + sbb r11,0x0; \ + mov [P0+0x28],r11; \ + sbb r12,0x0; \ + mov [P0+0x30],r12; \ + sbb r13,0x0; \ + mov [P0+0x38],r13; \ + sbb r14,0x0; \ + and r14,0x1ff; \ + mov [P0+0x40],r14 + +S2N_BN_SYMBOL(p521_jadd): + +#if WINDOWS_ABI + push rdi + push rsi + mov rdi, rcx + mov rsi, rdx + mov rdx, r8 +#endif + +// Save registers and make room on stack for temporary variables + + push rbx + push rbp + push r12 + push r13 + push r14 + push r15 + + sub rsp, NSPACE + +// Move the input arguments to stable places (two are already there) + + mov input_y, rdx + +// Main code, just a sequence of basic field operations + + sqr_p521(z1sq,z_1) + sqr_p521(z2sq,z_2) + + mul_p521(y1a,z_2,y_1) + mul_p521(y2a,z_1,y_2) + + mul_p521(x2a,z1sq,x_2) + mul_p521(x1a,z2sq,x_1) + mul_p521(y2a,z1sq,y2a) + mul_p521(y1a,z2sq,y1a) + + sub_p521(xd,x2a,x1a) + sub_p521(yd,y2a,y1a) + + sqr_p521(zz,xd) + sqr_p521(ww,yd) + + mul_p521(zzx1,zz,x1a) + mul_p521(zzx2,zz,x2a) + + sub_p521(x_3,ww,zzx1) + sub_p521(t1,zzx2,zzx1) + + mul_p521(xd,xd,z_1) + + sub_p521(x_3,x_3,zzx2) + + sub_p521(t2,zzx1,x_3) + + mul_p521(t1,t1,y1a) + mul_p521(z_3,xd,z_2) + mul_p521(t2,yd,t2) + + sub_p521(y_3,t2,t1) + +// Restore stack and registers + + add rsp, NSPACE + pop r15 + pop r14 + pop r13 + pop r12 + pop rbp + pop rbx + +#if WINDOWS_ABI + pop rsi + pop rdi +#endif + ret + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack, "", %progbits +#endif diff --git a/x86/p521/p521_jdouble.S b/x86/p521/p521_jdouble.S new file mode 100644 index 0000000000..93f46c348e --- /dev/null +++ b/x86/p521/p521_jdouble.S @@ -0,0 +1,1386 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +// ---------------------------------------------------------------------------- +// Point doubling on NIST curve P-521 in Jacobian coordinates +// +// extern void p521_jdouble +// (uint64_t p3[static 27],uint64_t p1[static 27]); +// +// Does p3 := 2 * p1 where all points are regarded as Jacobian triples. +// A Jacobian triple (x,y,z) represents affine point (x/z^2,y/z^3). +// It is assumed that all coordinates of the input point are fully +// reduced mod p_521 and that the z coordinate is not zero. +// +// Standard x86-64 ABI: RDI = p3, RSI = p1 +// Microsoft x64 ABI: RCX = p3, RDX = p1 +// ---------------------------------------------------------------------------- +#include "_internal_s2n_bignum.h" + + .intel_syntax noprefix + S2N_BN_SYM_VISIBILITY_DIRECTIVE(p521_jdouble) + S2N_BN_SYM_PRIVACY_DIRECTIVE(p521_jdouble) + .text + +// Size of individual field elements + +#define NUMSIZE 72 + +// Stable homes for input arguments during main code sequence +// This is actually where they come in anyway and they stay there. + +#define input_z rdi +#define input_x rsi + +// Pointer-offset pairs for inputs and outputs + +#define x_1 input_x+0 +#define y_1 input_x+NUMSIZE +#define z_1 input_x+(2*NUMSIZE) + +#define x_3 input_z+0 +#define y_3 input_z+NUMSIZE +#define z_3 input_z+(2*NUMSIZE) + +// Pointer-offset pairs for temporaries, with some aliasing +// The tmp field is internal storage for field mul and sqr. +// NSPACE is the total stack needed for these temporaries + +#define z2 rsp+(NUMSIZE*0) +#define y2 rsp+(NUMSIZE*1) +#define x2p rsp+(NUMSIZE*2) +#define xy2 rsp+(NUMSIZE*3) + +#define y4 rsp+(NUMSIZE*4) +#define t2 rsp+(NUMSIZE*4) + +#define dx2 rsp+(NUMSIZE*5) +#define t1 rsp+(NUMSIZE*5) + +#define d rsp+(NUMSIZE*6) +#define x4p rsp+(NUMSIZE*6) + +#define tmp rsp+(NUMSIZE*7) + +#define NSPACE (NUMSIZE*7+64) + +// Corresponds exactly to bignum_mul_p521 + +#define mul_p521(P0,P1,P2) \ + xor ecx,ecx; \ + mov rdx,[P2]; \ + mulx r9,r8,[P1]; \ + mov [rsp+504],r8; \ + mulx r10,rbx,[P1+0x8]; \ + adc r9,rbx; \ + mulx r11,rbx,[P1+0x10]; \ + adc r10,rbx; \ + mulx r12,rbx,[P1+0x18]; \ + adc r11,rbx; \ + mulx r13,rbx,[P1+0x20]; \ + adc r12,rbx; \ + mulx r14,rbx,[P1+0x28]; \ + adc r13,rbx; \ + mulx r15,rbx,[P1+0x30]; \ + adc r14,rbx; \ + mulx r8,rbx,[P1+0x38]; \ + adc r15,rbx; \ + adc r8,rcx; \ + mov rdx,[P2+0x8]; \ + xor ecx,ecx; \ + mulx rbx,rax,[P1]; \ + adcx r9,rax; \ + adox r10,rbx; \ + mov [rsp+512],r9; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,[P1+0x28]; \ + adcx r14,rax; \ + adox r15,rbx; \ + mulx rbx,rax,[P1+0x30]; \ + adcx r15,rax; \ + adox r8,rbx; \ + mulx r9,rax,[P1+0x38]; \ + adcx r8,rax; \ + adox r9,rcx; \ + adc r9,rcx; \ + mov rdx,[P2+0x10]; \ + xor ecx,ecx; \ + mulx rbx,rax,[P1]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mov [rsp+520],r10; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r14,rax; \ + adox r15,rbx; \ + mulx rbx,rax,[P1+0x28]; \ + adcx r15,rax; \ + adox r8,rbx; \ + mulx rbx,rax,[P1+0x30]; \ + adcx r8,rax; \ + adox r9,rbx; \ + mulx r10,rax,[P1+0x38]; \ + adcx r9,rax; \ + adox r10,rcx; \ + adc r10,rcx; \ + mov rdx,[P2+0x18]; \ + xor ecx,ecx; \ + mulx rbx,rax,[P1]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mov [rsp+528],r11; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r14,rax; \ + adox r15,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r15,rax; \ + adox r8,rbx; \ + mulx rbx,rax,[P1+0x28]; \ + adcx r8,rax; \ + adox r9,rbx; \ + mulx rbx,rax,[P1+0x30]; \ + adcx r9,rax; \ + adox r10,rbx; \ + mulx r11,rax,[P1+0x38]; \ + adcx r10,rax; \ + adox r11,rcx; \ + adc r11,rcx; \ + mov rdx,[P2+0x20]; \ + xor ecx,ecx; \ + mulx rbx,rax,[P1]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mov [rsp+536],r12; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r14,rax; \ + adox r15,rbx; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r15,rax; \ + adox r8,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r8,rax; \ + adox r9,rbx; \ + mulx rbx,rax,[P1+0x28]; \ + adcx r9,rax; \ + adox r10,rbx; \ + mulx rbx,rax,[P1+0x30]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx r12,rax,[P1+0x38]; \ + adcx r11,rax; \ + adox r12,rcx; \ + adc r12,rcx; \ + mov rdx,[P2+0x28]; \ + xor ecx,ecx; \ + mulx rbx,rax,[P1]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mov [rsp+544],r13; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r14,rax; \ + adox r15,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r15,rax; \ + adox r8,rbx; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r8,rax; \ + adox r9,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r9,rax; \ + adox r10,rbx; \ + mulx rbx,rax,[P1+0x28]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P1+0x30]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx r13,rax,[P1+0x38]; \ + adcx r12,rax; \ + adox r13,rcx; \ + adc r13,rcx; \ + mov rdx,[P2+0x30]; \ + xor ecx,ecx; \ + mulx rbx,rax,[P1]; \ + adcx r14,rax; \ + adox r15,rbx; \ + mov [rsp+552],r14; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r15,rax; \ + adox r8,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r8,rax; \ + adox r9,rbx; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r9,rax; \ + adox r10,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P1+0x28]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,[P1+0x30]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx r14,rax,[P1+0x38]; \ + adcx r13,rax; \ + adox r14,rcx; \ + adc r14,rcx; \ + mov rdx,[P2+0x38]; \ + xor ecx,ecx; \ + mulx rbx,rax,[P1]; \ + adcx r15,rax; \ + adox r8,rbx; \ + mov [rsp+560],r15; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r8,rax; \ + adox r9,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r9,rax; \ + adox r10,rbx; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,[P1+0x28]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx rbx,rax,[P1+0x30]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx r15,rax,[P1+0x38]; \ + adcx r14,rax; \ + adox r15,rcx; \ + adc r15,rcx; \ + mov rdx,[P1+0x40]; \ + xor ecx,ecx; \ + mulx rbx,rax,[P2]; \ + adcx r8,rax; \ + adox r9,rbx; \ + mulx rbx,rax,[P2+0x8]; \ + adcx r9,rax; \ + adox r10,rbx; \ + mulx rbx,rax,[P2+0x10]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P2+0x18]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,[P2+0x20]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx rbx,rax,[P2+0x28]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,[P2+0x30]; \ + adcx r14,rax; \ + adox r15,rbx; \ + mulx rbx,rax,[P2+0x38]; \ + adcx r15,rax; \ + adox rbx,rcx; \ + adc rcx,rbx; \ + mov rdx,[P2+0x40]; \ + xor eax,eax; \ + mulx rbx,rax,[P1]; \ + adcx r8,rax; \ + adox r9,rbx; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r9,rax; \ + adox r10,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx rbx,rax,[P1+0x28]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,[P1+0x30]; \ + adcx r14,rax; \ + adox r15,rbx; \ + mulx rbx,rax,[P1+0x38]; \ + adcx r15,rax; \ + adox rcx,rbx; \ + mulx rbx,rax,[P1+0x40]; \ + adc rcx,rax; \ + mov rax,r8; \ + and rax,0x1ff; \ + shrd r8,r9,0x9; \ + shrd r9,r10,0x9; \ + shrd r10,r11,0x9; \ + shrd r11,r12,0x9; \ + shrd r12,r13,0x9; \ + shrd r13,r14,0x9; \ + shrd r14,r15,0x9; \ + shrd r15,rcx,0x9; \ + shr rcx,0x9; \ + add rcx,rax; \ + stc; \ + adc r8,[rsp+504]; \ + adc r9,[rsp+512]; \ + adc r10,[rsp+520]; \ + adc r11,[rsp+528]; \ + adc r12,[rsp+536]; \ + adc r13,[rsp+544]; \ + adc r14,[rsp+552]; \ + adc r15,[rsp+560]; \ + adc rcx,0xfffffffffffffe00; \ + cmc; \ + sbb r8,0x0; \ + mov [P0],r8; \ + sbb r9,0x0; \ + mov [P0+0x8],r9; \ + sbb r10,0x0; \ + mov [P0+0x10],r10; \ + sbb r11,0x0; \ + mov [P0+0x18],r11; \ + sbb r12,0x0; \ + mov [P0+0x20],r12; \ + sbb r13,0x0; \ + mov [P0+0x28],r13; \ + sbb r14,0x0; \ + mov [P0+0x30],r14; \ + sbb r15,0x0; \ + mov [P0+0x38],r15; \ + sbb rcx,0x0; \ + and rcx,0x1ff; \ + mov [P0+0x40],rcx + +// Corresponds exactly to bignum_sqr_p521 + +#define sqr_p521(P0,P1) \ + xor ecx,ecx; \ + mov rdx,[P1]; \ + mulx rax,r9,[P1+0x8]; \ + mov [rsp+512],r9; \ + mulx rbx,r10,[P1+0x10]; \ + adcx r10,rax; \ + mov [rsp+520],r10; \ + mulx rax,r11,[P1+0x18]; \ + adcx r11,rbx; \ + mulx rbx,r12,[P1+0x20]; \ + adcx r12,rax; \ + mulx rax,r13,[P1+0x28]; \ + adcx r13,rbx; \ + mulx rbx,r14,[P1+0x30]; \ + adcx r14,rax; \ + mulx r8,r15,[P1+0x38]; \ + adcx r15,rbx; \ + adcx r8,rcx; \ + xor ecx,ecx; \ + mov rdx,[P1+0x8]; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mov [rsp+528],r11; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mov [rsp+536],r12; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,[P1+0x28]; \ + adcx r14,rax; \ + adox r15,rbx; \ + mulx rbx,rax,[P1+0x30]; \ + adcx r15,rax; \ + adox r8,rbx; \ + mulx r9,rax,[P1+0x38]; \ + adcx r8,rax; \ + adox r9,rcx; \ + mov rdx,[P1+0x20]; \ + mulx r10,rax,[P1+0x28]; \ + adcx r9,rax; \ + adox r10,rcx; \ + adcx r10,rcx; \ + xor ecx,ecx; \ + mov rdx,[P1+0x10]; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mov [rsp+544],r13; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r14,rax; \ + adox r15,rbx; \ + mov [rsp+552],r14; \ + mulx rbx,rax,[P1+0x28]; \ + adcx r15,rax; \ + adox r8,rbx; \ + mulx rbx,rax,[P1+0x30]; \ + adcx r8,rax; \ + adox r9,rbx; \ + mulx rbx,rax,[P1+0x38]; \ + adcx r9,rax; \ + adox r10,rbx; \ + mov rdx,[P1+0x30]; \ + mulx r11,rax,[P1+0x20]; \ + adcx r10,rax; \ + adox r11,rcx; \ + mulx r12,rax,[P1+0x28]; \ + adcx r11,rax; \ + adox r12,rcx; \ + adcx r12,rcx; \ + xor ecx,ecx; \ + mov rdx,[P1+0x18]; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r15,rax; \ + adox r8,rbx; \ + mov [rsp+560],r15; \ + mulx rbx,rax,[P1+0x28]; \ + adcx r8,rax; \ + adox r9,rbx; \ + mulx rbx,rax,[P1+0x30]; \ + adcx r9,rax; \ + adox r10,rbx; \ + mulx rbx,rax,[P1+0x38]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mov rdx,[P1+0x38]; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx r13,rax,[P1+0x28]; \ + adcx r12,rax; \ + adox r13,rcx; \ + mulx r14,rax,[P1+0x30]; \ + adcx r13,rax; \ + adox r14,rcx; \ + adcx r14,rcx; \ + xor ecx,ecx; \ + mov rdx,[P1]; \ + mulx rbx,rax,rdx; \ + mov [rsp+504],rax; \ + mov rax,[rsp+512]; \ + adcx rax,rax; \ + adox rax,rbx; \ + mov [rsp+512],rax; \ + mov rax,[rsp+520]; \ + mov rdx,[P1+0x8]; \ + mulx rbx,rdx,rdx; \ + adcx rax,rax; \ + adox rax,rdx; \ + mov [rsp+520],rax; \ + mov rax,[rsp+528]; \ + adcx rax,rax; \ + adox rax,rbx; \ + mov [rsp+528],rax; \ + mov rax,[rsp+536]; \ + mov rdx,[P1+0x10]; \ + mulx rbx,rdx,rdx; \ + adcx rax,rax; \ + adox rax,rdx; \ + mov [rsp+536],rax; \ + mov rax,[rsp+544]; \ + adcx rax,rax; \ + adox rax,rbx; \ + mov [rsp+544],rax; \ + mov rax,[rsp+552]; \ + mov rdx,[P1+0x18]; \ + mulx rbx,rdx,rdx; \ + adcx rax,rax; \ + adox rax,rdx; \ + mov [rsp+552],rax; \ + mov rax,[rsp+560]; \ + adcx rax,rax; \ + adox rax,rbx; \ + mov [rsp+560],rax; \ + mov rdx,[P1+0x20]; \ + mulx rbx,rdx,rdx; \ + adcx r8,r8; \ + adox r8,rdx; \ + adcx r9,r9; \ + adox r9,rbx; \ + mov rdx,[P1+0x28]; \ + mulx rbx,rdx,rdx; \ + adcx r10,r10; \ + adox r10,rdx; \ + adcx r11,r11; \ + adox r11,rbx; \ + mov rdx,[P1+0x30]; \ + mulx rbx,rdx,rdx; \ + adcx r12,r12; \ + adox r12,rdx; \ + adcx r13,r13; \ + adox r13,rbx; \ + mov rdx,[P1+0x38]; \ + mulx r15,rdx,rdx; \ + adcx r14,r14; \ + adox r14,rdx; \ + adcx r15,rcx; \ + adox r15,rcx; \ + mov rdx,[P1+0x40]; \ + mov rcx,rdx; \ + imul rcx,rcx; \ + add rdx,rdx; \ + mulx rbx,rax,[P1]; \ + adcx r8,rax; \ + adox r9,rbx; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r9,rax; \ + adox r10,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx rbx,rax,[P1+0x28]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,[P1+0x30]; \ + adcx r14,rax; \ + adox r15,rbx; \ + mulx rbx,rax,[P1+0x38]; \ + adcx r15,rax; \ + adox rcx,rbx; \ + adc rcx,0x0; \ + mov rax,r8; \ + and rax,0x1ff; \ + shrd r8,r9,0x9; \ + shrd r9,r10,0x9; \ + shrd r10,r11,0x9; \ + shrd r11,r12,0x9; \ + shrd r12,r13,0x9; \ + shrd r13,r14,0x9; \ + shrd r14,r15,0x9; \ + shrd r15,rcx,0x9; \ + shr rcx,0x9; \ + add rcx,rax; \ + stc; \ + adc r8,[rsp+504]; \ + adc r9,[rsp+512]; \ + adc r10,[rsp+520]; \ + adc r11,[rsp+528]; \ + adc r12,[rsp+536]; \ + adc r13,[rsp+544]; \ + adc r14,[rsp+552]; \ + adc r15,[rsp+560]; \ + adc rcx,0xfffffffffffffe00; \ + cmc; \ + sbb r8,0x0; \ + mov [P0],r8; \ + sbb r9,0x0; \ + mov [P0+0x8],r9; \ + sbb r10,0x0; \ + mov [P0+0x10],r10; \ + sbb r11,0x0; \ + mov [P0+0x18],r11; \ + sbb r12,0x0; \ + mov [P0+0x20],r12; \ + sbb r13,0x0; \ + mov [P0+0x28],r13; \ + sbb r14,0x0; \ + mov [P0+0x30],r14; \ + sbb r15,0x0; \ + mov [P0+0x38],r15; \ + sbb rcx,0x0; \ + and rcx,0x1ff; \ + mov [P0+0x40],rcx + +// Corresponds exactly to bignum_add_p521 + +#define add_p521(P0,P1,P2) \ + stc; \ + mov rax,[P1]; \ + adc rax,[P2]; \ + mov rbx,[P1+0x8]; \ + adc rbx,[P2+0x8]; \ + mov r8,[P1+0x10]; \ + adc r8,[P2+0x10]; \ + mov r9,[P1+0x18]; \ + adc r9,[P2+0x18]; \ + mov r10,[P1+0x20]; \ + adc r10,[P2+0x20]; \ + mov r11,[P1+0x28]; \ + adc r11,[P2+0x28]; \ + mov r12,[P1+0x30]; \ + adc r12,[P2+0x30]; \ + mov r13,[P1+0x38]; \ + adc r13,[P2+0x38]; \ + mov r14,[P1+0x40]; \ + adc r14,[P2+0x40]; \ + mov rdx,0x200; \ + and rdx,r14; \ + cmp rdx,0x200; \ + sbb rax,0x0; \ + mov [P0],rax; \ + sbb rbx,0x0; \ + mov [P0+0x8],rbx; \ + sbb r8,0x0; \ + mov [P0+0x10],r8; \ + sbb r9,0x0; \ + mov [P0+0x18],r9; \ + sbb r10,0x0; \ + mov [P0+0x20],r10; \ + sbb r11,0x0; \ + mov [P0+0x28],r11; \ + sbb r12,0x0; \ + mov [P0+0x30],r12; \ + sbb r13,0x0; \ + mov [P0+0x38],r13; \ + sbb r14,rdx; \ + mov [P0+0x40],r14 + +// Corresponds exactly to bignum_sub_p521 + +#define sub_p521(P0,P1,P2) \ + mov rax,[P1]; \ + sub rax,[P2]; \ + mov rdx,[P1+0x8]; \ + sbb rdx,[P2+0x8]; \ + mov r8,[P1+0x10]; \ + sbb r8,[P2+0x10]; \ + mov r9,[P1+0x18]; \ + sbb r9,[P2+0x18]; \ + mov r10,[P1+0x20]; \ + sbb r10,[P2+0x20]; \ + mov r11,[P1+0x28]; \ + sbb r11,[P2+0x28]; \ + mov r12,[P1+0x30]; \ + sbb r12,[P2+0x30]; \ + mov r13,[P1+0x38]; \ + sbb r13,[P2+0x38]; \ + mov r14,[P1+0x40]; \ + sbb r14,[P2+0x40]; \ + sbb rax,0x0; \ + mov [P0],rax; \ + sbb rdx,0x0; \ + mov [P0+0x8],rdx; \ + sbb r8,0x0; \ + mov [P0+0x10],r8; \ + sbb r9,0x0; \ + mov [P0+0x18],r9; \ + sbb r10,0x0; \ + mov [P0+0x20],r10; \ + sbb r11,0x0; \ + mov [P0+0x28],r11; \ + sbb r12,0x0; \ + mov [P0+0x30],r12; \ + sbb r13,0x0; \ + mov [P0+0x38],r13; \ + sbb r14,0x0; \ + and r14,0x1ff; \ + mov [P0+0x40],r14 + +// Weak multiplication not fully reducing + +#define weakmul_p521(P0,P1,P2) \ + xor ecx,ecx; \ + mov rdx,[P2]; \ + mulx r9,r8,[P1]; \ + mov [rsp+504],r8; \ + mulx r10,rbx,[P1+0x8]; \ + adc r9,rbx; \ + mulx r11,rbx,[P1+0x10]; \ + adc r10,rbx; \ + mulx r12,rbx,[P1+0x18]; \ + adc r11,rbx; \ + mulx r13,rbx,[P1+0x20]; \ + adc r12,rbx; \ + mulx r14,rbx,[P1+0x28]; \ + adc r13,rbx; \ + mulx r15,rbx,[P1+0x30]; \ + adc r14,rbx; \ + mulx r8,rbx,[P1+0x38]; \ + adc r15,rbx; \ + adc r8,rcx; \ + mov rdx,[P2+0x8]; \ + xor ecx,ecx; \ + mulx rbx,rax,[P1]; \ + adcx r9,rax; \ + adox r10,rbx; \ + mov [rsp+512],r9; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,[P1+0x28]; \ + adcx r14,rax; \ + adox r15,rbx; \ + mulx rbx,rax,[P1+0x30]; \ + adcx r15,rax; \ + adox r8,rbx; \ + mulx r9,rax,[P1+0x38]; \ + adcx r8,rax; \ + adox r9,rcx; \ + adc r9,rcx; \ + mov rdx,[P2+0x10]; \ + xor ecx,ecx; \ + mulx rbx,rax,[P1]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mov [rsp+520],r10; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r14,rax; \ + adox r15,rbx; \ + mulx rbx,rax,[P1+0x28]; \ + adcx r15,rax; \ + adox r8,rbx; \ + mulx rbx,rax,[P1+0x30]; \ + adcx r8,rax; \ + adox r9,rbx; \ + mulx r10,rax,[P1+0x38]; \ + adcx r9,rax; \ + adox r10,rcx; \ + adc r10,rcx; \ + mov rdx,[P2+0x18]; \ + xor ecx,ecx; \ + mulx rbx,rax,[P1]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mov [rsp+528],r11; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r14,rax; \ + adox r15,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r15,rax; \ + adox r8,rbx; \ + mulx rbx,rax,[P1+0x28]; \ + adcx r8,rax; \ + adox r9,rbx; \ + mulx rbx,rax,[P1+0x30]; \ + adcx r9,rax; \ + adox r10,rbx; \ + mulx r11,rax,[P1+0x38]; \ + adcx r10,rax; \ + adox r11,rcx; \ + adc r11,rcx; \ + mov rdx,[P2+0x20]; \ + xor ecx,ecx; \ + mulx rbx,rax,[P1]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mov [rsp+536],r12; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r14,rax; \ + adox r15,rbx; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r15,rax; \ + adox r8,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r8,rax; \ + adox r9,rbx; \ + mulx rbx,rax,[P1+0x28]; \ + adcx r9,rax; \ + adox r10,rbx; \ + mulx rbx,rax,[P1+0x30]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx r12,rax,[P1+0x38]; \ + adcx r11,rax; \ + adox r12,rcx; \ + adc r12,rcx; \ + mov rdx,[P2+0x28]; \ + xor ecx,ecx; \ + mulx rbx,rax,[P1]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mov [rsp+544],r13; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r14,rax; \ + adox r15,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r15,rax; \ + adox r8,rbx; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r8,rax; \ + adox r9,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r9,rax; \ + adox r10,rbx; \ + mulx rbx,rax,[P1+0x28]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P1+0x30]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx r13,rax,[P1+0x38]; \ + adcx r12,rax; \ + adox r13,rcx; \ + adc r13,rcx; \ + mov rdx,[P2+0x30]; \ + xor ecx,ecx; \ + mulx rbx,rax,[P1]; \ + adcx r14,rax; \ + adox r15,rbx; \ + mov [rsp+552],r14; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r15,rax; \ + adox r8,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r8,rax; \ + adox r9,rbx; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r9,rax; \ + adox r10,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P1+0x28]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,[P1+0x30]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx r14,rax,[P1+0x38]; \ + adcx r13,rax; \ + adox r14,rcx; \ + adc r14,rcx; \ + mov rdx,[P2+0x38]; \ + xor ecx,ecx; \ + mulx rbx,rax,[P1]; \ + adcx r15,rax; \ + adox r8,rbx; \ + mov [rsp+560],r15; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r8,rax; \ + adox r9,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r9,rax; \ + adox r10,rbx; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,[P1+0x28]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx rbx,rax,[P1+0x30]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx r15,rax,[P1+0x38]; \ + adcx r14,rax; \ + adox r15,rcx; \ + adc r15,rcx; \ + mov rdx,[P1+0x40]; \ + xor ecx,ecx; \ + mulx rbx,rax,[P2]; \ + adcx r8,rax; \ + adox r9,rbx; \ + mulx rbx,rax,[P2+0x8]; \ + adcx r9,rax; \ + adox r10,rbx; \ + mulx rbx,rax,[P2+0x10]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P2+0x18]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,[P2+0x20]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx rbx,rax,[P2+0x28]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,[P2+0x30]; \ + adcx r14,rax; \ + adox r15,rbx; \ + mulx rbx,rax,[P2+0x38]; \ + adcx r15,rax; \ + adox rbx,rcx; \ + adc rcx,rbx; \ + mov rdx,[P2+0x40]; \ + xor eax,eax; \ + mulx rbx,rax,[P1]; \ + adcx r8,rax; \ + adox r9,rbx; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r9,rax; \ + adox r10,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx rbx,rax,[P1+0x28]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,[P1+0x30]; \ + adcx r14,rax; \ + adox r15,rbx; \ + mulx rbx,rax,[P1+0x38]; \ + adcx r15,rax; \ + adox rcx,rbx; \ + mulx rbx,rax,[P1+0x40]; \ + adc rcx,rax; \ + mov rax,r8; \ + and rax,0x1ff; \ + shrd r8,r9,0x9; \ + shrd r9,r10,0x9; \ + shrd r10,r11,0x9; \ + shrd r11,r12,0x9; \ + shrd r12,r13,0x9; \ + shrd r13,r14,0x9; \ + shrd r14,r15,0x9; \ + shrd r15,rcx,0x9; \ + shr rcx,0x9; \ + add rcx,rax; \ + add r8,[rsp+504]; \ + mov [P0],r8; \ + adc r9,[rsp+512]; \ + mov [P0+0x8],r9; \ + adc r10,[rsp+520]; \ + mov [P0+0x10],r10; \ + adc r11,[rsp+528]; \ + mov [P0+0x18],r11; \ + adc r12,[rsp+536]; \ + mov [P0+0x20],r12; \ + adc r13,[rsp+544]; \ + mov [P0+0x28],r13; \ + adc r14,[rsp+552]; \ + mov [P0+0x30],r14; \ + adc r15,[rsp+560]; \ + mov [P0+0x38],r15; \ + adc rcx,0; \ + mov [P0+0x40],rcx + +// P0 = C * P1 - D * P2 == C * P1 + D * (p_521 - P2) + +#define cmsub_p521(P0,C,P1,D,P2) \ + mov rdx, D; \ + mov rbx, [P2+64]; \ + xor rbx, 0x1FF; \ + mov rax, [P2]; \ + not rax; \ + mulx r9, r8, rax; \ + mov rax, [P2+8]; \ + not rax; \ + mulx r10, rax, rax; \ + add r9, rax; \ + mov rax, [P2+16]; \ + not rax; \ + mulx r11, rax, rax; \ + adc r10, rax; \ + mov rax, [P2+24]; \ + not rax; \ + mulx r12, rax, rax; \ + adc r11, rax; \ + mov rax, [P2+32]; \ + not rax; \ + mulx r13, rax, rax; \ + adc r12, rax; \ + mov rax, [P2+40]; \ + not rax; \ + mulx r14, rax, rax; \ + adc r13, rax; \ + mov rax, [P2+48]; \ + not rax; \ + mulx r15, rax, rax; \ + adc r14, rax; \ + mov rax, [P2+56]; \ + not rax; \ + mulx rcx, rax, rax; \ + adc r15, rax; \ + mulx rax, rbx, rbx; \ + adc rbx, rcx; \ + xor eax, eax; \ + mov rdx, C; \ + mulx rcx, rax, [P1]; \ + adcx r8, rax; \ + adox r9, rcx; \ + mulx rcx, rax, [P1+8]; \ + adcx r9, rax; \ + adox r10, rcx; \ + mulx rcx, rax, [P1+16]; \ + adcx r10, rax; \ + adox r11, rcx; \ + mulx rcx, rax, [P1+24]; \ + adcx r11, rax; \ + adox r12, rcx; \ + mulx rcx, rax, [P1+32]; \ + adcx r12, rax; \ + adox r13, rcx; \ + mulx rcx, rax, [P1+40]; \ + adcx r13, rax; \ + adox r14, rcx; \ + mulx rcx, rax, [P1+48]; \ + adcx r14, rax; \ + adox r15, rcx; \ + mulx rcx, rax, [P1+56]; \ + adcx r15, rax; \ + adox rbx, rcx; \ + mulx rcx, rax, [P1+64]; \ + adcx rbx, rax; \ + mov rax, r9; \ + and rax, r10; \ + and rax, r11; \ + and rax, r12; \ + and rax, r13; \ + and rax, r14; \ + and rax, r15; \ + mov rdx, rbx; \ + shr rdx, 9; \ + or rbx, ~0x1FF; \ + lea rcx, [rdx+1]; \ + add rcx, r8; \ + mov ecx, 0; \ + adc rax, rcx; \ + mov rax, rbx; \ + adc rax, rcx; \ + adc r8, rdx; \ + mov [P0], r8; \ + adc r9, rcx; \ + mov [P0+8], r9; \ + adc r10, rcx; \ + mov [P0+16], r10; \ + adc r11, rcx; \ + mov [P0+24], r11; \ + adc r12, rcx; \ + mov [P0+32], r12; \ + adc r13, rcx; \ + mov [P0+40], r13; \ + adc r14, rcx; \ + mov [P0+48], r14; \ + adc r15, rcx; \ + mov [P0+56], r15; \ + adc rbx, rcx; \ + and rbx, 0x1FF; \ + mov [P0+64], rbx + +// P0 = 3 * P1 - 8 * P2 == 3 * P1 + 8 * (p_521 - P2) + +#define cmsub38_p521(P0,P1,P2) \ + mov rbx, [P2+64]; \ + xor rbx, 0x1FF; \ + mov r15, [P2+56]; \ + not r15; \ + shld rbx, r15, 3; \ + mov r14, [P2+48]; \ + not r14; \ + shld r15, r14, 3; \ + mov r13, [P2+40]; \ + not r13; \ + shld r14, r13, 3; \ + mov r12, [P2+32]; \ + not r12; \ + shld r13, r12, 3; \ + mov r11, [P2+24]; \ + not r11; \ + shld r12, r11, 3; \ + mov r10, [P2+16]; \ + not r10; \ + shld r11, r10, 3; \ + mov r9, [P2+8]; \ + not r9; \ + shld r10, r9, 3; \ + mov r8, [P2]; \ + not r8; \ + shld r9, r8, 3; \ + shl r8, 3; \ + mov rdx, 3; \ + xor eax, eax; \ + mulx rcx, rax, [P1]; \ + adcx r8, rax; \ + adox r9, rcx; \ + mulx rcx, rax, [P1+8]; \ + adcx r9, rax; \ + adox r10, rcx; \ + mulx rcx, rax, [P1+16]; \ + adcx r10, rax; \ + adox r11, rcx; \ + mulx rcx, rax, [P1+24]; \ + adcx r11, rax; \ + adox r12, rcx; \ + mulx rcx, rax, [P1+32]; \ + adcx r12, rax; \ + adox r13, rcx; \ + mulx rcx, rax, [P1+40]; \ + adcx r13, rax; \ + adox r14, rcx; \ + mulx rcx, rax, [P1+48]; \ + adcx r14, rax; \ + adox r15, rcx; \ + mulx rcx, rax, [P1+56]; \ + adcx r15, rax; \ + adox rbx, rcx; \ + mulx rcx, rax, [P1+64]; \ + adcx rbx, rax; \ + mov rax, r9; \ + and rax, r10; \ + and rax, r11; \ + and rax, r12; \ + and rax, r13; \ + and rax, r14; \ + and rax, r15; \ + mov rdx, rbx; \ + shr rdx, 9; \ + or rbx, ~0x1FF; \ + lea rcx, [rdx+1]; \ + add rcx, r8; \ + mov ecx, 0; \ + adc rax, rcx; \ + mov rax, rbx; \ + adc rax, rcx; \ + adc r8, rdx; \ + mov [P0], r8; \ + adc r9, rcx; \ + mov [P0+8], r9; \ + adc r10, rcx; \ + mov [P0+16], r10; \ + adc r11, rcx; \ + mov [P0+24], r11; \ + adc r12, rcx; \ + mov [P0+32], r12; \ + adc r13, rcx; \ + mov [P0+40], r13; \ + adc r14, rcx; \ + mov [P0+48], r14; \ + adc r15, rcx; \ + mov [P0+56], r15; \ + adc rbx, rcx; \ + and rbx, 0x1FF; \ + mov [P0+64], rbx + +// P0 = 4 * P1 - P2 = 4 * P1 + (p_521 - P2) + +#define cmsub41_p521(P0,P1,P2) \ + mov rbx, [P1+64]; \ + mov r15, [P1+56]; \ + shld rbx, r15, 2; \ + mov r14, [P1+48]; \ + shld r15, r14, 2; \ + mov r13, [P1+40]; \ + shld r14, r13, 2; \ + mov r12, [P1+32]; \ + shld r13, r12, 2; \ + mov r11, [P1+24]; \ + shld r12, r11, 2; \ + mov r10, [P1+16]; \ + shld r11, r10, 2; \ + mov r9, [P1+8]; \ + shld r10, r9, 2; \ + mov r8, [P1]; \ + shld r9, r8, 2; \ + shl r8, 2; \ + mov rcx, [P2+64]; \ + xor rcx, 0x1FF; \ + mov rax, [P2]; \ + not rax; \ + add r8, rax; \ + mov rax, [P2+8]; \ + not rax; \ + adc r9, rax; \ + mov rax, [P2+16]; \ + not rax; \ + adc r10, rax; \ + mov rax, [P2+24]; \ + not rax; \ + adc r11, rax; \ + mov rax, [P2+32]; \ + not rax; \ + adc r12, rax; \ + mov rax, [P2+40]; \ + not rax; \ + adc r13, rax; \ + mov rax, [P2+48]; \ + not rax; \ + adc r14, rax; \ + mov rax, [P2+56]; \ + not rax; \ + adc r15, rax; \ + adc rbx, rcx; \ + mov rax, r9; \ + and rax, r10; \ + and rax, r11; \ + and rax, r12; \ + and rax, r13; \ + and rax, r14; \ + and rax, r15; \ + mov rdx, rbx; \ + shr rdx, 9; \ + or rbx, ~0x1FF; \ + lea rcx, [rdx+1]; \ + add rcx, r8; \ + mov ecx, 0; \ + adc rax, rcx; \ + mov rax, rbx; \ + adc rax, rcx; \ + adc r8, rdx; \ + mov [P0], r8; \ + adc r9, rcx; \ + mov [P0+8], r9; \ + adc r10, rcx; \ + mov [P0+16], r10; \ + adc r11, rcx; \ + mov [P0+24], r11; \ + adc r12, rcx; \ + mov [P0+32], r12; \ + adc r13, rcx; \ + mov [P0+40], r13; \ + adc r14, rcx; \ + mov [P0+48], r14; \ + adc r15, rcx; \ + mov [P0+56], r15; \ + adc rbx, rcx; \ + and rbx, 0x1FF; \ + mov [P0+64], rbx + +S2N_BN_SYMBOL(p521_jdouble): + +#if WINDOWS_ABI + push rdi + push rsi + mov rdi, rcx + mov rsi, rdx +#endif + +// Save registers and make room on stack for temporary variables + + push rbx + push r12 + push r13 + push r14 + push r15 + + sub rsp, NSPACE + +// Main code, just a sequence of basic field operations + +// z2 = z^2 +// y2 = y^2 + + sqr_p521(z2,z_1) + sqr_p521(y2,y_1) + +// x2p = x^2 - z^4 = (x + z^2) * (x - z^2) + + add_p521(t1,x_1,z2) + sub_p521(t2,x_1,z2) + mul_p521(x2p,t1,t2) + +// t1 = y + z +// x4p = x2p^2 +// xy2 = x * y^2 + + add_p521(t1,y_1,z_1) + sqr_p521(x4p,x2p) + weakmul_p521(xy2,x_1,y2) + +// t2 = (y + z)^2 + + sqr_p521(t2,t1) + +// d = 12 * xy2 - 9 * x4p +// t1 = y^2 + 2 * y * z + + cmsub_p521(d,12,xy2,9,x4p) + sub_p521(t1,t2,z2) + +// y4 = y^4 + + sqr_p521(y4,y2) + +// z_3' = 2 * y * z +// dx2 = d * x2p + + sub_p521(z_3,t1,y2) + weakmul_p521(dx2,d,x2p) + +// x' = 4 * xy2 - d + + cmsub41_p521(x_3,xy2,d) + +// y' = 3 * dx2 - 8 * y4 + + cmsub38_p521(y_3,dx2,y4) + +// Restore stack and registers + + add rsp, NSPACE + pop r15 + pop r14 + pop r13 + pop r12 + pop rbx + +#if WINDOWS_ABI + pop rsi + pop rdi +#endif + ret + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack, "", %progbits +#endif diff --git a/x86/p521/p521_jmixadd.S b/x86/p521/p521_jmixadd.S new file mode 100644 index 0000000000..42ec2f8915 --- /dev/null +++ b/x86/p521/p521_jmixadd.S @@ -0,0 +1,756 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +// ---------------------------------------------------------------------------- +// Point mixed addition on NIST curve P-521 in Jacobian coordinates +// +// extern void p521_jmixadd +// (uint64_t p3[static 27],uint64_t p1[static 27],uint64_t p2[static 18]); +// +// Does p3 := p1 + p2 where all points are regarded as Jacobian triples. +// A Jacobian triple (x,y,z) represents affine point (x/z^2,y/z^3). +// The "mixed" part means that p2 only has x and y coordinates, with the +// implicit z coordinate assumed to be the identity. It is assumed that +// all the coordinates of the input points p1 and p2 are fully reduced +// mod p_521, that the z coordinate of p1 is nonzero and that neither +// p1 =~= p2 or p1 =~= -p2, where "=~=" means "represents the same affine +// point as". +// +// Standard x86-64 ABI: RDI = p3, RSI = p1, RDX = p2 +// Microsoft x64 ABI: RCX = p3, RDX = p1, R8 = p2 +// ---------------------------------------------------------------------------- +#include "_internal_s2n_bignum.h" + + .intel_syntax noprefix + S2N_BN_SYM_VISIBILITY_DIRECTIVE(p521_jmixadd) + S2N_BN_SYM_PRIVACY_DIRECTIVE(p521_jmixadd) + .text + +// Size of individual field elements + +#define NUMSIZE 72 + +// Stable homes for input arguments during main code sequence +// These are where they arrive except for input_y, initially in rdx + +#define input_z rdi +#define input_x rsi +#define input_y rcx + +// Pointer-offset pairs for inputs and outputs + +#define x_1 input_x+0 +#define y_1 input_x+NUMSIZE +#define z_1 input_x+(2*NUMSIZE) + +#define x_2 input_y+0 +#define y_2 input_y+NUMSIZE + +#define x_3 input_z+0 +#define y_3 input_z+NUMSIZE +#define z_3 input_z+(2*NUMSIZE) + +// Pointer-offset pairs for temporaries, with some aliasing +// The tmp field is internal storage for field mul and sqr. +// NSPACE is the total stack needed for these temporaries + +#define zp2 rsp+(NUMSIZE*0) +#define ww rsp+(NUMSIZE*0) + +#define yd rsp+(NUMSIZE*1) +#define y2a rsp+(NUMSIZE*1) + +#define x2a rsp+(NUMSIZE*2) +#define zzx2 rsp+(NUMSIZE*2) + +#define zz rsp+(NUMSIZE*3) +#define t1 rsp+(NUMSIZE*3) + +#define t2 rsp+(NUMSIZE*4) +#define zzx1 rsp+(NUMSIZE*4) + +#define xd rsp+(NUMSIZE*5) + +#define tmp rsp+(NUMSIZE*6) + +#define NSPACE (NUMSIZE*6+64) + +// Corresponds exactly to bignum_mul_p521 + +#define mul_p521(P0,P1,P2) \ + xor ebp,ebp; \ + mov rdx,[P2]; \ + mulx r9,r8,[P1]; \ + mov [rsp+432],r8; \ + mulx r10,rbx,[P1+0x8]; \ + adc r9,rbx; \ + mulx r11,rbx,[P1+0x10]; \ + adc r10,rbx; \ + mulx r12,rbx,[P1+0x18]; \ + adc r11,rbx; \ + mulx r13,rbx,[P1+0x20]; \ + adc r12,rbx; \ + mulx r14,rbx,[P1+0x28]; \ + adc r13,rbx; \ + mulx r15,rbx,[P1+0x30]; \ + adc r14,rbx; \ + mulx r8,rbx,[P1+0x38]; \ + adc r15,rbx; \ + adc r8,rbp; \ + mov rdx,[P2+0x8]; \ + xor ebp,ebp; \ + mulx rbx,rax,[P1]; \ + adcx r9,rax; \ + adox r10,rbx; \ + mov [rsp+440],r9; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,[P1+0x28]; \ + adcx r14,rax; \ + adox r15,rbx; \ + mulx rbx,rax,[P1+0x30]; \ + adcx r15,rax; \ + adox r8,rbx; \ + mulx r9,rax,[P1+0x38]; \ + adcx r8,rax; \ + adox r9,rbp; \ + adc r9,rbp; \ + mov rdx,[P2+0x10]; \ + xor ebp,ebp; \ + mulx rbx,rax,[P1]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mov [rsp+448],r10; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r14,rax; \ + adox r15,rbx; \ + mulx rbx,rax,[P1+0x28]; \ + adcx r15,rax; \ + adox r8,rbx; \ + mulx rbx,rax,[P1+0x30]; \ + adcx r8,rax; \ + adox r9,rbx; \ + mulx r10,rax,[P1+0x38]; \ + adcx r9,rax; \ + adox r10,rbp; \ + adc r10,rbp; \ + mov rdx,[P2+0x18]; \ + xor ebp,ebp; \ + mulx rbx,rax,[P1]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mov [rsp+456],r11; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r14,rax; \ + adox r15,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r15,rax; \ + adox r8,rbx; \ + mulx rbx,rax,[P1+0x28]; \ + adcx r8,rax; \ + adox r9,rbx; \ + mulx rbx,rax,[P1+0x30]; \ + adcx r9,rax; \ + adox r10,rbx; \ + mulx r11,rax,[P1+0x38]; \ + adcx r10,rax; \ + adox r11,rbp; \ + adc r11,rbp; \ + mov rdx,[P2+0x20]; \ + xor ebp,ebp; \ + mulx rbx,rax,[P1]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mov [rsp+464],r12; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r14,rax; \ + adox r15,rbx; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r15,rax; \ + adox r8,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r8,rax; \ + adox r9,rbx; \ + mulx rbx,rax,[P1+0x28]; \ + adcx r9,rax; \ + adox r10,rbx; \ + mulx rbx,rax,[P1+0x30]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx r12,rax,[P1+0x38]; \ + adcx r11,rax; \ + adox r12,rbp; \ + adc r12,rbp; \ + mov rdx,[P2+0x28]; \ + xor ebp,ebp; \ + mulx rbx,rax,[P1]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mov [rsp+472],r13; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r14,rax; \ + adox r15,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r15,rax; \ + adox r8,rbx; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r8,rax; \ + adox r9,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r9,rax; \ + adox r10,rbx; \ + mulx rbx,rax,[P1+0x28]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P1+0x30]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx r13,rax,[P1+0x38]; \ + adcx r12,rax; \ + adox r13,rbp; \ + adc r13,rbp; \ + mov rdx,[P2+0x30]; \ + xor ebp,ebp; \ + mulx rbx,rax,[P1]; \ + adcx r14,rax; \ + adox r15,rbx; \ + mov [rsp+480],r14; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r15,rax; \ + adox r8,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r8,rax; \ + adox r9,rbx; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r9,rax; \ + adox r10,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P1+0x28]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,[P1+0x30]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx r14,rax,[P1+0x38]; \ + adcx r13,rax; \ + adox r14,rbp; \ + adc r14,rbp; \ + mov rdx,[P2+0x38]; \ + xor ebp,ebp; \ + mulx rbx,rax,[P1]; \ + adcx r15,rax; \ + adox r8,rbx; \ + mov [rsp+488],r15; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r8,rax; \ + adox r9,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r9,rax; \ + adox r10,rbx; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,[P1+0x28]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx rbx,rax,[P1+0x30]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx r15,rax,[P1+0x38]; \ + adcx r14,rax; \ + adox r15,rbp; \ + adc r15,rbp; \ + mov rdx,[P1+0x40]; \ + xor ebp,ebp; \ + mulx rbx,rax,[P2]; \ + adcx r8,rax; \ + adox r9,rbx; \ + mulx rbx,rax,[P2+0x8]; \ + adcx r9,rax; \ + adox r10,rbx; \ + mulx rbx,rax,[P2+0x10]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P2+0x18]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,[P2+0x20]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx rbx,rax,[P2+0x28]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,[P2+0x30]; \ + adcx r14,rax; \ + adox r15,rbx; \ + mulx rbx,rax,[P2+0x38]; \ + adcx r15,rax; \ + adox rbx,rbp; \ + adc rbp,rbx; \ + mov rdx,[P2+0x40]; \ + xor eax,eax; \ + mulx rbx,rax,[P1]; \ + adcx r8,rax; \ + adox r9,rbx; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r9,rax; \ + adox r10,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx rbx,rax,[P1+0x28]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,[P1+0x30]; \ + adcx r14,rax; \ + adox r15,rbx; \ + mulx rbx,rax,[P1+0x38]; \ + adcx r15,rax; \ + adox rbp,rbx; \ + mulx rbx,rax,[P1+0x40]; \ + adc rbp,rax; \ + mov rax,r8; \ + and rax,0x1ff; \ + shrd r8,r9,0x9; \ + shrd r9,r10,0x9; \ + shrd r10,r11,0x9; \ + shrd r11,r12,0x9; \ + shrd r12,r13,0x9; \ + shrd r13,r14,0x9; \ + shrd r14,r15,0x9; \ + shrd r15,rbp,0x9; \ + shr rbp,0x9; \ + add rbp,rax; \ + stc; \ + adc r8,[rsp+432]; \ + adc r9,[rsp+440]; \ + adc r10,[rsp+448]; \ + adc r11,[rsp+456]; \ + adc r12,[rsp+464]; \ + adc r13,[rsp+472]; \ + adc r14,[rsp+480]; \ + adc r15,[rsp+488]; \ + adc rbp,0xfffffffffffffe00; \ + cmc; \ + sbb r8,0x0; \ + mov [P0],r8; \ + sbb r9,0x0; \ + mov [P0+0x8],r9; \ + sbb r10,0x0; \ + mov [P0+0x10],r10; \ + sbb r11,0x0; \ + mov [P0+0x18],r11; \ + sbb r12,0x0; \ + mov [P0+0x20],r12; \ + sbb r13,0x0; \ + mov [P0+0x28],r13; \ + sbb r14,0x0; \ + mov [P0+0x30],r14; \ + sbb r15,0x0; \ + mov [P0+0x38],r15; \ + sbb rbp,0x0; \ + and rbp,0x1ff; \ + mov [P0+0x40],rbp + +// Corresponds exactly to bignum_sqr_p521 + +#define sqr_p521(P0,P1) \ + xor ebp,ebp; \ + mov rdx,[P1]; \ + mulx rax,r9,[P1+0x8]; \ + mov [rsp+440],r9; \ + mulx rbx,r10,[P1+0x10]; \ + adcx r10,rax; \ + mov [rsp+448],r10; \ + mulx rax,r11,[P1+0x18]; \ + adcx r11,rbx; \ + mulx rbx,r12,[P1+0x20]; \ + adcx r12,rax; \ + mulx rax,r13,[P1+0x28]; \ + adcx r13,rbx; \ + mulx rbx,r14,[P1+0x30]; \ + adcx r14,rax; \ + mulx r8,r15,[P1+0x38]; \ + adcx r15,rbx; \ + adcx r8,rbp; \ + xor ebp,ebp; \ + mov rdx,[P1+0x8]; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mov [rsp+456],r11; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mov [rsp+464],r12; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,[P1+0x28]; \ + adcx r14,rax; \ + adox r15,rbx; \ + mulx rbx,rax,[P1+0x30]; \ + adcx r15,rax; \ + adox r8,rbx; \ + mulx r9,rax,[P1+0x38]; \ + adcx r8,rax; \ + adox r9,rbp; \ + mov rdx,[P1+0x20]; \ + mulx r10,rax,[P1+0x28]; \ + adcx r9,rax; \ + adox r10,rbp; \ + adcx r10,rbp; \ + xor ebp,ebp; \ + mov rdx,[P1+0x10]; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mov [rsp+472],r13; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r14,rax; \ + adox r15,rbx; \ + mov [rsp+480],r14; \ + mulx rbx,rax,[P1+0x28]; \ + adcx r15,rax; \ + adox r8,rbx; \ + mulx rbx,rax,[P1+0x30]; \ + adcx r8,rax; \ + adox r9,rbx; \ + mulx rbx,rax,[P1+0x38]; \ + adcx r9,rax; \ + adox r10,rbx; \ + mov rdx,[P1+0x30]; \ + mulx r11,rax,[P1+0x20]; \ + adcx r10,rax; \ + adox r11,rbp; \ + mulx r12,rax,[P1+0x28]; \ + adcx r11,rax; \ + adox r12,rbp; \ + adcx r12,rbp; \ + xor ebp,ebp; \ + mov rdx,[P1+0x18]; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r15,rax; \ + adox r8,rbx; \ + mov [rsp+488],r15; \ + mulx rbx,rax,[P1+0x28]; \ + adcx r8,rax; \ + adox r9,rbx; \ + mulx rbx,rax,[P1+0x30]; \ + adcx r9,rax; \ + adox r10,rbx; \ + mulx rbx,rax,[P1+0x38]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mov rdx,[P1+0x38]; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx r13,rax,[P1+0x28]; \ + adcx r12,rax; \ + adox r13,rbp; \ + mulx r14,rax,[P1+0x30]; \ + adcx r13,rax; \ + adox r14,rbp; \ + adcx r14,rbp; \ + xor ebp,ebp; \ + mov rdx,[P1]; \ + mulx rbx,rax,rdx; \ + mov [rsp+432],rax; \ + mov rax,[rsp+440]; \ + adcx rax,rax; \ + adox rax,rbx; \ + mov [rsp+440],rax; \ + mov rax,[rsp+448]; \ + mov rdx,[P1+0x8]; \ + mulx rbx,rdx,rdx; \ + adcx rax,rax; \ + adox rax,rdx; \ + mov [rsp+448],rax; \ + mov rax,[rsp+456]; \ + adcx rax,rax; \ + adox rax,rbx; \ + mov [rsp+456],rax; \ + mov rax,[rsp+464]; \ + mov rdx,[P1+0x10]; \ + mulx rbx,rdx,rdx; \ + adcx rax,rax; \ + adox rax,rdx; \ + mov [rsp+464],rax; \ + mov rax,[rsp+472]; \ + adcx rax,rax; \ + adox rax,rbx; \ + mov [rsp+472],rax; \ + mov rax,[rsp+480]; \ + mov rdx,[P1+0x18]; \ + mulx rbx,rdx,rdx; \ + adcx rax,rax; \ + adox rax,rdx; \ + mov [rsp+480],rax; \ + mov rax,[rsp+488]; \ + adcx rax,rax; \ + adox rax,rbx; \ + mov [rsp+488],rax; \ + mov rdx,[P1+0x20]; \ + mulx rbx,rdx,rdx; \ + adcx r8,r8; \ + adox r8,rdx; \ + adcx r9,r9; \ + adox r9,rbx; \ + mov rdx,[P1+0x28]; \ + mulx rbx,rdx,rdx; \ + adcx r10,r10; \ + adox r10,rdx; \ + adcx r11,r11; \ + adox r11,rbx; \ + mov rdx,[P1+0x30]; \ + mulx rbx,rdx,rdx; \ + adcx r12,r12; \ + adox r12,rdx; \ + adcx r13,r13; \ + adox r13,rbx; \ + mov rdx,[P1+0x38]; \ + mulx r15,rdx,rdx; \ + adcx r14,r14; \ + adox r14,rdx; \ + adcx r15,rbp; \ + adox r15,rbp; \ + mov rdx,[P1+0x40]; \ + mov rbp,rdx; \ + imul rbp,rbp; \ + add rdx,rdx; \ + mulx rbx,rax,[P1]; \ + adcx r8,rax; \ + adox r9,rbx; \ + mulx rbx,rax,[P1+0x8]; \ + adcx r9,rax; \ + adox r10,rbx; \ + mulx rbx,rax,[P1+0x10]; \ + adcx r10,rax; \ + adox r11,rbx; \ + mulx rbx,rax,[P1+0x18]; \ + adcx r11,rax; \ + adox r12,rbx; \ + mulx rbx,rax,[P1+0x20]; \ + adcx r12,rax; \ + adox r13,rbx; \ + mulx rbx,rax,[P1+0x28]; \ + adcx r13,rax; \ + adox r14,rbx; \ + mulx rbx,rax,[P1+0x30]; \ + adcx r14,rax; \ + adox r15,rbx; \ + mulx rbx,rax,[P1+0x38]; \ + adcx r15,rax; \ + adox rbp,rbx; \ + adc rbp,0x0; \ + mov rax,r8; \ + and rax,0x1ff; \ + shrd r8,r9,0x9; \ + shrd r9,r10,0x9; \ + shrd r10,r11,0x9; \ + shrd r11,r12,0x9; \ + shrd r12,r13,0x9; \ + shrd r13,r14,0x9; \ + shrd r14,r15,0x9; \ + shrd r15,rbp,0x9; \ + shr rbp,0x9; \ + add rbp,rax; \ + stc; \ + adc r8,[rsp+432]; \ + adc r9,[rsp+440]; \ + adc r10,[rsp+448]; \ + adc r11,[rsp+456]; \ + adc r12,[rsp+464]; \ + adc r13,[rsp+472]; \ + adc r14,[rsp+480]; \ + adc r15,[rsp+488]; \ + adc rbp,0xfffffffffffffe00; \ + cmc; \ + sbb r8,0x0; \ + mov [P0],r8; \ + sbb r9,0x0; \ + mov [P0+0x8],r9; \ + sbb r10,0x0; \ + mov [P0+0x10],r10; \ + sbb r11,0x0; \ + mov [P0+0x18],r11; \ + sbb r12,0x0; \ + mov [P0+0x20],r12; \ + sbb r13,0x0; \ + mov [P0+0x28],r13; \ + sbb r14,0x0; \ + mov [P0+0x30],r14; \ + sbb r15,0x0; \ + mov [P0+0x38],r15; \ + sbb rbp,0x0; \ + and rbp,0x1ff; \ + mov [P0+0x40],rbp + +// Corresponds exactly to bignum_sub_p521 + +#define sub_p521(P0,P1,P2) \ + mov rax,[P1]; \ + sub rax,[P2]; \ + mov rdx,[P1+0x8]; \ + sbb rdx,[P2+0x8]; \ + mov r8,[P1+0x10]; \ + sbb r8,[P2+0x10]; \ + mov r9,[P1+0x18]; \ + sbb r9,[P2+0x18]; \ + mov r10,[P1+0x20]; \ + sbb r10,[P2+0x20]; \ + mov r11,[P1+0x28]; \ + sbb r11,[P2+0x28]; \ + mov r12,[P1+0x30]; \ + sbb r12,[P2+0x30]; \ + mov r13,[P1+0x38]; \ + sbb r13,[P2+0x38]; \ + mov r14,[P1+0x40]; \ + sbb r14,[P2+0x40]; \ + sbb rax,0x0; \ + mov [P0],rax; \ + sbb rdx,0x0; \ + mov [P0+0x8],rdx; \ + sbb r8,0x0; \ + mov [P0+0x10],r8; \ + sbb r9,0x0; \ + mov [P0+0x18],r9; \ + sbb r10,0x0; \ + mov [P0+0x20],r10; \ + sbb r11,0x0; \ + mov [P0+0x28],r11; \ + sbb r12,0x0; \ + mov [P0+0x30],r12; \ + sbb r13,0x0; \ + mov [P0+0x38],r13; \ + sbb r14,0x0; \ + and r14,0x1ff; \ + mov [P0+0x40],r14 + +S2N_BN_SYMBOL(p521_jmixadd): + +#if WINDOWS_ABI + push rdi + push rsi + mov rdi, rcx + mov rsi, rdx + mov rdx, r8 +#endif + +// Save registers and make room on stack for temporary variables + + push rbx + push rbp + push r12 + push r13 + push r14 + push r15 + + sub rsp, NSPACE + +// Move the input arguments to stable places (two are already there) + + mov input_y, rdx + +// Main code, just a sequence of basic field operations + + sqr_p521(zp2,z_1) + mul_p521(y2a,z_1,y_2) + + mul_p521(x2a,zp2,x_2) + mul_p521(y2a,zp2,y2a) + + sub_p521(xd,x2a,x_1) + sub_p521(yd,y2a,y_1) + + sqr_p521(zz,xd) + sqr_p521(ww,yd) + + mul_p521(zzx1,zz,x_1) + mul_p521(zzx2,zz,x2a) + + sub_p521(x_3,ww,zzx1) + sub_p521(t1,zzx2,zzx1) + + mul_p521(z_3,xd,z_1) + + sub_p521(x_3,x_3,zzx2) + + sub_p521(t2,zzx1,x_3) + + mul_p521(t1,t1,y_1) + mul_p521(t2,yd,t2) + + sub_p521(y_3,t2,t1) + +// Restore stack and registers + + add rsp, NSPACE + pop r15 + pop r14 + pop r13 + pop r12 + pop rbp + pop rbx + +#if WINDOWS_ABI + pop rsi + pop rdi +#endif + ret + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack, "", %progbits +#endif diff --git a/x86/proofs/p521_jadd.ml b/x86/proofs/p521_jadd.ml new file mode 100644 index 0000000000..659f65667b --- /dev/null +++ b/x86/proofs/p521_jadd.ml @@ -0,0 +1,9964 @@ +(* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + *) + +(* ========================================================================= *) +(* Point addition in Jacobian coordinates for NIST p521 curve. *) +(* ========================================================================= *) + +needs "x86/proofs/base.ml";; +needs "common/ecencoding.ml";; +needs "EC/jacobian.ml";; +needs "EC/nistp521.ml";; + +prioritize_int();; +prioritize_real();; +prioritize_num();; + +(**** print_literal_from_elf "x86/p521/p521_jadd.o";; + ****) + +let p521_jadd_mc = define_assert_from_elf + "p521_jadd_mc" "x86/p521/p521_jadd.o" +[ + 0x53; (* PUSH (% rbx) *) + 0x55; (* PUSH (% rbp) *) + 0x41; 0x54; (* PUSH (% r12) *) + 0x41; 0x55; (* PUSH (% r13) *) + 0x41; 0x56; (* PUSH (% r14) *) + 0x41; 0x57; (* PUSH (% r15) *) + 0x48; 0x81; 0xec; 0x38; 0x02; 0x00; 0x00; + (* SUB (% rsp) (Imm32 (word 568)) *) + 0x48; 0x89; 0xd1; (* MOV (% rcx) (% rdx) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x96; 0x90; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,144))) *) + 0xc4; 0xe2; 0xb3; 0xf6; 0x86; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rax,% r9) (% rdx,Memop Quadword (%% (rsi,152))) *) + 0x4c; 0x89; 0x8c; 0x24; 0x00; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,512))) (% r9) *) + 0xc4; 0xe2; 0xab; 0xf6; 0x9e; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% r10) (% rdx,Memop Quadword (%% (rsi,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0x4c; 0x89; 0x94; 0x24; 0x08; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,520))) (% r10) *) + 0xc4; 0xe2; 0xa3; 0xf6; 0x86; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rax,% r11) (% rdx,Memop Quadword (%% (rsi,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% rbx) *) + 0xc4; 0xe2; 0x9b; 0xf6; 0x9e; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% r12) (% rdx,Memop Quadword (%% (rsi,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xc4; 0xe2; 0x93; 0xf6; 0x86; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rax,% r13) (% rdx,Memop Quadword (%% (rsi,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADCX (% r13) (% rbx) *) + 0xc4; 0xe2; 0x8b; 0xf6; 0x9e; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% r14) (% rdx,Memop Quadword (%% (rsi,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xc4; 0x62; 0x83; 0xf6; 0x86; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% r8,% r15) (% rdx,Memop Quadword (%% (rsi,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADCX (% r15) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc5; + (* ADCX (% r8) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x96; 0x98; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,152))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x4c; 0x89; 0x9c; 0x24; 0x10; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,528))) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4c; 0x89; 0xa4; 0x24; 0x18; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,536))) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x8e; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% r9,% rax) (% rdx,Memop Quadword (%% (rsi,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcd; + (* ADOX (% r9) (% rbp) *) + 0x48; 0x8b; 0x96; 0xb0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,176))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x96; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsi,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd5; + (* ADOX (% r10) (% rbp) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd5; + (* ADCX (% r10) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x96; 0xa0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,160))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0x4c; 0x89; 0xac; 0x24; 0x20; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,544))) (% r13) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x4c; 0x89; 0xb4; 0x24; 0x28; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,552))) (% r14) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0x48; 0x8b; 0x96; 0xc0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,192))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x9e; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsi,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdd; + (* ADOX (% r11) (% rbp) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xa6; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsi,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe5; + (* ADOX (% r12) (% rbp) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe5; + (* ADCX (% r12) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x96; 0xa8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,168))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0x4c; 0x89; 0xbc; 0x24; 0x30; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,560))) (% r15) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0x8b; 0x96; 0xc8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,200))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xae; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsi,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xed; + (* ADOX (% r13) (% rbp) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xb6; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsi,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf5; + (* ADOX (% r14) (% rbp) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf5; + (* ADCX (% r14) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x96; 0x90; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,144))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% rdx) *) + 0x48; 0x89; 0x84; 0x24; 0xf8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,504))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x00; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,512))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% rax) (% rbx) *) + 0x48; 0x89; 0x84; 0x24; 0x00; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,512))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x08; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,520))) *) + 0x48; 0x8b; 0x96; 0x98; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,152))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc2; + (* ADOX (% rax) (% rdx) *) + 0x48; 0x89; 0x84; 0x24; 0x08; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,520))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x10; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,528))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% rax) (% rbx) *) + 0x48; 0x89; 0x84; 0x24; 0x10; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,528))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x18; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,536))) *) + 0x48; 0x8b; 0x96; 0xa0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,160))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc2; + (* ADOX (% rax) (% rdx) *) + 0x48; 0x89; 0x84; 0x24; 0x18; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,536))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x20; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,544))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% rax) (% rbx) *) + 0x48; 0x89; 0x84; 0x24; 0x20; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,544))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x28; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,552))) *) + 0x48; 0x8b; 0x96; 0xa8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,168))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc2; + (* ADOX (% rax) (% rdx) *) + 0x48; 0x89; 0x84; 0x24; 0x28; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,552))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x30; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,560))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% rax) (% rbx) *) + 0x48; 0x89; 0x84; 0x24; 0x30; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,560))) (% rax) *) + 0x48; 0x8b; 0x96; 0xb0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,176))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% r8) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc2; + (* ADOX (% r8) (% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% r9) (% r9) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0x48; 0x8b; 0x96; 0xb8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,184))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xd2; + (* ADCX (% r10) (% r10) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd2; + (* ADOX (% r10) (% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% r11) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0x8b; 0x96; 0xc0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,192))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xe4; + (* ADCX (% r12) (% r12) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe2; + (* ADOX (% r12) (% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% r13) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0x8b; 0x96; 0xc8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,200))) *) + 0xc4; 0x62; 0xeb; 0xf6; 0xfa; + (* MULX4 (% r15,% rdx) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf6; + (* ADCX (% r14) (% r14) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf2; + (* ADOX (% r14) (% rdx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADCX (% r15) (% rbp) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADOX (% r15) (% rbp) *) + 0x48; 0x8b; 0x96; 0xd0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,208))) *) + 0x48; 0x89; 0xd5; (* MOV (% rbp) (% rdx) *) + 0x48; 0x0f; 0xaf; 0xed; (* IMUL (% rbp) (% rbp) *) + 0x48; 0x01; 0xd2; (* ADD (% rdx) (% rdx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% rbp) (% rbx) *) + 0x48; 0x83; 0xd5; 0x00; (* ADC (% rbp) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xc0; (* MOV (% rax) (% r8) *) + 0x48; 0x25; 0xff; 0x01; 0x00; 0x00; + (* AND (% rax) (Imm32 (word 511)) *) + 0x4d; 0x0f; 0xac; 0xc8; 0x09; + (* SHRD (% r8) (% r9) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xd1; 0x09; + (* SHRD (% r9) (% r10) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xda; 0x09; + (* SHRD (% r10) (% r11) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xe3; 0x09; + (* SHRD (% r11) (% r12) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xec; 0x09; + (* SHRD (% r12) (% r13) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xf5; 0x09; + (* SHRD (% r13) (% r14) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xfe; 0x09; + (* SHRD (% r14) (% r15) (Imm8 (word 9)) *) + 0x49; 0x0f; 0xac; 0xef; 0x09; + (* SHRD (% r15) (% rbp) (Imm8 (word 9)) *) + 0x48; 0xc1; 0xed; 0x09; (* SHR (% rbp) (Imm8 (word 9)) *) + 0x48; 0x01; 0xc5; (* ADD (% rbp) (% rax) *) + 0xf9; (* STCF *) + 0x4c; 0x13; 0x84; 0x24; 0xf8; 0x01; 0x00; 0x00; + (* ADC (% r8) (Memop Quadword (%% (rsp,504))) *) + 0x4c; 0x13; 0x8c; 0x24; 0x00; 0x02; 0x00; 0x00; + (* ADC (% r9) (Memop Quadword (%% (rsp,512))) *) + 0x4c; 0x13; 0x94; 0x24; 0x08; 0x02; 0x00; 0x00; + (* ADC (% r10) (Memop Quadword (%% (rsp,520))) *) + 0x4c; 0x13; 0x9c; 0x24; 0x10; 0x02; 0x00; 0x00; + (* ADC (% r11) (Memop Quadword (%% (rsp,528))) *) + 0x4c; 0x13; 0xa4; 0x24; 0x18; 0x02; 0x00; 0x00; + (* ADC (% r12) (Memop Quadword (%% (rsp,536))) *) + 0x4c; 0x13; 0xac; 0x24; 0x20; 0x02; 0x00; 0x00; + (* ADC (% r13) (Memop Quadword (%% (rsp,544))) *) + 0x4c; 0x13; 0xb4; 0x24; 0x28; 0x02; 0x00; 0x00; + (* ADC (% r14) (Memop Quadword (%% (rsp,552))) *) + 0x4c; 0x13; 0xbc; 0x24; 0x30; 0x02; 0x00; 0x00; + (* ADC (% r15) (Memop Quadword (%% (rsp,560))) *) + 0x48; 0x81; 0xd5; 0x00; 0xfe; 0xff; 0xff; + (* ADC (% rbp) (Imm32 (word 4294966784)) *) + 0xf5; (* CMC *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x04; 0x24; (* MOV (Memop Quadword (%% (rsp,0))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x4c; 0x24; 0x08; + (* MOV (Memop Quadword (%% (rsp,8))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x54; 0x24; 0x10; + (* MOV (Memop Quadword (%% (rsp,16))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x5c; 0x24; 0x18; + (* MOV (Memop Quadword (%% (rsp,24))) (% r11) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x64; 0x24; 0x20; + (* MOV (Memop Quadword (%% (rsp,32))) (% r12) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x6c; 0x24; 0x28; + (* MOV (Memop Quadword (%% (rsp,40))) (% r13) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x74; 0x24; 0x30; + (* MOV (Memop Quadword (%% (rsp,48))) (% r14) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x7c; 0x24; 0x38; + (* MOV (Memop Quadword (%% (rsp,56))) (% r15) *) + 0x48; 0x83; 0xdd; 0x00; (* SBB (% rbp) (Imm8 (word 0)) *) + 0x48; 0x81; 0xe5; 0xff; 0x01; 0x00; 0x00; + (* AND (% rbp) (Imm32 (word 511)) *) + 0x48; 0x89; 0x6c; 0x24; 0x40; + (* MOV (Memop Quadword (%% (rsp,64))) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x91; 0x90; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rcx,144))) *) + 0xc4; 0xe2; 0xb3; 0xf6; 0x81; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rax,% r9) (% rdx,Memop Quadword (%% (rcx,152))) *) + 0x4c; 0x89; 0x8c; 0x24; 0x00; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,512))) (% r9) *) + 0xc4; 0xe2; 0xab; 0xf6; 0x99; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% r10) (% rdx,Memop Quadword (%% (rcx,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0x4c; 0x89; 0x94; 0x24; 0x08; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,520))) (% r10) *) + 0xc4; 0xe2; 0xa3; 0xf6; 0x81; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rax,% r11) (% rdx,Memop Quadword (%% (rcx,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% rbx) *) + 0xc4; 0xe2; 0x9b; 0xf6; 0x99; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% r12) (% rdx,Memop Quadword (%% (rcx,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xc4; 0xe2; 0x93; 0xf6; 0x81; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rax,% r13) (% rdx,Memop Quadword (%% (rcx,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADCX (% r13) (% rbx) *) + 0xc4; 0xe2; 0x8b; 0xf6; 0x99; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% r14) (% rdx,Memop Quadword (%% (rcx,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xc4; 0x62; 0x83; 0xf6; 0x81; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% r8,% r15) (% rdx,Memop Quadword (%% (rcx,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADCX (% r15) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc5; + (* ADCX (% r8) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x91; 0x98; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rcx,152))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x4c; 0x89; 0x9c; 0x24; 0x10; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,528))) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4c; 0x89; 0xa4; 0x24; 0x18; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,536))) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x89; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% r9,% rax) (% rdx,Memop Quadword (%% (rcx,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcd; + (* ADOX (% r9) (% rbp) *) + 0x48; 0x8b; 0x91; 0xb0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rcx,176))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x91; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rcx,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd5; + (* ADOX (% r10) (% rbp) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd5; + (* ADCX (% r10) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x91; 0xa0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rcx,160))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0x4c; 0x89; 0xac; 0x24; 0x20; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,544))) (% r13) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x4c; 0x89; 0xb4; 0x24; 0x28; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,552))) (% r14) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0x48; 0x8b; 0x91; 0xc0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rcx,192))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x99; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rcx,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdd; + (* ADOX (% r11) (% rbp) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xa1; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rcx,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe5; + (* ADOX (% r12) (% rbp) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe5; + (* ADCX (% r12) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x91; 0xa8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rcx,168))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0x4c; 0x89; 0xbc; 0x24; 0x30; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,560))) (% r15) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0x8b; 0x91; 0xc8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rcx,200))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xa9; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rcx,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xed; + (* ADOX (% r13) (% rbp) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xb1; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rcx,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf5; + (* ADOX (% r14) (% rbp) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf5; + (* ADCX (% r14) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x91; 0x90; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rcx,144))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% rdx) *) + 0x48; 0x89; 0x84; 0x24; 0xf8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,504))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x00; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,512))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% rax) (% rbx) *) + 0x48; 0x89; 0x84; 0x24; 0x00; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,512))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x08; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,520))) *) + 0x48; 0x8b; 0x91; 0x98; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rcx,152))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc2; + (* ADOX (% rax) (% rdx) *) + 0x48; 0x89; 0x84; 0x24; 0x08; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,520))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x10; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,528))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% rax) (% rbx) *) + 0x48; 0x89; 0x84; 0x24; 0x10; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,528))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x18; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,536))) *) + 0x48; 0x8b; 0x91; 0xa0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rcx,160))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc2; + (* ADOX (% rax) (% rdx) *) + 0x48; 0x89; 0x84; 0x24; 0x18; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,536))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x20; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,544))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% rax) (% rbx) *) + 0x48; 0x89; 0x84; 0x24; 0x20; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,544))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x28; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,552))) *) + 0x48; 0x8b; 0x91; 0xa8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rcx,168))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc2; + (* ADOX (% rax) (% rdx) *) + 0x48; 0x89; 0x84; 0x24; 0x28; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,552))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x30; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,560))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% rax) (% rbx) *) + 0x48; 0x89; 0x84; 0x24; 0x30; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,560))) (% rax) *) + 0x48; 0x8b; 0x91; 0xb0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rcx,176))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% r8) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc2; + (* ADOX (% r8) (% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% r9) (% r9) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0x48; 0x8b; 0x91; 0xb8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rcx,184))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xd2; + (* ADCX (% r10) (% r10) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd2; + (* ADOX (% r10) (% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% r11) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0x8b; 0x91; 0xc0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rcx,192))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xe4; + (* ADCX (% r12) (% r12) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe2; + (* ADOX (% r12) (% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% r13) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0x8b; 0x91; 0xc8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rcx,200))) *) + 0xc4; 0x62; 0xeb; 0xf6; 0xfa; + (* MULX4 (% r15,% rdx) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf6; + (* ADCX (% r14) (% r14) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf2; + (* ADOX (% r14) (% rdx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADCX (% r15) (% rbp) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADOX (% r15) (% rbp) *) + 0x48; 0x8b; 0x91; 0xd0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rcx,208))) *) + 0x48; 0x89; 0xd5; (* MOV (% rbp) (% rdx) *) + 0x48; 0x0f; 0xaf; 0xed; (* IMUL (% rbp) (% rbp) *) + 0x48; 0x01; 0xd2; (* ADD (% rdx) (% rdx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% rbp) (% rbx) *) + 0x48; 0x83; 0xd5; 0x00; (* ADC (% rbp) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xc0; (* MOV (% rax) (% r8) *) + 0x48; 0x25; 0xff; 0x01; 0x00; 0x00; + (* AND (% rax) (Imm32 (word 511)) *) + 0x4d; 0x0f; 0xac; 0xc8; 0x09; + (* SHRD (% r8) (% r9) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xd1; 0x09; + (* SHRD (% r9) (% r10) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xda; 0x09; + (* SHRD (% r10) (% r11) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xe3; 0x09; + (* SHRD (% r11) (% r12) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xec; 0x09; + (* SHRD (% r12) (% r13) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xf5; 0x09; + (* SHRD (% r13) (% r14) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xfe; 0x09; + (* SHRD (% r14) (% r15) (Imm8 (word 9)) *) + 0x49; 0x0f; 0xac; 0xef; 0x09; + (* SHRD (% r15) (% rbp) (Imm8 (word 9)) *) + 0x48; 0xc1; 0xed; 0x09; (* SHR (% rbp) (Imm8 (word 9)) *) + 0x48; 0x01; 0xc5; (* ADD (% rbp) (% rax) *) + 0xf9; (* STCF *) + 0x4c; 0x13; 0x84; 0x24; 0xf8; 0x01; 0x00; 0x00; + (* ADC (% r8) (Memop Quadword (%% (rsp,504))) *) + 0x4c; 0x13; 0x8c; 0x24; 0x00; 0x02; 0x00; 0x00; + (* ADC (% r9) (Memop Quadword (%% (rsp,512))) *) + 0x4c; 0x13; 0x94; 0x24; 0x08; 0x02; 0x00; 0x00; + (* ADC (% r10) (Memop Quadword (%% (rsp,520))) *) + 0x4c; 0x13; 0x9c; 0x24; 0x10; 0x02; 0x00; 0x00; + (* ADC (% r11) (Memop Quadword (%% (rsp,528))) *) + 0x4c; 0x13; 0xa4; 0x24; 0x18; 0x02; 0x00; 0x00; + (* ADC (% r12) (Memop Quadword (%% (rsp,536))) *) + 0x4c; 0x13; 0xac; 0x24; 0x20; 0x02; 0x00; 0x00; + (* ADC (% r13) (Memop Quadword (%% (rsp,544))) *) + 0x4c; 0x13; 0xb4; 0x24; 0x28; 0x02; 0x00; 0x00; + (* ADC (% r14) (Memop Quadword (%% (rsp,552))) *) + 0x4c; 0x13; 0xbc; 0x24; 0x30; 0x02; 0x00; 0x00; + (* ADC (% r15) (Memop Quadword (%% (rsp,560))) *) + 0x48; 0x81; 0xd5; 0x00; 0xfe; 0xff; 0xff; + (* ADC (% rbp) (Imm32 (word 4294966784)) *) + 0xf5; (* CMC *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x84; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,360))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x8c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,368))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x94; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,376))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,384))) (% r11) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xa4; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,392))) (% r12) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xac; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,400))) (% r13) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xb4; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,408))) (% r14) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xbc; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,416))) (% r15) *) + 0x48; 0x83; 0xdd; 0x00; (* SBB (% rbp) (Imm8 (word 0)) *) + 0x48; 0x81; 0xe5; 0xff; 0x01; 0x00; 0x00; + (* AND (% rbp) (Imm32 (word 511)) *) + 0x48; 0x89; 0xac; 0x24; 0xa8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,424))) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x56; 0x48; (* MOV (% rdx) (Memop Quadword (%% (rsi,72))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x89; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rcx,144))) *) + 0x4c; 0x89; 0x84; 0x24; 0xf8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,504))) (% r8) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x91; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rcx,152))) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x99; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rcx,160))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xa1; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rcx,168))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xa9; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% r13,% rbx) (% rdx,Memop Quadword (%% (rcx,176))) *) + 0x49; 0x11; 0xdc; (* ADC (% r12) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xb1; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r14,% rbx) (% rdx,Memop Quadword (%% (rcx,184))) *) + 0x49; 0x11; 0xdd; (* ADC (% r13) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xb9; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% r15,% rbx) (% rdx,Memop Quadword (%% (rcx,192))) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x81; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% r8,% rbx) (% rdx,Memop Quadword (%% (rcx,200))) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x49; 0x11; 0xe8; (* ADC (% r8) (% rbp) *) + 0x48; 0x8b; 0x56; 0x50; (* MOV (% rdx) (Memop Quadword (%% (rsi,80))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0x4c; 0x89; 0x8c; 0x24; 0x00; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,512))) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x89; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% r9,% rax) (% rdx,Memop Quadword (%% (rcx,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcd; + (* ADOX (% r9) (% rbp) *) + 0x49; 0x11; 0xe9; (* ADC (% r9) (% rbp) *) + 0x48; 0x8b; 0x56; 0x58; (* MOV (% rdx) (Memop Quadword (%% (rsi,88))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x4c; 0x89; 0x94; 0x24; 0x08; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,520))) (% r10) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x91; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rcx,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd5; + (* ADOX (% r10) (% rbp) *) + 0x49; 0x11; 0xea; (* ADC (% r10) (% rbp) *) + 0x48; 0x8b; 0x56; 0x60; (* MOV (% rdx) (Memop Quadword (%% (rsi,96))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x4c; 0x89; 0x9c; 0x24; 0x10; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,528))) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x99; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rcx,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdd; + (* ADOX (% r11) (% rbp) *) + 0x49; 0x11; 0xeb; (* ADC (% r11) (% rbp) *) + 0x48; 0x8b; 0x56; 0x68; (* MOV (% rdx) (Memop Quadword (%% (rsi,104))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4c; 0x89; 0xa4; 0x24; 0x18; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,536))) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xa1; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rcx,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe5; + (* ADOX (% r12) (% rbp) *) + 0x49; 0x11; 0xec; (* ADC (% r12) (% rbp) *) + 0x48; 0x8b; 0x56; 0x70; (* MOV (% rdx) (Memop Quadword (%% (rsi,112))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0x4c; 0x89; 0xac; 0x24; 0x20; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,544))) (% r13) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xa9; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rcx,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xed; + (* ADOX (% r13) (% rbp) *) + 0x49; 0x11; 0xed; (* ADC (% r13) (% rbp) *) + 0x48; 0x8b; 0x56; 0x78; (* MOV (% rdx) (Memop Quadword (%% (rsi,120))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x4c; 0x89; 0xb4; 0x24; 0x28; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,552))) (% r14) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xb1; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rcx,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf5; + (* ADOX (% r14) (% rbp) *) + 0x49; 0x11; 0xee; (* ADC (% r14) (% rbp) *) + 0x48; 0x8b; 0x96; 0x80; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,128))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0x4c; 0x89; 0xbc; 0x24; 0x30; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,560))) (% r15) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xb9; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rcx,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADOX (% r15) (% rbp) *) + 0x49; 0x11; 0xef; (* ADC (% r15) (% rbp) *) + 0x48; 0x8b; 0x91; 0xd0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rcx,208))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x58; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xdd; + (* ADOX (% rbx) (% rbp) *) + 0x48; 0x11; 0xdd; (* ADC (% rbp) (% rbx) *) + 0x48; 0x8b; 0x96; 0x88; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,136))) *) + 0x31; 0xc0; (* XOR (% eax) (% eax) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% rbp) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xd0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,208))) *) + 0x48; 0x11; 0xc5; (* ADC (% rbp) (% rax) *) + 0x4c; 0x89; 0xc0; (* MOV (% rax) (% r8) *) + 0x48; 0x25; 0xff; 0x01; 0x00; 0x00; + (* AND (% rax) (Imm32 (word 511)) *) + 0x4d; 0x0f; 0xac; 0xc8; 0x09; + (* SHRD (% r8) (% r9) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xd1; 0x09; + (* SHRD (% r9) (% r10) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xda; 0x09; + (* SHRD (% r10) (% r11) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xe3; 0x09; + (* SHRD (% r11) (% r12) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xec; 0x09; + (* SHRD (% r12) (% r13) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xf5; 0x09; + (* SHRD (% r13) (% r14) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xfe; 0x09; + (* SHRD (% r14) (% r15) (Imm8 (word 9)) *) + 0x49; 0x0f; 0xac; 0xef; 0x09; + (* SHRD (% r15) (% rbp) (Imm8 (word 9)) *) + 0x48; 0xc1; 0xed; 0x09; (* SHR (% rbp) (Imm8 (word 9)) *) + 0x48; 0x01; 0xc5; (* ADD (% rbp) (% rax) *) + 0xf9; (* STCF *) + 0x4c; 0x13; 0x84; 0x24; 0xf8; 0x01; 0x00; 0x00; + (* ADC (% r8) (Memop Quadword (%% (rsp,504))) *) + 0x4c; 0x13; 0x8c; 0x24; 0x00; 0x02; 0x00; 0x00; + (* ADC (% r9) (Memop Quadword (%% (rsp,512))) *) + 0x4c; 0x13; 0x94; 0x24; 0x08; 0x02; 0x00; 0x00; + (* ADC (% r10) (Memop Quadword (%% (rsp,520))) *) + 0x4c; 0x13; 0x9c; 0x24; 0x10; 0x02; 0x00; 0x00; + (* ADC (% r11) (Memop Quadword (%% (rsp,528))) *) + 0x4c; 0x13; 0xa4; 0x24; 0x18; 0x02; 0x00; 0x00; + (* ADC (% r12) (Memop Quadword (%% (rsp,536))) *) + 0x4c; 0x13; 0xac; 0x24; 0x20; 0x02; 0x00; 0x00; + (* ADC (% r13) (Memop Quadword (%% (rsp,544))) *) + 0x4c; 0x13; 0xb4; 0x24; 0x28; 0x02; 0x00; 0x00; + (* ADC (% r14) (Memop Quadword (%% (rsp,552))) *) + 0x4c; 0x13; 0xbc; 0x24; 0x30; 0x02; 0x00; 0x00; + (* ADC (% r15) (Memop Quadword (%% (rsp,560))) *) + 0x48; 0x81; 0xd5; 0x00; 0xfe; 0xff; 0xff; + (* ADC (% rbp) (Imm32 (word 4294966784)) *) + 0xf5; (* CMC *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x84; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,432))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x8c; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,440))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x94; 0x24; 0xc0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,448))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x9c; 0x24; 0xc8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,456))) (% r11) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xa4; 0x24; 0xd0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,464))) (% r12) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xac; 0x24; 0xd8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,472))) (% r13) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xb4; 0x24; 0xe0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,480))) (% r14) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xbc; 0x24; 0xe8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,488))) (% r15) *) + 0x48; 0x83; 0xdd; 0x00; (* SBB (% rbp) (Imm8 (word 0)) *) + 0x48; 0x81; 0xe5; 0xff; 0x01; 0x00; 0x00; + (* AND (% rbp) (Imm32 (word 511)) *) + 0x48; 0x89; 0xac; 0x24; 0xf0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,496))) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x51; 0x48; (* MOV (% rdx) (Memop Quadword (%% (rcx,72))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x8e; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsi,144))) *) + 0x4c; 0x89; 0x84; 0x24; 0xf8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,504))) (% r8) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x96; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsi,152))) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x9e; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsi,160))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xa6; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsi,168))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xae; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% r13,% rbx) (% rdx,Memop Quadword (%% (rsi,176))) *) + 0x49; 0x11; 0xdc; (* ADC (% r12) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xb6; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r14,% rbx) (% rdx,Memop Quadword (%% (rsi,184))) *) + 0x49; 0x11; 0xdd; (* ADC (% r13) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xbe; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% r15,% rbx) (% rdx,Memop Quadword (%% (rsi,192))) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x86; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% r8,% rbx) (% rdx,Memop Quadword (%% (rsi,200))) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x49; 0x11; 0xe8; (* ADC (% r8) (% rbp) *) + 0x48; 0x8b; 0x51; 0x50; (* MOV (% rdx) (Memop Quadword (%% (rcx,80))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0x4c; 0x89; 0x8c; 0x24; 0x00; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,512))) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x8e; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% r9,% rax) (% rdx,Memop Quadword (%% (rsi,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcd; + (* ADOX (% r9) (% rbp) *) + 0x49; 0x11; 0xe9; (* ADC (% r9) (% rbp) *) + 0x48; 0x8b; 0x51; 0x58; (* MOV (% rdx) (Memop Quadword (%% (rcx,88))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x4c; 0x89; 0x94; 0x24; 0x08; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,520))) (% r10) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x96; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsi,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd5; + (* ADOX (% r10) (% rbp) *) + 0x49; 0x11; 0xea; (* ADC (% r10) (% rbp) *) + 0x48; 0x8b; 0x51; 0x60; (* MOV (% rdx) (Memop Quadword (%% (rcx,96))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x4c; 0x89; 0x9c; 0x24; 0x10; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,528))) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x9e; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsi,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdd; + (* ADOX (% r11) (% rbp) *) + 0x49; 0x11; 0xeb; (* ADC (% r11) (% rbp) *) + 0x48; 0x8b; 0x51; 0x68; (* MOV (% rdx) (Memop Quadword (%% (rcx,104))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4c; 0x89; 0xa4; 0x24; 0x18; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,536))) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xa6; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsi,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe5; + (* ADOX (% r12) (% rbp) *) + 0x49; 0x11; 0xec; (* ADC (% r12) (% rbp) *) + 0x48; 0x8b; 0x51; 0x70; (* MOV (% rdx) (Memop Quadword (%% (rcx,112))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0x4c; 0x89; 0xac; 0x24; 0x20; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,544))) (% r13) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xae; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsi,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xed; + (* ADOX (% r13) (% rbp) *) + 0x49; 0x11; 0xed; (* ADC (% r13) (% rbp) *) + 0x48; 0x8b; 0x51; 0x78; (* MOV (% rdx) (Memop Quadword (%% (rcx,120))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x4c; 0x89; 0xb4; 0x24; 0x28; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,552))) (% r14) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xb6; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsi,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf5; + (* ADOX (% r14) (% rbp) *) + 0x49; 0x11; 0xee; (* ADC (% r14) (% rbp) *) + 0x48; 0x8b; 0x91; 0x80; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rcx,128))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0x4c; 0x89; 0xbc; 0x24; 0x30; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,560))) (% r15) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xbe; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsi,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADOX (% r15) (% rbp) *) + 0x49; 0x11; 0xef; (* ADC (% r15) (% rbp) *) + 0x48; 0x8b; 0x96; 0xd0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,208))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x59; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x59; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x59; 0x58; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x59; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x59; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x59; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x59; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xdd; + (* ADOX (% rbx) (% rbp) *) + 0x48; 0x11; 0xdd; (* ADC (% rbp) (% rbx) *) + 0x48; 0x8b; 0x91; 0x88; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rcx,136))) *) + 0x31; 0xc0; (* XOR (% eax) (% eax) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% rbp) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xd0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,208))) *) + 0x48; 0x11; 0xc5; (* ADC (% rbp) (% rax) *) + 0x4c; 0x89; 0xc0; (* MOV (% rax) (% r8) *) + 0x48; 0x25; 0xff; 0x01; 0x00; 0x00; + (* AND (% rax) (Imm32 (word 511)) *) + 0x4d; 0x0f; 0xac; 0xc8; 0x09; + (* SHRD (% r8) (% r9) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xd1; 0x09; + (* SHRD (% r9) (% r10) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xda; 0x09; + (* SHRD (% r10) (% r11) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xe3; 0x09; + (* SHRD (% r11) (% r12) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xec; 0x09; + (* SHRD (% r12) (% r13) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xf5; 0x09; + (* SHRD (% r13) (% r14) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xfe; 0x09; + (* SHRD (% r14) (% r15) (Imm8 (word 9)) *) + 0x49; 0x0f; 0xac; 0xef; 0x09; + (* SHRD (% r15) (% rbp) (Imm8 (word 9)) *) + 0x48; 0xc1; 0xed; 0x09; (* SHR (% rbp) (Imm8 (word 9)) *) + 0x48; 0x01; 0xc5; (* ADD (% rbp) (% rax) *) + 0xf9; (* STCF *) + 0x4c; 0x13; 0x84; 0x24; 0xf8; 0x01; 0x00; 0x00; + (* ADC (% r8) (Memop Quadword (%% (rsp,504))) *) + 0x4c; 0x13; 0x8c; 0x24; 0x00; 0x02; 0x00; 0x00; + (* ADC (% r9) (Memop Quadword (%% (rsp,512))) *) + 0x4c; 0x13; 0x94; 0x24; 0x08; 0x02; 0x00; 0x00; + (* ADC (% r10) (Memop Quadword (%% (rsp,520))) *) + 0x4c; 0x13; 0x9c; 0x24; 0x10; 0x02; 0x00; 0x00; + (* ADC (% r11) (Memop Quadword (%% (rsp,528))) *) + 0x4c; 0x13; 0xa4; 0x24; 0x18; 0x02; 0x00; 0x00; + (* ADC (% r12) (Memop Quadword (%% (rsp,536))) *) + 0x4c; 0x13; 0xac; 0x24; 0x20; 0x02; 0x00; 0x00; + (* ADC (% r13) (Memop Quadword (%% (rsp,544))) *) + 0x4c; 0x13; 0xb4; 0x24; 0x28; 0x02; 0x00; 0x00; + (* ADC (% r14) (Memop Quadword (%% (rsp,552))) *) + 0x4c; 0x13; 0xbc; 0x24; 0x30; 0x02; 0x00; 0x00; + (* ADC (% r15) (Memop Quadword (%% (rsp,560))) *) + 0x48; 0x81; 0xd5; 0x00; 0xfe; 0xff; 0xff; + (* ADC (% rbp) (Imm32 (word 4294966784)) *) + 0xf5; (* CMC *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x44; 0x24; 0x48; + (* MOV (Memop Quadword (%% (rsp,72))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x4c; 0x24; 0x50; + (* MOV (Memop Quadword (%% (rsp,80))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x54; 0x24; 0x58; + (* MOV (Memop Quadword (%% (rsp,88))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x5c; 0x24; 0x60; + (* MOV (Memop Quadword (%% (rsp,96))) (% r11) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x64; 0x24; 0x68; + (* MOV (Memop Quadword (%% (rsp,104))) (% r12) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x6c; 0x24; 0x70; + (* MOV (Memop Quadword (%% (rsp,112))) (% r13) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x74; 0x24; 0x78; + (* MOV (Memop Quadword (%% (rsp,120))) (% r14) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xbc; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,128))) (% r15) *) + 0x48; 0x83; 0xdd; 0x00; (* SBB (% rbp) (Imm8 (word 0)) *) + 0x48; 0x81; 0xe5; 0xff; 0x01; 0x00; 0x00; + (* AND (% rbp) (Imm32 (word 511)) *) + 0x48; 0x89; 0xac; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,136))) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x11; (* MOV (% rdx) (Memop Quadword (%% (rcx,0))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x0c; 0x24; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x4c; 0x89; 0x84; 0x24; 0xf8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,504))) (% r8) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x54; 0x24; 0x08; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x64; 0x24; 0x18; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x6c; 0x24; 0x20; + (* MULX4 (% r13,% rbx) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x49; 0x11; 0xdc; (* ADC (% r12) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x74; 0x24; 0x28; + (* MULX4 (% r14,% rbx) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x49; 0x11; 0xdd; (* ADC (% r13) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x7c; 0x24; 0x30; + (* MULX4 (% r15,% rbx) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x44; 0x24; 0x38; + (* MULX4 (% r8,% rbx) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x49; 0x11; 0xe8; (* ADC (% r8) (% rbp) *) + 0x48; 0x8b; 0x51; 0x08; (* MOV (% rdx) (Memop Quadword (%% (rcx,8))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0x4c; 0x89; 0x8c; 0x24; 0x00; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,512))) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x4c; 0x24; 0x38; + (* MULX4 (% r9,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcd; + (* ADOX (% r9) (% rbp) *) + 0x49; 0x11; 0xe9; (* ADC (% r9) (% rbp) *) + 0x48; 0x8b; 0x51; 0x10; (* MOV (% rdx) (Memop Quadword (%% (rcx,16))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x4c; 0x89; 0x94; 0x24; 0x08; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,520))) (% r10) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x54; 0x24; 0x38; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd5; + (* ADOX (% r10) (% rbp) *) + 0x49; 0x11; 0xea; (* ADC (% r10) (% rbp) *) + 0x48; 0x8b; 0x51; 0x18; (* MOV (% rdx) (Memop Quadword (%% (rcx,24))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x4c; 0x89; 0x9c; 0x24; 0x10; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,528))) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x5c; 0x24; 0x38; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdd; + (* ADOX (% r11) (% rbp) *) + 0x49; 0x11; 0xeb; (* ADC (% r11) (% rbp) *) + 0x48; 0x8b; 0x51; 0x20; (* MOV (% rdx) (Memop Quadword (%% (rcx,32))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4c; 0x89; 0xa4; 0x24; 0x18; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,536))) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x64; 0x24; 0x38; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe5; + (* ADOX (% r12) (% rbp) *) + 0x49; 0x11; 0xec; (* ADC (% r12) (% rbp) *) + 0x48; 0x8b; 0x51; 0x28; (* MOV (% rdx) (Memop Quadword (%% (rcx,40))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0x4c; 0x89; 0xac; 0x24; 0x20; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,544))) (% r13) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x6c; 0x24; 0x38; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xed; + (* ADOX (% r13) (% rbp) *) + 0x49; 0x11; 0xed; (* ADC (% r13) (% rbp) *) + 0x48; 0x8b; 0x51; 0x30; (* MOV (% rdx) (Memop Quadword (%% (rcx,48))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x4c; 0x89; 0xb4; 0x24; 0x28; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,552))) (% r14) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x74; 0x24; 0x38; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf5; + (* ADOX (% r14) (% rbp) *) + 0x49; 0x11; 0xee; (* ADC (% r14) (% rbp) *) + 0x48; 0x8b; 0x51; 0x38; (* MOV (% rdx) (Memop Quadword (%% (rcx,56))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0x4c; 0x89; 0xbc; 0x24; 0x30; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,560))) (% r15) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x7c; 0x24; 0x38; + (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADOX (% r15) (% rbp) *) + 0x49; 0x11; 0xef; (* ADC (% r15) (% rbp) *) + 0x48; 0x8b; 0x54; 0x24; 0x40; + (* MOV (% rdx) (Memop Quadword (%% (rsp,64))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x19; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x59; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x59; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x59; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x59; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x59; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x59; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x59; 0x38; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xdd; + (* ADOX (% rbx) (% rbp) *) + 0x48; 0x11; 0xdd; (* ADC (% rbp) (% rbx) *) + 0x48; 0x8b; 0x51; 0x40; (* MOV (% rdx) (Memop Quadword (%% (rcx,64))) *) + 0x31; 0xc0; (* XOR (% eax) (% eax) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x38; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% rbp) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x40; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,64))) *) + 0x48; 0x11; 0xc5; (* ADC (% rbp) (% rax) *) + 0x4c; 0x89; 0xc0; (* MOV (% rax) (% r8) *) + 0x48; 0x25; 0xff; 0x01; 0x00; 0x00; + (* AND (% rax) (Imm32 (word 511)) *) + 0x4d; 0x0f; 0xac; 0xc8; 0x09; + (* SHRD (% r8) (% r9) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xd1; 0x09; + (* SHRD (% r9) (% r10) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xda; 0x09; + (* SHRD (% r10) (% r11) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xe3; 0x09; + (* SHRD (% r11) (% r12) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xec; 0x09; + (* SHRD (% r12) (% r13) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xf5; 0x09; + (* SHRD (% r13) (% r14) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xfe; 0x09; + (* SHRD (% r14) (% r15) (Imm8 (word 9)) *) + 0x49; 0x0f; 0xac; 0xef; 0x09; + (* SHRD (% r15) (% rbp) (Imm8 (word 9)) *) + 0x48; 0xc1; 0xed; 0x09; (* SHR (% rbp) (Imm8 (word 9)) *) + 0x48; 0x01; 0xc5; (* ADD (% rbp) (% rax) *) + 0xf9; (* STCF *) + 0x4c; 0x13; 0x84; 0x24; 0xf8; 0x01; 0x00; 0x00; + (* ADC (% r8) (Memop Quadword (%% (rsp,504))) *) + 0x4c; 0x13; 0x8c; 0x24; 0x00; 0x02; 0x00; 0x00; + (* ADC (% r9) (Memop Quadword (%% (rsp,512))) *) + 0x4c; 0x13; 0x94; 0x24; 0x08; 0x02; 0x00; 0x00; + (* ADC (% r10) (Memop Quadword (%% (rsp,520))) *) + 0x4c; 0x13; 0x9c; 0x24; 0x10; 0x02; 0x00; 0x00; + (* ADC (% r11) (Memop Quadword (%% (rsp,528))) *) + 0x4c; 0x13; 0xa4; 0x24; 0x18; 0x02; 0x00; 0x00; + (* ADC (% r12) (Memop Quadword (%% (rsp,536))) *) + 0x4c; 0x13; 0xac; 0x24; 0x20; 0x02; 0x00; 0x00; + (* ADC (% r13) (Memop Quadword (%% (rsp,544))) *) + 0x4c; 0x13; 0xb4; 0x24; 0x28; 0x02; 0x00; 0x00; + (* ADC (% r14) (Memop Quadword (%% (rsp,552))) *) + 0x4c; 0x13; 0xbc; 0x24; 0x30; 0x02; 0x00; 0x00; + (* ADC (% r15) (Memop Quadword (%% (rsp,560))) *) + 0x48; 0x81; 0xd5; 0x00; 0xfe; 0xff; 0xff; + (* ADC (% rbp) (Imm32 (word 4294966784)) *) + 0xf5; (* CMC *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x84; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,144))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x8c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,152))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x94; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,160))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,168))) (% r11) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xa4; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,176))) (% r12) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xac; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,184))) (% r13) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xb4; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,192))) (% r14) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xbc; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,200))) (% r15) *) + 0x48; 0x83; 0xdd; 0x00; (* SBB (% rbp) (Imm8 (word 0)) *) + 0x48; 0x81; 0xe5; 0xff; 0x01; 0x00; 0x00; + (* AND (% rbp) (Imm32 (word 511)) *) + 0x48; 0x89; 0xac; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,208))) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x16; (* MOV (% rdx) (Memop Quadword (%% (rsi,0))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x8c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x4c; 0x89; 0x84; 0x24; 0xf8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,504))) (% r8) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x94; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xa4; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xac; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% r13,% rbx) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x49; 0x11; 0xdc; (* ADC (% r12) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xb4; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% r14,% rbx) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x49; 0x11; 0xdd; (* ADC (% r13) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xbc; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% r15,% rbx) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x84; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% r8,% rbx) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x49; 0x11; 0xe8; (* ADC (% r8) (% rbp) *) + 0x48; 0x8b; 0x56; 0x08; (* MOV (% rdx) (Memop Quadword (%% (rsi,8))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0x4c; 0x89; 0x8c; 0x24; 0x00; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,512))) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x8c; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% r9,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcd; + (* ADOX (% r9) (% rbp) *) + 0x49; 0x11; 0xe9; (* ADC (% r9) (% rbp) *) + 0x48; 0x8b; 0x56; 0x10; (* MOV (% rdx) (Memop Quadword (%% (rsi,16))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x4c; 0x89; 0x94; 0x24; 0x08; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,520))) (% r10) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x94; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd5; + (* ADOX (% r10) (% rbp) *) + 0x49; 0x11; 0xea; (* ADC (% r10) (% rbp) *) + 0x48; 0x8b; 0x56; 0x18; (* MOV (% rdx) (Memop Quadword (%% (rsi,24))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x4c; 0x89; 0x9c; 0x24; 0x10; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,528))) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdd; + (* ADOX (% r11) (% rbp) *) + 0x49; 0x11; 0xeb; (* ADC (% r11) (% rbp) *) + 0x48; 0x8b; 0x56; 0x20; (* MOV (% rdx) (Memop Quadword (%% (rsi,32))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4c; 0x89; 0xa4; 0x24; 0x18; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,536))) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xa4; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe5; + (* ADOX (% r12) (% rbp) *) + 0x49; 0x11; 0xec; (* ADC (% r12) (% rbp) *) + 0x48; 0x8b; 0x56; 0x28; (* MOV (% rdx) (Memop Quadword (%% (rsi,40))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0x4c; 0x89; 0xac; 0x24; 0x20; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,544))) (% r13) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xac; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xed; + (* ADOX (% r13) (% rbp) *) + 0x49; 0x11; 0xed; (* ADC (% r13) (% rbp) *) + 0x48; 0x8b; 0x56; 0x30; (* MOV (% rdx) (Memop Quadword (%% (rsi,48))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x4c; 0x89; 0xb4; 0x24; 0x28; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,552))) (% r14) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xb4; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf5; + (* ADOX (% r14) (% rbp) *) + 0x49; 0x11; 0xee; (* ADC (% r14) (% rbp) *) + 0x48; 0x8b; 0x56; 0x38; (* MOV (% rdx) (Memop Quadword (%% (rsi,56))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0x4c; 0x89; 0xbc; 0x24; 0x30; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,560))) (% r15) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xbc; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADOX (% r15) (% rbp) *) + 0x49; 0x11; 0xef; (* ADC (% r15) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0xa8; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,424))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1e; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x38; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xdd; + (* ADOX (% rbx) (% rbp) *) + 0x48; 0x11; 0xdd; (* ADC (% rbp) (% rbx) *) + 0x48; 0x8b; 0x56; 0x40; (* MOV (% rdx) (Memop Quadword (%% (rsi,64))) *) + 0x31; 0xc0; (* XOR (% eax) (% eax) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% rbp) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,424))) *) + 0x48; 0x11; 0xc5; (* ADC (% rbp) (% rax) *) + 0x4c; 0x89; 0xc0; (* MOV (% rax) (% r8) *) + 0x48; 0x25; 0xff; 0x01; 0x00; 0x00; + (* AND (% rax) (Imm32 (word 511)) *) + 0x4d; 0x0f; 0xac; 0xc8; 0x09; + (* SHRD (% r8) (% r9) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xd1; 0x09; + (* SHRD (% r9) (% r10) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xda; 0x09; + (* SHRD (% r10) (% r11) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xe3; 0x09; + (* SHRD (% r11) (% r12) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xec; 0x09; + (* SHRD (% r12) (% r13) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xf5; 0x09; + (* SHRD (% r13) (% r14) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xfe; 0x09; + (* SHRD (% r14) (% r15) (Imm8 (word 9)) *) + 0x49; 0x0f; 0xac; 0xef; 0x09; + (* SHRD (% r15) (% rbp) (Imm8 (word 9)) *) + 0x48; 0xc1; 0xed; 0x09; (* SHR (% rbp) (Imm8 (word 9)) *) + 0x48; 0x01; 0xc5; (* ADD (% rbp) (% rax) *) + 0xf9; (* STCF *) + 0x4c; 0x13; 0x84; 0x24; 0xf8; 0x01; 0x00; 0x00; + (* ADC (% r8) (Memop Quadword (%% (rsp,504))) *) + 0x4c; 0x13; 0x8c; 0x24; 0x00; 0x02; 0x00; 0x00; + (* ADC (% r9) (Memop Quadword (%% (rsp,512))) *) + 0x4c; 0x13; 0x94; 0x24; 0x08; 0x02; 0x00; 0x00; + (* ADC (% r10) (Memop Quadword (%% (rsp,520))) *) + 0x4c; 0x13; 0x9c; 0x24; 0x10; 0x02; 0x00; 0x00; + (* ADC (% r11) (Memop Quadword (%% (rsp,528))) *) + 0x4c; 0x13; 0xa4; 0x24; 0x18; 0x02; 0x00; 0x00; + (* ADC (% r12) (Memop Quadword (%% (rsp,536))) *) + 0x4c; 0x13; 0xac; 0x24; 0x20; 0x02; 0x00; 0x00; + (* ADC (% r13) (Memop Quadword (%% (rsp,544))) *) + 0x4c; 0x13; 0xb4; 0x24; 0x28; 0x02; 0x00; 0x00; + (* ADC (% r14) (Memop Quadword (%% (rsp,552))) *) + 0x4c; 0x13; 0xbc; 0x24; 0x30; 0x02; 0x00; 0x00; + (* ADC (% r15) (Memop Quadword (%% (rsp,560))) *) + 0x48; 0x81; 0xd5; 0x00; 0xfe; 0xff; 0xff; + (* ADC (% rbp) (Imm32 (word 4294966784)) *) + 0xf5; (* CMC *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x84; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,288))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x8c; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,296))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x94; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,304))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x9c; 0x24; 0x38; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,312))) (% r11) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xa4; 0x24; 0x40; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,320))) (% r12) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xac; 0x24; 0x48; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,328))) (% r13) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xb4; 0x24; 0x50; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,336))) (% r14) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xbc; 0x24; 0x58; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,344))) (% r15) *) + 0x48; 0x83; 0xdd; 0x00; (* SBB (% rbp) (Imm8 (word 0)) *) + 0x48; 0x81; 0xe5; 0xff; 0x01; 0x00; 0x00; + (* AND (% rbp) (Imm32 (word 511)) *) + 0x48; 0x89; 0xac; 0x24; 0x60; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,352))) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x54; 0x24; 0x48; + (* MOV (% rdx) (Memop Quadword (%% (rsp,72))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x0c; 0x24; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x4c; 0x89; 0x84; 0x24; 0xf8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,504))) (% r8) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x54; 0x24; 0x08; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x64; 0x24; 0x18; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x6c; 0x24; 0x20; + (* MULX4 (% r13,% rbx) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x49; 0x11; 0xdc; (* ADC (% r12) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x74; 0x24; 0x28; + (* MULX4 (% r14,% rbx) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x49; 0x11; 0xdd; (* ADC (% r13) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x7c; 0x24; 0x30; + (* MULX4 (% r15,% rbx) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x44; 0x24; 0x38; + (* MULX4 (% r8,% rbx) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x49; 0x11; 0xe8; (* ADC (% r8) (% rbp) *) + 0x48; 0x8b; 0x54; 0x24; 0x50; + (* MOV (% rdx) (Memop Quadword (%% (rsp,80))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0x4c; 0x89; 0x8c; 0x24; 0x00; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,512))) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x4c; 0x24; 0x38; + (* MULX4 (% r9,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcd; + (* ADOX (% r9) (% rbp) *) + 0x49; 0x11; 0xe9; (* ADC (% r9) (% rbp) *) + 0x48; 0x8b; 0x54; 0x24; 0x58; + (* MOV (% rdx) (Memop Quadword (%% (rsp,88))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x4c; 0x89; 0x94; 0x24; 0x08; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,520))) (% r10) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x54; 0x24; 0x38; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd5; + (* ADOX (% r10) (% rbp) *) + 0x49; 0x11; 0xea; (* ADC (% r10) (% rbp) *) + 0x48; 0x8b; 0x54; 0x24; 0x60; + (* MOV (% rdx) (Memop Quadword (%% (rsp,96))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x4c; 0x89; 0x9c; 0x24; 0x10; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,528))) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x5c; 0x24; 0x38; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdd; + (* ADOX (% r11) (% rbp) *) + 0x49; 0x11; 0xeb; (* ADC (% r11) (% rbp) *) + 0x48; 0x8b; 0x54; 0x24; 0x68; + (* MOV (% rdx) (Memop Quadword (%% (rsp,104))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4c; 0x89; 0xa4; 0x24; 0x18; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,536))) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x64; 0x24; 0x38; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe5; + (* ADOX (% r12) (% rbp) *) + 0x49; 0x11; 0xec; (* ADC (% r12) (% rbp) *) + 0x48; 0x8b; 0x54; 0x24; 0x70; + (* MOV (% rdx) (Memop Quadword (%% (rsp,112))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0x4c; 0x89; 0xac; 0x24; 0x20; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,544))) (% r13) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x6c; 0x24; 0x38; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xed; + (* ADOX (% r13) (% rbp) *) + 0x49; 0x11; 0xed; (* ADC (% r13) (% rbp) *) + 0x48; 0x8b; 0x54; 0x24; 0x78; + (* MOV (% rdx) (Memop Quadword (%% (rsp,120))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x4c; 0x89; 0xb4; 0x24; 0x28; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,552))) (% r14) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x74; 0x24; 0x38; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf5; + (* ADOX (% r14) (% rbp) *) + 0x49; 0x11; 0xee; (* ADC (% r14) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,128))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0x4c; 0x89; 0xbc; 0x24; 0x30; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,560))) (% r15) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x7c; 0x24; 0x38; + (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADOX (% r15) (% rbp) *) + 0x49; 0x11; 0xef; (* ADC (% r15) (% rbp) *) + 0x48; 0x8b; 0x54; 0x24; 0x40; + (* MOV (% rdx) (Memop Quadword (%% (rsp,64))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x58; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xdd; + (* ADOX (% rbx) (% rbp) *) + 0x48; 0x11; 0xdd; (* ADC (% rbp) (% rbx) *) + 0x48; 0x8b; 0x94; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,136))) *) + 0x31; 0xc0; (* XOR (% eax) (% eax) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x38; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% rbp) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x40; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,64))) *) + 0x48; 0x11; 0xc5; (* ADC (% rbp) (% rax) *) + 0x4c; 0x89; 0xc0; (* MOV (% rax) (% r8) *) + 0x48; 0x25; 0xff; 0x01; 0x00; 0x00; + (* AND (% rax) (Imm32 (word 511)) *) + 0x4d; 0x0f; 0xac; 0xc8; 0x09; + (* SHRD (% r8) (% r9) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xd1; 0x09; + (* SHRD (% r9) (% r10) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xda; 0x09; + (* SHRD (% r10) (% r11) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xe3; 0x09; + (* SHRD (% r11) (% r12) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xec; 0x09; + (* SHRD (% r12) (% r13) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xf5; 0x09; + (* SHRD (% r13) (% r14) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xfe; 0x09; + (* SHRD (% r14) (% r15) (Imm8 (word 9)) *) + 0x49; 0x0f; 0xac; 0xef; 0x09; + (* SHRD (% r15) (% rbp) (Imm8 (word 9)) *) + 0x48; 0xc1; 0xed; 0x09; (* SHR (% rbp) (Imm8 (word 9)) *) + 0x48; 0x01; 0xc5; (* ADD (% rbp) (% rax) *) + 0xf9; (* STCF *) + 0x4c; 0x13; 0x84; 0x24; 0xf8; 0x01; 0x00; 0x00; + (* ADC (% r8) (Memop Quadword (%% (rsp,504))) *) + 0x4c; 0x13; 0x8c; 0x24; 0x00; 0x02; 0x00; 0x00; + (* ADC (% r9) (Memop Quadword (%% (rsp,512))) *) + 0x4c; 0x13; 0x94; 0x24; 0x08; 0x02; 0x00; 0x00; + (* ADC (% r10) (Memop Quadword (%% (rsp,520))) *) + 0x4c; 0x13; 0x9c; 0x24; 0x10; 0x02; 0x00; 0x00; + (* ADC (% r11) (Memop Quadword (%% (rsp,528))) *) + 0x4c; 0x13; 0xa4; 0x24; 0x18; 0x02; 0x00; 0x00; + (* ADC (% r12) (Memop Quadword (%% (rsp,536))) *) + 0x4c; 0x13; 0xac; 0x24; 0x20; 0x02; 0x00; 0x00; + (* ADC (% r13) (Memop Quadword (%% (rsp,544))) *) + 0x4c; 0x13; 0xb4; 0x24; 0x28; 0x02; 0x00; 0x00; + (* ADC (% r14) (Memop Quadword (%% (rsp,552))) *) + 0x4c; 0x13; 0xbc; 0x24; 0x30; 0x02; 0x00; 0x00; + (* ADC (% r15) (Memop Quadword (%% (rsp,560))) *) + 0x48; 0x81; 0xd5; 0x00; 0xfe; 0xff; 0xff; + (* ADC (% rbp) (Imm32 (word 4294966784)) *) + 0xf5; (* CMC *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x44; 0x24; 0x48; + (* MOV (Memop Quadword (%% (rsp,72))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x4c; 0x24; 0x50; + (* MOV (Memop Quadword (%% (rsp,80))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x54; 0x24; 0x58; + (* MOV (Memop Quadword (%% (rsp,88))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x5c; 0x24; 0x60; + (* MOV (Memop Quadword (%% (rsp,96))) (% r11) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x64; 0x24; 0x68; + (* MOV (Memop Quadword (%% (rsp,104))) (% r12) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x6c; 0x24; 0x70; + (* MOV (Memop Quadword (%% (rsp,112))) (% r13) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x74; 0x24; 0x78; + (* MOV (Memop Quadword (%% (rsp,120))) (% r14) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xbc; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,128))) (% r15) *) + 0x48; 0x83; 0xdd; 0x00; (* SBB (% rbp) (Imm8 (word 0)) *) + 0x48; 0x81; 0xe5; 0xff; 0x01; 0x00; 0x00; + (* AND (% rbp) (Imm32 (word 511)) *) + 0x48; 0x89; 0xac; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,136))) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x94; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,432))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x8c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x4c; 0x89; 0x84; 0x24; 0xf8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,504))) (% r8) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x94; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xa4; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xac; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% r13,% rbx) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x49; 0x11; 0xdc; (* ADC (% r12) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xb4; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% r14,% rbx) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x49; 0x11; 0xdd; (* ADC (% r13) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xbc; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% r15,% rbx) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x84; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% r8,% rbx) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x49; 0x11; 0xe8; (* ADC (% r8) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,440))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0x4c; 0x89; 0x8c; 0x24; 0x00; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,512))) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x8c; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% r9,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcd; + (* ADOX (% r9) (% rbp) *) + 0x49; 0x11; 0xe9; (* ADC (% r9) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0xc0; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,448))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x4c; 0x89; 0x94; 0x24; 0x08; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,520))) (% r10) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x94; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd5; + (* ADOX (% r10) (% rbp) *) + 0x49; 0x11; 0xea; (* ADC (% r10) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0xc8; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,456))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x4c; 0x89; 0x9c; 0x24; 0x10; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,528))) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdd; + (* ADOX (% r11) (% rbp) *) + 0x49; 0x11; 0xeb; (* ADC (% r11) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0xd0; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,464))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4c; 0x89; 0xa4; 0x24; 0x18; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,536))) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xa4; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe5; + (* ADOX (% r12) (% rbp) *) + 0x49; 0x11; 0xec; (* ADC (% r12) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0xd8; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,472))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0x4c; 0x89; 0xac; 0x24; 0x20; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,544))) (% r13) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xac; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xed; + (* ADOX (% r13) (% rbp) *) + 0x49; 0x11; 0xed; (* ADC (% r13) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0xe0; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,480))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x4c; 0x89; 0xb4; 0x24; 0x28; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,552))) (% r14) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xb4; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf5; + (* ADOX (% r14) (% rbp) *) + 0x49; 0x11; 0xee; (* ADC (% r14) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0xe8; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,488))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0x4c; 0x89; 0xbc; 0x24; 0x30; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,560))) (% r15) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xbc; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADOX (% r15) (% rbp) *) + 0x49; 0x11; 0xef; (* ADC (% r15) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0xa8; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,424))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,432))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,440))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xc0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,448))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xc8; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,456))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,464))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,472))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,480))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe8; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,488))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xdd; + (* ADOX (% rbx) (% rbp) *) + 0x48; 0x11; 0xdd; (* ADC (% rbp) (% rbx) *) + 0x48; 0x8b; 0x94; 0x24; 0xf0; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,496))) *) + 0x31; 0xc0; (* XOR (% eax) (% eax) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% rbp) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,424))) *) + 0x48; 0x11; 0xc5; (* ADC (% rbp) (% rax) *) + 0x4c; 0x89; 0xc0; (* MOV (% rax) (% r8) *) + 0x48; 0x25; 0xff; 0x01; 0x00; 0x00; + (* AND (% rax) (Imm32 (word 511)) *) + 0x4d; 0x0f; 0xac; 0xc8; 0x09; + (* SHRD (% r8) (% r9) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xd1; 0x09; + (* SHRD (% r9) (% r10) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xda; 0x09; + (* SHRD (% r10) (% r11) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xe3; 0x09; + (* SHRD (% r11) (% r12) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xec; 0x09; + (* SHRD (% r12) (% r13) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xf5; 0x09; + (* SHRD (% r13) (% r14) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xfe; 0x09; + (* SHRD (% r14) (% r15) (Imm8 (word 9)) *) + 0x49; 0x0f; 0xac; 0xef; 0x09; + (* SHRD (% r15) (% rbp) (Imm8 (word 9)) *) + 0x48; 0xc1; 0xed; 0x09; (* SHR (% rbp) (Imm8 (word 9)) *) + 0x48; 0x01; 0xc5; (* ADD (% rbp) (% rax) *) + 0xf9; (* STCF *) + 0x4c; 0x13; 0x84; 0x24; 0xf8; 0x01; 0x00; 0x00; + (* ADC (% r8) (Memop Quadword (%% (rsp,504))) *) + 0x4c; 0x13; 0x8c; 0x24; 0x00; 0x02; 0x00; 0x00; + (* ADC (% r9) (Memop Quadword (%% (rsp,512))) *) + 0x4c; 0x13; 0x94; 0x24; 0x08; 0x02; 0x00; 0x00; + (* ADC (% r10) (Memop Quadword (%% (rsp,520))) *) + 0x4c; 0x13; 0x9c; 0x24; 0x10; 0x02; 0x00; 0x00; + (* ADC (% r11) (Memop Quadword (%% (rsp,528))) *) + 0x4c; 0x13; 0xa4; 0x24; 0x18; 0x02; 0x00; 0x00; + (* ADC (% r12) (Memop Quadword (%% (rsp,536))) *) + 0x4c; 0x13; 0xac; 0x24; 0x20; 0x02; 0x00; 0x00; + (* ADC (% r13) (Memop Quadword (%% (rsp,544))) *) + 0x4c; 0x13; 0xb4; 0x24; 0x28; 0x02; 0x00; 0x00; + (* ADC (% r14) (Memop Quadword (%% (rsp,552))) *) + 0x4c; 0x13; 0xbc; 0x24; 0x30; 0x02; 0x00; 0x00; + (* ADC (% r15) (Memop Quadword (%% (rsp,560))) *) + 0x48; 0x81; 0xd5; 0x00; 0xfe; 0xff; 0xff; + (* ADC (% rbp) (Imm32 (word 4294966784)) *) + 0xf5; (* CMC *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x84; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,432))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x8c; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,440))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x94; 0x24; 0xc0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,448))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x9c; 0x24; 0xc8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,456))) (% r11) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xa4; 0x24; 0xd0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,464))) (% r12) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xac; 0x24; 0xd8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,472))) (% r13) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xb4; 0x24; 0xe0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,480))) (% r14) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xbc; 0x24; 0xe8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,488))) (% r15) *) + 0x48; 0x83; 0xdd; 0x00; (* SBB (% rbp) (Imm8 (word 0)) *) + 0x48; 0x81; 0xe5; 0xff; 0x01; 0x00; 0x00; + (* AND (% rbp) (Imm32 (word 511)) *) + 0x48; 0x89; 0xac; 0x24; 0xf0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,496))) (% rbp) *) + 0x48; 0x8b; 0x84; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,144))) *) + 0x48; 0x2b; 0x84; 0x24; 0x20; 0x01; 0x00; 0x00; + (* SUB (% rax) (Memop Quadword (%% (rsp,288))) *) + 0x48; 0x8b; 0x94; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,152))) *) + 0x48; 0x1b; 0x94; 0x24; 0x28; 0x01; 0x00; 0x00; + (* SBB (% rdx) (Memop Quadword (%% (rsp,296))) *) + 0x4c; 0x8b; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (% r8) (Memop Quadword (%% (rsp,160))) *) + 0x4c; 0x1b; 0x84; 0x24; 0x30; 0x01; 0x00; 0x00; + (* SBB (% r8) (Memop Quadword (%% (rsp,304))) *) + 0x4c; 0x8b; 0x8c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (% r9) (Memop Quadword (%% (rsp,168))) *) + 0x4c; 0x1b; 0x8c; 0x24; 0x38; 0x01; 0x00; 0x00; + (* SBB (% r9) (Memop Quadword (%% (rsp,312))) *) + 0x4c; 0x8b; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (% r10) (Memop Quadword (%% (rsp,176))) *) + 0x4c; 0x1b; 0x94; 0x24; 0x40; 0x01; 0x00; 0x00; + (* SBB (% r10) (Memop Quadword (%% (rsp,320))) *) + 0x4c; 0x8b; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (% r11) (Memop Quadword (%% (rsp,184))) *) + 0x4c; 0x1b; 0x9c; 0x24; 0x48; 0x01; 0x00; 0x00; + (* SBB (% r11) (Memop Quadword (%% (rsp,328))) *) + 0x4c; 0x8b; 0xa4; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (% r12) (Memop Quadword (%% (rsp,192))) *) + 0x4c; 0x1b; 0xa4; 0x24; 0x50; 0x01; 0x00; 0x00; + (* SBB (% r12) (Memop Quadword (%% (rsp,336))) *) + 0x4c; 0x8b; 0xac; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (% r13) (Memop Quadword (%% (rsp,200))) *) + 0x4c; 0x1b; 0xac; 0x24; 0x58; 0x01; 0x00; 0x00; + (* SBB (% r13) (Memop Quadword (%% (rsp,344))) *) + 0x4c; 0x8b; 0xb4; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (% r14) (Memop Quadword (%% (rsp,208))) *) + 0x4c; 0x1b; 0xb4; 0x24; 0x60; 0x01; 0x00; 0x00; + (* SBB (% r14) (Memop Quadword (%% (rsp,352))) *) + 0x48; 0x83; 0xd8; 0x00; (* SBB (% rax) (Imm8 (word 0)) *) + 0x48; 0x89; 0x84; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,360))) (% rax) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x48; 0x89; 0x94; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,368))) (% rdx) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x84; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,376))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x8c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,384))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x94; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,392))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,400))) (% r11) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xa4; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,408))) (% r12) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xac; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,416))) (% r13) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x49; 0x81; 0xe6; 0xff; 0x01; 0x00; 0x00; + (* AND (% r14) (Imm32 (word 511)) *) + 0x4c; 0x89; 0xb4; 0x24; 0xa8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,424))) (% r14) *) + 0x48; 0x8b; 0x44; 0x24; 0x48; + (* MOV (% rax) (Memop Quadword (%% (rsp,72))) *) + 0x48; 0x2b; 0x84; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* SUB (% rax) (Memop Quadword (%% (rsp,432))) *) + 0x48; 0x8b; 0x54; 0x24; 0x50; + (* MOV (% rdx) (Memop Quadword (%% (rsp,80))) *) + 0x48; 0x1b; 0x94; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* SBB (% rdx) (Memop Quadword (%% (rsp,440))) *) + 0x4c; 0x8b; 0x44; 0x24; 0x58; + (* MOV (% r8) (Memop Quadword (%% (rsp,88))) *) + 0x4c; 0x1b; 0x84; 0x24; 0xc0; 0x01; 0x00; 0x00; + (* SBB (% r8) (Memop Quadword (%% (rsp,448))) *) + 0x4c; 0x8b; 0x4c; 0x24; 0x60; + (* MOV (% r9) (Memop Quadword (%% (rsp,96))) *) + 0x4c; 0x1b; 0x8c; 0x24; 0xc8; 0x01; 0x00; 0x00; + (* SBB (% r9) (Memop Quadword (%% (rsp,456))) *) + 0x4c; 0x8b; 0x54; 0x24; 0x68; + (* MOV (% r10) (Memop Quadword (%% (rsp,104))) *) + 0x4c; 0x1b; 0x94; 0x24; 0xd0; 0x01; 0x00; 0x00; + (* SBB (% r10) (Memop Quadword (%% (rsp,464))) *) + 0x4c; 0x8b; 0x5c; 0x24; 0x70; + (* MOV (% r11) (Memop Quadword (%% (rsp,112))) *) + 0x4c; 0x1b; 0x9c; 0x24; 0xd8; 0x01; 0x00; 0x00; + (* SBB (% r11) (Memop Quadword (%% (rsp,472))) *) + 0x4c; 0x8b; 0x64; 0x24; 0x78; + (* MOV (% r12) (Memop Quadword (%% (rsp,120))) *) + 0x4c; 0x1b; 0xa4; 0x24; 0xe0; 0x01; 0x00; 0x00; + (* SBB (% r12) (Memop Quadword (%% (rsp,480))) *) + 0x4c; 0x8b; 0xac; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (% r13) (Memop Quadword (%% (rsp,128))) *) + 0x4c; 0x1b; 0xac; 0x24; 0xe8; 0x01; 0x00; 0x00; + (* SBB (% r13) (Memop Quadword (%% (rsp,488))) *) + 0x4c; 0x8b; 0xb4; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (% r14) (Memop Quadword (%% (rsp,136))) *) + 0x4c; 0x1b; 0xb4; 0x24; 0xf0; 0x01; 0x00; 0x00; + (* SBB (% r14) (Memop Quadword (%% (rsp,496))) *) + 0x48; 0x83; 0xd8; 0x00; (* SBB (% rax) (Imm8 (word 0)) *) + 0x48; 0x89; 0x44; 0x24; 0x48; + (* MOV (Memop Quadword (%% (rsp,72))) (% rax) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x48; 0x89; 0x54; 0x24; 0x50; + (* MOV (Memop Quadword (%% (rsp,80))) (% rdx) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x44; 0x24; 0x58; + (* MOV (Memop Quadword (%% (rsp,88))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x4c; 0x24; 0x60; + (* MOV (Memop Quadword (%% (rsp,96))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x54; 0x24; 0x68; + (* MOV (Memop Quadword (%% (rsp,104))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x5c; 0x24; 0x70; + (* MOV (Memop Quadword (%% (rsp,112))) (% r11) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x64; 0x24; 0x78; + (* MOV (Memop Quadword (%% (rsp,120))) (% r12) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xac; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,128))) (% r13) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x49; 0x81; 0xe6; 0xff; 0x01; 0x00; 0x00; + (* AND (% r14) (Imm32 (word 511)) *) + 0x4c; 0x89; 0xb4; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,136))) (% r14) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x94; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,360))) *) + 0xc4; 0xe2; 0xb3; 0xf6; 0x84; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rax,% r9) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x4c; 0x89; 0x8c; 0x24; 0x00; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,512))) (% r9) *) + 0xc4; 0xe2; 0xab; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% r10) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0x4c; 0x89; 0x94; 0x24; 0x08; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,520))) (% r10) *) + 0xc4; 0xe2; 0xa3; 0xf6; 0x84; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rax,% r11) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% rbx) *) + 0xc4; 0xe2; 0x9b; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% r12) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xc4; 0xe2; 0x93; 0xf6; 0x84; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rax,% r13) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADCX (% r13) (% rbx) *) + 0xc4; 0xe2; 0x8b; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% r14) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xc4; 0x62; 0x83; 0xf6; 0x84; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% r8,% r15) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADCX (% r15) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc5; + (* ADCX (% r8) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x94; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,368))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x4c; 0x89; 0x9c; 0x24; 0x10; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,528))) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4c; 0x89; 0xa4; 0x24; 0x18; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,536))) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x8c; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% r9,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcd; + (* ADOX (% r9) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,392))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x94; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd5; + (* ADOX (% r10) (% rbp) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd5; + (* ADCX (% r10) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x94; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,376))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0x4c; 0x89; 0xac; 0x24; 0x20; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,544))) (% r13) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x4c; 0x89; 0xb4; 0x24; 0x28; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,552))) (% r14) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0x48; 0x8b; 0x94; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,408))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdd; + (* ADOX (% r11) (% rbp) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xa4; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe5; + (* ADOX (% r12) (% rbp) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe5; + (* ADCX (% r12) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x94; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,384))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0x4c; 0x89; 0xbc; 0x24; 0x30; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,560))) (% r15) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0x8b; 0x94; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,416))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xac; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xed; + (* ADOX (% r13) (% rbp) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xb4; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf5; + (* ADOX (% r14) (% rbp) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf5; + (* ADCX (% r14) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x94; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,360))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% rdx) *) + 0x48; 0x89; 0x84; 0x24; 0xf8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,504))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x00; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,512))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% rax) (% rbx) *) + 0x48; 0x89; 0x84; 0x24; 0x00; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,512))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x08; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,520))) *) + 0x48; 0x8b; 0x94; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,368))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc2; + (* ADOX (% rax) (% rdx) *) + 0x48; 0x89; 0x84; 0x24; 0x08; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,520))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x10; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,528))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% rax) (% rbx) *) + 0x48; 0x89; 0x84; 0x24; 0x10; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,528))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x18; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,536))) *) + 0x48; 0x8b; 0x94; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,376))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc2; + (* ADOX (% rax) (% rdx) *) + 0x48; 0x89; 0x84; 0x24; 0x18; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,536))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x20; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,544))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% rax) (% rbx) *) + 0x48; 0x89; 0x84; 0x24; 0x20; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,544))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x28; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,552))) *) + 0x48; 0x8b; 0x94; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,384))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc2; + (* ADOX (% rax) (% rdx) *) + 0x48; 0x89; 0x84; 0x24; 0x28; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,552))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x30; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,560))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% rax) (% rbx) *) + 0x48; 0x89; 0x84; 0x24; 0x30; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,560))) (% rax) *) + 0x48; 0x8b; 0x94; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,392))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% r8) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc2; + (* ADOX (% r8) (% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% r9) (% r9) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0x48; 0x8b; 0x94; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,400))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xd2; + (* ADCX (% r10) (% r10) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd2; + (* ADOX (% r10) (% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% r11) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0x8b; 0x94; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,408))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xe4; + (* ADCX (% r12) (% r12) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe2; + (* ADOX (% r12) (% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% r13) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0x8b; 0x94; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,416))) *) + 0xc4; 0x62; 0xeb; 0xf6; 0xfa; + (* MULX4 (% r15,% rdx) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf6; + (* ADCX (% r14) (% r14) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf2; + (* ADOX (% r14) (% rdx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADCX (% r15) (% rbp) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADOX (% r15) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0xa8; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,424))) *) + 0x48; 0x89; 0xd5; (* MOV (% rbp) (% rdx) *) + 0x48; 0x0f; 0xaf; 0xed; (* IMUL (% rbp) (% rbp) *) + 0x48; 0x01; 0xd2; (* ADD (% rdx) (% rdx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% rbp) (% rbx) *) + 0x48; 0x83; 0xd5; 0x00; (* ADC (% rbp) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xc0; (* MOV (% rax) (% r8) *) + 0x48; 0x25; 0xff; 0x01; 0x00; 0x00; + (* AND (% rax) (Imm32 (word 511)) *) + 0x4d; 0x0f; 0xac; 0xc8; 0x09; + (* SHRD (% r8) (% r9) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xd1; 0x09; + (* SHRD (% r9) (% r10) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xda; 0x09; + (* SHRD (% r10) (% r11) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xe3; 0x09; + (* SHRD (% r11) (% r12) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xec; 0x09; + (* SHRD (% r12) (% r13) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xf5; 0x09; + (* SHRD (% r13) (% r14) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xfe; 0x09; + (* SHRD (% r14) (% r15) (Imm8 (word 9)) *) + 0x49; 0x0f; 0xac; 0xef; 0x09; + (* SHRD (% r15) (% rbp) (Imm8 (word 9)) *) + 0x48; 0xc1; 0xed; 0x09; (* SHR (% rbp) (Imm8 (word 9)) *) + 0x48; 0x01; 0xc5; (* ADD (% rbp) (% rax) *) + 0xf9; (* STCF *) + 0x4c; 0x13; 0x84; 0x24; 0xf8; 0x01; 0x00; 0x00; + (* ADC (% r8) (Memop Quadword (%% (rsp,504))) *) + 0x4c; 0x13; 0x8c; 0x24; 0x00; 0x02; 0x00; 0x00; + (* ADC (% r9) (Memop Quadword (%% (rsp,512))) *) + 0x4c; 0x13; 0x94; 0x24; 0x08; 0x02; 0x00; 0x00; + (* ADC (% r10) (Memop Quadword (%% (rsp,520))) *) + 0x4c; 0x13; 0x9c; 0x24; 0x10; 0x02; 0x00; 0x00; + (* ADC (% r11) (Memop Quadword (%% (rsp,528))) *) + 0x4c; 0x13; 0xa4; 0x24; 0x18; 0x02; 0x00; 0x00; + (* ADC (% r12) (Memop Quadword (%% (rsp,536))) *) + 0x4c; 0x13; 0xac; 0x24; 0x20; 0x02; 0x00; 0x00; + (* ADC (% r13) (Memop Quadword (%% (rsp,544))) *) + 0x4c; 0x13; 0xb4; 0x24; 0x28; 0x02; 0x00; 0x00; + (* ADC (% r14) (Memop Quadword (%% (rsp,552))) *) + 0x4c; 0x13; 0xbc; 0x24; 0x30; 0x02; 0x00; 0x00; + (* ADC (% r15) (Memop Quadword (%% (rsp,560))) *) + 0x48; 0x81; 0xd5; 0x00; 0xfe; 0xff; 0xff; + (* ADC (% rbp) (Imm32 (word 4294966784)) *) + 0xf5; (* CMC *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x84; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,216))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x8c; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,224))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x94; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,232))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,240))) (% r11) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xa4; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,248))) (% r12) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xac; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,256))) (% r13) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xb4; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,264))) (% r14) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xbc; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,272))) (% r15) *) + 0x48; 0x83; 0xdd; 0x00; (* SBB (% rbp) (Imm8 (word 0)) *) + 0x48; 0x81; 0xe5; 0xff; 0x01; 0x00; 0x00; + (* AND (% rbp) (Imm32 (word 511)) *) + 0x48; 0x89; 0xac; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,280))) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x54; 0x24; 0x48; + (* MOV (% rdx) (Memop Quadword (%% (rsp,72))) *) + 0xc4; 0xe2; 0xb3; 0xf6; 0x44; 0x24; 0x50; + (* MULX4 (% rax,% r9) (% rdx,Memop Quadword (%% (rsp,80))) *) + 0x4c; 0x89; 0x8c; 0x24; 0x00; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,512))) (% r9) *) + 0xc4; 0xe2; 0xab; 0xf6; 0x5c; 0x24; 0x58; + (* MULX4 (% rbx,% r10) (% rdx,Memop Quadword (%% (rsp,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0x4c; 0x89; 0x94; 0x24; 0x08; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,520))) (% r10) *) + 0xc4; 0xe2; 0xa3; 0xf6; 0x44; 0x24; 0x60; + (* MULX4 (% rax,% r11) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% rbx) *) + 0xc4; 0xe2; 0x9b; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% r12) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xc4; 0xe2; 0x93; 0xf6; 0x44; 0x24; 0x70; + (* MULX4 (% rax,% r13) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADCX (% r13) (% rbx) *) + 0xc4; 0xe2; 0x8b; 0xf6; 0x5c; 0x24; 0x78; + (* MULX4 (% rbx,% r14) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xc4; 0x62; 0x83; 0xf6; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% r8,% r15) (% rdx,Memop Quadword (%% (rsp,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADCX (% r15) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc5; + (* ADCX (% r8) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x54; 0x24; 0x50; + (* MOV (% rdx) (Memop Quadword (%% (rsp,80))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x58; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x4c; 0x89; 0x9c; 0x24; 0x10; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,528))) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4c; 0x89; 0xa4; 0x24; 0x18; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,536))) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x8c; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% r9,% rax) (% rdx,Memop Quadword (%% (rsp,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcd; + (* ADOX (% r9) (% rbp) *) + 0x48; 0x8b; 0x54; 0x24; 0x68; + (* MOV (% rdx) (Memop Quadword (%% (rsp,104))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x54; 0x24; 0x70; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd5; + (* ADOX (% r10) (% rbp) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd5; + (* ADCX (% r10) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x54; 0x24; 0x58; + (* MOV (% rdx) (Memop Quadword (%% (rsp,88))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0x4c; 0x89; 0xac; 0x24; 0x20; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,544))) (% r13) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x4c; 0x89; 0xb4; 0x24; 0x28; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,552))) (% r14) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0x48; 0x8b; 0x54; 0x24; 0x78; + (* MOV (% rdx) (Memop Quadword (%% (rsp,120))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdd; + (* ADOX (% r11) (% rbp) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x64; 0x24; 0x70; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe5; + (* ADOX (% r12) (% rbp) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe5; + (* ADCX (% r12) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x54; 0x24; 0x60; + (* MOV (% rdx) (Memop Quadword (%% (rsp,96))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0x4c; 0x89; 0xbc; 0x24; 0x30; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,560))) (% r15) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0x8b; 0x94; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,128))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x6c; 0x24; 0x70; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xed; + (* ADOX (% r13) (% rbp) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x74; 0x24; 0x78; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf5; + (* ADOX (% r14) (% rbp) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf5; + (* ADCX (% r14) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x54; 0x24; 0x48; + (* MOV (% rdx) (Memop Quadword (%% (rsp,72))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% rdx) *) + 0x48; 0x89; 0x84; 0x24; 0xf8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,504))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x00; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,512))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% rax) (% rbx) *) + 0x48; 0x89; 0x84; 0x24; 0x00; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,512))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x08; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,520))) *) + 0x48; 0x8b; 0x54; 0x24; 0x50; + (* MOV (% rdx) (Memop Quadword (%% (rsp,80))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc2; + (* ADOX (% rax) (% rdx) *) + 0x48; 0x89; 0x84; 0x24; 0x08; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,520))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x10; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,528))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% rax) (% rbx) *) + 0x48; 0x89; 0x84; 0x24; 0x10; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,528))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x18; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,536))) *) + 0x48; 0x8b; 0x54; 0x24; 0x58; + (* MOV (% rdx) (Memop Quadword (%% (rsp,88))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc2; + (* ADOX (% rax) (% rdx) *) + 0x48; 0x89; 0x84; 0x24; 0x18; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,536))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x20; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,544))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% rax) (% rbx) *) + 0x48; 0x89; 0x84; 0x24; 0x20; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,544))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x28; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,552))) *) + 0x48; 0x8b; 0x54; 0x24; 0x60; + (* MOV (% rdx) (Memop Quadword (%% (rsp,96))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc2; + (* ADOX (% rax) (% rdx) *) + 0x48; 0x89; 0x84; 0x24; 0x28; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,552))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x30; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,560))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% rax) (% rbx) *) + 0x48; 0x89; 0x84; 0x24; 0x30; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,560))) (% rax) *) + 0x48; 0x8b; 0x54; 0x24; 0x68; + (* MOV (% rdx) (Memop Quadword (%% (rsp,104))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% r8) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc2; + (* ADOX (% r8) (% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% r9) (% r9) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0x48; 0x8b; 0x54; 0x24; 0x70; + (* MOV (% rdx) (Memop Quadword (%% (rsp,112))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xd2; + (* ADCX (% r10) (% r10) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd2; + (* ADOX (% r10) (% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% r11) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0x8b; 0x54; 0x24; 0x78; + (* MOV (% rdx) (Memop Quadword (%% (rsp,120))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xe4; + (* ADCX (% r12) (% r12) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe2; + (* ADOX (% r12) (% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% r13) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0x8b; 0x94; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,128))) *) + 0xc4; 0x62; 0xeb; 0xf6; 0xfa; + (* MULX4 (% r15,% rdx) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf6; + (* ADCX (% r14) (% r14) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf2; + (* ADOX (% r14) (% rdx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADCX (% r15) (% rbp) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADOX (% r15) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,136))) *) + 0x48; 0x89; 0xd5; (* MOV (% rbp) (% rdx) *) + 0x48; 0x0f; 0xaf; 0xed; (* IMUL (% rbp) (% rbp) *) + 0x48; 0x01; 0xd2; (* ADD (% rdx) (% rdx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x58; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% rbp) (% rbx) *) + 0x48; 0x83; 0xd5; 0x00; (* ADC (% rbp) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xc0; (* MOV (% rax) (% r8) *) + 0x48; 0x25; 0xff; 0x01; 0x00; 0x00; + (* AND (% rax) (Imm32 (word 511)) *) + 0x4d; 0x0f; 0xac; 0xc8; 0x09; + (* SHRD (% r8) (% r9) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xd1; 0x09; + (* SHRD (% r9) (% r10) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xda; 0x09; + (* SHRD (% r10) (% r11) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xe3; 0x09; + (* SHRD (% r11) (% r12) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xec; 0x09; + (* SHRD (% r12) (% r13) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xf5; 0x09; + (* SHRD (% r13) (% r14) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xfe; 0x09; + (* SHRD (% r14) (% r15) (Imm8 (word 9)) *) + 0x49; 0x0f; 0xac; 0xef; 0x09; + (* SHRD (% r15) (% rbp) (Imm8 (word 9)) *) + 0x48; 0xc1; 0xed; 0x09; (* SHR (% rbp) (Imm8 (word 9)) *) + 0x48; 0x01; 0xc5; (* ADD (% rbp) (% rax) *) + 0xf9; (* STCF *) + 0x4c; 0x13; 0x84; 0x24; 0xf8; 0x01; 0x00; 0x00; + (* ADC (% r8) (Memop Quadword (%% (rsp,504))) *) + 0x4c; 0x13; 0x8c; 0x24; 0x00; 0x02; 0x00; 0x00; + (* ADC (% r9) (Memop Quadword (%% (rsp,512))) *) + 0x4c; 0x13; 0x94; 0x24; 0x08; 0x02; 0x00; 0x00; + (* ADC (% r10) (Memop Quadword (%% (rsp,520))) *) + 0x4c; 0x13; 0x9c; 0x24; 0x10; 0x02; 0x00; 0x00; + (* ADC (% r11) (Memop Quadword (%% (rsp,528))) *) + 0x4c; 0x13; 0xa4; 0x24; 0x18; 0x02; 0x00; 0x00; + (* ADC (% r12) (Memop Quadword (%% (rsp,536))) *) + 0x4c; 0x13; 0xac; 0x24; 0x20; 0x02; 0x00; 0x00; + (* ADC (% r13) (Memop Quadword (%% (rsp,544))) *) + 0x4c; 0x13; 0xb4; 0x24; 0x28; 0x02; 0x00; 0x00; + (* ADC (% r14) (Memop Quadword (%% (rsp,552))) *) + 0x4c; 0x13; 0xbc; 0x24; 0x30; 0x02; 0x00; 0x00; + (* ADC (% r15) (Memop Quadword (%% (rsp,560))) *) + 0x48; 0x81; 0xd5; 0x00; 0xfe; 0xff; 0xff; + (* ADC (% rbp) (Imm32 (word 4294966784)) *) + 0xf5; (* CMC *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x04; 0x24; (* MOV (Memop Quadword (%% (rsp,0))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x4c; 0x24; 0x08; + (* MOV (Memop Quadword (%% (rsp,8))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x54; 0x24; 0x10; + (* MOV (Memop Quadword (%% (rsp,16))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x5c; 0x24; 0x18; + (* MOV (Memop Quadword (%% (rsp,24))) (% r11) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x64; 0x24; 0x20; + (* MOV (Memop Quadword (%% (rsp,32))) (% r12) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x6c; 0x24; 0x28; + (* MOV (Memop Quadword (%% (rsp,40))) (% r13) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x74; 0x24; 0x30; + (* MOV (Memop Quadword (%% (rsp,48))) (% r14) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x7c; 0x24; 0x38; + (* MOV (Memop Quadword (%% (rsp,56))) (% r15) *) + 0x48; 0x83; 0xdd; 0x00; (* SBB (% rbp) (Imm8 (word 0)) *) + 0x48; 0x81; 0xe5; 0xff; 0x01; 0x00; 0x00; + (* AND (% rbp) (Imm32 (word 511)) *) + 0x48; 0x89; 0x6c; 0x24; 0x40; + (* MOV (Memop Quadword (%% (rsp,64))) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x94; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,288))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x8c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x4c; 0x89; 0x84; 0x24; 0xf8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,504))) (% r8) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x94; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xa4; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xac; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% r13,% rbx) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x49; 0x11; 0xdc; (* ADC (% r12) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xb4; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% r14,% rbx) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x49; 0x11; 0xdd; (* ADC (% r13) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xbc; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% r15,% rbx) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x84; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% r8,% rbx) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x49; 0x11; 0xe8; (* ADC (% r8) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,296))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0x4c; 0x89; 0x8c; 0x24; 0x00; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,512))) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x8c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% r9,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcd; + (* ADOX (% r9) (% rbp) *) + 0x49; 0x11; 0xe9; (* ADC (% r9) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,304))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x4c; 0x89; 0x94; 0x24; 0x08; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,520))) (% r10) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x94; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd5; + (* ADOX (% r10) (% rbp) *) + 0x49; 0x11; 0xea; (* ADC (% r10) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0x38; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,312))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x4c; 0x89; 0x9c; 0x24; 0x10; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,528))) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdd; + (* ADOX (% r11) (% rbp) *) + 0x49; 0x11; 0xeb; (* ADC (% r11) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0x40; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,320))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4c; 0x89; 0xa4; 0x24; 0x18; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,536))) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xa4; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe5; + (* ADOX (% r12) (% rbp) *) + 0x49; 0x11; 0xec; (* ADC (% r12) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0x48; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,328))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0x4c; 0x89; 0xac; 0x24; 0x20; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,544))) (% r13) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xac; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xed; + (* ADOX (% r13) (% rbp) *) + 0x49; 0x11; 0xed; (* ADC (% r13) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0x50; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,336))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x4c; 0x89; 0xb4; 0x24; 0x28; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,552))) (% r14) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xb4; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf5; + (* ADOX (% r14) (% rbp) *) + 0x49; 0x11; 0xee; (* ADC (% r14) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0x58; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,344))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0x4c; 0x89; 0xbc; 0x24; 0x30; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,560))) (% r15) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xbc; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADOX (% r15) (% rbp) *) + 0x49; 0x11; 0xef; (* ADC (% r15) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,280))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,288))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,296))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,304))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x38; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,312))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x40; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,320))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x48; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,328))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x50; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,336))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x58; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,344))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xdd; + (* ADOX (% rbx) (% rbp) *) + 0x48; 0x11; 0xdd; (* ADC (% rbp) (% rbx) *) + 0x48; 0x8b; 0x94; 0x24; 0x60; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,352))) *) + 0x31; 0xc0; (* XOR (% eax) (% eax) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% rbp) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0x48; 0x11; 0xc5; (* ADC (% rbp) (% rax) *) + 0x4c; 0x89; 0xc0; (* MOV (% rax) (% r8) *) + 0x48; 0x25; 0xff; 0x01; 0x00; 0x00; + (* AND (% rax) (Imm32 (word 511)) *) + 0x4d; 0x0f; 0xac; 0xc8; 0x09; + (* SHRD (% r8) (% r9) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xd1; 0x09; + (* SHRD (% r9) (% r10) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xda; 0x09; + (* SHRD (% r10) (% r11) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xe3; 0x09; + (* SHRD (% r11) (% r12) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xec; 0x09; + (* SHRD (% r12) (% r13) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xf5; 0x09; + (* SHRD (% r13) (% r14) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xfe; 0x09; + (* SHRD (% r14) (% r15) (Imm8 (word 9)) *) + 0x49; 0x0f; 0xac; 0xef; 0x09; + (* SHRD (% r15) (% rbp) (Imm8 (word 9)) *) + 0x48; 0xc1; 0xed; 0x09; (* SHR (% rbp) (Imm8 (word 9)) *) + 0x48; 0x01; 0xc5; (* ADD (% rbp) (% rax) *) + 0xf9; (* STCF *) + 0x4c; 0x13; 0x84; 0x24; 0xf8; 0x01; 0x00; 0x00; + (* ADC (% r8) (Memop Quadword (%% (rsp,504))) *) + 0x4c; 0x13; 0x8c; 0x24; 0x00; 0x02; 0x00; 0x00; + (* ADC (% r9) (Memop Quadword (%% (rsp,512))) *) + 0x4c; 0x13; 0x94; 0x24; 0x08; 0x02; 0x00; 0x00; + (* ADC (% r10) (Memop Quadword (%% (rsp,520))) *) + 0x4c; 0x13; 0x9c; 0x24; 0x10; 0x02; 0x00; 0x00; + (* ADC (% r11) (Memop Quadword (%% (rsp,528))) *) + 0x4c; 0x13; 0xa4; 0x24; 0x18; 0x02; 0x00; 0x00; + (* ADC (% r12) (Memop Quadword (%% (rsp,536))) *) + 0x4c; 0x13; 0xac; 0x24; 0x20; 0x02; 0x00; 0x00; + (* ADC (% r13) (Memop Quadword (%% (rsp,544))) *) + 0x4c; 0x13; 0xb4; 0x24; 0x28; 0x02; 0x00; 0x00; + (* ADC (% r14) (Memop Quadword (%% (rsp,552))) *) + 0x4c; 0x13; 0xbc; 0x24; 0x30; 0x02; 0x00; 0x00; + (* ADC (% r15) (Memop Quadword (%% (rsp,560))) *) + 0x48; 0x81; 0xd5; 0x00; 0xfe; 0xff; 0xff; + (* ADC (% rbp) (Imm32 (word 4294966784)) *) + 0xf5; (* CMC *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x84; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,288))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x8c; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,296))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x94; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,304))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x9c; 0x24; 0x38; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,312))) (% r11) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xa4; 0x24; 0x40; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,320))) (% r12) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xac; 0x24; 0x48; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,328))) (% r13) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xb4; 0x24; 0x50; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,336))) (% r14) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xbc; 0x24; 0x58; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,344))) (% r15) *) + 0x48; 0x83; 0xdd; 0x00; (* SBB (% rbp) (Imm8 (word 0)) *) + 0x48; 0x81; 0xe5; 0xff; 0x01; 0x00; 0x00; + (* AND (% rbp) (Imm32 (word 511)) *) + 0x48; 0x89; 0xac; 0x24; 0x60; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,352))) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x94; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,144))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x8c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x4c; 0x89; 0x84; 0x24; 0xf8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,504))) (% r8) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x94; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xa4; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xac; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% r13,% rbx) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x49; 0x11; 0xdc; (* ADC (% r12) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xb4; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% r14,% rbx) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x49; 0x11; 0xdd; (* ADC (% r13) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xbc; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% r15,% rbx) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x84; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% r8,% rbx) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x49; 0x11; 0xe8; (* ADC (% r8) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,152))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0x4c; 0x89; 0x8c; 0x24; 0x00; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,512))) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x8c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% r9,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcd; + (* ADOX (% r9) (% rbp) *) + 0x49; 0x11; 0xe9; (* ADC (% r9) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,160))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x4c; 0x89; 0x94; 0x24; 0x08; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,520))) (% r10) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x94; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd5; + (* ADOX (% r10) (% rbp) *) + 0x49; 0x11; 0xea; (* ADC (% r10) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,168))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x4c; 0x89; 0x9c; 0x24; 0x10; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,528))) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdd; + (* ADOX (% r11) (% rbp) *) + 0x49; 0x11; 0xeb; (* ADC (% r11) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,176))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4c; 0x89; 0xa4; 0x24; 0x18; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,536))) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xa4; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe5; + (* ADOX (% r12) (% rbp) *) + 0x49; 0x11; 0xec; (* ADC (% r12) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,184))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0x4c; 0x89; 0xac; 0x24; 0x20; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,544))) (% r13) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xac; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xed; + (* ADOX (% r13) (% rbp) *) + 0x49; 0x11; 0xed; (* ADC (% r13) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,192))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x4c; 0x89; 0xb4; 0x24; 0x28; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,552))) (% r14) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xb4; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf5; + (* ADOX (% r14) (% rbp) *) + 0x49; 0x11; 0xee; (* ADC (% r14) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,200))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0x4c; 0x89; 0xbc; 0x24; 0x30; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,560))) (% r15) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xbc; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADOX (% r15) (% rbp) *) + 0x49; 0x11; 0xef; (* ADC (% r15) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,280))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xdd; + (* ADOX (% rbx) (% rbp) *) + 0x48; 0x11; 0xdd; (* ADC (% rbp) (% rbx) *) + 0x48; 0x8b; 0x94; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,208))) *) + 0x31; 0xc0; (* XOR (% eax) (% eax) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% rbp) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0x48; 0x11; 0xc5; (* ADC (% rbp) (% rax) *) + 0x4c; 0x89; 0xc0; (* MOV (% rax) (% r8) *) + 0x48; 0x25; 0xff; 0x01; 0x00; 0x00; + (* AND (% rax) (Imm32 (word 511)) *) + 0x4d; 0x0f; 0xac; 0xc8; 0x09; + (* SHRD (% r8) (% r9) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xd1; 0x09; + (* SHRD (% r9) (% r10) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xda; 0x09; + (* SHRD (% r10) (% r11) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xe3; 0x09; + (* SHRD (% r11) (% r12) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xec; 0x09; + (* SHRD (% r12) (% r13) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xf5; 0x09; + (* SHRD (% r13) (% r14) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xfe; 0x09; + (* SHRD (% r14) (% r15) (Imm8 (word 9)) *) + 0x49; 0x0f; 0xac; 0xef; 0x09; + (* SHRD (% r15) (% rbp) (Imm8 (word 9)) *) + 0x48; 0xc1; 0xed; 0x09; (* SHR (% rbp) (Imm8 (word 9)) *) + 0x48; 0x01; 0xc5; (* ADD (% rbp) (% rax) *) + 0xf9; (* STCF *) + 0x4c; 0x13; 0x84; 0x24; 0xf8; 0x01; 0x00; 0x00; + (* ADC (% r8) (Memop Quadword (%% (rsp,504))) *) + 0x4c; 0x13; 0x8c; 0x24; 0x00; 0x02; 0x00; 0x00; + (* ADC (% r9) (Memop Quadword (%% (rsp,512))) *) + 0x4c; 0x13; 0x94; 0x24; 0x08; 0x02; 0x00; 0x00; + (* ADC (% r10) (Memop Quadword (%% (rsp,520))) *) + 0x4c; 0x13; 0x9c; 0x24; 0x10; 0x02; 0x00; 0x00; + (* ADC (% r11) (Memop Quadword (%% (rsp,528))) *) + 0x4c; 0x13; 0xa4; 0x24; 0x18; 0x02; 0x00; 0x00; + (* ADC (% r12) (Memop Quadword (%% (rsp,536))) *) + 0x4c; 0x13; 0xac; 0x24; 0x20; 0x02; 0x00; 0x00; + (* ADC (% r13) (Memop Quadword (%% (rsp,544))) *) + 0x4c; 0x13; 0xb4; 0x24; 0x28; 0x02; 0x00; 0x00; + (* ADC (% r14) (Memop Quadword (%% (rsp,552))) *) + 0x4c; 0x13; 0xbc; 0x24; 0x30; 0x02; 0x00; 0x00; + (* ADC (% r15) (Memop Quadword (%% (rsp,560))) *) + 0x48; 0x81; 0xd5; 0x00; 0xfe; 0xff; 0xff; + (* ADC (% rbp) (Imm32 (word 4294966784)) *) + 0xf5; (* CMC *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x84; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,144))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x8c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,152))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x94; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,160))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,168))) (% r11) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xa4; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,176))) (% r12) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xac; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,184))) (% r13) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xb4; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,192))) (% r14) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xbc; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,200))) (% r15) *) + 0x48; 0x83; 0xdd; 0x00; (* SBB (% rbp) (Imm8 (word 0)) *) + 0x48; 0x81; 0xe5; 0xff; 0x01; 0x00; 0x00; + (* AND (% rbp) (Imm32 (word 511)) *) + 0x48; 0x89; 0xac; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,208))) (% rbp) *) + 0x48; 0x8b; 0x04; 0x24; (* MOV (% rax) (Memop Quadword (%% (rsp,0))) *) + 0x48; 0x2b; 0x84; 0x24; 0x20; 0x01; 0x00; 0x00; + (* SUB (% rax) (Memop Quadword (%% (rsp,288))) *) + 0x48; 0x8b; 0x54; 0x24; 0x08; + (* MOV (% rdx) (Memop Quadword (%% (rsp,8))) *) + 0x48; 0x1b; 0x94; 0x24; 0x28; 0x01; 0x00; 0x00; + (* SBB (% rdx) (Memop Quadword (%% (rsp,296))) *) + 0x4c; 0x8b; 0x44; 0x24; 0x10; + (* MOV (% r8) (Memop Quadword (%% (rsp,16))) *) + 0x4c; 0x1b; 0x84; 0x24; 0x30; 0x01; 0x00; 0x00; + (* SBB (% r8) (Memop Quadword (%% (rsp,304))) *) + 0x4c; 0x8b; 0x4c; 0x24; 0x18; + (* MOV (% r9) (Memop Quadword (%% (rsp,24))) *) + 0x4c; 0x1b; 0x8c; 0x24; 0x38; 0x01; 0x00; 0x00; + (* SBB (% r9) (Memop Quadword (%% (rsp,312))) *) + 0x4c; 0x8b; 0x54; 0x24; 0x20; + (* MOV (% r10) (Memop Quadword (%% (rsp,32))) *) + 0x4c; 0x1b; 0x94; 0x24; 0x40; 0x01; 0x00; 0x00; + (* SBB (% r10) (Memop Quadword (%% (rsp,320))) *) + 0x4c; 0x8b; 0x5c; 0x24; 0x28; + (* MOV (% r11) (Memop Quadword (%% (rsp,40))) *) + 0x4c; 0x1b; 0x9c; 0x24; 0x48; 0x01; 0x00; 0x00; + (* SBB (% r11) (Memop Quadword (%% (rsp,328))) *) + 0x4c; 0x8b; 0x64; 0x24; 0x30; + (* MOV (% r12) (Memop Quadword (%% (rsp,48))) *) + 0x4c; 0x1b; 0xa4; 0x24; 0x50; 0x01; 0x00; 0x00; + (* SBB (% r12) (Memop Quadword (%% (rsp,336))) *) + 0x4c; 0x8b; 0x6c; 0x24; 0x38; + (* MOV (% r13) (Memop Quadword (%% (rsp,56))) *) + 0x4c; 0x1b; 0xac; 0x24; 0x58; 0x01; 0x00; 0x00; + (* SBB (% r13) (Memop Quadword (%% (rsp,344))) *) + 0x4c; 0x8b; 0x74; 0x24; 0x40; + (* MOV (% r14) (Memop Quadword (%% (rsp,64))) *) + 0x4c; 0x1b; 0xb4; 0x24; 0x60; 0x01; 0x00; 0x00; + (* SBB (% r14) (Memop Quadword (%% (rsp,352))) *) + 0x48; 0x83; 0xd8; 0x00; (* SBB (% rax) (Imm8 (word 0)) *) + 0x48; 0x89; 0x07; (* MOV (Memop Quadword (%% (rdi,0))) (% rax) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x48; 0x89; 0x57; 0x08; (* MOV (Memop Quadword (%% (rdi,8))) (% rdx) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x47; 0x10; (* MOV (Memop Quadword (%% (rdi,16))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x4f; 0x18; (* MOV (Memop Quadword (%% (rdi,24))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x57; 0x20; (* MOV (Memop Quadword (%% (rdi,32))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x5f; 0x28; (* MOV (Memop Quadword (%% (rdi,40))) (% r11) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x67; 0x30; (* MOV (Memop Quadword (%% (rdi,48))) (% r12) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x6f; 0x38; (* MOV (Memop Quadword (%% (rdi,56))) (% r13) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x49; 0x81; 0xe6; 0xff; 0x01; 0x00; 0x00; + (* AND (% r14) (Imm32 (word 511)) *) + 0x4c; 0x89; 0x77; 0x40; (* MOV (Memop Quadword (%% (rdi,64))) (% r14) *) + 0x48; 0x8b; 0x84; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,144))) *) + 0x48; 0x2b; 0x84; 0x24; 0x20; 0x01; 0x00; 0x00; + (* SUB (% rax) (Memop Quadword (%% (rsp,288))) *) + 0x48; 0x8b; 0x94; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,152))) *) + 0x48; 0x1b; 0x94; 0x24; 0x28; 0x01; 0x00; 0x00; + (* SBB (% rdx) (Memop Quadword (%% (rsp,296))) *) + 0x4c; 0x8b; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (% r8) (Memop Quadword (%% (rsp,160))) *) + 0x4c; 0x1b; 0x84; 0x24; 0x30; 0x01; 0x00; 0x00; + (* SBB (% r8) (Memop Quadword (%% (rsp,304))) *) + 0x4c; 0x8b; 0x8c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (% r9) (Memop Quadword (%% (rsp,168))) *) + 0x4c; 0x1b; 0x8c; 0x24; 0x38; 0x01; 0x00; 0x00; + (* SBB (% r9) (Memop Quadword (%% (rsp,312))) *) + 0x4c; 0x8b; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (% r10) (Memop Quadword (%% (rsp,176))) *) + 0x4c; 0x1b; 0x94; 0x24; 0x40; 0x01; 0x00; 0x00; + (* SBB (% r10) (Memop Quadword (%% (rsp,320))) *) + 0x4c; 0x8b; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (% r11) (Memop Quadword (%% (rsp,184))) *) + 0x4c; 0x1b; 0x9c; 0x24; 0x48; 0x01; 0x00; 0x00; + (* SBB (% r11) (Memop Quadword (%% (rsp,328))) *) + 0x4c; 0x8b; 0xa4; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (% r12) (Memop Quadword (%% (rsp,192))) *) + 0x4c; 0x1b; 0xa4; 0x24; 0x50; 0x01; 0x00; 0x00; + (* SBB (% r12) (Memop Quadword (%% (rsp,336))) *) + 0x4c; 0x8b; 0xac; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (% r13) (Memop Quadword (%% (rsp,200))) *) + 0x4c; 0x1b; 0xac; 0x24; 0x58; 0x01; 0x00; 0x00; + (* SBB (% r13) (Memop Quadword (%% (rsp,344))) *) + 0x4c; 0x8b; 0xb4; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (% r14) (Memop Quadword (%% (rsp,208))) *) + 0x4c; 0x1b; 0xb4; 0x24; 0x60; 0x01; 0x00; 0x00; + (* SBB (% r14) (Memop Quadword (%% (rsp,352))) *) + 0x48; 0x83; 0xd8; 0x00; (* SBB (% rax) (Imm8 (word 0)) *) + 0x48; 0x89; 0x84; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,216))) (% rax) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x48; 0x89; 0x94; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,224))) (% rdx) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x84; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,232))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x8c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,240))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x94; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,248))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,256))) (% r11) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xa4; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,264))) (% r12) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xac; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,272))) (% r13) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x49; 0x81; 0xe6; 0xff; 0x01; 0x00; 0x00; + (* AND (% r14) (Imm32 (word 511)) *) + 0x4c; 0x89; 0xb4; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,280))) (% r14) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x96; 0x90; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,144))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x8c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x4c; 0x89; 0x84; 0x24; 0xf8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,504))) (% r8) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x94; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xa4; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xac; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% r13,% rbx) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x49; 0x11; 0xdc; (* ADC (% r12) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xb4; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% r14,% rbx) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x49; 0x11; 0xdd; (* ADC (% r13) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xbc; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% r15,% rbx) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x84; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% r8,% rbx) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x49; 0x11; 0xe8; (* ADC (% r8) (% rbp) *) + 0x48; 0x8b; 0x96; 0x98; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,152))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0x4c; 0x89; 0x8c; 0x24; 0x00; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,512))) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x8c; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% r9,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcd; + (* ADOX (% r9) (% rbp) *) + 0x49; 0x11; 0xe9; (* ADC (% r9) (% rbp) *) + 0x48; 0x8b; 0x96; 0xa0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,160))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x4c; 0x89; 0x94; 0x24; 0x08; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,520))) (% r10) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x94; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd5; + (* ADOX (% r10) (% rbp) *) + 0x49; 0x11; 0xea; (* ADC (% r10) (% rbp) *) + 0x48; 0x8b; 0x96; 0xa8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,168))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x4c; 0x89; 0x9c; 0x24; 0x10; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,528))) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdd; + (* ADOX (% r11) (% rbp) *) + 0x49; 0x11; 0xeb; (* ADC (% r11) (% rbp) *) + 0x48; 0x8b; 0x96; 0xb0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,176))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4c; 0x89; 0xa4; 0x24; 0x18; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,536))) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xa4; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe5; + (* ADOX (% r12) (% rbp) *) + 0x49; 0x11; 0xec; (* ADC (% r12) (% rbp) *) + 0x48; 0x8b; 0x96; 0xb8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,184))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0x4c; 0x89; 0xac; 0x24; 0x20; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,544))) (% r13) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xac; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xed; + (* ADOX (% r13) (% rbp) *) + 0x49; 0x11; 0xed; (* ADC (% r13) (% rbp) *) + 0x48; 0x8b; 0x96; 0xc0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,192))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x4c; 0x89; 0xb4; 0x24; 0x28; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,552))) (% r14) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xb4; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf5; + (* ADOX (% r14) (% rbp) *) + 0x49; 0x11; 0xee; (* ADC (% r14) (% rbp) *) + 0x48; 0x8b; 0x96; 0xc8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,200))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0x4c; 0x89; 0xbc; 0x24; 0x30; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,560))) (% r15) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xbc; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADOX (% r15) (% rbp) *) + 0x49; 0x11; 0xef; (* ADC (% r15) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0xa8; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,424))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xdd; + (* ADOX (% rbx) (% rbp) *) + 0x48; 0x11; 0xdd; (* ADC (% rbp) (% rbx) *) + 0x48; 0x8b; 0x96; 0xd0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,208))) *) + 0x31; 0xc0; (* XOR (% eax) (% eax) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% rbp) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,424))) *) + 0x48; 0x11; 0xc5; (* ADC (% rbp) (% rax) *) + 0x4c; 0x89; 0xc0; (* MOV (% rax) (% r8) *) + 0x48; 0x25; 0xff; 0x01; 0x00; 0x00; + (* AND (% rax) (Imm32 (word 511)) *) + 0x4d; 0x0f; 0xac; 0xc8; 0x09; + (* SHRD (% r8) (% r9) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xd1; 0x09; + (* SHRD (% r9) (% r10) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xda; 0x09; + (* SHRD (% r10) (% r11) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xe3; 0x09; + (* SHRD (% r11) (% r12) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xec; 0x09; + (* SHRD (% r12) (% r13) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xf5; 0x09; + (* SHRD (% r13) (% r14) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xfe; 0x09; + (* SHRD (% r14) (% r15) (Imm8 (word 9)) *) + 0x49; 0x0f; 0xac; 0xef; 0x09; + (* SHRD (% r15) (% rbp) (Imm8 (word 9)) *) + 0x48; 0xc1; 0xed; 0x09; (* SHR (% rbp) (Imm8 (word 9)) *) + 0x48; 0x01; 0xc5; (* ADD (% rbp) (% rax) *) + 0xf9; (* STCF *) + 0x4c; 0x13; 0x84; 0x24; 0xf8; 0x01; 0x00; 0x00; + (* ADC (% r8) (Memop Quadword (%% (rsp,504))) *) + 0x4c; 0x13; 0x8c; 0x24; 0x00; 0x02; 0x00; 0x00; + (* ADC (% r9) (Memop Quadword (%% (rsp,512))) *) + 0x4c; 0x13; 0x94; 0x24; 0x08; 0x02; 0x00; 0x00; + (* ADC (% r10) (Memop Quadword (%% (rsp,520))) *) + 0x4c; 0x13; 0x9c; 0x24; 0x10; 0x02; 0x00; 0x00; + (* ADC (% r11) (Memop Quadword (%% (rsp,528))) *) + 0x4c; 0x13; 0xa4; 0x24; 0x18; 0x02; 0x00; 0x00; + (* ADC (% r12) (Memop Quadword (%% (rsp,536))) *) + 0x4c; 0x13; 0xac; 0x24; 0x20; 0x02; 0x00; 0x00; + (* ADC (% r13) (Memop Quadword (%% (rsp,544))) *) + 0x4c; 0x13; 0xb4; 0x24; 0x28; 0x02; 0x00; 0x00; + (* ADC (% r14) (Memop Quadword (%% (rsp,552))) *) + 0x4c; 0x13; 0xbc; 0x24; 0x30; 0x02; 0x00; 0x00; + (* ADC (% r15) (Memop Quadword (%% (rsp,560))) *) + 0x48; 0x81; 0xd5; 0x00; 0xfe; 0xff; 0xff; + (* ADC (% rbp) (Imm32 (word 4294966784)) *) + 0xf5; (* CMC *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x84; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,360))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x8c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,368))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x94; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,376))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,384))) (% r11) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xa4; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,392))) (% r12) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xac; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,400))) (% r13) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xb4; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,408))) (% r14) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xbc; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,416))) (% r15) *) + 0x48; 0x83; 0xdd; 0x00; (* SBB (% rbp) (Imm8 (word 0)) *) + 0x48; 0x81; 0xe5; 0xff; 0x01; 0x00; 0x00; + (* AND (% rbp) (Imm32 (word 511)) *) + 0x48; 0x89; 0xac; 0x24; 0xa8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,424))) (% rbp) *) + 0x48; 0x8b; 0x07; (* MOV (% rax) (Memop Quadword (%% (rdi,0))) *) + 0x48; 0x2b; 0x84; 0x24; 0x90; 0x00; 0x00; 0x00; + (* SUB (% rax) (Memop Quadword (%% (rsp,144))) *) + 0x48; 0x8b; 0x57; 0x08; (* MOV (% rdx) (Memop Quadword (%% (rdi,8))) *) + 0x48; 0x1b; 0x94; 0x24; 0x98; 0x00; 0x00; 0x00; + (* SBB (% rdx) (Memop Quadword (%% (rsp,152))) *) + 0x4c; 0x8b; 0x47; 0x10; (* MOV (% r8) (Memop Quadword (%% (rdi,16))) *) + 0x4c; 0x1b; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* SBB (% r8) (Memop Quadword (%% (rsp,160))) *) + 0x4c; 0x8b; 0x4f; 0x18; (* MOV (% r9) (Memop Quadword (%% (rdi,24))) *) + 0x4c; 0x1b; 0x8c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* SBB (% r9) (Memop Quadword (%% (rsp,168))) *) + 0x4c; 0x8b; 0x57; 0x20; (* MOV (% r10) (Memop Quadword (%% (rdi,32))) *) + 0x4c; 0x1b; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* SBB (% r10) (Memop Quadword (%% (rsp,176))) *) + 0x4c; 0x8b; 0x5f; 0x28; (* MOV (% r11) (Memop Quadword (%% (rdi,40))) *) + 0x4c; 0x1b; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* SBB (% r11) (Memop Quadword (%% (rsp,184))) *) + 0x4c; 0x8b; 0x67; 0x30; (* MOV (% r12) (Memop Quadword (%% (rdi,48))) *) + 0x4c; 0x1b; 0xa4; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* SBB (% r12) (Memop Quadword (%% (rsp,192))) *) + 0x4c; 0x8b; 0x6f; 0x38; (* MOV (% r13) (Memop Quadword (%% (rdi,56))) *) + 0x4c; 0x1b; 0xac; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* SBB (% r13) (Memop Quadword (%% (rsp,200))) *) + 0x4c; 0x8b; 0x77; 0x40; (* MOV (% r14) (Memop Quadword (%% (rdi,64))) *) + 0x4c; 0x1b; 0xb4; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* SBB (% r14) (Memop Quadword (%% (rsp,208))) *) + 0x48; 0x83; 0xd8; 0x00; (* SBB (% rax) (Imm8 (word 0)) *) + 0x48; 0x89; 0x07; (* MOV (Memop Quadword (%% (rdi,0))) (% rax) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x48; 0x89; 0x57; 0x08; (* MOV (Memop Quadword (%% (rdi,8))) (% rdx) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x47; 0x10; (* MOV (Memop Quadword (%% (rdi,16))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x4f; 0x18; (* MOV (Memop Quadword (%% (rdi,24))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x57; 0x20; (* MOV (Memop Quadword (%% (rdi,32))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x5f; 0x28; (* MOV (Memop Quadword (%% (rdi,40))) (% r11) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x67; 0x30; (* MOV (Memop Quadword (%% (rdi,48))) (% r12) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x6f; 0x38; (* MOV (Memop Quadword (%% (rdi,56))) (% r13) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x49; 0x81; 0xe6; 0xff; 0x01; 0x00; 0x00; + (* AND (% r14) (Imm32 (word 511)) *) + 0x4c; 0x89; 0x77; 0x40; (* MOV (Memop Quadword (%% (rdi,64))) (% r14) *) + 0x48; 0x8b; 0x84; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,288))) *) + 0x48; 0x2b; 0x07; (* SUB (% rax) (Memop Quadword (%% (rdi,0))) *) + 0x48; 0x8b; 0x94; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,296))) *) + 0x48; 0x1b; 0x57; 0x08; (* SBB (% rdx) (Memop Quadword (%% (rdi,8))) *) + 0x4c; 0x8b; 0x84; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MOV (% r8) (Memop Quadword (%% (rsp,304))) *) + 0x4c; 0x1b; 0x47; 0x10; (* SBB (% r8) (Memop Quadword (%% (rdi,16))) *) + 0x4c; 0x8b; 0x8c; 0x24; 0x38; 0x01; 0x00; 0x00; + (* MOV (% r9) (Memop Quadword (%% (rsp,312))) *) + 0x4c; 0x1b; 0x4f; 0x18; (* SBB (% r9) (Memop Quadword (%% (rdi,24))) *) + 0x4c; 0x8b; 0x94; 0x24; 0x40; 0x01; 0x00; 0x00; + (* MOV (% r10) (Memop Quadword (%% (rsp,320))) *) + 0x4c; 0x1b; 0x57; 0x20; (* SBB (% r10) (Memop Quadword (%% (rdi,32))) *) + 0x4c; 0x8b; 0x9c; 0x24; 0x48; 0x01; 0x00; 0x00; + (* MOV (% r11) (Memop Quadword (%% (rsp,328))) *) + 0x4c; 0x1b; 0x5f; 0x28; (* SBB (% r11) (Memop Quadword (%% (rdi,40))) *) + 0x4c; 0x8b; 0xa4; 0x24; 0x50; 0x01; 0x00; 0x00; + (* MOV (% r12) (Memop Quadword (%% (rsp,336))) *) + 0x4c; 0x1b; 0x67; 0x30; (* SBB (% r12) (Memop Quadword (%% (rdi,48))) *) + 0x4c; 0x8b; 0xac; 0x24; 0x58; 0x01; 0x00; 0x00; + (* MOV (% r13) (Memop Quadword (%% (rsp,344))) *) + 0x4c; 0x1b; 0x6f; 0x38; (* SBB (% r13) (Memop Quadword (%% (rdi,56))) *) + 0x4c; 0x8b; 0xb4; 0x24; 0x60; 0x01; 0x00; 0x00; + (* MOV (% r14) (Memop Quadword (%% (rsp,352))) *) + 0x4c; 0x1b; 0x77; 0x40; (* SBB (% r14) (Memop Quadword (%% (rdi,64))) *) + 0x48; 0x83; 0xd8; 0x00; (* SBB (% rax) (Imm8 (word 0)) *) + 0x48; 0x89; 0x84; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,288))) (% rax) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x48; 0x89; 0x94; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,296))) (% rdx) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x84; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,304))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x8c; 0x24; 0x38; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,312))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x94; 0x24; 0x40; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,320))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x9c; 0x24; 0x48; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,328))) (% r11) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xa4; 0x24; 0x50; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,336))) (% r12) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xac; 0x24; 0x58; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,344))) (% r13) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x49; 0x81; 0xe6; 0xff; 0x01; 0x00; 0x00; + (* AND (% r14) (Imm32 (word 511)) *) + 0x4c; 0x89; 0xb4; 0x24; 0x60; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,352))) (% r14) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x94; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,432))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x8c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x4c; 0x89; 0x84; 0x24; 0xf8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,504))) (% r8) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x94; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xa4; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xac; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% r13,% rbx) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x49; 0x11; 0xdc; (* ADC (% r12) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xb4; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% r14,% rbx) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x49; 0x11; 0xdd; (* ADC (% r13) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xbc; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% r15,% rbx) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x84; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% r8,% rbx) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x49; 0x11; 0xe8; (* ADC (% r8) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,440))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0x4c; 0x89; 0x8c; 0x24; 0x00; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,512))) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x8c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% r9,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcd; + (* ADOX (% r9) (% rbp) *) + 0x49; 0x11; 0xe9; (* ADC (% r9) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0xc0; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,448))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x4c; 0x89; 0x94; 0x24; 0x08; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,520))) (% r10) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x94; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd5; + (* ADOX (% r10) (% rbp) *) + 0x49; 0x11; 0xea; (* ADC (% r10) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0xc8; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,456))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x4c; 0x89; 0x9c; 0x24; 0x10; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,528))) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdd; + (* ADOX (% r11) (% rbp) *) + 0x49; 0x11; 0xeb; (* ADC (% r11) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0xd0; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,464))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4c; 0x89; 0xa4; 0x24; 0x18; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,536))) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xa4; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe5; + (* ADOX (% r12) (% rbp) *) + 0x49; 0x11; 0xec; (* ADC (% r12) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0xd8; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,472))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0x4c; 0x89; 0xac; 0x24; 0x20; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,544))) (% r13) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xac; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xed; + (* ADOX (% r13) (% rbp) *) + 0x49; 0x11; 0xed; (* ADC (% r13) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0xe0; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,480))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x4c; 0x89; 0xb4; 0x24; 0x28; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,552))) (% r14) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xb4; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf5; + (* ADOX (% r14) (% rbp) *) + 0x49; 0x11; 0xee; (* ADC (% r14) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0xe8; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,488))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0x4c; 0x89; 0xbc; 0x24; 0x30; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,560))) (% r15) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xbc; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADOX (% r15) (% rbp) *) + 0x49; 0x11; 0xef; (* ADC (% r15) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,280))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,432))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,440))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xc0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,448))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xc8; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,456))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,464))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,472))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,480))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe8; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,488))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xdd; + (* ADOX (% rbx) (% rbp) *) + 0x48; 0x11; 0xdd; (* ADC (% rbp) (% rbx) *) + 0x48; 0x8b; 0x94; 0x24; 0xf0; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,496))) *) + 0x31; 0xc0; (* XOR (% eax) (% eax) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% rbp) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0x48; 0x11; 0xc5; (* ADC (% rbp) (% rax) *) + 0x4c; 0x89; 0xc0; (* MOV (% rax) (% r8) *) + 0x48; 0x25; 0xff; 0x01; 0x00; 0x00; + (* AND (% rax) (Imm32 (word 511)) *) + 0x4d; 0x0f; 0xac; 0xc8; 0x09; + (* SHRD (% r8) (% r9) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xd1; 0x09; + (* SHRD (% r9) (% r10) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xda; 0x09; + (* SHRD (% r10) (% r11) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xe3; 0x09; + (* SHRD (% r11) (% r12) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xec; 0x09; + (* SHRD (% r12) (% r13) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xf5; 0x09; + (* SHRD (% r13) (% r14) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xfe; 0x09; + (* SHRD (% r14) (% r15) (Imm8 (word 9)) *) + 0x49; 0x0f; 0xac; 0xef; 0x09; + (* SHRD (% r15) (% rbp) (Imm8 (word 9)) *) + 0x48; 0xc1; 0xed; 0x09; (* SHR (% rbp) (Imm8 (word 9)) *) + 0x48; 0x01; 0xc5; (* ADD (% rbp) (% rax) *) + 0xf9; (* STCF *) + 0x4c; 0x13; 0x84; 0x24; 0xf8; 0x01; 0x00; 0x00; + (* ADC (% r8) (Memop Quadword (%% (rsp,504))) *) + 0x4c; 0x13; 0x8c; 0x24; 0x00; 0x02; 0x00; 0x00; + (* ADC (% r9) (Memop Quadword (%% (rsp,512))) *) + 0x4c; 0x13; 0x94; 0x24; 0x08; 0x02; 0x00; 0x00; + (* ADC (% r10) (Memop Quadword (%% (rsp,520))) *) + 0x4c; 0x13; 0x9c; 0x24; 0x10; 0x02; 0x00; 0x00; + (* ADC (% r11) (Memop Quadword (%% (rsp,528))) *) + 0x4c; 0x13; 0xa4; 0x24; 0x18; 0x02; 0x00; 0x00; + (* ADC (% r12) (Memop Quadword (%% (rsp,536))) *) + 0x4c; 0x13; 0xac; 0x24; 0x20; 0x02; 0x00; 0x00; + (* ADC (% r13) (Memop Quadword (%% (rsp,544))) *) + 0x4c; 0x13; 0xb4; 0x24; 0x28; 0x02; 0x00; 0x00; + (* ADC (% r14) (Memop Quadword (%% (rsp,552))) *) + 0x4c; 0x13; 0xbc; 0x24; 0x30; 0x02; 0x00; 0x00; + (* ADC (% r15) (Memop Quadword (%% (rsp,560))) *) + 0x48; 0x81; 0xd5; 0x00; 0xfe; 0xff; 0xff; + (* ADC (% rbp) (Imm32 (word 4294966784)) *) + 0xf5; (* CMC *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x84; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,216))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x8c; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,224))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x94; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,232))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,240))) (% r11) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xa4; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,248))) (% r12) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xac; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,256))) (% r13) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xb4; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,264))) (% r14) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xbc; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,272))) (% r15) *) + 0x48; 0x83; 0xdd; 0x00; (* SBB (% rbp) (Imm8 (word 0)) *) + 0x48; 0x81; 0xe5; 0xff; 0x01; 0x00; 0x00; + (* AND (% rbp) (Imm32 (word 511)) *) + 0x48; 0x89; 0xac; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,280))) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x91; 0x90; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rcx,144))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x8c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x4c; 0x89; 0x84; 0x24; 0xf8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,504))) (% r8) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x94; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xa4; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xac; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% r13,% rbx) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x49; 0x11; 0xdc; (* ADC (% r12) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xb4; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% r14,% rbx) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x49; 0x11; 0xdd; (* ADC (% r13) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xbc; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% r15,% rbx) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x84; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% r8,% rbx) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x49; 0x11; 0xe8; (* ADC (% r8) (% rbp) *) + 0x48; 0x8b; 0x91; 0x98; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rcx,152))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0x4c; 0x89; 0x8c; 0x24; 0x00; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,512))) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x8c; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% r9,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcd; + (* ADOX (% r9) (% rbp) *) + 0x49; 0x11; 0xe9; (* ADC (% r9) (% rbp) *) + 0x48; 0x8b; 0x91; 0xa0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rcx,160))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x4c; 0x89; 0x94; 0x24; 0x08; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,520))) (% r10) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x94; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd5; + (* ADOX (% r10) (% rbp) *) + 0x49; 0x11; 0xea; (* ADC (% r10) (% rbp) *) + 0x48; 0x8b; 0x91; 0xa8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rcx,168))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x4c; 0x89; 0x9c; 0x24; 0x10; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,528))) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdd; + (* ADOX (% r11) (% rbp) *) + 0x49; 0x11; 0xeb; (* ADC (% r11) (% rbp) *) + 0x48; 0x8b; 0x91; 0xb0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rcx,176))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4c; 0x89; 0xa4; 0x24; 0x18; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,536))) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xa4; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe5; + (* ADOX (% r12) (% rbp) *) + 0x49; 0x11; 0xec; (* ADC (% r12) (% rbp) *) + 0x48; 0x8b; 0x91; 0xb8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rcx,184))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0x4c; 0x89; 0xac; 0x24; 0x20; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,544))) (% r13) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xac; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xed; + (* ADOX (% r13) (% rbp) *) + 0x49; 0x11; 0xed; (* ADC (% r13) (% rbp) *) + 0x48; 0x8b; 0x91; 0xc0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rcx,192))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x4c; 0x89; 0xb4; 0x24; 0x28; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,552))) (% r14) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xb4; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf5; + (* ADOX (% r14) (% rbp) *) + 0x49; 0x11; 0xee; (* ADC (% r14) (% rbp) *) + 0x48; 0x8b; 0x91; 0xc8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rcx,200))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0x4c; 0x89; 0xbc; 0x24; 0x30; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,560))) (% r15) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xbc; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADOX (% r15) (% rbp) *) + 0x49; 0x11; 0xef; (* ADC (% r15) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0xa8; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,424))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xdd; + (* ADOX (% rbx) (% rbp) *) + 0x48; 0x11; 0xdd; (* ADC (% rbp) (% rbx) *) + 0x48; 0x8b; 0x91; 0xd0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rcx,208))) *) + 0x31; 0xc0; (* XOR (% eax) (% eax) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% rbp) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,424))) *) + 0x48; 0x11; 0xc5; (* ADC (% rbp) (% rax) *) + 0x4c; 0x89; 0xc0; (* MOV (% rax) (% r8) *) + 0x48; 0x25; 0xff; 0x01; 0x00; 0x00; + (* AND (% rax) (Imm32 (word 511)) *) + 0x4d; 0x0f; 0xac; 0xc8; 0x09; + (* SHRD (% r8) (% r9) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xd1; 0x09; + (* SHRD (% r9) (% r10) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xda; 0x09; + (* SHRD (% r10) (% r11) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xe3; 0x09; + (* SHRD (% r11) (% r12) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xec; 0x09; + (* SHRD (% r12) (% r13) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xf5; 0x09; + (* SHRD (% r13) (% r14) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xfe; 0x09; + (* SHRD (% r14) (% r15) (Imm8 (word 9)) *) + 0x49; 0x0f; 0xac; 0xef; 0x09; + (* SHRD (% r15) (% rbp) (Imm8 (word 9)) *) + 0x48; 0xc1; 0xed; 0x09; (* SHR (% rbp) (Imm8 (word 9)) *) + 0x48; 0x01; 0xc5; (* ADD (% rbp) (% rax) *) + 0xf9; (* STCF *) + 0x4c; 0x13; 0x84; 0x24; 0xf8; 0x01; 0x00; 0x00; + (* ADC (% r8) (Memop Quadword (%% (rsp,504))) *) + 0x4c; 0x13; 0x8c; 0x24; 0x00; 0x02; 0x00; 0x00; + (* ADC (% r9) (Memop Quadword (%% (rsp,512))) *) + 0x4c; 0x13; 0x94; 0x24; 0x08; 0x02; 0x00; 0x00; + (* ADC (% r10) (Memop Quadword (%% (rsp,520))) *) + 0x4c; 0x13; 0x9c; 0x24; 0x10; 0x02; 0x00; 0x00; + (* ADC (% r11) (Memop Quadword (%% (rsp,528))) *) + 0x4c; 0x13; 0xa4; 0x24; 0x18; 0x02; 0x00; 0x00; + (* ADC (% r12) (Memop Quadword (%% (rsp,536))) *) + 0x4c; 0x13; 0xac; 0x24; 0x20; 0x02; 0x00; 0x00; + (* ADC (% r13) (Memop Quadword (%% (rsp,544))) *) + 0x4c; 0x13; 0xb4; 0x24; 0x28; 0x02; 0x00; 0x00; + (* ADC (% r14) (Memop Quadword (%% (rsp,552))) *) + 0x4c; 0x13; 0xbc; 0x24; 0x30; 0x02; 0x00; 0x00; + (* ADC (% r15) (Memop Quadword (%% (rsp,560))) *) + 0x48; 0x81; 0xd5; 0x00; 0xfe; 0xff; 0xff; + (* ADC (% rbp) (Imm32 (word 4294966784)) *) + 0xf5; (* CMC *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x87; 0x90; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rdi,144))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x8f; 0x98; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rdi,152))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x97; 0xa0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rdi,160))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x9f; 0xa8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rdi,168))) (% r11) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xa7; 0xb0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rdi,176))) (% r12) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xaf; 0xb8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rdi,184))) (% r13) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xb7; 0xc0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rdi,192))) (% r14) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xbf; 0xc8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rdi,200))) (% r15) *) + 0x48; 0x83; 0xdd; 0x00; (* SBB (% rbp) (Imm8 (word 0)) *) + 0x48; 0x81; 0xe5; 0xff; 0x01; 0x00; 0x00; + (* AND (% rbp) (Imm32 (word 511)) *) + 0x48; 0x89; 0xaf; 0xd0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rdi,208))) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x94; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,288))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x4c; 0x24; 0x48; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,72))) *) + 0x4c; 0x89; 0x84; 0x24; 0xf8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,504))) (% r8) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x54; 0x24; 0x50; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,80))) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x5c; 0x24; 0x58; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,88))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x64; 0x24; 0x60; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x6c; 0x24; 0x68; + (* MULX4 (% r13,% rbx) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x49; 0x11; 0xdc; (* ADC (% r12) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x74; 0x24; 0x70; + (* MULX4 (% r14,% rbx) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x49; 0x11; 0xdd; (* ADC (% r13) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x7c; 0x24; 0x78; + (* MULX4 (% r15,% rbx) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% r8,% rbx) (% rdx,Memop Quadword (%% (rsp,128))) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x49; 0x11; 0xe8; (* ADC (% r8) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,296))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0x4c; 0x89; 0x8c; 0x24; 0x00; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,512))) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x58; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x8c; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% r9,% rax) (% rdx,Memop Quadword (%% (rsp,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcd; + (* ADOX (% r9) (% rbp) *) + 0x49; 0x11; 0xe9; (* ADC (% r9) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,304))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x4c; 0x89; 0x94; 0x24; 0x08; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,520))) (% r10) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x58; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x94; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd5; + (* ADOX (% r10) (% rbp) *) + 0x49; 0x11; 0xea; (* ADC (% r10) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0x38; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,312))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x4c; 0x89; 0x9c; 0x24; 0x10; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,528))) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x58; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdd; + (* ADOX (% r11) (% rbp) *) + 0x49; 0x11; 0xeb; (* ADC (% r11) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0x40; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,320))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4c; 0x89; 0xa4; 0x24; 0x18; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,536))) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x58; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xa4; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe5; + (* ADOX (% r12) (% rbp) *) + 0x49; 0x11; 0xec; (* ADC (% r12) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0x48; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,328))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0x4c; 0x89; 0xac; 0x24; 0x20; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,544))) (% r13) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x58; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xac; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xed; + (* ADOX (% r13) (% rbp) *) + 0x49; 0x11; 0xed; (* ADC (% r13) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0x50; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,336))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x4c; 0x89; 0xb4; 0x24; 0x28; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,552))) (% r14) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x58; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xb4; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf5; + (* ADOX (% r14) (% rbp) *) + 0x49; 0x11; 0xee; (* ADC (% r14) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0x58; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,344))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0x4c; 0x89; 0xbc; 0x24; 0x30; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,560))) (% r15) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x58; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xbc; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsp,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADOX (% r15) (% rbp) *) + 0x49; 0x11; 0xef; (* ADC (% r15) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,136))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,288))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,296))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,304))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x38; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,312))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x40; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,320))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x48; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,328))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x50; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,336))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x58; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,344))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xdd; + (* ADOX (% rbx) (% rbp) *) + 0x48; 0x11; 0xdd; (* ADC (% rbp) (% rbx) *) + 0x48; 0x8b; 0x94; 0x24; 0x60; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,352))) *) + 0x31; 0xc0; (* XOR (% eax) (% eax) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x58; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% rbp) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,136))) *) + 0x48; 0x11; 0xc5; (* ADC (% rbp) (% rax) *) + 0x4c; 0x89; 0xc0; (* MOV (% rax) (% r8) *) + 0x48; 0x25; 0xff; 0x01; 0x00; 0x00; + (* AND (% rax) (Imm32 (word 511)) *) + 0x4d; 0x0f; 0xac; 0xc8; 0x09; + (* SHRD (% r8) (% r9) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xd1; 0x09; + (* SHRD (% r9) (% r10) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xda; 0x09; + (* SHRD (% r10) (% r11) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xe3; 0x09; + (* SHRD (% r11) (% r12) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xec; 0x09; + (* SHRD (% r12) (% r13) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xf5; 0x09; + (* SHRD (% r13) (% r14) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xfe; 0x09; + (* SHRD (% r14) (% r15) (Imm8 (word 9)) *) + 0x49; 0x0f; 0xac; 0xef; 0x09; + (* SHRD (% r15) (% rbp) (Imm8 (word 9)) *) + 0x48; 0xc1; 0xed; 0x09; (* SHR (% rbp) (Imm8 (word 9)) *) + 0x48; 0x01; 0xc5; (* ADD (% rbp) (% rax) *) + 0xf9; (* STCF *) + 0x4c; 0x13; 0x84; 0x24; 0xf8; 0x01; 0x00; 0x00; + (* ADC (% r8) (Memop Quadword (%% (rsp,504))) *) + 0x4c; 0x13; 0x8c; 0x24; 0x00; 0x02; 0x00; 0x00; + (* ADC (% r9) (Memop Quadword (%% (rsp,512))) *) + 0x4c; 0x13; 0x94; 0x24; 0x08; 0x02; 0x00; 0x00; + (* ADC (% r10) (Memop Quadword (%% (rsp,520))) *) + 0x4c; 0x13; 0x9c; 0x24; 0x10; 0x02; 0x00; 0x00; + (* ADC (% r11) (Memop Quadword (%% (rsp,528))) *) + 0x4c; 0x13; 0xa4; 0x24; 0x18; 0x02; 0x00; 0x00; + (* ADC (% r12) (Memop Quadword (%% (rsp,536))) *) + 0x4c; 0x13; 0xac; 0x24; 0x20; 0x02; 0x00; 0x00; + (* ADC (% r13) (Memop Quadword (%% (rsp,544))) *) + 0x4c; 0x13; 0xb4; 0x24; 0x28; 0x02; 0x00; 0x00; + (* ADC (% r14) (Memop Quadword (%% (rsp,552))) *) + 0x4c; 0x13; 0xbc; 0x24; 0x30; 0x02; 0x00; 0x00; + (* ADC (% r15) (Memop Quadword (%% (rsp,560))) *) + 0x48; 0x81; 0xd5; 0x00; 0xfe; 0xff; 0xff; + (* ADC (% rbp) (Imm32 (word 4294966784)) *) + 0xf5; (* CMC *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x84; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,288))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x8c; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,296))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x94; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,304))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x9c; 0x24; 0x38; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,312))) (% r11) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xa4; 0x24; 0x40; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,320))) (% r12) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xac; 0x24; 0x48; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,328))) (% r13) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xb4; 0x24; 0x50; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,336))) (% r14) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xbc; 0x24; 0x58; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,344))) (% r15) *) + 0x48; 0x83; 0xdd; 0x00; (* SBB (% rbp) (Imm8 (word 0)) *) + 0x48; 0x81; 0xe5; 0xff; 0x01; 0x00; 0x00; + (* AND (% rbp) (Imm32 (word 511)) *) + 0x48; 0x89; 0xac; 0x24; 0x60; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,352))) (% rbp) *) + 0x48; 0x8b; 0x84; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,288))) *) + 0x48; 0x2b; 0x84; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* SUB (% rax) (Memop Quadword (%% (rsp,216))) *) + 0x48; 0x8b; 0x94; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,296))) *) + 0x48; 0x1b; 0x94; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* SBB (% rdx) (Memop Quadword (%% (rsp,224))) *) + 0x4c; 0x8b; 0x84; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MOV (% r8) (Memop Quadword (%% (rsp,304))) *) + 0x4c; 0x1b; 0x84; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* SBB (% r8) (Memop Quadword (%% (rsp,232))) *) + 0x4c; 0x8b; 0x8c; 0x24; 0x38; 0x01; 0x00; 0x00; + (* MOV (% r9) (Memop Quadword (%% (rsp,312))) *) + 0x4c; 0x1b; 0x8c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* SBB (% r9) (Memop Quadword (%% (rsp,240))) *) + 0x4c; 0x8b; 0x94; 0x24; 0x40; 0x01; 0x00; 0x00; + (* MOV (% r10) (Memop Quadword (%% (rsp,320))) *) + 0x4c; 0x1b; 0x94; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* SBB (% r10) (Memop Quadword (%% (rsp,248))) *) + 0x4c; 0x8b; 0x9c; 0x24; 0x48; 0x01; 0x00; 0x00; + (* MOV (% r11) (Memop Quadword (%% (rsp,328))) *) + 0x4c; 0x1b; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* SBB (% r11) (Memop Quadword (%% (rsp,256))) *) + 0x4c; 0x8b; 0xa4; 0x24; 0x50; 0x01; 0x00; 0x00; + (* MOV (% r12) (Memop Quadword (%% (rsp,336))) *) + 0x4c; 0x1b; 0xa4; 0x24; 0x08; 0x01; 0x00; 0x00; + (* SBB (% r12) (Memop Quadword (%% (rsp,264))) *) + 0x4c; 0x8b; 0xac; 0x24; 0x58; 0x01; 0x00; 0x00; + (* MOV (% r13) (Memop Quadword (%% (rsp,344))) *) + 0x4c; 0x1b; 0xac; 0x24; 0x10; 0x01; 0x00; 0x00; + (* SBB (% r13) (Memop Quadword (%% (rsp,272))) *) + 0x4c; 0x8b; 0xb4; 0x24; 0x60; 0x01; 0x00; 0x00; + (* MOV (% r14) (Memop Quadword (%% (rsp,352))) *) + 0x4c; 0x1b; 0xb4; 0x24; 0x18; 0x01; 0x00; 0x00; + (* SBB (% r14) (Memop Quadword (%% (rsp,280))) *) + 0x48; 0x83; 0xd8; 0x00; (* SBB (% rax) (Imm8 (word 0)) *) + 0x48; 0x89; 0x47; 0x48; (* MOV (Memop Quadword (%% (rdi,72))) (% rax) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x48; 0x89; 0x57; 0x50; (* MOV (Memop Quadword (%% (rdi,80))) (% rdx) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x47; 0x58; (* MOV (Memop Quadword (%% (rdi,88))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x4f; 0x60; (* MOV (Memop Quadword (%% (rdi,96))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x57; 0x68; (* MOV (Memop Quadword (%% (rdi,104))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x5f; 0x70; (* MOV (Memop Quadword (%% (rdi,112))) (% r11) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x67; 0x78; (* MOV (Memop Quadword (%% (rdi,120))) (% r12) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xaf; 0x80; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rdi,128))) (% r13) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x49; 0x81; 0xe6; 0xff; 0x01; 0x00; 0x00; + (* AND (% r14) (Imm32 (word 511)) *) + 0x4c; 0x89; 0xb7; 0x88; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rdi,136))) (% r14) *) + 0x48; 0x81; 0xc4; 0x38; 0x02; 0x00; 0x00; + (* ADD (% rsp) (Imm32 (word 568)) *) + 0x41; 0x5f; (* POP (% r15) *) + 0x41; 0x5e; (* POP (% r14) *) + 0x41; 0x5d; (* POP (% r13) *) + 0x41; 0x5c; (* POP (% r12) *) + 0x5d; (* POP (% rbp) *) + 0x5b; (* POP (% rbx) *) + 0xc3 (* RET *) +];; + +let P521_JADD_EXEC = X86_MK_CORE_EXEC_RULE p521_jadd_mc;; + +(* ------------------------------------------------------------------------- *) +(* Common supporting definitions and lemmas for component proofs. *) +(* ------------------------------------------------------------------------- *) + +let p_521 = new_definition `p_521 = 6864797660130609714981900799081393217269435300143305409394463459185543183397656052122559640661454554977296311391480858037121987999716643812574028291115057151`;; + +let nistp521 = define + `nistp521 = + (integer_mod_ring p_521, + ring_neg (integer_mod_ring p_521) (&3), + &b_521:int)`;; + +let nistp521_encode = new_definition + `nistp521_encode = modular_encode(521,p_521)`;; + +let nintlemma = prove + (`&(num_of_int(x rem &p_521)) = x rem &p_521`, + MATCH_MP_TAC INT_OF_NUM_OF_INT THEN MATCH_MP_TAC INT_REM_POS THEN + REWRITE_TAC[INT_OF_NUM_EQ; p_521] THEN CONV_TAC NUM_REDUCE_CONV);; + +let unilemma0 = prove + (`x = a MOD p_521 ==> x < p_521 /\ &x = &a rem &p_521`, + REWRITE_TAC[INT_OF_NUM_REM; p_521] THEN ARITH_TAC);; + +let unilemma1 = prove + (`&x = a rem &p_521 ==> x < p_521 /\ &x = a rem &p_521`, + SIMP_TAC[GSYM INT_OF_NUM_LT; INT_LT_REM_EQ; p_521] THEN INT_ARITH_TAC);; + +let unilemma2 = prove + (`X = num_of_int(x rem &p_521) ==> X < p_521 /\ &X = x rem &p_521`, + DISCH_THEN SUBST1_TAC THEN + REWRITE_TAC[GSYM INT_OF_NUM_LT; nintlemma; INT_LT_REM_EQ] THEN + REWRITE_TAC[INT_OF_NUM_LT; p_521] THEN CONV_TAC NUM_REDUCE_CONV);; + +let lvs = + ["x_1",[`RSI`;`0`]; + "y_1",[`RSI`;`72`]; + "z_1",[`RSI`;`144`]; + "x_2",[`RCX`;`0`]; + "y_2",[`RCX`;`72`]; + "z_2",[`RCX`;`144`]; + "x_3",[`RDI`;`0`]; + "y_3",[`RDI`;`72`]; + "z_3",[`RDI`;`144`]; + "z1sq",[`RSP`;`0`]; + "ww",[`RSP`;`0`]; + "yd",[`RSP`;`72`]; + "y2a",[`RSP`;`72`]; + "x2a",[`RSP`;`144`]; + "zzx2",[`RSP`;`144`]; + "zz",[`RSP`;`216`]; + "t1",[`RSP`;`216`]; + "t2",[`RSP`;`288`]; + "x1a",[`RSP`;`288`]; + "zzx1",[`RSP`;`288`]; + "xd",[`RSP`;`360`]; + "z2sq",[`RSP`;`360`]; + "y1a",[`RSP`;`432`]];; + +(* ------------------------------------------------------------------------- *) +(* Instances of sqr. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_SQR_P521_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE p521_jadd_mc) 231 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1. + !n. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 9)) t = n + ==> + nonoverlapping (word pc,0x7cdb) (stackpointer,568) /\ + nonoverlapping (read RDI t,216) (stackpointer,568) /\ + nonoverlapping (read RSI t,216) (stackpointer,568) /\ + nonoverlapping (read RCX t,216) (stackpointer,568) /\ + nonoverlapping (word pc,0x7cdb) (read RDI t,216) /\ + nonoverlapping (read RSI t,216) (read RDI t,216) /\ + nonoverlapping (read RCX t,216) (read RDI t,216) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST p521_jadd_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read RCX s = read RCX t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 9)) s = + n) + (\s. read RIP s = pcout /\ + (n < p_521 + ==> read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 9)) s = (n EXP 2) MOD p_521)) + (MAYCHANGE [RIP; RAX; RBX; RDX; RBP; + R8; R9; R10; R11; R12; R13; R14; R15] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 9); + memory :> bytes(word_add stackpointer (word 504),64)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + (*** Globalize the n < p_521 assumption for simplicity's sake ***) + + ASM_CASES_TAC `n < p_521` THENL + [ASM_REWRITE_TAC[]; X86_SIM_TAC P521_JADD_EXEC (1--231)] THEN + + (*** Digitize, deduce the bound on the top word specifically ***) + + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "n_" o lhand o concl) THEN + SUBGOAL_THEN `n DIV 2 EXP 512 < 2 EXP 9` MP_TAC THENL + [UNDISCH_TAC `n < p_521` THEN REWRITE_TAC[p_521] THEN ARITH_TAC; + FIRST_ASSUM(fun th -> GEN_REWRITE_TAC (funpow 3 LAND_CONV) [SYM th]) THEN + CONV_TAC(LAND_CONV(ONCE_DEPTH_CONV BIGNUM_OF_WORDLIST_DIV_CONV)) THEN + DISCH_TAC] THEN + + (*** Simulate core squaring, with manual tweaks for small high digit ***) + + X86_ACCSTEPS_TAC P521_JADD_EXEC (1--160) (1--160) THEN + X86_ACCSTEPS_TAC P521_JADD_EXEC (165--189) (161--189) THEN + SUBGOAL_THEN + `&(val(word_add n_8 n_8:int64)):real = &2 * &(val n_8) /\ + &(val(word_mul n_8 n_8:int64)):real = &(val n_8) pow 2` + (CONJUNCTS_THEN SUBST_ALL_TAC) THENL + [REWRITE_TAC[VAL_WORD_ADD; VAL_WORD_MUL; DIMINDEX_64] THEN + REWRITE_TAC[REAL_OF_NUM_CLAUSES; MULT_2; EXP_2] THEN + CONJ_TAC THEN MATCH_MP_TAC MOD_LT THENL + [ALL_TAC; + REWRITE_TAC[ARITH_RULE `2 EXP 64 = 2 EXP 32 * 2 EXP 32`] THEN + MATCH_MP_TAC LT_MULT2 THEN CONJ_TAC] THEN + UNDISCH_TAC `val(n_8:int64) < 2 EXP 9` THEN ARITH_TAC; + ALL_TAC] THEN + SUBGOAL_THEN `bitval(2 EXP 64 <= val(n_8:int64) + val n_8) = 0` + SUBST_ALL_TAC THENL + [REWRITE_TAC[BITVAL_EQ_0] THEN + UNDISCH_TAC `val(n_8:int64) < 2 EXP 9` THEN ARITH_TAC; + ALL_TAC] THEN + SUBGOAL_THEN + `bitval(~(ival(n_8:int64) + ival n_8 = ival (word_add n_8 n_8))) = 0` + SUBST_ALL_TAC THENL + [REWRITE_TAC[BITVAL_EQ_0] THEN CONV_TAC SYM_CONV THEN + MATCH_MP_TAC INT_CONG_IMP_EQ THEN + EXISTS_TAC `(&2:int) pow dimindex(:64)` THEN + REWRITE_TAC[ICONG_WORD_ADD] THEN + MP_TAC(ISPEC `word_add n_8 n_8:int64` IVAL_BOUND) THEN + SUBST1_TAC(ISPEC `n_8:int64` INT_IVAL) THEN + UNDISCH_TAC `val(n_8:int64) < 2 EXP 9` THEN + REWRITE_TAC[DIMINDEX_64; GSYM INT_OF_NUM_CLAUSES] THEN + CONV_TAC NUM_REDUCE_CONV THEN CONV_TAC INT_ARITH; + ALL_TAC] THEN + + (*** Introduce more systematic names for the high part digits ***) + + REABBREV_TAC `h0 = read R8 s189` THEN POP_ASSUM SUBST_ALL_TAC THEN + REABBREV_TAC `h1 = read R9 s189` THEN POP_ASSUM SUBST_ALL_TAC THEN + REABBREV_TAC `h2 = read R10 s189` THEN POP_ASSUM SUBST_ALL_TAC THEN + REABBREV_TAC `h3 = read R11 s189` THEN POP_ASSUM SUBST_ALL_TAC THEN + REABBREV_TAC `h4 = read R12 s189` THEN POP_ASSUM SUBST_ALL_TAC THEN + REABBREV_TAC `h5 = read R13 s189` THEN POP_ASSUM SUBST_ALL_TAC THEN + REABBREV_TAC `h6 = read R14 s189` THEN POP_ASSUM SUBST_ALL_TAC THEN + REABBREV_TAC `h7 = read R15 s189` THEN POP_ASSUM SUBST_ALL_TAC THEN + REABBREV_TAC `h8 = read RBP s189` THEN POP_ASSUM SUBST_ALL_TAC THEN + + (*** Show that the core squaring operation is correct ***) + + SUBGOAL_THEN + `2 EXP 512 * bignum_of_wordlist[h0;h1;h2;h3;h4;h5;h6;h7;h8] + + bignum_from_memory(word_add stackpointer (word 504),8) s189 = + n EXP 2` + ASSUME_TAC THENL + [CONV_TAC(ONCE_DEPTH_CONV BIGNUM_LEXPAND_CONV) THEN + ASM_REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`1088`; `&0:real`] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN CONJ_TAC THENL + [REWRITE_TAC[REAL_OF_NUM_CLAUSES; LE_0] THEN + REWRITE_TAC[ARITH_RULE `2 EXP 1088 = 2 EXP 544 EXP 2`] THEN + REWRITE_TAC[EXP_MONO_LT] THEN UNDISCH_TAC `n < p_521` THEN + REWRITE_TAC[p_521] THEN ARITH_TAC; + REWRITE_TAC[INTEGER_CLOSED]] THEN + EXPAND_TAC "n" THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + CONV_TAC(RAND_CONV REAL_POLY_CONV) THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o + filter (is_ratconst o rand o concl) o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC) THEN + RULE_ASSUM_TAC(REWRITE_RULE[BIGNUM_FROM_MEMORY_BYTES])] THEN + + (*** Now simulate the rotation part ***) + + X86_STEPS_TAC P521_JADD_EXEC (190--201) THEN + + (*** Break up into high and low parts ***) + + ABBREV_TAC `h = (n EXP 2) DIV 2 EXP 521` THEN + ABBREV_TAC `l = (n EXP 2) MOD 2 EXP 521` THEN + SUBGOAL_THEN `h < p_521 /\ l <= p_521` STRIP_ASSUME_TAC THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"] THEN REWRITE_TAC[p_521] THEN + CONJ_TAC THENL [ALL_TAC; ARITH_TAC] THEN + SIMP_TAC[RDIV_LT_EQ; EXP_EQ_0; ARITH_EQ] THEN + TRANS_TAC LET_TRANS `(p_521 - 1) EXP 2` THEN + REWRITE_TAC[EXP_MONO_LE] THEN UNDISCH_TAC `n < p_521` THEN + REWRITE_TAC[p_521] THEN ARITH_TAC; + ALL_TAC] THEN + SUBGOAL_THEN `n EXP 2 MOD p_521 = (h + l) MOD p_521` SUBST1_TAC THENL + [SUBST1_TAC(SYM(SPECL + [`n EXP 2`; `2 EXP 521`] (CONJUNCT2 DIVISION_SIMP))) THEN + ASM_REWRITE_TAC[GSYM CONG] THEN MATCH_MP_TAC(NUMBER_RULE + `(e == 1) (mod p) ==> (e * h + l == h + l) (mod p)`) THEN + REWRITE_TAC[CONG; p_521] THEN ARITH_TAC; + ALL_TAC] THEN + SUBGOAL_THEN + `(n EXP 2) DIV 2 EXP 521 = + bignum_of_wordlist + [word_subword (word_join (h1:int64) h0:int128) (9,64); + word_subword (word_join (h2:int64) h1:int128) (9,64); + word_subword (word_join (h3:int64) h2:int128) (9,64); + word_subword (word_join (h4:int64) h3:int128) (9,64); + word_subword (word_join (h5:int64) h4:int128) (9,64); + word_subword (word_join (h6:int64) h5:int128) (9,64); + word_subword (word_join (h7:int64) h6:int128) (9,64); + word_subword (word_join (h8:int64) h7:int128) (9,64); + word_ushr h8 9] /\ + (n EXP 2) MOD 2 EXP 521 = + 2 EXP 512 * val(word_and h0 (word 511):int64) + + bignum_of_wordlist + [mullo_s101; sum_s105; sum_s111; sum_s115; sum_s121; sum_s125; sum_s131; + sum_s135]` + (CONJUNCTS_THEN SUBST_ALL_TAC) THENL + [MATCH_MP_TAC DIVMOD_UNIQ THEN + REWRITE_TAC[VAL_WORD_AND_MASK_WORD; ARITH_RULE `511 = 2 EXP 9 - 1`] THEN + CONJ_TAC THENL + [FIRST_X_ASSUM(fun th -> GEN_REWRITE_TAC LAND_CONV [SYM th]) THEN + CONV_TAC(ONCE_DEPTH_CONV BIGNUM_LEXPAND_CONV) THEN + ASM_REWRITE_TAC[ADD_ASSOC; EQ_ADD_RCANCEL] THEN + REWRITE_TAC[bignum_of_wordlist; VAL_WORD_USHR] THEN + SIMP_TAC[VAL_WORD_SUBWORD_JOIN_64; DIMINDEX_64; ARITH_LE; ARITH_LT] THEN + ARITH_TAC; + MATCH_MP_TAC(ARITH_RULE + `x < 2 EXP (64 * 8) ==> 2 EXP 512 * h MOD 2 EXP 9 + x < 2 EXP 521`) THEN + MATCH_MP_TAC BIGNUM_OF_WORDLIST_BOUND THEN REWRITE_TAC[LENGTH; ARITH]]; + ALL_TAC] THEN + + (*** The net comparison h + l >= p_521 ***) + + X86_ACCSTEPS_TAC P521_JADD_EXEC (202--211) (202--211) THEN + SUBGOAL_THEN + `&(val(word_add (word_ushr h8 9) (word_and h0 (word 511):int64))):real = + &(val(word_ushr h8 9:int64)) + &(val(word_and h0 (word 511):int64))` + SUBST_ALL_TAC THENL + [REWRITE_TAC[REAL_OF_NUM_CLAUSES; VAL_WORD_ADD; DIMINDEX_64] THEN + MATCH_MP_TAC MOD_LT THEN + REWRITE_TAC[VAL_WORD_AND_MASK_WORD; ARITH_RULE `511 = 2 EXP 9 - 1`] THEN + REWRITE_TAC[VAL_WORD_USHR] THEN + MP_TAC(SPEC `h8:int64` VAL_BOUND_64) THEN ARITH_TAC; + ALL_TAC] THEN + SUBGOAL_THEN `carry_s211 <=> p_521 <= h + l` SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LE THEN EXISTS_TAC `576` THEN + MAP_EVERY EXPAND_TAC ["h"; "l"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist; p_521] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ALL_TAC] THEN + + (*** The final correction ***) + + X86_ACCSTEPS_TAC P521_JADD_EXEC (212--231) (212--231) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC SYM_CONV THEN CONV_TAC(RAND_CONV BIGNUM_LEXPAND_CONV) THEN + ASM_REWRITE_TAC[] THEN MATCH_MP_TAC EQUAL_FROM_CONGRUENT_MOD_MOD THEN + MAP_EVERY EXISTS_TAC + [`521`; + `if h + l < p_521 then &h + &l:real else (&h + &l) - &p_521`] THEN + REPEAT CONJ_TAC THENL + [BOUNDER_TAC[]; + REWRITE_TAC[p_521] THEN ARITH_TAC; + REWRITE_TAC[p_521] THEN ARITH_TAC; + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + REWRITE_TAC[GSYM NOT_LT] THEN ABBREV_TAC `bb <=> h + l < p_521` THEN + MAP_EVERY EXPAND_TAC ["h"; "l"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist; p_521] THEN + REWRITE_TAC[VAL_WORD_AND_MASK_WORD; ARITH_RULE `511 = 2 EXP 9 - 1`] THEN + REWRITE_TAC[REAL_OF_NUM_MOD] THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC NUM_REDUCE_CONV THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC; + ASM_SIMP_TAC[MOD_CASES; ARITH_RULE + `h < p /\ l <= p ==> h + l < 2 * p`] THEN + SIMP_TAC[REAL_OF_NUM_CLAUSES; REAL_OF_NUM_SUB; COND_SWAP; GSYM NOT_LE] THEN + MESON_TAC[]]);; + +(* ------------------------------------------------------------------------- *) +(* Instances of mul. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_MUL_P521_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE p521_jadd_mc) 312 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1 p2 n2. + !a. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 9)) t = a + ==> + !b. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 9)) t = b + ==> + nonoverlapping (word pc,0x7cdb) (stackpointer,568) /\ + nonoverlapping (read RDI t,216) (stackpointer,568) /\ + nonoverlapping (read RSI t,216) (stackpointer,568) /\ + nonoverlapping (read RCX t,216) (stackpointer,568) /\ + nonoverlapping (word pc,0x7cdb) (read RDI t,216) /\ + nonoverlapping (read RSI t,216) (read RDI t,216) /\ + nonoverlapping (read RCX t,216) (read RDI t,216) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST p521_jadd_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read RCX s = read RCX t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 9)) s = + a /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 9)) s = + b) + (\s. read RIP s = pcout /\ + (a < p_521 /\ b < p_521 + ==> read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 9)) s = (a * b) MOD p_521)) + (MAYCHANGE [RIP; RAX; RBX; RBP; RDX; + R8; R9; R10; R11; R12; R13; R14; R15] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 9); + memory :> bytes(word_add stackpointer (word 504),64)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + (*** Globalize the a < p_521 /\ b < p_521 assumption for simplicity ***) + + ASM_CASES_TAC `a < p_521 /\ b < p_521` THENL + [ASM_REWRITE_TAC[] THEN FIRST_X_ASSUM(CONJUNCTS_THEN ASSUME_TAC); + X86_SIM_TAC P521_JADD_EXEC (2--313)] THEN + + (*** Digitize, deduce the bound on the top words ***) + + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s1" THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "y_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "x_" o lhand o concl) THEN + SUBGOAL_THEN + `a DIV 2 EXP 512 < 2 EXP 9 /\ b DIV 2 EXP 512 < 2 EXP 9` + MP_TAC THENL + [MAP_EVERY UNDISCH_TAC [`a < p_521`; `b < p_521`] THEN + REWRITE_TAC[p_521] THEN ARITH_TAC; + MAP_EVERY EXPAND_TAC ["a"; "b"] THEN + CONV_TAC(LAND_CONV(ONCE_DEPTH_CONV BIGNUM_OF_WORDLIST_DIV_CONV)) THEN + ASM_REWRITE_TAC[] THEN STRIP_TAC] THEN + + (*** Simulate the initial multiplication ***) + + X86_ACCSTEPS_TAC P521_JADD_EXEC (2--271) (2--271) THEN + + (*** Introduce more systematic names for the high part digits ***) + + REABBREV_TAC `h0 = read R8 s271` THEN POP_ASSUM SUBST_ALL_TAC THEN + REABBREV_TAC `h1 = read R9 s271` THEN POP_ASSUM SUBST_ALL_TAC THEN + REABBREV_TAC `h2 = read R10 s271` THEN POP_ASSUM SUBST_ALL_TAC THEN + REABBREV_TAC `h3 = read R11 s271` THEN POP_ASSUM SUBST_ALL_TAC THEN + REABBREV_TAC `h4 = read R12 s271` THEN POP_ASSUM SUBST_ALL_TAC THEN + REABBREV_TAC `h5 = read R13 s271` THEN POP_ASSUM SUBST_ALL_TAC THEN + REABBREV_TAC `h6 = read R14 s271` THEN POP_ASSUM SUBST_ALL_TAC THEN + REABBREV_TAC `h7 = read R15 s271` THEN POP_ASSUM SUBST_ALL_TAC THEN + REABBREV_TAC `h8 = read RBP s271` THEN POP_ASSUM SUBST_ALL_TAC THEN + + (*** Show that the core multiplication operation is correct ***) + + SUBGOAL_THEN + `2 EXP 512 * bignum_of_wordlist[h0;h1;h2;h3;h4;h5;h6;h7;h8] + + bignum_from_memory(word_add stackpointer (word 504),8) s271 = + a * b` + ASSUME_TAC THENL + [CONV_TAC(ONCE_DEPTH_CONV BIGNUM_LEXPAND_CONV) THEN + ASM_REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`1088`; `&0:real`] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN CONJ_TAC THENL + [REWRITE_TAC[REAL_OF_NUM_CLAUSES; LE_0] THEN + REWRITE_TAC[EXP_2; ARITH_RULE `2 EXP 1088 = 2 EXP 544 EXP 2`] THEN + MATCH_MP_TAC LT_MULT2 THEN + MAP_EVERY UNDISCH_TAC [`a < p_521`; `b < p_521`] THEN + REWRITE_TAC[p_521] THEN ARITH_TAC; + REWRITE_TAC[INTEGER_CLOSED]] THEN + MAP_EVERY EXPAND_TAC ["a"; "b"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + CONV_TAC(RAND_CONV REAL_POLY_CONV) THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o + filter (is_ratconst o rand o concl) o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC) THEN + RULE_ASSUM_TAC(REWRITE_RULE[BIGNUM_FROM_MEMORY_BYTES])] THEN + + (*** Now simulate the rotation part ***) + + X86_STEPS_TAC P521_JADD_EXEC (272--283) THEN + + (*** Break up into high and low parts ***) + + ABBREV_TAC `h = (a * b) DIV 2 EXP 521` THEN + ABBREV_TAC `l = (a * b) MOD 2 EXP 521` THEN + SUBGOAL_THEN `h < p_521 /\ l <= p_521` STRIP_ASSUME_TAC THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"] THEN REWRITE_TAC[p_521] THEN + CONJ_TAC THENL [ALL_TAC; ARITH_TAC] THEN + SIMP_TAC[RDIV_LT_EQ; EXP_EQ_0; ARITH_EQ] THEN + TRANS_TAC LET_TRANS `(p_521 - 1) EXP 2` THEN + CONJ_TAC THENL [ALL_TAC; REWRITE_TAC[p_521] THEN ARITH_TAC] THEN + REWRITE_TAC[EXP_2] THEN MATCH_MP_TAC LE_MULT2 THEN CONJ_TAC THEN + MATCH_MP_TAC(ARITH_RULE `x < n ==> x <= n - 1`) THEN ASM_REWRITE_TAC[]; + ALL_TAC] THEN + SUBGOAL_THEN `(a * b) MOD p_521 = (h + l) MOD p_521` SUBST1_TAC THENL + [SUBST1_TAC(SYM(SPECL + [`a * b:num`; `2 EXP 521`] (CONJUNCT2 DIVISION_SIMP))) THEN + ASM_REWRITE_TAC[GSYM CONG] THEN MATCH_MP_TAC(NUMBER_RULE + `(e == 1) (mod p) ==> (e * h + l == h + l) (mod p)`) THEN + REWRITE_TAC[CONG; p_521] THEN ARITH_TAC; + ALL_TAC] THEN + SUBGOAL_THEN + `(a * b) DIV 2 EXP 521 = + bignum_of_wordlist + [word_subword (word_join (h1:int64) h0:int128) (9,64); + word_subword (word_join (h2:int64) h1:int128) (9,64); + word_subword (word_join (h3:int64) h2:int128) (9,64); + word_subword (word_join (h4:int64) h3:int128) (9,64); + word_subword (word_join (h5:int64) h4:int128) (9,64); + word_subword (word_join (h6:int64) h5:int128) (9,64); + word_subword (word_join (h7:int64) h6:int128) (9,64); + word_subword (word_join (h8:int64) h7:int128) (9,64); + word_ushr h8 9] /\ + (a * b) MOD 2 EXP 521 = + 2 EXP 512 * val(word_and h0 (word 511):int64) + + bignum_of_wordlist + [mullo_s4; sum_s24; sum_s52; sum_s80; sum_s108; sum_s136; sum_s164; + sum_s192]` + (CONJUNCTS_THEN SUBST_ALL_TAC) THENL + [MATCH_MP_TAC DIVMOD_UNIQ THEN + REWRITE_TAC[VAL_WORD_AND_MASK_WORD; ARITH_RULE `511 = 2 EXP 9 - 1`] THEN + CONJ_TAC THENL + [FIRST_X_ASSUM(fun th -> GEN_REWRITE_TAC LAND_CONV [SYM th]) THEN + CONV_TAC(ONCE_DEPTH_CONV BIGNUM_LEXPAND_CONV) THEN + ASM_REWRITE_TAC[ADD_ASSOC; EQ_ADD_RCANCEL] THEN + REWRITE_TAC[bignum_of_wordlist; VAL_WORD_USHR] THEN + SIMP_TAC[VAL_WORD_SUBWORD_JOIN_64; DIMINDEX_64; ARITH_LE; ARITH_LT] THEN + ARITH_TAC; + MATCH_MP_TAC(ARITH_RULE + `x < 2 EXP (64 * 8) ==> 2 EXP 512 * h MOD 2 EXP 9 + x < 2 EXP 521`) THEN + MATCH_MP_TAC BIGNUM_OF_WORDLIST_BOUND THEN REWRITE_TAC[LENGTH; ARITH]]; + ALL_TAC] THEN + + (*** The net comparison h + l >= p_521 ***) + + X86_ACCSTEPS_TAC P521_JADD_EXEC (284--293) (284--293) THEN + SUBGOAL_THEN + `&(val(word_add (word_ushr h8 9) (word_and h0 (word 511):int64))):real = + &(val(word_ushr h8 9:int64)) + &(val(word_and h0 (word 511):int64))` + SUBST_ALL_TAC THENL + [REWRITE_TAC[REAL_OF_NUM_CLAUSES; VAL_WORD_ADD; DIMINDEX_64] THEN + MATCH_MP_TAC MOD_LT THEN + REWRITE_TAC[VAL_WORD_AND_MASK_WORD; ARITH_RULE `511 = 2 EXP 9 - 1`] THEN + REWRITE_TAC[VAL_WORD_USHR] THEN + MP_TAC(SPEC `h8:int64` VAL_BOUND_64) THEN ARITH_TAC; + ALL_TAC] THEN + SUBGOAL_THEN `carry_s293 <=> p_521 <= h + l` SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LE THEN EXISTS_TAC `576` THEN + MAP_EVERY EXPAND_TAC ["h"; "l"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist; p_521] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ALL_TAC] THEN + + (*** The final correction ***) + + X86_ACCSTEPS_TAC P521_JADD_EXEC (294--313) (294--313) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC SYM_CONV THEN CONV_TAC(RAND_CONV BIGNUM_LEXPAND_CONV) THEN + ASM_REWRITE_TAC[] THEN MATCH_MP_TAC EQUAL_FROM_CONGRUENT_MOD_MOD THEN + MAP_EVERY EXISTS_TAC + [`521`; + `if h + l < p_521 then &h + &l:real else (&h + &l) - &p_521`] THEN + REPEAT CONJ_TAC THENL + [BOUNDER_TAC[]; + REWRITE_TAC[p_521] THEN ARITH_TAC; + REWRITE_TAC[p_521] THEN ARITH_TAC; + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + REWRITE_TAC[GSYM NOT_LT] THEN ABBREV_TAC `bb <=> h + l < p_521` THEN + MAP_EVERY EXPAND_TAC ["h"; "l"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist; p_521] THEN + REWRITE_TAC[VAL_WORD_AND_MASK_WORD; ARITH_RULE `511 = 2 EXP 9 - 1`] THEN + REWRITE_TAC[REAL_OF_NUM_MOD] THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC NUM_REDUCE_CONV THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC; + ASM_SIMP_TAC[MOD_CASES; ARITH_RULE + `h < p /\ l <= p ==> h + l < 2 * p`] THEN + SIMP_TAC[REAL_OF_NUM_CLAUSES; REAL_OF_NUM_SUB; COND_SWAP; GSYM NOT_LE] THEN + MESON_TAC[]]);; + +(* ------------------------------------------------------------------------- *) +(* Instances of sub. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_SUB_P521_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE p521_jadd_mc) 37 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 9)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 9)) t = n + ==> + nonoverlapping (word pc,0x7cdb) (word_add (read p3 t) (word n3),72) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST p521_jadd_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read RCX s = read RCX t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 9)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 9)) s = + n) + (\s. read RIP s = pcout /\ + (m < p_521 /\ n < p_521 + ==> &(read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 9)) s) = (&m - &n) rem &p_521)) + (MAYCHANGE [RIP; RAX; RDX; R8; R9; R10; R11; RBX; R12; R13; R14] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 9)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "m_" o lhand o concl) THEN + + (*** Initial subtraction x - y, comparison result ***) + + X86_ACCSTEPS_TAC P521_JADD_EXEC [2;4;6;8;10;12;14;16;18] (1--18) THEN + + SUBGOAL_THEN `carry_s18 <=> m < n` SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN EXISTS_TAC `576` THEN + MAP_EVERY EXPAND_TAC ["m"; "n"] THEN + REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ALL_TAC] THEN + + (*** Further optional subtraction mod 2^521 ***) + + X86_ACCSTEPS_TAC P521_JADD_EXEC + [19;21;23;25;27;29;31;33;35] (19--37) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN STRIP_TAC THEN + + (*** Map things into the reals, doing case analysis over comparison ***) + + TRANS_TAC EQ_TRANS `if m < n then &m - &n + &p_521:int else &m - &n` THEN + CONJ_TAC THENL + [ONCE_REWRITE_TAC[int_eq] THEN ONCE_REWRITE_TAC[COND_RAND] THEN + REWRITE_TAC[int_of_num_th; int_sub_th; int_add_th]; + CONV_TAC SYM_CONV THEN MATCH_MP_TAC INT_REM_UNIQ THEN + EXISTS_TAC `if m:num < n then --(&1):int else &0` THEN + MAP_EVERY UNDISCH_TAC [`m < p_521`; `n < p_521`] THEN + REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES; p_521] THEN INT_ARITH_TAC] THEN + + (*** Hence show that we get the right result in 521 bits ***) + + CONV_TAC SYM_CONV THEN + CONV_TAC(RAND_CONV(RAND_CONV BIGNUM_LEXPAND_CONV)) THEN + ASM_REWRITE_TAC[SYM(NUM_REDUCE_CONV `2 EXP 9 - 1`)] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`521`; `&0:real`] THEN CONJ_TAC THENL + [MAP_EVERY UNDISCH_TAC [`m < p_521`; `n < p_521`] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; p_521] THEN REAL_ARITH_TAC; + ALL_TAC] THEN + CONJ_TAC THENL + [REWRITE_TAC[REAL_OF_NUM_CLAUSES; LE_0] THEN + REWRITE_TAC[BIGNUM_OF_WORDLIST_SPLIT_RULE(8,1)] THEN + REWRITE_TAC[BIGNUM_OF_WORDLIST_SING; VAL_WORD_AND_MASK_WORD] THEN + MATCH_MP_TAC(ARITH_RULE + `x < 2 EXP (64 * 8) ==> x + 2 EXP 512 * n MOD 2 EXP 9 < 2 EXP 521`) THEN + MATCH_MP_TAC BIGNUM_OF_WORDLIST_BOUND THEN + REWRITE_TAC[LENGTH] THEN ARITH_TAC; + REWRITE_TAC[INTEGER_CLOSED]] THEN + ABBREV_TAC `bb <=> m:num < n` THEN MAP_EVERY EXPAND_TAC ["m"; "n"] THEN + REWRITE_TAC[bignum_of_wordlist; VAL_WORD_AND_MASK_WORD] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; REAL_OF_NUM_MOD; p_521] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Overall point operation proof. *) +(* ------------------------------------------------------------------------- *) + +let P521_JADD_CORRECT = time prove + (`!p3 p1 t1 p2 t2 pc stackpointer. + ALLPAIRS nonoverlapping + [(p3,216); (stackpointer,568)] + [(word pc,0x7cdb); (p1,216); (p2,216)] /\ + nonoverlapping (p3,216) (stackpointer,568) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST p521_jadd_mc) /\ + read RIP s = word(pc + 0x11) /\ + read RSP s = stackpointer /\ + C_ARGUMENTS [p3; p1; p2] s /\ + bignum_triple_from_memory (p1,9) s = t1 /\ + bignum_triple_from_memory (p2,9) s = t2) + (\s. read RIP s = word (pc + 0x7cc9) /\ + (!x1 y1 z1 x2 y2 z2. + ~(z1 = &0) /\ ~(z2 = &0) /\ + ~(jacobian_eq (integer_mod_ring p_521) + (x1,y1,z1) (x2,y2,z2)) /\ + ~(jacobian_eq (integer_mod_ring p_521) + (jacobian_neg nistp521 (x1,y1,z1)) + (x2,y2,z2)) /\ + t1 = tripled nistp521_encode (x1,y1,z1) /\ + t2 = tripled nistp521_encode (x2,y2,z2) + ==> bignum_triple_from_memory(p3,9) s = + tripled nistp521_encode + (jacobian_add nistp521 (x1,y1,z1) (x2,y2,z2)))) + (MAYCHANGE [RIP; RAX; RBX; RCX; RDX; RBP; R8; R9; + R10; R11; R12; R13; R14; R15] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,216); + memory :> bytes(stackpointer,568)])`, + REWRITE_TAC[FORALL_PAIR_THM] THEN + MAP_EVERY X_GEN_TAC + [`p3:int64`; `p1:int64`; `x1:num`; `y1:num`; `z1:num`; `p2:int64`; + `x2:num`; `y2:num`; `z2:num`; `pc:num`; `stackpointer:int64`] THEN + REWRITE_TAC[ALLPAIRS; ALL; NONOVERLAPPING_CLAUSES] THEN STRIP_TAC THEN + REWRITE_TAC[C_ARGUMENTS; SOME_FLAGS; PAIR_EQ; bignum_triple_from_memory] THEN + CONV_TAC(ONCE_DEPTH_CONV NUM_MULT_CONV) THEN + CONV_TAC(ONCE_DEPTH_CONV NORMALIZE_RELATIVE_ADDRESS_CONV) THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + + LOCAL_SQR_P521_TAC 1 ["z1sq";"z_1"] THEN + LOCAL_SQR_P521_TAC 0 ["z2sq";"z_2"] THEN + LOCAL_MUL_P521_TAC 0 ["y1a";"z_2";"y_1"] THEN + LOCAL_MUL_P521_TAC 0 ["y2a";"z_1";"y_2"] THEN + LOCAL_MUL_P521_TAC 0 ["x2a";"z1sq";"x_2"] THEN + LOCAL_MUL_P521_TAC 0 ["x1a";"z2sq";"x_1"] THEN + LOCAL_MUL_P521_TAC 0 ["y2a";"z1sq";"y2a"] THEN + LOCAL_MUL_P521_TAC 0 ["y1a";"z2sq";"y1a"] THEN + LOCAL_SUB_P521_TAC 0 ["xd";"x2a";"x1a"] THEN + LOCAL_SUB_P521_TAC 0 ["yd";"y2a";"y1a"] THEN + LOCAL_SQR_P521_TAC 0 ["zz";"xd"] THEN + LOCAL_SQR_P521_TAC 0 ["ww";"yd"] THEN + LOCAL_MUL_P521_TAC 0 ["zzx1";"zz";"x1a"] THEN + LOCAL_MUL_P521_TAC 0 ["zzx2";"zz";"x2a"] THEN + LOCAL_SUB_P521_TAC 0 ["x_3";"ww";"zzx1"] THEN + LOCAL_SUB_P521_TAC 0 ["t1";"zzx2";"zzx1"] THEN + LOCAL_MUL_P521_TAC 0 ["xd";"xd";"z_1"] THEN + LOCAL_SUB_P521_TAC 0 ["x_3";"x_3";"zzx2"] THEN + LOCAL_SUB_P521_TAC 0 ["t2";"zzx1";"x_3"] THEN + LOCAL_MUL_P521_TAC 0 ["t1";"t1";"y1a"] THEN + LOCAL_MUL_P521_TAC 0 ["z_3";"xd";"z_2"] THEN + LOCAL_MUL_P521_TAC 0 ["t2";"yd";"t2"] THEN + LOCAL_SUB_P521_TAC 0 ["y_3";"t2";"t1"] THEN + + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + DISCARD_STATE_TAC "s24" THEN + DISCARD_MATCHING_ASSUMPTIONS [`nonoverlapping_modulo a b c`] THEN + MAP_EVERY X_GEN_TAC + [`x1':int`; `y1':int`; `z1':int`; `x2':int`; `y2':int`; `z2':int`] THEN + REPLICATE_TAC 4 (DISCH_THEN(CONJUNCTS_THEN2 ASSUME_TAC MP_TAC)) THEN + REWRITE_TAC[tripled; nistp521_encode; PAIR_EQ; modular_encode] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN + (STRIP_ASSUME_TAC o MATCH_MP unilemma2)) THEN + + (*** Dispose of any range hypotheses ***) + + REPEAT(FIRST_X_ASSUM(MP_TAC o check (is_imp o concl))) THEN + REPEAT(ANTS_TAC THENL + [REWRITE_TAC[p_521] THEN RULE_ASSUM_TAC(REWRITE_RULE[p_521]) THEN + CONV_TAC NUM_REDUCE_CONV THEN ASM BOUNDER_TAC[]; + (DISCH_THEN(STRIP_ASSUME_TAC o MATCH_MP unilemma0) ORELSE + DISCH_THEN(STRIP_ASSUME_TAC o MATCH_MP unilemma1))]) THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o GEN_REWRITE_RULE I [GSYM NOT_LE])) THEN + + (*** Now push the moduli around then do the algebra ***) + + RULE_ASSUM_TAC(REWRITE_RULE + [num_congruent; GSYM INT_OF_NUM_CLAUSES; GSYM INT_OF_NUM_REM]) THEN + ASM_REWRITE_TAC[tripled; jacobian_add; nistp521] THEN + ASM_REWRITE_TAC[GSYM nistp521] THEN + REWRITE_TAC[INTEGER_MOD_RING_CLAUSES] THEN + CONV_TAC INT_REDUCE_CONV THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN + CONV_TAC INT_REM_DOWN_CONV THEN + REWRITE_TAC[tripled; modular_encode] THEN + REWRITE_TAC[PAIR_EQ; GSYM INT_OF_NUM_EQ; nintlemma] THEN + CONV_TAC INT_REM_DOWN_CONV THEN + REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES; GSYM INT_OF_NUM_REM] THEN + ASM_REWRITE_TAC[] THEN CONV_TAC INT_REM_DOWN_CONV THEN + REPEAT CONJ_TAC THEN AP_THM_TAC THEN AP_TERM_TAC THEN + INT_ARITH_TAC);; + +let P521_JADD_SUBROUTINE_CORRECT = time prove + (`!p3 p1 t1 p2 t2 pc stackpointer returnaddress. + ALLPAIRS nonoverlapping + [(p3,216); (word_sub stackpointer (word 616),616)] + [(word pc,0x7cdb); (p1,216); (p2,216)] /\ + nonoverlapping (p3,216) (word_sub stackpointer (word 616),624) + ==> ensures x86 + (\s. bytes_loaded s (word pc) p521_jadd_mc /\ + read RIP s = word pc /\ + read RSP s = stackpointer /\ + read (memory :> bytes64 stackpointer) s = returnaddress /\ + C_ARGUMENTS [p3; p1; p2] s /\ + bignum_triple_from_memory (p1,9) s = t1 /\ + bignum_triple_from_memory (p2,9) s = t2) + (\s. read RIP s = returnaddress /\ + read RSP s = word_add stackpointer (word 8) /\ + (!x1 y1 z1 x2 y2 z2. + ~(z1 = &0) /\ ~(z2 = &0) /\ + ~(jacobian_eq (integer_mod_ring p_521) + (x1,y1,z1) (x2,y2,z2)) /\ + ~(jacobian_eq (integer_mod_ring p_521) + (jacobian_neg nistp521 (x1,y1,z1)) + (x2,y2,z2)) /\ + t1 = tripled nistp521_encode (x1,y1,z1) /\ + t2 = tripled nistp521_encode (x2,y2,z2) + ==> bignum_triple_from_memory(p3,9) s = + tripled nistp521_encode + (jacobian_add nistp521 (x1,y1,z1) (x2,y2,z2)))) + (MAYCHANGE [RIP; RSP; RAX; RCX; RDX; R8; R9; R10; R11] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,216); + memory :> bytes(word_sub stackpointer (word 616),616)])`, + X86_PROMOTE_RETURN_STACK_TAC p521_jadd_mc P521_JADD_CORRECT + `[RBX; RBP; R12; R13; R14; R15]` 616);; + +(* ------------------------------------------------------------------------- *) +(* Correctness of Windows ABI version. *) +(* ------------------------------------------------------------------------- *) + +let windows_p521_jadd_mc = define_from_elf "windows_p521_jadd_mc" + "x86/p521/p521_jadd.obj";; + +let WINDOWS_P521_JADD_SUBROUTINE_CORRECT = time prove + (`!p3 p1 t1 p2 t2 pc stackpointer returnaddress. + ALLPAIRS nonoverlapping + [(p3,216); (word_sub stackpointer (word 632),632)] + [(word pc,0x7ce8); (p1,216); (p2,216)] /\ + nonoverlapping (p3,216) (word_sub stackpointer (word 632),640) + ==> ensures x86 + (\s. bytes_loaded s (word pc) windows_p521_jadd_mc /\ + read RIP s = word pc /\ + read RSP s = stackpointer /\ + read (memory :> bytes64 stackpointer) s = returnaddress /\ + WINDOWS_C_ARGUMENTS [p3; p1; p2] s /\ + bignum_triple_from_memory (p1,9) s = t1 /\ + bignum_triple_from_memory (p2,9) s = t2) + (\s. read RIP s = returnaddress /\ + read RSP s = word_add stackpointer (word 8) /\ + (!x1 y1 z1 x2 y2 z2. + ~(z1 = &0) /\ ~(z2 = &0) /\ + ~(jacobian_eq (integer_mod_ring p_521) + (x1,y1,z1) (x2,y2,z2)) /\ + ~(jacobian_eq (integer_mod_ring p_521) + (jacobian_neg nistp521 (x1,y1,z1)) + (x2,y2,z2)) /\ + t1 = tripled nistp521_encode (x1,y1,z1) /\ + t2 = tripled nistp521_encode (x2,y2,z2) + ==> bignum_triple_from_memory(p3,9) s = + tripled nistp521_encode + (jacobian_add nistp521 (x1,y1,z1) (x2,y2,z2)))) + (MAYCHANGE [RIP; RSP; RAX; RCX; RDX; R8; R9; R10; R11] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,216); + memory :> bytes(word_sub stackpointer (word 632),632)])`, + WINDOWS_X86_WRAP_STACK_TAC + windows_p521_jadd_mc p521_jadd_mc + P521_JADD_CORRECT + `[RBX; RBP; R12; R13; R14; R15]` 616);; diff --git a/x86/proofs/p521_jdouble.ml b/x86/proofs/p521_jdouble.ml new file mode 100644 index 0000000000..23d4e2f864 --- /dev/null +++ b/x86/proofs/p521_jdouble.ml @@ -0,0 +1,6614 @@ +(* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + *) + +(* ========================================================================= *) +(* Point doubling in Jacobian coordinates for NIST p521 curve. *) +(* ========================================================================= *) + +needs "x86/proofs/base.ml";; +needs "common/ecencoding.ml";; +needs "EC/jacobian.ml";; +needs "EC/nistp521.ml";; + +prioritize_int();; +prioritize_real();; +prioritize_num();; + +(**** print_literal_from_elf "x86/p521/p521_jdouble.o";; + ****) + +let p521_jdouble_mc = define_assert_from_elf + "p521_jdouble_mc" "x86/p521/p521_jdouble.o" +[ + 0x53; (* PUSH (% rbx) *) + 0x41; 0x54; (* PUSH (% r12) *) + 0x41; 0x55; (* PUSH (% r13) *) + 0x41; 0x56; (* PUSH (% r14) *) + 0x41; 0x57; (* PUSH (% r15) *) + 0x48; 0x81; 0xec; 0x38; 0x02; 0x00; 0x00; + (* SUB (% rsp) (Imm32 (word 568)) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x96; 0x90; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,144))) *) + 0xc4; 0xe2; 0xb3; 0xf6; 0x86; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rax,% r9) (% rdx,Memop Quadword (%% (rsi,152))) *) + 0x4c; 0x89; 0x8c; 0x24; 0x00; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,512))) (% r9) *) + 0xc4; 0xe2; 0xab; 0xf6; 0x9e; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% r10) (% rdx,Memop Quadword (%% (rsi,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0x4c; 0x89; 0x94; 0x24; 0x08; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,520))) (% r10) *) + 0xc4; 0xe2; 0xa3; 0xf6; 0x86; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rax,% r11) (% rdx,Memop Quadword (%% (rsi,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% rbx) *) + 0xc4; 0xe2; 0x9b; 0xf6; 0x9e; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% r12) (% rdx,Memop Quadword (%% (rsi,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xc4; 0xe2; 0x93; 0xf6; 0x86; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rax,% r13) (% rdx,Memop Quadword (%% (rsi,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADCX (% r13) (% rbx) *) + 0xc4; 0xe2; 0x8b; 0xf6; 0x9e; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% r14) (% rdx,Memop Quadword (%% (rsi,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xc4; 0x62; 0x83; 0xf6; 0x86; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% r8,% r15) (% rdx,Memop Quadword (%% (rsi,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADCX (% r15) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc1; + (* ADCX (% r8) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x96; 0x98; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,152))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x4c; 0x89; 0x9c; 0x24; 0x10; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,528))) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4c; 0x89; 0xa4; 0x24; 0x18; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,536))) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x8e; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% r9,% rax) (% rdx,Memop Quadword (%% (rsi,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc9; + (* ADOX (% r9) (% rcx) *) + 0x48; 0x8b; 0x96; 0xb0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,176))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x96; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsi,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd1; + (* ADOX (% r10) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd1; + (* ADCX (% r10) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x96; 0xa0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,160))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0x4c; 0x89; 0xac; 0x24; 0x20; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,544))) (% r13) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x4c; 0x89; 0xb4; 0x24; 0x28; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,552))) (% r14) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0x48; 0x8b; 0x96; 0xc0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,192))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x9e; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsi,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd9; + (* ADOX (% r11) (% rcx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xa6; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsi,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADOX (% r12) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADCX (% r12) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x96; 0xa8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,168))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0x4c; 0x89; 0xbc; 0x24; 0x30; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,560))) (% r15) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0x8b; 0x96; 0xc8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,200))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xae; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsi,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADOX (% r13) (% rcx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xb6; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsi,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADOX (% r14) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADCX (% r14) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x96; 0x90; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,144))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% rdx) *) + 0x48; 0x89; 0x84; 0x24; 0xf8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,504))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x00; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,512))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% rax) (% rbx) *) + 0x48; 0x89; 0x84; 0x24; 0x00; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,512))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x08; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,520))) *) + 0x48; 0x8b; 0x96; 0x98; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,152))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc2; + (* ADOX (% rax) (% rdx) *) + 0x48; 0x89; 0x84; 0x24; 0x08; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,520))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x10; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,528))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% rax) (% rbx) *) + 0x48; 0x89; 0x84; 0x24; 0x10; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,528))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x18; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,536))) *) + 0x48; 0x8b; 0x96; 0xa0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,160))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc2; + (* ADOX (% rax) (% rdx) *) + 0x48; 0x89; 0x84; 0x24; 0x18; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,536))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x20; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,544))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% rax) (% rbx) *) + 0x48; 0x89; 0x84; 0x24; 0x20; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,544))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x28; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,552))) *) + 0x48; 0x8b; 0x96; 0xa8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,168))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc2; + (* ADOX (% rax) (% rdx) *) + 0x48; 0x89; 0x84; 0x24; 0x28; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,552))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x30; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,560))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% rax) (% rbx) *) + 0x48; 0x89; 0x84; 0x24; 0x30; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,560))) (% rax) *) + 0x48; 0x8b; 0x96; 0xb0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,176))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% r8) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc2; + (* ADOX (% r8) (% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% r9) (% r9) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0x48; 0x8b; 0x96; 0xb8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,184))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xd2; + (* ADCX (% r10) (% r10) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd2; + (* ADOX (% r10) (% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% r11) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0x8b; 0x96; 0xc0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,192))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xe4; + (* ADCX (% r12) (% r12) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe2; + (* ADOX (% r12) (% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% r13) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0x8b; 0x96; 0xc8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,200))) *) + 0xc4; 0x62; 0xeb; 0xf6; 0xfa; + (* MULX4 (% r15,% rdx) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf6; + (* ADCX (% r14) (% r14) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf2; + (* ADOX (% r14) (% rdx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% rcx) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% rcx) *) + 0x48; 0x8b; 0x96; 0xd0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,208))) *) + 0x48; 0x89; 0xd1; (* MOV (% rcx) (% rdx) *) + 0x48; 0x0f; 0xaf; 0xc9; (* IMUL (% rcx) (% rcx) *) + 0x48; 0x01; 0xd2; (* ADD (% rdx) (% rdx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% rcx) (% rbx) *) + 0x48; 0x83; 0xd1; 0x00; (* ADC (% rcx) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xc0; (* MOV (% rax) (% r8) *) + 0x48; 0x25; 0xff; 0x01; 0x00; 0x00; + (* AND (% rax) (Imm32 (word 511)) *) + 0x4d; 0x0f; 0xac; 0xc8; 0x09; + (* SHRD (% r8) (% r9) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xd1; 0x09; + (* SHRD (% r9) (% r10) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xda; 0x09; + (* SHRD (% r10) (% r11) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xe3; 0x09; + (* SHRD (% r11) (% r12) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xec; 0x09; + (* SHRD (% r12) (% r13) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xf5; 0x09; + (* SHRD (% r13) (% r14) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xfe; 0x09; + (* SHRD (% r14) (% r15) (Imm8 (word 9)) *) + 0x49; 0x0f; 0xac; 0xcf; 0x09; + (* SHRD (% r15) (% rcx) (Imm8 (word 9)) *) + 0x48; 0xc1; 0xe9; 0x09; (* SHR (% rcx) (Imm8 (word 9)) *) + 0x48; 0x01; 0xc1; (* ADD (% rcx) (% rax) *) + 0xf9; (* STCF *) + 0x4c; 0x13; 0x84; 0x24; 0xf8; 0x01; 0x00; 0x00; + (* ADC (% r8) (Memop Quadword (%% (rsp,504))) *) + 0x4c; 0x13; 0x8c; 0x24; 0x00; 0x02; 0x00; 0x00; + (* ADC (% r9) (Memop Quadword (%% (rsp,512))) *) + 0x4c; 0x13; 0x94; 0x24; 0x08; 0x02; 0x00; 0x00; + (* ADC (% r10) (Memop Quadword (%% (rsp,520))) *) + 0x4c; 0x13; 0x9c; 0x24; 0x10; 0x02; 0x00; 0x00; + (* ADC (% r11) (Memop Quadword (%% (rsp,528))) *) + 0x4c; 0x13; 0xa4; 0x24; 0x18; 0x02; 0x00; 0x00; + (* ADC (% r12) (Memop Quadword (%% (rsp,536))) *) + 0x4c; 0x13; 0xac; 0x24; 0x20; 0x02; 0x00; 0x00; + (* ADC (% r13) (Memop Quadword (%% (rsp,544))) *) + 0x4c; 0x13; 0xb4; 0x24; 0x28; 0x02; 0x00; 0x00; + (* ADC (% r14) (Memop Quadword (%% (rsp,552))) *) + 0x4c; 0x13; 0xbc; 0x24; 0x30; 0x02; 0x00; 0x00; + (* ADC (% r15) (Memop Quadword (%% (rsp,560))) *) + 0x48; 0x81; 0xd1; 0x00; 0xfe; 0xff; 0xff; + (* ADC (% rcx) (Imm32 (word 4294966784)) *) + 0xf5; (* CMC *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x04; 0x24; (* MOV (Memop Quadword (%% (rsp,0))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x4c; 0x24; 0x08; + (* MOV (Memop Quadword (%% (rsp,8))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x54; 0x24; 0x10; + (* MOV (Memop Quadword (%% (rsp,16))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x5c; 0x24; 0x18; + (* MOV (Memop Quadword (%% (rsp,24))) (% r11) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x64; 0x24; 0x20; + (* MOV (Memop Quadword (%% (rsp,32))) (% r12) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x6c; 0x24; 0x28; + (* MOV (Memop Quadword (%% (rsp,40))) (% r13) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x74; 0x24; 0x30; + (* MOV (Memop Quadword (%% (rsp,48))) (% r14) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x7c; 0x24; 0x38; + (* MOV (Memop Quadword (%% (rsp,56))) (% r15) *) + 0x48; 0x83; 0xd9; 0x00; (* SBB (% rcx) (Imm8 (word 0)) *) + 0x48; 0x81; 0xe1; 0xff; 0x01; 0x00; 0x00; + (* AND (% rcx) (Imm32 (word 511)) *) + 0x48; 0x89; 0x4c; 0x24; 0x40; + (* MOV (Memop Quadword (%% (rsp,64))) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x56; 0x48; (* MOV (% rdx) (Memop Quadword (%% (rsi,72))) *) + 0xc4; 0xe2; 0xb3; 0xf6; 0x46; 0x50; + (* MULX4 (% rax,% r9) (% rdx,Memop Quadword (%% (rsi,80))) *) + 0x4c; 0x89; 0x8c; 0x24; 0x00; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,512))) (% r9) *) + 0xc4; 0xe2; 0xab; 0xf6; 0x5e; 0x58; + (* MULX4 (% rbx,% r10) (% rdx,Memop Quadword (%% (rsi,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0x4c; 0x89; 0x94; 0x24; 0x08; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,520))) (% r10) *) + 0xc4; 0xe2; 0xa3; 0xf6; 0x46; 0x60; + (* MULX4 (% rax,% r11) (% rdx,Memop Quadword (%% (rsi,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% rbx) *) + 0xc4; 0xe2; 0x9b; 0xf6; 0x5e; 0x68; + (* MULX4 (% rbx,% r12) (% rdx,Memop Quadword (%% (rsi,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xc4; 0xe2; 0x93; 0xf6; 0x46; 0x70; + (* MULX4 (% rax,% r13) (% rdx,Memop Quadword (%% (rsi,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADCX (% r13) (% rbx) *) + 0xc4; 0xe2; 0x8b; 0xf6; 0x5e; 0x78; + (* MULX4 (% rbx,% r14) (% rdx,Memop Quadword (%% (rsi,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xc4; 0x62; 0x83; 0xf6; 0x86; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% r8,% r15) (% rdx,Memop Quadword (%% (rsi,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADCX (% r15) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc1; + (* ADCX (% r8) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x56; 0x50; (* MOV (% rdx) (Memop Quadword (%% (rsi,80))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x58; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x4c; 0x89; 0x9c; 0x24; 0x10; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,528))) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4c; 0x89; 0xa4; 0x24; 0x18; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,536))) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x8e; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% r9,% rax) (% rdx,Memop Quadword (%% (rsi,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc9; + (* ADOX (% r9) (% rcx) *) + 0x48; 0x8b; 0x56; 0x68; (* MOV (% rdx) (Memop Quadword (%% (rsi,104))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x56; 0x70; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsi,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd1; + (* ADOX (% r10) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd1; + (* ADCX (% r10) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x56; 0x58; (* MOV (% rdx) (Memop Quadword (%% (rsi,88))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0x4c; 0x89; 0xac; 0x24; 0x20; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,544))) (% r13) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x4c; 0x89; 0xb4; 0x24; 0x28; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,552))) (% r14) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0x48; 0x8b; 0x56; 0x78; (* MOV (% rdx) (Memop Quadword (%% (rsi,120))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x5e; 0x68; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsi,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd9; + (* ADOX (% r11) (% rcx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x66; 0x70; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsi,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADOX (% r12) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADCX (% r12) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x56; 0x60; (* MOV (% rdx) (Memop Quadword (%% (rsi,96))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0x4c; 0x89; 0xbc; 0x24; 0x30; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,560))) (% r15) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0x8b; 0x96; 0x80; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,128))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x6e; 0x70; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsi,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADOX (% r13) (% rcx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x76; 0x78; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsi,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADOX (% r14) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADCX (% r14) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x56; 0x48; (* MOV (% rdx) (Memop Quadword (%% (rsi,72))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% rdx) *) + 0x48; 0x89; 0x84; 0x24; 0xf8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,504))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x00; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,512))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% rax) (% rbx) *) + 0x48; 0x89; 0x84; 0x24; 0x00; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,512))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x08; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,520))) *) + 0x48; 0x8b; 0x56; 0x50; (* MOV (% rdx) (Memop Quadword (%% (rsi,80))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc2; + (* ADOX (% rax) (% rdx) *) + 0x48; 0x89; 0x84; 0x24; 0x08; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,520))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x10; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,528))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% rax) (% rbx) *) + 0x48; 0x89; 0x84; 0x24; 0x10; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,528))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x18; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,536))) *) + 0x48; 0x8b; 0x56; 0x58; (* MOV (% rdx) (Memop Quadword (%% (rsi,88))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc2; + (* ADOX (% rax) (% rdx) *) + 0x48; 0x89; 0x84; 0x24; 0x18; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,536))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x20; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,544))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% rax) (% rbx) *) + 0x48; 0x89; 0x84; 0x24; 0x20; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,544))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x28; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,552))) *) + 0x48; 0x8b; 0x56; 0x60; (* MOV (% rdx) (Memop Quadword (%% (rsi,96))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc2; + (* ADOX (% rax) (% rdx) *) + 0x48; 0x89; 0x84; 0x24; 0x28; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,552))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x30; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,560))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% rax) (% rbx) *) + 0x48; 0x89; 0x84; 0x24; 0x30; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,560))) (% rax) *) + 0x48; 0x8b; 0x56; 0x68; (* MOV (% rdx) (Memop Quadword (%% (rsi,104))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% r8) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc2; + (* ADOX (% r8) (% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% r9) (% r9) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0x48; 0x8b; 0x56; 0x70; (* MOV (% rdx) (Memop Quadword (%% (rsi,112))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xd2; + (* ADCX (% r10) (% r10) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd2; + (* ADOX (% r10) (% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% r11) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0x8b; 0x56; 0x78; (* MOV (% rdx) (Memop Quadword (%% (rsi,120))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xe4; + (* ADCX (% r12) (% r12) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe2; + (* ADOX (% r12) (% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% r13) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0x8b; 0x96; 0x80; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,128))) *) + 0xc4; 0x62; 0xeb; 0xf6; 0xfa; + (* MULX4 (% r15,% rdx) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf6; + (* ADCX (% r14) (% r14) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf2; + (* ADOX (% r14) (% rdx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% rcx) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% rcx) *) + 0x48; 0x8b; 0x96; 0x88; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,136))) *) + 0x48; 0x89; 0xd1; (* MOV (% rcx) (% rdx) *) + 0x48; 0x0f; 0xaf; 0xc9; (* IMUL (% rcx) (% rcx) *) + 0x48; 0x01; 0xd2; (* ADD (% rdx) (% rdx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x58; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% rcx) (% rbx) *) + 0x48; 0x83; 0xd1; 0x00; (* ADC (% rcx) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xc0; (* MOV (% rax) (% r8) *) + 0x48; 0x25; 0xff; 0x01; 0x00; 0x00; + (* AND (% rax) (Imm32 (word 511)) *) + 0x4d; 0x0f; 0xac; 0xc8; 0x09; + (* SHRD (% r8) (% r9) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xd1; 0x09; + (* SHRD (% r9) (% r10) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xda; 0x09; + (* SHRD (% r10) (% r11) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xe3; 0x09; + (* SHRD (% r11) (% r12) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xec; 0x09; + (* SHRD (% r12) (% r13) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xf5; 0x09; + (* SHRD (% r13) (% r14) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xfe; 0x09; + (* SHRD (% r14) (% r15) (Imm8 (word 9)) *) + 0x49; 0x0f; 0xac; 0xcf; 0x09; + (* SHRD (% r15) (% rcx) (Imm8 (word 9)) *) + 0x48; 0xc1; 0xe9; 0x09; (* SHR (% rcx) (Imm8 (word 9)) *) + 0x48; 0x01; 0xc1; (* ADD (% rcx) (% rax) *) + 0xf9; (* STCF *) + 0x4c; 0x13; 0x84; 0x24; 0xf8; 0x01; 0x00; 0x00; + (* ADC (% r8) (Memop Quadword (%% (rsp,504))) *) + 0x4c; 0x13; 0x8c; 0x24; 0x00; 0x02; 0x00; 0x00; + (* ADC (% r9) (Memop Quadword (%% (rsp,512))) *) + 0x4c; 0x13; 0x94; 0x24; 0x08; 0x02; 0x00; 0x00; + (* ADC (% r10) (Memop Quadword (%% (rsp,520))) *) + 0x4c; 0x13; 0x9c; 0x24; 0x10; 0x02; 0x00; 0x00; + (* ADC (% r11) (Memop Quadword (%% (rsp,528))) *) + 0x4c; 0x13; 0xa4; 0x24; 0x18; 0x02; 0x00; 0x00; + (* ADC (% r12) (Memop Quadword (%% (rsp,536))) *) + 0x4c; 0x13; 0xac; 0x24; 0x20; 0x02; 0x00; 0x00; + (* ADC (% r13) (Memop Quadword (%% (rsp,544))) *) + 0x4c; 0x13; 0xb4; 0x24; 0x28; 0x02; 0x00; 0x00; + (* ADC (% r14) (Memop Quadword (%% (rsp,552))) *) + 0x4c; 0x13; 0xbc; 0x24; 0x30; 0x02; 0x00; 0x00; + (* ADC (% r15) (Memop Quadword (%% (rsp,560))) *) + 0x48; 0x81; 0xd1; 0x00; 0xfe; 0xff; 0xff; + (* ADC (% rcx) (Imm32 (word 4294966784)) *) + 0xf5; (* CMC *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x44; 0x24; 0x48; + (* MOV (Memop Quadword (%% (rsp,72))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x4c; 0x24; 0x50; + (* MOV (Memop Quadword (%% (rsp,80))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x54; 0x24; 0x58; + (* MOV (Memop Quadword (%% (rsp,88))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x5c; 0x24; 0x60; + (* MOV (Memop Quadword (%% (rsp,96))) (% r11) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x64; 0x24; 0x68; + (* MOV (Memop Quadword (%% (rsp,104))) (% r12) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x6c; 0x24; 0x70; + (* MOV (Memop Quadword (%% (rsp,112))) (% r13) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x74; 0x24; 0x78; + (* MOV (Memop Quadword (%% (rsp,120))) (% r14) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xbc; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,128))) (% r15) *) + 0x48; 0x83; 0xd9; 0x00; (* SBB (% rcx) (Imm8 (word 0)) *) + 0x48; 0x81; 0xe1; 0xff; 0x01; 0x00; 0x00; + (* AND (% rcx) (Imm32 (word 511)) *) + 0x48; 0x89; 0x8c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,136))) (% rcx) *) + 0xf9; (* STCF *) + 0x48; 0x8b; 0x06; (* MOV (% rax) (Memop Quadword (%% (rsi,0))) *) + 0x48; 0x13; 0x04; 0x24; (* ADC (% rax) (Memop Quadword (%% (rsp,0))) *) + 0x48; 0x8b; 0x5e; 0x08; (* MOV (% rbx) (Memop Quadword (%% (rsi,8))) *) + 0x48; 0x13; 0x5c; 0x24; 0x08; + (* ADC (% rbx) (Memop Quadword (%% (rsp,8))) *) + 0x4c; 0x8b; 0x46; 0x10; (* MOV (% r8) (Memop Quadword (%% (rsi,16))) *) + 0x4c; 0x13; 0x44; 0x24; 0x10; + (* ADC (% r8) (Memop Quadword (%% (rsp,16))) *) + 0x4c; 0x8b; 0x4e; 0x18; (* MOV (% r9) (Memop Quadword (%% (rsi,24))) *) + 0x4c; 0x13; 0x4c; 0x24; 0x18; + (* ADC (% r9) (Memop Quadword (%% (rsp,24))) *) + 0x4c; 0x8b; 0x56; 0x20; (* MOV (% r10) (Memop Quadword (%% (rsi,32))) *) + 0x4c; 0x13; 0x54; 0x24; 0x20; + (* ADC (% r10) (Memop Quadword (%% (rsp,32))) *) + 0x4c; 0x8b; 0x5e; 0x28; (* MOV (% r11) (Memop Quadword (%% (rsi,40))) *) + 0x4c; 0x13; 0x5c; 0x24; 0x28; + (* ADC (% r11) (Memop Quadword (%% (rsp,40))) *) + 0x4c; 0x8b; 0x66; 0x30; (* MOV (% r12) (Memop Quadword (%% (rsi,48))) *) + 0x4c; 0x13; 0x64; 0x24; 0x30; + (* ADC (% r12) (Memop Quadword (%% (rsp,48))) *) + 0x4c; 0x8b; 0x6e; 0x38; (* MOV (% r13) (Memop Quadword (%% (rsi,56))) *) + 0x4c; 0x13; 0x6c; 0x24; 0x38; + (* ADC (% r13) (Memop Quadword (%% (rsp,56))) *) + 0x4c; 0x8b; 0x76; 0x40; (* MOV (% r14) (Memop Quadword (%% (rsi,64))) *) + 0x4c; 0x13; 0x74; 0x24; 0x40; + (* ADC (% r14) (Memop Quadword (%% (rsp,64))) *) + 0x48; 0xc7; 0xc2; 0x00; 0x02; 0x00; 0x00; + (* MOV (% rdx) (Imm32 (word 512)) *) + 0x4c; 0x21; 0xf2; (* AND (% rdx) (% r14) *) + 0x48; 0x81; 0xfa; 0x00; 0x02; 0x00; 0x00; + (* CMP (% rdx) (Imm32 (word 512)) *) + 0x48; 0x83; 0xd8; 0x00; (* SBB (% rax) (Imm8 (word 0)) *) + 0x48; 0x89; 0x84; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,360))) (% rax) *) + 0x48; 0x83; 0xdb; 0x00; (* SBB (% rbx) (Imm8 (word 0)) *) + 0x48; 0x89; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,368))) (% rbx) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x84; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,376))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x8c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,384))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x94; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,392))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,400))) (% r11) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xa4; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,408))) (% r12) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xac; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,416))) (% r13) *) + 0x49; 0x19; 0xd6; (* SBB (% r14) (% rdx) *) + 0x4c; 0x89; 0xb4; 0x24; 0xa8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,424))) (% r14) *) + 0x48; 0x8b; 0x06; (* MOV (% rax) (Memop Quadword (%% (rsi,0))) *) + 0x48; 0x2b; 0x04; 0x24; (* SUB (% rax) (Memop Quadword (%% (rsp,0))) *) + 0x48; 0x8b; 0x56; 0x08; (* MOV (% rdx) (Memop Quadword (%% (rsi,8))) *) + 0x48; 0x1b; 0x54; 0x24; 0x08; + (* SBB (% rdx) (Memop Quadword (%% (rsp,8))) *) + 0x4c; 0x8b; 0x46; 0x10; (* MOV (% r8) (Memop Quadword (%% (rsi,16))) *) + 0x4c; 0x1b; 0x44; 0x24; 0x10; + (* SBB (% r8) (Memop Quadword (%% (rsp,16))) *) + 0x4c; 0x8b; 0x4e; 0x18; (* MOV (% r9) (Memop Quadword (%% (rsi,24))) *) + 0x4c; 0x1b; 0x4c; 0x24; 0x18; + (* SBB (% r9) (Memop Quadword (%% (rsp,24))) *) + 0x4c; 0x8b; 0x56; 0x20; (* MOV (% r10) (Memop Quadword (%% (rsi,32))) *) + 0x4c; 0x1b; 0x54; 0x24; 0x20; + (* SBB (% r10) (Memop Quadword (%% (rsp,32))) *) + 0x4c; 0x8b; 0x5e; 0x28; (* MOV (% r11) (Memop Quadword (%% (rsi,40))) *) + 0x4c; 0x1b; 0x5c; 0x24; 0x28; + (* SBB (% r11) (Memop Quadword (%% (rsp,40))) *) + 0x4c; 0x8b; 0x66; 0x30; (* MOV (% r12) (Memop Quadword (%% (rsi,48))) *) + 0x4c; 0x1b; 0x64; 0x24; 0x30; + (* SBB (% r12) (Memop Quadword (%% (rsp,48))) *) + 0x4c; 0x8b; 0x6e; 0x38; (* MOV (% r13) (Memop Quadword (%% (rsi,56))) *) + 0x4c; 0x1b; 0x6c; 0x24; 0x38; + (* SBB (% r13) (Memop Quadword (%% (rsp,56))) *) + 0x4c; 0x8b; 0x76; 0x40; (* MOV (% r14) (Memop Quadword (%% (rsi,64))) *) + 0x4c; 0x1b; 0x74; 0x24; 0x40; + (* SBB (% r14) (Memop Quadword (%% (rsp,64))) *) + 0x48; 0x83; 0xd8; 0x00; (* SBB (% rax) (Imm8 (word 0)) *) + 0x48; 0x89; 0x84; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,288))) (% rax) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x48; 0x89; 0x94; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,296))) (% rdx) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x84; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,304))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x8c; 0x24; 0x38; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,312))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x94; 0x24; 0x40; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,320))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x9c; 0x24; 0x48; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,328))) (% r11) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xa4; 0x24; 0x50; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,336))) (% r12) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xac; 0x24; 0x58; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,344))) (% r13) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x49; 0x81; 0xe6; 0xff; 0x01; 0x00; 0x00; + (* AND (% r14) (Imm32 (word 511)) *) + 0x4c; 0x89; 0xb4; 0x24; 0x60; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,352))) (% r14) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x94; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,288))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x8c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x4c; 0x89; 0x84; 0x24; 0xf8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,504))) (% r8) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x94; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xa4; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xac; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% r13,% rbx) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x49; 0x11; 0xdc; (* ADC (% r12) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xb4; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% r14,% rbx) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x49; 0x11; 0xdd; (* ADC (% r13) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xbc; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% r15,% rbx) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x84; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% r8,% rbx) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x49; 0x11; 0xc8; (* ADC (% r8) (% rcx) *) + 0x48; 0x8b; 0x94; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,296))) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0x4c; 0x89; 0x8c; 0x24; 0x00; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,512))) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x8c; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% r9,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc9; + (* ADOX (% r9) (% rcx) *) + 0x49; 0x11; 0xc9; (* ADC (% r9) (% rcx) *) + 0x48; 0x8b; 0x94; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,304))) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x4c; 0x89; 0x94; 0x24; 0x08; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,520))) (% r10) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x94; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd1; + (* ADOX (% r10) (% rcx) *) + 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) + 0x48; 0x8b; 0x94; 0x24; 0x38; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,312))) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x4c; 0x89; 0x9c; 0x24; 0x10; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,528))) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd9; + (* ADOX (% r11) (% rcx) *) + 0x49; 0x11; 0xcb; (* ADC (% r11) (% rcx) *) + 0x48; 0x8b; 0x94; 0x24; 0x40; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,320))) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4c; 0x89; 0xa4; 0x24; 0x18; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,536))) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xa4; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADOX (% r12) (% rcx) *) + 0x49; 0x11; 0xcc; (* ADC (% r12) (% rcx) *) + 0x48; 0x8b; 0x94; 0x24; 0x48; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,328))) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0x4c; 0x89; 0xac; 0x24; 0x20; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,544))) (% r13) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xac; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADOX (% r13) (% rcx) *) + 0x49; 0x11; 0xcd; (* ADC (% r13) (% rcx) *) + 0x48; 0x8b; 0x94; 0x24; 0x50; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,336))) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x4c; 0x89; 0xb4; 0x24; 0x28; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,552))) (% r14) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xb4; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADOX (% r14) (% rcx) *) + 0x49; 0x11; 0xce; (* ADC (% r14) (% rcx) *) + 0x48; 0x8b; 0x94; 0x24; 0x58; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,344))) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0x4c; 0x89; 0xbc; 0x24; 0x30; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,560))) (% r15) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xbc; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% rcx) *) + 0x49; 0x11; 0xcf; (* ADC (% r15) (% rcx) *) + 0x48; 0x8b; 0x94; 0x24; 0xa8; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,424))) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,288))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,296))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,304))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x38; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,312))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x40; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,320))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x48; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,328))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x50; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,336))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x58; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,344))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xd9; + (* ADOX (% rbx) (% rcx) *) + 0x48; 0x11; 0xd9; (* ADC (% rcx) (% rbx) *) + 0x48; 0x8b; 0x94; 0x24; 0x60; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,352))) *) + 0x31; 0xc0; (* XOR (% eax) (% eax) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% rcx) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,424))) *) + 0x48; 0x11; 0xc1; (* ADC (% rcx) (% rax) *) + 0x4c; 0x89; 0xc0; (* MOV (% rax) (% r8) *) + 0x48; 0x25; 0xff; 0x01; 0x00; 0x00; + (* AND (% rax) (Imm32 (word 511)) *) + 0x4d; 0x0f; 0xac; 0xc8; 0x09; + (* SHRD (% r8) (% r9) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xd1; 0x09; + (* SHRD (% r9) (% r10) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xda; 0x09; + (* SHRD (% r10) (% r11) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xe3; 0x09; + (* SHRD (% r11) (% r12) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xec; 0x09; + (* SHRD (% r12) (% r13) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xf5; 0x09; + (* SHRD (% r13) (% r14) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xfe; 0x09; + (* SHRD (% r14) (% r15) (Imm8 (word 9)) *) + 0x49; 0x0f; 0xac; 0xcf; 0x09; + (* SHRD (% r15) (% rcx) (Imm8 (word 9)) *) + 0x48; 0xc1; 0xe9; 0x09; (* SHR (% rcx) (Imm8 (word 9)) *) + 0x48; 0x01; 0xc1; (* ADD (% rcx) (% rax) *) + 0xf9; (* STCF *) + 0x4c; 0x13; 0x84; 0x24; 0xf8; 0x01; 0x00; 0x00; + (* ADC (% r8) (Memop Quadword (%% (rsp,504))) *) + 0x4c; 0x13; 0x8c; 0x24; 0x00; 0x02; 0x00; 0x00; + (* ADC (% r9) (Memop Quadword (%% (rsp,512))) *) + 0x4c; 0x13; 0x94; 0x24; 0x08; 0x02; 0x00; 0x00; + (* ADC (% r10) (Memop Quadword (%% (rsp,520))) *) + 0x4c; 0x13; 0x9c; 0x24; 0x10; 0x02; 0x00; 0x00; + (* ADC (% r11) (Memop Quadword (%% (rsp,528))) *) + 0x4c; 0x13; 0xa4; 0x24; 0x18; 0x02; 0x00; 0x00; + (* ADC (% r12) (Memop Quadword (%% (rsp,536))) *) + 0x4c; 0x13; 0xac; 0x24; 0x20; 0x02; 0x00; 0x00; + (* ADC (% r13) (Memop Quadword (%% (rsp,544))) *) + 0x4c; 0x13; 0xb4; 0x24; 0x28; 0x02; 0x00; 0x00; + (* ADC (% r14) (Memop Quadword (%% (rsp,552))) *) + 0x4c; 0x13; 0xbc; 0x24; 0x30; 0x02; 0x00; 0x00; + (* ADC (% r15) (Memop Quadword (%% (rsp,560))) *) + 0x48; 0x81; 0xd1; 0x00; 0xfe; 0xff; 0xff; + (* ADC (% rcx) (Imm32 (word 4294966784)) *) + 0xf5; (* CMC *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x84; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,144))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x8c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,152))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x94; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,160))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,168))) (% r11) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xa4; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,176))) (% r12) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xac; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,184))) (% r13) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xb4; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,192))) (% r14) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xbc; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,200))) (% r15) *) + 0x48; 0x83; 0xd9; 0x00; (* SBB (% rcx) (Imm8 (word 0)) *) + 0x48; 0x81; 0xe1; 0xff; 0x01; 0x00; 0x00; + (* AND (% rcx) (Imm32 (word 511)) *) + 0x48; 0x89; 0x8c; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,208))) (% rcx) *) + 0xf9; (* STCF *) + 0x48; 0x8b; 0x46; 0x48; (* MOV (% rax) (Memop Quadword (%% (rsi,72))) *) + 0x48; 0x13; 0x86; 0x90; 0x00; 0x00; 0x00; + (* ADC (% rax) (Memop Quadword (%% (rsi,144))) *) + 0x48; 0x8b; 0x5e; 0x50; (* MOV (% rbx) (Memop Quadword (%% (rsi,80))) *) + 0x48; 0x13; 0x9e; 0x98; 0x00; 0x00; 0x00; + (* ADC (% rbx) (Memop Quadword (%% (rsi,152))) *) + 0x4c; 0x8b; 0x46; 0x58; (* MOV (% r8) (Memop Quadword (%% (rsi,88))) *) + 0x4c; 0x13; 0x86; 0xa0; 0x00; 0x00; 0x00; + (* ADC (% r8) (Memop Quadword (%% (rsi,160))) *) + 0x4c; 0x8b; 0x4e; 0x60; (* MOV (% r9) (Memop Quadword (%% (rsi,96))) *) + 0x4c; 0x13; 0x8e; 0xa8; 0x00; 0x00; 0x00; + (* ADC (% r9) (Memop Quadword (%% (rsi,168))) *) + 0x4c; 0x8b; 0x56; 0x68; (* MOV (% r10) (Memop Quadword (%% (rsi,104))) *) + 0x4c; 0x13; 0x96; 0xb0; 0x00; 0x00; 0x00; + (* ADC (% r10) (Memop Quadword (%% (rsi,176))) *) + 0x4c; 0x8b; 0x5e; 0x70; (* MOV (% r11) (Memop Quadword (%% (rsi,112))) *) + 0x4c; 0x13; 0x9e; 0xb8; 0x00; 0x00; 0x00; + (* ADC (% r11) (Memop Quadword (%% (rsi,184))) *) + 0x4c; 0x8b; 0x66; 0x78; (* MOV (% r12) (Memop Quadword (%% (rsi,120))) *) + 0x4c; 0x13; 0xa6; 0xc0; 0x00; 0x00; 0x00; + (* ADC (% r12) (Memop Quadword (%% (rsi,192))) *) + 0x4c; 0x8b; 0xae; 0x80; 0x00; 0x00; 0x00; + (* MOV (% r13) (Memop Quadword (%% (rsi,128))) *) + 0x4c; 0x13; 0xae; 0xc8; 0x00; 0x00; 0x00; + (* ADC (% r13) (Memop Quadword (%% (rsi,200))) *) + 0x4c; 0x8b; 0xb6; 0x88; 0x00; 0x00; 0x00; + (* MOV (% r14) (Memop Quadword (%% (rsi,136))) *) + 0x4c; 0x13; 0xb6; 0xd0; 0x00; 0x00; 0x00; + (* ADC (% r14) (Memop Quadword (%% (rsi,208))) *) + 0x48; 0xc7; 0xc2; 0x00; 0x02; 0x00; 0x00; + (* MOV (% rdx) (Imm32 (word 512)) *) + 0x4c; 0x21; 0xf2; (* AND (% rdx) (% r14) *) + 0x48; 0x81; 0xfa; 0x00; 0x02; 0x00; 0x00; + (* CMP (% rdx) (Imm32 (word 512)) *) + 0x48; 0x83; 0xd8; 0x00; (* SBB (% rax) (Imm8 (word 0)) *) + 0x48; 0x89; 0x84; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,360))) (% rax) *) + 0x48; 0x83; 0xdb; 0x00; (* SBB (% rbx) (Imm8 (word 0)) *) + 0x48; 0x89; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,368))) (% rbx) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x84; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,376))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x8c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,384))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x94; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,392))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,400))) (% r11) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xa4; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,408))) (% r12) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xac; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,416))) (% r13) *) + 0x49; 0x19; 0xd6; (* SBB (% r14) (% rdx) *) + 0x4c; 0x89; 0xb4; 0x24; 0xa8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,424))) (% r14) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x94; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,144))) *) + 0xc4; 0xe2; 0xb3; 0xf6; 0x84; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rax,% r9) (% rdx,Memop Quadword (%% (rsp,152))) *) + 0x4c; 0x89; 0x8c; 0x24; 0x00; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,512))) (% r9) *) + 0xc4; 0xe2; 0xab; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% r10) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0x4c; 0x89; 0x94; 0x24; 0x08; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,520))) (% r10) *) + 0xc4; 0xe2; 0xa3; 0xf6; 0x84; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rax,% r11) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% rbx) *) + 0xc4; 0xe2; 0x9b; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% r12) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xc4; 0xe2; 0x93; 0xf6; 0x84; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rax,% r13) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADCX (% r13) (% rbx) *) + 0xc4; 0xe2; 0x8b; 0xf6; 0x9c; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% r14) (% rdx,Memop Quadword (%% (rsp,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xc4; 0x62; 0x83; 0xf6; 0x84; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% r8,% r15) (% rdx,Memop Quadword (%% (rsp,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADCX (% r15) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc1; + (* ADCX (% r8) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x94; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,152))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x4c; 0x89; 0x9c; 0x24; 0x10; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,528))) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4c; 0x89; 0xa4; 0x24; 0x18; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,536))) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x8c; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% r9,% rax) (% rdx,Memop Quadword (%% (rsp,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc9; + (* ADOX (% r9) (% rcx) *) + 0x48; 0x8b; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,176))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x94; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd1; + (* ADOX (% r10) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd1; + (* ADCX (% r10) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x94; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,160))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0x4c; 0x89; 0xac; 0x24; 0x20; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,544))) (% r13) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x4c; 0x89; 0xb4; 0x24; 0x28; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,552))) (% r14) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0x48; 0x8b; 0x94; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,192))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd9; + (* ADOX (% r11) (% rcx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xa4; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADOX (% r12) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADCX (% r12) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x94; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,168))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0x4c; 0x89; 0xbc; 0x24; 0x30; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,560))) (% r15) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0x8b; 0x94; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,200))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xac; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADOX (% r13) (% rcx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xb4; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADOX (% r14) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADCX (% r14) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x94; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,144))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% rdx) *) + 0x48; 0x89; 0x84; 0x24; 0xf8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,504))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x00; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,512))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% rax) (% rbx) *) + 0x48; 0x89; 0x84; 0x24; 0x00; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,512))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x08; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,520))) *) + 0x48; 0x8b; 0x94; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,152))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc2; + (* ADOX (% rax) (% rdx) *) + 0x48; 0x89; 0x84; 0x24; 0x08; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,520))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x10; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,528))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% rax) (% rbx) *) + 0x48; 0x89; 0x84; 0x24; 0x10; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,528))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x18; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,536))) *) + 0x48; 0x8b; 0x94; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,160))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc2; + (* ADOX (% rax) (% rdx) *) + 0x48; 0x89; 0x84; 0x24; 0x18; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,536))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x20; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,544))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% rax) (% rbx) *) + 0x48; 0x89; 0x84; 0x24; 0x20; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,544))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x28; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,552))) *) + 0x48; 0x8b; 0x94; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,168))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc2; + (* ADOX (% rax) (% rdx) *) + 0x48; 0x89; 0x84; 0x24; 0x28; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,552))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x30; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,560))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% rax) (% rbx) *) + 0x48; 0x89; 0x84; 0x24; 0x30; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,560))) (% rax) *) + 0x48; 0x8b; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,176))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% r8) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc2; + (* ADOX (% r8) (% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% r9) (% r9) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0x48; 0x8b; 0x94; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,184))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xd2; + (* ADCX (% r10) (% r10) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd2; + (* ADOX (% r10) (% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% r11) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0x8b; 0x94; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,192))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xe4; + (* ADCX (% r12) (% r12) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe2; + (* ADOX (% r12) (% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% r13) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0x8b; 0x94; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,200))) *) + 0xc4; 0x62; 0xeb; 0xf6; 0xfa; + (* MULX4 (% r15,% rdx) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf6; + (* ADCX (% r14) (% r14) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf2; + (* ADOX (% r14) (% rdx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% rcx) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% rcx) *) + 0x48; 0x8b; 0x94; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,208))) *) + 0x48; 0x89; 0xd1; (* MOV (% rcx) (% rdx) *) + 0x48; 0x0f; 0xaf; 0xc9; (* IMUL (% rcx) (% rcx) *) + 0x48; 0x01; 0xd2; (* ADD (% rdx) (% rdx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% rcx) (% rbx) *) + 0x48; 0x83; 0xd1; 0x00; (* ADC (% rcx) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xc0; (* MOV (% rax) (% r8) *) + 0x48; 0x25; 0xff; 0x01; 0x00; 0x00; + (* AND (% rax) (Imm32 (word 511)) *) + 0x4d; 0x0f; 0xac; 0xc8; 0x09; + (* SHRD (% r8) (% r9) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xd1; 0x09; + (* SHRD (% r9) (% r10) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xda; 0x09; + (* SHRD (% r10) (% r11) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xe3; 0x09; + (* SHRD (% r11) (% r12) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xec; 0x09; + (* SHRD (% r12) (% r13) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xf5; 0x09; + (* SHRD (% r13) (% r14) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xfe; 0x09; + (* SHRD (% r14) (% r15) (Imm8 (word 9)) *) + 0x49; 0x0f; 0xac; 0xcf; 0x09; + (* SHRD (% r15) (% rcx) (Imm8 (word 9)) *) + 0x48; 0xc1; 0xe9; 0x09; (* SHR (% rcx) (Imm8 (word 9)) *) + 0x48; 0x01; 0xc1; (* ADD (% rcx) (% rax) *) + 0xf9; (* STCF *) + 0x4c; 0x13; 0x84; 0x24; 0xf8; 0x01; 0x00; 0x00; + (* ADC (% r8) (Memop Quadword (%% (rsp,504))) *) + 0x4c; 0x13; 0x8c; 0x24; 0x00; 0x02; 0x00; 0x00; + (* ADC (% r9) (Memop Quadword (%% (rsp,512))) *) + 0x4c; 0x13; 0x94; 0x24; 0x08; 0x02; 0x00; 0x00; + (* ADC (% r10) (Memop Quadword (%% (rsp,520))) *) + 0x4c; 0x13; 0x9c; 0x24; 0x10; 0x02; 0x00; 0x00; + (* ADC (% r11) (Memop Quadword (%% (rsp,528))) *) + 0x4c; 0x13; 0xa4; 0x24; 0x18; 0x02; 0x00; 0x00; + (* ADC (% r12) (Memop Quadword (%% (rsp,536))) *) + 0x4c; 0x13; 0xac; 0x24; 0x20; 0x02; 0x00; 0x00; + (* ADC (% r13) (Memop Quadword (%% (rsp,544))) *) + 0x4c; 0x13; 0xb4; 0x24; 0x28; 0x02; 0x00; 0x00; + (* ADC (% r14) (Memop Quadword (%% (rsp,552))) *) + 0x4c; 0x13; 0xbc; 0x24; 0x30; 0x02; 0x00; 0x00; + (* ADC (% r15) (Memop Quadword (%% (rsp,560))) *) + 0x48; 0x81; 0xd1; 0x00; 0xfe; 0xff; 0xff; + (* ADC (% rcx) (Imm32 (word 4294966784)) *) + 0xf5; (* CMC *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x84; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,432))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x8c; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,440))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x94; 0x24; 0xc0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,448))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x9c; 0x24; 0xc8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,456))) (% r11) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xa4; 0x24; 0xd0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,464))) (% r12) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xac; 0x24; 0xd8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,472))) (% r13) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xb4; 0x24; 0xe0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,480))) (% r14) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xbc; 0x24; 0xe8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,488))) (% r15) *) + 0x48; 0x83; 0xd9; 0x00; (* SBB (% rcx) (Imm8 (word 0)) *) + 0x48; 0x81; 0xe1; 0xff; 0x01; 0x00; 0x00; + (* AND (% rcx) (Imm32 (word 511)) *) + 0x48; 0x89; 0x8c; 0x24; 0xf0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,496))) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x54; 0x24; 0x48; + (* MOV (% rdx) (Memop Quadword (%% (rsp,72))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x0e; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsi,0))) *) + 0x4c; 0x89; 0x84; 0x24; 0xf8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,504))) (% r8) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x56; 0x08; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsi,8))) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x5e; 0x10; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsi,16))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x66; 0x18; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsi,24))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x6e; 0x20; + (* MULX4 (% r13,% rbx) (% rdx,Memop Quadword (%% (rsi,32))) *) + 0x49; 0x11; 0xdc; (* ADC (% r12) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x76; 0x28; + (* MULX4 (% r14,% rbx) (% rdx,Memop Quadword (%% (rsi,40))) *) + 0x49; 0x11; 0xdd; (* ADC (% r13) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x7e; 0x30; + (* MULX4 (% r15,% rbx) (% rdx,Memop Quadword (%% (rsi,48))) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x46; 0x38; + (* MULX4 (% r8,% rbx) (% rdx,Memop Quadword (%% (rsi,56))) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x49; 0x11; 0xc8; (* ADC (% r8) (% rcx) *) + 0x48; 0x8b; 0x54; 0x24; 0x50; + (* MOV (% rdx) (Memop Quadword (%% (rsp,80))) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1e; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0x4c; 0x89; 0x8c; 0x24; 0x00; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,512))) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x4e; 0x38; + (* MULX4 (% r9,% rax) (% rdx,Memop Quadword (%% (rsi,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc9; + (* ADOX (% r9) (% rcx) *) + 0x49; 0x11; 0xc9; (* ADC (% r9) (% rcx) *) + 0x48; 0x8b; 0x54; 0x24; 0x58; + (* MOV (% rdx) (Memop Quadword (%% (rsp,88))) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1e; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x4c; 0x89; 0x94; 0x24; 0x08; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,520))) (% r10) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x56; 0x38; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsi,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd1; + (* ADOX (% r10) (% rcx) *) + 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) + 0x48; 0x8b; 0x54; 0x24; 0x60; + (* MOV (% rdx) (Memop Quadword (%% (rsp,96))) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1e; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x4c; 0x89; 0x9c; 0x24; 0x10; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,528))) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x5e; 0x38; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsi,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd9; + (* ADOX (% r11) (% rcx) *) + 0x49; 0x11; 0xcb; (* ADC (% r11) (% rcx) *) + 0x48; 0x8b; 0x54; 0x24; 0x68; + (* MOV (% rdx) (Memop Quadword (%% (rsp,104))) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1e; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4c; 0x89; 0xa4; 0x24; 0x18; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,536))) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x66; 0x38; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsi,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADOX (% r12) (% rcx) *) + 0x49; 0x11; 0xcc; (* ADC (% r12) (% rcx) *) + 0x48; 0x8b; 0x54; 0x24; 0x70; + (* MOV (% rdx) (Memop Quadword (%% (rsp,112))) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1e; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0x4c; 0x89; 0xac; 0x24; 0x20; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,544))) (% r13) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x6e; 0x38; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsi,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADOX (% r13) (% rcx) *) + 0x49; 0x11; 0xcd; (* ADC (% r13) (% rcx) *) + 0x48; 0x8b; 0x54; 0x24; 0x78; + (* MOV (% rdx) (Memop Quadword (%% (rsp,120))) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1e; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x4c; 0x89; 0xb4; 0x24; 0x28; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,552))) (% r14) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x76; 0x38; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsi,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADOX (% r14) (% rcx) *) + 0x49; 0x11; 0xce; (* ADC (% r14) (% rcx) *) + 0x48; 0x8b; 0x94; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,128))) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1e; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0x4c; 0x89; 0xbc; 0x24; 0x30; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,560))) (% r15) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x7e; 0x38; + (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsi,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% rcx) *) + 0x49; 0x11; 0xcf; (* ADC (% r15) (% rcx) *) + 0x48; 0x8b; 0x56; 0x40; (* MOV (% rdx) (Memop Quadword (%% (rsi,64))) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x58; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xd9; + (* ADOX (% rbx) (% rcx) *) + 0x48; 0x11; 0xd9; (* ADC (% rcx) (% rbx) *) + 0x48; 0x8b; 0x94; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,136))) *) + 0x31; 0xc0; (* XOR (% eax) (% eax) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1e; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x38; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% rcx) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x40; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,64))) *) + 0x48; 0x11; 0xc1; (* ADC (% rcx) (% rax) *) + 0x4c; 0x89; 0xc0; (* MOV (% rax) (% r8) *) + 0x48; 0x25; 0xff; 0x01; 0x00; 0x00; + (* AND (% rax) (Imm32 (word 511)) *) + 0x4d; 0x0f; 0xac; 0xc8; 0x09; + (* SHRD (% r8) (% r9) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xd1; 0x09; + (* SHRD (% r9) (% r10) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xda; 0x09; + (* SHRD (% r10) (% r11) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xe3; 0x09; + (* SHRD (% r11) (% r12) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xec; 0x09; + (* SHRD (% r12) (% r13) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xf5; 0x09; + (* SHRD (% r13) (% r14) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xfe; 0x09; + (* SHRD (% r14) (% r15) (Imm8 (word 9)) *) + 0x49; 0x0f; 0xac; 0xcf; 0x09; + (* SHRD (% r15) (% rcx) (Imm8 (word 9)) *) + 0x48; 0xc1; 0xe9; 0x09; (* SHR (% rcx) (Imm8 (word 9)) *) + 0x48; 0x01; 0xc1; (* ADD (% rcx) (% rax) *) + 0x4c; 0x03; 0x84; 0x24; 0xf8; 0x01; 0x00; 0x00; + (* ADD (% r8) (Memop Quadword (%% (rsp,504))) *) + 0x4c; 0x89; 0x84; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,216))) (% r8) *) + 0x4c; 0x13; 0x8c; 0x24; 0x00; 0x02; 0x00; 0x00; + (* ADC (% r9) (Memop Quadword (%% (rsp,512))) *) + 0x4c; 0x89; 0x8c; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,224))) (% r9) *) + 0x4c; 0x13; 0x94; 0x24; 0x08; 0x02; 0x00; 0x00; + (* ADC (% r10) (Memop Quadword (%% (rsp,520))) *) + 0x4c; 0x89; 0x94; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,232))) (% r10) *) + 0x4c; 0x13; 0x9c; 0x24; 0x10; 0x02; 0x00; 0x00; + (* ADC (% r11) (Memop Quadword (%% (rsp,528))) *) + 0x4c; 0x89; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,240))) (% r11) *) + 0x4c; 0x13; 0xa4; 0x24; 0x18; 0x02; 0x00; 0x00; + (* ADC (% r12) (Memop Quadword (%% (rsp,536))) *) + 0x4c; 0x89; 0xa4; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,248))) (% r12) *) + 0x4c; 0x13; 0xac; 0x24; 0x20; 0x02; 0x00; 0x00; + (* ADC (% r13) (Memop Quadword (%% (rsp,544))) *) + 0x4c; 0x89; 0xac; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,256))) (% r13) *) + 0x4c; 0x13; 0xb4; 0x24; 0x28; 0x02; 0x00; 0x00; + (* ADC (% r14) (Memop Quadword (%% (rsp,552))) *) + 0x4c; 0x89; 0xb4; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,264))) (% r14) *) + 0x4c; 0x13; 0xbc; 0x24; 0x30; 0x02; 0x00; 0x00; + (* ADC (% r15) (Memop Quadword (%% (rsp,560))) *) + 0x4c; 0x89; 0xbc; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,272))) (% r15) *) + 0x48; 0x83; 0xd1; 0x00; (* ADC (% rcx) (Imm8 (word 0)) *) + 0x48; 0x89; 0x8c; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,280))) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x94; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,360))) *) + 0xc4; 0xe2; 0xb3; 0xf6; 0x84; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rax,% r9) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x4c; 0x89; 0x8c; 0x24; 0x00; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,512))) (% r9) *) + 0xc4; 0xe2; 0xab; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% r10) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0x4c; 0x89; 0x94; 0x24; 0x08; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,520))) (% r10) *) + 0xc4; 0xe2; 0xa3; 0xf6; 0x84; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rax,% r11) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% rbx) *) + 0xc4; 0xe2; 0x9b; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% r12) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xc4; 0xe2; 0x93; 0xf6; 0x84; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rax,% r13) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADCX (% r13) (% rbx) *) + 0xc4; 0xe2; 0x8b; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% r14) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xc4; 0x62; 0x83; 0xf6; 0x84; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% r8,% r15) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADCX (% r15) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc1; + (* ADCX (% r8) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x94; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,368))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x4c; 0x89; 0x9c; 0x24; 0x10; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,528))) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4c; 0x89; 0xa4; 0x24; 0x18; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,536))) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x8c; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% r9,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc9; + (* ADOX (% r9) (% rcx) *) + 0x48; 0x8b; 0x94; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,392))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x94; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd1; + (* ADOX (% r10) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd1; + (* ADCX (% r10) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x94; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,376))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0x4c; 0x89; 0xac; 0x24; 0x20; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,544))) (% r13) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x4c; 0x89; 0xb4; 0x24; 0x28; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,552))) (% r14) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0x48; 0x8b; 0x94; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,408))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd9; + (* ADOX (% r11) (% rcx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xa4; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADOX (% r12) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADCX (% r12) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x94; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,384))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0x4c; 0x89; 0xbc; 0x24; 0x30; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,560))) (% r15) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0x8b; 0x94; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,416))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xac; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADOX (% r13) (% rcx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xb4; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADOX (% r14) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADCX (% r14) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x94; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,360))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% rdx) *) + 0x48; 0x89; 0x84; 0x24; 0xf8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,504))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x00; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,512))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% rax) (% rbx) *) + 0x48; 0x89; 0x84; 0x24; 0x00; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,512))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x08; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,520))) *) + 0x48; 0x8b; 0x94; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,368))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc2; + (* ADOX (% rax) (% rdx) *) + 0x48; 0x89; 0x84; 0x24; 0x08; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,520))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x10; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,528))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% rax) (% rbx) *) + 0x48; 0x89; 0x84; 0x24; 0x10; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,528))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x18; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,536))) *) + 0x48; 0x8b; 0x94; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,376))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc2; + (* ADOX (% rax) (% rdx) *) + 0x48; 0x89; 0x84; 0x24; 0x18; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,536))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x20; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,544))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% rax) (% rbx) *) + 0x48; 0x89; 0x84; 0x24; 0x20; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,544))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x28; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,552))) *) + 0x48; 0x8b; 0x94; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,384))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc2; + (* ADOX (% rax) (% rdx) *) + 0x48; 0x89; 0x84; 0x24; 0x28; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,552))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x30; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,560))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% rax) (% rbx) *) + 0x48; 0x89; 0x84; 0x24; 0x30; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,560))) (% rax) *) + 0x48; 0x8b; 0x94; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,392))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% r8) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc2; + (* ADOX (% r8) (% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% r9) (% r9) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0x48; 0x8b; 0x94; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,400))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xd2; + (* ADCX (% r10) (% r10) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd2; + (* ADOX (% r10) (% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% r11) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0x8b; 0x94; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,408))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xe4; + (* ADCX (% r12) (% r12) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe2; + (* ADOX (% r12) (% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% r13) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0x8b; 0x94; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,416))) *) + 0xc4; 0x62; 0xeb; 0xf6; 0xfa; + (* MULX4 (% r15,% rdx) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf6; + (* ADCX (% r14) (% r14) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf2; + (* ADOX (% r14) (% rdx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% rcx) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% rcx) *) + 0x48; 0x8b; 0x94; 0x24; 0xa8; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,424))) *) + 0x48; 0x89; 0xd1; (* MOV (% rcx) (% rdx) *) + 0x48; 0x0f; 0xaf; 0xc9; (* IMUL (% rcx) (% rcx) *) + 0x48; 0x01; 0xd2; (* ADD (% rdx) (% rdx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% rcx) (% rbx) *) + 0x48; 0x83; 0xd1; 0x00; (* ADC (% rcx) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xc0; (* MOV (% rax) (% r8) *) + 0x48; 0x25; 0xff; 0x01; 0x00; 0x00; + (* AND (% rax) (Imm32 (word 511)) *) + 0x4d; 0x0f; 0xac; 0xc8; 0x09; + (* SHRD (% r8) (% r9) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xd1; 0x09; + (* SHRD (% r9) (% r10) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xda; 0x09; + (* SHRD (% r10) (% r11) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xe3; 0x09; + (* SHRD (% r11) (% r12) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xec; 0x09; + (* SHRD (% r12) (% r13) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xf5; 0x09; + (* SHRD (% r13) (% r14) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xfe; 0x09; + (* SHRD (% r14) (% r15) (Imm8 (word 9)) *) + 0x49; 0x0f; 0xac; 0xcf; 0x09; + (* SHRD (% r15) (% rcx) (Imm8 (word 9)) *) + 0x48; 0xc1; 0xe9; 0x09; (* SHR (% rcx) (Imm8 (word 9)) *) + 0x48; 0x01; 0xc1; (* ADD (% rcx) (% rax) *) + 0xf9; (* STCF *) + 0x4c; 0x13; 0x84; 0x24; 0xf8; 0x01; 0x00; 0x00; + (* ADC (% r8) (Memop Quadword (%% (rsp,504))) *) + 0x4c; 0x13; 0x8c; 0x24; 0x00; 0x02; 0x00; 0x00; + (* ADC (% r9) (Memop Quadword (%% (rsp,512))) *) + 0x4c; 0x13; 0x94; 0x24; 0x08; 0x02; 0x00; 0x00; + (* ADC (% r10) (Memop Quadword (%% (rsp,520))) *) + 0x4c; 0x13; 0x9c; 0x24; 0x10; 0x02; 0x00; 0x00; + (* ADC (% r11) (Memop Quadword (%% (rsp,528))) *) + 0x4c; 0x13; 0xa4; 0x24; 0x18; 0x02; 0x00; 0x00; + (* ADC (% r12) (Memop Quadword (%% (rsp,536))) *) + 0x4c; 0x13; 0xac; 0x24; 0x20; 0x02; 0x00; 0x00; + (* ADC (% r13) (Memop Quadword (%% (rsp,544))) *) + 0x4c; 0x13; 0xb4; 0x24; 0x28; 0x02; 0x00; 0x00; + (* ADC (% r14) (Memop Quadword (%% (rsp,552))) *) + 0x4c; 0x13; 0xbc; 0x24; 0x30; 0x02; 0x00; 0x00; + (* ADC (% r15) (Memop Quadword (%% (rsp,560))) *) + 0x48; 0x81; 0xd1; 0x00; 0xfe; 0xff; 0xff; + (* ADC (% rcx) (Imm32 (word 4294966784)) *) + 0xf5; (* CMC *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x84; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,288))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x8c; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,296))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x94; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,304))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x9c; 0x24; 0x38; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,312))) (% r11) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xa4; 0x24; 0x40; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,320))) (% r12) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xac; 0x24; 0x48; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,328))) (% r13) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xb4; 0x24; 0x50; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,336))) (% r14) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xbc; 0x24; 0x58; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,344))) (% r15) *) + 0x48; 0x83; 0xd9; 0x00; (* SBB (% rcx) (Imm8 (word 0)) *) + 0x48; 0x81; 0xe1; 0xff; 0x01; 0x00; 0x00; + (* AND (% rcx) (Imm32 (word 511)) *) + 0x48; 0x89; 0x8c; 0x24; 0x60; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,352))) (% rcx) *) + 0x48; 0xc7; 0xc2; 0x09; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm32 (word 9)) *) + 0x48; 0x8b; 0x9c; 0x24; 0xf0; 0x01; 0x00; 0x00; + (* MOV (% rbx) (Memop Quadword (%% (rsp,496))) *) + 0x48; 0x81; 0xf3; 0xff; 0x01; 0x00; 0x00; + (* XOR (% rbx) (Imm32 (word 511)) *) + 0x48; 0x8b; 0x84; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,432))) *) + 0x48; 0xf7; 0xd0; (* NOT (% rax) *) + 0xc4; 0x62; 0xbb; 0xf6; 0xc8; + (* MULX4 (% r9,% r8) (% rdx,% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,440))) *) + 0x48; 0xf7; 0xd0; (* NOT (% rax) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xd0; + (* MULX4 (% r10,% rax) (% rdx,% rax) *) + 0x49; 0x01; 0xc1; (* ADD (% r9) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0xc0; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,448))) *) + 0x48; 0xf7; 0xd0; (* NOT (% rax) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xd8; + (* MULX4 (% r11,% rax) (% rdx,% rax) *) + 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0xc8; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,456))) *) + 0x48; 0xf7; 0xd0; (* NOT (% rax) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xe0; + (* MULX4 (% r12,% rax) (% rdx,% rax) *) + 0x49; 0x11; 0xc3; (* ADC (% r11) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0xd0; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,464))) *) + 0x48; 0xf7; 0xd0; (* NOT (% rax) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xe8; + (* MULX4 (% r13,% rax) (% rdx,% rax) *) + 0x49; 0x11; 0xc4; (* ADC (% r12) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0xd8; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,472))) *) + 0x48; 0xf7; 0xd0; (* NOT (% rax) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xf0; + (* MULX4 (% r14,% rax) (% rdx,% rax) *) + 0x49; 0x11; 0xc5; (* ADC (% r13) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0xe0; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,480))) *) + 0x48; 0xf7; 0xd0; (* NOT (% rax) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xf8; + (* MULX4 (% r15,% rax) (% rdx,% rax) *) + 0x49; 0x11; 0xc6; (* ADC (% r14) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0xe8; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,488))) *) + 0x48; 0xf7; 0xd0; (* NOT (% rax) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xc8; + (* MULX4 (% rcx,% rax) (% rdx,% rax) *) + 0x49; 0x11; 0xc7; (* ADC (% r15) (% rax) *) + 0xc4; 0xe2; 0xe3; 0xf6; 0xc3; + (* MULX4 (% rax,% rbx) (% rdx,% rbx) *) + 0x48; 0x11; 0xcb; (* ADC (% rbx) (% rcx) *) + 0x31; 0xc0; (* XOR (% eax) (% eax) *) + 0x48; 0xc7; 0xc2; 0x0c; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm32 (word 12)) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x8c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc9; + (* ADOX (% r9) (% rcx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x8c; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd1; + (* ADOX (% r10) (% rcx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x8c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd9; + (* ADOX (% r11) (% rcx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x8c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADOX (% r12) (% rcx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x8c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADOX (% r13) (% rcx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x8c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADOX (% r14) (% rcx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x8c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% rcx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x8c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xd9; + (* ADOX (% rbx) (% rcx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x8c; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% rbx) (% rax) *) + 0x4c; 0x89; 0xc8; (* MOV (% rax) (% r9) *) + 0x4c; 0x21; 0xd0; (* AND (% rax) (% r10) *) + 0x4c; 0x21; 0xd8; (* AND (% rax) (% r11) *) + 0x4c; 0x21; 0xe0; (* AND (% rax) (% r12) *) + 0x4c; 0x21; 0xe8; (* AND (% rax) (% r13) *) + 0x4c; 0x21; 0xf0; (* AND (% rax) (% r14) *) + 0x4c; 0x21; 0xf8; (* AND (% rax) (% r15) *) + 0x48; 0x89; 0xda; (* MOV (% rdx) (% rbx) *) + 0x48; 0xc1; 0xea; 0x09; (* SHR (% rdx) (Imm8 (word 9)) *) + 0x48; 0x81; 0xcb; 0x00; 0xfe; 0xff; 0xff; + (* OR (% rbx) (Imm32 (word 4294966784)) *) + 0x48; 0x8d; 0x4a; 0x01; (* LEA (% rcx) (%% (rdx,1)) *) + 0x4c; 0x01; 0xc1; (* ADD (% rcx) (% r8) *) + 0xb9; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xc8; (* ADC (% rax) (% rcx) *) + 0x48; 0x89; 0xd8; (* MOV (% rax) (% rbx) *) + 0x48; 0x11; 0xc8; (* ADC (% rax) (% rcx) *) + 0x49; 0x11; 0xd0; (* ADC (% r8) (% rdx) *) + 0x4c; 0x89; 0x84; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,432))) (% r8) *) + 0x49; 0x11; 0xc9; (* ADC (% r9) (% rcx) *) + 0x4c; 0x89; 0x8c; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,440))) (% r9) *) + 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) + 0x4c; 0x89; 0x94; 0x24; 0xc0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,448))) (% r10) *) + 0x49; 0x11; 0xcb; (* ADC (% r11) (% rcx) *) + 0x4c; 0x89; 0x9c; 0x24; 0xc8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,456))) (% r11) *) + 0x49; 0x11; 0xcc; (* ADC (% r12) (% rcx) *) + 0x4c; 0x89; 0xa4; 0x24; 0xd0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,464))) (% r12) *) + 0x49; 0x11; 0xcd; (* ADC (% r13) (% rcx) *) + 0x4c; 0x89; 0xac; 0x24; 0xd8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,472))) (% r13) *) + 0x49; 0x11; 0xce; (* ADC (% r14) (% rcx) *) + 0x4c; 0x89; 0xb4; 0x24; 0xe0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,480))) (% r14) *) + 0x49; 0x11; 0xcf; (* ADC (% r15) (% rcx) *) + 0x4c; 0x89; 0xbc; 0x24; 0xe8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,488))) (% r15) *) + 0x48; 0x11; 0xcb; (* ADC (% rbx) (% rcx) *) + 0x48; 0x81; 0xe3; 0xff; 0x01; 0x00; 0x00; + (* AND (% rbx) (Imm32 (word 511)) *) + 0x48; 0x89; 0x9c; 0x24; 0xf0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,496))) (% rbx) *) + 0x48; 0x8b; 0x84; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,288))) *) + 0x48; 0x2b; 0x04; 0x24; (* SUB (% rax) (Memop Quadword (%% (rsp,0))) *) + 0x48; 0x8b; 0x94; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,296))) *) + 0x48; 0x1b; 0x54; 0x24; 0x08; + (* SBB (% rdx) (Memop Quadword (%% (rsp,8))) *) + 0x4c; 0x8b; 0x84; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MOV (% r8) (Memop Quadword (%% (rsp,304))) *) + 0x4c; 0x1b; 0x44; 0x24; 0x10; + (* SBB (% r8) (Memop Quadword (%% (rsp,16))) *) + 0x4c; 0x8b; 0x8c; 0x24; 0x38; 0x01; 0x00; 0x00; + (* MOV (% r9) (Memop Quadword (%% (rsp,312))) *) + 0x4c; 0x1b; 0x4c; 0x24; 0x18; + (* SBB (% r9) (Memop Quadword (%% (rsp,24))) *) + 0x4c; 0x8b; 0x94; 0x24; 0x40; 0x01; 0x00; 0x00; + (* MOV (% r10) (Memop Quadword (%% (rsp,320))) *) + 0x4c; 0x1b; 0x54; 0x24; 0x20; + (* SBB (% r10) (Memop Quadword (%% (rsp,32))) *) + 0x4c; 0x8b; 0x9c; 0x24; 0x48; 0x01; 0x00; 0x00; + (* MOV (% r11) (Memop Quadword (%% (rsp,328))) *) + 0x4c; 0x1b; 0x5c; 0x24; 0x28; + (* SBB (% r11) (Memop Quadword (%% (rsp,40))) *) + 0x4c; 0x8b; 0xa4; 0x24; 0x50; 0x01; 0x00; 0x00; + (* MOV (% r12) (Memop Quadword (%% (rsp,336))) *) + 0x4c; 0x1b; 0x64; 0x24; 0x30; + (* SBB (% r12) (Memop Quadword (%% (rsp,48))) *) + 0x4c; 0x8b; 0xac; 0x24; 0x58; 0x01; 0x00; 0x00; + (* MOV (% r13) (Memop Quadword (%% (rsp,344))) *) + 0x4c; 0x1b; 0x6c; 0x24; 0x38; + (* SBB (% r13) (Memop Quadword (%% (rsp,56))) *) + 0x4c; 0x8b; 0xb4; 0x24; 0x60; 0x01; 0x00; 0x00; + (* MOV (% r14) (Memop Quadword (%% (rsp,352))) *) + 0x4c; 0x1b; 0x74; 0x24; 0x40; + (* SBB (% r14) (Memop Quadword (%% (rsp,64))) *) + 0x48; 0x83; 0xd8; 0x00; (* SBB (% rax) (Imm8 (word 0)) *) + 0x48; 0x89; 0x84; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,360))) (% rax) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x48; 0x89; 0x94; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,368))) (% rdx) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x84; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,376))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x8c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,384))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x94; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,392))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,400))) (% r11) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xa4; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,408))) (% r12) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xac; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,416))) (% r13) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x49; 0x81; 0xe6; 0xff; 0x01; 0x00; 0x00; + (* AND (% r14) (Imm32 (word 511)) *) + 0x4c; 0x89; 0xb4; 0x24; 0xa8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,424))) (% r14) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x54; 0x24; 0x48; + (* MOV (% rdx) (Memop Quadword (%% (rsp,72))) *) + 0xc4; 0xe2; 0xb3; 0xf6; 0x44; 0x24; 0x50; + (* MULX4 (% rax,% r9) (% rdx,Memop Quadword (%% (rsp,80))) *) + 0x4c; 0x89; 0x8c; 0x24; 0x00; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,512))) (% r9) *) + 0xc4; 0xe2; 0xab; 0xf6; 0x5c; 0x24; 0x58; + (* MULX4 (% rbx,% r10) (% rdx,Memop Quadword (%% (rsp,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0x4c; 0x89; 0x94; 0x24; 0x08; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,520))) (% r10) *) + 0xc4; 0xe2; 0xa3; 0xf6; 0x44; 0x24; 0x60; + (* MULX4 (% rax,% r11) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% rbx) *) + 0xc4; 0xe2; 0x9b; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% r12) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xc4; 0xe2; 0x93; 0xf6; 0x44; 0x24; 0x70; + (* MULX4 (% rax,% r13) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADCX (% r13) (% rbx) *) + 0xc4; 0xe2; 0x8b; 0xf6; 0x5c; 0x24; 0x78; + (* MULX4 (% rbx,% r14) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xc4; 0x62; 0x83; 0xf6; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% r8,% r15) (% rdx,Memop Quadword (%% (rsp,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADCX (% r15) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc1; + (* ADCX (% r8) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x54; 0x24; 0x50; + (* MOV (% rdx) (Memop Quadword (%% (rsp,80))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x58; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x4c; 0x89; 0x9c; 0x24; 0x10; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,528))) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4c; 0x89; 0xa4; 0x24; 0x18; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,536))) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x8c; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% r9,% rax) (% rdx,Memop Quadword (%% (rsp,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc9; + (* ADOX (% r9) (% rcx) *) + 0x48; 0x8b; 0x54; 0x24; 0x68; + (* MOV (% rdx) (Memop Quadword (%% (rsp,104))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x54; 0x24; 0x70; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd1; + (* ADOX (% r10) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd1; + (* ADCX (% r10) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x54; 0x24; 0x58; + (* MOV (% rdx) (Memop Quadword (%% (rsp,88))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0x4c; 0x89; 0xac; 0x24; 0x20; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,544))) (% r13) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x4c; 0x89; 0xb4; 0x24; 0x28; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,552))) (% r14) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0x48; 0x8b; 0x54; 0x24; 0x78; + (* MOV (% rdx) (Memop Quadword (%% (rsp,120))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd9; + (* ADOX (% r11) (% rcx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x64; 0x24; 0x70; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADOX (% r12) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADCX (% r12) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x54; 0x24; 0x60; + (* MOV (% rdx) (Memop Quadword (%% (rsp,96))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0x4c; 0x89; 0xbc; 0x24; 0x30; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,560))) (% r15) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0x8b; 0x94; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,128))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x6c; 0x24; 0x70; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADOX (% r13) (% rcx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x74; 0x24; 0x78; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADOX (% r14) (% rcx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADCX (% r14) (% rcx) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x54; 0x24; 0x48; + (* MOV (% rdx) (Memop Quadword (%% (rsp,72))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% rdx) *) + 0x48; 0x89; 0x84; 0x24; 0xf8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,504))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x00; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,512))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% rax) (% rbx) *) + 0x48; 0x89; 0x84; 0x24; 0x00; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,512))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x08; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,520))) *) + 0x48; 0x8b; 0x54; 0x24; 0x50; + (* MOV (% rdx) (Memop Quadword (%% (rsp,80))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc2; + (* ADOX (% rax) (% rdx) *) + 0x48; 0x89; 0x84; 0x24; 0x08; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,520))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x10; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,528))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% rax) (% rbx) *) + 0x48; 0x89; 0x84; 0x24; 0x10; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,528))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x18; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,536))) *) + 0x48; 0x8b; 0x54; 0x24; 0x58; + (* MOV (% rdx) (Memop Quadword (%% (rsp,88))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc2; + (* ADOX (% rax) (% rdx) *) + 0x48; 0x89; 0x84; 0x24; 0x18; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,536))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x20; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,544))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% rax) (% rbx) *) + 0x48; 0x89; 0x84; 0x24; 0x20; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,544))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x28; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,552))) *) + 0x48; 0x8b; 0x54; 0x24; 0x60; + (* MOV (% rdx) (Memop Quadword (%% (rsp,96))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc2; + (* ADOX (% rax) (% rdx) *) + 0x48; 0x89; 0x84; 0x24; 0x28; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,552))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0x30; 0x02; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,560))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% rax) (% rbx) *) + 0x48; 0x89; 0x84; 0x24; 0x30; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,560))) (% rax) *) + 0x48; 0x8b; 0x54; 0x24; 0x68; + (* MOV (% rdx) (Memop Quadword (%% (rsp,104))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% r8) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc2; + (* ADOX (% r8) (% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% r9) (% r9) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0x48; 0x8b; 0x54; 0x24; 0x70; + (* MOV (% rdx) (Memop Quadword (%% (rsp,112))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xd2; + (* ADCX (% r10) (% r10) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd2; + (* ADOX (% r10) (% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% r11) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0x8b; 0x54; 0x24; 0x78; + (* MOV (% rdx) (Memop Quadword (%% (rsp,120))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xe4; + (* ADCX (% r12) (% r12) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe2; + (* ADOX (% r12) (% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% r13) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0x8b; 0x94; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,128))) *) + 0xc4; 0x62; 0xeb; 0xf6; 0xfa; + (* MULX4 (% r15,% rdx) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf6; + (* ADCX (% r14) (% r14) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf2; + (* ADOX (% r14) (% rdx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADCX (% r15) (% rcx) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% rcx) *) + 0x48; 0x8b; 0x94; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,136))) *) + 0x48; 0x89; 0xd1; (* MOV (% rcx) (% rdx) *) + 0x48; 0x0f; 0xaf; 0xc9; (* IMUL (% rcx) (% rcx) *) + 0x48; 0x01; 0xd2; (* ADD (% rdx) (% rdx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x58; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% rcx) (% rbx) *) + 0x48; 0x83; 0xd1; 0x00; (* ADC (% rcx) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xc0; (* MOV (% rax) (% r8) *) + 0x48; 0x25; 0xff; 0x01; 0x00; 0x00; + (* AND (% rax) (Imm32 (word 511)) *) + 0x4d; 0x0f; 0xac; 0xc8; 0x09; + (* SHRD (% r8) (% r9) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xd1; 0x09; + (* SHRD (% r9) (% r10) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xda; 0x09; + (* SHRD (% r10) (% r11) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xe3; 0x09; + (* SHRD (% r11) (% r12) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xec; 0x09; + (* SHRD (% r12) (% r13) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xf5; 0x09; + (* SHRD (% r13) (% r14) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xfe; 0x09; + (* SHRD (% r14) (% r15) (Imm8 (word 9)) *) + 0x49; 0x0f; 0xac; 0xcf; 0x09; + (* SHRD (% r15) (% rcx) (Imm8 (word 9)) *) + 0x48; 0xc1; 0xe9; 0x09; (* SHR (% rcx) (Imm8 (word 9)) *) + 0x48; 0x01; 0xc1; (* ADD (% rcx) (% rax) *) + 0xf9; (* STCF *) + 0x4c; 0x13; 0x84; 0x24; 0xf8; 0x01; 0x00; 0x00; + (* ADC (% r8) (Memop Quadword (%% (rsp,504))) *) + 0x4c; 0x13; 0x8c; 0x24; 0x00; 0x02; 0x00; 0x00; + (* ADC (% r9) (Memop Quadword (%% (rsp,512))) *) + 0x4c; 0x13; 0x94; 0x24; 0x08; 0x02; 0x00; 0x00; + (* ADC (% r10) (Memop Quadword (%% (rsp,520))) *) + 0x4c; 0x13; 0x9c; 0x24; 0x10; 0x02; 0x00; 0x00; + (* ADC (% r11) (Memop Quadword (%% (rsp,528))) *) + 0x4c; 0x13; 0xa4; 0x24; 0x18; 0x02; 0x00; 0x00; + (* ADC (% r12) (Memop Quadword (%% (rsp,536))) *) + 0x4c; 0x13; 0xac; 0x24; 0x20; 0x02; 0x00; 0x00; + (* ADC (% r13) (Memop Quadword (%% (rsp,544))) *) + 0x4c; 0x13; 0xb4; 0x24; 0x28; 0x02; 0x00; 0x00; + (* ADC (% r14) (Memop Quadword (%% (rsp,552))) *) + 0x4c; 0x13; 0xbc; 0x24; 0x30; 0x02; 0x00; 0x00; + (* ADC (% r15) (Memop Quadword (%% (rsp,560))) *) + 0x48; 0x81; 0xd1; 0x00; 0xfe; 0xff; 0xff; + (* ADC (% rcx) (Imm32 (word 4294966784)) *) + 0xf5; (* CMC *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x84; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,288))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x8c; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,296))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x94; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,304))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x9c; 0x24; 0x38; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,312))) (% r11) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xa4; 0x24; 0x40; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,320))) (% r12) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xac; 0x24; 0x48; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,328))) (% r13) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xb4; 0x24; 0x50; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,336))) (% r14) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xbc; 0x24; 0x58; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,344))) (% r15) *) + 0x48; 0x83; 0xd9; 0x00; (* SBB (% rcx) (Imm8 (word 0)) *) + 0x48; 0x81; 0xe1; 0xff; 0x01; 0x00; 0x00; + (* AND (% rcx) (Imm32 (word 511)) *) + 0x48; 0x89; 0x8c; 0x24; 0x60; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,352))) (% rcx) *) + 0x48; 0x8b; 0x84; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,360))) *) + 0x48; 0x2b; 0x44; 0x24; 0x48; + (* SUB (% rax) (Memop Quadword (%% (rsp,72))) *) + 0x48; 0x8b; 0x94; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,368))) *) + 0x48; 0x1b; 0x54; 0x24; 0x50; + (* SBB (% rdx) (Memop Quadword (%% (rsp,80))) *) + 0x4c; 0x8b; 0x84; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MOV (% r8) (Memop Quadword (%% (rsp,376))) *) + 0x4c; 0x1b; 0x44; 0x24; 0x58; + (* SBB (% r8) (Memop Quadword (%% (rsp,88))) *) + 0x4c; 0x8b; 0x8c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MOV (% r9) (Memop Quadword (%% (rsp,384))) *) + 0x4c; 0x1b; 0x4c; 0x24; 0x60; + (* SBB (% r9) (Memop Quadword (%% (rsp,96))) *) + 0x4c; 0x8b; 0x94; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MOV (% r10) (Memop Quadword (%% (rsp,392))) *) + 0x4c; 0x1b; 0x54; 0x24; 0x68; + (* SBB (% r10) (Memop Quadword (%% (rsp,104))) *) + 0x4c; 0x8b; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MOV (% r11) (Memop Quadword (%% (rsp,400))) *) + 0x4c; 0x1b; 0x5c; 0x24; 0x70; + (* SBB (% r11) (Memop Quadword (%% (rsp,112))) *) + 0x4c; 0x8b; 0xa4; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MOV (% r12) (Memop Quadword (%% (rsp,408))) *) + 0x4c; 0x1b; 0x64; 0x24; 0x78; + (* SBB (% r12) (Memop Quadword (%% (rsp,120))) *) + 0x4c; 0x8b; 0xac; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MOV (% r13) (Memop Quadword (%% (rsp,416))) *) + 0x4c; 0x1b; 0xac; 0x24; 0x80; 0x00; 0x00; 0x00; + (* SBB (% r13) (Memop Quadword (%% (rsp,128))) *) + 0x4c; 0x8b; 0xb4; 0x24; 0xa8; 0x01; 0x00; 0x00; + (* MOV (% r14) (Memop Quadword (%% (rsp,424))) *) + 0x4c; 0x1b; 0xb4; 0x24; 0x88; 0x00; 0x00; 0x00; + (* SBB (% r14) (Memop Quadword (%% (rsp,136))) *) + 0x48; 0x83; 0xd8; 0x00; (* SBB (% rax) (Imm8 (word 0)) *) + 0x48; 0x89; 0x87; 0x90; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rdi,144))) (% rax) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x48; 0x89; 0x97; 0x98; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rdi,152))) (% rdx) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x87; 0xa0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rdi,160))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x8f; 0xa8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rdi,168))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x97; 0xb0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rdi,176))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x9f; 0xb8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rdi,184))) (% r11) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xa7; 0xc0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rdi,192))) (% r12) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xaf; 0xc8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rdi,200))) (% r13) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x49; 0x81; 0xe6; 0xff; 0x01; 0x00; 0x00; + (* AND (% r14) (Imm32 (word 511)) *) + 0x4c; 0x89; 0xb7; 0xd0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rdi,208))) (% r14) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0x48; 0x8b; 0x94; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,144))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x8c; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,432))) *) + 0x4c; 0x89; 0x84; 0x24; 0xf8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,504))) (% r8) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x94; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,440))) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x9c; 0x24; 0xc0; 0x01; 0x00; 0x00; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,448))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xa4; 0x24; 0xc8; 0x01; 0x00; 0x00; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,456))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xac; 0x24; 0xd0; 0x01; 0x00; 0x00; + (* MULX4 (% r13,% rbx) (% rdx,Memop Quadword (%% (rsp,464))) *) + 0x49; 0x11; 0xdc; (* ADC (% r12) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xb4; 0x24; 0xd8; 0x01; 0x00; 0x00; + (* MULX4 (% r14,% rbx) (% rdx,Memop Quadword (%% (rsp,472))) *) + 0x49; 0x11; 0xdd; (* ADC (% r13) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xbc; 0x24; 0xe0; 0x01; 0x00; 0x00; + (* MULX4 (% r15,% rbx) (% rdx,Memop Quadword (%% (rsp,480))) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x84; 0x24; 0xe8; 0x01; 0x00; 0x00; + (* MULX4 (% r8,% rbx) (% rdx,Memop Quadword (%% (rsp,488))) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x49; 0x11; 0xc8; (* ADC (% r8) (% rcx) *) + 0x48; 0x8b; 0x94; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,152))) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,432))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0x4c; 0x89; 0x8c; 0x24; 0x00; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,512))) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,440))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xc0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,448))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xc8; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,456))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,464))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,472))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,480))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x8c; 0x24; 0xe8; 0x01; 0x00; 0x00; + (* MULX4 (% r9,% rax) (% rdx,Memop Quadword (%% (rsp,488))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc9; + (* ADOX (% r9) (% rcx) *) + 0x49; 0x11; 0xc9; (* ADC (% r9) (% rcx) *) + 0x48; 0x8b; 0x94; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,160))) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,432))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x4c; 0x89; 0x94; 0x24; 0x08; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,520))) (% r10) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,440))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xc0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,448))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xc8; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,456))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,464))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,472))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,480))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x94; 0x24; 0xe8; 0x01; 0x00; 0x00; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,488))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd1; + (* ADOX (% r10) (% rcx) *) + 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) + 0x48; 0x8b; 0x94; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,168))) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,432))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x4c; 0x89; 0x9c; 0x24; 0x10; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,528))) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,440))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xc0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,448))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xc8; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,456))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,464))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,472))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,480))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x9c; 0x24; 0xe8; 0x01; 0x00; 0x00; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,488))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd9; + (* ADOX (% r11) (% rcx) *) + 0x49; 0x11; 0xcb; (* ADC (% r11) (% rcx) *) + 0x48; 0x8b; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,176))) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,432))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4c; 0x89; 0xa4; 0x24; 0x18; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,536))) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,440))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xc0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,448))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xc8; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,456))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,464))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,472))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,480))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xa4; 0x24; 0xe8; 0x01; 0x00; 0x00; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,488))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADOX (% r12) (% rcx) *) + 0x49; 0x11; 0xcc; (* ADC (% r12) (% rcx) *) + 0x48; 0x8b; 0x94; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,184))) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,432))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0x4c; 0x89; 0xac; 0x24; 0x20; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,544))) (% r13) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,440))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xc0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,448))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xc8; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,456))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,464))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,472))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,480))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xac; 0x24; 0xe8; 0x01; 0x00; 0x00; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,488))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADOX (% r13) (% rcx) *) + 0x49; 0x11; 0xcd; (* ADC (% r13) (% rcx) *) + 0x48; 0x8b; 0x94; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,192))) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,432))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x4c; 0x89; 0xb4; 0x24; 0x28; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,552))) (% r14) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,440))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xc0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,448))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xc8; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,456))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,464))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,472))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,480))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xb4; 0x24; 0xe8; 0x01; 0x00; 0x00; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,488))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADOX (% r14) (% rcx) *) + 0x49; 0x11; 0xce; (* ADC (% r14) (% rcx) *) + 0x48; 0x8b; 0x94; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,200))) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,432))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0x4c; 0x89; 0xbc; 0x24; 0x30; 0x02; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,560))) (% r15) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,440))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xc0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,448))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xc8; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,456))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,464))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,472))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,480))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xbc; 0x24; 0xe8; 0x01; 0x00; 0x00; + (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsp,488))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% rcx) *) + 0x49; 0x11; 0xcf; (* ADC (% r15) (% rcx) *) + 0x48; 0x8b; 0x94; 0x24; 0xf0; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,496))) *) + 0x31; 0xc9; (* XOR (% ecx) (% ecx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xd9; + (* ADOX (% rbx) (% rcx) *) + 0x48; 0x11; 0xd9; (* ADC (% rcx) (% rbx) *) + 0x48; 0x8b; 0x94; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,208))) *) + 0x31; 0xc0; (* XOR (% eax) (% eax) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,432))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,440))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xc0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,448))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xc8; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,456))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,464))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,472))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,480))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe8; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,488))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% rcx) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,496))) *) + 0x48; 0x11; 0xc1; (* ADC (% rcx) (% rax) *) + 0x4c; 0x89; 0xc0; (* MOV (% rax) (% r8) *) + 0x48; 0x25; 0xff; 0x01; 0x00; 0x00; + (* AND (% rax) (Imm32 (word 511)) *) + 0x4d; 0x0f; 0xac; 0xc8; 0x09; + (* SHRD (% r8) (% r9) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xd1; 0x09; + (* SHRD (% r9) (% r10) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xda; 0x09; + (* SHRD (% r10) (% r11) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xe3; 0x09; + (* SHRD (% r11) (% r12) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xec; 0x09; + (* SHRD (% r12) (% r13) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xf5; 0x09; + (* SHRD (% r13) (% r14) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xfe; 0x09; + (* SHRD (% r14) (% r15) (Imm8 (word 9)) *) + 0x49; 0x0f; 0xac; 0xcf; 0x09; + (* SHRD (% r15) (% rcx) (Imm8 (word 9)) *) + 0x48; 0xc1; 0xe9; 0x09; (* SHR (% rcx) (Imm8 (word 9)) *) + 0x48; 0x01; 0xc1; (* ADD (% rcx) (% rax) *) + 0x4c; 0x03; 0x84; 0x24; 0xf8; 0x01; 0x00; 0x00; + (* ADD (% r8) (Memop Quadword (%% (rsp,504))) *) + 0x4c; 0x89; 0x84; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,360))) (% r8) *) + 0x4c; 0x13; 0x8c; 0x24; 0x00; 0x02; 0x00; 0x00; + (* ADC (% r9) (Memop Quadword (%% (rsp,512))) *) + 0x4c; 0x89; 0x8c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,368))) (% r9) *) + 0x4c; 0x13; 0x94; 0x24; 0x08; 0x02; 0x00; 0x00; + (* ADC (% r10) (Memop Quadword (%% (rsp,520))) *) + 0x4c; 0x89; 0x94; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,376))) (% r10) *) + 0x4c; 0x13; 0x9c; 0x24; 0x10; 0x02; 0x00; 0x00; + (* ADC (% r11) (Memop Quadword (%% (rsp,528))) *) + 0x4c; 0x89; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,384))) (% r11) *) + 0x4c; 0x13; 0xa4; 0x24; 0x18; 0x02; 0x00; 0x00; + (* ADC (% r12) (Memop Quadword (%% (rsp,536))) *) + 0x4c; 0x89; 0xa4; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,392))) (% r12) *) + 0x4c; 0x13; 0xac; 0x24; 0x20; 0x02; 0x00; 0x00; + (* ADC (% r13) (Memop Quadword (%% (rsp,544))) *) + 0x4c; 0x89; 0xac; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,400))) (% r13) *) + 0x4c; 0x13; 0xb4; 0x24; 0x28; 0x02; 0x00; 0x00; + (* ADC (% r14) (Memop Quadword (%% (rsp,552))) *) + 0x4c; 0x89; 0xb4; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,408))) (% r14) *) + 0x4c; 0x13; 0xbc; 0x24; 0x30; 0x02; 0x00; 0x00; + (* ADC (% r15) (Memop Quadword (%% (rsp,560))) *) + 0x4c; 0x89; 0xbc; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,416))) (% r15) *) + 0x48; 0x83; 0xd1; 0x00; (* ADC (% rcx) (Imm8 (word 0)) *) + 0x48; 0x89; 0x8c; 0x24; 0xa8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,424))) (% rcx) *) + 0x48; 0x8b; 0x9c; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MOV (% rbx) (Memop Quadword (%% (rsp,280))) *) + 0x4c; 0x8b; 0xbc; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MOV (% r15) (Memop Quadword (%% (rsp,272))) *) + 0x4c; 0x0f; 0xa4; 0xfb; 0x02; + (* SHLD (% rbx) (% r15) (Imm8 (word 2)) *) + 0x4c; 0x8b; 0xb4; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MOV (% r14) (Memop Quadword (%% (rsp,264))) *) + 0x4d; 0x0f; 0xa4; 0xf7; 0x02; + (* SHLD (% r15) (% r14) (Imm8 (word 2)) *) + 0x4c; 0x8b; 0xac; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MOV (% r13) (Memop Quadword (%% (rsp,256))) *) + 0x4d; 0x0f; 0xa4; 0xee; 0x02; + (* SHLD (% r14) (% r13) (Imm8 (word 2)) *) + 0x4c; 0x8b; 0xa4; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MOV (% r12) (Memop Quadword (%% (rsp,248))) *) + 0x4d; 0x0f; 0xa4; 0xe5; 0x02; + (* SHLD (% r13) (% r12) (Imm8 (word 2)) *) + 0x4c; 0x8b; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MOV (% r11) (Memop Quadword (%% (rsp,240))) *) + 0x4d; 0x0f; 0xa4; 0xdc; 0x02; + (* SHLD (% r12) (% r11) (Imm8 (word 2)) *) + 0x4c; 0x8b; 0x94; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MOV (% r10) (Memop Quadword (%% (rsp,232))) *) + 0x4d; 0x0f; 0xa4; 0xd3; 0x02; + (* SHLD (% r11) (% r10) (Imm8 (word 2)) *) + 0x4c; 0x8b; 0x8c; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MOV (% r9) (Memop Quadword (%% (rsp,224))) *) + 0x4d; 0x0f; 0xa4; 0xca; 0x02; + (* SHLD (% r10) (% r9) (Imm8 (word 2)) *) + 0x4c; 0x8b; 0x84; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MOV (% r8) (Memop Quadword (%% (rsp,216))) *) + 0x4d; 0x0f; 0xa4; 0xc1; 0x02; + (* SHLD (% r9) (% r8) (Imm8 (word 2)) *) + 0x49; 0xc1; 0xe0; 0x02; (* SHL (% r8) (Imm8 (word 2)) *) + 0x48; 0x8b; 0x8c; 0x24; 0xf0; 0x01; 0x00; 0x00; + (* MOV (% rcx) (Memop Quadword (%% (rsp,496))) *) + 0x48; 0x81; 0xf1; 0xff; 0x01; 0x00; 0x00; + (* XOR (% rcx) (Imm32 (word 511)) *) + 0x48; 0x8b; 0x84; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,432))) *) + 0x48; 0xf7; 0xd0; (* NOT (% rax) *) + 0x49; 0x01; 0xc0; (* ADD (% r8) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,440))) *) + 0x48; 0xf7; 0xd0; (* NOT (% rax) *) + 0x49; 0x11; 0xc1; (* ADC (% r9) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0xc0; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,448))) *) + 0x48; 0xf7; 0xd0; (* NOT (% rax) *) + 0x49; 0x11; 0xc2; (* ADC (% r10) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0xc8; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,456))) *) + 0x48; 0xf7; 0xd0; (* NOT (% rax) *) + 0x49; 0x11; 0xc3; (* ADC (% r11) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0xd0; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,464))) *) + 0x48; 0xf7; 0xd0; (* NOT (% rax) *) + 0x49; 0x11; 0xc4; (* ADC (% r12) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0xd8; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,472))) *) + 0x48; 0xf7; 0xd0; (* NOT (% rax) *) + 0x49; 0x11; 0xc5; (* ADC (% r13) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0xe0; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,480))) *) + 0x48; 0xf7; 0xd0; (* NOT (% rax) *) + 0x49; 0x11; 0xc6; (* ADC (% r14) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0xe8; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,488))) *) + 0x48; 0xf7; 0xd0; (* NOT (% rax) *) + 0x49; 0x11; 0xc7; (* ADC (% r15) (% rax) *) + 0x48; 0x11; 0xcb; (* ADC (% rbx) (% rcx) *) + 0x4c; 0x89; 0xc8; (* MOV (% rax) (% r9) *) + 0x4c; 0x21; 0xd0; (* AND (% rax) (% r10) *) + 0x4c; 0x21; 0xd8; (* AND (% rax) (% r11) *) + 0x4c; 0x21; 0xe0; (* AND (% rax) (% r12) *) + 0x4c; 0x21; 0xe8; (* AND (% rax) (% r13) *) + 0x4c; 0x21; 0xf0; (* AND (% rax) (% r14) *) + 0x4c; 0x21; 0xf8; (* AND (% rax) (% r15) *) + 0x48; 0x89; 0xda; (* MOV (% rdx) (% rbx) *) + 0x48; 0xc1; 0xea; 0x09; (* SHR (% rdx) (Imm8 (word 9)) *) + 0x48; 0x81; 0xcb; 0x00; 0xfe; 0xff; 0xff; + (* OR (% rbx) (Imm32 (word 4294966784)) *) + 0x48; 0x8d; 0x4a; 0x01; (* LEA (% rcx) (%% (rdx,1)) *) + 0x4c; 0x01; 0xc1; (* ADD (% rcx) (% r8) *) + 0xb9; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xc8; (* ADC (% rax) (% rcx) *) + 0x48; 0x89; 0xd8; (* MOV (% rax) (% rbx) *) + 0x48; 0x11; 0xc8; (* ADC (% rax) (% rcx) *) + 0x49; 0x11; 0xd0; (* ADC (% r8) (% rdx) *) + 0x4c; 0x89; 0x07; (* MOV (Memop Quadword (%% (rdi,0))) (% r8) *) + 0x49; 0x11; 0xc9; (* ADC (% r9) (% rcx) *) + 0x4c; 0x89; 0x4f; 0x08; (* MOV (Memop Quadword (%% (rdi,8))) (% r9) *) + 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) + 0x4c; 0x89; 0x57; 0x10; (* MOV (Memop Quadword (%% (rdi,16))) (% r10) *) + 0x49; 0x11; 0xcb; (* ADC (% r11) (% rcx) *) + 0x4c; 0x89; 0x5f; 0x18; (* MOV (Memop Quadword (%% (rdi,24))) (% r11) *) + 0x49; 0x11; 0xcc; (* ADC (% r12) (% rcx) *) + 0x4c; 0x89; 0x67; 0x20; (* MOV (Memop Quadword (%% (rdi,32))) (% r12) *) + 0x49; 0x11; 0xcd; (* ADC (% r13) (% rcx) *) + 0x4c; 0x89; 0x6f; 0x28; (* MOV (Memop Quadword (%% (rdi,40))) (% r13) *) + 0x49; 0x11; 0xce; (* ADC (% r14) (% rcx) *) + 0x4c; 0x89; 0x77; 0x30; (* MOV (Memop Quadword (%% (rdi,48))) (% r14) *) + 0x49; 0x11; 0xcf; (* ADC (% r15) (% rcx) *) + 0x4c; 0x89; 0x7f; 0x38; (* MOV (Memop Quadword (%% (rdi,56))) (% r15) *) + 0x48; 0x11; 0xcb; (* ADC (% rbx) (% rcx) *) + 0x48; 0x81; 0xe3; 0xff; 0x01; 0x00; 0x00; + (* AND (% rbx) (Imm32 (word 511)) *) + 0x48; 0x89; 0x5f; 0x40; (* MOV (Memop Quadword (%% (rdi,64))) (% rbx) *) + 0x48; 0x8b; 0x9c; 0x24; 0x60; 0x01; 0x00; 0x00; + (* MOV (% rbx) (Memop Quadword (%% (rsp,352))) *) + 0x48; 0x81; 0xf3; 0xff; 0x01; 0x00; 0x00; + (* XOR (% rbx) (Imm32 (word 511)) *) + 0x4c; 0x8b; 0xbc; 0x24; 0x58; 0x01; 0x00; 0x00; + (* MOV (% r15) (Memop Quadword (%% (rsp,344))) *) + 0x49; 0xf7; 0xd7; (* NOT (% r15) *) + 0x4c; 0x0f; 0xa4; 0xfb; 0x03; + (* SHLD (% rbx) (% r15) (Imm8 (word 3)) *) + 0x4c; 0x8b; 0xb4; 0x24; 0x50; 0x01; 0x00; 0x00; + (* MOV (% r14) (Memop Quadword (%% (rsp,336))) *) + 0x49; 0xf7; 0xd6; (* NOT (% r14) *) + 0x4d; 0x0f; 0xa4; 0xf7; 0x03; + (* SHLD (% r15) (% r14) (Imm8 (word 3)) *) + 0x4c; 0x8b; 0xac; 0x24; 0x48; 0x01; 0x00; 0x00; + (* MOV (% r13) (Memop Quadword (%% (rsp,328))) *) + 0x49; 0xf7; 0xd5; (* NOT (% r13) *) + 0x4d; 0x0f; 0xa4; 0xee; 0x03; + (* SHLD (% r14) (% r13) (Imm8 (word 3)) *) + 0x4c; 0x8b; 0xa4; 0x24; 0x40; 0x01; 0x00; 0x00; + (* MOV (% r12) (Memop Quadword (%% (rsp,320))) *) + 0x49; 0xf7; 0xd4; (* NOT (% r12) *) + 0x4d; 0x0f; 0xa4; 0xe5; 0x03; + (* SHLD (% r13) (% r12) (Imm8 (word 3)) *) + 0x4c; 0x8b; 0x9c; 0x24; 0x38; 0x01; 0x00; 0x00; + (* MOV (% r11) (Memop Quadword (%% (rsp,312))) *) + 0x49; 0xf7; 0xd3; (* NOT (% r11) *) + 0x4d; 0x0f; 0xa4; 0xdc; 0x03; + (* SHLD (% r12) (% r11) (Imm8 (word 3)) *) + 0x4c; 0x8b; 0x94; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MOV (% r10) (Memop Quadword (%% (rsp,304))) *) + 0x49; 0xf7; 0xd2; (* NOT (% r10) *) + 0x4d; 0x0f; 0xa4; 0xd3; 0x03; + (* SHLD (% r11) (% r10) (Imm8 (word 3)) *) + 0x4c; 0x8b; 0x8c; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MOV (% r9) (Memop Quadword (%% (rsp,296))) *) + 0x49; 0xf7; 0xd1; (* NOT (% r9) *) + 0x4d; 0x0f; 0xa4; 0xca; 0x03; + (* SHLD (% r10) (% r9) (Imm8 (word 3)) *) + 0x4c; 0x8b; 0x84; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MOV (% r8) (Memop Quadword (%% (rsp,288))) *) + 0x49; 0xf7; 0xd0; (* NOT (% r8) *) + 0x4d; 0x0f; 0xa4; 0xc1; 0x03; + (* SHLD (% r9) (% r8) (Imm8 (word 3)) *) + 0x49; 0xc1; 0xe0; 0x03; (* SHL (% r8) (Imm8 (word 3)) *) + 0x48; 0xc7; 0xc2; 0x03; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Imm32 (word 3)) *) + 0x31; 0xc0; (* XOR (% eax) (% eax) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x8c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc9; + (* ADOX (% r9) (% rcx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x8c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd1; + (* ADOX (% r10) (% rcx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x8c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd9; + (* ADOX (% r11) (% rcx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x8c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe1; + (* ADOX (% r12) (% rcx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x8c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe9; + (* ADOX (% r13) (% rcx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x8c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf1; + (* ADOX (% r14) (% rcx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x8c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf9; + (* ADOX (% r15) (% rcx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x8c; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xd9; + (* ADOX (% rbx) (% rcx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x8c; 0x24; 0xa8; 0x01; 0x00; 0x00; + (* MULX4 (% rcx,% rax) (% rdx,Memop Quadword (%% (rsp,424))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% rbx) (% rax) *) + 0x4c; 0x89; 0xc8; (* MOV (% rax) (% r9) *) + 0x4c; 0x21; 0xd0; (* AND (% rax) (% r10) *) + 0x4c; 0x21; 0xd8; (* AND (% rax) (% r11) *) + 0x4c; 0x21; 0xe0; (* AND (% rax) (% r12) *) + 0x4c; 0x21; 0xe8; (* AND (% rax) (% r13) *) + 0x4c; 0x21; 0xf0; (* AND (% rax) (% r14) *) + 0x4c; 0x21; 0xf8; (* AND (% rax) (% r15) *) + 0x48; 0x89; 0xda; (* MOV (% rdx) (% rbx) *) + 0x48; 0xc1; 0xea; 0x09; (* SHR (% rdx) (Imm8 (word 9)) *) + 0x48; 0x81; 0xcb; 0x00; 0xfe; 0xff; 0xff; + (* OR (% rbx) (Imm32 (word 4294966784)) *) + 0x48; 0x8d; 0x4a; 0x01; (* LEA (% rcx) (%% (rdx,1)) *) + 0x4c; 0x01; 0xc1; (* ADD (% rcx) (% r8) *) + 0xb9; 0x00; 0x00; 0x00; 0x00; + (* MOV (% ecx) (Imm32 (word 0)) *) + 0x48; 0x11; 0xc8; (* ADC (% rax) (% rcx) *) + 0x48; 0x89; 0xd8; (* MOV (% rax) (% rbx) *) + 0x48; 0x11; 0xc8; (* ADC (% rax) (% rcx) *) + 0x49; 0x11; 0xd0; (* ADC (% r8) (% rdx) *) + 0x4c; 0x89; 0x47; 0x48; (* MOV (Memop Quadword (%% (rdi,72))) (% r8) *) + 0x49; 0x11; 0xc9; (* ADC (% r9) (% rcx) *) + 0x4c; 0x89; 0x4f; 0x50; (* MOV (Memop Quadword (%% (rdi,80))) (% r9) *) + 0x49; 0x11; 0xca; (* ADC (% r10) (% rcx) *) + 0x4c; 0x89; 0x57; 0x58; (* MOV (Memop Quadword (%% (rdi,88))) (% r10) *) + 0x49; 0x11; 0xcb; (* ADC (% r11) (% rcx) *) + 0x4c; 0x89; 0x5f; 0x60; (* MOV (Memop Quadword (%% (rdi,96))) (% r11) *) + 0x49; 0x11; 0xcc; (* ADC (% r12) (% rcx) *) + 0x4c; 0x89; 0x67; 0x68; (* MOV (Memop Quadword (%% (rdi,104))) (% r12) *) + 0x49; 0x11; 0xcd; (* ADC (% r13) (% rcx) *) + 0x4c; 0x89; 0x6f; 0x70; (* MOV (Memop Quadword (%% (rdi,112))) (% r13) *) + 0x49; 0x11; 0xce; (* ADC (% r14) (% rcx) *) + 0x4c; 0x89; 0x77; 0x78; (* MOV (Memop Quadword (%% (rdi,120))) (% r14) *) + 0x49; 0x11; 0xcf; (* ADC (% r15) (% rcx) *) + 0x4c; 0x89; 0xbf; 0x80; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rdi,128))) (% r15) *) + 0x48; 0x11; 0xcb; (* ADC (% rbx) (% rcx) *) + 0x48; 0x81; 0xe3; 0xff; 0x01; 0x00; 0x00; + (* AND (% rbx) (Imm32 (word 511)) *) + 0x48; 0x89; 0x9f; 0x88; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rdi,136))) (% rbx) *) + 0x48; 0x81; 0xc4; 0x38; 0x02; 0x00; 0x00; + (* ADD (% rsp) (Imm32 (word 568)) *) + 0x41; 0x5f; (* POP (% r15) *) + 0x41; 0x5e; (* POP (% r14) *) + 0x41; 0x5d; (* POP (% r13) *) + 0x41; 0x5c; (* POP (% r12) *) + 0x5b; (* POP (% rbx) *) + 0xc3 (* RET *) +];; + +let P521_JDOUBLE_EXEC = X86_MK_CORE_EXEC_RULE p521_jdouble_mc;; + +(* ------------------------------------------------------------------------- *) +(* Common supporting definitions and lemmas for component proofs. *) +(* ------------------------------------------------------------------------- *) + +let p_521 = new_definition `p_521 = 6864797660130609714981900799081393217269435300143305409394463459185543183397656052122559640661454554977296311391480858037121987999716643812574028291115057151`;; + +let nistp521 = define + `nistp521 = + (integer_mod_ring p_521, + ring_neg (integer_mod_ring p_521) (&3), + &b_521:int)`;; + +let nistp521_encode = new_definition + `nistp521_encode = modular_encode(521,p_521)`;; + +let nintlemma = prove + (`&(num_of_int(x rem &p_521)) = x rem &p_521`, + MATCH_MP_TAC INT_OF_NUM_OF_INT THEN MATCH_MP_TAC INT_REM_POS THEN + REWRITE_TAC[INT_OF_NUM_EQ; p_521] THEN CONV_TAC NUM_REDUCE_CONV);; + +let unilemma0 = prove + (`x = a MOD p_521 ==> x < p_521 /\ &x = &a rem &p_521`, + REWRITE_TAC[INT_OF_NUM_REM; p_521] THEN ARITH_TAC);; + +let unilemma1 = prove + (`&x = a rem &p_521 ==> x < p_521 /\ &x = a rem &p_521`, + SIMP_TAC[GSYM INT_OF_NUM_LT; INT_LT_REM_EQ; p_521] THEN INT_ARITH_TAC);; + +let unilemma2 = prove + (`X = num_of_int(x rem &p_521) ==> X < p_521 /\ &X = x rem &p_521`, + DISCH_THEN SUBST1_TAC THEN + REWRITE_TAC[GSYM INT_OF_NUM_LT; nintlemma; INT_LT_REM_EQ] THEN + REWRITE_TAC[INT_OF_NUM_LT; p_521] THEN CONV_TAC NUM_REDUCE_CONV);; + +let lvs = + ["x_1",[`RSI`;`0`]; + "y_1",[`RSI`;`72`]; + "z_1",[`RSI`;`144`]; + "x_3",[`RDI`;`0`]; + "y_3",[`RDI`;`72`]; + "z_3",[`RDI`;`144`]; + "z2",[`RSP`;`0`]; + "y2",[`RSP`;`72`]; + "x2p",[`RSP`;`144`]; + "xy2",[`RSP`;`216`]; + "y4",[`RSP`;`288`]; + "t2",[`RSP`;`288`]; + "dx2",[`RSP`;`360`]; + "t1",[`RSP`;`360`]; + "d",[`RSP`;`432`]; + "x4p",[`RSP`;`432`]];; + +(* ------------------------------------------------------------------------- *) +(* Instances of sqr. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_SQR_P521_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE p521_jdouble_mc) 231 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1. + !n. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 9)) t = n + ==> + nonoverlapping (word pc,0x3ded) (stackpointer,568) /\ + nonoverlapping (read RDI t,216) (stackpointer,568) /\ + nonoverlapping (read RSI t,216) (stackpointer,568) /\ + nonoverlapping (word pc,0x3ded) (read RDI t,216) /\ + nonoverlapping (read RSI t,216) (read RDI t,216) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST p521_jdouble_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 9)) s = + n) + (\s. read RIP s = pcout /\ + (n < p_521 + ==> read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 9)) s = (n EXP 2) MOD p_521)) + (MAYCHANGE [RIP; RAX; RBX; RDX; RCX; + R8; R9; R10; R11; R12; R13; R14; R15] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 9); + memory :> bytes(word_add stackpointer (word 504),64)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + (*** Globalize the n < p_521 assumption for simplicity's sake ***) + + ASM_CASES_TAC `n < p_521` THENL + [ASM_REWRITE_TAC[]; X86_SIM_TAC P521_JDOUBLE_EXEC (1--231)] THEN + + (*** Digitize, deduce the bound on the top word specifically ***) + + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "n_" o lhand o concl) THEN + SUBGOAL_THEN `n DIV 2 EXP 512 < 2 EXP 9` MP_TAC THENL + [UNDISCH_TAC `n < p_521` THEN REWRITE_TAC[p_521] THEN ARITH_TAC; + FIRST_ASSUM(fun th -> GEN_REWRITE_TAC (funpow 3 LAND_CONV) [SYM th]) THEN + CONV_TAC(LAND_CONV(ONCE_DEPTH_CONV BIGNUM_OF_WORDLIST_DIV_CONV)) THEN + DISCH_TAC] THEN + + (*** Simulate core squaring, with manual tweaks for small high digit ***) + + X86_ACCSTEPS_TAC P521_JDOUBLE_EXEC (1--160) (1--160) THEN + X86_ACCSTEPS_TAC P521_JDOUBLE_EXEC (165--189) (161--189) THEN + SUBGOAL_THEN + `&(val(word_add n_8 n_8:int64)):real = &2 * &(val n_8) /\ + &(val(word_mul n_8 n_8:int64)):real = &(val n_8) pow 2` + (CONJUNCTS_THEN SUBST_ALL_TAC) THENL + [REWRITE_TAC[VAL_WORD_ADD; VAL_WORD_MUL; DIMINDEX_64] THEN + REWRITE_TAC[REAL_OF_NUM_CLAUSES; MULT_2; EXP_2] THEN + CONJ_TAC THEN MATCH_MP_TAC MOD_LT THENL + [ALL_TAC; + REWRITE_TAC[ARITH_RULE `2 EXP 64 = 2 EXP 32 * 2 EXP 32`] THEN + MATCH_MP_TAC LT_MULT2 THEN CONJ_TAC] THEN + UNDISCH_TAC `val(n_8:int64) < 2 EXP 9` THEN ARITH_TAC; + ALL_TAC] THEN + SUBGOAL_THEN `bitval(2 EXP 64 <= val(n_8:int64) + val n_8) = 0` + SUBST_ALL_TAC THENL + [REWRITE_TAC[BITVAL_EQ_0] THEN + UNDISCH_TAC `val(n_8:int64) < 2 EXP 9` THEN ARITH_TAC; + ALL_TAC] THEN + SUBGOAL_THEN + `bitval(~(ival(n_8:int64) + ival n_8 = ival (word_add n_8 n_8))) = 0` + SUBST_ALL_TAC THENL + [REWRITE_TAC[BITVAL_EQ_0] THEN CONV_TAC SYM_CONV THEN + MATCH_MP_TAC INT_CONG_IMP_EQ THEN + EXISTS_TAC `(&2:int) pow dimindex(:64)` THEN + REWRITE_TAC[ICONG_WORD_ADD] THEN + MP_TAC(ISPEC `word_add n_8 n_8:int64` IVAL_BOUND) THEN + SUBST1_TAC(ISPEC `n_8:int64` INT_IVAL) THEN + UNDISCH_TAC `val(n_8:int64) < 2 EXP 9` THEN + REWRITE_TAC[DIMINDEX_64; GSYM INT_OF_NUM_CLAUSES] THEN + CONV_TAC NUM_REDUCE_CONV THEN CONV_TAC INT_ARITH; + ALL_TAC] THEN + + (*** Introduce more systematic names for the high part digits ***) + + REABBREV_TAC `h0 = read R8 s189` THEN POP_ASSUM SUBST_ALL_TAC THEN + REABBREV_TAC `h1 = read R9 s189` THEN POP_ASSUM SUBST_ALL_TAC THEN + REABBREV_TAC `h2 = read R10 s189` THEN POP_ASSUM SUBST_ALL_TAC THEN + REABBREV_TAC `h3 = read R11 s189` THEN POP_ASSUM SUBST_ALL_TAC THEN + REABBREV_TAC `h4 = read R12 s189` THEN POP_ASSUM SUBST_ALL_TAC THEN + REABBREV_TAC `h5 = read R13 s189` THEN POP_ASSUM SUBST_ALL_TAC THEN + REABBREV_TAC `h6 = read R14 s189` THEN POP_ASSUM SUBST_ALL_TAC THEN + REABBREV_TAC `h7 = read R15 s189` THEN POP_ASSUM SUBST_ALL_TAC THEN + REABBREV_TAC `h8 = read RCX s189` THEN POP_ASSUM SUBST_ALL_TAC THEN + + (*** Show that the core squaring operation is correct ***) + + SUBGOAL_THEN + `2 EXP 512 * bignum_of_wordlist[h0;h1;h2;h3;h4;h5;h6;h7;h8] + + bignum_from_memory(word_add stackpointer (word 504),8) s189 = + n EXP 2` + ASSUME_TAC THENL + [CONV_TAC(ONCE_DEPTH_CONV BIGNUM_LEXPAND_CONV) THEN + ASM_REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`1088`; `&0:real`] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN CONJ_TAC THENL + [REWRITE_TAC[REAL_OF_NUM_CLAUSES; LE_0] THEN + REWRITE_TAC[ARITH_RULE `2 EXP 1088 = 2 EXP 544 EXP 2`] THEN + REWRITE_TAC[EXP_MONO_LT] THEN UNDISCH_TAC `n < p_521` THEN + REWRITE_TAC[p_521] THEN ARITH_TAC; + REWRITE_TAC[INTEGER_CLOSED]] THEN + EXPAND_TAC "n" THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + CONV_TAC(RAND_CONV REAL_POLY_CONV) THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o + filter (is_ratconst o rand o concl) o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC) THEN + RULE_ASSUM_TAC(REWRITE_RULE[BIGNUM_FROM_MEMORY_BYTES])] THEN + + (*** Now simulate the rotation part ***) + + X86_STEPS_TAC P521_JDOUBLE_EXEC (190--201) THEN + + (*** Break up into high and low parts ***) + + ABBREV_TAC `h = (n EXP 2) DIV 2 EXP 521` THEN + ABBREV_TAC `l = (n EXP 2) MOD 2 EXP 521` THEN + SUBGOAL_THEN `h < p_521 /\ l <= p_521` STRIP_ASSUME_TAC THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"] THEN REWRITE_TAC[p_521] THEN + CONJ_TAC THENL [ALL_TAC; ARITH_TAC] THEN + SIMP_TAC[RDIV_LT_EQ; EXP_EQ_0; ARITH_EQ] THEN + TRANS_TAC LET_TRANS `(p_521 - 1) EXP 2` THEN + REWRITE_TAC[EXP_MONO_LE] THEN UNDISCH_TAC `n < p_521` THEN + REWRITE_TAC[p_521] THEN ARITH_TAC; + ALL_TAC] THEN + SUBGOAL_THEN `n EXP 2 MOD p_521 = (h + l) MOD p_521` SUBST1_TAC THENL + [SUBST1_TAC(SYM(SPECL + [`n EXP 2`; `2 EXP 521`] (CONJUNCT2 DIVISION_SIMP))) THEN + ASM_REWRITE_TAC[GSYM CONG] THEN MATCH_MP_TAC(NUMBER_RULE + `(e == 1) (mod p) ==> (e * h + l == h + l) (mod p)`) THEN + REWRITE_TAC[CONG; p_521] THEN ARITH_TAC; + ALL_TAC] THEN + SUBGOAL_THEN + `(n EXP 2) DIV 2 EXP 521 = + bignum_of_wordlist + [word_subword (word_join (h1:int64) h0:int128) (9,64); + word_subword (word_join (h2:int64) h1:int128) (9,64); + word_subword (word_join (h3:int64) h2:int128) (9,64); + word_subword (word_join (h4:int64) h3:int128) (9,64); + word_subword (word_join (h5:int64) h4:int128) (9,64); + word_subword (word_join (h6:int64) h5:int128) (9,64); + word_subword (word_join (h7:int64) h6:int128) (9,64); + word_subword (word_join (h8:int64) h7:int128) (9,64); + word_ushr h8 9] /\ + (n EXP 2) MOD 2 EXP 521 = + 2 EXP 512 * val(word_and h0 (word 511):int64) + + bignum_of_wordlist + [mullo_s101; sum_s105; sum_s111; sum_s115; sum_s121; sum_s125; sum_s131; + sum_s135]` + (CONJUNCTS_THEN SUBST_ALL_TAC) THENL + [MATCH_MP_TAC DIVMOD_UNIQ THEN + REWRITE_TAC[VAL_WORD_AND_MASK_WORD; ARITH_RULE `511 = 2 EXP 9 - 1`] THEN + CONJ_TAC THENL + [FIRST_X_ASSUM(fun th -> GEN_REWRITE_TAC LAND_CONV [SYM th]) THEN + CONV_TAC(ONCE_DEPTH_CONV BIGNUM_LEXPAND_CONV) THEN + ASM_REWRITE_TAC[ADD_ASSOC; EQ_ADD_RCANCEL] THEN + REWRITE_TAC[bignum_of_wordlist; VAL_WORD_USHR] THEN + SIMP_TAC[VAL_WORD_SUBWORD_JOIN_64; DIMINDEX_64; ARITH_LE; ARITH_LT] THEN + ARITH_TAC; + MATCH_MP_TAC(ARITH_RULE + `x < 2 EXP (64 * 8) ==> 2 EXP 512 * h MOD 2 EXP 9 + x < 2 EXP 521`) THEN + MATCH_MP_TAC BIGNUM_OF_WORDLIST_BOUND THEN REWRITE_TAC[LENGTH; ARITH]]; + ALL_TAC] THEN + + (*** The net comparison h + l >= p_521 ***) + + X86_ACCSTEPS_TAC P521_JDOUBLE_EXEC (202--211) (202--211) THEN + SUBGOAL_THEN + `&(val(word_add (word_ushr h8 9) (word_and h0 (word 511):int64))):real = + &(val(word_ushr h8 9:int64)) + &(val(word_and h0 (word 511):int64))` + SUBST_ALL_TAC THENL + [REWRITE_TAC[REAL_OF_NUM_CLAUSES; VAL_WORD_ADD; DIMINDEX_64] THEN + MATCH_MP_TAC MOD_LT THEN + REWRITE_TAC[VAL_WORD_AND_MASK_WORD; ARITH_RULE `511 = 2 EXP 9 - 1`] THEN + REWRITE_TAC[VAL_WORD_USHR] THEN + MP_TAC(SPEC `h8:int64` VAL_BOUND_64) THEN ARITH_TAC; + ALL_TAC] THEN + SUBGOAL_THEN `carry_s211 <=> p_521 <= h + l` SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LE THEN EXISTS_TAC `576` THEN + MAP_EVERY EXPAND_TAC ["h"; "l"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist; p_521] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ALL_TAC] THEN + + (*** The final correction ***) + + X86_ACCSTEPS_TAC P521_JDOUBLE_EXEC (212--231) (212--231) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC SYM_CONV THEN CONV_TAC(RAND_CONV BIGNUM_LEXPAND_CONV) THEN + ASM_REWRITE_TAC[] THEN MATCH_MP_TAC EQUAL_FROM_CONGRUENT_MOD_MOD THEN + MAP_EVERY EXISTS_TAC + [`521`; + `if h + l < p_521 then &h + &l:real else (&h + &l) - &p_521`] THEN + REPEAT CONJ_TAC THENL + [BOUNDER_TAC[]; + REWRITE_TAC[p_521] THEN ARITH_TAC; + REWRITE_TAC[p_521] THEN ARITH_TAC; + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + REWRITE_TAC[GSYM NOT_LT] THEN ABBREV_TAC `bb <=> h + l < p_521` THEN + MAP_EVERY EXPAND_TAC ["h"; "l"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist; p_521] THEN + REWRITE_TAC[VAL_WORD_AND_MASK_WORD; ARITH_RULE `511 = 2 EXP 9 - 1`] THEN + REWRITE_TAC[REAL_OF_NUM_MOD] THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC NUM_REDUCE_CONV THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC; + ASM_SIMP_TAC[MOD_CASES; ARITH_RULE + `h < p /\ l <= p ==> h + l < 2 * p`] THEN + SIMP_TAC[REAL_OF_NUM_CLAUSES; REAL_OF_NUM_SUB; COND_SWAP; GSYM NOT_LE] THEN + MESON_TAC[]]);; + +(* ------------------------------------------------------------------------- *) +(* Instances of mul. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_MUL_P521_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE p521_jdouble_mc) 312 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1 p2 n2. + !a. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 9)) t = a + ==> + !b. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 9)) t = b + ==> + nonoverlapping (word pc,0x3ded) (stackpointer,568) /\ + nonoverlapping (read RDI t,216) (stackpointer,568) /\ + nonoverlapping (read RSI t,216) (stackpointer,568) /\ + nonoverlapping (word pc,0x3ded) (read RDI t,216) /\ + nonoverlapping (read RSI t,216) (read RDI t,216) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST p521_jdouble_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 9)) s = + a /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 9)) s = + b) + (\s. read RIP s = pcout /\ + (a < p_521 /\ b < p_521 + ==> read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 9)) s = (a * b) MOD p_521)) + (MAYCHANGE [RIP; RAX; RBX; RCX; RDX; + R8; R9; R10; R11; R12; R13; R14; R15] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 9); + memory :> bytes(word_add stackpointer (word 504),64)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + (*** Globalize the a < p_521 /\ b < p_521 assumption for simplicity ***) + + ASM_CASES_TAC `a < p_521 /\ b < p_521` THENL + [ASM_REWRITE_TAC[] THEN FIRST_X_ASSUM(CONJUNCTS_THEN ASSUME_TAC); + X86_SIM_TAC P521_JDOUBLE_EXEC (2--313)] THEN + + (*** Digitize, deduce the bound on the top words ***) + + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s1" THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "y_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "x_" o lhand o concl) THEN + SUBGOAL_THEN + `a DIV 2 EXP 512 < 2 EXP 9 /\ b DIV 2 EXP 512 < 2 EXP 9` + MP_TAC THENL + [MAP_EVERY UNDISCH_TAC [`a < p_521`; `b < p_521`] THEN + REWRITE_TAC[p_521] THEN ARITH_TAC; + MAP_EVERY EXPAND_TAC ["a"; "b"] THEN + CONV_TAC(LAND_CONV(ONCE_DEPTH_CONV BIGNUM_OF_WORDLIST_DIV_CONV)) THEN + ASM_REWRITE_TAC[] THEN STRIP_TAC] THEN + + (*** Simulate the initial multiplication ***) + + X86_ACCSTEPS_TAC P521_JDOUBLE_EXEC (2--271) (2--271) THEN + + (*** Introduce more systematic names for the high part digits ***) + + REABBREV_TAC `h0 = read R8 s271` THEN POP_ASSUM SUBST_ALL_TAC THEN + REABBREV_TAC `h1 = read R9 s271` THEN POP_ASSUM SUBST_ALL_TAC THEN + REABBREV_TAC `h2 = read R10 s271` THEN POP_ASSUM SUBST_ALL_TAC THEN + REABBREV_TAC `h3 = read R11 s271` THEN POP_ASSUM SUBST_ALL_TAC THEN + REABBREV_TAC `h4 = read R12 s271` THEN POP_ASSUM SUBST_ALL_TAC THEN + REABBREV_TAC `h5 = read R13 s271` THEN POP_ASSUM SUBST_ALL_TAC THEN + REABBREV_TAC `h6 = read R14 s271` THEN POP_ASSUM SUBST_ALL_TAC THEN + REABBREV_TAC `h7 = read R15 s271` THEN POP_ASSUM SUBST_ALL_TAC THEN + REABBREV_TAC `h8 = read RCX s271` THEN POP_ASSUM SUBST_ALL_TAC THEN + + (*** Show that the core multiplication operation is correct ***) + + SUBGOAL_THEN + `2 EXP 512 * bignum_of_wordlist[h0;h1;h2;h3;h4;h5;h6;h7;h8] + + bignum_from_memory(word_add stackpointer (word 504),8) s271 = + a * b` + ASSUME_TAC THENL + [CONV_TAC(ONCE_DEPTH_CONV BIGNUM_LEXPAND_CONV) THEN + ASM_REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`1088`; `&0:real`] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN CONJ_TAC THENL + [REWRITE_TAC[REAL_OF_NUM_CLAUSES; LE_0] THEN + REWRITE_TAC[EXP_2; ARITH_RULE `2 EXP 1088 = 2 EXP 544 EXP 2`] THEN + MATCH_MP_TAC LT_MULT2 THEN + MAP_EVERY UNDISCH_TAC [`a < p_521`; `b < p_521`] THEN + REWRITE_TAC[p_521] THEN ARITH_TAC; + REWRITE_TAC[INTEGER_CLOSED]] THEN + MAP_EVERY EXPAND_TAC ["a"; "b"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + CONV_TAC(RAND_CONV REAL_POLY_CONV) THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o + filter (is_ratconst o rand o concl) o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC) THEN + RULE_ASSUM_TAC(REWRITE_RULE[BIGNUM_FROM_MEMORY_BYTES])] THEN + + (*** Now simulate the rotation part ***) + + X86_STEPS_TAC P521_JDOUBLE_EXEC (272--283) THEN + + (*** Break up into high and low parts ***) + + ABBREV_TAC `h = (a * b) DIV 2 EXP 521` THEN + ABBREV_TAC `l = (a * b) MOD 2 EXP 521` THEN + SUBGOAL_THEN `h < p_521 /\ l <= p_521` STRIP_ASSUME_TAC THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"] THEN REWRITE_TAC[p_521] THEN + CONJ_TAC THENL [ALL_TAC; ARITH_TAC] THEN + SIMP_TAC[RDIV_LT_EQ; EXP_EQ_0; ARITH_EQ] THEN + TRANS_TAC LET_TRANS `(p_521 - 1) EXP 2` THEN + CONJ_TAC THENL [ALL_TAC; REWRITE_TAC[p_521] THEN ARITH_TAC] THEN + REWRITE_TAC[EXP_2] THEN MATCH_MP_TAC LE_MULT2 THEN CONJ_TAC THEN + MATCH_MP_TAC(ARITH_RULE `x < n ==> x <= n - 1`) THEN ASM_REWRITE_TAC[]; + ALL_TAC] THEN + SUBGOAL_THEN `(a * b) MOD p_521 = (h + l) MOD p_521` SUBST1_TAC THENL + [SUBST1_TAC(SYM(SPECL + [`a * b:num`; `2 EXP 521`] (CONJUNCT2 DIVISION_SIMP))) THEN + ASM_REWRITE_TAC[GSYM CONG] THEN MATCH_MP_TAC(NUMBER_RULE + `(e == 1) (mod p) ==> (e * h + l == h + l) (mod p)`) THEN + REWRITE_TAC[CONG; p_521] THEN ARITH_TAC; + ALL_TAC] THEN + SUBGOAL_THEN + `(a * b) DIV 2 EXP 521 = + bignum_of_wordlist + [word_subword (word_join (h1:int64) h0:int128) (9,64); + word_subword (word_join (h2:int64) h1:int128) (9,64); + word_subword (word_join (h3:int64) h2:int128) (9,64); + word_subword (word_join (h4:int64) h3:int128) (9,64); + word_subword (word_join (h5:int64) h4:int128) (9,64); + word_subword (word_join (h6:int64) h5:int128) (9,64); + word_subword (word_join (h7:int64) h6:int128) (9,64); + word_subword (word_join (h8:int64) h7:int128) (9,64); + word_ushr h8 9] /\ + (a * b) MOD 2 EXP 521 = + 2 EXP 512 * val(word_and h0 (word 511):int64) + + bignum_of_wordlist + [mullo_s4; sum_s24; sum_s52; sum_s80; sum_s108; sum_s136; sum_s164; + sum_s192]` + (CONJUNCTS_THEN SUBST_ALL_TAC) THENL + [MATCH_MP_TAC DIVMOD_UNIQ THEN + REWRITE_TAC[VAL_WORD_AND_MASK_WORD; ARITH_RULE `511 = 2 EXP 9 - 1`] THEN + CONJ_TAC THENL + [FIRST_X_ASSUM(fun th -> GEN_REWRITE_TAC LAND_CONV [SYM th]) THEN + CONV_TAC(ONCE_DEPTH_CONV BIGNUM_LEXPAND_CONV) THEN + ASM_REWRITE_TAC[ADD_ASSOC; EQ_ADD_RCANCEL] THEN + REWRITE_TAC[bignum_of_wordlist; VAL_WORD_USHR] THEN + SIMP_TAC[VAL_WORD_SUBWORD_JOIN_64; DIMINDEX_64; ARITH_LE; ARITH_LT] THEN + ARITH_TAC; + MATCH_MP_TAC(ARITH_RULE + `x < 2 EXP (64 * 8) ==> 2 EXP 512 * h MOD 2 EXP 9 + x < 2 EXP 521`) THEN + MATCH_MP_TAC BIGNUM_OF_WORDLIST_BOUND THEN REWRITE_TAC[LENGTH; ARITH]]; + ALL_TAC] THEN + + (*** The net comparison h + l >= p_521 ***) + + X86_ACCSTEPS_TAC P521_JDOUBLE_EXEC (284--293) (284--293) THEN + SUBGOAL_THEN + `&(val(word_add (word_ushr h8 9) (word_and h0 (word 511):int64))):real = + &(val(word_ushr h8 9:int64)) + &(val(word_and h0 (word 511):int64))` + SUBST_ALL_TAC THENL + [REWRITE_TAC[REAL_OF_NUM_CLAUSES; VAL_WORD_ADD; DIMINDEX_64] THEN + MATCH_MP_TAC MOD_LT THEN + REWRITE_TAC[VAL_WORD_AND_MASK_WORD; ARITH_RULE `511 = 2 EXP 9 - 1`] THEN + REWRITE_TAC[VAL_WORD_USHR] THEN + MP_TAC(SPEC `h8:int64` VAL_BOUND_64) THEN ARITH_TAC; + ALL_TAC] THEN + SUBGOAL_THEN `carry_s293 <=> p_521 <= h + l` SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LE THEN EXISTS_TAC `576` THEN + MAP_EVERY EXPAND_TAC ["h"; "l"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist; p_521] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ALL_TAC] THEN + + (*** The final correction ***) + + X86_ACCSTEPS_TAC P521_JDOUBLE_EXEC (294--313) (294--313) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC SYM_CONV THEN CONV_TAC(RAND_CONV BIGNUM_LEXPAND_CONV) THEN + ASM_REWRITE_TAC[] THEN MATCH_MP_TAC EQUAL_FROM_CONGRUENT_MOD_MOD THEN + MAP_EVERY EXISTS_TAC + [`521`; + `if h + l < p_521 then &h + &l:real else (&h + &l) - &p_521`] THEN + REPEAT CONJ_TAC THENL + [BOUNDER_TAC[]; + REWRITE_TAC[p_521] THEN ARITH_TAC; + REWRITE_TAC[p_521] THEN ARITH_TAC; + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + REWRITE_TAC[GSYM NOT_LT] THEN ABBREV_TAC `bb <=> h + l < p_521` THEN + MAP_EVERY EXPAND_TAC ["h"; "l"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist; p_521] THEN + REWRITE_TAC[VAL_WORD_AND_MASK_WORD; ARITH_RULE `511 = 2 EXP 9 - 1`] THEN + REWRITE_TAC[REAL_OF_NUM_MOD] THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC NUM_REDUCE_CONV THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC; + ASM_SIMP_TAC[MOD_CASES; ARITH_RULE + `h < p /\ l <= p ==> h + l < 2 * p`] THEN + SIMP_TAC[REAL_OF_NUM_CLAUSES; REAL_OF_NUM_SUB; COND_SWAP; GSYM NOT_LE] THEN + MESON_TAC[]]);; + +(* ------------------------------------------------------------------------- *) +(* Instances of add. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_ADD_P521_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE p521_jdouble_mc) 40 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 9)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 9)) t = n + ==> + nonoverlapping (word pc,0x3ded) (word_add (read p3 t) (word n3),72) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST p521_jdouble_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 9)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 9)) s = + n) + (\s. read RIP s = pcout /\ + (m < p_521 /\ n < p_521 + ==> read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 9)) s = (m + n) MOD p_521)) + (MAYCHANGE [RIP; RAX; RDX; R8; R9; R10; R11; RBX; R12; R13; R14] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 9)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + (*** Globalize the m < p_521 /\ n < p_521 assumption ***) + + ASM_CASES_TAC `m < p_521 /\ n < p_521` THENL + [ASM_REWRITE_TAC[]; X86_SIM_TAC P521_JDOUBLE_EXEC (1--40)] THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "m_" o lhand o concl) THEN + + (*** Initial non-overflowing addition s = x + y + 1 ***) + + X86_ACCSTEPS_TAC P521_JDOUBLE_EXEC [3;5;7;9;11;13;15;17;19] (1--19) THEN + SUBGOAL_THEN + `bignum_of_wordlist + [sum_s3;sum_s5;sum_s7;sum_s9;sum_s11;sum_s13;sum_s15;sum_s17;sum_s19] = + m + n + 1` + ASSUME_TAC THENL + [REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`576`; `&0:real`] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN + CONJ_TAC THENL + [MAP_EVERY UNDISCH_TAC [`m < p_521`; `n < p_521`] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_LT; GSYM REAL_OF_NUM_ADD] THEN + REWRITE_TAC[p_521] THEN REAL_ARITH_TAC; + REWRITE_TAC[INTEGER_CLOSED]] THEN + MAP_EVERY EXPAND_TAC ["m"; "n"] THEN + REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** The net comparison s >= 2^521 <=> x + y >= p_521 ***) + + X86_STEPS_TAC P521_JDOUBLE_EXEC (20--21) THEN + RULE_ASSUM_TAC(REWRITE_RULE + [SYM(NUM_REDUCE_CONV `2 EXP 9`); GSYM WORD_OF_BITS_SING_AS_WORD; + WORD_OF_BITS_SING_AND_WORD]) THEN + RULE_ASSUM_TAC(REWRITE_RULE + [WORD_OF_BITS_SING_AS_WORD; NUM_REDUCE_CONV `2 EXP 9`]) THEN + SUBGOAL_THEN `bit 9 (sum_s19:int64) <=> p_521 <= m + n` SUBST_ALL_TAC THENL + [REWRITE_TAC[BIT_VAL_MOD] THEN + SUBGOAL_THEN `val(sum_s19:int64) = (m + n + 1) DIV 2 EXP 512` + SUBST1_TAC THENL + [FIRST_X_ASSUM(fun th -> + GEN_REWRITE_TAC (RAND_CONV o LAND_CONV) [SYM th]) THEN + CONV_TAC(ONCE_DEPTH_CONV BIGNUM_OF_WORDLIST_DIV_CONV) THEN + REWRITE_TAC[]; + MATCH_MP_TAC(MESON[MOD_LT] + `y < n /\ (x <= y <=> q) ==> (x <= y MOD n <=> q)`) THEN + MAP_EVERY UNDISCH_TAC [`m < p_521`; `n < p_521`] THEN + REWRITE_TAC[p_521] THEN ARITH_TAC]; + ALL_TAC] THEN + X86_STEPS_TAC P521_JDOUBLE_EXEC [22] THEN + SUBGOAL_THEN + `val(if p_521 <= m + n then word 512 else word 0:int64) < 512 <=> + ~(p_521 <= m + n)` + SUBST_ALL_TAC THENL + [COND_CASES_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC WORD_REDUCE_CONV THEN CONV_TAC NUM_REDUCE_CONV; + ALL_TAC] THEN + + (*** The final optional subtraction of either 1 or 2^521 ***) + + X86_ACCSTEPS_TAC P521_JDOUBLE_EXEC + [23;25;27;29;31;33;35;37;39] (23--40) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC SYM_CONV THEN CONV_TAC(RAND_CONV BIGNUM_LEXPAND_CONV) THEN + ASM_REWRITE_TAC[] THEN MATCH_MP_TAC EQUAL_FROM_CONGRUENT_MOD_MOD THEN + MAP_EVERY EXISTS_TAC + [`64 * 9`; + `if p_521 <= m + n then &(m + n + 1) - &2 pow 521 + else &(m + n + 1) - &1:real`] THEN + REPEAT CONJ_TAC THENL + [MATCH_MP_TAC BIGNUM_OF_WORDLIST_BOUND THEN + REWRITE_TAC[LENGTH] THEN ARITH_TAC; + REWRITE_TAC[p_521] THEN ARITH_TAC; + REWRITE_TAC[p_521] THEN ARITH_TAC; + ALL_TAC; + ASM_SIMP_TAC[MOD_ADD_CASES; GSYM NOT_LE; COND_SWAP] THEN + COND_CASES_TAC THEN ASM_SIMP_TAC[GSYM REAL_OF_NUM_SUB] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; p_521] THEN REAL_ARITH_TAC] THEN + ABBREV_TAC `s = m + n + 1` THEN POP_ASSUM(K ALL_TAC) THEN EXPAND_TAC "s" THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + REWRITE_TAC[WORD_AND_MASK; GSYM NOT_LE] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC NUM_REDUCE_CONV THEN CONV_TAC WORD_REDUCE_CONV THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instances of sub. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_SUB_P521_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE p521_jdouble_mc) 37 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 9)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 9)) t = n + ==> + nonoverlapping (word pc,0x3ded) (word_add (read p3 t) (word n3),72) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST p521_jdouble_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 9)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 9)) s = + n) + (\s. read RIP s = pcout /\ + (m < p_521 /\ n < p_521 + ==> &(read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 9)) s) = (&m - &n) rem &p_521)) + (MAYCHANGE [RIP; RAX; RDX; R8; R9; R10; R11; RBX; R12; R13; R14] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 9)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "m_" o lhand o concl) THEN + + (*** Initial subtraction x - y, comparison result ***) + + X86_ACCSTEPS_TAC P521_JDOUBLE_EXEC [2;4;6;8;10;12;14;16;18] (1--18) THEN + + SUBGOAL_THEN `carry_s18 <=> m < n` SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN EXISTS_TAC `576` THEN + MAP_EVERY EXPAND_TAC ["m"; "n"] THEN + REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ALL_TAC] THEN + + (*** Further optional subtraction mod 2^521 ***) + + X86_ACCSTEPS_TAC P521_JDOUBLE_EXEC + [19;21;23;25;27;29;31;33;35] (19--37) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN STRIP_TAC THEN + + (*** Map things into the reals, doing case analysis over comparison ***) + + TRANS_TAC EQ_TRANS `if m < n then &m - &n + &p_521:int else &m - &n` THEN + CONJ_TAC THENL + [ONCE_REWRITE_TAC[int_eq] THEN ONCE_REWRITE_TAC[COND_RAND] THEN + REWRITE_TAC[int_of_num_th; int_sub_th; int_add_th]; + CONV_TAC SYM_CONV THEN MATCH_MP_TAC INT_REM_UNIQ THEN + EXISTS_TAC `if m:num < n then --(&1):int else &0` THEN + MAP_EVERY UNDISCH_TAC [`m < p_521`; `n < p_521`] THEN + REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES; p_521] THEN INT_ARITH_TAC] THEN + + (*** Hence show that we get the right result in 521 bits ***) + + CONV_TAC SYM_CONV THEN + CONV_TAC(RAND_CONV(RAND_CONV BIGNUM_LEXPAND_CONV)) THEN + ASM_REWRITE_TAC[SYM(NUM_REDUCE_CONV `2 EXP 9 - 1`)] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`521`; `&0:real`] THEN CONJ_TAC THENL + [MAP_EVERY UNDISCH_TAC [`m < p_521`; `n < p_521`] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; p_521] THEN REAL_ARITH_TAC; + ALL_TAC] THEN + CONJ_TAC THENL + [REWRITE_TAC[REAL_OF_NUM_CLAUSES; LE_0] THEN + REWRITE_TAC[BIGNUM_OF_WORDLIST_SPLIT_RULE(8,1)] THEN + REWRITE_TAC[BIGNUM_OF_WORDLIST_SING; VAL_WORD_AND_MASK_WORD] THEN + MATCH_MP_TAC(ARITH_RULE + `x < 2 EXP (64 * 8) ==> x + 2 EXP 512 * n MOD 2 EXP 9 < 2 EXP 521`) THEN + MATCH_MP_TAC BIGNUM_OF_WORDLIST_BOUND THEN + REWRITE_TAC[LENGTH] THEN ARITH_TAC; + REWRITE_TAC[INTEGER_CLOSED]] THEN + ABBREV_TAC `bb <=> m:num < n` THEN MAP_EVERY EXPAND_TAC ["m"; "n"] THEN + REWRITE_TAC[bignum_of_wordlist; VAL_WORD_AND_MASK_WORD] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; REAL_OF_NUM_MOD; p_521] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instances of weakmul. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_WEAKMUL_P521_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE p521_jdouble_mc) 300 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1 p2 n2. + !a. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 9)) t = a + ==> + !b. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 9)) t = b + ==> + nonoverlapping (word pc,0x3ded) (stackpointer,568) /\ + nonoverlapping (read RDI t,216) (stackpointer,568) /\ + nonoverlapping (read RSI t,216) (stackpointer,568) /\ + nonoverlapping (word pc,0x3ded) (read RDI t,216) /\ + nonoverlapping (read RSI t,216) (read RDI t,216) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST p521_jdouble_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 9)) s = + a /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 9)) s = + b) + (\s. read RIP s = pcout /\ + (a < p_521 /\ b < p_521 + ==> read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 9)) s < 2 * p_521 /\ + (read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 9)) s == a * b) (mod p_521))) + (MAYCHANGE [RIP; RAX; RBX; RCX; RDX; + R8; R9; R10; R11; R12; R13; R14; R15] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 9); + memory :> bytes(word_add stackpointer (word 504),64)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + (*** Globalize the a < p_521 /\ b < p_521 assumption for simplicity ***) + + ASM_CASES_TAC `a < p_521 /\ b < p_521` THENL + [ASM_REWRITE_TAC[] THEN FIRST_X_ASSUM(CONJUNCTS_THEN ASSUME_TAC); + X86_SIM_TAC P521_JDOUBLE_EXEC (2--301)] THEN + + (*** Digitize, deduce the bound on the top words ***) + + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s1" THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "y_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "x_" o lhand o concl) THEN + SUBGOAL_THEN + `a DIV 2 EXP 512 < 2 EXP 9 /\ b DIV 2 EXP 512 < 2 EXP 9` + MP_TAC THENL + [MAP_EVERY UNDISCH_TAC [`a < p_521`; `b < p_521`] THEN + REWRITE_TAC[p_521] THEN ARITH_TAC; + MAP_EVERY EXPAND_TAC ["a"; "b"] THEN + CONV_TAC(LAND_CONV(ONCE_DEPTH_CONV BIGNUM_OF_WORDLIST_DIV_CONV)) THEN + ASM_REWRITE_TAC[] THEN STRIP_TAC] THEN + + (*** Simulate the initial multiplication ***) + + X86_ACCSTEPS_TAC P521_JDOUBLE_EXEC (2--271) (2--271) THEN + + (*** Introduce more systematic names for the high part digits ***) + + REABBREV_TAC `h0 = read R8 s271` THEN POP_ASSUM SUBST_ALL_TAC THEN + REABBREV_TAC `h1 = read R9 s271` THEN POP_ASSUM SUBST_ALL_TAC THEN + REABBREV_TAC `h2 = read R10 s271` THEN POP_ASSUM SUBST_ALL_TAC THEN + REABBREV_TAC `h3 = read R11 s271` THEN POP_ASSUM SUBST_ALL_TAC THEN + REABBREV_TAC `h4 = read R12 s271` THEN POP_ASSUM SUBST_ALL_TAC THEN + REABBREV_TAC `h5 = read R13 s271` THEN POP_ASSUM SUBST_ALL_TAC THEN + REABBREV_TAC `h6 = read R14 s271` THEN POP_ASSUM SUBST_ALL_TAC THEN + REABBREV_TAC `h7 = read R15 s271` THEN POP_ASSUM SUBST_ALL_TAC THEN + REABBREV_TAC `h8 = read RCX s271` THEN POP_ASSUM SUBST_ALL_TAC THEN + + (*** Show that the core multiplication operation is correct ***) + + SUBGOAL_THEN + `2 EXP 512 * bignum_of_wordlist[h0;h1;h2;h3;h4;h5;h6;h7;h8] + + bignum_from_memory(word_add stackpointer (word 504),8) s271 = + a * b` + ASSUME_TAC THENL + [CONV_TAC(ONCE_DEPTH_CONV BIGNUM_LEXPAND_CONV) THEN + ASM_REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`1088`; `&0:real`] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN CONJ_TAC THENL + [REWRITE_TAC[REAL_OF_NUM_CLAUSES; LE_0] THEN + REWRITE_TAC[EXP_2; ARITH_RULE `2 EXP 1088 = 2 EXP 544 EXP 2`] THEN + MATCH_MP_TAC LT_MULT2 THEN + MAP_EVERY UNDISCH_TAC [`a < p_521`; `b < p_521`] THEN + REWRITE_TAC[p_521] THEN ARITH_TAC; + REWRITE_TAC[INTEGER_CLOSED]] THEN + MAP_EVERY EXPAND_TAC ["a"; "b"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + CONV_TAC(RAND_CONV REAL_POLY_CONV) THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o + filter (is_ratconst o rand o concl) o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC) THEN + RULE_ASSUM_TAC(REWRITE_RULE[BIGNUM_FROM_MEMORY_BYTES])] THEN + + (*** Now simulate the rotation part ***) + + X86_STEPS_TAC P521_JDOUBLE_EXEC (272--283) THEN + + (*** Break up into high and low parts ***) + + ABBREV_TAC `h = (a * b) DIV 2 EXP 521` THEN + ABBREV_TAC `l = (a * b) MOD 2 EXP 521` THEN + SUBGOAL_THEN `h < p_521 /\ l <= p_521` STRIP_ASSUME_TAC THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"] THEN REWRITE_TAC[p_521] THEN + CONJ_TAC THENL [ALL_TAC; ARITH_TAC] THEN + SIMP_TAC[RDIV_LT_EQ; EXP_EQ_0; ARITH_EQ] THEN + TRANS_TAC LET_TRANS `(p_521 - 1) EXP 2` THEN + CONJ_TAC THENL [ALL_TAC; REWRITE_TAC[p_521] THEN ARITH_TAC] THEN + REWRITE_TAC[EXP_2] THEN MATCH_MP_TAC LE_MULT2 THEN CONJ_TAC THEN + MATCH_MP_TAC(ARITH_RULE `x < n ==> x <= n - 1`) THEN ASM_REWRITE_TAC[]; + ALL_TAC] THEN + REWRITE_TAC[CONG] THEN + SUBGOAL_THEN `(a * b) MOD p_521 = (h + l) MOD p_521` SUBST1_TAC THENL + [SUBST1_TAC(SYM(SPECL + [`a * b:num`; `2 EXP 521`] (CONJUNCT2 DIVISION_SIMP))) THEN + ASM_REWRITE_TAC[GSYM CONG] THEN MATCH_MP_TAC(NUMBER_RULE + `(e == 1) (mod p) ==> (e * h + l == h + l) (mod p)`) THEN + REWRITE_TAC[CONG; p_521] THEN ARITH_TAC; + ALL_TAC] THEN + SUBGOAL_THEN + `(a * b) DIV 2 EXP 521 = + bignum_of_wordlist + [word_subword (word_join (h1:int64) h0:int128) (9,64); + word_subword (word_join (h2:int64) h1:int128) (9,64); + word_subword (word_join (h3:int64) h2:int128) (9,64); + word_subword (word_join (h4:int64) h3:int128) (9,64); + word_subword (word_join (h5:int64) h4:int128) (9,64); + word_subword (word_join (h6:int64) h5:int128) (9,64); + word_subword (word_join (h7:int64) h6:int128) (9,64); + word_subword (word_join (h8:int64) h7:int128) (9,64); + word_ushr h8 9] /\ + (a * b) MOD 2 EXP 521 = + 2 EXP 512 * val(word_and h0 (word 511):int64) + + bignum_of_wordlist + [mullo_s4; sum_s24; sum_s52; sum_s80; sum_s108; sum_s136; sum_s164; + sum_s192]` + (CONJUNCTS_THEN SUBST_ALL_TAC) THENL + [MATCH_MP_TAC DIVMOD_UNIQ THEN + REWRITE_TAC[VAL_WORD_AND_MASK_WORD; ARITH_RULE `511 = 2 EXP 9 - 1`] THEN + CONJ_TAC THENL + [FIRST_X_ASSUM(fun th -> GEN_REWRITE_TAC LAND_CONV [SYM th]) THEN + CONV_TAC(ONCE_DEPTH_CONV BIGNUM_LEXPAND_CONV) THEN + ASM_REWRITE_TAC[ADD_ASSOC; EQ_ADD_RCANCEL] THEN + REWRITE_TAC[bignum_of_wordlist; VAL_WORD_USHR] THEN + SIMP_TAC[VAL_WORD_SUBWORD_JOIN_64; DIMINDEX_64; ARITH_LE; ARITH_LT] THEN + ARITH_TAC; + MATCH_MP_TAC(ARITH_RULE + `x < 2 EXP (64 * 8) ==> 2 EXP 512 * h MOD 2 EXP 9 + x < 2 EXP 521`) THEN + MATCH_MP_TAC BIGNUM_OF_WORDLIST_BOUND THEN REWRITE_TAC[LENGTH; ARITH]]; + ALL_TAC] THEN + + (*** Now the simple addition of h + l as the result ***) + + X86_ACCSTEPS_TAC P521_JDOUBLE_EXEC + [284;286;288;290;292;294;296;298;300] (284--301) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + + MATCH_MP_TAC(MESON[] + `x' < a /\ x = x' ==> x < a /\ x MOD p = x' MOD p`) THEN + CONJ_TAC THENL + [MAP_EVERY UNDISCH_TAC [`h < p_521`; `l <= p_521`] THEN ARITH_TAC; + ALL_TAC] THEN + CONV_TAC(LAND_CONV BIGNUM_LEXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`576`; `&0:real`] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN CONJ_TAC THENL + [REWRITE_TAC[REAL_OF_NUM_CLAUSES; LE_0] THEN + MAP_EVERY UNDISCH_TAC [`h < p_521`; `l <= p_521`] THEN + REWRITE_TAC[p_521] THEN ARITH_TAC; + REWRITE_TAC[INTEGER_CLOSED]] THEN + MAP_EVERY EXPAND_TAC ["h"; "l"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist; p_521] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + REWRITE_TAC[VAL_WORD_AND_MASK_WORD; ARITH_RULE `511 = 2 EXP 9 - 1`] THEN + REWRITE_TAC[REAL_OF_NUM_MOD] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instance (12,9) of cmsub (the only one used in this code). *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_CMSUBC9_P521_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE p521_jdouble_mc) 99 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 9)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 9)) t = n + ==> nonoverlapping (word pc,0x3ded) (word_add (read p3 t) (word n3),72) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST p521_jdouble_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 9)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 9)) s = + n) + (\s. read RIP s = pcout /\ + (m < 2 * p_521 /\ n <= p_521 + ==> &(read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 9)) s) = (&12 * &m - &9 * &n) rem &p_521)) + (MAYCHANGE [RIP; RAX; RBX; RCX; RDX; R8; R9; + R10; R11; R12; R13; R14; R15] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 9)] ,, + MAYCHANGE SOME_FLAGS)` + + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + (*** Globalize the bound assumption for simplicity ***) + + ASM_CASES_TAC `m < 2 * p_521 /\ n <= p_521` THENL + [ASM_REWRITE_TAC[] THEN FIRST_X_ASSUM(CONJUNCTS_THEN ASSUME_TAC); + X86_SIM_TAC P521_JDOUBLE_EXEC (1--99)] THEN + + (*** Digitize and introduce the sign-flipped version of n ***) + + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "m_" o lhand o concl) THEN + ABBREV_TAC + `n' = bignum_of_wordlist + [word_not n_0; word_not n_1; word_not n_2; word_not n_3; word_not n_4; + word_not n_5; word_not n_6; word_not n_7; word_xor n_8 (word 0x1FF)]` THEN + + SUBGOAL_THEN `p_521 - n = n'` ASSUME_TAC THENL + [MATCH_MP_TAC(ARITH_RULE `n + m:num = p ==> p - n = m`) THEN + MAP_EVERY EXPAND_TAC ["n"; "n'"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + SUBGOAL_THEN + `&(val(word_xor (n_8:int64) (word 511))):real = &2 pow 9 - &1 - &(val n_8)` + SUBST1_TAC THENL + [REWRITE_TAC[REAL_VAL_WORD_XOR]; + REWRITE_TAC[REAL_VAL_WORD_NOT; DIMINDEX_64; p_521] THEN + REAL_ARITH_TAC] THEN + CONV_TAC WORD_REDUCE_CONV THEN CONV_TAC REAL_RAT_REDUCE_CONV THEN + MATCH_MP_TAC(REAL_ARITH + `n':real = n ==> (n + c) - &2 * n' = c - n`) THEN + REWRITE_TAC[VAL_WORD_AND_MASK_WORD; ARITH_RULE `511 = 2 EXP 9 - 1`] THEN + REWRITE_TAC[REAL_OF_NUM_EQ] THEN MATCH_MP_TAC MOD_LT THEN + UNDISCH_TAC `n <= p_521` THEN + DISCH_THEN(MP_TAC o MATCH_MP (ARITH_RULE + `n <= p ==> n DIV 2 EXP 512 <= p DIV 2 EXP 512`)) THEN + EXPAND_TAC "n" THEN + CONV_TAC(ONCE_DEPTH_CONV BIGNUM_OF_WORDLIST_DIV_CONV) THEN + REWRITE_TAC[p_521] THEN ARITH_TAC; + ALL_TAC] THEN + + SUBGOAL_THEN + `(&12 * &m - &9 * &n) rem &p_521 = + (&12 * &m + &9 * (&p_521 - &n)) rem &p_521` + SUBST1_TAC THENL + [REWRITE_TAC[INT_REM_EQ] THEN CONV_TAC INTEGER_RULE; + ASM_SIMP_TAC[INT_OF_NUM_CLAUSES; INT_OF_NUM_SUB; INT_OF_NUM_REM]] THEN + + (*** The basic multiply-add block = ca, then forget the components ***) + + ABBREV_TAC `ca = 12 * m + 9 * n'` THEN + SUBGOAL_THEN `ca < 2 EXP 527` ASSUME_TAC THENL + [MAP_EVERY EXPAND_TAC ["ca"; "n'"] THEN UNDISCH_TAC `m < 2 * p_521` THEN + REWRITE_TAC[p_521] THEN ARITH_TAC; + ALL_TAC] THEN + + X86_ACCSTEPS_TAC P521_JDOUBLE_EXEC (1--64) (1--64) THEN + SUBGOAL_THEN + `bignum_of_wordlist + [sum_s40; sum_s43; sum_s46; sum_s49; + sum_s52; sum_s55; sum_s58; sum_s61; sum_s64] = ca` + ASSUME_TAC THENL + [REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`576`; `&0:real`] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN + EXPAND_TAC "ca" THEN CONJ_TAC THENL + [UNDISCH_TAC `m < 2 * p_521` THEN EXPAND_TAC "n'" THEN + REWRITE_TAC[REAL_OF_NUM_CLAUSES; LE_0; p_521] THEN ARITH_TAC; + REWRITE_TAC[INTEGER_CLOSED]] THEN + UNDISCH_THEN `p_521 - n = n'` (K ALL_TAC) THEN + MAP_EVERY EXPAND_TAC ["m"; "n'"] THEN + REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + REWRITE_TAC[REAL_VAL_WORD_NOT; DIMINDEX_64] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC) THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o check (free_in `m:num` o concl))) THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o check (free_in `n:num` o concl))) THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o check (free_in `n':num` o concl)))] THEN + + (*** Breaking the problem down to (h + l) MOD p_521 ***) + + SUBGOAL_THEN `ca MOD p_521 = (ca DIV 2 EXP 521 + ca MOD 2 EXP 521) MOD p_521` + SUBST1_TAC THENL + [GEN_REWRITE_TAC (LAND_CONV o LAND_CONV) + [ARITH_RULE `ca = 2 EXP 521 * ca DIV 2 EXP 521 + ca MOD 2 EXP 521`] THEN + REWRITE_TAC[GSYM CONG] THEN MATCH_MP_TAC(NUMBER_RULE + `(e == 1) (mod p) ==> (e * h + l == h + l) (mod p)`) THEN + REWRITE_TAC[p_521; CONG] THEN ARITH_TAC; + ALL_TAC] THEN + SUBGOAL_THEN `ca DIV 2 EXP 521 < 2 EXP 64 /\ ca MOD 2 EXP 521 < 2 EXP 521` + STRIP_ASSUME_TAC THENL + [REWRITE_TAC[MOD_LT_EQ] THEN UNDISCH_TAC `ca < 2 EXP 527` THEN ARITH_TAC; + ALL_TAC] THEN + + (*** Splitting up and stuffing 1 bits into the low part ***) + + X86_STEPS_TAC P521_JDOUBLE_EXEC (65--74) THEN + RULE_ASSUM_TAC(REWRITE_RULE[GSYM WORD_AND_ASSOC; DIMINDEX_64]) THEN + MAP_EVERY ABBREV_TAC + [`h:int64 = word_ushr sum_s64 9`; + `d:int64 = word_or sum_s64 (word 18446744073709551104)`; + `dd:int64 = word_and sum_s43 (word_and sum_s46 (word_and sum_s49 + (word_and sum_s52 (word_and sum_s55 (word_and sum_s58 sum_s61)))))`] THEN + + (*** The comparison in its direct condensed form ***) + + X86_ACCSTEPS_TAC P521_JDOUBLE_EXEC [76;78;80] (75--80) THEN + + SUBGOAL_THEN + `&(val (word_add h (word 1):int64)):real = &(val h) + &1` + SUBST_ALL_TAC THENL + [REWRITE_TAC[REAL_OF_NUM_CLAUSES; VAL_WORD_ADD_CASES] THEN + REWRITE_TAC[DIMINDEX_64; VAL_WORD_1] THEN + MATCH_MP_TAC(MESON[] `p ==> (if p then x else y) = x`) THEN + SUBST1_TAC(SYM(ASSUME `word_ushr sum_s64 9 = (h:int64)`)) THEN + CONV_TAC NUM_REDUCE_CONV THEN BOUNDER_TAC[]; + ALL_TAC] THEN + SUBGOAL_THEN + `carry_s80 <=> + 2 EXP 192 <= + 2 EXP 128 * val(d:int64) + 2 EXP 64 * val(dd:int64) + + val(h:int64) + val(sum_s40:int64) + 1` + (ASSUME_TAC o SYM) THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LE THEN EXISTS_TAC `192` THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Finish the simulation before completing the mathematics ***) + + X86_ACCSTEPS_TAC P521_JDOUBLE_EXEC + [81;83;85;87;89;91;93;95;97] (81--99) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(LAND_CONV BIGNUM_LEXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + DISCARD_STATE_TAC "s99" THEN + + (*** Evaluate d and un-condense the inequality ***) + + SUBGOAL_THEN + `val(d:int64) = 2 EXP 9 * (2 EXP 55 - 1) + val(sum_s64:int64) MOD 2 EXP 9` + SUBST_ALL_TAC THENL + [EXPAND_TAC "d" THEN ONCE_REWRITE_TAC[WORD_BITWISE_RULE + `word_or a b = word_or b (word_and a (word_not b))`] THEN + SIMP_TAC[VAL_WORD_OR_DISJOINT; WORD_BITWISE_RULE + `word_and x (word_and y (word_not x)) = word 0`] THEN + REWRITE_TAC[GSYM VAL_WORD_AND_MASK_WORD] THEN + CONV_TAC NUM_REDUCE_CONV THEN CONV_TAC WORD_REDUCE_CONV; + ALL_TAC] THEN + + SUBGOAL_THEN + `2 EXP 512 * val(sum_s64:int64) MOD 2 EXP 9 + + bignum_of_wordlist + [sum_s40; sum_s43; sum_s46; sum_s49; sum_s52; sum_s55; sum_s58; sum_s61] = + ca MOD 2 EXP 521` + (LABEL_TAC "*") THENL + [CONV_TAC SYM_CONV THEN EXPAND_TAC "ca" THEN + REWRITE_TAC[BIGNUM_OF_WORDLIST_SPLIT_RULE(8,1)] THEN + REWRITE_TAC[ARITH_RULE `2 EXP 521 = 2 EXP 512 * 2 EXP 9`] THEN + REWRITE_TAC[SYM(NUM_REDUCE_CONV `64 * 8`)] THEN + SIMP_TAC[LENGTH; ARITH_LT; ARITH_LE; MOD_MULT_MOD; ADD_CLAUSES; + ARITH_SUC; BIGNUM_OF_WORDLIST_BOUND; MOD_LT; DIV_LT; + MOD_MULT_ADD; DIV_MULT_ADD; EXP_EQ_0; ARITH_EQ] THEN + REWRITE_TAC[BIGNUM_OF_WORDLIST_SING] THEN ARITH_TAC; + ALL_TAC] THEN + + SUBGOAL_THEN + `2 EXP 521 <= ca MOD 2 EXP 521 + val(h:int64) + 1 <=> carry_s80` + MP_TAC THENL + [REMOVE_THEN "*" (SUBST1_TAC o SYM) THEN EXPAND_TAC "carry_s80" THEN + ONCE_REWRITE_TAC[bignum_of_wordlist] THEN + MATCH_MP_TAC(TAUT + `!p q. ((p ==> ~r) /\ (q ==> ~s)) /\ (p <=> q) /\ (~p /\ ~q ==> (r <=> s)) + ==> (r <=> s)`) THEN + MAP_EVERY EXISTS_TAC + [`bignum_of_wordlist + [sum_s43; sum_s46; sum_s49; sum_s52; sum_s55; sum_s58; sum_s61] < + 2 EXP (64 * 7) - 1`; + `val(dd:int64) < 2 EXP 64 - 1`] THEN + CONJ_TAC THENL + [CONJ_TAC THEN MATCH_MP_TAC(ARITH_RULE + `2 EXP 64 * b + d < 2 EXP 64 * (a + 1) + c ==> a < b ==> ~(c <= d)`) THEN + MP_TAC(SPEC `h:int64` VAL_BOUND_64) THEN + MP_TAC(SPEC `sum_s40:int64` VAL_BOUND_64) THEN ARITH_TAC; + SIMP_TAC[BIGNUM_OF_WORDLIST_LT_MAX; LENGTH; ARITH_EQ; ARITH_SUC]] THEN + REWRITE_TAC[GSYM NOT_ALL] THEN MP_TAC(ISPEC `dd:int64` VAL_EQ_MAX) THEN + SIMP_TAC[VAL_BOUND_64; DIMINDEX_64; ARITH_RULE + `a < n ==> (a < n - 1 <=> ~(a = n - 1))`] THEN + DISCH_THEN SUBST1_TAC THEN EXPAND_TAC "dd" THEN + REWRITE_TAC[WORD_NOT_AND; ALL; WORD_OR_EQ_0] THEN + REWRITE_TAC[WORD_RULE `word_not d = e <=> d = word_not e`] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN SUBST1_TAC) THEN + REWRITE_TAC[bignum_of_wordlist] THEN CONV_TAC WORD_REDUCE_CONV THEN + MP_TAC(ARITH_RULE `val(sum_s64:int64) MOD 2 EXP 9 = 511 \/ + val(sum_s64:int64) MOD 2 EXP 9 < 511`) THEN + MP_TAC(SPEC `h:int64` VAL_BOUND_64) THEN + MP_TAC(SPEC `sum_s40:int64` VAL_BOUND_64) THEN ARITH_TAC; + FIRST_X_ASSUM(K ALL_TAC o check (is_iff o concl))] THEN + + (*** Also evaluate h ***) + + SUBGOAL_THEN `val(h:int64) = ca DIV 2 EXP 521` SUBST_ALL_TAC THENL + [EXPAND_TAC "h" THEN REWRITE_TAC[VAL_WORD_USHR] THEN + EXPAND_TAC "ca" THEN + CONV_TAC(ONCE_DEPTH_CONV BIGNUM_OF_WORDLIST_DIV_CONV) THEN + REWRITE_TAC[]; + ALL_TAC] THEN + + (*** Now complete the mathematics ***) + + SUBGOAL_THEN + `2 EXP 521 <= ca MOD 2 EXP 521 + ca DIV 2 EXP 521 + 1 <=> + p_521 <= ca DIV 2 EXP 521 + ca MOD 2 EXP 521` + SUBST1_TAC THENL [REWRITE_TAC[p_521] THEN ARITH_TAC; DISCH_TAC] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC EQUAL_FROM_CONGRUENT_MOD_MOD THEN + MAP_EVERY EXISTS_TAC + [`521`; + `if ca DIV 2 EXP 521 + ca MOD 2 EXP 521 < p_521 + then &(ca DIV 2 EXP 521 + ca MOD 2 EXP 521) + else &(ca DIV 2 EXP 521 + ca MOD 2 EXP 521) - &p_521`] THEN + REPEAT CONJ_TAC THENL + [BOUNDER_TAC[]; + REWRITE_TAC[p_521] THEN ARITH_TAC; + REWRITE_TAC[p_521] THEN ARITH_TAC; + ALL_TAC; + W(MP_TAC o PART_MATCH (lhand o rand) MOD_CASES o rand o lhand o snd) THEN + ANTS_TAC THENL + [UNDISCH_TAC `ca < 2 EXP 527` THEN REWRITE_TAC[p_521] THEN ARITH_TAC; + DISCH_THEN SUBST1_TAC] THEN + ONCE_REWRITE_TAC[COND_RAND] THEN + SIMP_TAC[GSYM NOT_LE; COND_SWAP; GSYM REAL_OF_NUM_SUB; COND_ID]] THEN + ASM_REWRITE_TAC[GSYM NOT_LE; COND_SWAP] THEN + REMOVE_THEN "*" (SUBST1_TAC o SYM) THEN + REWRITE_TAC[SYM(NUM_REDUCE_CONV `2 EXP 9 - 1`)] THEN + REWRITE_TAC[VAL_WORD_AND_MASK_WORD; bignum_of_wordlist] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; REAL_OF_NUM_MOD; p_521] THEN + CONV_TAC NUM_REDUCE_CONV THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instances of cmsub41 (there is only one). *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_CMSUB41_P521_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE p521_jdouble_mc) 80 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 9)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 9)) t = n + ==> nonoverlapping (word pc,0x3ded) (word_add (read p3 t) (word n3),72) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST p521_jdouble_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 9)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 9)) s = + n) + (\s. read RIP s = pcout /\ + (m < 2 * p_521 /\ n <= p_521 + ==> &(read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 9)) s) = (&4 * &m - &n) rem &p_521)) + (MAYCHANGE [RIP; RAX; RBX; RCX; RDX; R8; R9; + R10; R11; R12; R13; R14; R15] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 9)] ,, + MAYCHANGE SOME_FLAGS)` + + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + (*** Globalize the bound assumption for simplicity ***) + + ASM_CASES_TAC `m < 2 * p_521 /\ n <= p_521` THENL + [ASM_REWRITE_TAC[] THEN FIRST_X_ASSUM(CONJUNCTS_THEN ASSUME_TAC); + X86_SIM_TAC P521_JDOUBLE_EXEC (1--80)] THEN + + (*** Digitize and introduce the sign-flipped version of n ***) + + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "m_" o lhand o concl) THEN + ABBREV_TAC + `n' = bignum_of_wordlist + [word_not n_0; word_not n_1; word_not n_2; word_not n_3; word_not n_4; + word_not n_5; word_not n_6; word_not n_7; word_xor n_8 (word 0x1FF)]` THEN + + SUBGOAL_THEN `p_521 - n = n'` ASSUME_TAC THENL + [MATCH_MP_TAC(ARITH_RULE `n + m:num = p ==> p - n = m`) THEN + MAP_EVERY EXPAND_TAC ["n"; "n'"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + SUBGOAL_THEN + `&(val(word_xor (n_8:int64) (word 511))):real = &2 pow 9 - &1 - &(val n_8)` + SUBST1_TAC THENL + [REWRITE_TAC[REAL_VAL_WORD_XOR]; + REWRITE_TAC[REAL_VAL_WORD_NOT; DIMINDEX_64; p_521] THEN + REAL_ARITH_TAC] THEN + CONV_TAC WORD_REDUCE_CONV THEN CONV_TAC REAL_RAT_REDUCE_CONV THEN + MATCH_MP_TAC(REAL_ARITH + `n':real = n ==> (n + c) - &2 * n' = c - n`) THEN + REWRITE_TAC[VAL_WORD_AND_MASK_WORD; ARITH_RULE `511 = 2 EXP 9 - 1`] THEN + REWRITE_TAC[REAL_OF_NUM_EQ] THEN MATCH_MP_TAC MOD_LT THEN + UNDISCH_TAC `n <= p_521` THEN + DISCH_THEN(MP_TAC o MATCH_MP (ARITH_RULE + `n <= p ==> n DIV 2 EXP 512 <= p DIV 2 EXP 512`)) THEN + EXPAND_TAC "n" THEN + CONV_TAC(ONCE_DEPTH_CONV BIGNUM_OF_WORDLIST_DIV_CONV) THEN + REWRITE_TAC[p_521] THEN ARITH_TAC; + ALL_TAC] THEN + + (*** Now introduce the shifted version of m ***) + + ABBREV_TAC + `m' = bignum_of_wordlist + [word_shl m_0 2; + word_subword ((word_join:int64->int64->int128) m_1 m_0) (62,64); + word_subword ((word_join:int64->int64->int128) m_2 m_1) (62,64); + word_subword ((word_join:int64->int64->int128) m_3 m_2) (62,64); + word_subword ((word_join:int64->int64->int128) m_4 m_3) (62,64); + word_subword ((word_join:int64->int64->int128) m_5 m_4) (62,64); + word_subword ((word_join:int64->int64->int128) m_6 m_5) (62,64); + word_subword ((word_join:int64->int64->int128) m_7 m_6) (62,64); + word_subword ((word_join:int64->int64->int128) m_8 m_7) (62,64)]` THEN + SUBGOAL_THEN `4 * m = m'` ASSUME_TAC THENL + [SUBGOAL_THEN `m DIV 2 EXP 512 < 2 EXP 62` MP_TAC THENL + [UNDISCH_TAC `m < 2 * p_521` THEN REWRITE_TAC[p_521] THEN ARITH_TAC; + EXPAND_TAC "m" THEN + CONV_TAC(ONCE_DEPTH_CONV BIGNUM_OF_WORDLIST_DIV_CONV) THEN + REWRITE_TAC[GSYM UPPER_BITS_ZERO]] THEN + EXPAND_TAC "m'" THEN POP_ASSUM_LIST(K ALL_TAC) THEN + DISCH_THEN(fun th -> MP_TAC(SPEC `62` th) THEN MP_TAC(SPEC `63` th)) THEN + CONV_TAC NUM_REDUCE_CONV THEN DISCH_TAC THEN DISCH_TAC THEN + REWRITE_TAC[bignum_of_wordlist; REAL_OF_NUM_CLAUSES] THEN + REWRITE_TAC[val_def; DIMINDEX_64; bignum_of_wordlist] THEN + REWRITE_TAC[ARITH_RULE `i < 64 <=> 0 <= i /\ i <= 63`] THEN + REWRITE_TAC[GSYM IN_NUMSEG; IN_GSPEC] THEN + REWRITE_TAC[BIT_WORD_SUBWORD; BIT_WORD_JOIN; BIT_WORD_USHR; + BIT_WORD_SHL; DIMINDEX_64; DIMINDEX_128] THEN + CONV_TAC NUM_REDUCE_CONV THEN + CONV_TAC(ONCE_DEPTH_CONV EXPAND_NSUM_CONV) THEN + CONV_TAC NUM_REDUCE_CONV THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC WORD_REDUCE_CONV THEN REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC NUM_RING; + ALL_TAC] THEN + + SUBGOAL_THEN + `(&4 * &m - &n) rem &p_521 = + (&4 * &m + (&p_521 - &n)) rem &p_521` + SUBST1_TAC THENL + [REWRITE_TAC[INT_REM_EQ] THEN CONV_TAC INTEGER_RULE; + ASM_SIMP_TAC[INT_OF_NUM_CLAUSES; INT_OF_NUM_SUB; INT_OF_NUM_REM]] THEN + + (*** The basic multiply-add block = ca, then forget the components ***) + + ABBREV_TAC `ca:num = m' + n'` THEN + SUBGOAL_THEN `ca < 2 EXP 527` ASSUME_TAC THENL + [MAP_EVERY EXPAND_TAC ["ca"; "m'"; "n'"] THEN + UNDISCH_TAC `m < 2 * p_521` THEN + REWRITE_TAC[p_521] THEN ARITH_TAC; + ALL_TAC] THEN + + X86_ACCSTEPS_TAC P521_JDOUBLE_EXEC + [23;26;29;32;35;38;41;44;45] (1--45) THEN + SUBGOAL_THEN + `bignum_of_wordlist + [sum_s23; sum_s26; sum_s29; sum_s32; + sum_s35; sum_s38; sum_s41; sum_s44; sum_s45] = ca` + ASSUME_TAC THENL + [REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`576`; `&0:real`] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN CONJ_TAC THENL + [UNDISCH_TAC `ca < 2 EXP 527` THEN REWRITE_TAC[REAL_OF_NUM_CLAUSES] THEN + ARITH_TAC; + REWRITE_TAC[INTEGER_CLOSED] THEN EXPAND_TAC "ca"] THEN + UNDISCH_THEN `p_521 - n = n'` (K ALL_TAC) THEN + UNDISCH_THEN `4 * m = m'` (K ALL_TAC) THEN + MAP_EVERY EXPAND_TAC ["m'"; "n'"] THEN + REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + REWRITE_TAC[REAL_VAL_WORD_NOT; DIMINDEX_64] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC) THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o check (free_in `m:num` o concl))) THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o check (free_in `n:num` o concl))) THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o check (free_in `n':num` o concl)))] THEN + + (*** Breaking the problem down to (h + l) MOD p_521 ***) + + SUBGOAL_THEN `ca MOD p_521 = (ca DIV 2 EXP 521 + ca MOD 2 EXP 521) MOD p_521` + SUBST1_TAC THENL + [GEN_REWRITE_TAC (LAND_CONV o LAND_CONV) + [ARITH_RULE `ca = 2 EXP 521 * ca DIV 2 EXP 521 + ca MOD 2 EXP 521`] THEN + REWRITE_TAC[GSYM CONG] THEN MATCH_MP_TAC(NUMBER_RULE + `(e == 1) (mod p) ==> (e * h + l == h + l) (mod p)`) THEN + REWRITE_TAC[p_521; CONG] THEN ARITH_TAC; + ALL_TAC] THEN + SUBGOAL_THEN `ca DIV 2 EXP 521 < 2 EXP 64 /\ ca MOD 2 EXP 521 < 2 EXP 521` + STRIP_ASSUME_TAC THENL + [REWRITE_TAC[MOD_LT_EQ] THEN UNDISCH_TAC `ca < 2 EXP 527` THEN ARITH_TAC; + ALL_TAC] THEN + + (*** Splitting up and stuffing 1 bits into the low part ***) + + X86_STEPS_TAC P521_JDOUBLE_EXEC (46--55) THEN + RULE_ASSUM_TAC(REWRITE_RULE[GSYM WORD_AND_ASSOC; DIMINDEX_64]) THEN + MAP_EVERY ABBREV_TAC + [`h:int64 = word_ushr sum_s45 9`; + `d:int64 = word_or sum_s45 (word 18446744073709551104)`; + `dd:int64 = word_and sum_s26 (word_and sum_s29 (word_and sum_s32 + (word_and sum_s35 (word_and sum_s38 (word_and sum_s41 sum_s44)))))`] THEN + + (*** The comparison in its direct condensed form ***) + + X86_ACCSTEPS_TAC P521_JDOUBLE_EXEC [57;59;61] (56--61) THEN + + SUBGOAL_THEN + `&(val (word_add h (word 1):int64)):real = &(val h) + &1` + SUBST_ALL_TAC THENL + [REWRITE_TAC[REAL_OF_NUM_CLAUSES; VAL_WORD_ADD_CASES] THEN + REWRITE_TAC[DIMINDEX_64; VAL_WORD_1] THEN + MATCH_MP_TAC(MESON[] `p ==> (if p then x else y) = x`) THEN + SUBST1_TAC(SYM(ASSUME `word_ushr sum_s45 9 = (h:int64)`)) THEN + CONV_TAC NUM_REDUCE_CONV THEN BOUNDER_TAC[]; + ALL_TAC] THEN + SUBGOAL_THEN + `carry_s61 <=> + 2 EXP 192 <= + 2 EXP 128 * val(d:int64) + 2 EXP 64 * val(dd:int64) + + val(h:int64) + val(sum_s23:int64) + 1` + (ASSUME_TAC o SYM) THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LE THEN EXISTS_TAC `192` THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Finish the simulation before completing the mathematics ***) + + X86_ACCSTEPS_TAC P521_JDOUBLE_EXEC + [62;64;66;68;70;72;74;76;78] (62--80) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(LAND_CONV BIGNUM_LEXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + DISCARD_STATE_TAC "s80" THEN + + (*** Evaluate d and un-condense the inequality ***) + + SUBGOAL_THEN + `val(d:int64) = 2 EXP 9 * (2 EXP 55 - 1) + val(sum_s45:int64) MOD 2 EXP 9` + SUBST_ALL_TAC THENL + [EXPAND_TAC "d" THEN ONCE_REWRITE_TAC[WORD_BITWISE_RULE + `word_or a b = word_or b (word_and a (word_not b))`] THEN + SIMP_TAC[VAL_WORD_OR_DISJOINT; WORD_BITWISE_RULE + `word_and x (word_and y (word_not x)) = word 0`] THEN + REWRITE_TAC[GSYM VAL_WORD_AND_MASK_WORD] THEN + CONV_TAC NUM_REDUCE_CONV THEN CONV_TAC WORD_REDUCE_CONV; + ALL_TAC] THEN + + SUBGOAL_THEN + `2 EXP 512 * val(sum_s45:int64) MOD 2 EXP 9 + + bignum_of_wordlist + [sum_s23; sum_s26; sum_s29; sum_s32; sum_s35; sum_s38; sum_s41; sum_s44] = + ca MOD 2 EXP 521` + (LABEL_TAC "*") THENL + [CONV_TAC SYM_CONV THEN EXPAND_TAC "ca" THEN + REWRITE_TAC[BIGNUM_OF_WORDLIST_SPLIT_RULE(8,1)] THEN + REWRITE_TAC[ARITH_RULE `2 EXP 521 = 2 EXP 512 * 2 EXP 9`] THEN + REWRITE_TAC[SYM(NUM_REDUCE_CONV `64 * 8`)] THEN + SIMP_TAC[LENGTH; ARITH_LT; ARITH_LE; MOD_MULT_MOD; ADD_CLAUSES; + ARITH_SUC; BIGNUM_OF_WORDLIST_BOUND; MOD_LT; DIV_LT; + MOD_MULT_ADD; DIV_MULT_ADD; EXP_EQ_0; ARITH_EQ] THEN + REWRITE_TAC[BIGNUM_OF_WORDLIST_SING] THEN ARITH_TAC; + ALL_TAC] THEN + + SUBGOAL_THEN + `2 EXP 521 <= ca MOD 2 EXP 521 + val(h:int64) + 1 <=> carry_s61` + MP_TAC THENL + [REMOVE_THEN "*" (SUBST1_TAC o SYM) THEN EXPAND_TAC "carry_s61" THEN + ONCE_REWRITE_TAC[bignum_of_wordlist] THEN + MATCH_MP_TAC(TAUT + `!p q. ((p ==> ~r) /\ (q ==> ~s)) /\ (p <=> q) /\ (~p /\ ~q ==> (r <=> s)) + ==> (r <=> s)`) THEN + MAP_EVERY EXISTS_TAC + [`bignum_of_wordlist + [sum_s26; sum_s29; sum_s32; sum_s35; sum_s38; sum_s41; sum_s44] < + 2 EXP (64 * 7) - 1`; + `val(dd:int64) < 2 EXP 64 - 1`] THEN + CONJ_TAC THENL + [CONJ_TAC THEN MATCH_MP_TAC(ARITH_RULE + `2 EXP 64 * b + d < 2 EXP 64 * (a + 1) + c ==> a < b ==> ~(c <= d)`) THEN + MP_TAC(SPEC `h:int64` VAL_BOUND_64) THEN + MP_TAC(SPEC `sum_s23:int64` VAL_BOUND_64) THEN ARITH_TAC; + SIMP_TAC[BIGNUM_OF_WORDLIST_LT_MAX; LENGTH; ARITH_EQ; ARITH_SUC]] THEN + REWRITE_TAC[GSYM NOT_ALL] THEN MP_TAC(ISPEC `dd:int64` VAL_EQ_MAX) THEN + SIMP_TAC[VAL_BOUND_64; DIMINDEX_64; ARITH_RULE + `a < n ==> (a < n - 1 <=> ~(a = n - 1))`] THEN + DISCH_THEN SUBST1_TAC THEN EXPAND_TAC "dd" THEN + REWRITE_TAC[WORD_NOT_AND; ALL; WORD_OR_EQ_0] THEN + REWRITE_TAC[WORD_RULE `word_not d = e <=> d = word_not e`] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN SUBST1_TAC) THEN + REWRITE_TAC[bignum_of_wordlist] THEN CONV_TAC WORD_REDUCE_CONV THEN + MP_TAC(ARITH_RULE `val(sum_s45:int64) MOD 2 EXP 9 = 511 \/ + val(sum_s45:int64) MOD 2 EXP 9 < 511`) THEN + MP_TAC(SPEC `h:int64` VAL_BOUND_64) THEN + MP_TAC(SPEC `sum_s23:int64` VAL_BOUND_64) THEN ARITH_TAC; + FIRST_X_ASSUM(K ALL_TAC o check (is_iff o concl))] THEN + + (*** Also evaluate h ***) + + SUBGOAL_THEN `val(h:int64) = ca DIV 2 EXP 521` SUBST_ALL_TAC THENL + [EXPAND_TAC "h" THEN REWRITE_TAC[VAL_WORD_USHR] THEN + EXPAND_TAC "ca" THEN + CONV_TAC(ONCE_DEPTH_CONV BIGNUM_OF_WORDLIST_DIV_CONV) THEN + REWRITE_TAC[]; + ALL_TAC] THEN + + (*** Now complete the mathematics ***) + + SUBGOAL_THEN + `2 EXP 521 <= ca MOD 2 EXP 521 + ca DIV 2 EXP 521 + 1 <=> + p_521 <= ca DIV 2 EXP 521 + ca MOD 2 EXP 521` + SUBST1_TAC THENL [REWRITE_TAC[p_521] THEN ARITH_TAC; DISCH_TAC] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC EQUAL_FROM_CONGRUENT_MOD_MOD THEN + MAP_EVERY EXISTS_TAC + [`521`; + `if ca DIV 2 EXP 521 + ca MOD 2 EXP 521 < p_521 + then &(ca DIV 2 EXP 521 + ca MOD 2 EXP 521) + else &(ca DIV 2 EXP 521 + ca MOD 2 EXP 521) - &p_521`] THEN + REPEAT CONJ_TAC THENL + [BOUNDER_TAC[]; + REWRITE_TAC[p_521] THEN ARITH_TAC; + REWRITE_TAC[p_521] THEN ARITH_TAC; + ALL_TAC; + W(MP_TAC o PART_MATCH (lhand o rand) MOD_CASES o rand o lhand o snd) THEN + ANTS_TAC THENL + [UNDISCH_TAC `ca < 2 EXP 527` THEN REWRITE_TAC[p_521] THEN ARITH_TAC; + DISCH_THEN SUBST1_TAC] THEN + ONCE_REWRITE_TAC[COND_RAND] THEN + SIMP_TAC[GSYM NOT_LE; COND_SWAP; GSYM REAL_OF_NUM_SUB; COND_ID]] THEN + ASM_REWRITE_TAC[GSYM NOT_LE; COND_SWAP] THEN + REMOVE_THEN "*" (SUBST1_TAC o SYM) THEN + REWRITE_TAC[SYM(NUM_REDUCE_CONV `2 EXP 9 - 1`)] THEN + REWRITE_TAC[VAL_WORD_AND_MASK_WORD; bignum_of_wordlist] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; REAL_OF_NUM_MOD; p_521] THEN + CONV_TAC NUM_REDUCE_CONV THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Instances of cmsub38 (there is only one). *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_CMSUB38_P521_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE p521_jdouble_mc) 90 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 9)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 9)) t = n + ==> nonoverlapping (word pc,0x3ded) (word_add (read p3 t) (word n3),72) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST p521_jdouble_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 9)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 9)) s = + n) + (\s. read RIP s = pcout /\ + (m < 2 * p_521 /\ n <= p_521 + ==> &(read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 9)) s) = (&3 * &m - &8 * &n) rem &p_521)) + (MAYCHANGE [RIP; RAX; RBX; RCX; RDX; R8; R9; + R10; R11; R12; R13; R14; R15] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 9)] ,, + MAYCHANGE SOME_FLAGS)` + + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + (*** Globalize the bound assumption for simplicity ***) + + ASM_CASES_TAC `m < 2 * p_521 /\ n <= p_521` THENL + [ASM_REWRITE_TAC[] THEN FIRST_X_ASSUM(CONJUNCTS_THEN ASSUME_TAC); + X86_SIM_TAC P521_JDOUBLE_EXEC (1--90)] THEN + + (*** Digitize and introduce the shifted and flipped version of n ***) + + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "m_" o lhand o concl) THEN + ABBREV_TAC + `n' = bignum_of_wordlist + [word_shl (word_not n_0) 3; + word_subword ((word_join:int64->int64->int128) + (word_not n_1) (word_not n_0)) (61,64); + word_subword ((word_join:int64->int64->int128) + (word_not n_2) (word_not n_1)) (61,64); + word_subword ((word_join:int64->int64->int128) + (word_not n_3) (word_not n_2)) (61,64); + word_subword ((word_join:int64->int64->int128) + (word_not n_4) (word_not n_3)) (61,64); + word_subword ((word_join:int64->int64->int128) + (word_not n_5) (word_not n_4)) (61,64); + word_subword ((word_join:int64->int64->int128) + (word_not n_6) (word_not n_5)) (61,64); + word_subword ((word_join:int64->int64->int128) + (word_not n_7) (word_not n_6)) (61,64); + word_subword ((word_join:int64->int64->int128) + (word_xor n_8 (word 0x1FF)) (word_not n_7)) (61,64)]` THEN + SUBGOAL_THEN `8 * (p_521 - n) = n'` ASSUME_TAC THENL + [MATCH_MP_TAC(ARITH_RULE `8 * n + m = 8 * p ==> 8 * (p - n) = m`) THEN + SUBGOAL_THEN `n DIV 2 EXP 512 < 2 EXP 9` MP_TAC THENL + [UNDISCH_TAC `n <= p_521` THEN REWRITE_TAC[p_521] THEN ARITH_TAC; + EXPAND_TAC "n" THEN + CONV_TAC(ONCE_DEPTH_CONV BIGNUM_OF_WORDLIST_DIV_CONV) THEN + REWRITE_TAC[GSYM UPPER_BITS_ZERO]] THEN + EXPAND_TAC "n'" THEN POP_ASSUM_LIST(K ALL_TAC) THEN + DISCH_THEN(MP_TAC o MATCH_MP (MESON[] + `(!i. P i) ==> (!i. i < 64 ==> P i)`)) THEN + CONV_TAC(LAND_CONV EXPAND_CASES_CONV) THEN + CONV_TAC NUM_REDUCE_CONV THEN STRIP_TAC THEN + REWRITE_TAC[bignum_of_wordlist; REAL_OF_NUM_CLAUSES] THEN + REWRITE_TAC[val_def; DIMINDEX_64; bignum_of_wordlist] THEN + REWRITE_TAC[ARITH_RULE `i < 64 <=> 0 <= i /\ i <= 63`] THEN + REWRITE_TAC[GSYM IN_NUMSEG; IN_GSPEC] THEN + REWRITE_TAC[BIT_WORD_SUBWORD; BIT_WORD_JOIN; BIT_WORD_SHL; + BIT_WORD_NOT; BIT_WORD_XOR; DIMINDEX_64; DIMINDEX_128] THEN + CONV_TAC NUM_REDUCE_CONV THEN + CONV_TAC(ONCE_DEPTH_CONV EXPAND_NSUM_CONV) THEN + CONV_TAC NUM_REDUCE_CONV THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC WORD_REDUCE_CONV THEN REWRITE_TAC[BITVAL_CLAUSES] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; REAL_BITVAL_NOT] THEN + REWRITE_TAC[p_521] THEN CONV_TAC REAL_RING; + ALL_TAC] THEN + + SUBGOAL_THEN + `(&3 * &m - &8 * &n) rem &p_521 = + (&3 * &m + &8 * (&p_521 - &n)) rem &p_521` + SUBST1_TAC THENL + [REWRITE_TAC[INT_REM_EQ] THEN CONV_TAC INTEGER_RULE; + ASM_SIMP_TAC[INT_OF_NUM_CLAUSES; INT_OF_NUM_SUB; INT_OF_NUM_REM]] THEN + + (*** The basic multiply-add block = ca, then forget the components ***) + + ABBREV_TAC `ca = 3 * m + n'` THEN + SUBGOAL_THEN `ca < 2 EXP 527` ASSUME_TAC THENL + [MAP_EVERY EXPAND_TAC ["ca"; "n'"] THEN UNDISCH_TAC `m < 2 * p_521` THEN + REWRITE_TAC[p_521] THEN ARITH_TAC; + ALL_TAC] THEN + + X86_ACCSTEPS_TAC P521_JDOUBLE_EXEC (30--55) (1--55) THEN + SUBGOAL_THEN + `bignum_of_wordlist + [sum_s31; sum_s34; sum_s37; sum_s40; + sum_s43; sum_s46; sum_s49; sum_s52; sum_s55] = ca` + ASSUME_TAC THENL + [REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`576`; `&0:real`] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN CONJ_TAC THENL + [UNDISCH_TAC `ca < 2 EXP 527` THEN REWRITE_TAC[REAL_OF_NUM_CLAUSES] THEN + ARITH_TAC; + REWRITE_TAC[INTEGER_CLOSED] THEN EXPAND_TAC "ca"] THEN + UNDISCH_THEN `8 * (p_521 - n) = n'` (K ALL_TAC) THEN + MAP_EVERY EXPAND_TAC ["m"; "n'"] THEN + REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + REWRITE_TAC[REAL_VAL_WORD_NOT; DIMINDEX_64] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC) THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o check (free_in `m:num` o concl))) THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o check (free_in `n:num` o concl))) THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o check (free_in `n':num` o concl)))] THEN + + (*** Breaking the problem down to (h + l) MOD p_521 ***) + + SUBGOAL_THEN `ca MOD p_521 = (ca DIV 2 EXP 521 + ca MOD 2 EXP 521) MOD p_521` + SUBST1_TAC THENL + [GEN_REWRITE_TAC (LAND_CONV o LAND_CONV) + [ARITH_RULE `ca = 2 EXP 521 * ca DIV 2 EXP 521 + ca MOD 2 EXP 521`] THEN + REWRITE_TAC[GSYM CONG] THEN MATCH_MP_TAC(NUMBER_RULE + `(e == 1) (mod p) ==> (e * h + l == h + l) (mod p)`) THEN + REWRITE_TAC[p_521; CONG] THEN ARITH_TAC; + ALL_TAC] THEN + SUBGOAL_THEN `ca DIV 2 EXP 521 < 2 EXP 64 /\ ca MOD 2 EXP 521 < 2 EXP 521` + STRIP_ASSUME_TAC THENL + [REWRITE_TAC[MOD_LT_EQ] THEN UNDISCH_TAC `ca < 2 EXP 527` THEN ARITH_TAC; + ALL_TAC] THEN + + (*** Splitting up and stuffing 1 bits into the low part ***) + + X86_STEPS_TAC P521_JDOUBLE_EXEC (56--65) THEN + RULE_ASSUM_TAC(REWRITE_RULE[GSYM WORD_AND_ASSOC; DIMINDEX_64]) THEN + MAP_EVERY ABBREV_TAC + [`h:int64 = word_ushr sum_s55 9`; + `d:int64 = word_or sum_s55 (word 18446744073709551104)`; + `dd:int64 = word_and sum_s34 (word_and sum_s37 (word_and sum_s40 + (word_and sum_s43 (word_and sum_s46 (word_and sum_s49 sum_s52)))))`] THEN + + (*** The comparison in its direct condensed form ***) + + X86_ACCSTEPS_TAC P521_JDOUBLE_EXEC [67;69;71] (66--71) THEN + + SUBGOAL_THEN + `&(val (word_add h (word 1):int64)):real = &(val h) + &1` + SUBST_ALL_TAC THENL + [REWRITE_TAC[REAL_OF_NUM_CLAUSES; VAL_WORD_ADD_CASES] THEN + REWRITE_TAC[DIMINDEX_64; VAL_WORD_1] THEN + MATCH_MP_TAC(MESON[] `p ==> (if p then x else y) = x`) THEN + SUBST1_TAC(SYM(ASSUME `word_ushr sum_s55 9 = (h:int64)`)) THEN + CONV_TAC NUM_REDUCE_CONV THEN BOUNDER_TAC[]; + ALL_TAC] THEN + SUBGOAL_THEN + `carry_s71 <=> + 2 EXP 192 <= + 2 EXP 128 * val(d:int64) + 2 EXP 64 * val(dd:int64) + + val(h:int64) + val(sum_s31:int64) + 1` + (ASSUME_TAC o SYM) THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LE THEN EXISTS_TAC `192` THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC)] THEN + + (*** Finish the simulation before completing the mathematics ***) + + X86_ACCSTEPS_TAC P521_JDOUBLE_EXEC + [72;74;76;78;80;82;84;86;88] (72--90) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(LAND_CONV BIGNUM_LEXPAND_CONV) THEN ASM_REWRITE_TAC[] THEN + DISCARD_STATE_TAC "s90" THEN + + (*** Evaluate d and un-condense the inequality ***) + + SUBGOAL_THEN + `val(d:int64) = 2 EXP 9 * (2 EXP 55 - 1) + val(sum_s55:int64) MOD 2 EXP 9` + SUBST_ALL_TAC THENL + [EXPAND_TAC "d" THEN ONCE_REWRITE_TAC[WORD_BITWISE_RULE + `word_or a b = word_or b (word_and a (word_not b))`] THEN + SIMP_TAC[VAL_WORD_OR_DISJOINT; WORD_BITWISE_RULE + `word_and x (word_and y (word_not x)) = word 0`] THEN + REWRITE_TAC[GSYM VAL_WORD_AND_MASK_WORD] THEN + CONV_TAC NUM_REDUCE_CONV THEN CONV_TAC WORD_REDUCE_CONV; + ALL_TAC] THEN + + SUBGOAL_THEN + `2 EXP 512 * val(sum_s55:int64) MOD 2 EXP 9 + + bignum_of_wordlist + [sum_s31; sum_s34; sum_s37; sum_s40; sum_s43; sum_s46; sum_s49; sum_s52] = + ca MOD 2 EXP 521` + (LABEL_TAC "*") THENL + [CONV_TAC SYM_CONV THEN EXPAND_TAC "ca" THEN + REWRITE_TAC[BIGNUM_OF_WORDLIST_SPLIT_RULE(8,1)] THEN + REWRITE_TAC[ARITH_RULE `2 EXP 521 = 2 EXP 512 * 2 EXP 9`] THEN + REWRITE_TAC[SYM(NUM_REDUCE_CONV `64 * 8`)] THEN + SIMP_TAC[LENGTH; ARITH_LT; ARITH_LE; MOD_MULT_MOD; ADD_CLAUSES; + ARITH_SUC; BIGNUM_OF_WORDLIST_BOUND; MOD_LT; DIV_LT; + MOD_MULT_ADD; DIV_MULT_ADD; EXP_EQ_0; ARITH_EQ] THEN + REWRITE_TAC[BIGNUM_OF_WORDLIST_SING] THEN ARITH_TAC; + ALL_TAC] THEN + + SUBGOAL_THEN + `2 EXP 521 <= ca MOD 2 EXP 521 + val(h:int64) + 1 <=> carry_s71` + MP_TAC THENL + [REMOVE_THEN "*" (SUBST1_TAC o SYM) THEN EXPAND_TAC "carry_s71" THEN + ONCE_REWRITE_TAC[bignum_of_wordlist] THEN + MATCH_MP_TAC(TAUT + `!p q. ((p ==> ~r) /\ (q ==> ~s)) /\ (p <=> q) /\ (~p /\ ~q ==> (r <=> s)) + ==> (r <=> s)`) THEN + MAP_EVERY EXISTS_TAC + [`bignum_of_wordlist + [sum_s34; sum_s37; sum_s40; sum_s43; sum_s46; sum_s49; sum_s52] < + 2 EXP (64 * 7) - 1`; + `val(dd:int64) < 2 EXP 64 - 1`] THEN + CONJ_TAC THENL + [CONJ_TAC THEN MATCH_MP_TAC(ARITH_RULE + `2 EXP 64 * b + d < 2 EXP 64 * (a + 1) + c ==> a < b ==> ~(c <= d)`) THEN + MP_TAC(SPEC `h:int64` VAL_BOUND_64) THEN + MP_TAC(SPEC `sum_s31:int64` VAL_BOUND_64) THEN ARITH_TAC; + SIMP_TAC[BIGNUM_OF_WORDLIST_LT_MAX; LENGTH; ARITH_EQ; ARITH_SUC]] THEN + REWRITE_TAC[GSYM NOT_ALL] THEN MP_TAC(ISPEC `dd:int64` VAL_EQ_MAX) THEN + SIMP_TAC[VAL_BOUND_64; DIMINDEX_64; ARITH_RULE + `a < n ==> (a < n - 1 <=> ~(a = n - 1))`] THEN + DISCH_THEN SUBST1_TAC THEN EXPAND_TAC "dd" THEN + REWRITE_TAC[WORD_NOT_AND; ALL; WORD_OR_EQ_0] THEN + REWRITE_TAC[WORD_RULE `word_not d = e <=> d = word_not e`] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN SUBST1_TAC) THEN + REWRITE_TAC[bignum_of_wordlist] THEN CONV_TAC WORD_REDUCE_CONV THEN + MP_TAC(ARITH_RULE `val(sum_s55:int64) MOD 2 EXP 9 = 511 \/ + val(sum_s55:int64) MOD 2 EXP 9 < 511`) THEN + MP_TAC(SPEC `h:int64` VAL_BOUND_64) THEN + MP_TAC(SPEC `sum_s31:int64` VAL_BOUND_64) THEN ARITH_TAC; + FIRST_X_ASSUM(K ALL_TAC o check (is_iff o concl))] THEN + + (*** Also evaluate h ***) + + SUBGOAL_THEN `val(h:int64) = ca DIV 2 EXP 521` SUBST_ALL_TAC THENL + [EXPAND_TAC "h" THEN REWRITE_TAC[VAL_WORD_USHR] THEN + EXPAND_TAC "ca" THEN + CONV_TAC(ONCE_DEPTH_CONV BIGNUM_OF_WORDLIST_DIV_CONV) THEN + REWRITE_TAC[]; + ALL_TAC] THEN + + (*** Now complete the mathematics ***) + + SUBGOAL_THEN + `2 EXP 521 <= ca MOD 2 EXP 521 + ca DIV 2 EXP 521 + 1 <=> + p_521 <= ca DIV 2 EXP 521 + ca MOD 2 EXP 521` + SUBST1_TAC THENL [REWRITE_TAC[p_521] THEN ARITH_TAC; DISCH_TAC] THEN + CONV_TAC SYM_CONV THEN MATCH_MP_TAC EQUAL_FROM_CONGRUENT_MOD_MOD THEN + MAP_EVERY EXISTS_TAC + [`521`; + `if ca DIV 2 EXP 521 + ca MOD 2 EXP 521 < p_521 + then &(ca DIV 2 EXP 521 + ca MOD 2 EXP 521) + else &(ca DIV 2 EXP 521 + ca MOD 2 EXP 521) - &p_521`] THEN + REPEAT CONJ_TAC THENL + [BOUNDER_TAC[]; + REWRITE_TAC[p_521] THEN ARITH_TAC; + REWRITE_TAC[p_521] THEN ARITH_TAC; + ALL_TAC; + W(MP_TAC o PART_MATCH (lhand o rand) MOD_CASES o rand o lhand o snd) THEN + ANTS_TAC THENL + [UNDISCH_TAC `ca < 2 EXP 527` THEN REWRITE_TAC[p_521] THEN ARITH_TAC; + DISCH_THEN SUBST1_TAC] THEN + ONCE_REWRITE_TAC[COND_RAND] THEN + SIMP_TAC[GSYM NOT_LE; COND_SWAP; GSYM REAL_OF_NUM_SUB; COND_ID]] THEN + ASM_REWRITE_TAC[GSYM NOT_LE; COND_SWAP] THEN + REMOVE_THEN "*" (SUBST1_TAC o SYM) THEN + REWRITE_TAC[SYM(NUM_REDUCE_CONV `2 EXP 9 - 1`)] THEN + REWRITE_TAC[VAL_WORD_AND_MASK_WORD; bignum_of_wordlist] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; REAL_OF_NUM_MOD; p_521] THEN + CONV_TAC NUM_REDUCE_CONV THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Overall point operation proof. *) +(* ------------------------------------------------------------------------- *) + +let P521_JDOUBLE_CORRECT = time prove + (`!p3 p1 t1 pc stackpointer. + ALLPAIRS nonoverlapping + [(p3,216); (stackpointer,568)] + [(word pc,0x3ded); (p1,216)] /\ + nonoverlapping (p3,216) (stackpointer,568) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST p521_jdouble_mc) /\ + read RIP s = word(pc + 0x10) /\ + read RSP s = stackpointer /\ + C_ARGUMENTS [p3; p1] s /\ + bignum_triple_from_memory (p1,9) s = t1) + (\s. read RIP s = word (pc + 0x3ddc) /\ + (!x y z. + ~(z = &0) /\ + t1 = tripled nistp521_encode (x,y,z) + ==> bignum_triple_from_memory(p3,9) s = + tripled nistp521_encode + (jacobian_add nistp521 (x,y,z) (x,y,z)))) + (MAYCHANGE [RIP; RAX; RBX; RCX; RDX; R8; R9; + R10; R11; R12; R13; R14; R15] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,216); + memory :> bytes(stackpointer,568)])`, + REWRITE_TAC[FORALL_PAIR_THM] THEN + MAP_EVERY X_GEN_TAC + [`p3:int64`; `p1:int64`; `x:num`; `y:num`; `z:num`; + `pc:num`; `stackpointer:int64`] THEN + REWRITE_TAC[ALLPAIRS; ALL; NONOVERLAPPING_CLAUSES] THEN STRIP_TAC THEN + REWRITE_TAC[C_ARGUMENTS; SOME_FLAGS; PAIR_EQ; bignum_triple_from_memory] THEN + CONV_TAC(ONCE_DEPTH_CONV NUM_MULT_CONV) THEN + CONV_TAC(ONCE_DEPTH_CONV NORMALIZE_RELATIVE_ADDRESS_CONV) THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + + LOCAL_SQR_P521_TAC 0 ["z2";"z_1"] THEN + LOCAL_SQR_P521_TAC 0 ["y2";"y_1"] THEN + LOCAL_ADD_P521_TAC 0 ["t1";"x_1";"z2"] THEN + LOCAL_SUB_P521_TAC 0 ["t2";"x_1";"z2"] THEN + LOCAL_MUL_P521_TAC 0 ["x2p";"t1";"t2"] THEN + LOCAL_ADD_P521_TAC 0 ["t1";"y_1";"z_1"] THEN + LOCAL_SQR_P521_TAC 0 ["x4p";"x2p"] THEN + LOCAL_WEAKMUL_P521_TAC 0 ["xy2";"x_1";"y2"] THEN + LOCAL_SQR_P521_TAC 0 ["t2";"t1"] THEN + LOCAL_CMSUBC9_P521_TAC 0 ["d";"xy2";"x4p"] THEN + LOCAL_SUB_P521_TAC 0 ["t1";"t2";"z2"] THEN + LOCAL_SQR_P521_TAC 0 ["y4";"y2"] THEN + LOCAL_SUB_P521_TAC 0 ["z_3";"t1";"y2"] THEN + LOCAL_WEAKMUL_P521_TAC 0 ["dx2";"d";"x2p"] THEN + LOCAL_CMSUB41_P521_TAC 0 ["x_3";"xy2";"d"] THEN + LOCAL_CMSUB38_P521_TAC 0 ["y_3";"dx2";"y4"] THEN + + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + DISCARD_STATE_TAC "s16" THEN + DISCARD_MATCHING_ASSUMPTIONS [`nonoverlapping_modulo a b c`] THEN + MAP_EVERY X_GEN_TAC [`x':int`; `y':int`; `z':int`] THEN + DISCH_THEN(CONJUNCTS_THEN2 ASSUME_TAC MP_TAC) THEN + REWRITE_TAC[tripled; paired; nistp521_encode; PAIR_EQ; modular_encode] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN + (STRIP_ASSUME_TAC o MATCH_MP unilemma2)) THEN + + (*** Dispose of any range hypotheses ***) + + REPEAT(FIRST_X_ASSUM(MP_TAC o check (is_imp o concl))) THEN + REPEAT(ANTS_TAC THENL + [REWRITE_TAC[p_521] THEN RULE_ASSUM_TAC(REWRITE_RULE[p_521]) THEN + CONV_TAC NUM_REDUCE_CONV THEN ASM BOUNDER_TAC[]; + (DISCH_THEN(STRIP_ASSUME_TAC o MATCH_MP unilemma0) ORELSE + DISCH_THEN(STRIP_ASSUME_TAC o MATCH_MP unilemma1) ORELSE + STRIP_TAC)]) THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o GEN_REWRITE_RULE I [GSYM NOT_LE])) THEN + + (*** Manually push around a few moduli to avoid fuss later ***) + + SUBGOAL_THEN + `!a b x y p. (a * x - b * y) rem p = (a * x rem p - b * y rem p) rem p` + (fun th -> RULE_ASSUM_TAC(ONCE_REWRITE_RULE[th])) + THENL + [CONV_TAC INT_REM_DOWN_CONV THEN REPEAT GEN_TAC THEN REFL_TAC; + ALL_TAC] THEN + SUBGOAL_THEN + `!a x y p. (a * x - y) rem p = (a * x rem p - y) rem p` + (fun th -> RULE_ASSUM_TAC(ONCE_REWRITE_RULE[th])) + THENL + [CONV_TAC INT_REM_DOWN_CONV THEN REPEAT GEN_TAC THEN REFL_TAC; + ALL_TAC] THEN + SUBGOAL_THEN `(z * tmp) MOD p_521 = (z * tmp MOD p_521) MOD p_521` + SUBST_ALL_TAC THENL [CONV_TAC MOD_DOWN_CONV THEN REFL_TAC; ALL_TAC] THEN + + (*** Now do the algebra ***) + + RULE_ASSUM_TAC(REWRITE_RULE + [num_congruent; GSYM INT_OF_NUM_CLAUSES; GSYM INT_OF_NUM_REM]) THEN + RULE_ASSUM_TAC(REWRITE_RULE[GSYM INT_REM_EQ]) THEN + RULE_ASSUM_TAC(ONCE_REWRITE_RULE[GSYM INT_SUB_REM; GSYM INT_ADD_REM]) THEN + RULE_ASSUM_TAC(REWRITE_RULE[INT_POW_2]) THEN + ASM_REWRITE_TAC[tripled; jacobian_add; jacobian_eq; nistp521] THEN + ASM_REWRITE_TAC[GSYM nistp521] THEN + REWRITE_TAC[INTEGER_MOD_RING_CLAUSES] THEN + CONV_TAC INT_REDUCE_CONV THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN + CONV_TAC INT_REM_DOWN_CONV THEN + REWRITE_TAC[tripled; modular_encode] THEN + REWRITE_TAC[PAIR_EQ; GSYM INT_OF_NUM_EQ; nintlemma] THEN + CONV_TAC INT_REM_DOWN_CONV THEN + REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES; GSYM INT_OF_NUM_REM] THEN + ASM_REWRITE_TAC[] THEN CONV_TAC INT_REM_DOWN_CONV THEN + REPEAT CONJ_TAC THEN AP_THM_TAC THEN AP_TERM_TAC THEN + INT_ARITH_TAC);; + +let P521_JDOUBLE_SUBROUTINE_CORRECT = time prove + (`!p3 p1 t1 pc stackpointer returnaddress. + ALLPAIRS nonoverlapping + [(p3,216); (word_sub stackpointer (word 608),608)] + [(word pc,0x3ded); (p1,216)] /\ + nonoverlapping (p3,216) (word_sub stackpointer (word 608),616) + ==> ensures x86 + (\s. bytes_loaded s (word pc) p521_jdouble_mc /\ + read RIP s = word pc /\ + read RSP s = stackpointer /\ + read (memory :> bytes64 stackpointer) s = returnaddress /\ + C_ARGUMENTS [p3; p1] s /\ + bignum_triple_from_memory (p1,9) s = t1) + (\s. read RIP s = returnaddress /\ + read RSP s = word_add stackpointer (word 8) /\ + (!x y z. + ~(z = &0) /\ + t1 = tripled nistp521_encode (x,y,z) + ==> bignum_triple_from_memory(p3,9) s = + tripled nistp521_encode + (jacobian_add nistp521 (x,y,z) (x,y,z)))) + (MAYCHANGE [RIP; RSP; RAX; RCX; RDX; R8; R9; R10; R11] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,216); + memory :> bytes(word_sub stackpointer (word 608),608)])`, + X86_PROMOTE_RETURN_STACK_TAC p521_jdouble_mc P521_JDOUBLE_CORRECT + `[RBX; R12; R13; R14; R15]` 608);; + +(* ------------------------------------------------------------------------- *) +(* Correctness of Windows ABI version. *) +(* ------------------------------------------------------------------------- *) + +let windows_p521_jdouble_mc = define_from_elf "windows_p521_jdouble_mc" + "x86/p521/p521_jdouble.obj";; + +let WINDOWS_P521_JDOUBLE_SUBROUTINE_CORRECT = time prove + (`!p3 p1 t1 pc stackpointer returnaddress. + ALLPAIRS nonoverlapping + [(p3,216); (word_sub stackpointer (word 624),624)] + [(word pc,0x3df7); (p1,216)] /\ + nonoverlapping (p3,216) (word_sub stackpointer (word 624),632) + ==> ensures x86 + (\s. bytes_loaded s (word pc) windows_p521_jdouble_mc /\ + read RIP s = word pc /\ + read RSP s = stackpointer /\ + read (memory :> bytes64 stackpointer) s = returnaddress /\ + WINDOWS_C_ARGUMENTS [p3; p1] s /\ + bignum_triple_from_memory (p1,9) s = t1) + (\s. read RIP s = returnaddress /\ + read RSP s = word_add stackpointer (word 8) /\ + (!x y z. + ~(z = &0) /\ + t1 = tripled nistp521_encode (x,y,z) + ==> bignum_triple_from_memory(p3,9) s = + tripled nistp521_encode + (jacobian_add nistp521 (x,y,z) (x,y,z)))) + (MAYCHANGE [RIP; RSP; RAX; RCX; RDX; R8; R9; R10; R11] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,216); + memory :> bytes(word_sub stackpointer (word 624),624)])`, + WINDOWS_X86_WRAP_STACK_TAC + windows_p521_jdouble_mc p521_jdouble_mc + P521_JDOUBLE_CORRECT + `[RBX; R12; R13; R14; R15]` 608);; diff --git a/x86/proofs/p521_jmixadd.ml b/x86/proofs/p521_jmixadd.ml new file mode 100644 index 0000000000..2748893db5 --- /dev/null +++ b/x86/proofs/p521_jmixadd.ml @@ -0,0 +1,7171 @@ +(* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + *) + +(* ========================================================================= *) +(* Point mixed addition in Jacobian coordinates for NIST p521 curve. *) +(* ========================================================================= *) + +needs "x86/proofs/base.ml";; +needs "common/ecencoding.ml";; +needs "EC/jacobian.ml";; +needs "EC/nistp521.ml";; + +prioritize_int();; +prioritize_real();; +prioritize_num();; + +(**** print_literal_from_elf "x86/p521/p521_jmixadd.o";; + ****) + +let p521_jmixadd_mc = define_assert_from_elf + "p521_jmixadd_mc" "x86/p521/p521_jmixadd.o" +[ + 0x53; (* PUSH (% rbx) *) + 0x55; (* PUSH (% rbp) *) + 0x41; 0x54; (* PUSH (% r12) *) + 0x41; 0x55; (* PUSH (% r13) *) + 0x41; 0x56; (* PUSH (% r14) *) + 0x41; 0x57; (* PUSH (% r15) *) + 0x48; 0x81; 0xec; 0xf0; 0x01; 0x00; 0x00; + (* SUB (% rsp) (Imm32 (word 496)) *) + 0x48; 0x89; 0xd1; (* MOV (% rcx) (% rdx) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x96; 0x90; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,144))) *) + 0xc4; 0xe2; 0xb3; 0xf6; 0x86; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rax,% r9) (% rdx,Memop Quadword (%% (rsi,152))) *) + 0x4c; 0x89; 0x8c; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,440))) (% r9) *) + 0xc4; 0xe2; 0xab; 0xf6; 0x9e; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% r10) (% rdx,Memop Quadword (%% (rsi,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0x4c; 0x89; 0x94; 0x24; 0xc0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,448))) (% r10) *) + 0xc4; 0xe2; 0xa3; 0xf6; 0x86; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rax,% r11) (% rdx,Memop Quadword (%% (rsi,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% rbx) *) + 0xc4; 0xe2; 0x9b; 0xf6; 0x9e; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% r12) (% rdx,Memop Quadword (%% (rsi,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xc4; 0xe2; 0x93; 0xf6; 0x86; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rax,% r13) (% rdx,Memop Quadword (%% (rsi,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADCX (% r13) (% rbx) *) + 0xc4; 0xe2; 0x8b; 0xf6; 0x9e; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% r14) (% rdx,Memop Quadword (%% (rsi,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xc4; 0x62; 0x83; 0xf6; 0x86; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% r8,% r15) (% rdx,Memop Quadword (%% (rsi,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADCX (% r15) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc5; + (* ADCX (% r8) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x96; 0x98; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,152))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x4c; 0x89; 0x9c; 0x24; 0xc8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,456))) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4c; 0x89; 0xa4; 0x24; 0xd0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,464))) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x8e; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% r9,% rax) (% rdx,Memop Quadword (%% (rsi,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcd; + (* ADOX (% r9) (% rbp) *) + 0x48; 0x8b; 0x96; 0xb0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,176))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x96; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsi,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd5; + (* ADOX (% r10) (% rbp) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd5; + (* ADCX (% r10) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x96; 0xa0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,160))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0x4c; 0x89; 0xac; 0x24; 0xd8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,472))) (% r13) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x4c; 0x89; 0xb4; 0x24; 0xe0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,480))) (% r14) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0x48; 0x8b; 0x96; 0xc0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,192))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x9e; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsi,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdd; + (* ADOX (% r11) (% rbp) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xa6; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsi,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe5; + (* ADOX (% r12) (% rbp) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe5; + (* ADCX (% r12) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x96; 0xa8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,168))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0x4c; 0x89; 0xbc; 0x24; 0xe8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,488))) (% r15) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0x8b; 0x96; 0xc8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,200))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xae; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsi,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xed; + (* ADOX (% r13) (% rbp) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xb6; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsi,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf5; + (* ADOX (% r14) (% rbp) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf5; + (* ADCX (% r14) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x96; 0x90; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,144))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% rdx) *) + 0x48; 0x89; 0x84; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,432))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,440))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% rax) (% rbx) *) + 0x48; 0x89; 0x84; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,440))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0xc0; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,448))) *) + 0x48; 0x8b; 0x96; 0x98; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,152))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc2; + (* ADOX (% rax) (% rdx) *) + 0x48; 0x89; 0x84; 0x24; 0xc0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,448))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0xc8; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,456))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% rax) (% rbx) *) + 0x48; 0x89; 0x84; 0x24; 0xc8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,456))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0xd0; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,464))) *) + 0x48; 0x8b; 0x96; 0xa0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,160))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc2; + (* ADOX (% rax) (% rdx) *) + 0x48; 0x89; 0x84; 0x24; 0xd0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,464))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0xd8; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,472))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% rax) (% rbx) *) + 0x48; 0x89; 0x84; 0x24; 0xd8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,472))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0xe0; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,480))) *) + 0x48; 0x8b; 0x96; 0xa8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,168))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc2; + (* ADOX (% rax) (% rdx) *) + 0x48; 0x89; 0x84; 0x24; 0xe0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,480))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0xe8; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,488))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% rax) (% rbx) *) + 0x48; 0x89; 0x84; 0x24; 0xe8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,488))) (% rax) *) + 0x48; 0x8b; 0x96; 0xb0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,176))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% r8) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc2; + (* ADOX (% r8) (% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% r9) (% r9) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0x48; 0x8b; 0x96; 0xb8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,184))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xd2; + (* ADCX (% r10) (% r10) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd2; + (* ADOX (% r10) (% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% r11) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0x8b; 0x96; 0xc0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,192))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xe4; + (* ADCX (% r12) (% r12) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe2; + (* ADOX (% r12) (% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% r13) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0x8b; 0x96; 0xc8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,200))) *) + 0xc4; 0x62; 0xeb; 0xf6; 0xfa; + (* MULX4 (% r15,% rdx) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf6; + (* ADCX (% r14) (% r14) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf2; + (* ADOX (% r14) (% rdx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADCX (% r15) (% rbp) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADOX (% r15) (% rbp) *) + 0x48; 0x8b; 0x96; 0xd0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,208))) *) + 0x48; 0x89; 0xd5; (* MOV (% rbp) (% rdx) *) + 0x48; 0x0f; 0xaf; 0xed; (* IMUL (% rbp) (% rbp) *) + 0x48; 0x01; 0xd2; (* ADD (% rdx) (% rdx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% rbp) (% rbx) *) + 0x48; 0x83; 0xd5; 0x00; (* ADC (% rbp) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xc0; (* MOV (% rax) (% r8) *) + 0x48; 0x25; 0xff; 0x01; 0x00; 0x00; + (* AND (% rax) (Imm32 (word 511)) *) + 0x4d; 0x0f; 0xac; 0xc8; 0x09; + (* SHRD (% r8) (% r9) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xd1; 0x09; + (* SHRD (% r9) (% r10) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xda; 0x09; + (* SHRD (% r10) (% r11) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xe3; 0x09; + (* SHRD (% r11) (% r12) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xec; 0x09; + (* SHRD (% r12) (% r13) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xf5; 0x09; + (* SHRD (% r13) (% r14) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xfe; 0x09; + (* SHRD (% r14) (% r15) (Imm8 (word 9)) *) + 0x49; 0x0f; 0xac; 0xef; 0x09; + (* SHRD (% r15) (% rbp) (Imm8 (word 9)) *) + 0x48; 0xc1; 0xed; 0x09; (* SHR (% rbp) (Imm8 (word 9)) *) + 0x48; 0x01; 0xc5; (* ADD (% rbp) (% rax) *) + 0xf9; (* STCF *) + 0x4c; 0x13; 0x84; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* ADC (% r8) (Memop Quadword (%% (rsp,432))) *) + 0x4c; 0x13; 0x8c; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* ADC (% r9) (Memop Quadword (%% (rsp,440))) *) + 0x4c; 0x13; 0x94; 0x24; 0xc0; 0x01; 0x00; 0x00; + (* ADC (% r10) (Memop Quadword (%% (rsp,448))) *) + 0x4c; 0x13; 0x9c; 0x24; 0xc8; 0x01; 0x00; 0x00; + (* ADC (% r11) (Memop Quadword (%% (rsp,456))) *) + 0x4c; 0x13; 0xa4; 0x24; 0xd0; 0x01; 0x00; 0x00; + (* ADC (% r12) (Memop Quadword (%% (rsp,464))) *) + 0x4c; 0x13; 0xac; 0x24; 0xd8; 0x01; 0x00; 0x00; + (* ADC (% r13) (Memop Quadword (%% (rsp,472))) *) + 0x4c; 0x13; 0xb4; 0x24; 0xe0; 0x01; 0x00; 0x00; + (* ADC (% r14) (Memop Quadword (%% (rsp,480))) *) + 0x4c; 0x13; 0xbc; 0x24; 0xe8; 0x01; 0x00; 0x00; + (* ADC (% r15) (Memop Quadword (%% (rsp,488))) *) + 0x48; 0x81; 0xd5; 0x00; 0xfe; 0xff; 0xff; + (* ADC (% rbp) (Imm32 (word 4294966784)) *) + 0xf5; (* CMC *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x04; 0x24; (* MOV (Memop Quadword (%% (rsp,0))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x4c; 0x24; 0x08; + (* MOV (Memop Quadword (%% (rsp,8))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x54; 0x24; 0x10; + (* MOV (Memop Quadword (%% (rsp,16))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x5c; 0x24; 0x18; + (* MOV (Memop Quadword (%% (rsp,24))) (% r11) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x64; 0x24; 0x20; + (* MOV (Memop Quadword (%% (rsp,32))) (% r12) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x6c; 0x24; 0x28; + (* MOV (Memop Quadword (%% (rsp,40))) (% r13) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x74; 0x24; 0x30; + (* MOV (Memop Quadword (%% (rsp,48))) (% r14) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x7c; 0x24; 0x38; + (* MOV (Memop Quadword (%% (rsp,56))) (% r15) *) + 0x48; 0x83; 0xdd; 0x00; (* SBB (% rbp) (Imm8 (word 0)) *) + 0x48; 0x81; 0xe5; 0xff; 0x01; 0x00; 0x00; + (* AND (% rbp) (Imm32 (word 511)) *) + 0x48; 0x89; 0x6c; 0x24; 0x40; + (* MOV (Memop Quadword (%% (rsp,64))) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x51; 0x48; (* MOV (% rdx) (Memop Quadword (%% (rcx,72))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x8e; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsi,144))) *) + 0x4c; 0x89; 0x84; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,432))) (% r8) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x96; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsi,152))) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x9e; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsi,160))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xa6; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsi,168))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xae; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% r13,% rbx) (% rdx,Memop Quadword (%% (rsi,176))) *) + 0x49; 0x11; 0xdc; (* ADC (% r12) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xb6; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% r14,% rbx) (% rdx,Memop Quadword (%% (rsi,184))) *) + 0x49; 0x11; 0xdd; (* ADC (% r13) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xbe; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% r15,% rbx) (% rdx,Memop Quadword (%% (rsi,192))) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x86; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% r8,% rbx) (% rdx,Memop Quadword (%% (rsi,200))) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x49; 0x11; 0xe8; (* ADC (% r8) (% rbp) *) + 0x48; 0x8b; 0x51; 0x50; (* MOV (% rdx) (Memop Quadword (%% (rcx,80))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0x4c; 0x89; 0x8c; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,440))) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x8e; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% r9,% rax) (% rdx,Memop Quadword (%% (rsi,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcd; + (* ADOX (% r9) (% rbp) *) + 0x49; 0x11; 0xe9; (* ADC (% r9) (% rbp) *) + 0x48; 0x8b; 0x51; 0x58; (* MOV (% rdx) (Memop Quadword (%% (rcx,88))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x4c; 0x89; 0x94; 0x24; 0xc0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,448))) (% r10) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x96; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsi,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd5; + (* ADOX (% r10) (% rbp) *) + 0x49; 0x11; 0xea; (* ADC (% r10) (% rbp) *) + 0x48; 0x8b; 0x51; 0x60; (* MOV (% rdx) (Memop Quadword (%% (rcx,96))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x4c; 0x89; 0x9c; 0x24; 0xc8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,456))) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x9e; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsi,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdd; + (* ADOX (% r11) (% rbp) *) + 0x49; 0x11; 0xeb; (* ADC (% r11) (% rbp) *) + 0x48; 0x8b; 0x51; 0x68; (* MOV (% rdx) (Memop Quadword (%% (rcx,104))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4c; 0x89; 0xa4; 0x24; 0xd0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,464))) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xa6; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsi,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe5; + (* ADOX (% r12) (% rbp) *) + 0x49; 0x11; 0xec; (* ADC (% r12) (% rbp) *) + 0x48; 0x8b; 0x51; 0x70; (* MOV (% rdx) (Memop Quadword (%% (rcx,112))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0x4c; 0x89; 0xac; 0x24; 0xd8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,472))) (% r13) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xae; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsi,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xed; + (* ADOX (% r13) (% rbp) *) + 0x49; 0x11; 0xed; (* ADC (% r13) (% rbp) *) + 0x48; 0x8b; 0x51; 0x78; (* MOV (% rdx) (Memop Quadword (%% (rcx,120))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x4c; 0x89; 0xb4; 0x24; 0xe0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,480))) (% r14) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xb6; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsi,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf5; + (* ADOX (% r14) (% rbp) *) + 0x49; 0x11; 0xee; (* ADC (% r14) (% rbp) *) + 0x48; 0x8b; 0x91; 0x80; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rcx,128))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0x4c; 0x89; 0xbc; 0x24; 0xe8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,488))) (% r15) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xbe; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsi,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADOX (% r15) (% rbp) *) + 0x49; 0x11; 0xef; (* ADC (% r15) (% rbp) *) + 0x48; 0x8b; 0x96; 0xd0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,208))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x59; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x59; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x59; 0x58; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x59; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x59; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x59; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x59; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x99; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xdd; + (* ADOX (% rbx) (% rbp) *) + 0x48; 0x11; 0xdd; (* ADC (% rbp) (% rbx) *) + 0x48; 0x8b; 0x91; 0x88; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rcx,136))) *) + 0x31; 0xc0; (* XOR (% eax) (% eax) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% rbp) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xd0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,208))) *) + 0x48; 0x11; 0xc5; (* ADC (% rbp) (% rax) *) + 0x4c; 0x89; 0xc0; (* MOV (% rax) (% r8) *) + 0x48; 0x25; 0xff; 0x01; 0x00; 0x00; + (* AND (% rax) (Imm32 (word 511)) *) + 0x4d; 0x0f; 0xac; 0xc8; 0x09; + (* SHRD (% r8) (% r9) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xd1; 0x09; + (* SHRD (% r9) (% r10) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xda; 0x09; + (* SHRD (% r10) (% r11) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xe3; 0x09; + (* SHRD (% r11) (% r12) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xec; 0x09; + (* SHRD (% r12) (% r13) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xf5; 0x09; + (* SHRD (% r13) (% r14) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xfe; 0x09; + (* SHRD (% r14) (% r15) (Imm8 (word 9)) *) + 0x49; 0x0f; 0xac; 0xef; 0x09; + (* SHRD (% r15) (% rbp) (Imm8 (word 9)) *) + 0x48; 0xc1; 0xed; 0x09; (* SHR (% rbp) (Imm8 (word 9)) *) + 0x48; 0x01; 0xc5; (* ADD (% rbp) (% rax) *) + 0xf9; (* STCF *) + 0x4c; 0x13; 0x84; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* ADC (% r8) (Memop Quadword (%% (rsp,432))) *) + 0x4c; 0x13; 0x8c; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* ADC (% r9) (Memop Quadword (%% (rsp,440))) *) + 0x4c; 0x13; 0x94; 0x24; 0xc0; 0x01; 0x00; 0x00; + (* ADC (% r10) (Memop Quadword (%% (rsp,448))) *) + 0x4c; 0x13; 0x9c; 0x24; 0xc8; 0x01; 0x00; 0x00; + (* ADC (% r11) (Memop Quadword (%% (rsp,456))) *) + 0x4c; 0x13; 0xa4; 0x24; 0xd0; 0x01; 0x00; 0x00; + (* ADC (% r12) (Memop Quadword (%% (rsp,464))) *) + 0x4c; 0x13; 0xac; 0x24; 0xd8; 0x01; 0x00; 0x00; + (* ADC (% r13) (Memop Quadword (%% (rsp,472))) *) + 0x4c; 0x13; 0xb4; 0x24; 0xe0; 0x01; 0x00; 0x00; + (* ADC (% r14) (Memop Quadword (%% (rsp,480))) *) + 0x4c; 0x13; 0xbc; 0x24; 0xe8; 0x01; 0x00; 0x00; + (* ADC (% r15) (Memop Quadword (%% (rsp,488))) *) + 0x48; 0x81; 0xd5; 0x00; 0xfe; 0xff; 0xff; + (* ADC (% rbp) (Imm32 (word 4294966784)) *) + 0xf5; (* CMC *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x44; 0x24; 0x48; + (* MOV (Memop Quadword (%% (rsp,72))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x4c; 0x24; 0x50; + (* MOV (Memop Quadword (%% (rsp,80))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x54; 0x24; 0x58; + (* MOV (Memop Quadword (%% (rsp,88))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x5c; 0x24; 0x60; + (* MOV (Memop Quadword (%% (rsp,96))) (% r11) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x64; 0x24; 0x68; + (* MOV (Memop Quadword (%% (rsp,104))) (% r12) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x6c; 0x24; 0x70; + (* MOV (Memop Quadword (%% (rsp,112))) (% r13) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x74; 0x24; 0x78; + (* MOV (Memop Quadword (%% (rsp,120))) (% r14) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xbc; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,128))) (% r15) *) + 0x48; 0x83; 0xdd; 0x00; (* SBB (% rbp) (Imm8 (word 0)) *) + 0x48; 0x81; 0xe5; 0xff; 0x01; 0x00; 0x00; + (* AND (% rbp) (Imm32 (word 511)) *) + 0x48; 0x89; 0xac; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,136))) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x11; (* MOV (% rdx) (Memop Quadword (%% (rcx,0))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x0c; 0x24; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x4c; 0x89; 0x84; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,432))) (% r8) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x54; 0x24; 0x08; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x64; 0x24; 0x18; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x6c; 0x24; 0x20; + (* MULX4 (% r13,% rbx) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x49; 0x11; 0xdc; (* ADC (% r12) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x74; 0x24; 0x28; + (* MULX4 (% r14,% rbx) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x49; 0x11; 0xdd; (* ADC (% r13) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x7c; 0x24; 0x30; + (* MULX4 (% r15,% rbx) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x44; 0x24; 0x38; + (* MULX4 (% r8,% rbx) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x49; 0x11; 0xe8; (* ADC (% r8) (% rbp) *) + 0x48; 0x8b; 0x51; 0x08; (* MOV (% rdx) (Memop Quadword (%% (rcx,8))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0x4c; 0x89; 0x8c; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,440))) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x4c; 0x24; 0x38; + (* MULX4 (% r9,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcd; + (* ADOX (% r9) (% rbp) *) + 0x49; 0x11; 0xe9; (* ADC (% r9) (% rbp) *) + 0x48; 0x8b; 0x51; 0x10; (* MOV (% rdx) (Memop Quadword (%% (rcx,16))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x4c; 0x89; 0x94; 0x24; 0xc0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,448))) (% r10) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x54; 0x24; 0x38; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd5; + (* ADOX (% r10) (% rbp) *) + 0x49; 0x11; 0xea; (* ADC (% r10) (% rbp) *) + 0x48; 0x8b; 0x51; 0x18; (* MOV (% rdx) (Memop Quadword (%% (rcx,24))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x4c; 0x89; 0x9c; 0x24; 0xc8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,456))) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x5c; 0x24; 0x38; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdd; + (* ADOX (% r11) (% rbp) *) + 0x49; 0x11; 0xeb; (* ADC (% r11) (% rbp) *) + 0x48; 0x8b; 0x51; 0x20; (* MOV (% rdx) (Memop Quadword (%% (rcx,32))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4c; 0x89; 0xa4; 0x24; 0xd0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,464))) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x64; 0x24; 0x38; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe5; + (* ADOX (% r12) (% rbp) *) + 0x49; 0x11; 0xec; (* ADC (% r12) (% rbp) *) + 0x48; 0x8b; 0x51; 0x28; (* MOV (% rdx) (Memop Quadword (%% (rcx,40))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0x4c; 0x89; 0xac; 0x24; 0xd8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,472))) (% r13) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x6c; 0x24; 0x38; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xed; + (* ADOX (% r13) (% rbp) *) + 0x49; 0x11; 0xed; (* ADC (% r13) (% rbp) *) + 0x48; 0x8b; 0x51; 0x30; (* MOV (% rdx) (Memop Quadword (%% (rcx,48))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x4c; 0x89; 0xb4; 0x24; 0xe0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,480))) (% r14) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x74; 0x24; 0x38; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf5; + (* ADOX (% r14) (% rbp) *) + 0x49; 0x11; 0xee; (* ADC (% r14) (% rbp) *) + 0x48; 0x8b; 0x51; 0x38; (* MOV (% rdx) (Memop Quadword (%% (rcx,56))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0x4c; 0x89; 0xbc; 0x24; 0xe8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,488))) (% r15) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x7c; 0x24; 0x38; + (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADOX (% r15) (% rbp) *) + 0x49; 0x11; 0xef; (* ADC (% r15) (% rbp) *) + 0x48; 0x8b; 0x54; 0x24; 0x40; + (* MOV (% rdx) (Memop Quadword (%% (rsp,64))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x19; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x59; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x59; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x59; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x59; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x59; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x59; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x59; 0x38; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rcx,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xdd; + (* ADOX (% rbx) (% rbp) *) + 0x48; 0x11; 0xdd; (* ADC (% rbp) (% rbx) *) + 0x48; 0x8b; 0x51; 0x40; (* MOV (% rdx) (Memop Quadword (%% (rcx,64))) *) + 0x31; 0xc0; (* XOR (% eax) (% eax) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x38; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% rbp) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x40; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,64))) *) + 0x48; 0x11; 0xc5; (* ADC (% rbp) (% rax) *) + 0x4c; 0x89; 0xc0; (* MOV (% rax) (% r8) *) + 0x48; 0x25; 0xff; 0x01; 0x00; 0x00; + (* AND (% rax) (Imm32 (word 511)) *) + 0x4d; 0x0f; 0xac; 0xc8; 0x09; + (* SHRD (% r8) (% r9) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xd1; 0x09; + (* SHRD (% r9) (% r10) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xda; 0x09; + (* SHRD (% r10) (% r11) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xe3; 0x09; + (* SHRD (% r11) (% r12) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xec; 0x09; + (* SHRD (% r12) (% r13) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xf5; 0x09; + (* SHRD (% r13) (% r14) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xfe; 0x09; + (* SHRD (% r14) (% r15) (Imm8 (word 9)) *) + 0x49; 0x0f; 0xac; 0xef; 0x09; + (* SHRD (% r15) (% rbp) (Imm8 (word 9)) *) + 0x48; 0xc1; 0xed; 0x09; (* SHR (% rbp) (Imm8 (word 9)) *) + 0x48; 0x01; 0xc5; (* ADD (% rbp) (% rax) *) + 0xf9; (* STCF *) + 0x4c; 0x13; 0x84; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* ADC (% r8) (Memop Quadword (%% (rsp,432))) *) + 0x4c; 0x13; 0x8c; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* ADC (% r9) (Memop Quadword (%% (rsp,440))) *) + 0x4c; 0x13; 0x94; 0x24; 0xc0; 0x01; 0x00; 0x00; + (* ADC (% r10) (Memop Quadword (%% (rsp,448))) *) + 0x4c; 0x13; 0x9c; 0x24; 0xc8; 0x01; 0x00; 0x00; + (* ADC (% r11) (Memop Quadword (%% (rsp,456))) *) + 0x4c; 0x13; 0xa4; 0x24; 0xd0; 0x01; 0x00; 0x00; + (* ADC (% r12) (Memop Quadword (%% (rsp,464))) *) + 0x4c; 0x13; 0xac; 0x24; 0xd8; 0x01; 0x00; 0x00; + (* ADC (% r13) (Memop Quadword (%% (rsp,472))) *) + 0x4c; 0x13; 0xb4; 0x24; 0xe0; 0x01; 0x00; 0x00; + (* ADC (% r14) (Memop Quadword (%% (rsp,480))) *) + 0x4c; 0x13; 0xbc; 0x24; 0xe8; 0x01; 0x00; 0x00; + (* ADC (% r15) (Memop Quadword (%% (rsp,488))) *) + 0x48; 0x81; 0xd5; 0x00; 0xfe; 0xff; 0xff; + (* ADC (% rbp) (Imm32 (word 4294966784)) *) + 0xf5; (* CMC *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x84; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,144))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x8c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,152))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x94; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,160))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,168))) (% r11) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xa4; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,176))) (% r12) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xac; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,184))) (% r13) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xb4; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,192))) (% r14) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xbc; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,200))) (% r15) *) + 0x48; 0x83; 0xdd; 0x00; (* SBB (% rbp) (Imm8 (word 0)) *) + 0x48; 0x81; 0xe5; 0xff; 0x01; 0x00; 0x00; + (* AND (% rbp) (Imm32 (word 511)) *) + 0x48; 0x89; 0xac; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,208))) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x54; 0x24; 0x48; + (* MOV (% rdx) (Memop Quadword (%% (rsp,72))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x0c; 0x24; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x4c; 0x89; 0x84; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,432))) (% r8) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x54; 0x24; 0x08; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x64; 0x24; 0x18; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x6c; 0x24; 0x20; + (* MULX4 (% r13,% rbx) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x49; 0x11; 0xdc; (* ADC (% r12) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x74; 0x24; 0x28; + (* MULX4 (% r14,% rbx) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x49; 0x11; 0xdd; (* ADC (% r13) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x7c; 0x24; 0x30; + (* MULX4 (% r15,% rbx) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x44; 0x24; 0x38; + (* MULX4 (% r8,% rbx) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x49; 0x11; 0xe8; (* ADC (% r8) (% rbp) *) + 0x48; 0x8b; 0x54; 0x24; 0x50; + (* MOV (% rdx) (Memop Quadword (%% (rsp,80))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0x4c; 0x89; 0x8c; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,440))) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x4c; 0x24; 0x38; + (* MULX4 (% r9,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcd; + (* ADOX (% r9) (% rbp) *) + 0x49; 0x11; 0xe9; (* ADC (% r9) (% rbp) *) + 0x48; 0x8b; 0x54; 0x24; 0x58; + (* MOV (% rdx) (Memop Quadword (%% (rsp,88))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x4c; 0x89; 0x94; 0x24; 0xc0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,448))) (% r10) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x54; 0x24; 0x38; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd5; + (* ADOX (% r10) (% rbp) *) + 0x49; 0x11; 0xea; (* ADC (% r10) (% rbp) *) + 0x48; 0x8b; 0x54; 0x24; 0x60; + (* MOV (% rdx) (Memop Quadword (%% (rsp,96))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x4c; 0x89; 0x9c; 0x24; 0xc8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,456))) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x5c; 0x24; 0x38; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdd; + (* ADOX (% r11) (% rbp) *) + 0x49; 0x11; 0xeb; (* ADC (% r11) (% rbp) *) + 0x48; 0x8b; 0x54; 0x24; 0x68; + (* MOV (% rdx) (Memop Quadword (%% (rsp,104))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4c; 0x89; 0xa4; 0x24; 0xd0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,464))) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x64; 0x24; 0x38; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe5; + (* ADOX (% r12) (% rbp) *) + 0x49; 0x11; 0xec; (* ADC (% r12) (% rbp) *) + 0x48; 0x8b; 0x54; 0x24; 0x70; + (* MOV (% rdx) (Memop Quadword (%% (rsp,112))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0x4c; 0x89; 0xac; 0x24; 0xd8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,472))) (% r13) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x6c; 0x24; 0x38; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xed; + (* ADOX (% r13) (% rbp) *) + 0x49; 0x11; 0xed; (* ADC (% r13) (% rbp) *) + 0x48; 0x8b; 0x54; 0x24; 0x78; + (* MOV (% rdx) (Memop Quadword (%% (rsp,120))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x4c; 0x89; 0xb4; 0x24; 0xe0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,480))) (% r14) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x74; 0x24; 0x38; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf5; + (* ADOX (% r14) (% rbp) *) + 0x49; 0x11; 0xee; (* ADC (% r14) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,128))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0x4c; 0x89; 0xbc; 0x24; 0xe8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,488))) (% r15) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x7c; 0x24; 0x38; + (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADOX (% r15) (% rbp) *) + 0x49; 0x11; 0xef; (* ADC (% r15) (% rbp) *) + 0x48; 0x8b; 0x54; 0x24; 0x40; + (* MOV (% rdx) (Memop Quadword (%% (rsp,64))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x58; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xdd; + (* ADOX (% rbx) (% rbp) *) + 0x48; 0x11; 0xdd; (* ADC (% rbp) (% rbx) *) + 0x48; 0x8b; 0x94; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,136))) *) + 0x31; 0xc0; (* XOR (% eax) (% eax) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1c; 0x24; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x38; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% rbp) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x40; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,64))) *) + 0x48; 0x11; 0xc5; (* ADC (% rbp) (% rax) *) + 0x4c; 0x89; 0xc0; (* MOV (% rax) (% r8) *) + 0x48; 0x25; 0xff; 0x01; 0x00; 0x00; + (* AND (% rax) (Imm32 (word 511)) *) + 0x4d; 0x0f; 0xac; 0xc8; 0x09; + (* SHRD (% r8) (% r9) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xd1; 0x09; + (* SHRD (% r9) (% r10) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xda; 0x09; + (* SHRD (% r10) (% r11) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xe3; 0x09; + (* SHRD (% r11) (% r12) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xec; 0x09; + (* SHRD (% r12) (% r13) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xf5; 0x09; + (* SHRD (% r13) (% r14) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xfe; 0x09; + (* SHRD (% r14) (% r15) (Imm8 (word 9)) *) + 0x49; 0x0f; 0xac; 0xef; 0x09; + (* SHRD (% r15) (% rbp) (Imm8 (word 9)) *) + 0x48; 0xc1; 0xed; 0x09; (* SHR (% rbp) (Imm8 (word 9)) *) + 0x48; 0x01; 0xc5; (* ADD (% rbp) (% rax) *) + 0xf9; (* STCF *) + 0x4c; 0x13; 0x84; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* ADC (% r8) (Memop Quadword (%% (rsp,432))) *) + 0x4c; 0x13; 0x8c; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* ADC (% r9) (Memop Quadword (%% (rsp,440))) *) + 0x4c; 0x13; 0x94; 0x24; 0xc0; 0x01; 0x00; 0x00; + (* ADC (% r10) (Memop Quadword (%% (rsp,448))) *) + 0x4c; 0x13; 0x9c; 0x24; 0xc8; 0x01; 0x00; 0x00; + (* ADC (% r11) (Memop Quadword (%% (rsp,456))) *) + 0x4c; 0x13; 0xa4; 0x24; 0xd0; 0x01; 0x00; 0x00; + (* ADC (% r12) (Memop Quadword (%% (rsp,464))) *) + 0x4c; 0x13; 0xac; 0x24; 0xd8; 0x01; 0x00; 0x00; + (* ADC (% r13) (Memop Quadword (%% (rsp,472))) *) + 0x4c; 0x13; 0xb4; 0x24; 0xe0; 0x01; 0x00; 0x00; + (* ADC (% r14) (Memop Quadword (%% (rsp,480))) *) + 0x4c; 0x13; 0xbc; 0x24; 0xe8; 0x01; 0x00; 0x00; + (* ADC (% r15) (Memop Quadword (%% (rsp,488))) *) + 0x48; 0x81; 0xd5; 0x00; 0xfe; 0xff; 0xff; + (* ADC (% rbp) (Imm32 (word 4294966784)) *) + 0xf5; (* CMC *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x44; 0x24; 0x48; + (* MOV (Memop Quadword (%% (rsp,72))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x4c; 0x24; 0x50; + (* MOV (Memop Quadword (%% (rsp,80))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x54; 0x24; 0x58; + (* MOV (Memop Quadword (%% (rsp,88))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x5c; 0x24; 0x60; + (* MOV (Memop Quadword (%% (rsp,96))) (% r11) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x64; 0x24; 0x68; + (* MOV (Memop Quadword (%% (rsp,104))) (% r12) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x6c; 0x24; 0x70; + (* MOV (Memop Quadword (%% (rsp,112))) (% r13) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x74; 0x24; 0x78; + (* MOV (Memop Quadword (%% (rsp,120))) (% r14) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xbc; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,128))) (% r15) *) + 0x48; 0x83; 0xdd; 0x00; (* SBB (% rbp) (Imm8 (word 0)) *) + 0x48; 0x81; 0xe5; 0xff; 0x01; 0x00; 0x00; + (* AND (% rbp) (Imm32 (word 511)) *) + 0x48; 0x89; 0xac; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,136))) (% rbp) *) + 0x48; 0x8b; 0x84; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,144))) *) + 0x48; 0x2b; 0x06; (* SUB (% rax) (Memop Quadword (%% (rsi,0))) *) + 0x48; 0x8b; 0x94; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,152))) *) + 0x48; 0x1b; 0x56; 0x08; (* SBB (% rdx) (Memop Quadword (%% (rsi,8))) *) + 0x4c; 0x8b; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (% r8) (Memop Quadword (%% (rsp,160))) *) + 0x4c; 0x1b; 0x46; 0x10; (* SBB (% r8) (Memop Quadword (%% (rsi,16))) *) + 0x4c; 0x8b; 0x8c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (% r9) (Memop Quadword (%% (rsp,168))) *) + 0x4c; 0x1b; 0x4e; 0x18; (* SBB (% r9) (Memop Quadword (%% (rsi,24))) *) + 0x4c; 0x8b; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (% r10) (Memop Quadword (%% (rsp,176))) *) + 0x4c; 0x1b; 0x56; 0x20; (* SBB (% r10) (Memop Quadword (%% (rsi,32))) *) + 0x4c; 0x8b; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (% r11) (Memop Quadword (%% (rsp,184))) *) + 0x4c; 0x1b; 0x5e; 0x28; (* SBB (% r11) (Memop Quadword (%% (rsi,40))) *) + 0x4c; 0x8b; 0xa4; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (% r12) (Memop Quadword (%% (rsp,192))) *) + 0x4c; 0x1b; 0x66; 0x30; (* SBB (% r12) (Memop Quadword (%% (rsi,48))) *) + 0x4c; 0x8b; 0xac; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (% r13) (Memop Quadword (%% (rsp,200))) *) + 0x4c; 0x1b; 0x6e; 0x38; (* SBB (% r13) (Memop Quadword (%% (rsi,56))) *) + 0x4c; 0x8b; 0xb4; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (% r14) (Memop Quadword (%% (rsp,208))) *) + 0x4c; 0x1b; 0x76; 0x40; (* SBB (% r14) (Memop Quadword (%% (rsi,64))) *) + 0x48; 0x83; 0xd8; 0x00; (* SBB (% rax) (Imm8 (word 0)) *) + 0x48; 0x89; 0x84; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,360))) (% rax) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x48; 0x89; 0x94; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,368))) (% rdx) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x84; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,376))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x8c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,384))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x94; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,392))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,400))) (% r11) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xa4; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,408))) (% r12) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xac; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,416))) (% r13) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x49; 0x81; 0xe6; 0xff; 0x01; 0x00; 0x00; + (* AND (% r14) (Imm32 (word 511)) *) + 0x4c; 0x89; 0xb4; 0x24; 0xa8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,424))) (% r14) *) + 0x48; 0x8b; 0x44; 0x24; 0x48; + (* MOV (% rax) (Memop Quadword (%% (rsp,72))) *) + 0x48; 0x2b; 0x46; 0x48; (* SUB (% rax) (Memop Quadword (%% (rsi,72))) *) + 0x48; 0x8b; 0x54; 0x24; 0x50; + (* MOV (% rdx) (Memop Quadword (%% (rsp,80))) *) + 0x48; 0x1b; 0x56; 0x50; (* SBB (% rdx) (Memop Quadword (%% (rsi,80))) *) + 0x4c; 0x8b; 0x44; 0x24; 0x58; + (* MOV (% r8) (Memop Quadword (%% (rsp,88))) *) + 0x4c; 0x1b; 0x46; 0x58; (* SBB (% r8) (Memop Quadword (%% (rsi,88))) *) + 0x4c; 0x8b; 0x4c; 0x24; 0x60; + (* MOV (% r9) (Memop Quadword (%% (rsp,96))) *) + 0x4c; 0x1b; 0x4e; 0x60; (* SBB (% r9) (Memop Quadword (%% (rsi,96))) *) + 0x4c; 0x8b; 0x54; 0x24; 0x68; + (* MOV (% r10) (Memop Quadword (%% (rsp,104))) *) + 0x4c; 0x1b; 0x56; 0x68; (* SBB (% r10) (Memop Quadword (%% (rsi,104))) *) + 0x4c; 0x8b; 0x5c; 0x24; 0x70; + (* MOV (% r11) (Memop Quadword (%% (rsp,112))) *) + 0x4c; 0x1b; 0x5e; 0x70; (* SBB (% r11) (Memop Quadword (%% (rsi,112))) *) + 0x4c; 0x8b; 0x64; 0x24; 0x78; + (* MOV (% r12) (Memop Quadword (%% (rsp,120))) *) + 0x4c; 0x1b; 0x66; 0x78; (* SBB (% r12) (Memop Quadword (%% (rsi,120))) *) + 0x4c; 0x8b; 0xac; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (% r13) (Memop Quadword (%% (rsp,128))) *) + 0x4c; 0x1b; 0xae; 0x80; 0x00; 0x00; 0x00; + (* SBB (% r13) (Memop Quadword (%% (rsi,128))) *) + 0x4c; 0x8b; 0xb4; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (% r14) (Memop Quadword (%% (rsp,136))) *) + 0x4c; 0x1b; 0xb6; 0x88; 0x00; 0x00; 0x00; + (* SBB (% r14) (Memop Quadword (%% (rsi,136))) *) + 0x48; 0x83; 0xd8; 0x00; (* SBB (% rax) (Imm8 (word 0)) *) + 0x48; 0x89; 0x44; 0x24; 0x48; + (* MOV (Memop Quadword (%% (rsp,72))) (% rax) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x48; 0x89; 0x54; 0x24; 0x50; + (* MOV (Memop Quadword (%% (rsp,80))) (% rdx) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x44; 0x24; 0x58; + (* MOV (Memop Quadword (%% (rsp,88))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x4c; 0x24; 0x60; + (* MOV (Memop Quadword (%% (rsp,96))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x54; 0x24; 0x68; + (* MOV (Memop Quadword (%% (rsp,104))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x5c; 0x24; 0x70; + (* MOV (Memop Quadword (%% (rsp,112))) (% r11) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x64; 0x24; 0x78; + (* MOV (Memop Quadword (%% (rsp,120))) (% r12) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xac; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,128))) (% r13) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x49; 0x81; 0xe6; 0xff; 0x01; 0x00; 0x00; + (* AND (% r14) (Imm32 (word 511)) *) + 0x4c; 0x89; 0xb4; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,136))) (% r14) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x94; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,360))) *) + 0xc4; 0xe2; 0xb3; 0xf6; 0x84; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rax,% r9) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x4c; 0x89; 0x8c; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,440))) (% r9) *) + 0xc4; 0xe2; 0xab; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% r10) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0x4c; 0x89; 0x94; 0x24; 0xc0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,448))) (% r10) *) + 0xc4; 0xe2; 0xa3; 0xf6; 0x84; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rax,% r11) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% rbx) *) + 0xc4; 0xe2; 0x9b; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% r12) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xc4; 0xe2; 0x93; 0xf6; 0x84; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rax,% r13) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADCX (% r13) (% rbx) *) + 0xc4; 0xe2; 0x8b; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% r14) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xc4; 0x62; 0x83; 0xf6; 0x84; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% r8,% r15) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADCX (% r15) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc5; + (* ADCX (% r8) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x94; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,368))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x4c; 0x89; 0x9c; 0x24; 0xc8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,456))) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4c; 0x89; 0xa4; 0x24; 0xd0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,464))) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x8c; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% r9,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcd; + (* ADOX (% r9) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,392))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x94; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd5; + (* ADOX (% r10) (% rbp) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd5; + (* ADCX (% r10) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x94; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,376))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0x4c; 0x89; 0xac; 0x24; 0xd8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,472))) (% r13) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x4c; 0x89; 0xb4; 0x24; 0xe0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,480))) (% r14) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0x48; 0x8b; 0x94; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,408))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdd; + (* ADOX (% r11) (% rbp) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xa4; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe5; + (* ADOX (% r12) (% rbp) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe5; + (* ADCX (% r12) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x94; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,384))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0x4c; 0x89; 0xbc; 0x24; 0xe8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,488))) (% r15) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0x8b; 0x94; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,416))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xac; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xed; + (* ADOX (% r13) (% rbp) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xb4; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf5; + (* ADOX (% r14) (% rbp) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf5; + (* ADCX (% r14) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x94; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,360))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% rdx) *) + 0x48; 0x89; 0x84; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,432))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,440))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% rax) (% rbx) *) + 0x48; 0x89; 0x84; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,440))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0xc0; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,448))) *) + 0x48; 0x8b; 0x94; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,368))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc2; + (* ADOX (% rax) (% rdx) *) + 0x48; 0x89; 0x84; 0x24; 0xc0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,448))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0xc8; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,456))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% rax) (% rbx) *) + 0x48; 0x89; 0x84; 0x24; 0xc8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,456))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0xd0; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,464))) *) + 0x48; 0x8b; 0x94; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,376))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc2; + (* ADOX (% rax) (% rdx) *) + 0x48; 0x89; 0x84; 0x24; 0xd0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,464))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0xd8; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,472))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% rax) (% rbx) *) + 0x48; 0x89; 0x84; 0x24; 0xd8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,472))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0xe0; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,480))) *) + 0x48; 0x8b; 0x94; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,384))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc2; + (* ADOX (% rax) (% rdx) *) + 0x48; 0x89; 0x84; 0x24; 0xe0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,480))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0xe8; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,488))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% rax) (% rbx) *) + 0x48; 0x89; 0x84; 0x24; 0xe8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,488))) (% rax) *) + 0x48; 0x8b; 0x94; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,392))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% r8) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc2; + (* ADOX (% r8) (% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% r9) (% r9) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0x48; 0x8b; 0x94; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,400))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xd2; + (* ADCX (% r10) (% r10) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd2; + (* ADOX (% r10) (% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% r11) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0x8b; 0x94; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,408))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xe4; + (* ADCX (% r12) (% r12) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe2; + (* ADOX (% r12) (% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% r13) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0x8b; 0x94; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,416))) *) + 0xc4; 0x62; 0xeb; 0xf6; 0xfa; + (* MULX4 (% r15,% rdx) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf6; + (* ADCX (% r14) (% r14) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf2; + (* ADOX (% r14) (% rdx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADCX (% r15) (% rbp) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADOX (% r15) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0xa8; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,424))) *) + 0x48; 0x89; 0xd5; (* MOV (% rbp) (% rdx) *) + 0x48; 0x0f; 0xaf; 0xed; (* IMUL (% rbp) (% rbp) *) + 0x48; 0x01; 0xd2; (* ADD (% rdx) (% rdx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% rbp) (% rbx) *) + 0x48; 0x83; 0xd5; 0x00; (* ADC (% rbp) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xc0; (* MOV (% rax) (% r8) *) + 0x48; 0x25; 0xff; 0x01; 0x00; 0x00; + (* AND (% rax) (Imm32 (word 511)) *) + 0x4d; 0x0f; 0xac; 0xc8; 0x09; + (* SHRD (% r8) (% r9) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xd1; 0x09; + (* SHRD (% r9) (% r10) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xda; 0x09; + (* SHRD (% r10) (% r11) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xe3; 0x09; + (* SHRD (% r11) (% r12) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xec; 0x09; + (* SHRD (% r12) (% r13) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xf5; 0x09; + (* SHRD (% r13) (% r14) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xfe; 0x09; + (* SHRD (% r14) (% r15) (Imm8 (word 9)) *) + 0x49; 0x0f; 0xac; 0xef; 0x09; + (* SHRD (% r15) (% rbp) (Imm8 (word 9)) *) + 0x48; 0xc1; 0xed; 0x09; (* SHR (% rbp) (Imm8 (word 9)) *) + 0x48; 0x01; 0xc5; (* ADD (% rbp) (% rax) *) + 0xf9; (* STCF *) + 0x4c; 0x13; 0x84; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* ADC (% r8) (Memop Quadword (%% (rsp,432))) *) + 0x4c; 0x13; 0x8c; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* ADC (% r9) (Memop Quadword (%% (rsp,440))) *) + 0x4c; 0x13; 0x94; 0x24; 0xc0; 0x01; 0x00; 0x00; + (* ADC (% r10) (Memop Quadword (%% (rsp,448))) *) + 0x4c; 0x13; 0x9c; 0x24; 0xc8; 0x01; 0x00; 0x00; + (* ADC (% r11) (Memop Quadword (%% (rsp,456))) *) + 0x4c; 0x13; 0xa4; 0x24; 0xd0; 0x01; 0x00; 0x00; + (* ADC (% r12) (Memop Quadword (%% (rsp,464))) *) + 0x4c; 0x13; 0xac; 0x24; 0xd8; 0x01; 0x00; 0x00; + (* ADC (% r13) (Memop Quadword (%% (rsp,472))) *) + 0x4c; 0x13; 0xb4; 0x24; 0xe0; 0x01; 0x00; 0x00; + (* ADC (% r14) (Memop Quadword (%% (rsp,480))) *) + 0x4c; 0x13; 0xbc; 0x24; 0xe8; 0x01; 0x00; 0x00; + (* ADC (% r15) (Memop Quadword (%% (rsp,488))) *) + 0x48; 0x81; 0xd5; 0x00; 0xfe; 0xff; 0xff; + (* ADC (% rbp) (Imm32 (word 4294966784)) *) + 0xf5; (* CMC *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x84; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,216))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x8c; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,224))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x94; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,232))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,240))) (% r11) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xa4; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,248))) (% r12) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xac; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,256))) (% r13) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xb4; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,264))) (% r14) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xbc; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,272))) (% r15) *) + 0x48; 0x83; 0xdd; 0x00; (* SBB (% rbp) (Imm8 (word 0)) *) + 0x48; 0x81; 0xe5; 0xff; 0x01; 0x00; 0x00; + (* AND (% rbp) (Imm32 (word 511)) *) + 0x48; 0x89; 0xac; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,280))) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x54; 0x24; 0x48; + (* MOV (% rdx) (Memop Quadword (%% (rsp,72))) *) + 0xc4; 0xe2; 0xb3; 0xf6; 0x44; 0x24; 0x50; + (* MULX4 (% rax,% r9) (% rdx,Memop Quadword (%% (rsp,80))) *) + 0x4c; 0x89; 0x8c; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,440))) (% r9) *) + 0xc4; 0xe2; 0xab; 0xf6; 0x5c; 0x24; 0x58; + (* MULX4 (% rbx,% r10) (% rdx,Memop Quadword (%% (rsp,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0x4c; 0x89; 0x94; 0x24; 0xc0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,448))) (% r10) *) + 0xc4; 0xe2; 0xa3; 0xf6; 0x44; 0x24; 0x60; + (* MULX4 (% rax,% r11) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% rbx) *) + 0xc4; 0xe2; 0x9b; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% r12) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xc4; 0xe2; 0x93; 0xf6; 0x44; 0x24; 0x70; + (* MULX4 (% rax,% r13) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADCX (% r13) (% rbx) *) + 0xc4; 0xe2; 0x8b; 0xf6; 0x5c; 0x24; 0x78; + (* MULX4 (% rbx,% r14) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xc4; 0x62; 0x83; 0xf6; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% r8,% r15) (% rdx,Memop Quadword (%% (rsp,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADCX (% r15) (% rbx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc5; + (* ADCX (% r8) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x54; 0x24; 0x50; + (* MOV (% rdx) (Memop Quadword (%% (rsp,80))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x58; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x4c; 0x89; 0x9c; 0x24; 0xc8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,456))) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4c; 0x89; 0xa4; 0x24; 0xd0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,464))) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x8c; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% r9,% rax) (% rdx,Memop Quadword (%% (rsp,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcd; + (* ADOX (% r9) (% rbp) *) + 0x48; 0x8b; 0x54; 0x24; 0x68; + (* MOV (% rdx) (Memop Quadword (%% (rsp,104))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x54; 0x24; 0x70; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd5; + (* ADOX (% r10) (% rbp) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd5; + (* ADCX (% r10) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x54; 0x24; 0x58; + (* MOV (% rdx) (Memop Quadword (%% (rsp,88))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0x4c; 0x89; 0xac; 0x24; 0xd8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,472))) (% r13) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x4c; 0x89; 0xb4; 0x24; 0xe0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,480))) (% r14) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0x48; 0x8b; 0x54; 0x24; 0x78; + (* MOV (% rdx) (Memop Quadword (%% (rsp,120))) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdd; + (* ADOX (% r11) (% rbp) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x64; 0x24; 0x70; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe5; + (* ADOX (% r12) (% rbp) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe5; + (* ADCX (% r12) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x54; 0x24; 0x60; + (* MOV (% rdx) (Memop Quadword (%% (rsp,96))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0x4c; 0x89; 0xbc; 0x24; 0xe8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,488))) (% r15) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0x8b; 0x94; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,128))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x6c; 0x24; 0x70; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xed; + (* ADOX (% r13) (% rbp) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x74; 0x24; 0x78; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf5; + (* ADOX (% r14) (% rbp) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf5; + (* ADCX (% r14) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x54; 0x24; 0x48; + (* MOV (% rdx) (Memop Quadword (%% (rsp,72))) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0xda; + (* MULX4 (% rbx,% rax) (% rdx,% rdx) *) + 0x48; 0x89; 0x84; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,432))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,440))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% rax) (% rbx) *) + 0x48; 0x89; 0x84; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,440))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0xc0; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,448))) *) + 0x48; 0x8b; 0x54; 0x24; 0x50; + (* MOV (% rdx) (Memop Quadword (%% (rsp,80))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc2; + (* ADOX (% rax) (% rdx) *) + 0x48; 0x89; 0x84; 0x24; 0xc0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,448))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0xc8; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,456))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% rax) (% rbx) *) + 0x48; 0x89; 0x84; 0x24; 0xc8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,456))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0xd0; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,464))) *) + 0x48; 0x8b; 0x54; 0x24; 0x58; + (* MOV (% rdx) (Memop Quadword (%% (rsp,88))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc2; + (* ADOX (% rax) (% rdx) *) + 0x48; 0x89; 0x84; 0x24; 0xd0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,464))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0xd8; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,472))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% rax) (% rbx) *) + 0x48; 0x89; 0x84; 0x24; 0xd8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,472))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0xe0; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,480))) *) + 0x48; 0x8b; 0x54; 0x24; 0x60; + (* MOV (% rdx) (Memop Quadword (%% (rsp,96))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc2; + (* ADOX (% rax) (% rdx) *) + 0x48; 0x89; 0x84; 0x24; 0xe0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,480))) (% rax) *) + 0x48; 0x8b; 0x84; 0x24; 0xe8; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,488))) *) + 0x66; 0x48; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% rax) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% rax) (% rbx) *) + 0x48; 0x89; 0x84; 0x24; 0xe8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,488))) (% rax) *) + 0x48; 0x8b; 0x54; 0x24; 0x68; + (* MOV (% rdx) (Memop Quadword (%% (rsp,104))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% r8) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc2; + (* ADOX (% r8) (% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xc9; + (* ADCX (% r9) (% r9) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0x48; 0x8b; 0x54; 0x24; 0x70; + (* MOV (% rdx) (Memop Quadword (%% (rsp,112))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xd2; + (* ADCX (% r10) (% r10) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd2; + (* ADOX (% r10) (% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xdb; + (* ADCX (% r11) (% r11) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x48; 0x8b; 0x54; 0x24; 0x78; + (* MOV (% rdx) (Memop Quadword (%% (rsp,120))) *) + 0xc4; 0xe2; 0xeb; 0xf6; 0xda; + (* MULX4 (% rbx,% rdx) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xe4; + (* ADCX (% r12) (% r12) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe2; + (* ADOX (% r12) (% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xed; + (* ADCX (% r13) (% r13) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x48; 0x8b; 0x94; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,128))) *) + 0xc4; 0x62; 0xeb; 0xf6; 0xfa; + (* MULX4 (% r15,% rdx) (% rdx,% rdx) *) + 0x66; 0x4d; 0x0f; 0x38; 0xf6; 0xf6; + (* ADCX (% r14) (% r14) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf2; + (* ADOX (% r14) (% rdx) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADCX (% r15) (% rbp) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADOX (% r15) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,136))) *) + 0x48; 0x89; 0xd5; (* MOV (% rbp) (% rdx) *) + 0x48; 0x0f; 0xaf; 0xed; (* IMUL (% rbp) (% rbp) *) + 0x48; 0x01; 0xd2; (* ADD (% rdx) (% rdx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x58; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% rbp) (% rbx) *) + 0x48; 0x83; 0xd5; 0x00; (* ADC (% rbp) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xc0; (* MOV (% rax) (% r8) *) + 0x48; 0x25; 0xff; 0x01; 0x00; 0x00; + (* AND (% rax) (Imm32 (word 511)) *) + 0x4d; 0x0f; 0xac; 0xc8; 0x09; + (* SHRD (% r8) (% r9) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xd1; 0x09; + (* SHRD (% r9) (% r10) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xda; 0x09; + (* SHRD (% r10) (% r11) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xe3; 0x09; + (* SHRD (% r11) (% r12) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xec; 0x09; + (* SHRD (% r12) (% r13) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xf5; 0x09; + (* SHRD (% r13) (% r14) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xfe; 0x09; + (* SHRD (% r14) (% r15) (Imm8 (word 9)) *) + 0x49; 0x0f; 0xac; 0xef; 0x09; + (* SHRD (% r15) (% rbp) (Imm8 (word 9)) *) + 0x48; 0xc1; 0xed; 0x09; (* SHR (% rbp) (Imm8 (word 9)) *) + 0x48; 0x01; 0xc5; (* ADD (% rbp) (% rax) *) + 0xf9; (* STCF *) + 0x4c; 0x13; 0x84; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* ADC (% r8) (Memop Quadword (%% (rsp,432))) *) + 0x4c; 0x13; 0x8c; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* ADC (% r9) (Memop Quadword (%% (rsp,440))) *) + 0x4c; 0x13; 0x94; 0x24; 0xc0; 0x01; 0x00; 0x00; + (* ADC (% r10) (Memop Quadword (%% (rsp,448))) *) + 0x4c; 0x13; 0x9c; 0x24; 0xc8; 0x01; 0x00; 0x00; + (* ADC (% r11) (Memop Quadword (%% (rsp,456))) *) + 0x4c; 0x13; 0xa4; 0x24; 0xd0; 0x01; 0x00; 0x00; + (* ADC (% r12) (Memop Quadword (%% (rsp,464))) *) + 0x4c; 0x13; 0xac; 0x24; 0xd8; 0x01; 0x00; 0x00; + (* ADC (% r13) (Memop Quadword (%% (rsp,472))) *) + 0x4c; 0x13; 0xb4; 0x24; 0xe0; 0x01; 0x00; 0x00; + (* ADC (% r14) (Memop Quadword (%% (rsp,480))) *) + 0x4c; 0x13; 0xbc; 0x24; 0xe8; 0x01; 0x00; 0x00; + (* ADC (% r15) (Memop Quadword (%% (rsp,488))) *) + 0x48; 0x81; 0xd5; 0x00; 0xfe; 0xff; 0xff; + (* ADC (% rbp) (Imm32 (word 4294966784)) *) + 0xf5; (* CMC *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x04; 0x24; (* MOV (Memop Quadword (%% (rsp,0))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x4c; 0x24; 0x08; + (* MOV (Memop Quadword (%% (rsp,8))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x54; 0x24; 0x10; + (* MOV (Memop Quadword (%% (rsp,16))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x5c; 0x24; 0x18; + (* MOV (Memop Quadword (%% (rsp,24))) (% r11) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x64; 0x24; 0x20; + (* MOV (Memop Quadword (%% (rsp,32))) (% r12) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x6c; 0x24; 0x28; + (* MOV (Memop Quadword (%% (rsp,40))) (% r13) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x74; 0x24; 0x30; + (* MOV (Memop Quadword (%% (rsp,48))) (% r14) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x7c; 0x24; 0x38; + (* MOV (Memop Quadword (%% (rsp,56))) (% r15) *) + 0x48; 0x83; 0xdd; 0x00; (* SBB (% rbp) (Imm8 (word 0)) *) + 0x48; 0x81; 0xe5; 0xff; 0x01; 0x00; 0x00; + (* AND (% rbp) (Imm32 (word 511)) *) + 0x48; 0x89; 0x6c; 0x24; 0x40; + (* MOV (Memop Quadword (%% (rsp,64))) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x16; (* MOV (% rdx) (Memop Quadword (%% (rsi,0))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x8c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x4c; 0x89; 0x84; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,432))) (% r8) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x94; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xa4; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xac; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% r13,% rbx) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x49; 0x11; 0xdc; (* ADC (% r12) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xb4; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% r14,% rbx) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x49; 0x11; 0xdd; (* ADC (% r13) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xbc; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% r15,% rbx) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x84; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% r8,% rbx) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x49; 0x11; 0xe8; (* ADC (% r8) (% rbp) *) + 0x48; 0x8b; 0x56; 0x08; (* MOV (% rdx) (Memop Quadword (%% (rsi,8))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0x4c; 0x89; 0x8c; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,440))) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x8c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% r9,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcd; + (* ADOX (% r9) (% rbp) *) + 0x49; 0x11; 0xe9; (* ADC (% r9) (% rbp) *) + 0x48; 0x8b; 0x56; 0x10; (* MOV (% rdx) (Memop Quadword (%% (rsi,16))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x4c; 0x89; 0x94; 0x24; 0xc0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,448))) (% r10) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x94; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd5; + (* ADOX (% r10) (% rbp) *) + 0x49; 0x11; 0xea; (* ADC (% r10) (% rbp) *) + 0x48; 0x8b; 0x56; 0x18; (* MOV (% rdx) (Memop Quadword (%% (rsi,24))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x4c; 0x89; 0x9c; 0x24; 0xc8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,456))) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdd; + (* ADOX (% r11) (% rbp) *) + 0x49; 0x11; 0xeb; (* ADC (% r11) (% rbp) *) + 0x48; 0x8b; 0x56; 0x20; (* MOV (% rdx) (Memop Quadword (%% (rsi,32))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4c; 0x89; 0xa4; 0x24; 0xd0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,464))) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xa4; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe5; + (* ADOX (% r12) (% rbp) *) + 0x49; 0x11; 0xec; (* ADC (% r12) (% rbp) *) + 0x48; 0x8b; 0x56; 0x28; (* MOV (% rdx) (Memop Quadword (%% (rsi,40))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0x4c; 0x89; 0xac; 0x24; 0xd8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,472))) (% r13) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xac; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xed; + (* ADOX (% r13) (% rbp) *) + 0x49; 0x11; 0xed; (* ADC (% r13) (% rbp) *) + 0x48; 0x8b; 0x56; 0x30; (* MOV (% rdx) (Memop Quadword (%% (rsi,48))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x4c; 0x89; 0xb4; 0x24; 0xe0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,480))) (% r14) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xb4; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf5; + (* ADOX (% r14) (% rbp) *) + 0x49; 0x11; 0xee; (* ADC (% r14) (% rbp) *) + 0x48; 0x8b; 0x56; 0x38; (* MOV (% rdx) (Memop Quadword (%% (rsi,56))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0x4c; 0x89; 0xbc; 0x24; 0xe8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,488))) (% r15) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xbc; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADOX (% r15) (% rbp) *) + 0x49; 0x11; 0xef; (* ADC (% r15) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,280))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x1e; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,0))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x08; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,8))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x10; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,16))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x18; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,24))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x20; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,32))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x28; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,40))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x30; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,48))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x38; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,56))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xdd; + (* ADOX (% rbx) (% rbp) *) + 0x48; 0x11; 0xdd; (* ADC (% rbp) (% rbx) *) + 0x48; 0x8b; 0x56; 0x40; (* MOV (% rdx) (Memop Quadword (%% (rsi,64))) *) + 0x31; 0xc0; (* XOR (% eax) (% eax) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% rbp) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0x48; 0x11; 0xc5; (* ADC (% rbp) (% rax) *) + 0x4c; 0x89; 0xc0; (* MOV (% rax) (% r8) *) + 0x48; 0x25; 0xff; 0x01; 0x00; 0x00; + (* AND (% rax) (Imm32 (word 511)) *) + 0x4d; 0x0f; 0xac; 0xc8; 0x09; + (* SHRD (% r8) (% r9) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xd1; 0x09; + (* SHRD (% r9) (% r10) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xda; 0x09; + (* SHRD (% r10) (% r11) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xe3; 0x09; + (* SHRD (% r11) (% r12) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xec; 0x09; + (* SHRD (% r12) (% r13) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xf5; 0x09; + (* SHRD (% r13) (% r14) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xfe; 0x09; + (* SHRD (% r14) (% r15) (Imm8 (word 9)) *) + 0x49; 0x0f; 0xac; 0xef; 0x09; + (* SHRD (% r15) (% rbp) (Imm8 (word 9)) *) + 0x48; 0xc1; 0xed; 0x09; (* SHR (% rbp) (Imm8 (word 9)) *) + 0x48; 0x01; 0xc5; (* ADD (% rbp) (% rax) *) + 0xf9; (* STCF *) + 0x4c; 0x13; 0x84; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* ADC (% r8) (Memop Quadword (%% (rsp,432))) *) + 0x4c; 0x13; 0x8c; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* ADC (% r9) (Memop Quadword (%% (rsp,440))) *) + 0x4c; 0x13; 0x94; 0x24; 0xc0; 0x01; 0x00; 0x00; + (* ADC (% r10) (Memop Quadword (%% (rsp,448))) *) + 0x4c; 0x13; 0x9c; 0x24; 0xc8; 0x01; 0x00; 0x00; + (* ADC (% r11) (Memop Quadword (%% (rsp,456))) *) + 0x4c; 0x13; 0xa4; 0x24; 0xd0; 0x01; 0x00; 0x00; + (* ADC (% r12) (Memop Quadword (%% (rsp,464))) *) + 0x4c; 0x13; 0xac; 0x24; 0xd8; 0x01; 0x00; 0x00; + (* ADC (% r13) (Memop Quadword (%% (rsp,472))) *) + 0x4c; 0x13; 0xb4; 0x24; 0xe0; 0x01; 0x00; 0x00; + (* ADC (% r14) (Memop Quadword (%% (rsp,480))) *) + 0x4c; 0x13; 0xbc; 0x24; 0xe8; 0x01; 0x00; 0x00; + (* ADC (% r15) (Memop Quadword (%% (rsp,488))) *) + 0x48; 0x81; 0xd5; 0x00; 0xfe; 0xff; 0xff; + (* ADC (% rbp) (Imm32 (word 4294966784)) *) + 0xf5; (* CMC *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x84; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,288))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x8c; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,296))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x94; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,304))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x9c; 0x24; 0x38; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,312))) (% r11) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xa4; 0x24; 0x40; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,320))) (% r12) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xac; 0x24; 0x48; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,328))) (% r13) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xb4; 0x24; 0x50; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,336))) (% r14) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xbc; 0x24; 0x58; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,344))) (% r15) *) + 0x48; 0x83; 0xdd; 0x00; (* SBB (% rbp) (Imm8 (word 0)) *) + 0x48; 0x81; 0xe5; 0xff; 0x01; 0x00; 0x00; + (* AND (% rbp) (Imm32 (word 511)) *) + 0x48; 0x89; 0xac; 0x24; 0x60; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,352))) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x94; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,144))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x8c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x4c; 0x89; 0x84; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,432))) (% r8) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x94; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xa4; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xac; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% r13,% rbx) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x49; 0x11; 0xdc; (* ADC (% r12) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xb4; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% r14,% rbx) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x49; 0x11; 0xdd; (* ADC (% r13) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xbc; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% r15,% rbx) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x84; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% r8,% rbx) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x49; 0x11; 0xe8; (* ADC (% r8) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,152))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0x4c; 0x89; 0x8c; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,440))) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x8c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% r9,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcd; + (* ADOX (% r9) (% rbp) *) + 0x49; 0x11; 0xe9; (* ADC (% r9) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,160))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x4c; 0x89; 0x94; 0x24; 0xc0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,448))) (% r10) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x94; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd5; + (* ADOX (% r10) (% rbp) *) + 0x49; 0x11; 0xea; (* ADC (% r10) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,168))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x4c; 0x89; 0x9c; 0x24; 0xc8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,456))) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdd; + (* ADOX (% r11) (% rbp) *) + 0x49; 0x11; 0xeb; (* ADC (% r11) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,176))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4c; 0x89; 0xa4; 0x24; 0xd0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,464))) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xa4; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe5; + (* ADOX (% r12) (% rbp) *) + 0x49; 0x11; 0xec; (* ADC (% r12) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,184))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0x4c; 0x89; 0xac; 0x24; 0xd8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,472))) (% r13) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xac; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xed; + (* ADOX (% r13) (% rbp) *) + 0x49; 0x11; 0xed; (* ADC (% r13) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,192))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x4c; 0x89; 0xb4; 0x24; 0xe0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,480))) (% r14) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xb4; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf5; + (* ADOX (% r14) (% rbp) *) + 0x49; 0x11; 0xee; (* ADC (% r14) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,200))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0x4c; 0x89; 0xbc; 0x24; 0xe8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,488))) (% r15) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xbc; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADOX (% r15) (% rbp) *) + 0x49; 0x11; 0xef; (* ADC (% r15) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,280))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xdd; + (* ADOX (% rbx) (% rbp) *) + 0x48; 0x11; 0xdd; (* ADC (% rbp) (% rbx) *) + 0x48; 0x8b; 0x94; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,208))) *) + 0x31; 0xc0; (* XOR (% eax) (% eax) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% rbp) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0x48; 0x11; 0xc5; (* ADC (% rbp) (% rax) *) + 0x4c; 0x89; 0xc0; (* MOV (% rax) (% r8) *) + 0x48; 0x25; 0xff; 0x01; 0x00; 0x00; + (* AND (% rax) (Imm32 (word 511)) *) + 0x4d; 0x0f; 0xac; 0xc8; 0x09; + (* SHRD (% r8) (% r9) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xd1; 0x09; + (* SHRD (% r9) (% r10) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xda; 0x09; + (* SHRD (% r10) (% r11) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xe3; 0x09; + (* SHRD (% r11) (% r12) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xec; 0x09; + (* SHRD (% r12) (% r13) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xf5; 0x09; + (* SHRD (% r13) (% r14) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xfe; 0x09; + (* SHRD (% r14) (% r15) (Imm8 (word 9)) *) + 0x49; 0x0f; 0xac; 0xef; 0x09; + (* SHRD (% r15) (% rbp) (Imm8 (word 9)) *) + 0x48; 0xc1; 0xed; 0x09; (* SHR (% rbp) (Imm8 (word 9)) *) + 0x48; 0x01; 0xc5; (* ADD (% rbp) (% rax) *) + 0xf9; (* STCF *) + 0x4c; 0x13; 0x84; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* ADC (% r8) (Memop Quadword (%% (rsp,432))) *) + 0x4c; 0x13; 0x8c; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* ADC (% r9) (Memop Quadword (%% (rsp,440))) *) + 0x4c; 0x13; 0x94; 0x24; 0xc0; 0x01; 0x00; 0x00; + (* ADC (% r10) (Memop Quadword (%% (rsp,448))) *) + 0x4c; 0x13; 0x9c; 0x24; 0xc8; 0x01; 0x00; 0x00; + (* ADC (% r11) (Memop Quadword (%% (rsp,456))) *) + 0x4c; 0x13; 0xa4; 0x24; 0xd0; 0x01; 0x00; 0x00; + (* ADC (% r12) (Memop Quadword (%% (rsp,464))) *) + 0x4c; 0x13; 0xac; 0x24; 0xd8; 0x01; 0x00; 0x00; + (* ADC (% r13) (Memop Quadword (%% (rsp,472))) *) + 0x4c; 0x13; 0xb4; 0x24; 0xe0; 0x01; 0x00; 0x00; + (* ADC (% r14) (Memop Quadword (%% (rsp,480))) *) + 0x4c; 0x13; 0xbc; 0x24; 0xe8; 0x01; 0x00; 0x00; + (* ADC (% r15) (Memop Quadword (%% (rsp,488))) *) + 0x48; 0x81; 0xd5; 0x00; 0xfe; 0xff; 0xff; + (* ADC (% rbp) (Imm32 (word 4294966784)) *) + 0xf5; (* CMC *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x84; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,144))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x8c; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,152))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x94; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,160))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x9c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,168))) (% r11) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xa4; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,176))) (% r12) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xac; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,184))) (% r13) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xb4; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,192))) (% r14) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xbc; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,200))) (% r15) *) + 0x48; 0x83; 0xdd; 0x00; (* SBB (% rbp) (Imm8 (word 0)) *) + 0x48; 0x81; 0xe5; 0xff; 0x01; 0x00; 0x00; + (* AND (% rbp) (Imm32 (word 511)) *) + 0x48; 0x89; 0xac; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,208))) (% rbp) *) + 0x48; 0x8b; 0x04; 0x24; (* MOV (% rax) (Memop Quadword (%% (rsp,0))) *) + 0x48; 0x2b; 0x84; 0x24; 0x20; 0x01; 0x00; 0x00; + (* SUB (% rax) (Memop Quadword (%% (rsp,288))) *) + 0x48; 0x8b; 0x54; 0x24; 0x08; + (* MOV (% rdx) (Memop Quadword (%% (rsp,8))) *) + 0x48; 0x1b; 0x94; 0x24; 0x28; 0x01; 0x00; 0x00; + (* SBB (% rdx) (Memop Quadword (%% (rsp,296))) *) + 0x4c; 0x8b; 0x44; 0x24; 0x10; + (* MOV (% r8) (Memop Quadword (%% (rsp,16))) *) + 0x4c; 0x1b; 0x84; 0x24; 0x30; 0x01; 0x00; 0x00; + (* SBB (% r8) (Memop Quadword (%% (rsp,304))) *) + 0x4c; 0x8b; 0x4c; 0x24; 0x18; + (* MOV (% r9) (Memop Quadword (%% (rsp,24))) *) + 0x4c; 0x1b; 0x8c; 0x24; 0x38; 0x01; 0x00; 0x00; + (* SBB (% r9) (Memop Quadword (%% (rsp,312))) *) + 0x4c; 0x8b; 0x54; 0x24; 0x20; + (* MOV (% r10) (Memop Quadword (%% (rsp,32))) *) + 0x4c; 0x1b; 0x94; 0x24; 0x40; 0x01; 0x00; 0x00; + (* SBB (% r10) (Memop Quadword (%% (rsp,320))) *) + 0x4c; 0x8b; 0x5c; 0x24; 0x28; + (* MOV (% r11) (Memop Quadword (%% (rsp,40))) *) + 0x4c; 0x1b; 0x9c; 0x24; 0x48; 0x01; 0x00; 0x00; + (* SBB (% r11) (Memop Quadword (%% (rsp,328))) *) + 0x4c; 0x8b; 0x64; 0x24; 0x30; + (* MOV (% r12) (Memop Quadword (%% (rsp,48))) *) + 0x4c; 0x1b; 0xa4; 0x24; 0x50; 0x01; 0x00; 0x00; + (* SBB (% r12) (Memop Quadword (%% (rsp,336))) *) + 0x4c; 0x8b; 0x6c; 0x24; 0x38; + (* MOV (% r13) (Memop Quadword (%% (rsp,56))) *) + 0x4c; 0x1b; 0xac; 0x24; 0x58; 0x01; 0x00; 0x00; + (* SBB (% r13) (Memop Quadword (%% (rsp,344))) *) + 0x4c; 0x8b; 0x74; 0x24; 0x40; + (* MOV (% r14) (Memop Quadword (%% (rsp,64))) *) + 0x4c; 0x1b; 0xb4; 0x24; 0x60; 0x01; 0x00; 0x00; + (* SBB (% r14) (Memop Quadword (%% (rsp,352))) *) + 0x48; 0x83; 0xd8; 0x00; (* SBB (% rax) (Imm8 (word 0)) *) + 0x48; 0x89; 0x07; (* MOV (Memop Quadword (%% (rdi,0))) (% rax) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x48; 0x89; 0x57; 0x08; (* MOV (Memop Quadword (%% (rdi,8))) (% rdx) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x47; 0x10; (* MOV (Memop Quadword (%% (rdi,16))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x4f; 0x18; (* MOV (Memop Quadword (%% (rdi,24))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x57; 0x20; (* MOV (Memop Quadword (%% (rdi,32))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x5f; 0x28; (* MOV (Memop Quadword (%% (rdi,40))) (% r11) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x67; 0x30; (* MOV (Memop Quadword (%% (rdi,48))) (% r12) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x6f; 0x38; (* MOV (Memop Quadword (%% (rdi,56))) (% r13) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x49; 0x81; 0xe6; 0xff; 0x01; 0x00; 0x00; + (* AND (% r14) (Imm32 (word 511)) *) + 0x4c; 0x89; 0x77; 0x40; (* MOV (Memop Quadword (%% (rdi,64))) (% r14) *) + 0x48; 0x8b; 0x84; 0x24; 0x90; 0x00; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,144))) *) + 0x48; 0x2b; 0x84; 0x24; 0x20; 0x01; 0x00; 0x00; + (* SUB (% rax) (Memop Quadword (%% (rsp,288))) *) + 0x48; 0x8b; 0x94; 0x24; 0x98; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,152))) *) + 0x48; 0x1b; 0x94; 0x24; 0x28; 0x01; 0x00; 0x00; + (* SBB (% rdx) (Memop Quadword (%% (rsp,296))) *) + 0x4c; 0x8b; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* MOV (% r8) (Memop Quadword (%% (rsp,160))) *) + 0x4c; 0x1b; 0x84; 0x24; 0x30; 0x01; 0x00; 0x00; + (* SBB (% r8) (Memop Quadword (%% (rsp,304))) *) + 0x4c; 0x8b; 0x8c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* MOV (% r9) (Memop Quadword (%% (rsp,168))) *) + 0x4c; 0x1b; 0x8c; 0x24; 0x38; 0x01; 0x00; 0x00; + (* SBB (% r9) (Memop Quadword (%% (rsp,312))) *) + 0x4c; 0x8b; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* MOV (% r10) (Memop Quadword (%% (rsp,176))) *) + 0x4c; 0x1b; 0x94; 0x24; 0x40; 0x01; 0x00; 0x00; + (* SBB (% r10) (Memop Quadword (%% (rsp,320))) *) + 0x4c; 0x8b; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* MOV (% r11) (Memop Quadword (%% (rsp,184))) *) + 0x4c; 0x1b; 0x9c; 0x24; 0x48; 0x01; 0x00; 0x00; + (* SBB (% r11) (Memop Quadword (%% (rsp,328))) *) + 0x4c; 0x8b; 0xa4; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* MOV (% r12) (Memop Quadword (%% (rsp,192))) *) + 0x4c; 0x1b; 0xa4; 0x24; 0x50; 0x01; 0x00; 0x00; + (* SBB (% r12) (Memop Quadword (%% (rsp,336))) *) + 0x4c; 0x8b; 0xac; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* MOV (% r13) (Memop Quadword (%% (rsp,200))) *) + 0x4c; 0x1b; 0xac; 0x24; 0x58; 0x01; 0x00; 0x00; + (* SBB (% r13) (Memop Quadword (%% (rsp,344))) *) + 0x4c; 0x8b; 0xb4; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* MOV (% r14) (Memop Quadword (%% (rsp,208))) *) + 0x4c; 0x1b; 0xb4; 0x24; 0x60; 0x01; 0x00; 0x00; + (* SBB (% r14) (Memop Quadword (%% (rsp,352))) *) + 0x48; 0x83; 0xd8; 0x00; (* SBB (% rax) (Imm8 (word 0)) *) + 0x48; 0x89; 0x84; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,216))) (% rax) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x48; 0x89; 0x94; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,224))) (% rdx) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x84; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,232))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x8c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,240))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x94; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,248))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,256))) (% r11) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xa4; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,264))) (% r12) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xac; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,272))) (% r13) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x49; 0x81; 0xe6; 0xff; 0x01; 0x00; 0x00; + (* AND (% r14) (Imm32 (word 511)) *) + 0x4c; 0x89; 0xb4; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,280))) (% r14) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x96; 0x90; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,144))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x8c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x4c; 0x89; 0x84; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,432))) (% r8) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x94; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xa4; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xac; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% r13,% rbx) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x49; 0x11; 0xdc; (* ADC (% r12) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xb4; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% r14,% rbx) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x49; 0x11; 0xdd; (* ADC (% r13) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xbc; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% r15,% rbx) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x84; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% r8,% rbx) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x49; 0x11; 0xe8; (* ADC (% r8) (% rbp) *) + 0x48; 0x8b; 0x96; 0x98; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,152))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0x4c; 0x89; 0x8c; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,440))) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x8c; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% r9,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcd; + (* ADOX (% r9) (% rbp) *) + 0x49; 0x11; 0xe9; (* ADC (% r9) (% rbp) *) + 0x48; 0x8b; 0x96; 0xa0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,160))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x4c; 0x89; 0x94; 0x24; 0xc0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,448))) (% r10) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x94; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd5; + (* ADOX (% r10) (% rbp) *) + 0x49; 0x11; 0xea; (* ADC (% r10) (% rbp) *) + 0x48; 0x8b; 0x96; 0xa8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,168))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x4c; 0x89; 0x9c; 0x24; 0xc8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,456))) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdd; + (* ADOX (% r11) (% rbp) *) + 0x49; 0x11; 0xeb; (* ADC (% r11) (% rbp) *) + 0x48; 0x8b; 0x96; 0xb0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,176))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4c; 0x89; 0xa4; 0x24; 0xd0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,464))) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xa4; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe5; + (* ADOX (% r12) (% rbp) *) + 0x49; 0x11; 0xec; (* ADC (% r12) (% rbp) *) + 0x48; 0x8b; 0x96; 0xb8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,184))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0x4c; 0x89; 0xac; 0x24; 0xd8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,472))) (% r13) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xac; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xed; + (* ADOX (% r13) (% rbp) *) + 0x49; 0x11; 0xed; (* ADC (% r13) (% rbp) *) + 0x48; 0x8b; 0x96; 0xc0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,192))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x4c; 0x89; 0xb4; 0x24; 0xe0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,480))) (% r14) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xb4; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf5; + (* ADOX (% r14) (% rbp) *) + 0x49; 0x11; 0xee; (* ADC (% r14) (% rbp) *) + 0x48; 0x8b; 0x96; 0xc8; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,200))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0x4c; 0x89; 0xbc; 0x24; 0xe8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,488))) (% r15) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xbc; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADOX (% r15) (% rbp) *) + 0x49; 0x11; 0xef; (* ADC (% r15) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0xa8; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,424))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x90; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,144))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x98; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,152))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xa0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,160))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xa8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,168))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,176))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xb8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,184))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xc0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,192))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0xc8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,200))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xdd; + (* ADOX (% rbx) (% rbp) *) + 0x48; 0x11; 0xdd; (* ADC (% rbp) (% rbx) *) + 0x48; 0x8b; 0x96; 0xd0; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,208))) *) + 0x31; 0xc0; (* XOR (% eax) (% eax) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x68; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,360))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x70; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,368))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x78; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,376))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,384))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,392))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x90; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,400))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x98; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,408))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa0; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,416))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% rbp) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xa8; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,424))) *) + 0x48; 0x11; 0xc5; (* ADC (% rbp) (% rax) *) + 0x4c; 0x89; 0xc0; (* MOV (% rax) (% r8) *) + 0x48; 0x25; 0xff; 0x01; 0x00; 0x00; + (* AND (% rax) (Imm32 (word 511)) *) + 0x4d; 0x0f; 0xac; 0xc8; 0x09; + (* SHRD (% r8) (% r9) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xd1; 0x09; + (* SHRD (% r9) (% r10) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xda; 0x09; + (* SHRD (% r10) (% r11) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xe3; 0x09; + (* SHRD (% r11) (% r12) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xec; 0x09; + (* SHRD (% r12) (% r13) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xf5; 0x09; + (* SHRD (% r13) (% r14) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xfe; 0x09; + (* SHRD (% r14) (% r15) (Imm8 (word 9)) *) + 0x49; 0x0f; 0xac; 0xef; 0x09; + (* SHRD (% r15) (% rbp) (Imm8 (word 9)) *) + 0x48; 0xc1; 0xed; 0x09; (* SHR (% rbp) (Imm8 (word 9)) *) + 0x48; 0x01; 0xc5; (* ADD (% rbp) (% rax) *) + 0xf9; (* STCF *) + 0x4c; 0x13; 0x84; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* ADC (% r8) (Memop Quadword (%% (rsp,432))) *) + 0x4c; 0x13; 0x8c; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* ADC (% r9) (Memop Quadword (%% (rsp,440))) *) + 0x4c; 0x13; 0x94; 0x24; 0xc0; 0x01; 0x00; 0x00; + (* ADC (% r10) (Memop Quadword (%% (rsp,448))) *) + 0x4c; 0x13; 0x9c; 0x24; 0xc8; 0x01; 0x00; 0x00; + (* ADC (% r11) (Memop Quadword (%% (rsp,456))) *) + 0x4c; 0x13; 0xa4; 0x24; 0xd0; 0x01; 0x00; 0x00; + (* ADC (% r12) (Memop Quadword (%% (rsp,464))) *) + 0x4c; 0x13; 0xac; 0x24; 0xd8; 0x01; 0x00; 0x00; + (* ADC (% r13) (Memop Quadword (%% (rsp,472))) *) + 0x4c; 0x13; 0xb4; 0x24; 0xe0; 0x01; 0x00; 0x00; + (* ADC (% r14) (Memop Quadword (%% (rsp,480))) *) + 0x4c; 0x13; 0xbc; 0x24; 0xe8; 0x01; 0x00; 0x00; + (* ADC (% r15) (Memop Quadword (%% (rsp,488))) *) + 0x48; 0x81; 0xd5; 0x00; 0xfe; 0xff; 0xff; + (* ADC (% rbp) (Imm32 (word 4294966784)) *) + 0xf5; (* CMC *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x87; 0x90; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rdi,144))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x8f; 0x98; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rdi,152))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x97; 0xa0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rdi,160))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x9f; 0xa8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rdi,168))) (% r11) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xa7; 0xb0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rdi,176))) (% r12) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xaf; 0xb8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rdi,184))) (% r13) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xb7; 0xc0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rdi,192))) (% r14) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xbf; 0xc8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rdi,200))) (% r15) *) + 0x48; 0x83; 0xdd; 0x00; (* SBB (% rbp) (Imm8 (word 0)) *) + 0x48; 0x81; 0xe5; 0xff; 0x01; 0x00; 0x00; + (* AND (% rbp) (Imm32 (word 511)) *) + 0x48; 0x89; 0xaf; 0xd0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rdi,208))) (% rbp) *) + 0x48; 0x8b; 0x07; (* MOV (% rax) (Memop Quadword (%% (rdi,0))) *) + 0x48; 0x2b; 0x84; 0x24; 0x90; 0x00; 0x00; 0x00; + (* SUB (% rax) (Memop Quadword (%% (rsp,144))) *) + 0x48; 0x8b; 0x57; 0x08; (* MOV (% rdx) (Memop Quadword (%% (rdi,8))) *) + 0x48; 0x1b; 0x94; 0x24; 0x98; 0x00; 0x00; 0x00; + (* SBB (% rdx) (Memop Quadword (%% (rsp,152))) *) + 0x4c; 0x8b; 0x47; 0x10; (* MOV (% r8) (Memop Quadword (%% (rdi,16))) *) + 0x4c; 0x1b; 0x84; 0x24; 0xa0; 0x00; 0x00; 0x00; + (* SBB (% r8) (Memop Quadword (%% (rsp,160))) *) + 0x4c; 0x8b; 0x4f; 0x18; (* MOV (% r9) (Memop Quadword (%% (rdi,24))) *) + 0x4c; 0x1b; 0x8c; 0x24; 0xa8; 0x00; 0x00; 0x00; + (* SBB (% r9) (Memop Quadword (%% (rsp,168))) *) + 0x4c; 0x8b; 0x57; 0x20; (* MOV (% r10) (Memop Quadword (%% (rdi,32))) *) + 0x4c; 0x1b; 0x94; 0x24; 0xb0; 0x00; 0x00; 0x00; + (* SBB (% r10) (Memop Quadword (%% (rsp,176))) *) + 0x4c; 0x8b; 0x5f; 0x28; (* MOV (% r11) (Memop Quadword (%% (rdi,40))) *) + 0x4c; 0x1b; 0x9c; 0x24; 0xb8; 0x00; 0x00; 0x00; + (* SBB (% r11) (Memop Quadword (%% (rsp,184))) *) + 0x4c; 0x8b; 0x67; 0x30; (* MOV (% r12) (Memop Quadword (%% (rdi,48))) *) + 0x4c; 0x1b; 0xa4; 0x24; 0xc0; 0x00; 0x00; 0x00; + (* SBB (% r12) (Memop Quadword (%% (rsp,192))) *) + 0x4c; 0x8b; 0x6f; 0x38; (* MOV (% r13) (Memop Quadword (%% (rdi,56))) *) + 0x4c; 0x1b; 0xac; 0x24; 0xc8; 0x00; 0x00; 0x00; + (* SBB (% r13) (Memop Quadword (%% (rsp,200))) *) + 0x4c; 0x8b; 0x77; 0x40; (* MOV (% r14) (Memop Quadword (%% (rdi,64))) *) + 0x4c; 0x1b; 0xb4; 0x24; 0xd0; 0x00; 0x00; 0x00; + (* SBB (% r14) (Memop Quadword (%% (rsp,208))) *) + 0x48; 0x83; 0xd8; 0x00; (* SBB (% rax) (Imm8 (word 0)) *) + 0x48; 0x89; 0x07; (* MOV (Memop Quadword (%% (rdi,0))) (% rax) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x48; 0x89; 0x57; 0x08; (* MOV (Memop Quadword (%% (rdi,8))) (% rdx) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x47; 0x10; (* MOV (Memop Quadword (%% (rdi,16))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x4f; 0x18; (* MOV (Memop Quadword (%% (rdi,24))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x57; 0x20; (* MOV (Memop Quadword (%% (rdi,32))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x5f; 0x28; (* MOV (Memop Quadword (%% (rdi,40))) (% r11) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x67; 0x30; (* MOV (Memop Quadword (%% (rdi,48))) (% r12) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x6f; 0x38; (* MOV (Memop Quadword (%% (rdi,56))) (% r13) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x49; 0x81; 0xe6; 0xff; 0x01; 0x00; 0x00; + (* AND (% r14) (Imm32 (word 511)) *) + 0x4c; 0x89; 0x77; 0x40; (* MOV (Memop Quadword (%% (rdi,64))) (% r14) *) + 0x48; 0x8b; 0x84; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,288))) *) + 0x48; 0x2b; 0x07; (* SUB (% rax) (Memop Quadword (%% (rdi,0))) *) + 0x48; 0x8b; 0x94; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,296))) *) + 0x48; 0x1b; 0x57; 0x08; (* SBB (% rdx) (Memop Quadword (%% (rdi,8))) *) + 0x4c; 0x8b; 0x84; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MOV (% r8) (Memop Quadword (%% (rsp,304))) *) + 0x4c; 0x1b; 0x47; 0x10; (* SBB (% r8) (Memop Quadword (%% (rdi,16))) *) + 0x4c; 0x8b; 0x8c; 0x24; 0x38; 0x01; 0x00; 0x00; + (* MOV (% r9) (Memop Quadword (%% (rsp,312))) *) + 0x4c; 0x1b; 0x4f; 0x18; (* SBB (% r9) (Memop Quadword (%% (rdi,24))) *) + 0x4c; 0x8b; 0x94; 0x24; 0x40; 0x01; 0x00; 0x00; + (* MOV (% r10) (Memop Quadword (%% (rsp,320))) *) + 0x4c; 0x1b; 0x57; 0x20; (* SBB (% r10) (Memop Quadword (%% (rdi,32))) *) + 0x4c; 0x8b; 0x9c; 0x24; 0x48; 0x01; 0x00; 0x00; + (* MOV (% r11) (Memop Quadword (%% (rsp,328))) *) + 0x4c; 0x1b; 0x5f; 0x28; (* SBB (% r11) (Memop Quadword (%% (rdi,40))) *) + 0x4c; 0x8b; 0xa4; 0x24; 0x50; 0x01; 0x00; 0x00; + (* MOV (% r12) (Memop Quadword (%% (rsp,336))) *) + 0x4c; 0x1b; 0x67; 0x30; (* SBB (% r12) (Memop Quadword (%% (rdi,48))) *) + 0x4c; 0x8b; 0xac; 0x24; 0x58; 0x01; 0x00; 0x00; + (* MOV (% r13) (Memop Quadword (%% (rsp,344))) *) + 0x4c; 0x1b; 0x6f; 0x38; (* SBB (% r13) (Memop Quadword (%% (rdi,56))) *) + 0x4c; 0x8b; 0xb4; 0x24; 0x60; 0x01; 0x00; 0x00; + (* MOV (% r14) (Memop Quadword (%% (rsp,352))) *) + 0x4c; 0x1b; 0x77; 0x40; (* SBB (% r14) (Memop Quadword (%% (rdi,64))) *) + 0x48; 0x83; 0xd8; 0x00; (* SBB (% rax) (Imm8 (word 0)) *) + 0x48; 0x89; 0x84; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,288))) (% rax) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x48; 0x89; 0x94; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,296))) (% rdx) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x84; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,304))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x8c; 0x24; 0x38; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,312))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x94; 0x24; 0x40; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,320))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x9c; 0x24; 0x48; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,328))) (% r11) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xa4; 0x24; 0x50; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,336))) (% r12) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xac; 0x24; 0x58; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,344))) (% r13) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x49; 0x81; 0xe6; 0xff; 0x01; 0x00; 0x00; + (* AND (% r14) (Imm32 (word 511)) *) + 0x4c; 0x89; 0xb4; 0x24; 0x60; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,352))) (% r14) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x56; 0x48; (* MOV (% rdx) (Memop Quadword (%% (rsi,72))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x8c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x4c; 0x89; 0x84; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,432))) (% r8) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x94; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xa4; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xac; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% r13,% rbx) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x49; 0x11; 0xdc; (* ADC (% r12) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xb4; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% r14,% rbx) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x49; 0x11; 0xdd; (* ADC (% r13) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0xbc; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% r15,% rbx) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x84; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% r8,% rbx) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x49; 0x11; 0xe8; (* ADC (% r8) (% rbp) *) + 0x48; 0x8b; 0x56; 0x50; (* MOV (% rdx) (Memop Quadword (%% (rsi,80))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0x4c; 0x89; 0x8c; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,440))) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x8c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% r9,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcd; + (* ADOX (% r9) (% rbp) *) + 0x49; 0x11; 0xe9; (* ADC (% r9) (% rbp) *) + 0x48; 0x8b; 0x56; 0x58; (* MOV (% rdx) (Memop Quadword (%% (rsi,88))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x4c; 0x89; 0x94; 0x24; 0xc0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,448))) (% r10) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x94; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd5; + (* ADOX (% r10) (% rbp) *) + 0x49; 0x11; 0xea; (* ADC (% r10) (% rbp) *) + 0x48; 0x8b; 0x56; 0x60; (* MOV (% rdx) (Memop Quadword (%% (rsi,96))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x4c; 0x89; 0x9c; 0x24; 0xc8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,456))) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdd; + (* ADOX (% r11) (% rbp) *) + 0x49; 0x11; 0xeb; (* ADC (% r11) (% rbp) *) + 0x48; 0x8b; 0x56; 0x68; (* MOV (% rdx) (Memop Quadword (%% (rsi,104))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4c; 0x89; 0xa4; 0x24; 0xd0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,464))) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xa4; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe5; + (* ADOX (% r12) (% rbp) *) + 0x49; 0x11; 0xec; (* ADC (% r12) (% rbp) *) + 0x48; 0x8b; 0x56; 0x70; (* MOV (% rdx) (Memop Quadword (%% (rsi,112))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0x4c; 0x89; 0xac; 0x24; 0xd8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,472))) (% r13) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xac; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xed; + (* ADOX (% r13) (% rbp) *) + 0x49; 0x11; 0xed; (* ADC (% r13) (% rbp) *) + 0x48; 0x8b; 0x56; 0x78; (* MOV (% rdx) (Memop Quadword (%% (rsi,120))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x4c; 0x89; 0xb4; 0x24; 0xe0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,480))) (% r14) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xb4; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf5; + (* ADOX (% r14) (% rbp) *) + 0x49; 0x11; 0xee; (* ADC (% r14) (% rbp) *) + 0x48; 0x8b; 0x96; 0x80; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,128))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0x4c; 0x89; 0xbc; 0x24; 0xe8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,488))) (% r15) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xbc; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADOX (% r15) (% rbp) *) + 0x49; 0x11; 0xef; (* ADC (% r15) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,280))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x58; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5e; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9e; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsi,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xdd; + (* ADOX (% rbx) (% rbp) *) + 0x48; 0x11; 0xdd; (* ADC (% rbp) (% rbx) *) + 0x48; 0x8b; 0x96; 0x88; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsi,136))) *) + 0x31; 0xc0; (* XOR (% eax) (% eax) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,216))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,224))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,232))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,240))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,248))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,256))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,264))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,272))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% rbp) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,280))) *) + 0x48; 0x11; 0xc5; (* ADC (% rbp) (% rax) *) + 0x4c; 0x89; 0xc0; (* MOV (% rax) (% r8) *) + 0x48; 0x25; 0xff; 0x01; 0x00; 0x00; + (* AND (% rax) (Imm32 (word 511)) *) + 0x4d; 0x0f; 0xac; 0xc8; 0x09; + (* SHRD (% r8) (% r9) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xd1; 0x09; + (* SHRD (% r9) (% r10) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xda; 0x09; + (* SHRD (% r10) (% r11) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xe3; 0x09; + (* SHRD (% r11) (% r12) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xec; 0x09; + (* SHRD (% r12) (% r13) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xf5; 0x09; + (* SHRD (% r13) (% r14) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xfe; 0x09; + (* SHRD (% r14) (% r15) (Imm8 (word 9)) *) + 0x49; 0x0f; 0xac; 0xef; 0x09; + (* SHRD (% r15) (% rbp) (Imm8 (word 9)) *) + 0x48; 0xc1; 0xed; 0x09; (* SHR (% rbp) (Imm8 (word 9)) *) + 0x48; 0x01; 0xc5; (* ADD (% rbp) (% rax) *) + 0xf9; (* STCF *) + 0x4c; 0x13; 0x84; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* ADC (% r8) (Memop Quadword (%% (rsp,432))) *) + 0x4c; 0x13; 0x8c; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* ADC (% r9) (Memop Quadword (%% (rsp,440))) *) + 0x4c; 0x13; 0x94; 0x24; 0xc0; 0x01; 0x00; 0x00; + (* ADC (% r10) (Memop Quadword (%% (rsp,448))) *) + 0x4c; 0x13; 0x9c; 0x24; 0xc8; 0x01; 0x00; 0x00; + (* ADC (% r11) (Memop Quadword (%% (rsp,456))) *) + 0x4c; 0x13; 0xa4; 0x24; 0xd0; 0x01; 0x00; 0x00; + (* ADC (% r12) (Memop Quadword (%% (rsp,464))) *) + 0x4c; 0x13; 0xac; 0x24; 0xd8; 0x01; 0x00; 0x00; + (* ADC (% r13) (Memop Quadword (%% (rsp,472))) *) + 0x4c; 0x13; 0xb4; 0x24; 0xe0; 0x01; 0x00; 0x00; + (* ADC (% r14) (Memop Quadword (%% (rsp,480))) *) + 0x4c; 0x13; 0xbc; 0x24; 0xe8; 0x01; 0x00; 0x00; + (* ADC (% r15) (Memop Quadword (%% (rsp,488))) *) + 0x48; 0x81; 0xd5; 0x00; 0xfe; 0xff; 0xff; + (* ADC (% rbp) (Imm32 (word 4294966784)) *) + 0xf5; (* CMC *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x84; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,216))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x8c; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,224))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x94; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,232))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x9c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,240))) (% r11) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xa4; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,248))) (% r12) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xac; 0x24; 0x00; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,256))) (% r13) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xb4; 0x24; 0x08; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,264))) (% r14) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xbc; 0x24; 0x10; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,272))) (% r15) *) + 0x48; 0x83; 0xdd; 0x00; (* SBB (% rbp) (Imm8 (word 0)) *) + 0x48; 0x81; 0xe5; 0xff; 0x01; 0x00; 0x00; + (* AND (% rbp) (Imm32 (word 511)) *) + 0x48; 0x89; 0xac; 0x24; 0x18; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,280))) (% rbp) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0x48; 0x8b; 0x94; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,288))) *) + 0xc4; 0x62; 0xbb; 0xf6; 0x4c; 0x24; 0x48; + (* MULX4 (% r9,% r8) (% rdx,Memop Quadword (%% (rsp,72))) *) + 0x4c; 0x89; 0x84; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,432))) (% r8) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x54; 0x24; 0x50; + (* MULX4 (% r10,% rbx) (% rdx,Memop Quadword (%% (rsp,80))) *) + 0x49; 0x11; 0xd9; (* ADC (% r9) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x5c; 0x24; 0x58; + (* MULX4 (% r11,% rbx) (% rdx,Memop Quadword (%% (rsp,88))) *) + 0x49; 0x11; 0xda; (* ADC (% r10) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x64; 0x24; 0x60; + (* MULX4 (% r12,% rbx) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x49; 0x11; 0xdb; (* ADC (% r11) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x6c; 0x24; 0x68; + (* MULX4 (% r13,% rbx) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x49; 0x11; 0xdc; (* ADC (% r12) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x74; 0x24; 0x70; + (* MULX4 (% r14,% rbx) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x49; 0x11; 0xdd; (* ADC (% r13) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x7c; 0x24; 0x78; + (* MULX4 (% r15,% rbx) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x49; 0x11; 0xde; (* ADC (% r14) (% rbx) *) + 0xc4; 0x62; 0xe3; 0xf6; 0x84; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% r8,% rbx) (% rdx,Memop Quadword (%% (rsp,128))) *) + 0x49; 0x11; 0xdf; (* ADC (% r15) (% rbx) *) + 0x49; 0x11; 0xe8; (* ADC (% r8) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,296))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0x4c; 0x89; 0x8c; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,440))) (% r9) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x58; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x8c; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% r9,% rax) (% rdx,Memop Quadword (%% (rsp,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcd; + (* ADOX (% r9) (% rbp) *) + 0x49; 0x11; 0xe9; (* ADC (% r9) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,304))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0x4c; 0x89; 0x94; 0x24; 0xc0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,448))) (% r10) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x58; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x94; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% r10,% rax) (% rdx,Memop Quadword (%% (rsp,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd5; + (* ADOX (% r10) (% rbp) *) + 0x49; 0x11; 0xea; (* ADC (% r10) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0x38; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,312))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0x4c; 0x89; 0x9c; 0x24; 0xc8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,456))) (% r11) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x58; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% r11,% rax) (% rdx,Memop Quadword (%% (rsp,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdd; + (* ADOX (% r11) (% rbp) *) + 0x49; 0x11; 0xeb; (* ADC (% r11) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0x40; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,320))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0x4c; 0x89; 0xa4; 0x24; 0xd0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,464))) (% r12) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x58; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xa4; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% r12,% rax) (% rdx,Memop Quadword (%% (rsp,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe5; + (* ADOX (% r12) (% rbp) *) + 0x49; 0x11; 0xec; (* ADC (% r12) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0x48; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,328))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0x4c; 0x89; 0xac; 0x24; 0xd8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,472))) (% r13) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x58; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xac; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% r13,% rax) (% rdx,Memop Quadword (%% (rsp,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xed; + (* ADOX (% r13) (% rbp) *) + 0x49; 0x11; 0xed; (* ADC (% r13) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0x50; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,336))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0x4c; 0x89; 0xb4; 0x24; 0xe0; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,480))) (% r14) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x58; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xb4; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% r14,% rax) (% rdx,Memop Quadword (%% (rsp,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf5; + (* ADOX (% r14) (% rbp) *) + 0x49; 0x11; 0xee; (* ADC (% r14) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0x58; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,344))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xc3; + (* ADOX (% r8) (% rbx) *) + 0x4c; 0x89; 0xbc; 0x24; 0xe8; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,488))) (% r15) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x58; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0x62; 0xfb; 0xf6; 0xbc; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% r15,% rax) (% rdx,Memop Quadword (%% (rsp,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfd; + (* ADOX (% r15) (% rbp) *) + 0x49; 0x11; 0xef; (* ADC (% r15) (% rbp) *) + 0x48; 0x8b; 0x94; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,136))) *) + 0x31; 0xed; (* XOR (% ebp) (% ebp) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,288))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,296))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,304))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x38; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,312))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x40; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,320))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x48; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,328))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x50; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,336))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x58; 0x01; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,344))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xdd; + (* ADOX (% rbx) (% rbp) *) + 0x48; 0x11; 0xdd; (* ADC (% rbp) (% rbx) *) + 0x48; 0x8b; 0x94; 0x24; 0x60; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,352))) *) + 0x31; 0xc0; (* XOR (% eax) (% eax) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x48; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,72))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc0; + (* ADCX (% r8) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xcb; + (* ADOX (% r9) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x50; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,80))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xc8; + (* ADCX (% r9) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xd3; + (* ADOX (% r10) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x58; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,88))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd0; + (* ADCX (% r10) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xdb; + (* ADOX (% r11) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x60; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,96))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xd8; + (* ADCX (% r11) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xe3; + (* ADOX (% r12) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x68; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,104))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe0; + (* ADCX (% r12) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% r13) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x70; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,112))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xe8; + (* ADCX (% r13) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xf3; + (* ADOX (% r14) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x5c; 0x24; 0x78; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,120))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf0; + (* ADCX (% r14) (% rax) *) + 0xf3; 0x4c; 0x0f; 0x38; 0xf6; 0xfb; + (* ADOX (% r15) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x80; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,128))) *) + 0x66; 0x4c; 0x0f; 0x38; 0xf6; 0xf8; + (* ADCX (% r15) (% rax) *) + 0xf3; 0x48; 0x0f; 0x38; 0xf6; 0xeb; + (* ADOX (% rbp) (% rbx) *) + 0xc4; 0xe2; 0xfb; 0xf6; 0x9c; 0x24; 0x88; 0x00; 0x00; 0x00; + (* MULX4 (% rbx,% rax) (% rdx,Memop Quadword (%% (rsp,136))) *) + 0x48; 0x11; 0xc5; (* ADC (% rbp) (% rax) *) + 0x4c; 0x89; 0xc0; (* MOV (% rax) (% r8) *) + 0x48; 0x25; 0xff; 0x01; 0x00; 0x00; + (* AND (% rax) (Imm32 (word 511)) *) + 0x4d; 0x0f; 0xac; 0xc8; 0x09; + (* SHRD (% r8) (% r9) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xd1; 0x09; + (* SHRD (% r9) (% r10) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xda; 0x09; + (* SHRD (% r10) (% r11) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xe3; 0x09; + (* SHRD (% r11) (% r12) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xec; 0x09; + (* SHRD (% r12) (% r13) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xf5; 0x09; + (* SHRD (% r13) (% r14) (Imm8 (word 9)) *) + 0x4d; 0x0f; 0xac; 0xfe; 0x09; + (* SHRD (% r14) (% r15) (Imm8 (word 9)) *) + 0x49; 0x0f; 0xac; 0xef; 0x09; + (* SHRD (% r15) (% rbp) (Imm8 (word 9)) *) + 0x48; 0xc1; 0xed; 0x09; (* SHR (% rbp) (Imm8 (word 9)) *) + 0x48; 0x01; 0xc5; (* ADD (% rbp) (% rax) *) + 0xf9; (* STCF *) + 0x4c; 0x13; 0x84; 0x24; 0xb0; 0x01; 0x00; 0x00; + (* ADC (% r8) (Memop Quadword (%% (rsp,432))) *) + 0x4c; 0x13; 0x8c; 0x24; 0xb8; 0x01; 0x00; 0x00; + (* ADC (% r9) (Memop Quadword (%% (rsp,440))) *) + 0x4c; 0x13; 0x94; 0x24; 0xc0; 0x01; 0x00; 0x00; + (* ADC (% r10) (Memop Quadword (%% (rsp,448))) *) + 0x4c; 0x13; 0x9c; 0x24; 0xc8; 0x01; 0x00; 0x00; + (* ADC (% r11) (Memop Quadword (%% (rsp,456))) *) + 0x4c; 0x13; 0xa4; 0x24; 0xd0; 0x01; 0x00; 0x00; + (* ADC (% r12) (Memop Quadword (%% (rsp,464))) *) + 0x4c; 0x13; 0xac; 0x24; 0xd8; 0x01; 0x00; 0x00; + (* ADC (% r13) (Memop Quadword (%% (rsp,472))) *) + 0x4c; 0x13; 0xb4; 0x24; 0xe0; 0x01; 0x00; 0x00; + (* ADC (% r14) (Memop Quadword (%% (rsp,480))) *) + 0x4c; 0x13; 0xbc; 0x24; 0xe8; 0x01; 0x00; 0x00; + (* ADC (% r15) (Memop Quadword (%% (rsp,488))) *) + 0x48; 0x81; 0xd5; 0x00; 0xfe; 0xff; 0xff; + (* ADC (% rbp) (Imm32 (word 4294966784)) *) + 0xf5; (* CMC *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x84; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,288))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x8c; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,296))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x94; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,304))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x9c; 0x24; 0x38; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,312))) (% r11) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xa4; 0x24; 0x40; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,320))) (% r12) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xac; 0x24; 0x48; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,328))) (% r13) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xb4; 0x24; 0x50; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,336))) (% r14) *) + 0x49; 0x83; 0xdf; 0x00; (* SBB (% r15) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xbc; 0x24; 0x58; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,344))) (% r15) *) + 0x48; 0x83; 0xdd; 0x00; (* SBB (% rbp) (Imm8 (word 0)) *) + 0x48; 0x81; 0xe5; 0xff; 0x01; 0x00; 0x00; + (* AND (% rbp) (Imm32 (word 511)) *) + 0x48; 0x89; 0xac; 0x24; 0x60; 0x01; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rsp,352))) (% rbp) *) + 0x48; 0x8b; 0x84; 0x24; 0x20; 0x01; 0x00; 0x00; + (* MOV (% rax) (Memop Quadword (%% (rsp,288))) *) + 0x48; 0x2b; 0x84; 0x24; 0xd8; 0x00; 0x00; 0x00; + (* SUB (% rax) (Memop Quadword (%% (rsp,216))) *) + 0x48; 0x8b; 0x94; 0x24; 0x28; 0x01; 0x00; 0x00; + (* MOV (% rdx) (Memop Quadword (%% (rsp,296))) *) + 0x48; 0x1b; 0x94; 0x24; 0xe0; 0x00; 0x00; 0x00; + (* SBB (% rdx) (Memop Quadword (%% (rsp,224))) *) + 0x4c; 0x8b; 0x84; 0x24; 0x30; 0x01; 0x00; 0x00; + (* MOV (% r8) (Memop Quadword (%% (rsp,304))) *) + 0x4c; 0x1b; 0x84; 0x24; 0xe8; 0x00; 0x00; 0x00; + (* SBB (% r8) (Memop Quadword (%% (rsp,232))) *) + 0x4c; 0x8b; 0x8c; 0x24; 0x38; 0x01; 0x00; 0x00; + (* MOV (% r9) (Memop Quadword (%% (rsp,312))) *) + 0x4c; 0x1b; 0x8c; 0x24; 0xf0; 0x00; 0x00; 0x00; + (* SBB (% r9) (Memop Quadword (%% (rsp,240))) *) + 0x4c; 0x8b; 0x94; 0x24; 0x40; 0x01; 0x00; 0x00; + (* MOV (% r10) (Memop Quadword (%% (rsp,320))) *) + 0x4c; 0x1b; 0x94; 0x24; 0xf8; 0x00; 0x00; 0x00; + (* SBB (% r10) (Memop Quadword (%% (rsp,248))) *) + 0x4c; 0x8b; 0x9c; 0x24; 0x48; 0x01; 0x00; 0x00; + (* MOV (% r11) (Memop Quadword (%% (rsp,328))) *) + 0x4c; 0x1b; 0x9c; 0x24; 0x00; 0x01; 0x00; 0x00; + (* SBB (% r11) (Memop Quadword (%% (rsp,256))) *) + 0x4c; 0x8b; 0xa4; 0x24; 0x50; 0x01; 0x00; 0x00; + (* MOV (% r12) (Memop Quadword (%% (rsp,336))) *) + 0x4c; 0x1b; 0xa4; 0x24; 0x08; 0x01; 0x00; 0x00; + (* SBB (% r12) (Memop Quadword (%% (rsp,264))) *) + 0x4c; 0x8b; 0xac; 0x24; 0x58; 0x01; 0x00; 0x00; + (* MOV (% r13) (Memop Quadword (%% (rsp,344))) *) + 0x4c; 0x1b; 0xac; 0x24; 0x10; 0x01; 0x00; 0x00; + (* SBB (% r13) (Memop Quadword (%% (rsp,272))) *) + 0x4c; 0x8b; 0xb4; 0x24; 0x60; 0x01; 0x00; 0x00; + (* MOV (% r14) (Memop Quadword (%% (rsp,352))) *) + 0x4c; 0x1b; 0xb4; 0x24; 0x18; 0x01; 0x00; 0x00; + (* SBB (% r14) (Memop Quadword (%% (rsp,280))) *) + 0x48; 0x83; 0xd8; 0x00; (* SBB (% rax) (Imm8 (word 0)) *) + 0x48; 0x89; 0x47; 0x48; (* MOV (Memop Quadword (%% (rdi,72))) (% rax) *) + 0x48; 0x83; 0xda; 0x00; (* SBB (% rdx) (Imm8 (word 0)) *) + 0x48; 0x89; 0x57; 0x50; (* MOV (Memop Quadword (%% (rdi,80))) (% rdx) *) + 0x49; 0x83; 0xd8; 0x00; (* SBB (% r8) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x47; 0x58; (* MOV (Memop Quadword (%% (rdi,88))) (% r8) *) + 0x49; 0x83; 0xd9; 0x00; (* SBB (% r9) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x4f; 0x60; (* MOV (Memop Quadword (%% (rdi,96))) (% r9) *) + 0x49; 0x83; 0xda; 0x00; (* SBB (% r10) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x57; 0x68; (* MOV (Memop Quadword (%% (rdi,104))) (% r10) *) + 0x49; 0x83; 0xdb; 0x00; (* SBB (% r11) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x5f; 0x70; (* MOV (Memop Quadword (%% (rdi,112))) (% r11) *) + 0x49; 0x83; 0xdc; 0x00; (* SBB (% r12) (Imm8 (word 0)) *) + 0x4c; 0x89; 0x67; 0x78; (* MOV (Memop Quadword (%% (rdi,120))) (% r12) *) + 0x49; 0x83; 0xdd; 0x00; (* SBB (% r13) (Imm8 (word 0)) *) + 0x4c; 0x89; 0xaf; 0x80; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rdi,128))) (% r13) *) + 0x49; 0x83; 0xde; 0x00; (* SBB (% r14) (Imm8 (word 0)) *) + 0x49; 0x81; 0xe6; 0xff; 0x01; 0x00; 0x00; + (* AND (% r14) (Imm32 (word 511)) *) + 0x4c; 0x89; 0xb7; 0x88; 0x00; 0x00; 0x00; + (* MOV (Memop Quadword (%% (rdi,136))) (% r14) *) + 0x48; 0x81; 0xc4; 0xf0; 0x01; 0x00; 0x00; + (* ADD (% rsp) (Imm32 (word 496)) *) + 0x41; 0x5f; (* POP (% r15) *) + 0x41; 0x5e; (* POP (% r14) *) + 0x41; 0x5d; (* POP (% r13) *) + 0x41; 0x5c; (* POP (% r12) *) + 0x5d; (* POP (% rbp) *) + 0x5b; (* POP (% rbx) *) + 0xc3 (* RET *) +];; + +let P521_JMIXADD_EXEC = X86_MK_CORE_EXEC_RULE p521_jmixadd_mc;; + +(* ------------------------------------------------------------------------- *) +(* Common supporting definitions and lemmas for component proofs. *) +(* ------------------------------------------------------------------------- *) + +let p_521 = new_definition `p_521 = 6864797660130609714981900799081393217269435300143305409394463459185543183397656052122559640661454554977296311391480858037121987999716643812574028291115057151`;; + +let nistp521 = define + `nistp521 = + (integer_mod_ring p_521, + ring_neg (integer_mod_ring p_521) (&3), + &b_521:int)`;; + +let nistp521_encode = new_definition + `nistp521_encode = modular_encode(521,p_521)`;; + +let nintlemma = prove + (`&(num_of_int(x rem &p_521)) = x rem &p_521`, + MATCH_MP_TAC INT_OF_NUM_OF_INT THEN MATCH_MP_TAC INT_REM_POS THEN + REWRITE_TAC[INT_OF_NUM_EQ; p_521] THEN CONV_TAC NUM_REDUCE_CONV);; + +let unilemma0 = prove + (`x = a MOD p_521 ==> x < p_521 /\ &x = &a rem &p_521`, + REWRITE_TAC[INT_OF_NUM_REM; p_521] THEN ARITH_TAC);; + +let unilemma1 = prove + (`&x = a rem &p_521 ==> x < p_521 /\ &x = a rem &p_521`, + SIMP_TAC[GSYM INT_OF_NUM_LT; INT_LT_REM_EQ; p_521] THEN INT_ARITH_TAC);; + +let unilemma2 = prove + (`X = num_of_int(x rem &p_521) ==> X < p_521 /\ &X = x rem &p_521`, + DISCH_THEN SUBST1_TAC THEN + REWRITE_TAC[GSYM INT_OF_NUM_LT; nintlemma; INT_LT_REM_EQ] THEN + REWRITE_TAC[INT_OF_NUM_LT; p_521] THEN CONV_TAC NUM_REDUCE_CONV);; + +let lvs = + ["x_1",[`RSI`;`0`]; + "y_1",[`RSI`;`72`]; + "z_1",[`RSI`;`144`]; + "x_2",[`RCX`;`0`]; + "y_2",[`RCX`;`72`]; + "x_3",[`RDI`;`0`]; + "y_3",[`RDI`;`72`]; + "z_3",[`RDI`;`144`]; + "zp2",[`RSP`;`0`]; + "ww",[`RSP`;`0`]; + "yd",[`RSP`;`72`]; + "y2a",[`RSP`;`72`]; + "x2a",[`RSP`;`144`]; + "zzx2",[`RSP`;`144`]; + "zz",[`RSP`;`216`]; + "t1",[`RSP`;`216`]; + "t2",[`RSP`;`288`]; + "zzx1",[`RSP`;`288`]; + "xd",[`RSP`;`360`]];; + +(* ------------------------------------------------------------------------- *) +(* Instances of sqr. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_SQR_P521_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE p521_jmixadd_mc) 231 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1. + !n. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 9)) t = n + ==> + nonoverlapping (word pc,0x55bb) (stackpointer,496) /\ + nonoverlapping (read RDI t,216) (stackpointer,496) /\ + nonoverlapping (read RSI t,216) (stackpointer,496) /\ + nonoverlapping (read RCX t,144) (stackpointer,496) /\ + nonoverlapping (word pc,0x55bb) (read RDI t,216) /\ + nonoverlapping (read RSI t,216) (read RDI t,216) /\ + nonoverlapping (read RCX t,144) (read RDI t,216) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST p521_jmixadd_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read RCX s = read RCX t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 9)) s = + n) + (\s. read RIP s = pcout /\ + (n < p_521 + ==> read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 9)) s = (n EXP 2) MOD p_521)) + (MAYCHANGE [RIP; RAX; RBX; RDX; RBP; + R8; R9; R10; R11; R12; R13; R14; R15] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 9); + memory :> bytes(word_add stackpointer (word 432),64)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + (*** Globalize the n < p_521 assumption for simplicity's sake ***) + + ASM_CASES_TAC `n < p_521` THENL + [ASM_REWRITE_TAC[]; X86_SIM_TAC P521_JMIXADD_EXEC (1--231)] THEN + + (*** Digitize, deduce the bound on the top word specifically ***) + + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "n_" o lhand o concl) THEN + SUBGOAL_THEN `n DIV 2 EXP 512 < 2 EXP 9` MP_TAC THENL + [UNDISCH_TAC `n < p_521` THEN REWRITE_TAC[p_521] THEN ARITH_TAC; + FIRST_ASSUM(fun th -> GEN_REWRITE_TAC (funpow 3 LAND_CONV) [SYM th]) THEN + CONV_TAC(LAND_CONV(ONCE_DEPTH_CONV BIGNUM_OF_WORDLIST_DIV_CONV)) THEN + DISCH_TAC] THEN + + (*** Simulate core squaring, with manual tweaks for small high digit ***) + + X86_ACCSTEPS_TAC P521_JMIXADD_EXEC (1--160) (1--160) THEN + X86_ACCSTEPS_TAC P521_JMIXADD_EXEC (165--189) (161--189) THEN + SUBGOAL_THEN + `&(val(word_add n_8 n_8:int64)):real = &2 * &(val n_8) /\ + &(val(word_mul n_8 n_8:int64)):real = &(val n_8) pow 2` + (CONJUNCTS_THEN SUBST_ALL_TAC) THENL + [REWRITE_TAC[VAL_WORD_ADD; VAL_WORD_MUL; DIMINDEX_64] THEN + REWRITE_TAC[REAL_OF_NUM_CLAUSES; MULT_2; EXP_2] THEN + CONJ_TAC THEN MATCH_MP_TAC MOD_LT THENL + [ALL_TAC; + REWRITE_TAC[ARITH_RULE `2 EXP 64 = 2 EXP 32 * 2 EXP 32`] THEN + MATCH_MP_TAC LT_MULT2 THEN CONJ_TAC] THEN + UNDISCH_TAC `val(n_8:int64) < 2 EXP 9` THEN ARITH_TAC; + ALL_TAC] THEN + SUBGOAL_THEN `bitval(2 EXP 64 <= val(n_8:int64) + val n_8) = 0` + SUBST_ALL_TAC THENL + [REWRITE_TAC[BITVAL_EQ_0] THEN + UNDISCH_TAC `val(n_8:int64) < 2 EXP 9` THEN ARITH_TAC; + ALL_TAC] THEN + SUBGOAL_THEN + `bitval(~(ival(n_8:int64) + ival n_8 = ival (word_add n_8 n_8))) = 0` + SUBST_ALL_TAC THENL + [REWRITE_TAC[BITVAL_EQ_0] THEN CONV_TAC SYM_CONV THEN + MATCH_MP_TAC INT_CONG_IMP_EQ THEN + EXISTS_TAC `(&2:int) pow dimindex(:64)` THEN + REWRITE_TAC[ICONG_WORD_ADD] THEN + MP_TAC(ISPEC `word_add n_8 n_8:int64` IVAL_BOUND) THEN + SUBST1_TAC(ISPEC `n_8:int64` INT_IVAL) THEN + UNDISCH_TAC `val(n_8:int64) < 2 EXP 9` THEN + REWRITE_TAC[DIMINDEX_64; GSYM INT_OF_NUM_CLAUSES] THEN + CONV_TAC NUM_REDUCE_CONV THEN CONV_TAC INT_ARITH; + ALL_TAC] THEN + + (*** Introduce more systematic names for the high part digits ***) + + REABBREV_TAC `h0 = read R8 s189` THEN POP_ASSUM SUBST_ALL_TAC THEN + REABBREV_TAC `h1 = read R9 s189` THEN POP_ASSUM SUBST_ALL_TAC THEN + REABBREV_TAC `h2 = read R10 s189` THEN POP_ASSUM SUBST_ALL_TAC THEN + REABBREV_TAC `h3 = read R11 s189` THEN POP_ASSUM SUBST_ALL_TAC THEN + REABBREV_TAC `h4 = read R12 s189` THEN POP_ASSUM SUBST_ALL_TAC THEN + REABBREV_TAC `h5 = read R13 s189` THEN POP_ASSUM SUBST_ALL_TAC THEN + REABBREV_TAC `h6 = read R14 s189` THEN POP_ASSUM SUBST_ALL_TAC THEN + REABBREV_TAC `h7 = read R15 s189` THEN POP_ASSUM SUBST_ALL_TAC THEN + REABBREV_TAC `h8 = read RBP s189` THEN POP_ASSUM SUBST_ALL_TAC THEN + + (*** Show that the core squaring operation is correct ***) + + SUBGOAL_THEN + `2 EXP 512 * bignum_of_wordlist[h0;h1;h2;h3;h4;h5;h6;h7;h8] + + bignum_from_memory(word_add stackpointer (word 432),8) s189 = + n EXP 2` + ASSUME_TAC THENL + [CONV_TAC(ONCE_DEPTH_CONV BIGNUM_LEXPAND_CONV) THEN + ASM_REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`1088`; `&0:real`] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN CONJ_TAC THENL + [REWRITE_TAC[REAL_OF_NUM_CLAUSES; LE_0] THEN + REWRITE_TAC[ARITH_RULE `2 EXP 1088 = 2 EXP 544 EXP 2`] THEN + REWRITE_TAC[EXP_MONO_LT] THEN UNDISCH_TAC `n < p_521` THEN + REWRITE_TAC[p_521] THEN ARITH_TAC; + REWRITE_TAC[INTEGER_CLOSED]] THEN + EXPAND_TAC "n" THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + CONV_TAC(RAND_CONV REAL_POLY_CONV) THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o + filter (is_ratconst o rand o concl) o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC) THEN + RULE_ASSUM_TAC(REWRITE_RULE[BIGNUM_FROM_MEMORY_BYTES])] THEN + + (*** Now simulate the rotation part ***) + + X86_STEPS_TAC P521_JMIXADD_EXEC (190--201) THEN + + (*** Break up into high and low parts ***) + + ABBREV_TAC `h = (n EXP 2) DIV 2 EXP 521` THEN + ABBREV_TAC `l = (n EXP 2) MOD 2 EXP 521` THEN + SUBGOAL_THEN `h < p_521 /\ l <= p_521` STRIP_ASSUME_TAC THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"] THEN REWRITE_TAC[p_521] THEN + CONJ_TAC THENL [ALL_TAC; ARITH_TAC] THEN + SIMP_TAC[RDIV_LT_EQ; EXP_EQ_0; ARITH_EQ] THEN + TRANS_TAC LET_TRANS `(p_521 - 1) EXP 2` THEN + REWRITE_TAC[EXP_MONO_LE] THEN UNDISCH_TAC `n < p_521` THEN + REWRITE_TAC[p_521] THEN ARITH_TAC; + ALL_TAC] THEN + SUBGOAL_THEN `n EXP 2 MOD p_521 = (h + l) MOD p_521` SUBST1_TAC THENL + [SUBST1_TAC(SYM(SPECL + [`n EXP 2`; `2 EXP 521`] (CONJUNCT2 DIVISION_SIMP))) THEN + ASM_REWRITE_TAC[GSYM CONG] THEN MATCH_MP_TAC(NUMBER_RULE + `(e == 1) (mod p) ==> (e * h + l == h + l) (mod p)`) THEN + REWRITE_TAC[CONG; p_521] THEN ARITH_TAC; + ALL_TAC] THEN + SUBGOAL_THEN + `(n EXP 2) DIV 2 EXP 521 = + bignum_of_wordlist + [word_subword (word_join (h1:int64) h0:int128) (9,64); + word_subword (word_join (h2:int64) h1:int128) (9,64); + word_subword (word_join (h3:int64) h2:int128) (9,64); + word_subword (word_join (h4:int64) h3:int128) (9,64); + word_subword (word_join (h5:int64) h4:int128) (9,64); + word_subword (word_join (h6:int64) h5:int128) (9,64); + word_subword (word_join (h7:int64) h6:int128) (9,64); + word_subword (word_join (h8:int64) h7:int128) (9,64); + word_ushr h8 9] /\ + (n EXP 2) MOD 2 EXP 521 = + 2 EXP 512 * val(word_and h0 (word 511):int64) + + bignum_of_wordlist + [mullo_s101; sum_s105; sum_s111; sum_s115; sum_s121; sum_s125; sum_s131; + sum_s135]` + (CONJUNCTS_THEN SUBST_ALL_TAC) THENL + [MATCH_MP_TAC DIVMOD_UNIQ THEN + REWRITE_TAC[VAL_WORD_AND_MASK_WORD; ARITH_RULE `511 = 2 EXP 9 - 1`] THEN + CONJ_TAC THENL + [FIRST_X_ASSUM(fun th -> GEN_REWRITE_TAC LAND_CONV [SYM th]) THEN + CONV_TAC(ONCE_DEPTH_CONV BIGNUM_LEXPAND_CONV) THEN + ASM_REWRITE_TAC[ADD_ASSOC; EQ_ADD_RCANCEL] THEN + REWRITE_TAC[bignum_of_wordlist; VAL_WORD_USHR] THEN + SIMP_TAC[VAL_WORD_SUBWORD_JOIN_64; DIMINDEX_64; ARITH_LE; ARITH_LT] THEN + ARITH_TAC; + MATCH_MP_TAC(ARITH_RULE + `x < 2 EXP (64 * 8) ==> 2 EXP 512 * h MOD 2 EXP 9 + x < 2 EXP 521`) THEN + MATCH_MP_TAC BIGNUM_OF_WORDLIST_BOUND THEN REWRITE_TAC[LENGTH; ARITH]]; + ALL_TAC] THEN + + (*** The net comparison h + l >= p_521 ***) + + X86_ACCSTEPS_TAC P521_JMIXADD_EXEC (202--211) (202--211) THEN + SUBGOAL_THEN + `&(val(word_add (word_ushr h8 9) (word_and h0 (word 511):int64))):real = + &(val(word_ushr h8 9:int64)) + &(val(word_and h0 (word 511):int64))` + SUBST_ALL_TAC THENL + [REWRITE_TAC[REAL_OF_NUM_CLAUSES; VAL_WORD_ADD; DIMINDEX_64] THEN + MATCH_MP_TAC MOD_LT THEN + REWRITE_TAC[VAL_WORD_AND_MASK_WORD; ARITH_RULE `511 = 2 EXP 9 - 1`] THEN + REWRITE_TAC[VAL_WORD_USHR] THEN + MP_TAC(SPEC `h8:int64` VAL_BOUND_64) THEN ARITH_TAC; + ALL_TAC] THEN + SUBGOAL_THEN `carry_s211 <=> p_521 <= h + l` SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LE THEN EXISTS_TAC `576` THEN + MAP_EVERY EXPAND_TAC ["h"; "l"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist; p_521] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ALL_TAC] THEN + + (*** The final correction ***) + + X86_ACCSTEPS_TAC P521_JMIXADD_EXEC (212--231) (212--231) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC SYM_CONV THEN CONV_TAC(RAND_CONV BIGNUM_LEXPAND_CONV) THEN + ASM_REWRITE_TAC[] THEN MATCH_MP_TAC EQUAL_FROM_CONGRUENT_MOD_MOD THEN + MAP_EVERY EXISTS_TAC + [`521`; + `if h + l < p_521 then &h + &l:real else (&h + &l) - &p_521`] THEN + REPEAT CONJ_TAC THENL + [BOUNDER_TAC[]; + REWRITE_TAC[p_521] THEN ARITH_TAC; + REWRITE_TAC[p_521] THEN ARITH_TAC; + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + REWRITE_TAC[GSYM NOT_LT] THEN ABBREV_TAC `bb <=> h + l < p_521` THEN + MAP_EVERY EXPAND_TAC ["h"; "l"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist; p_521] THEN + REWRITE_TAC[VAL_WORD_AND_MASK_WORD; ARITH_RULE `511 = 2 EXP 9 - 1`] THEN + REWRITE_TAC[REAL_OF_NUM_MOD] THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC NUM_REDUCE_CONV THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC; + ASM_SIMP_TAC[MOD_CASES; ARITH_RULE + `h < p /\ l <= p ==> h + l < 2 * p`] THEN + SIMP_TAC[REAL_OF_NUM_CLAUSES; REAL_OF_NUM_SUB; COND_SWAP; GSYM NOT_LE] THEN + MESON_TAC[]]);; + +(* ------------------------------------------------------------------------- *) +(* Instances of mul. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_MUL_P521_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE p521_jmixadd_mc) 312 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1 p2 n2. + !a. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 9)) t = a + ==> + !b. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 9)) t = b + ==> + nonoverlapping (word pc,0x55bb) (stackpointer,496) /\ + nonoverlapping (read RDI t,216) (stackpointer,496) /\ + nonoverlapping (read RSI t,216) (stackpointer,496) /\ + nonoverlapping (read RCX t,144) (stackpointer,496) /\ + nonoverlapping (word pc,0x55bb) (read RDI t,216) /\ + nonoverlapping (read RSI t,216) (read RDI t,216) /\ + nonoverlapping (read RCX t,144) (read RDI t,216) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST p521_jmixadd_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read RCX s = read RCX t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 9)) s = + a /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 9)) s = + b) + (\s. read RIP s = pcout /\ + (a < p_521 /\ b < p_521 + ==> read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 9)) s = (a * b) MOD p_521)) + (MAYCHANGE [RIP; RAX; RBX; RBP; RDX; + R8; R9; R10; R11; R12; R13; R14; R15] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 9); + memory :> bytes(word_add stackpointer (word 432),64)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + (*** Globalize the a < p_521 /\ b < p_521 assumption for simplicity ***) + + ASM_CASES_TAC `a < p_521 /\ b < p_521` THENL + [ASM_REWRITE_TAC[] THEN FIRST_X_ASSUM(CONJUNCTS_THEN ASSUME_TAC); + X86_SIM_TAC P521_JMIXADD_EXEC (2--313)] THEN + + (*** Digitize, deduce the bound on the top words ***) + + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s1" THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "y_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_LDIGITIZE_TAC "x_" o lhand o concl) THEN + SUBGOAL_THEN + `a DIV 2 EXP 512 < 2 EXP 9 /\ b DIV 2 EXP 512 < 2 EXP 9` + MP_TAC THENL + [MAP_EVERY UNDISCH_TAC [`a < p_521`; `b < p_521`] THEN + REWRITE_TAC[p_521] THEN ARITH_TAC; + MAP_EVERY EXPAND_TAC ["a"; "b"] THEN + CONV_TAC(LAND_CONV(ONCE_DEPTH_CONV BIGNUM_OF_WORDLIST_DIV_CONV)) THEN + ASM_REWRITE_TAC[] THEN STRIP_TAC] THEN + + (*** Simulate the initial multiplication ***) + + X86_ACCSTEPS_TAC P521_JMIXADD_EXEC (2--271) (2--271) THEN + + (*** Introduce more systematic names for the high part digits ***) + + REABBREV_TAC `h0 = read R8 s271` THEN POP_ASSUM SUBST_ALL_TAC THEN + REABBREV_TAC `h1 = read R9 s271` THEN POP_ASSUM SUBST_ALL_TAC THEN + REABBREV_TAC `h2 = read R10 s271` THEN POP_ASSUM SUBST_ALL_TAC THEN + REABBREV_TAC `h3 = read R11 s271` THEN POP_ASSUM SUBST_ALL_TAC THEN + REABBREV_TAC `h4 = read R12 s271` THEN POP_ASSUM SUBST_ALL_TAC THEN + REABBREV_TAC `h5 = read R13 s271` THEN POP_ASSUM SUBST_ALL_TAC THEN + REABBREV_TAC `h6 = read R14 s271` THEN POP_ASSUM SUBST_ALL_TAC THEN + REABBREV_TAC `h7 = read R15 s271` THEN POP_ASSUM SUBST_ALL_TAC THEN + REABBREV_TAC `h8 = read RBP s271` THEN POP_ASSUM SUBST_ALL_TAC THEN + + (*** Show that the core multiplication operation is correct ***) + + SUBGOAL_THEN + `2 EXP 512 * bignum_of_wordlist[h0;h1;h2;h3;h4;h5;h6;h7;h8] + + bignum_from_memory(word_add stackpointer (word 432),8) s271 = + a * b` + ASSUME_TAC THENL + [CONV_TAC(ONCE_DEPTH_CONV BIGNUM_LEXPAND_CONV) THEN + ASM_REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`1088`; `&0:real`] THEN + CONJ_TAC THENL [BOUNDER_TAC[]; ALL_TAC] THEN CONJ_TAC THENL + [REWRITE_TAC[REAL_OF_NUM_CLAUSES; LE_0] THEN + REWRITE_TAC[EXP_2; ARITH_RULE `2 EXP 1088 = 2 EXP 544 EXP 2`] THEN + MATCH_MP_TAC LT_MULT2 THEN + MAP_EVERY UNDISCH_TAC [`a < p_521`; `b < p_521`] THEN + REWRITE_TAC[p_521] THEN ARITH_TAC; + REWRITE_TAC[INTEGER_CLOSED]] THEN + MAP_EVERY EXPAND_TAC ["a"; "b"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN + CONV_TAC(RAND_CONV REAL_POLY_CONV) THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o + filter (is_ratconst o rand o concl) o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC; + ACCUMULATOR_POP_ASSUM_LIST(K ALL_TAC) THEN + RULE_ASSUM_TAC(REWRITE_RULE[BIGNUM_FROM_MEMORY_BYTES])] THEN + + (*** Now simulate the rotation part ***) + + X86_STEPS_TAC P521_JMIXADD_EXEC (272--283) THEN + + (*** Break up into high and low parts ***) + + ABBREV_TAC `h = (a * b) DIV 2 EXP 521` THEN + ABBREV_TAC `l = (a * b) MOD 2 EXP 521` THEN + SUBGOAL_THEN `h < p_521 /\ l <= p_521` STRIP_ASSUME_TAC THENL + [MAP_EVERY EXPAND_TAC ["h"; "l"] THEN REWRITE_TAC[p_521] THEN + CONJ_TAC THENL [ALL_TAC; ARITH_TAC] THEN + SIMP_TAC[RDIV_LT_EQ; EXP_EQ_0; ARITH_EQ] THEN + TRANS_TAC LET_TRANS `(p_521 - 1) EXP 2` THEN + CONJ_TAC THENL [ALL_TAC; REWRITE_TAC[p_521] THEN ARITH_TAC] THEN + REWRITE_TAC[EXP_2] THEN MATCH_MP_TAC LE_MULT2 THEN CONJ_TAC THEN + MATCH_MP_TAC(ARITH_RULE `x < n ==> x <= n - 1`) THEN ASM_REWRITE_TAC[]; + ALL_TAC] THEN + SUBGOAL_THEN `(a * b) MOD p_521 = (h + l) MOD p_521` SUBST1_TAC THENL + [SUBST1_TAC(SYM(SPECL + [`a * b:num`; `2 EXP 521`] (CONJUNCT2 DIVISION_SIMP))) THEN + ASM_REWRITE_TAC[GSYM CONG] THEN MATCH_MP_TAC(NUMBER_RULE + `(e == 1) (mod p) ==> (e * h + l == h + l) (mod p)`) THEN + REWRITE_TAC[CONG; p_521] THEN ARITH_TAC; + ALL_TAC] THEN + SUBGOAL_THEN + `(a * b) DIV 2 EXP 521 = + bignum_of_wordlist + [word_subword (word_join (h1:int64) h0:int128) (9,64); + word_subword (word_join (h2:int64) h1:int128) (9,64); + word_subword (word_join (h3:int64) h2:int128) (9,64); + word_subword (word_join (h4:int64) h3:int128) (9,64); + word_subword (word_join (h5:int64) h4:int128) (9,64); + word_subword (word_join (h6:int64) h5:int128) (9,64); + word_subword (word_join (h7:int64) h6:int128) (9,64); + word_subword (word_join (h8:int64) h7:int128) (9,64); + word_ushr h8 9] /\ + (a * b) MOD 2 EXP 521 = + 2 EXP 512 * val(word_and h0 (word 511):int64) + + bignum_of_wordlist + [mullo_s4; sum_s24; sum_s52; sum_s80; sum_s108; sum_s136; sum_s164; + sum_s192]` + (CONJUNCTS_THEN SUBST_ALL_TAC) THENL + [MATCH_MP_TAC DIVMOD_UNIQ THEN + REWRITE_TAC[VAL_WORD_AND_MASK_WORD; ARITH_RULE `511 = 2 EXP 9 - 1`] THEN + CONJ_TAC THENL + [FIRST_X_ASSUM(fun th -> GEN_REWRITE_TAC LAND_CONV [SYM th]) THEN + CONV_TAC(ONCE_DEPTH_CONV BIGNUM_LEXPAND_CONV) THEN + ASM_REWRITE_TAC[ADD_ASSOC; EQ_ADD_RCANCEL] THEN + REWRITE_TAC[bignum_of_wordlist; VAL_WORD_USHR] THEN + SIMP_TAC[VAL_WORD_SUBWORD_JOIN_64; DIMINDEX_64; ARITH_LE; ARITH_LT] THEN + ARITH_TAC; + MATCH_MP_TAC(ARITH_RULE + `x < 2 EXP (64 * 8) ==> 2 EXP 512 * h MOD 2 EXP 9 + x < 2 EXP 521`) THEN + MATCH_MP_TAC BIGNUM_OF_WORDLIST_BOUND THEN REWRITE_TAC[LENGTH; ARITH]]; + ALL_TAC] THEN + + (*** The net comparison h + l >= p_521 ***) + + X86_ACCSTEPS_TAC P521_JMIXADD_EXEC (284--293) (284--293) THEN + SUBGOAL_THEN + `&(val(word_add (word_ushr h8 9) (word_and h0 (word 511):int64))):real = + &(val(word_ushr h8 9:int64)) + &(val(word_and h0 (word 511):int64))` + SUBST_ALL_TAC THENL + [REWRITE_TAC[REAL_OF_NUM_CLAUSES; VAL_WORD_ADD; DIMINDEX_64] THEN + MATCH_MP_TAC MOD_LT THEN + REWRITE_TAC[VAL_WORD_AND_MASK_WORD; ARITH_RULE `511 = 2 EXP 9 - 1`] THEN + REWRITE_TAC[VAL_WORD_USHR] THEN + MP_TAC(SPEC `h8:int64` VAL_BOUND_64) THEN ARITH_TAC; + ALL_TAC] THEN + SUBGOAL_THEN `carry_s293 <=> p_521 <= h + l` SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LE THEN EXISTS_TAC `576` THEN + MAP_EVERY EXPAND_TAC ["h"; "l"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist; p_521] THEN + ACCUMULATOR_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ALL_TAC] THEN + + (*** The final correction ***) + + X86_ACCSTEPS_TAC P521_JMIXADD_EXEC (294--313) (294--313) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + CONV_TAC SYM_CONV THEN CONV_TAC(RAND_CONV BIGNUM_LEXPAND_CONV) THEN + ASM_REWRITE_TAC[] THEN MATCH_MP_TAC EQUAL_FROM_CONGRUENT_MOD_MOD THEN + MAP_EVERY EXISTS_TAC + [`521`; + `if h + l < p_521 then &h + &l:real else (&h + &l) - &p_521`] THEN + REPEAT CONJ_TAC THENL + [BOUNDER_TAC[]; + REWRITE_TAC[p_521] THEN ARITH_TAC; + REWRITE_TAC[p_521] THEN ARITH_TAC; + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + REWRITE_TAC[GSYM NOT_LT] THEN ABBREV_TAC `bb <=> h + l < p_521` THEN + MAP_EVERY EXPAND_TAC ["h"; "l"] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; bignum_of_wordlist; p_521] THEN + REWRITE_TAC[VAL_WORD_AND_MASK_WORD; ARITH_RULE `511 = 2 EXP 9 - 1`] THEN + REWRITE_TAC[REAL_OF_NUM_MOD] THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + CONV_TAC NUM_REDUCE_CONV THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC; + ASM_SIMP_TAC[MOD_CASES; ARITH_RULE + `h < p /\ l <= p ==> h + l < 2 * p`] THEN + SIMP_TAC[REAL_OF_NUM_CLAUSES; REAL_OF_NUM_SUB; COND_SWAP; GSYM NOT_LE] THEN + MESON_TAC[]]);; + +(* ------------------------------------------------------------------------- *) +(* Instances of sub. *) +(* ------------------------------------------------------------------------- *) + +let LOCAL_SUB_P521_TAC = + X86_MACRO_SIM_ABBREV_TAC (X86_TRIM_EXEC_RULE p521_jmixadd_mc) 37 lvs + `!(t:x86state) pcin pcout p3 n3 p1 n1 p2 n2. + !m. read(memory :> bytes(word_add (read p1 t) (word n1),8 * 9)) t = m + ==> + !n. read(memory :> bytes(word_add (read p2 t) (word n2),8 * 9)) t = n + ==> + nonoverlapping (word pc,0x55bb) (word_add (read p3 t) (word n3),72) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST p521_jmixadd_mc) /\ + read RIP s = pcin /\ + read RSP s = read RSP t /\ + read RDI s = read RDI t /\ + read RSI s = read RSI t /\ + read RCX s = read RCX t /\ + read(memory :> bytes(word_add (read p1 t) (word n1),8 * 9)) s = + m /\ + read(memory :> bytes(word_add (read p2 t) (word n2),8 * 9)) s = + n) + (\s. read RIP s = pcout /\ + (m < p_521 /\ n < p_521 + ==> &(read(memory :> bytes(word_add (read p3 t) (word n3), + 8 * 9)) s) = (&m - &n) rem &p_521)) + (MAYCHANGE [RIP; RAX; RDX; R8; R9; R10; R11; RBX; R12; R13; R14] ,, + MAYCHANGE + [memory :> bytes(word_add (read p3 t) (word n3),8 * 9)] ,, + MAYCHANGE SOME_FLAGS)` + (REWRITE_TAC[C_ARGUMENTS; C_RETURN; SOME_FLAGS; NONOVERLAPPING_CLAUSES] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN ASSUME_TAC) THEN + + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "n_" o lhand o concl) THEN + FIRST_ASSUM(BIGNUM_DIGITIZE_TAC "m_" o lhand o concl) THEN + + (*** Initial subtraction x - y, comparison result ***) + + X86_ACCSTEPS_TAC P521_JMIXADD_EXEC [2;4;6;8;10;12;14;16;18] (1--18) THEN + + SUBGOAL_THEN `carry_s18 <=> m < n` SUBST_ALL_TAC THENL + [MATCH_MP_TAC FLAG_FROM_CARRY_LT THEN EXISTS_TAC `576` THEN + MAP_EVERY EXPAND_TAC ["m"; "n"] THEN + REWRITE_TAC[bignum_of_wordlist; GSYM REAL_OF_NUM_CLAUSES] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DECARRY_RULE) THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN BOUNDER_TAC[]; + ALL_TAC] THEN + + (*** Further optional subtraction mod 2^521 ***) + + X86_ACCSTEPS_TAC P521_JMIXADD_EXEC + [19;21;23;25;27;29;31;33;35] (19--37) THEN + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN STRIP_TAC THEN + + (*** Map things into the reals, doing case analysis over comparison ***) + + TRANS_TAC EQ_TRANS `if m < n then &m - &n + &p_521:int else &m - &n` THEN + CONJ_TAC THENL + [ONCE_REWRITE_TAC[int_eq] THEN ONCE_REWRITE_TAC[COND_RAND] THEN + REWRITE_TAC[int_of_num_th; int_sub_th; int_add_th]; + CONV_TAC SYM_CONV THEN MATCH_MP_TAC INT_REM_UNIQ THEN + EXISTS_TAC `if m:num < n then --(&1):int else &0` THEN + MAP_EVERY UNDISCH_TAC [`m < p_521`; `n < p_521`] THEN + REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES; p_521] THEN INT_ARITH_TAC] THEN + + (*** Hence show that we get the right result in 521 bits ***) + + CONV_TAC SYM_CONV THEN + CONV_TAC(RAND_CONV(RAND_CONV BIGNUM_LEXPAND_CONV)) THEN + ASM_REWRITE_TAC[SYM(NUM_REDUCE_CONV `2 EXP 9 - 1`)] THEN + MATCH_MP_TAC EQUAL_FROM_CONGRUENT_REAL THEN + MAP_EVERY EXISTS_TAC [`521`; `&0:real`] THEN CONJ_TAC THENL + [MAP_EVERY UNDISCH_TAC [`m < p_521`; `n < p_521`] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; p_521] THEN REAL_ARITH_TAC; + ALL_TAC] THEN + CONJ_TAC THENL + [REWRITE_TAC[REAL_OF_NUM_CLAUSES; LE_0] THEN + REWRITE_TAC[BIGNUM_OF_WORDLIST_SPLIT_RULE(8,1)] THEN + REWRITE_TAC[BIGNUM_OF_WORDLIST_SING; VAL_WORD_AND_MASK_WORD] THEN + MATCH_MP_TAC(ARITH_RULE + `x < 2 EXP (64 * 8) ==> x + 2 EXP 512 * n MOD 2 EXP 9 < 2 EXP 521`) THEN + MATCH_MP_TAC BIGNUM_OF_WORDLIST_BOUND THEN + REWRITE_TAC[LENGTH] THEN ARITH_TAC; + REWRITE_TAC[INTEGER_CLOSED]] THEN + ABBREV_TAC `bb <=> m:num < n` THEN MAP_EVERY EXPAND_TAC ["m"; "n"] THEN + REWRITE_TAC[bignum_of_wordlist; VAL_WORD_AND_MASK_WORD] THEN + REWRITE_TAC[GSYM REAL_OF_NUM_CLAUSES; REAL_OF_NUM_MOD; p_521] THEN + ACCUMULATOR_POP_ASSUM_LIST(MP_TAC o end_itlist CONJ o DESUM_RULE) THEN + COND_CASES_TAC THEN ASM_REWRITE_TAC[BITVAL_CLAUSES] THEN + DISCH_THEN(fun th -> REWRITE_TAC[th]) THEN REAL_INTEGER_TAC);; + +(* ------------------------------------------------------------------------- *) +(* Overall point operation proof. *) +(* ------------------------------------------------------------------------- *) + +let P521_JMIXADD_CORRECT = time prove + (`!p3 p1 t1 p2 t2 pc stackpointer. + ALLPAIRS nonoverlapping + [(p3,216); (stackpointer,496)] + [(word pc,0x55bb); (p1,216); (p2,144)] /\ + nonoverlapping (p3,216) (stackpointer,496) + ==> ensures x86 + (\s. bytes_loaded s (word pc) (BUTLAST p521_jmixadd_mc) /\ + read RIP s = word(pc + 0x11) /\ + read RSP s = stackpointer /\ + C_ARGUMENTS [p3; p1; p2] s /\ + bignum_triple_from_memory (p1,9) s = t1 /\ + bignum_pair_from_memory (p2,9) s = t2) + (\s. read RIP s = word (pc + 0x55a9) /\ + (!x1 y1 z1 x2 y2 z2. + ~(z1 = &0) /\ z2 = &1 /\ + ~(jacobian_eq (integer_mod_ring p_521) + (x1,y1,z1) (x2,y2,z2)) /\ + ~(jacobian_eq (integer_mod_ring p_521) + (jacobian_neg nistp521 (x1,y1,z1)) + (x2,y2,z2)) /\ + t1 = tripled nistp521_encode (x1,y1,z1) /\ + t2 = paired nistp521_encode (x2,y2) + ==> bignum_triple_from_memory(p3,9) s = + tripled nistp521_encode + (jacobian_add nistp521 (x1,y1,z1) (x2,y2,z2)))) + (MAYCHANGE [RIP; RAX; RBX; RCX; RDX; RBP; R8; R9; + R10; R11; R12; R13; R14; R15] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,216); + memory :> bytes(stackpointer,496)])`, + REWRITE_TAC[FORALL_PAIR_THM] THEN + MAP_EVERY X_GEN_TAC + [`p3:int64`; `p1:int64`; `x1:num`; `y1:num`; `z1:num`; `p2:int64`; + `x2:num`; `y2:num`; `pc:num`; `stackpointer:int64`] THEN + REWRITE_TAC[ALLPAIRS; ALL; NONOVERLAPPING_CLAUSES] THEN STRIP_TAC THEN + REWRITE_TAC[C_ARGUMENTS; SOME_FLAGS; PAIR_EQ; + bignum_pair_from_memory; bignum_triple_from_memory] THEN + CONV_TAC(ONCE_DEPTH_CONV NUM_MULT_CONV) THEN + CONV_TAC(ONCE_DEPTH_CONV NORMALIZE_RELATIVE_ADDRESS_CONV) THEN + REWRITE_TAC[BIGNUM_FROM_MEMORY_BYTES] THEN ENSURES_INIT_TAC "s0" THEN + + LOCAL_SQR_P521_TAC 1 ["zp2";"z_1"] THEN + LOCAL_MUL_P521_TAC 0 ["y2a";"z_1";"y_2"] THEN + LOCAL_MUL_P521_TAC 0 ["x2a";"zp2";"x_2"] THEN + LOCAL_MUL_P521_TAC 0 ["y2a";"zp2";"y2a"] THEN + LOCAL_SUB_P521_TAC 0 ["xd";"x2a";"x_1"] THEN + LOCAL_SUB_P521_TAC 0 ["yd";"y2a";"y_1"] THEN + LOCAL_SQR_P521_TAC 0 ["zz";"xd"] THEN + LOCAL_SQR_P521_TAC 0 ["ww";"yd"] THEN + LOCAL_MUL_P521_TAC 0 ["zzx1";"zz";"x_1"] THEN + LOCAL_MUL_P521_TAC 0 ["zzx2";"zz";"x2a"] THEN + LOCAL_SUB_P521_TAC 0 ["x_3";"ww";"zzx1"] THEN + LOCAL_SUB_P521_TAC 0 ["t1";"zzx2";"zzx1"] THEN + LOCAL_MUL_P521_TAC 0 ["z_3";"xd";"z_1"] THEN + LOCAL_SUB_P521_TAC 0 ["x_3";"x_3";"zzx2"] THEN + LOCAL_SUB_P521_TAC 0 ["t2";"zzx1";"x_3"] THEN + LOCAL_MUL_P521_TAC 0 ["t1";"t1";"y_1"] THEN + LOCAL_MUL_P521_TAC 0 ["t2";"yd";"t2"] THEN + LOCAL_SUB_P521_TAC 0 ["y_3";"t2";"t1"] THEN + + ENSURES_FINAL_STATE_TAC THEN ASM_REWRITE_TAC[] THEN + DISCARD_STATE_TAC "s19" THEN + DISCARD_MATCHING_ASSUMPTIONS [`nonoverlapping_modulo a b c`] THEN + MAP_EVERY X_GEN_TAC + [`x1':int`; `y1':int`; `z1':int`; `x2':int`; `y2':int`; `z2':int`] THEN + DISCH_THEN(CONJUNCTS_THEN2 ASSUME_TAC MP_TAC) THEN + GEN_REWRITE_TAC I [IMP_CONJ] THEN DISCH_THEN SUBST_ALL_TAC THEN + REPLICATE_TAC 2 (DISCH_THEN(CONJUNCTS_THEN2 ASSUME_TAC MP_TAC)) THEN + REWRITE_TAC[tripled; paired; nistp521_encode; PAIR_EQ; modular_encode] THEN + DISCH_THEN(REPEAT_TCL CONJUNCTS_THEN + (STRIP_ASSUME_TAC o MATCH_MP unilemma2)) THEN + + (*** Dispose of any range hypotheses ***) + + REPEAT(FIRST_X_ASSUM(MP_TAC o check (is_imp o concl))) THEN + REPEAT(ANTS_TAC THENL + [REWRITE_TAC[p_521] THEN RULE_ASSUM_TAC(REWRITE_RULE[p_521]) THEN + CONV_TAC NUM_REDUCE_CONV THEN ASM BOUNDER_TAC[]; + (DISCH_THEN(STRIP_ASSUME_TAC o MATCH_MP unilemma0) ORELSE + DISCH_THEN(STRIP_ASSUME_TAC o MATCH_MP unilemma1))]) THEN + REPEAT(FIRST_X_ASSUM(K ALL_TAC o GEN_REWRITE_RULE I [GSYM NOT_LE])) THEN + + (*** Now push the moduli around then do the algebra ***) + + RULE_ASSUM_TAC(REWRITE_RULE + [num_congruent; GSYM INT_OF_NUM_CLAUSES; GSYM INT_OF_NUM_REM]) THEN + ASM_REWRITE_TAC[tripled; paired; jacobian_add; nistp521] THEN + ASM_REWRITE_TAC[GSYM nistp521] THEN + REWRITE_TAC[INTEGER_MOD_RING_CLAUSES] THEN + CONV_TAC INT_REDUCE_CONV THEN ASM_REWRITE_TAC[] THEN + CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN + CONV_TAC INT_REM_DOWN_CONV THEN + REWRITE_TAC[tripled; paired; modular_encode] THEN + REWRITE_TAC[PAIR_EQ; GSYM INT_OF_NUM_EQ; nintlemma] THEN + CONV_TAC INT_REM_DOWN_CONV THEN + REWRITE_TAC[GSYM INT_OF_NUM_CLAUSES; GSYM INT_OF_NUM_REM] THEN + ASM_REWRITE_TAC[] THEN CONV_TAC INT_REM_DOWN_CONV THEN + REPEAT CONJ_TAC THEN AP_THM_TAC THEN AP_TERM_TAC THEN + INT_ARITH_TAC);; + +let P521_JMIXADD_SUBROUTINE_CORRECT = time prove + (`!p3 p1 t1 p2 t2 pc stackpointer returnaddress. + ALLPAIRS nonoverlapping + [(p3,216); (word_sub stackpointer (word 544),544)] + [(word pc,0x55bb); (p1,216); (p2,144)] /\ + nonoverlapping (p3,216) (word_sub stackpointer (word 544),552) + ==> ensures x86 + (\s. bytes_loaded s (word pc) p521_jmixadd_mc /\ + read RIP s = word pc /\ + read RSP s = stackpointer /\ + read (memory :> bytes64 stackpointer) s = returnaddress /\ + C_ARGUMENTS [p3; p1; p2] s /\ + bignum_triple_from_memory (p1,9) s = t1 /\ + bignum_pair_from_memory (p2,9) s = t2) + (\s. read RIP s = returnaddress /\ + read RSP s = word_add stackpointer (word 8) /\ + (!x1 y1 z1 x2 y2 z2. + ~(z1 = &0) /\ z2 = &1 /\ + ~(jacobian_eq (integer_mod_ring p_521) + (x1,y1,z1) (x2,y2,z2)) /\ + ~(jacobian_eq (integer_mod_ring p_521) + (jacobian_neg nistp521 (x1,y1,z1)) + (x2,y2,z2)) /\ + t1 = tripled nistp521_encode (x1,y1,z1) /\ + t2 = paired nistp521_encode (x2,y2) + ==> bignum_triple_from_memory(p3,9) s = + tripled nistp521_encode + (jacobian_add nistp521 (x1,y1,z1) (x2,y2,z2)))) + (MAYCHANGE [RIP; RSP; RAX; RCX; RDX; R8; R9; R10; R11] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,216); + memory :> bytes(word_sub stackpointer (word 544),544)])`, + X86_PROMOTE_RETURN_STACK_TAC p521_jmixadd_mc P521_JMIXADD_CORRECT + `[RBX; RBP; R12; R13; R14; R15]` 544);; + +(* ------------------------------------------------------------------------- *) +(* Correctness of Windows ABI version. *) +(* ------------------------------------------------------------------------- *) + +let windows_p521_jmixadd_mc = define_from_elf "windows_p521_jmixadd_mc" + "x86/p521/p521_jmixadd.obj";; + +let WINDOWS_P521_JMIXADD_SUBROUTINE_CORRECT = time prove + (`!p3 p1 t1 p2 t2 pc stackpointer returnaddress. + ALLPAIRS nonoverlapping + [(p3,216); (word_sub stackpointer (word 560),560)] + [(word pc,0x55c8); (p1,216); (p2,144)] /\ + nonoverlapping (p3,216) (word_sub stackpointer (word 560),568) + ==> ensures x86 + (\s. bytes_loaded s (word pc) windows_p521_jmixadd_mc /\ + read RIP s = word pc /\ + read RSP s = stackpointer /\ + read (memory :> bytes64 stackpointer) s = returnaddress /\ + WINDOWS_C_ARGUMENTS [p3; p1; p2] s /\ + bignum_triple_from_memory (p1,9) s = t1 /\ + bignum_pair_from_memory (p2,9) s = t2) + (\s. read RIP s = returnaddress /\ + read RSP s = word_add stackpointer (word 8) /\ + (!x1 y1 z1 x2 y2 z2. + ~(z1 = &0) /\ z2 = &1 /\ + ~(jacobian_eq (integer_mod_ring p_521) + (x1,y1,z1) (x2,y2,z2)) /\ + ~(jacobian_eq (integer_mod_ring p_521) + (jacobian_neg nistp521 (x1,y1,z1)) + (x2,y2,z2)) /\ + t1 = tripled nistp521_encode (x1,y1,z1) /\ + t2 = paired nistp521_encode (x2,y2) + ==> bignum_triple_from_memory(p3,9) s = + tripled nistp521_encode + (jacobian_add nistp521 (x1,y1,z1) (x2,y2,z2)))) + (MAYCHANGE [RIP; RSP; RAX; RCX; RDX; R8; R9; R10; R11] ,, + MAYCHANGE SOME_FLAGS ,, + MAYCHANGE [memory :> bytes(p3,216); + memory :> bytes(word_sub stackpointer (word 560),560)])`, + WINDOWS_X86_WRAP_STACK_TAC + windows_p521_jmixadd_mc p521_jmixadd_mc + P521_JMIXADD_CORRECT + `[RBX; RBP; R12; R13; R14; R15]` 544);; diff --git a/x86/yesbmi_functions b/x86/yesbmi_functions index b4c773b819..e7276c3d68 100644 --- a/x86/yesbmi_functions +++ b/x86/yesbmi_functions @@ -51,6 +51,9 @@ p256_montjmixadd p384_montjadd p384_montjdouble p384_montjmixadd +p521_jadd +p521_jdouble +p521_jmixadd secp256k1_jadd secp256k1_jdouble secp256k1_jmixadd diff --git a/x86_att/Makefile b/x86_att/Makefile index ab2a6714ef..9e6c180b9b 100644 --- a/x86_att/Makefile +++ b/x86_att/Makefile @@ -202,6 +202,9 @@ OBJ = curve25519/bignum_add_p25519.o \ p521/bignum_tomont_p521.o \ p521/bignum_triple_p521.o \ p521/bignum_triple_p521_alt.o \ + p521/p521_jadd.o \ + p521/p521_jdouble.o \ + p521/p521_jmixadd.o \ secp256k1/bignum_add_p256k1.o \ secp256k1/bignum_cmul_p256k1.o \ secp256k1/bignum_cmul_p256k1_alt.o \ diff --git a/x86_att/p521/p521_jadd.S b/x86_att/p521/p521_jadd.S new file mode 100644 index 0000000000..c1ac9a235f --- /dev/null +++ b/x86_att/p521/p521_jadd.S @@ -0,0 +1,765 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +// ---------------------------------------------------------------------------- +// Point addition on NIST curve P-521 in Jacobian coordinates +// +// extern void p521_jadd +// (uint64_t p3[static 27],uint64_t p1[static 27],uint64_t p2[static 27]); +// +// Does p3 := p1 + p2 where all points are regarded as Jacobian triples. +// A Jacobian triple (x,y,z) represents affine point (x/z^2,y/z^3). +// It is assumed that all coordinates of the input points p1 and p2 are +// fully reduced mod p_521, that both z coordinates are nonzero and +// that neither p1 =~= p2 or p1 =~= -p2, where "=~=" means "represents +// the same affine point as". +// +// Standard x86-64 ABI: RDI = p3, RSI = p1, RDX = p2 +// Microsoft x64 ABI: RCX = p3, RDX = p1, R8 = p2 +// ---------------------------------------------------------------------------- +#include "_internal_s2n_bignum.h" + + + S2N_BN_SYM_VISIBILITY_DIRECTIVE(p521_jadd) + S2N_BN_SYM_PRIVACY_DIRECTIVE(p521_jadd) + .text + +// Size of individual field elements + +#define NUMSIZE 72 + +// Stable homes for input arguments during main code sequence +// These are where they arrive except for input_y, initially in %rdx + +#define input_z %rdi +#define input_x %rsi +#define input_y %rcx + +// Pointer-offset pairs for inputs and outputs + +#define x_1 0(input_x) +#define y_1 NUMSIZE(input_x) +#define z_1 (2*NUMSIZE)(input_x) + +#define x_2 0(input_y) +#define y_2 NUMSIZE(input_y) +#define z_2 (2*NUMSIZE)(input_y) + +#define x_3 0(input_z) +#define y_3 NUMSIZE(input_z) +#define z_3 (2*NUMSIZE)(input_z) + +// Pointer-offset pairs for temporaries, with some aliasing +// The tmp field is internal storage for field mul and sqr. +// NSPACE is the total stack needed for these temporaries + +#define z1sq (NUMSIZE*0)(%rsp) +#define ww (NUMSIZE*0)(%rsp) + +#define yd (NUMSIZE*1)(%rsp) +#define y2a (NUMSIZE*1)(%rsp) + +#define x2a (NUMSIZE*2)(%rsp) +#define zzx2 (NUMSIZE*2)(%rsp) + +#define zz (NUMSIZE*3)(%rsp) +#define t1 (NUMSIZE*3)(%rsp) + +#define t2 (NUMSIZE*4)(%rsp) +#define x1a (NUMSIZE*4)(%rsp) +#define zzx1 (NUMSIZE*4)(%rsp) + +#define xd (NUMSIZE*5)(%rsp) +#define z2sq (NUMSIZE*5)(%rsp) + +#define y1a (NUMSIZE*6)(%rsp) + +#define tmp (NUMSIZE*7)(%rsp) + +#define NSPACE (NUMSIZE*7+64) + +// Corresponds exactly to bignum_mul_p521 + +#define mul_p521(P0,P1,P2) \ + xorl %ebp, %ebp ; \ + movq P2, %rdx ; \ + mulxq P1, %r8, %r9 ; \ + movq %r8, 504(%rsp) ; \ + mulxq 0x8+P1, %rbx, %r10 ; \ + adcq %rbx, %r9 ; \ + mulxq 0x10+P1, %rbx, %r11 ; \ + adcq %rbx, %r10 ; \ + mulxq 0x18+P1, %rbx, %r12 ; \ + adcq %rbx, %r11 ; \ + mulxq 0x20+P1, %rbx, %r13 ; \ + adcq %rbx, %r12 ; \ + mulxq 0x28+P1, %rbx, %r14 ; \ + adcq %rbx, %r13 ; \ + mulxq 0x30+P1, %rbx, %r15 ; \ + adcq %rbx, %r14 ; \ + mulxq 0x38+P1, %rbx, %r8 ; \ + adcq %rbx, %r15 ; \ + adcq %rbp, %r8 ; \ + movq 0x8+P2, %rdx ; \ + xorl %ebp, %ebp ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + movq %r9, 512(%rsp) ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + mulxq 0x30+P1, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rbx, %r8 ; \ + mulxq 0x38+P1, %rax, %r9 ; \ + adcxq %rax, %r8 ; \ + adoxq %rbp, %r9 ; \ + adcq %rbp, %r9 ; \ + movq 0x10+P2, %rdx ; \ + xorl %ebp, %ebp ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + movq %r10, 520(%rsp) ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rbx, %r8 ; \ + mulxq 0x30+P1, %rax, %rbx ; \ + adcxq %rax, %r8 ; \ + adoxq %rbx, %r9 ; \ + mulxq 0x38+P1, %rax, %r10 ; \ + adcxq %rax, %r9 ; \ + adoxq %rbp, %r10 ; \ + adcq %rbp, %r10 ; \ + movq 0x18+P2, %rdx ; \ + xorl %ebp, %ebp ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + movq %r11, 528(%rsp) ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rbx, %r8 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcxq %rax, %r8 ; \ + adoxq %rbx, %r9 ; \ + mulxq 0x30+P1, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq 0x38+P1, %rax, %r11 ; \ + adcxq %rax, %r10 ; \ + adoxq %rbp, %r11 ; \ + adcq %rbp, %r11 ; \ + movq 0x20+P2, %rdx ; \ + xorl %ebp, %ebp ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + movq %r12, 536(%rsp) ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rbx, %r8 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r8 ; \ + adoxq %rbx, %r9 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq 0x30+P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x38+P1, %rax, %r12 ; \ + adcxq %rax, %r11 ; \ + adoxq %rbp, %r12 ; \ + adcq %rbp, %r12 ; \ + movq 0x28+P2, %rdx ; \ + xorl %ebp, %ebp ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + movq %r13, 544(%rsp) ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rbx, %r8 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r8 ; \ + adoxq %rbx, %r9 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x30+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x38+P1, %rax, %r13 ; \ + adcxq %rax, %r12 ; \ + adoxq %rbp, %r13 ; \ + adcq %rbp, %r13 ; \ + movq 0x30+P2, %rdx ; \ + xorl %ebp, %ebp ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + movq %r14, 552(%rsp) ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rbx, %r8 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r8 ; \ + adoxq %rbx, %r9 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x30+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x38+P1, %rax, %r14 ; \ + adcxq %rax, %r13 ; \ + adoxq %rbp, %r14 ; \ + adcq %rbp, %r14 ; \ + movq 0x38+P2, %rdx ; \ + xorl %ebp, %ebp ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rbx, %r8 ; \ + movq %r15, 560(%rsp) ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r8 ; \ + adoxq %rbx, %r9 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x30+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x38+P1, %rax, %r15 ; \ + adcxq %rax, %r14 ; \ + adoxq %rbp, %r15 ; \ + adcq %rbp, %r15 ; \ + movq 0x40+P1, %rdx ; \ + xorl %ebp, %ebp ; \ + mulxq P2, %rax, %rbx ; \ + adcxq %rax, %r8 ; \ + adoxq %rbx, %r9 ; \ + mulxq 0x8+P2, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq 0x10+P2, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x18+P2, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x20+P2, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x28+P2, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x30+P2, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + mulxq 0x38+P2, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rbp, %rbx ; \ + adcq %rbx, %rbp ; \ + movq 0x40+P2, %rdx ; \ + xorl %eax, %eax ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r8 ; \ + adoxq %rbx, %r9 ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x30+P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + mulxq 0x38+P1, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rbx, %rbp ; \ + mulxq 0x40+P1, %rax, %rbx ; \ + adcq %rax, %rbp ; \ + movq %r8, %rax ; \ + andq $0x1ff, %rax ; \ + shrdq $0x9, %r9, %r8 ; \ + shrdq $0x9, %r10, %r9 ; \ + shrdq $0x9, %r11, %r10 ; \ + shrdq $0x9, %r12, %r11 ; \ + shrdq $0x9, %r13, %r12 ; \ + shrdq $0x9, %r14, %r13 ; \ + shrdq $0x9, %r15, %r14 ; \ + shrdq $0x9, %rbp, %r15 ; \ + shrq $0x9, %rbp ; \ + addq %rax, %rbp ; \ + stc; \ + adcq 504(%rsp), %r8 ; \ + adcq 512(%rsp), %r9 ; \ + adcq 520(%rsp), %r10 ; \ + adcq 528(%rsp), %r11 ; \ + adcq 536(%rsp), %r12 ; \ + adcq 544(%rsp), %r13 ; \ + adcq 552(%rsp), %r14 ; \ + adcq 560(%rsp), %r15 ; \ + adcq $0xfffffffffffffe00, %rbp ; \ + cmc; \ + sbbq $0x0, %r8 ; \ + movq %r8, P0 ; \ + sbbq $0x0, %r9 ; \ + movq %r9, 0x8+P0 ; \ + sbbq $0x0, %r10 ; \ + movq %r10, 0x10+P0 ; \ + sbbq $0x0, %r11 ; \ + movq %r11, 0x18+P0 ; \ + sbbq $0x0, %r12 ; \ + movq %r12, 0x20+P0 ; \ + sbbq $0x0, %r13 ; \ + movq %r13, 0x28+P0 ; \ + sbbq $0x0, %r14 ; \ + movq %r14, 0x30+P0 ; \ + sbbq $0x0, %r15 ; \ + movq %r15, 0x38+P0 ; \ + sbbq $0x0, %rbp ; \ + andq $0x1ff, %rbp ; \ + movq %rbp, 0x40+P0 + +// Corresponds exactly to bignum_sqr_p521 + +#define sqr_p521(P0,P1) \ + xorl %ebp, %ebp ; \ + movq P1, %rdx ; \ + mulxq 0x8+P1, %r9, %rax ; \ + movq %r9, 512(%rsp) ; \ + mulxq 0x10+P1, %r10, %rbx ; \ + adcxq %rax, %r10 ; \ + movq %r10, 520(%rsp) ; \ + mulxq 0x18+P1, %r11, %rax ; \ + adcxq %rbx, %r11 ; \ + mulxq 0x20+P1, %r12, %rbx ; \ + adcxq %rax, %r12 ; \ + mulxq 0x28+P1, %r13, %rax ; \ + adcxq %rbx, %r13 ; \ + mulxq 0x30+P1, %r14, %rbx ; \ + adcxq %rax, %r14 ; \ + mulxq 0x38+P1, %r15, %r8 ; \ + adcxq %rbx, %r15 ; \ + adcxq %rbp, %r8 ; \ + xorl %ebp, %ebp ; \ + movq 0x8+P1, %rdx ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + movq %r11, 528(%rsp) ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + movq %r12, 536(%rsp) ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + mulxq 0x30+P1, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rbx, %r8 ; \ + mulxq 0x38+P1, %rax, %r9 ; \ + adcxq %rax, %r8 ; \ + adoxq %rbp, %r9 ; \ + movq 0x20+P1, %rdx ; \ + mulxq 0x28+P1, %rax, %r10 ; \ + adcxq %rax, %r9 ; \ + adoxq %rbp, %r10 ; \ + adcxq %rbp, %r10 ; \ + xorl %ebp, %ebp ; \ + movq 0x10+P1, %rdx ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + movq %r13, 544(%rsp) ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + movq %r14, 552(%rsp) ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rbx, %r8 ; \ + mulxq 0x30+P1, %rax, %rbx ; \ + adcxq %rax, %r8 ; \ + adoxq %rbx, %r9 ; \ + mulxq 0x38+P1, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + movq 0x30+P1, %rdx ; \ + mulxq 0x20+P1, %rax, %r11 ; \ + adcxq %rax, %r10 ; \ + adoxq %rbp, %r11 ; \ + mulxq 0x28+P1, %rax, %r12 ; \ + adcxq %rax, %r11 ; \ + adoxq %rbp, %r12 ; \ + adcxq %rbp, %r12 ; \ + xorl %ebp, %ebp ; \ + movq 0x18+P1, %rdx ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rbx, %r8 ; \ + movq %r15, 560(%rsp) ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcxq %rax, %r8 ; \ + adoxq %rbx, %r9 ; \ + mulxq 0x30+P1, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq 0x38+P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + movq 0x38+P1, %rdx ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x28+P1, %rax, %r13 ; \ + adcxq %rax, %r12 ; \ + adoxq %rbp, %r13 ; \ + mulxq 0x30+P1, %rax, %r14 ; \ + adcxq %rax, %r13 ; \ + adoxq %rbp, %r14 ; \ + adcxq %rbp, %r14 ; \ + xorl %ebp, %ebp ; \ + movq P1, %rdx ; \ + mulxq %rdx, %rax, %rbx ; \ + movq %rax, 504(%rsp) ; \ + movq 512(%rsp), %rax ; \ + adcxq %rax, %rax ; \ + adoxq %rbx, %rax ; \ + movq %rax, 512(%rsp) ; \ + movq 520(%rsp), %rax ; \ + movq 0x8+P1, %rdx ; \ + mulxq %rdx, %rdx, %rbx ; \ + adcxq %rax, %rax ; \ + adoxq %rdx, %rax ; \ + movq %rax, 520(%rsp) ; \ + movq 528(%rsp), %rax ; \ + adcxq %rax, %rax ; \ + adoxq %rbx, %rax ; \ + movq %rax, 528(%rsp) ; \ + movq 536(%rsp), %rax ; \ + movq 0x10+P1, %rdx ; \ + mulxq %rdx, %rdx, %rbx ; \ + adcxq %rax, %rax ; \ + adoxq %rdx, %rax ; \ + movq %rax, 536(%rsp) ; \ + movq 544(%rsp), %rax ; \ + adcxq %rax, %rax ; \ + adoxq %rbx, %rax ; \ + movq %rax, 544(%rsp) ; \ + movq 552(%rsp), %rax ; \ + movq 0x18+P1, %rdx ; \ + mulxq %rdx, %rdx, %rbx ; \ + adcxq %rax, %rax ; \ + adoxq %rdx, %rax ; \ + movq %rax, 552(%rsp) ; \ + movq 560(%rsp), %rax ; \ + adcxq %rax, %rax ; \ + adoxq %rbx, %rax ; \ + movq %rax, 560(%rsp) ; \ + movq 0x20+P1, %rdx ; \ + mulxq %rdx, %rdx, %rbx ; \ + adcxq %r8, %r8 ; \ + adoxq %rdx, %r8 ; \ + adcxq %r9, %r9 ; \ + adoxq %rbx, %r9 ; \ + movq 0x28+P1, %rdx ; \ + mulxq %rdx, %rdx, %rbx ; \ + adcxq %r10, %r10 ; \ + adoxq %rdx, %r10 ; \ + adcxq %r11, %r11 ; \ + adoxq %rbx, %r11 ; \ + movq 0x30+P1, %rdx ; \ + mulxq %rdx, %rdx, %rbx ; \ + adcxq %r12, %r12 ; \ + adoxq %rdx, %r12 ; \ + adcxq %r13, %r13 ; \ + adoxq %rbx, %r13 ; \ + movq 0x38+P1, %rdx ; \ + mulxq %rdx, %rdx, %r15 ; \ + adcxq %r14, %r14 ; \ + adoxq %rdx, %r14 ; \ + adcxq %rbp, %r15 ; \ + adoxq %rbp, %r15 ; \ + movq 0x40+P1, %rdx ; \ + movq %rdx, %rbp ; \ + imulq %rbp, %rbp ; \ + addq %rdx, %rdx ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r8 ; \ + adoxq %rbx, %r9 ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x30+P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + mulxq 0x38+P1, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rbx, %rbp ; \ + adcq $0x0, %rbp ; \ + movq %r8, %rax ; \ + andq $0x1ff, %rax ; \ + shrdq $0x9, %r9, %r8 ; \ + shrdq $0x9, %r10, %r9 ; \ + shrdq $0x9, %r11, %r10 ; \ + shrdq $0x9, %r12, %r11 ; \ + shrdq $0x9, %r13, %r12 ; \ + shrdq $0x9, %r14, %r13 ; \ + shrdq $0x9, %r15, %r14 ; \ + shrdq $0x9, %rbp, %r15 ; \ + shrq $0x9, %rbp ; \ + addq %rax, %rbp ; \ + stc; \ + adcq 504(%rsp), %r8 ; \ + adcq 512(%rsp), %r9 ; \ + adcq 520(%rsp), %r10 ; \ + adcq 528(%rsp), %r11 ; \ + adcq 536(%rsp), %r12 ; \ + adcq 544(%rsp), %r13 ; \ + adcq 552(%rsp), %r14 ; \ + adcq 560(%rsp), %r15 ; \ + adcq $0xfffffffffffffe00, %rbp ; \ + cmc; \ + sbbq $0x0, %r8 ; \ + movq %r8, P0 ; \ + sbbq $0x0, %r9 ; \ + movq %r9, 0x8+P0 ; \ + sbbq $0x0, %r10 ; \ + movq %r10, 0x10+P0 ; \ + sbbq $0x0, %r11 ; \ + movq %r11, 0x18+P0 ; \ + sbbq $0x0, %r12 ; \ + movq %r12, 0x20+P0 ; \ + sbbq $0x0, %r13 ; \ + movq %r13, 0x28+P0 ; \ + sbbq $0x0, %r14 ; \ + movq %r14, 0x30+P0 ; \ + sbbq $0x0, %r15 ; \ + movq %r15, 0x38+P0 ; \ + sbbq $0x0, %rbp ; \ + andq $0x1ff, %rbp ; \ + movq %rbp, 0x40+P0 + +// Corresponds exactly to bignum_sub_p521 + +#define sub_p521(P0,P1,P2) \ + movq P1, %rax ; \ + subq P2, %rax ; \ + movq 0x8+P1, %rdx ; \ + sbbq 0x8+P2, %rdx ; \ + movq 0x10+P1, %r8 ; \ + sbbq 0x10+P2, %r8 ; \ + movq 0x18+P1, %r9 ; \ + sbbq 0x18+P2, %r9 ; \ + movq 0x20+P1, %r10 ; \ + sbbq 0x20+P2, %r10 ; \ + movq 0x28+P1, %r11 ; \ + sbbq 0x28+P2, %r11 ; \ + movq 0x30+P1, %r12 ; \ + sbbq 0x30+P2, %r12 ; \ + movq 0x38+P1, %r13 ; \ + sbbq 0x38+P2, %r13 ; \ + movq 0x40+P1, %r14 ; \ + sbbq 0x40+P2, %r14 ; \ + sbbq $0x0, %rax ; \ + movq %rax, P0 ; \ + sbbq $0x0, %rdx ; \ + movq %rdx, 0x8+P0 ; \ + sbbq $0x0, %r8 ; \ + movq %r8, 0x10+P0 ; \ + sbbq $0x0, %r9 ; \ + movq %r9, 0x18+P0 ; \ + sbbq $0x0, %r10 ; \ + movq %r10, 0x20+P0 ; \ + sbbq $0x0, %r11 ; \ + movq %r11, 0x28+P0 ; \ + sbbq $0x0, %r12 ; \ + movq %r12, 0x30+P0 ; \ + sbbq $0x0, %r13 ; \ + movq %r13, 0x38+P0 ; \ + sbbq $0x0, %r14 ; \ + andq $0x1ff, %r14 ; \ + movq %r14, 0x40+P0 + +S2N_BN_SYMBOL(p521_jadd): + +#if WINDOWS_ABI + pushq %rdi + pushq %rsi + movq %rcx, %rdi + movq %rdx, %rsi + movq %r8, %rdx +#endif + +// Save registers and make room on stack for temporary variables + + pushq %rbx + pushq %rbp + pushq %r12 + pushq %r13 + pushq %r14 + pushq %r15 + + subq $NSPACE, %rsp + +// Move the input arguments to stable places (two are already there) + + movq %rdx, input_y + +// Main code, just a sequence of basic field operations + + sqr_p521(z1sq,z_1) + sqr_p521(z2sq,z_2) + + mul_p521(y1a,z_2,y_1) + mul_p521(y2a,z_1,y_2) + + mul_p521(x2a,z1sq,x_2) + mul_p521(x1a,z2sq,x_1) + mul_p521(y2a,z1sq,y2a) + mul_p521(y1a,z2sq,y1a) + + sub_p521(xd,x2a,x1a) + sub_p521(yd,y2a,y1a) + + sqr_p521(zz,xd) + sqr_p521(ww,yd) + + mul_p521(zzx1,zz,x1a) + mul_p521(zzx2,zz,x2a) + + sub_p521(x_3,ww,zzx1) + sub_p521(t1,zzx2,zzx1) + + mul_p521(xd,xd,z_1) + + sub_p521(x_3,x_3,zzx2) + + sub_p521(t2,zzx1,x_3) + + mul_p521(t1,t1,y1a) + mul_p521(z_3,xd,z_2) + mul_p521(t2,yd,t2) + + sub_p521(y_3,t2,t1) + +// Restore stack and registers + + addq $NSPACE, %rsp + popq %r15 + popq %r14 + popq %r13 + popq %r12 + popq %rbp + popq %rbx + +#if WINDOWS_ABI + popq %rsi + popq %rdi +#endif + ret + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack, "", %progbits +#endif diff --git a/x86_att/p521/p521_jdouble.S b/x86_att/p521/p521_jdouble.S new file mode 100644 index 0000000000..16a5deeb04 --- /dev/null +++ b/x86_att/p521/p521_jdouble.S @@ -0,0 +1,1386 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +// ---------------------------------------------------------------------------- +// Point doubling on NIST curve P-521 in Jacobian coordinates +// +// extern void p521_jdouble +// (uint64_t p3[static 27],uint64_t p1[static 27]); +// +// Does p3 := 2 * p1 where all points are regarded as Jacobian triples. +// A Jacobian triple (x,y,z) represents affine point (x/z^2,y/z^3). +// It is assumed that all coordinates of the input point are fully +// reduced mod p_521 and that the z coordinate is not zero. +// +// Standard x86-64 ABI: RDI = p3, RSI = p1 +// Microsoft x64 ABI: RCX = p3, RDX = p1 +// ---------------------------------------------------------------------------- +#include "_internal_s2n_bignum.h" + + + S2N_BN_SYM_VISIBILITY_DIRECTIVE(p521_jdouble) + S2N_BN_SYM_PRIVACY_DIRECTIVE(p521_jdouble) + .text + +// Size of individual field elements + +#define NUMSIZE 72 + +// Stable homes for input arguments during main code sequence +// This is actually where they come in anyway and they stay there. + +#define input_z %rdi +#define input_x %rsi + +// Pointer-offset pairs for inputs and outputs + +#define x_1 0(input_x) +#define y_1 NUMSIZE(input_x) +#define z_1 (2*NUMSIZE)(input_x) + +#define x_3 0(input_z) +#define y_3 NUMSIZE(input_z) +#define z_3 (2*NUMSIZE)(input_z) + +// Pointer-offset pairs for temporaries, with some aliasing +// The tmp field is internal storage for field mul and sqr. +// NSPACE is the total stack needed for these temporaries + +#define z2 (NUMSIZE*0)(%rsp) +#define y2 (NUMSIZE*1)(%rsp) +#define x2p (NUMSIZE*2)(%rsp) +#define xy2 (NUMSIZE*3)(%rsp) + +#define y4 (NUMSIZE*4)(%rsp) +#define t2 (NUMSIZE*4)(%rsp) + +#define dx2 (NUMSIZE*5)(%rsp) +#define t1 (NUMSIZE*5)(%rsp) + +#define d (NUMSIZE*6)(%rsp) +#define x4p (NUMSIZE*6)(%rsp) + +#define tmp (NUMSIZE*7)(%rsp) + +#define NSPACE (NUMSIZE*7+64) + +// Corresponds exactly to bignum_mul_p521 + +#define mul_p521(P0,P1,P2) \ + xorl %ecx, %ecx ; \ + movq P2, %rdx ; \ + mulxq P1, %r8, %r9 ; \ + movq %r8, 504(%rsp) ; \ + mulxq 0x8+P1, %rbx, %r10 ; \ + adcq %rbx, %r9 ; \ + mulxq 0x10+P1, %rbx, %r11 ; \ + adcq %rbx, %r10 ; \ + mulxq 0x18+P1, %rbx, %r12 ; \ + adcq %rbx, %r11 ; \ + mulxq 0x20+P1, %rbx, %r13 ; \ + adcq %rbx, %r12 ; \ + mulxq 0x28+P1, %rbx, %r14 ; \ + adcq %rbx, %r13 ; \ + mulxq 0x30+P1, %rbx, %r15 ; \ + adcq %rbx, %r14 ; \ + mulxq 0x38+P1, %rbx, %r8 ; \ + adcq %rbx, %r15 ; \ + adcq %rcx, %r8 ; \ + movq 0x8+P2, %rdx ; \ + xorl %ecx, %ecx ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + movq %r9, 512(%rsp) ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + mulxq 0x30+P1, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rbx, %r8 ; \ + mulxq 0x38+P1, %rax, %r9 ; \ + adcxq %rax, %r8 ; \ + adoxq %rcx, %r9 ; \ + adcq %rcx, %r9 ; \ + movq 0x10+P2, %rdx ; \ + xorl %ecx, %ecx ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + movq %r10, 520(%rsp) ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rbx, %r8 ; \ + mulxq 0x30+P1, %rax, %rbx ; \ + adcxq %rax, %r8 ; \ + adoxq %rbx, %r9 ; \ + mulxq 0x38+P1, %rax, %r10 ; \ + adcxq %rax, %r9 ; \ + adoxq %rcx, %r10 ; \ + adcq %rcx, %r10 ; \ + movq 0x18+P2, %rdx ; \ + xorl %ecx, %ecx ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + movq %r11, 528(%rsp) ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rbx, %r8 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcxq %rax, %r8 ; \ + adoxq %rbx, %r9 ; \ + mulxq 0x30+P1, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq 0x38+P1, %rax, %r11 ; \ + adcxq %rax, %r10 ; \ + adoxq %rcx, %r11 ; \ + adcq %rcx, %r11 ; \ + movq 0x20+P2, %rdx ; \ + xorl %ecx, %ecx ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + movq %r12, 536(%rsp) ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rbx, %r8 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r8 ; \ + adoxq %rbx, %r9 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq 0x30+P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x38+P1, %rax, %r12 ; \ + adcxq %rax, %r11 ; \ + adoxq %rcx, %r12 ; \ + adcq %rcx, %r12 ; \ + movq 0x28+P2, %rdx ; \ + xorl %ecx, %ecx ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + movq %r13, 544(%rsp) ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rbx, %r8 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r8 ; \ + adoxq %rbx, %r9 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x30+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x38+P1, %rax, %r13 ; \ + adcxq %rax, %r12 ; \ + adoxq %rcx, %r13 ; \ + adcq %rcx, %r13 ; \ + movq 0x30+P2, %rdx ; \ + xorl %ecx, %ecx ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + movq %r14, 552(%rsp) ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rbx, %r8 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r8 ; \ + adoxq %rbx, %r9 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x30+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x38+P1, %rax, %r14 ; \ + adcxq %rax, %r13 ; \ + adoxq %rcx, %r14 ; \ + adcq %rcx, %r14 ; \ + movq 0x38+P2, %rdx ; \ + xorl %ecx, %ecx ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rbx, %r8 ; \ + movq %r15, 560(%rsp) ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r8 ; \ + adoxq %rbx, %r9 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x30+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x38+P1, %rax, %r15 ; \ + adcxq %rax, %r14 ; \ + adoxq %rcx, %r15 ; \ + adcq %rcx, %r15 ; \ + movq 0x40+P1, %rdx ; \ + xorl %ecx, %ecx ; \ + mulxq P2, %rax, %rbx ; \ + adcxq %rax, %r8 ; \ + adoxq %rbx, %r9 ; \ + mulxq 0x8+P2, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq 0x10+P2, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x18+P2, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x20+P2, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x28+P2, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x30+P2, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + mulxq 0x38+P2, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rcx, %rbx ; \ + adcq %rbx, %rcx ; \ + movq 0x40+P2, %rdx ; \ + xorl %eax, %eax ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r8 ; \ + adoxq %rbx, %r9 ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x30+P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + mulxq 0x38+P1, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rbx, %rcx ; \ + mulxq 0x40+P1, %rax, %rbx ; \ + adcq %rax, %rcx ; \ + movq %r8, %rax ; \ + andq $0x1ff, %rax ; \ + shrdq $0x9, %r9, %r8 ; \ + shrdq $0x9, %r10, %r9 ; \ + shrdq $0x9, %r11, %r10 ; \ + shrdq $0x9, %r12, %r11 ; \ + shrdq $0x9, %r13, %r12 ; \ + shrdq $0x9, %r14, %r13 ; \ + shrdq $0x9, %r15, %r14 ; \ + shrdq $0x9, %rcx, %r15 ; \ + shrq $0x9, %rcx ; \ + addq %rax, %rcx ; \ + stc; \ + adcq 504(%rsp), %r8 ; \ + adcq 512(%rsp), %r9 ; \ + adcq 520(%rsp), %r10 ; \ + adcq 528(%rsp), %r11 ; \ + adcq 536(%rsp), %r12 ; \ + adcq 544(%rsp), %r13 ; \ + adcq 552(%rsp), %r14 ; \ + adcq 560(%rsp), %r15 ; \ + adcq $0xfffffffffffffe00, %rcx ; \ + cmc; \ + sbbq $0x0, %r8 ; \ + movq %r8, P0 ; \ + sbbq $0x0, %r9 ; \ + movq %r9, 0x8+P0 ; \ + sbbq $0x0, %r10 ; \ + movq %r10, 0x10+P0 ; \ + sbbq $0x0, %r11 ; \ + movq %r11, 0x18+P0 ; \ + sbbq $0x0, %r12 ; \ + movq %r12, 0x20+P0 ; \ + sbbq $0x0, %r13 ; \ + movq %r13, 0x28+P0 ; \ + sbbq $0x0, %r14 ; \ + movq %r14, 0x30+P0 ; \ + sbbq $0x0, %r15 ; \ + movq %r15, 0x38+P0 ; \ + sbbq $0x0, %rcx ; \ + andq $0x1ff, %rcx ; \ + movq %rcx, 0x40+P0 + +// Corresponds exactly to bignum_sqr_p521 + +#define sqr_p521(P0,P1) \ + xorl %ecx, %ecx ; \ + movq P1, %rdx ; \ + mulxq 0x8+P1, %r9, %rax ; \ + movq %r9, 512(%rsp) ; \ + mulxq 0x10+P1, %r10, %rbx ; \ + adcxq %rax, %r10 ; \ + movq %r10, 520(%rsp) ; \ + mulxq 0x18+P1, %r11, %rax ; \ + adcxq %rbx, %r11 ; \ + mulxq 0x20+P1, %r12, %rbx ; \ + adcxq %rax, %r12 ; \ + mulxq 0x28+P1, %r13, %rax ; \ + adcxq %rbx, %r13 ; \ + mulxq 0x30+P1, %r14, %rbx ; \ + adcxq %rax, %r14 ; \ + mulxq 0x38+P1, %r15, %r8 ; \ + adcxq %rbx, %r15 ; \ + adcxq %rcx, %r8 ; \ + xorl %ecx, %ecx ; \ + movq 0x8+P1, %rdx ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + movq %r11, 528(%rsp) ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + movq %r12, 536(%rsp) ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + mulxq 0x30+P1, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rbx, %r8 ; \ + mulxq 0x38+P1, %rax, %r9 ; \ + adcxq %rax, %r8 ; \ + adoxq %rcx, %r9 ; \ + movq 0x20+P1, %rdx ; \ + mulxq 0x28+P1, %rax, %r10 ; \ + adcxq %rax, %r9 ; \ + adoxq %rcx, %r10 ; \ + adcxq %rcx, %r10 ; \ + xorl %ecx, %ecx ; \ + movq 0x10+P1, %rdx ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + movq %r13, 544(%rsp) ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + movq %r14, 552(%rsp) ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rbx, %r8 ; \ + mulxq 0x30+P1, %rax, %rbx ; \ + adcxq %rax, %r8 ; \ + adoxq %rbx, %r9 ; \ + mulxq 0x38+P1, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + movq 0x30+P1, %rdx ; \ + mulxq 0x20+P1, %rax, %r11 ; \ + adcxq %rax, %r10 ; \ + adoxq %rcx, %r11 ; \ + mulxq 0x28+P1, %rax, %r12 ; \ + adcxq %rax, %r11 ; \ + adoxq %rcx, %r12 ; \ + adcxq %rcx, %r12 ; \ + xorl %ecx, %ecx ; \ + movq 0x18+P1, %rdx ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rbx, %r8 ; \ + movq %r15, 560(%rsp) ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcxq %rax, %r8 ; \ + adoxq %rbx, %r9 ; \ + mulxq 0x30+P1, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq 0x38+P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + movq 0x38+P1, %rdx ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x28+P1, %rax, %r13 ; \ + adcxq %rax, %r12 ; \ + adoxq %rcx, %r13 ; \ + mulxq 0x30+P1, %rax, %r14 ; \ + adcxq %rax, %r13 ; \ + adoxq %rcx, %r14 ; \ + adcxq %rcx, %r14 ; \ + xorl %ecx, %ecx ; \ + movq P1, %rdx ; \ + mulxq %rdx, %rax, %rbx ; \ + movq %rax, 504(%rsp) ; \ + movq 512(%rsp), %rax ; \ + adcxq %rax, %rax ; \ + adoxq %rbx, %rax ; \ + movq %rax, 512(%rsp) ; \ + movq 520(%rsp), %rax ; \ + movq 0x8+P1, %rdx ; \ + mulxq %rdx, %rdx, %rbx ; \ + adcxq %rax, %rax ; \ + adoxq %rdx, %rax ; \ + movq %rax, 520(%rsp) ; \ + movq 528(%rsp), %rax ; \ + adcxq %rax, %rax ; \ + adoxq %rbx, %rax ; \ + movq %rax, 528(%rsp) ; \ + movq 536(%rsp), %rax ; \ + movq 0x10+P1, %rdx ; \ + mulxq %rdx, %rdx, %rbx ; \ + adcxq %rax, %rax ; \ + adoxq %rdx, %rax ; \ + movq %rax, 536(%rsp) ; \ + movq 544(%rsp), %rax ; \ + adcxq %rax, %rax ; \ + adoxq %rbx, %rax ; \ + movq %rax, 544(%rsp) ; \ + movq 552(%rsp), %rax ; \ + movq 0x18+P1, %rdx ; \ + mulxq %rdx, %rdx, %rbx ; \ + adcxq %rax, %rax ; \ + adoxq %rdx, %rax ; \ + movq %rax, 552(%rsp) ; \ + movq 560(%rsp), %rax ; \ + adcxq %rax, %rax ; \ + adoxq %rbx, %rax ; \ + movq %rax, 560(%rsp) ; \ + movq 0x20+P1, %rdx ; \ + mulxq %rdx, %rdx, %rbx ; \ + adcxq %r8, %r8 ; \ + adoxq %rdx, %r8 ; \ + adcxq %r9, %r9 ; \ + adoxq %rbx, %r9 ; \ + movq 0x28+P1, %rdx ; \ + mulxq %rdx, %rdx, %rbx ; \ + adcxq %r10, %r10 ; \ + adoxq %rdx, %r10 ; \ + adcxq %r11, %r11 ; \ + adoxq %rbx, %r11 ; \ + movq 0x30+P1, %rdx ; \ + mulxq %rdx, %rdx, %rbx ; \ + adcxq %r12, %r12 ; \ + adoxq %rdx, %r12 ; \ + adcxq %r13, %r13 ; \ + adoxq %rbx, %r13 ; \ + movq 0x38+P1, %rdx ; \ + mulxq %rdx, %rdx, %r15 ; \ + adcxq %r14, %r14 ; \ + adoxq %rdx, %r14 ; \ + adcxq %rcx, %r15 ; \ + adoxq %rcx, %r15 ; \ + movq 0x40+P1, %rdx ; \ + movq %rdx, %rcx ; \ + imulq %rcx, %rcx ; \ + addq %rdx, %rdx ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r8 ; \ + adoxq %rbx, %r9 ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x30+P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + mulxq 0x38+P1, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rbx, %rcx ; \ + adcq $0x0, %rcx ; \ + movq %r8, %rax ; \ + andq $0x1ff, %rax ; \ + shrdq $0x9, %r9, %r8 ; \ + shrdq $0x9, %r10, %r9 ; \ + shrdq $0x9, %r11, %r10 ; \ + shrdq $0x9, %r12, %r11 ; \ + shrdq $0x9, %r13, %r12 ; \ + shrdq $0x9, %r14, %r13 ; \ + shrdq $0x9, %r15, %r14 ; \ + shrdq $0x9, %rcx, %r15 ; \ + shrq $0x9, %rcx ; \ + addq %rax, %rcx ; \ + stc; \ + adcq 504(%rsp), %r8 ; \ + adcq 512(%rsp), %r9 ; \ + adcq 520(%rsp), %r10 ; \ + adcq 528(%rsp), %r11 ; \ + adcq 536(%rsp), %r12 ; \ + adcq 544(%rsp), %r13 ; \ + adcq 552(%rsp), %r14 ; \ + adcq 560(%rsp), %r15 ; \ + adcq $0xfffffffffffffe00, %rcx ; \ + cmc; \ + sbbq $0x0, %r8 ; \ + movq %r8, P0 ; \ + sbbq $0x0, %r9 ; \ + movq %r9, 0x8+P0 ; \ + sbbq $0x0, %r10 ; \ + movq %r10, 0x10+P0 ; \ + sbbq $0x0, %r11 ; \ + movq %r11, 0x18+P0 ; \ + sbbq $0x0, %r12 ; \ + movq %r12, 0x20+P0 ; \ + sbbq $0x0, %r13 ; \ + movq %r13, 0x28+P0 ; \ + sbbq $0x0, %r14 ; \ + movq %r14, 0x30+P0 ; \ + sbbq $0x0, %r15 ; \ + movq %r15, 0x38+P0 ; \ + sbbq $0x0, %rcx ; \ + andq $0x1ff, %rcx ; \ + movq %rcx, 0x40+P0 + +// Corresponds exactly to bignum_add_p521 + +#define add_p521(P0,P1,P2) \ + stc; \ + movq P1, %rax ; \ + adcq P2, %rax ; \ + movq 0x8+P1, %rbx ; \ + adcq 0x8+P2, %rbx ; \ + movq 0x10+P1, %r8 ; \ + adcq 0x10+P2, %r8 ; \ + movq 0x18+P1, %r9 ; \ + adcq 0x18+P2, %r9 ; \ + movq 0x20+P1, %r10 ; \ + adcq 0x20+P2, %r10 ; \ + movq 0x28+P1, %r11 ; \ + adcq 0x28+P2, %r11 ; \ + movq 0x30+P1, %r12 ; \ + adcq 0x30+P2, %r12 ; \ + movq 0x38+P1, %r13 ; \ + adcq 0x38+P2, %r13 ; \ + movq 0x40+P1, %r14 ; \ + adcq 0x40+P2, %r14 ; \ + movq $0x200, %rdx ; \ + andq %r14, %rdx ; \ + cmpq $0x200, %rdx ; \ + sbbq $0x0, %rax ; \ + movq %rax, P0 ; \ + sbbq $0x0, %rbx ; \ + movq %rbx, 0x8+P0 ; \ + sbbq $0x0, %r8 ; \ + movq %r8, 0x10+P0 ; \ + sbbq $0x0, %r9 ; \ + movq %r9, 0x18+P0 ; \ + sbbq $0x0, %r10 ; \ + movq %r10, 0x20+P0 ; \ + sbbq $0x0, %r11 ; \ + movq %r11, 0x28+P0 ; \ + sbbq $0x0, %r12 ; \ + movq %r12, 0x30+P0 ; \ + sbbq $0x0, %r13 ; \ + movq %r13, 0x38+P0 ; \ + sbbq %rdx, %r14 ; \ + movq %r14, 0x40+P0 + +// Corresponds exactly to bignum_sub_p521 + +#define sub_p521(P0,P1,P2) \ + movq P1, %rax ; \ + subq P2, %rax ; \ + movq 0x8+P1, %rdx ; \ + sbbq 0x8+P2, %rdx ; \ + movq 0x10+P1, %r8 ; \ + sbbq 0x10+P2, %r8 ; \ + movq 0x18+P1, %r9 ; \ + sbbq 0x18+P2, %r9 ; \ + movq 0x20+P1, %r10 ; \ + sbbq 0x20+P2, %r10 ; \ + movq 0x28+P1, %r11 ; \ + sbbq 0x28+P2, %r11 ; \ + movq 0x30+P1, %r12 ; \ + sbbq 0x30+P2, %r12 ; \ + movq 0x38+P1, %r13 ; \ + sbbq 0x38+P2, %r13 ; \ + movq 0x40+P1, %r14 ; \ + sbbq 0x40+P2, %r14 ; \ + sbbq $0x0, %rax ; \ + movq %rax, P0 ; \ + sbbq $0x0, %rdx ; \ + movq %rdx, 0x8+P0 ; \ + sbbq $0x0, %r8 ; \ + movq %r8, 0x10+P0 ; \ + sbbq $0x0, %r9 ; \ + movq %r9, 0x18+P0 ; \ + sbbq $0x0, %r10 ; \ + movq %r10, 0x20+P0 ; \ + sbbq $0x0, %r11 ; \ + movq %r11, 0x28+P0 ; \ + sbbq $0x0, %r12 ; \ + movq %r12, 0x30+P0 ; \ + sbbq $0x0, %r13 ; \ + movq %r13, 0x38+P0 ; \ + sbbq $0x0, %r14 ; \ + andq $0x1ff, %r14 ; \ + movq %r14, 0x40+P0 + +// Weak multiplication not fully reducing + +#define weakmul_p521(P0,P1,P2) \ + xorl %ecx, %ecx ; \ + movq P2, %rdx ; \ + mulxq P1, %r8, %r9 ; \ + movq %r8, 504(%rsp) ; \ + mulxq 0x8+P1, %rbx, %r10 ; \ + adcq %rbx, %r9 ; \ + mulxq 0x10+P1, %rbx, %r11 ; \ + adcq %rbx, %r10 ; \ + mulxq 0x18+P1, %rbx, %r12 ; \ + adcq %rbx, %r11 ; \ + mulxq 0x20+P1, %rbx, %r13 ; \ + adcq %rbx, %r12 ; \ + mulxq 0x28+P1, %rbx, %r14 ; \ + adcq %rbx, %r13 ; \ + mulxq 0x30+P1, %rbx, %r15 ; \ + adcq %rbx, %r14 ; \ + mulxq 0x38+P1, %rbx, %r8 ; \ + adcq %rbx, %r15 ; \ + adcq %rcx, %r8 ; \ + movq 0x8+P2, %rdx ; \ + xorl %ecx, %ecx ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + movq %r9, 512(%rsp) ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + mulxq 0x30+P1, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rbx, %r8 ; \ + mulxq 0x38+P1, %rax, %r9 ; \ + adcxq %rax, %r8 ; \ + adoxq %rcx, %r9 ; \ + adcq %rcx, %r9 ; \ + movq 0x10+P2, %rdx ; \ + xorl %ecx, %ecx ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + movq %r10, 520(%rsp) ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rbx, %r8 ; \ + mulxq 0x30+P1, %rax, %rbx ; \ + adcxq %rax, %r8 ; \ + adoxq %rbx, %r9 ; \ + mulxq 0x38+P1, %rax, %r10 ; \ + adcxq %rax, %r9 ; \ + adoxq %rcx, %r10 ; \ + adcq %rcx, %r10 ; \ + movq 0x18+P2, %rdx ; \ + xorl %ecx, %ecx ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + movq %r11, 528(%rsp) ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rbx, %r8 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcxq %rax, %r8 ; \ + adoxq %rbx, %r9 ; \ + mulxq 0x30+P1, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq 0x38+P1, %rax, %r11 ; \ + adcxq %rax, %r10 ; \ + adoxq %rcx, %r11 ; \ + adcq %rcx, %r11 ; \ + movq 0x20+P2, %rdx ; \ + xorl %ecx, %ecx ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + movq %r12, 536(%rsp) ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rbx, %r8 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r8 ; \ + adoxq %rbx, %r9 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq 0x30+P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x38+P1, %rax, %r12 ; \ + adcxq %rax, %r11 ; \ + adoxq %rcx, %r12 ; \ + adcq %rcx, %r12 ; \ + movq 0x28+P2, %rdx ; \ + xorl %ecx, %ecx ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + movq %r13, 544(%rsp) ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rbx, %r8 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r8 ; \ + adoxq %rbx, %r9 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x30+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x38+P1, %rax, %r13 ; \ + adcxq %rax, %r12 ; \ + adoxq %rcx, %r13 ; \ + adcq %rcx, %r13 ; \ + movq 0x30+P2, %rdx ; \ + xorl %ecx, %ecx ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + movq %r14, 552(%rsp) ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rbx, %r8 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r8 ; \ + adoxq %rbx, %r9 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x30+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x38+P1, %rax, %r14 ; \ + adcxq %rax, %r13 ; \ + adoxq %rcx, %r14 ; \ + adcq %rcx, %r14 ; \ + movq 0x38+P2, %rdx ; \ + xorl %ecx, %ecx ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rbx, %r8 ; \ + movq %r15, 560(%rsp) ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r8 ; \ + adoxq %rbx, %r9 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x30+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x38+P1, %rax, %r15 ; \ + adcxq %rax, %r14 ; \ + adoxq %rcx, %r15 ; \ + adcq %rcx, %r15 ; \ + movq 0x40+P1, %rdx ; \ + xorl %ecx, %ecx ; \ + mulxq P2, %rax, %rbx ; \ + adcxq %rax, %r8 ; \ + adoxq %rbx, %r9 ; \ + mulxq 0x8+P2, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq 0x10+P2, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x18+P2, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x20+P2, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x28+P2, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x30+P2, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + mulxq 0x38+P2, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rcx, %rbx ; \ + adcq %rbx, %rcx ; \ + movq 0x40+P2, %rdx ; \ + xorl %eax, %eax ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r8 ; \ + adoxq %rbx, %r9 ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x30+P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + mulxq 0x38+P1, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rbx, %rcx ; \ + mulxq 0x40+P1, %rax, %rbx ; \ + adcq %rax, %rcx ; \ + movq %r8, %rax ; \ + andq $0x1ff, %rax ; \ + shrdq $0x9, %r9, %r8 ; \ + shrdq $0x9, %r10, %r9 ; \ + shrdq $0x9, %r11, %r10 ; \ + shrdq $0x9, %r12, %r11 ; \ + shrdq $0x9, %r13, %r12 ; \ + shrdq $0x9, %r14, %r13 ; \ + shrdq $0x9, %r15, %r14 ; \ + shrdq $0x9, %rcx, %r15 ; \ + shrq $0x9, %rcx ; \ + addq %rax, %rcx ; \ + addq 504(%rsp), %r8 ; \ + movq %r8, P0 ; \ + adcq 512(%rsp), %r9 ; \ + movq %r9, 0x8+P0 ; \ + adcq 520(%rsp), %r10 ; \ + movq %r10, 0x10+P0 ; \ + adcq 528(%rsp), %r11 ; \ + movq %r11, 0x18+P0 ; \ + adcq 536(%rsp), %r12 ; \ + movq %r12, 0x20+P0 ; \ + adcq 544(%rsp), %r13 ; \ + movq %r13, 0x28+P0 ; \ + adcq 552(%rsp), %r14 ; \ + movq %r14, 0x30+P0 ; \ + adcq 560(%rsp), %r15 ; \ + movq %r15, 0x38+P0 ; \ + adcq $0, %rcx ; \ + movq %rcx, 0x40+P0 + +// P0 = C * P1 - D * P2 == C * P1 + D * (p_521 - P2) + +#define cmsub_p521(P0,C,P1,D,P2) \ + movq $D, %rdx ; \ + movq 64+P2, %rbx ; \ + xorq $0x1FF, %rbx ; \ + movq P2, %rax ; \ + notq %rax; \ + mulxq %rax, %r8, %r9 ; \ + movq 8+P2, %rax ; \ + notq %rax; \ + mulxq %rax, %rax, %r10 ; \ + addq %rax, %r9 ; \ + movq 16+P2, %rax ; \ + notq %rax; \ + mulxq %rax, %rax, %r11 ; \ + adcq %rax, %r10 ; \ + movq 24+P2, %rax ; \ + notq %rax; \ + mulxq %rax, %rax, %r12 ; \ + adcq %rax, %r11 ; \ + movq 32+P2, %rax ; \ + notq %rax; \ + mulxq %rax, %rax, %r13 ; \ + adcq %rax, %r12 ; \ + movq 40+P2, %rax ; \ + notq %rax; \ + mulxq %rax, %rax, %r14 ; \ + adcq %rax, %r13 ; \ + movq 48+P2, %rax ; \ + notq %rax; \ + mulxq %rax, %rax, %r15 ; \ + adcq %rax, %r14 ; \ + movq 56+P2, %rax ; \ + notq %rax; \ + mulxq %rax, %rax, %rcx ; \ + adcq %rax, %r15 ; \ + mulxq %rbx, %rbx, %rax ; \ + adcq %rcx, %rbx ; \ + xorl %eax, %eax ; \ + movq $C, %rdx ; \ + mulxq P1, %rax, %rcx ; \ + adcxq %rax, %r8 ; \ + adoxq %rcx, %r9 ; \ + mulxq 8+P1, %rax, %rcx ; \ + adcxq %rax, %r9 ; \ + adoxq %rcx, %r10 ; \ + mulxq 16+P1, %rax, %rcx ; \ + adcxq %rax, %r10 ; \ + adoxq %rcx, %r11 ; \ + mulxq 24+P1, %rax, %rcx ; \ + adcxq %rax, %r11 ; \ + adoxq %rcx, %r12 ; \ + mulxq 32+P1, %rax, %rcx ; \ + adcxq %rax, %r12 ; \ + adoxq %rcx, %r13 ; \ + mulxq 40+P1, %rax, %rcx ; \ + adcxq %rax, %r13 ; \ + adoxq %rcx, %r14 ; \ + mulxq 48+P1, %rax, %rcx ; \ + adcxq %rax, %r14 ; \ + adoxq %rcx, %r15 ; \ + mulxq 56+P1, %rax, %rcx ; \ + adcxq %rax, %r15 ; \ + adoxq %rcx, %rbx ; \ + mulxq 64+P1, %rax, %rcx ; \ + adcxq %rax, %rbx ; \ + movq %r9, %rax ; \ + andq %r10, %rax ; \ + andq %r11, %rax ; \ + andq %r12, %rax ; \ + andq %r13, %rax ; \ + andq %r14, %rax ; \ + andq %r15, %rax ; \ + movq %rbx, %rdx ; \ + shrq $9, %rdx ; \ + orq $~0x1FF, %rbx ; \ + leaq 1(%rdx), %rcx ; \ + addq %r8, %rcx ; \ + movl $0, %ecx ; \ + adcq %rcx, %rax ; \ + movq %rbx, %rax ; \ + adcq %rcx, %rax ; \ + adcq %rdx, %r8 ; \ + movq %r8, P0 ; \ + adcq %rcx, %r9 ; \ + movq %r9, 8+P0 ; \ + adcq %rcx, %r10 ; \ + movq %r10, 16+P0 ; \ + adcq %rcx, %r11 ; \ + movq %r11, 24+P0 ; \ + adcq %rcx, %r12 ; \ + movq %r12, 32+P0 ; \ + adcq %rcx, %r13 ; \ + movq %r13, 40+P0 ; \ + adcq %rcx, %r14 ; \ + movq %r14, 48+P0 ; \ + adcq %rcx, %r15 ; \ + movq %r15, 56+P0 ; \ + adcq %rcx, %rbx ; \ + andq $0x1FF, %rbx ; \ + movq %rbx, 64+P0 + +// P0 = 3 * P1 - 8 * P2 == 3 * P1 + 8 * (p_521 - P2) + +#define cmsub38_p521(P0,P1,P2) \ + movq 64+P2, %rbx ; \ + xorq $0x1FF, %rbx ; \ + movq 56+P2, %r15 ; \ + notq %r15; \ + shldq $3, %r15, %rbx ; \ + movq 48+P2, %r14 ; \ + notq %r14; \ + shldq $3, %r14, %r15 ; \ + movq 40+P2, %r13 ; \ + notq %r13; \ + shldq $3, %r13, %r14 ; \ + movq 32+P2, %r12 ; \ + notq %r12; \ + shldq $3, %r12, %r13 ; \ + movq 24+P2, %r11 ; \ + notq %r11; \ + shldq $3, %r11, %r12 ; \ + movq 16+P2, %r10 ; \ + notq %r10; \ + shldq $3, %r10, %r11 ; \ + movq 8+P2, %r9 ; \ + notq %r9; \ + shldq $3, %r9, %r10 ; \ + movq P2, %r8 ; \ + notq %r8; \ + shldq $3, %r8, %r9 ; \ + shlq $3, %r8 ; \ + movq $3, %rdx ; \ + xorl %eax, %eax ; \ + mulxq P1, %rax, %rcx ; \ + adcxq %rax, %r8 ; \ + adoxq %rcx, %r9 ; \ + mulxq 8+P1, %rax, %rcx ; \ + adcxq %rax, %r9 ; \ + adoxq %rcx, %r10 ; \ + mulxq 16+P1, %rax, %rcx ; \ + adcxq %rax, %r10 ; \ + adoxq %rcx, %r11 ; \ + mulxq 24+P1, %rax, %rcx ; \ + adcxq %rax, %r11 ; \ + adoxq %rcx, %r12 ; \ + mulxq 32+P1, %rax, %rcx ; \ + adcxq %rax, %r12 ; \ + adoxq %rcx, %r13 ; \ + mulxq 40+P1, %rax, %rcx ; \ + adcxq %rax, %r13 ; \ + adoxq %rcx, %r14 ; \ + mulxq 48+P1, %rax, %rcx ; \ + adcxq %rax, %r14 ; \ + adoxq %rcx, %r15 ; \ + mulxq 56+P1, %rax, %rcx ; \ + adcxq %rax, %r15 ; \ + adoxq %rcx, %rbx ; \ + mulxq 64+P1, %rax, %rcx ; \ + adcxq %rax, %rbx ; \ + movq %r9, %rax ; \ + andq %r10, %rax ; \ + andq %r11, %rax ; \ + andq %r12, %rax ; \ + andq %r13, %rax ; \ + andq %r14, %rax ; \ + andq %r15, %rax ; \ + movq %rbx, %rdx ; \ + shrq $9, %rdx ; \ + orq $~0x1FF, %rbx ; \ + leaq 1(%rdx), %rcx ; \ + addq %r8, %rcx ; \ + movl $0, %ecx ; \ + adcq %rcx, %rax ; \ + movq %rbx, %rax ; \ + adcq %rcx, %rax ; \ + adcq %rdx, %r8 ; \ + movq %r8, P0 ; \ + adcq %rcx, %r9 ; \ + movq %r9, 8+P0 ; \ + adcq %rcx, %r10 ; \ + movq %r10, 16+P0 ; \ + adcq %rcx, %r11 ; \ + movq %r11, 24+P0 ; \ + adcq %rcx, %r12 ; \ + movq %r12, 32+P0 ; \ + adcq %rcx, %r13 ; \ + movq %r13, 40+P0 ; \ + adcq %rcx, %r14 ; \ + movq %r14, 48+P0 ; \ + adcq %rcx, %r15 ; \ + movq %r15, 56+P0 ; \ + adcq %rcx, %rbx ; \ + andq $0x1FF, %rbx ; \ + movq %rbx, 64+P0 + +// P0 = 4 * P1 - P2 = 4 * P1 + (p_521 - P2) + +#define cmsub41_p521(P0,P1,P2) \ + movq 64+P1, %rbx ; \ + movq 56+P1, %r15 ; \ + shldq $2, %r15, %rbx ; \ + movq 48+P1, %r14 ; \ + shldq $2, %r14, %r15 ; \ + movq 40+P1, %r13 ; \ + shldq $2, %r13, %r14 ; \ + movq 32+P1, %r12 ; \ + shldq $2, %r12, %r13 ; \ + movq 24+P1, %r11 ; \ + shldq $2, %r11, %r12 ; \ + movq 16+P1, %r10 ; \ + shldq $2, %r10, %r11 ; \ + movq 8+P1, %r9 ; \ + shldq $2, %r9, %r10 ; \ + movq P1, %r8 ; \ + shldq $2, %r8, %r9 ; \ + shlq $2, %r8 ; \ + movq 64+P2, %rcx ; \ + xorq $0x1FF, %rcx ; \ + movq P2, %rax ; \ + notq %rax; \ + addq %rax, %r8 ; \ + movq 8+P2, %rax ; \ + notq %rax; \ + adcq %rax, %r9 ; \ + movq 16+P2, %rax ; \ + notq %rax; \ + adcq %rax, %r10 ; \ + movq 24+P2, %rax ; \ + notq %rax; \ + adcq %rax, %r11 ; \ + movq 32+P2, %rax ; \ + notq %rax; \ + adcq %rax, %r12 ; \ + movq 40+P2, %rax ; \ + notq %rax; \ + adcq %rax, %r13 ; \ + movq 48+P2, %rax ; \ + notq %rax; \ + adcq %rax, %r14 ; \ + movq 56+P2, %rax ; \ + notq %rax; \ + adcq %rax, %r15 ; \ + adcq %rcx, %rbx ; \ + movq %r9, %rax ; \ + andq %r10, %rax ; \ + andq %r11, %rax ; \ + andq %r12, %rax ; \ + andq %r13, %rax ; \ + andq %r14, %rax ; \ + andq %r15, %rax ; \ + movq %rbx, %rdx ; \ + shrq $9, %rdx ; \ + orq $~0x1FF, %rbx ; \ + leaq 1(%rdx), %rcx ; \ + addq %r8, %rcx ; \ + movl $0, %ecx ; \ + adcq %rcx, %rax ; \ + movq %rbx, %rax ; \ + adcq %rcx, %rax ; \ + adcq %rdx, %r8 ; \ + movq %r8, P0 ; \ + adcq %rcx, %r9 ; \ + movq %r9, 8+P0 ; \ + adcq %rcx, %r10 ; \ + movq %r10, 16+P0 ; \ + adcq %rcx, %r11 ; \ + movq %r11, 24+P0 ; \ + adcq %rcx, %r12 ; \ + movq %r12, 32+P0 ; \ + adcq %rcx, %r13 ; \ + movq %r13, 40+P0 ; \ + adcq %rcx, %r14 ; \ + movq %r14, 48+P0 ; \ + adcq %rcx, %r15 ; \ + movq %r15, 56+P0 ; \ + adcq %rcx, %rbx ; \ + andq $0x1FF, %rbx ; \ + movq %rbx, 64+P0 + +S2N_BN_SYMBOL(p521_jdouble): + +#if WINDOWS_ABI + pushq %rdi + pushq %rsi + movq %rcx, %rdi + movq %rdx, %rsi +#endif + +// Save registers and make room on stack for temporary variables + + pushq %rbx + pushq %r12 + pushq %r13 + pushq %r14 + pushq %r15 + + subq $NSPACE, %rsp + +// Main code, just a sequence of basic field operations + +// z2 = z^2 +// y2 = y^2 + + sqr_p521(z2,z_1) + sqr_p521(y2,y_1) + +// x2p = x^2 - z^4 = (x + z^2) * (x - z^2) + + add_p521(t1,x_1,z2) + sub_p521(t2,x_1,z2) + mul_p521(x2p,t1,t2) + +// t1 = y + z +// x4p = x2p^2 +// xy2 = x * y^2 + + add_p521(t1,y_1,z_1) + sqr_p521(x4p,x2p) + weakmul_p521(xy2,x_1,y2) + +// t2 = (y + z)^2 + + sqr_p521(t2,t1) + +// d = 12 * xy2 - 9 * x4p +// t1 = y^2 + 2 * y * z + + cmsub_p521(d,12,xy2,9,x4p) + sub_p521(t1,t2,z2) + +// y4 = y^4 + + sqr_p521(y4,y2) + +// z_3' = 2 * y * z +// dx2 = d * x2p + + sub_p521(z_3,t1,y2) + weakmul_p521(dx2,d,x2p) + +// x' = 4 * xy2 - d + + cmsub41_p521(x_3,xy2,d) + +// y' = 3 * dx2 - 8 * y4 + + cmsub38_p521(y_3,dx2,y4) + +// Restore stack and registers + + addq $NSPACE, %rsp + popq %r15 + popq %r14 + popq %r13 + popq %r12 + popq %rbx + +#if WINDOWS_ABI + popq %rsi + popq %rdi +#endif + ret + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack, "", %progbits +#endif diff --git a/x86_att/p521/p521_jmixadd.S b/x86_att/p521/p521_jmixadd.S new file mode 100644 index 0000000000..52e1568b56 --- /dev/null +++ b/x86_att/p521/p521_jmixadd.S @@ -0,0 +1,756 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "LICENSE" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +// ---------------------------------------------------------------------------- +// Point mixed addition on NIST curve P-521 in Jacobian coordinates +// +// extern void p521_jmixadd +// (uint64_t p3[static 27],uint64_t p1[static 27],uint64_t p2[static 18]); +// +// Does p3 := p1 + p2 where all points are regarded as Jacobian triples. +// A Jacobian triple (x,y,z) represents affine point (x/z^2,y/z^3). +// The "mixed" part means that p2 only has x and y coordinates, with the +// implicit z coordinate assumed to be the identity. It is assumed that +// all the coordinates of the input points p1 and p2 are fully reduced +// mod p_521, that the z coordinate of p1 is nonzero and that neither +// p1 =~= p2 or p1 =~= -p2, where "=~=" means "represents the same affine +// point as". +// +// Standard x86-64 ABI: RDI = p3, RSI = p1, RDX = p2 +// Microsoft x64 ABI: RCX = p3, RDX = p1, R8 = p2 +// ---------------------------------------------------------------------------- +#include "_internal_s2n_bignum.h" + + + S2N_BN_SYM_VISIBILITY_DIRECTIVE(p521_jmixadd) + S2N_BN_SYM_PRIVACY_DIRECTIVE(p521_jmixadd) + .text + +// Size of individual field elements + +#define NUMSIZE 72 + +// Stable homes for input arguments during main code sequence +// These are where they arrive except for input_y, initially in %rdx + +#define input_z %rdi +#define input_x %rsi +#define input_y %rcx + +// Pointer-offset pairs for inputs and outputs + +#define x_1 0(input_x) +#define y_1 NUMSIZE(input_x) +#define z_1 (2*NUMSIZE)(input_x) + +#define x_2 0(input_y) +#define y_2 NUMSIZE(input_y) + +#define x_3 0(input_z) +#define y_3 NUMSIZE(input_z) +#define z_3 (2*NUMSIZE)(input_z) + +// Pointer-offset pairs for temporaries, with some aliasing +// The tmp field is internal storage for field mul and sqr. +// NSPACE is the total stack needed for these temporaries + +#define zp2 (NUMSIZE*0)(%rsp) +#define ww (NUMSIZE*0)(%rsp) + +#define yd (NUMSIZE*1)(%rsp) +#define y2a (NUMSIZE*1)(%rsp) + +#define x2a (NUMSIZE*2)(%rsp) +#define zzx2 (NUMSIZE*2)(%rsp) + +#define zz (NUMSIZE*3)(%rsp) +#define t1 (NUMSIZE*3)(%rsp) + +#define t2 (NUMSIZE*4)(%rsp) +#define zzx1 (NUMSIZE*4)(%rsp) + +#define xd (NUMSIZE*5)(%rsp) + +#define tmp (NUMSIZE*6)(%rsp) + +#define NSPACE (NUMSIZE*6+64) + +// Corresponds exactly to bignum_mul_p521 + +#define mul_p521(P0,P1,P2) \ + xorl %ebp, %ebp ; \ + movq P2, %rdx ; \ + mulxq P1, %r8, %r9 ; \ + movq %r8, 432(%rsp) ; \ + mulxq 0x8+P1, %rbx, %r10 ; \ + adcq %rbx, %r9 ; \ + mulxq 0x10+P1, %rbx, %r11 ; \ + adcq %rbx, %r10 ; \ + mulxq 0x18+P1, %rbx, %r12 ; \ + adcq %rbx, %r11 ; \ + mulxq 0x20+P1, %rbx, %r13 ; \ + adcq %rbx, %r12 ; \ + mulxq 0x28+P1, %rbx, %r14 ; \ + adcq %rbx, %r13 ; \ + mulxq 0x30+P1, %rbx, %r15 ; \ + adcq %rbx, %r14 ; \ + mulxq 0x38+P1, %rbx, %r8 ; \ + adcq %rbx, %r15 ; \ + adcq %rbp, %r8 ; \ + movq 0x8+P2, %rdx ; \ + xorl %ebp, %ebp ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + movq %r9, 440(%rsp) ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + mulxq 0x30+P1, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rbx, %r8 ; \ + mulxq 0x38+P1, %rax, %r9 ; \ + adcxq %rax, %r8 ; \ + adoxq %rbp, %r9 ; \ + adcq %rbp, %r9 ; \ + movq 0x10+P2, %rdx ; \ + xorl %ebp, %ebp ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + movq %r10, 448(%rsp) ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rbx, %r8 ; \ + mulxq 0x30+P1, %rax, %rbx ; \ + adcxq %rax, %r8 ; \ + adoxq %rbx, %r9 ; \ + mulxq 0x38+P1, %rax, %r10 ; \ + adcxq %rax, %r9 ; \ + adoxq %rbp, %r10 ; \ + adcq %rbp, %r10 ; \ + movq 0x18+P2, %rdx ; \ + xorl %ebp, %ebp ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + movq %r11, 456(%rsp) ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rbx, %r8 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcxq %rax, %r8 ; \ + adoxq %rbx, %r9 ; \ + mulxq 0x30+P1, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq 0x38+P1, %rax, %r11 ; \ + adcxq %rax, %r10 ; \ + adoxq %rbp, %r11 ; \ + adcq %rbp, %r11 ; \ + movq 0x20+P2, %rdx ; \ + xorl %ebp, %ebp ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + movq %r12, 464(%rsp) ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rbx, %r8 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r8 ; \ + adoxq %rbx, %r9 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq 0x30+P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x38+P1, %rax, %r12 ; \ + adcxq %rax, %r11 ; \ + adoxq %rbp, %r12 ; \ + adcq %rbp, %r12 ; \ + movq 0x28+P2, %rdx ; \ + xorl %ebp, %ebp ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + movq %r13, 472(%rsp) ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rbx, %r8 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r8 ; \ + adoxq %rbx, %r9 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x30+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x38+P1, %rax, %r13 ; \ + adcxq %rax, %r12 ; \ + adoxq %rbp, %r13 ; \ + adcq %rbp, %r13 ; \ + movq 0x30+P2, %rdx ; \ + xorl %ebp, %ebp ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + movq %r14, 480(%rsp) ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rbx, %r8 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r8 ; \ + adoxq %rbx, %r9 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x30+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x38+P1, %rax, %r14 ; \ + adcxq %rax, %r13 ; \ + adoxq %rbp, %r14 ; \ + adcq %rbp, %r14 ; \ + movq 0x38+P2, %rdx ; \ + xorl %ebp, %ebp ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rbx, %r8 ; \ + movq %r15, 488(%rsp) ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r8 ; \ + adoxq %rbx, %r9 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x30+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x38+P1, %rax, %r15 ; \ + adcxq %rax, %r14 ; \ + adoxq %rbp, %r15 ; \ + adcq %rbp, %r15 ; \ + movq 0x40+P1, %rdx ; \ + xorl %ebp, %ebp ; \ + mulxq P2, %rax, %rbx ; \ + adcxq %rax, %r8 ; \ + adoxq %rbx, %r9 ; \ + mulxq 0x8+P2, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq 0x10+P2, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x18+P2, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x20+P2, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x28+P2, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x30+P2, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + mulxq 0x38+P2, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rbp, %rbx ; \ + adcq %rbx, %rbp ; \ + movq 0x40+P2, %rdx ; \ + xorl %eax, %eax ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r8 ; \ + adoxq %rbx, %r9 ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x30+P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + mulxq 0x38+P1, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rbx, %rbp ; \ + mulxq 0x40+P1, %rax, %rbx ; \ + adcq %rax, %rbp ; \ + movq %r8, %rax ; \ + andq $0x1ff, %rax ; \ + shrdq $0x9, %r9, %r8 ; \ + shrdq $0x9, %r10, %r9 ; \ + shrdq $0x9, %r11, %r10 ; \ + shrdq $0x9, %r12, %r11 ; \ + shrdq $0x9, %r13, %r12 ; \ + shrdq $0x9, %r14, %r13 ; \ + shrdq $0x9, %r15, %r14 ; \ + shrdq $0x9, %rbp, %r15 ; \ + shrq $0x9, %rbp ; \ + addq %rax, %rbp ; \ + stc; \ + adcq 432(%rsp), %r8 ; \ + adcq 440(%rsp), %r9 ; \ + adcq 448(%rsp), %r10 ; \ + adcq 456(%rsp), %r11 ; \ + adcq 464(%rsp), %r12 ; \ + adcq 472(%rsp), %r13 ; \ + adcq 480(%rsp), %r14 ; \ + adcq 488(%rsp), %r15 ; \ + adcq $0xfffffffffffffe00, %rbp ; \ + cmc; \ + sbbq $0x0, %r8 ; \ + movq %r8, P0 ; \ + sbbq $0x0, %r9 ; \ + movq %r9, 0x8+P0 ; \ + sbbq $0x0, %r10 ; \ + movq %r10, 0x10+P0 ; \ + sbbq $0x0, %r11 ; \ + movq %r11, 0x18+P0 ; \ + sbbq $0x0, %r12 ; \ + movq %r12, 0x20+P0 ; \ + sbbq $0x0, %r13 ; \ + movq %r13, 0x28+P0 ; \ + sbbq $0x0, %r14 ; \ + movq %r14, 0x30+P0 ; \ + sbbq $0x0, %r15 ; \ + movq %r15, 0x38+P0 ; \ + sbbq $0x0, %rbp ; \ + andq $0x1ff, %rbp ; \ + movq %rbp, 0x40+P0 + +// Corresponds exactly to bignum_sqr_p521 + +#define sqr_p521(P0,P1) \ + xorl %ebp, %ebp ; \ + movq P1, %rdx ; \ + mulxq 0x8+P1, %r9, %rax ; \ + movq %r9, 440(%rsp) ; \ + mulxq 0x10+P1, %r10, %rbx ; \ + adcxq %rax, %r10 ; \ + movq %r10, 448(%rsp) ; \ + mulxq 0x18+P1, %r11, %rax ; \ + adcxq %rbx, %r11 ; \ + mulxq 0x20+P1, %r12, %rbx ; \ + adcxq %rax, %r12 ; \ + mulxq 0x28+P1, %r13, %rax ; \ + adcxq %rbx, %r13 ; \ + mulxq 0x30+P1, %r14, %rbx ; \ + adcxq %rax, %r14 ; \ + mulxq 0x38+P1, %r15, %r8 ; \ + adcxq %rbx, %r15 ; \ + adcxq %rbp, %r8 ; \ + xorl %ebp, %ebp ; \ + movq 0x8+P1, %rdx ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + movq %r11, 456(%rsp) ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + movq %r12, 464(%rsp) ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + mulxq 0x30+P1, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rbx, %r8 ; \ + mulxq 0x38+P1, %rax, %r9 ; \ + adcxq %rax, %r8 ; \ + adoxq %rbp, %r9 ; \ + movq 0x20+P1, %rdx ; \ + mulxq 0x28+P1, %rax, %r10 ; \ + adcxq %rax, %r9 ; \ + adoxq %rbp, %r10 ; \ + adcxq %rbp, %r10 ; \ + xorl %ebp, %ebp ; \ + movq 0x10+P1, %rdx ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + movq %r13, 472(%rsp) ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + movq %r14, 480(%rsp) ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rbx, %r8 ; \ + mulxq 0x30+P1, %rax, %rbx ; \ + adcxq %rax, %r8 ; \ + adoxq %rbx, %r9 ; \ + mulxq 0x38+P1, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + movq 0x30+P1, %rdx ; \ + mulxq 0x20+P1, %rax, %r11 ; \ + adcxq %rax, %r10 ; \ + adoxq %rbp, %r11 ; \ + mulxq 0x28+P1, %rax, %r12 ; \ + adcxq %rax, %r11 ; \ + adoxq %rbp, %r12 ; \ + adcxq %rbp, %r12 ; \ + xorl %ebp, %ebp ; \ + movq 0x18+P1, %rdx ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rbx, %r8 ; \ + movq %r15, 488(%rsp) ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcxq %rax, %r8 ; \ + adoxq %rbx, %r9 ; \ + mulxq 0x30+P1, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq 0x38+P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + movq 0x38+P1, %rdx ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x28+P1, %rax, %r13 ; \ + adcxq %rax, %r12 ; \ + adoxq %rbp, %r13 ; \ + mulxq 0x30+P1, %rax, %r14 ; \ + adcxq %rax, %r13 ; \ + adoxq %rbp, %r14 ; \ + adcxq %rbp, %r14 ; \ + xorl %ebp, %ebp ; \ + movq P1, %rdx ; \ + mulxq %rdx, %rax, %rbx ; \ + movq %rax, 432(%rsp) ; \ + movq 440(%rsp), %rax ; \ + adcxq %rax, %rax ; \ + adoxq %rbx, %rax ; \ + movq %rax, 440(%rsp) ; \ + movq 448(%rsp), %rax ; \ + movq 0x8+P1, %rdx ; \ + mulxq %rdx, %rdx, %rbx ; \ + adcxq %rax, %rax ; \ + adoxq %rdx, %rax ; \ + movq %rax, 448(%rsp) ; \ + movq 456(%rsp), %rax ; \ + adcxq %rax, %rax ; \ + adoxq %rbx, %rax ; \ + movq %rax, 456(%rsp) ; \ + movq 464(%rsp), %rax ; \ + movq 0x10+P1, %rdx ; \ + mulxq %rdx, %rdx, %rbx ; \ + adcxq %rax, %rax ; \ + adoxq %rdx, %rax ; \ + movq %rax, 464(%rsp) ; \ + movq 472(%rsp), %rax ; \ + adcxq %rax, %rax ; \ + adoxq %rbx, %rax ; \ + movq %rax, 472(%rsp) ; \ + movq 480(%rsp), %rax ; \ + movq 0x18+P1, %rdx ; \ + mulxq %rdx, %rdx, %rbx ; \ + adcxq %rax, %rax ; \ + adoxq %rdx, %rax ; \ + movq %rax, 480(%rsp) ; \ + movq 488(%rsp), %rax ; \ + adcxq %rax, %rax ; \ + adoxq %rbx, %rax ; \ + movq %rax, 488(%rsp) ; \ + movq 0x20+P1, %rdx ; \ + mulxq %rdx, %rdx, %rbx ; \ + adcxq %r8, %r8 ; \ + adoxq %rdx, %r8 ; \ + adcxq %r9, %r9 ; \ + adoxq %rbx, %r9 ; \ + movq 0x28+P1, %rdx ; \ + mulxq %rdx, %rdx, %rbx ; \ + adcxq %r10, %r10 ; \ + adoxq %rdx, %r10 ; \ + adcxq %r11, %r11 ; \ + adoxq %rbx, %r11 ; \ + movq 0x30+P1, %rdx ; \ + mulxq %rdx, %rdx, %rbx ; \ + adcxq %r12, %r12 ; \ + adoxq %rdx, %r12 ; \ + adcxq %r13, %r13 ; \ + adoxq %rbx, %r13 ; \ + movq 0x38+P1, %rdx ; \ + mulxq %rdx, %rdx, %r15 ; \ + adcxq %r14, %r14 ; \ + adoxq %rdx, %r14 ; \ + adcxq %rbp, %r15 ; \ + adoxq %rbp, %r15 ; \ + movq 0x40+P1, %rdx ; \ + movq %rdx, %rbp ; \ + imulq %rbp, %rbp ; \ + addq %rdx, %rdx ; \ + mulxq P1, %rax, %rbx ; \ + adcxq %rax, %r8 ; \ + adoxq %rbx, %r9 ; \ + mulxq 0x8+P1, %rax, %rbx ; \ + adcxq %rax, %r9 ; \ + adoxq %rbx, %r10 ; \ + mulxq 0x10+P1, %rax, %rbx ; \ + adcxq %rax, %r10 ; \ + adoxq %rbx, %r11 ; \ + mulxq 0x18+P1, %rax, %rbx ; \ + adcxq %rax, %r11 ; \ + adoxq %rbx, %r12 ; \ + mulxq 0x20+P1, %rax, %rbx ; \ + adcxq %rax, %r12 ; \ + adoxq %rbx, %r13 ; \ + mulxq 0x28+P1, %rax, %rbx ; \ + adcxq %rax, %r13 ; \ + adoxq %rbx, %r14 ; \ + mulxq 0x30+P1, %rax, %rbx ; \ + adcxq %rax, %r14 ; \ + adoxq %rbx, %r15 ; \ + mulxq 0x38+P1, %rax, %rbx ; \ + adcxq %rax, %r15 ; \ + adoxq %rbx, %rbp ; \ + adcq $0x0, %rbp ; \ + movq %r8, %rax ; \ + andq $0x1ff, %rax ; \ + shrdq $0x9, %r9, %r8 ; \ + shrdq $0x9, %r10, %r9 ; \ + shrdq $0x9, %r11, %r10 ; \ + shrdq $0x9, %r12, %r11 ; \ + shrdq $0x9, %r13, %r12 ; \ + shrdq $0x9, %r14, %r13 ; \ + shrdq $0x9, %r15, %r14 ; \ + shrdq $0x9, %rbp, %r15 ; \ + shrq $0x9, %rbp ; \ + addq %rax, %rbp ; \ + stc; \ + adcq 432(%rsp), %r8 ; \ + adcq 440(%rsp), %r9 ; \ + adcq 448(%rsp), %r10 ; \ + adcq 456(%rsp), %r11 ; \ + adcq 464(%rsp), %r12 ; \ + adcq 472(%rsp), %r13 ; \ + adcq 480(%rsp), %r14 ; \ + adcq 488(%rsp), %r15 ; \ + adcq $0xfffffffffffffe00, %rbp ; \ + cmc; \ + sbbq $0x0, %r8 ; \ + movq %r8, P0 ; \ + sbbq $0x0, %r9 ; \ + movq %r9, 0x8+P0 ; \ + sbbq $0x0, %r10 ; \ + movq %r10, 0x10+P0 ; \ + sbbq $0x0, %r11 ; \ + movq %r11, 0x18+P0 ; \ + sbbq $0x0, %r12 ; \ + movq %r12, 0x20+P0 ; \ + sbbq $0x0, %r13 ; \ + movq %r13, 0x28+P0 ; \ + sbbq $0x0, %r14 ; \ + movq %r14, 0x30+P0 ; \ + sbbq $0x0, %r15 ; \ + movq %r15, 0x38+P0 ; \ + sbbq $0x0, %rbp ; \ + andq $0x1ff, %rbp ; \ + movq %rbp, 0x40+P0 + +// Corresponds exactly to bignum_sub_p521 + +#define sub_p521(P0,P1,P2) \ + movq P1, %rax ; \ + subq P2, %rax ; \ + movq 0x8+P1, %rdx ; \ + sbbq 0x8+P2, %rdx ; \ + movq 0x10+P1, %r8 ; \ + sbbq 0x10+P2, %r8 ; \ + movq 0x18+P1, %r9 ; \ + sbbq 0x18+P2, %r9 ; \ + movq 0x20+P1, %r10 ; \ + sbbq 0x20+P2, %r10 ; \ + movq 0x28+P1, %r11 ; \ + sbbq 0x28+P2, %r11 ; \ + movq 0x30+P1, %r12 ; \ + sbbq 0x30+P2, %r12 ; \ + movq 0x38+P1, %r13 ; \ + sbbq 0x38+P2, %r13 ; \ + movq 0x40+P1, %r14 ; \ + sbbq 0x40+P2, %r14 ; \ + sbbq $0x0, %rax ; \ + movq %rax, P0 ; \ + sbbq $0x0, %rdx ; \ + movq %rdx, 0x8+P0 ; \ + sbbq $0x0, %r8 ; \ + movq %r8, 0x10+P0 ; \ + sbbq $0x0, %r9 ; \ + movq %r9, 0x18+P0 ; \ + sbbq $0x0, %r10 ; \ + movq %r10, 0x20+P0 ; \ + sbbq $0x0, %r11 ; \ + movq %r11, 0x28+P0 ; \ + sbbq $0x0, %r12 ; \ + movq %r12, 0x30+P0 ; \ + sbbq $0x0, %r13 ; \ + movq %r13, 0x38+P0 ; \ + sbbq $0x0, %r14 ; \ + andq $0x1ff, %r14 ; \ + movq %r14, 0x40+P0 + +S2N_BN_SYMBOL(p521_jmixadd): + +#if WINDOWS_ABI + pushq %rdi + pushq %rsi + movq %rcx, %rdi + movq %rdx, %rsi + movq %r8, %rdx +#endif + +// Save registers and make room on stack for temporary variables + + pushq %rbx + pushq %rbp + pushq %r12 + pushq %r13 + pushq %r14 + pushq %r15 + + subq $NSPACE, %rsp + +// Move the input arguments to stable places (two are already there) + + movq %rdx, input_y + +// Main code, just a sequence of basic field operations + + sqr_p521(zp2,z_1) + mul_p521(y2a,z_1,y_2) + + mul_p521(x2a,zp2,x_2) + mul_p521(y2a,zp2,y2a) + + sub_p521(xd,x2a,x_1) + sub_p521(yd,y2a,y_1) + + sqr_p521(zz,xd) + sqr_p521(ww,yd) + + mul_p521(zzx1,zz,x_1) + mul_p521(zzx2,zz,x2a) + + sub_p521(x_3,ww,zzx1) + sub_p521(t1,zzx2,zzx1) + + mul_p521(z_3,xd,z_1) + + sub_p521(x_3,x_3,zzx2) + + sub_p521(t2,zzx1,x_3) + + mul_p521(t1,t1,y_1) + mul_p521(t2,yd,t2) + + sub_p521(y_3,t2,t1) + +// Restore stack and registers + + addq $NSPACE, %rsp + popq %r15 + popq %r14 + popq %r13 + popq %r12 + popq %rbp + popq %rbx + +#if WINDOWS_ABI + popq %rsi + popq %rdi +#endif + ret + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack, "", %progbits +#endif