blob: 3b475548022120e5a95e1c057054ef4623ed350b [file] [log] [blame]
/*
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