| /* | 
 |   veri-titan commit hash: 47792932f788b92221ff61e4037811a867e747c7 | 
 | */ | 
 |  | 
 | .globl modexp_var_3072_f4 | 
 | modexp_var_3072_f4: | 
 |   bn.xor w31, w31, w31 << 0, FG0 | 
 |   li x8, 4 | 
 |   li x9, 3 | 
 |   li x10, 4 | 
 |   li x11, 2 | 
 |   addi x19, x23, 0 | 
 |   addi x20, x26, 0 | 
 |   addi x21, x24, 0 | 
 |   jal x1, montmul | 
 |   loopi 12, 3 | 
 |     bn.sid x8, 0(x21++) | 
 |     addi x8, x8, 1 | 
 |     nop | 
 |   loopi 16, 9 | 
 |     addi x19, x24, 0 | 
 |     addi x20, x24, 0 | 
 |     addi x21, x24, 0 | 
 |     jal x1, montmul | 
 |     loopi 12, 3 | 
 |       bn.sid x8, 0(x21++) | 
 |       addi x8, x8, 1 | 
 |       nop | 
 |     nop | 
 |   addi x19, x23, 0 | 
 |   addi x20, x24, 0 | 
 |   addi x21, x24, 0 | 
 |   jal x1, montmul | 
 |   bn.add w31, w31, w31 << 0, FG0 | 
 |   li x17, 16 | 
 |   loopi 12, 5 | 
 |     bn.movr x11, x8++ | 
 |     bn.lid x9, 0(x16++) | 
 |     bn.subb w2, w2, w3 << 0, FG0 | 
 |     bn.movr x17++, x11 | 
 |     nop | 
 |   csrrs x2, 1984, x0 | 
 |   andi x2, x2, 1 | 
 |   li x8, 4 | 
 |   bne x2, x0, label_0 | 
 |   li x8, 16 | 
 |   label_0: | 
 |   addi x21, x24, 0 | 
 |   loopi 12, 3 | 
 |     bn.sid x8, 0(x21++) | 
 |     addi x8, x8, 1 | 
 |     nop | 
 |   ret | 
 |  | 
 | .globl montmul | 
 | montmul: | 
 |   bn.lid x9, 0(x17) | 
 |   bn.mov w2, w31 | 
 |   loopi 12, 2 | 
 |     bn.movr x10++, x11 | 
 |     nop | 
 |   loopi 12, 7 | 
 |     bn.lid x11, 0(x20++) | 
 |     addi x6, x16, 0 | 
 |     addi x7, x19, 0 | 
 |     jal x1, mont_loop | 
 |     addi x16, x6, 0 | 
 |     addi x19, x7, 0 | 
 |     nop | 
 |   li x8, 4 | 
 |   li x10, 4 | 
 |   ret | 
 |  | 
 | mont_loop: | 
 |   addi x22, x16, 0 | 
 |   li x12, 30 | 
 |   li x13, 24 | 
 |   li x8, 4 | 
 |   li x10, 4 | 
 |   bn.lid x12, 0(x19++) | 
 |   jal x1, mul256_w30xw2 | 
 |   bn.movr x13, x8++ | 
 |   bn.add w30, w27, w24 << 0, FG0 | 
 |   bn.addc w29, w26, w31 << 0, FG0 | 
 |   bn.mov w25, w3 | 
 |   jal x1, mul256_w30xw25 | 
 |   bn.mov w25, w27 | 
 |   bn.mov w24, w30 | 
 |   bn.lid x12, 0(x16++) | 
 |   jal x1, mul256_w30xw25 | 
 |   bn.add w27, w27, w24 << 0, FG0 | 
 |   bn.addc w28, w26, w31 << 0, FG0 | 
 |   loopi 11, 15 | 
 |     bn.lid x12, 0(x19++) | 
 |     bn.movr x13, x8++ | 
 |     jal x1, mul256_w30xw2 | 
 |     bn.add w27, w27, w24 << 0, FG0 | 
 |     bn.addc w26, w26, w31 << 0, FG0 | 
 |     bn.add w24, w27, w29 << 0, FG0 | 
 |     bn.addc w29, w26, w31 << 0, FG0 | 
 |     bn.lid x12, 0(x16++) | 
 |     jal x1, mul256_w30xw25 | 
 |     bn.add w27, w27, w24 << 0, FG0 | 
 |     bn.addc w26, w26, w31 << 0, FG0 | 
 |     bn.add w24, w27, w28 << 0, FG0 | 
 |     bn.addc w28, w26, w31 << 0, FG0 | 
 |     bn.movr x10++, x13 | 
 |     nop | 
 |   bn.add w24, w29, w28 << 0, FG1 | 
 |   bn.movr x10++, x13 | 
 |   bn.add w31, w31, w31 << 0, FG0 | 
 |   csrrs x2, 1985, x0 | 
 |   andi x2, x2, 1 | 
 |   beq x2, x0, label_1 | 
 |   li x12, 30 | 
 |   li x13, 24 | 
 |   addi x16, x22, 0 | 
 |   li x8, 4 | 
 |   loopi 12, 5 | 
 |     bn.lid x13, 0(x16++) | 
 |     bn.movr x12, x8 | 
 |     bn.subb w24, w30, w24 << 0, FG0 | 
 |     bn.movr x8++, x13 | 
 |     nop | 
 |   label_1: | 
 |   li x8, 4 | 
 |   li x10, 4 | 
 |   ret | 
 |  | 
 | mul256_w30xw2: | 
 |   bn.mulqacc.z w30.0, w2.0, 0 | 
 |   bn.mulqacc w30.1, w2.0, 64 | 
 |   bn.mulqacc.so w27.L, w30.0, w2.1, 64, FG0 | 
 |   bn.mulqacc w30.2, w2.0, 0 | 
 |   bn.mulqacc w30.1, w2.1, 0 | 
 |   bn.mulqacc w30.0, w2.2, 0 | 
 |   bn.mulqacc w30.3, w2.0, 64 | 
 |   bn.mulqacc w30.2, w2.1, 64 | 
 |   bn.mulqacc w30.1, w2.2, 64 | 
 |   bn.mulqacc.so w27.U, w30.0, w2.3, 64, FG0 | 
 |   bn.mulqacc w30.3, w2.1, 0 | 
 |   bn.mulqacc w30.2, w2.2, 0 | 
 |   bn.mulqacc w30.1, w2.3, 0 | 
 |   bn.mulqacc w30.3, w2.2, 64 | 
 |   bn.mulqacc.so w26.L, w30.2, w2.3, 64, FG0 | 
 |   bn.mulqacc.so w26.U, w30.3, w2.3, 0, FG0 | 
 |   ret | 
 |  | 
 | mul256_w30xw25: | 
 |   bn.mulqacc.z w30.0, w25.0, 0 | 
 |   bn.mulqacc w30.1, w25.0, 64 | 
 |   bn.mulqacc.so w27.L, w30.0, w25.1, 64, FG0 | 
 |   bn.mulqacc w30.2, w25.0, 0 | 
 |   bn.mulqacc w30.1, w25.1, 0 | 
 |   bn.mulqacc w30.0, w25.2, 0 | 
 |   bn.mulqacc w30.3, w25.0, 64 | 
 |   bn.mulqacc w30.2, w25.1, 64 | 
 |   bn.mulqacc w30.1, w25.2, 64 | 
 |   bn.mulqacc.so w27.U, w30.0, w25.3, 64, FG0 | 
 |   bn.mulqacc w30.3, w25.1, 0 | 
 |   bn.mulqacc w30.2, w25.2, 0 | 
 |   bn.mulqacc w30.1, w25.3, 0 | 
 |   bn.mulqacc w30.3, w25.2, 64 | 
 |   bn.mulqacc.so w26.L, w30.2, w25.3, 64, FG0 | 
 |   bn.mulqacc.so w26.U, w30.3, w25.3, 0, FG0 | 
 |   ret | 
 |  |