3103 lines
41 KiB
ArmAsm
3103 lines
41 KiB
ArmAsm
|
.file "fft1.sy"
|
||
|
.option pic
|
||
|
.attribute arch, "rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zicsr2p0_zifencei2p0"
|
||
|
.attribute unaligned_access, 0
|
||
|
.attribute stack_align, 16
|
||
|
.text
|
||
|
.align 1
|
||
|
.type multiply.part.0, @function
|
||
|
multiply.part.0:
|
||
|
addi sp,sp,-48
|
||
|
sd s2,16(sp)
|
||
|
srliw s2,a1,31
|
||
|
addw s2,s2,a1
|
||
|
sd s0,32(sp)
|
||
|
sd s1,24(sp)
|
||
|
sd ra,40(sp)
|
||
|
sd s3,8(sp)
|
||
|
sraiw a5,s2,1
|
||
|
mv s0,a1
|
||
|
mv s1,a0
|
||
|
beq a5,zero,.L2
|
||
|
li a4,1
|
||
|
beq a5,a4,.L22
|
||
|
srliw s3,a5,31
|
||
|
addw s3,s3,a5
|
||
|
mv s2,a5
|
||
|
sraiw a5,s3,1
|
||
|
mv s3,a5
|
||
|
beq a5,zero,.L4
|
||
|
beq a5,a4,.L23
|
||
|
srliw a1,a5,31
|
||
|
addw a1,a1,a5
|
||
|
sraiw a1,a1,1
|
||
|
beq a1,zero,.L6
|
||
|
beq a1,a4,.L24
|
||
|
call multiply.part.0
|
||
|
li a5,998244352
|
||
|
slliw a1,a0,1
|
||
|
addiw a5,a5,1
|
||
|
remw a1,a1,a5
|
||
|
.L6:
|
||
|
srliw a5,s3,31
|
||
|
addw s3,s3,a5
|
||
|
andi s3,s3,1
|
||
|
subw s3,s3,a5
|
||
|
li a5,1
|
||
|
beq s3,a5,.L8
|
||
|
li a4,998244352
|
||
|
slliw a5,a1,1
|
||
|
addiw a4,a4,1
|
||
|
remw a5,a5,a4
|
||
|
.L4:
|
||
|
srliw a4,s2,31
|
||
|
addw s2,s2,a4
|
||
|
andi s2,s2,1
|
||
|
subw s2,s2,a4
|
||
|
li a4,1
|
||
|
beq s2,a4,.L9
|
||
|
li a4,998244352
|
||
|
slliw a5,a5,1
|
||
|
addiw a4,a4,1
|
||
|
remw a5,a5,a4
|
||
|
.L2:
|
||
|
sraiw a4,s0,31
|
||
|
srliw a4,a4,31
|
||
|
addw s0,a4,s0
|
||
|
andi s0,s0,1
|
||
|
subw s0,s0,a4
|
||
|
li a4,1
|
||
|
bne s0,a4,.L10
|
||
|
li a4,998244352
|
||
|
addw a5,s1,a5
|
||
|
addiw a4,a4,1
|
||
|
remw a5,a5,a4
|
||
|
.L10:
|
||
|
ld ra,40(sp)
|
||
|
ld s0,32(sp)
|
||
|
ld s1,24(sp)
|
||
|
ld s2,16(sp)
|
||
|
ld s3,8(sp)
|
||
|
mv a0,a5
|
||
|
addi sp,sp,48
|
||
|
jr ra
|
||
|
.L22:
|
||
|
li a4,998244352
|
||
|
addiw a4,a4,1
|
||
|
remw a5,a0,a4
|
||
|
slliw a5,a5,1
|
||
|
remw a5,a5,a4
|
||
|
j .L2
|
||
|
.L23:
|
||
|
li a4,998244352
|
||
|
addiw a4,a4,1
|
||
|
remw a5,a0,a4
|
||
|
slliw a5,a5,1
|
||
|
remw a5,a5,a4
|
||
|
j .L4
|
||
|
.L9:
|
||
|
li a4,998244352
|
||
|
addiw a4,a4,1
|
||
|
addw a5,s1,a5
|
||
|
remw a5,a5,a4
|
||
|
slliw a5,a5,1
|
||
|
remw a5,a5,a4
|
||
|
j .L2
|
||
|
.L8:
|
||
|
li a4,998244352
|
||
|
addiw a4,a4,1
|
||
|
addw a5,s1,a1
|
||
|
remw a5,a5,a4
|
||
|
slliw a5,a5,1
|
||
|
remw a5,a5,a4
|
||
|
j .L4
|
||
|
.L24:
|
||
|
li a5,998244352
|
||
|
addiw a5,a5,1
|
||
|
remw a1,a0,a5
|
||
|
slliw a1,a1,1
|
||
|
remw a1,a1,a5
|
||
|
j .L6
|
||
|
.size multiply.part.0, .-multiply.part.0
|
||
|
.align 1
|
||
|
.type fft.part.0, @function
|
||
|
fft.part.0:
|
||
|
addi sp,sp,-160
|
||
|
sd s0,144(sp)
|
||
|
sd s1,136(sp)
|
||
|
sd s3,120(sp)
|
||
|
sd s5,104(sp)
|
||
|
sd ra,152(sp)
|
||
|
sd s2,128(sp)
|
||
|
sd s4,112(sp)
|
||
|
sd s6,96(sp)
|
||
|
sd s7,88(sp)
|
||
|
sd s8,80(sp)
|
||
|
sd s9,72(sp)
|
||
|
sd s10,64(sp)
|
||
|
sd s11,56(sp)
|
||
|
mv s1,a2
|
||
|
mv s0,a0
|
||
|
mv s5,a1
|
||
|
mv s3,a3
|
||
|
ble a2,zero,.L169
|
||
|
slli s6,a1,2
|
||
|
add t1,a0,s6
|
||
|
srai a7,a2,1
|
||
|
mv a1,t1
|
||
|
mv a2,t1
|
||
|
li a6,0
|
||
|
lla a0,temp
|
||
|
j .L31
|
||
|
.L171:
|
||
|
lw a4,0(a2)
|
||
|
addi a2,a2,4
|
||
|
sw a4,0(a5)
|
||
|
addiw a5,a6,1
|
||
|
mv s8,a5
|
||
|
beq s1,a5,.L170
|
||
|
.L104:
|
||
|
mv a6,a5
|
||
|
.L31:
|
||
|
sraiw a5,a6,1
|
||
|
addw a4,a5,a7
|
||
|
slli a4,a4,2
|
||
|
slli a5,a5,2
|
||
|
andi a3,a6,1
|
||
|
add a4,a0,a4
|
||
|
add a5,a0,a5
|
||
|
beq a3,zero,.L171
|
||
|
lw a5,0(a2)
|
||
|
addi a2,a2,4
|
||
|
sw a5,0(a4)
|
||
|
addiw a5,a6,1
|
||
|
mv s8,a5
|
||
|
bne s1,a5,.L104
|
||
|
.L170:
|
||
|
sext.w a6,a6
|
||
|
li a4,7
|
||
|
bleu a6,a4,.L32
|
||
|
andi a4,t1,7
|
||
|
bne a4,zero,.L32
|
||
|
lla a4,temp+4
|
||
|
beq t1,a4,.L32
|
||
|
srliw a3,s1,1
|
||
|
slli a3,a3,3
|
||
|
sext.w a6,s1
|
||
|
lla a4,temp
|
||
|
add a3,t1,a3
|
||
|
.L33:
|
||
|
ld a2,0(a4)
|
||
|
addi a1,a1,8
|
||
|
addi a4,a4,8
|
||
|
sd a2,-8(a1)
|
||
|
bne a3,a1,.L33
|
||
|
andi a4,a5,-2
|
||
|
mv a5,a4
|
||
|
beq a4,a6,.L38
|
||
|
slli a4,a4,32
|
||
|
srli a4,a4,30
|
||
|
add a4,a4,a0
|
||
|
lw a4,0(a4)
|
||
|
addw a5,s5,a5
|
||
|
slli a5,a5,2
|
||
|
add a5,s0,a5
|
||
|
sw a4,0(a5)
|
||
|
.L38:
|
||
|
sraiw s8,s8,1
|
||
|
beq s3,zero,.L27
|
||
|
.L161:
|
||
|
li a5,1
|
||
|
beq s3,a5,.L42
|
||
|
.L43:
|
||
|
srliw s6,s3,31
|
||
|
addw s10,s6,s3
|
||
|
sraiw s10,s10,1
|
||
|
li a3,0
|
||
|
beq s10,zero,.L45
|
||
|
li a5,1
|
||
|
beq s10,a5,.L172
|
||
|
mv a1,s10
|
||
|
mv a0,s3
|
||
|
call multiply.part.0
|
||
|
li a5,998244352
|
||
|
slliw a3,a0,1
|
||
|
addiw a5,a5,1
|
||
|
remw a3,a3,a5
|
||
|
.L45:
|
||
|
sraiw s2,s3,31
|
||
|
srliw a4,s2,31
|
||
|
addw s11,a4,s3
|
||
|
andi s11,s11,1
|
||
|
subw s11,s11,a4
|
||
|
li a5,1
|
||
|
bne s11,a5,.L47
|
||
|
li a5,998244352
|
||
|
addw a3,s3,a3
|
||
|
addiw a5,a5,1
|
||
|
remw a3,a3,a5
|
||
|
.L47:
|
||
|
li s4,1
|
||
|
beq s8,s4,.L48
|
||
|
mv a2,s8
|
||
|
mv a1,s5
|
||
|
mv a0,s0
|
||
|
call fft.part.0
|
||
|
addw s7,s5,s8
|
||
|
beq s3,s4,.L107
|
||
|
srliw s2,s2,31
|
||
|
addw s11,s2,s3
|
||
|
addw a5,s6,s3
|
||
|
andi s11,s11,1
|
||
|
sraiw s10,a5,1
|
||
|
subw s11,s11,s2
|
||
|
.L50:
|
||
|
li a3,0
|
||
|
beq s10,zero,.L51
|
||
|
li a5,1
|
||
|
beq s10,a5,.L173
|
||
|
mv a1,s10
|
||
|
mv a0,s3
|
||
|
call multiply.part.0
|
||
|
li a5,998244352
|
||
|
slliw a3,a0,1
|
||
|
addiw a5,a5,1
|
||
|
remw a3,a3,a5
|
||
|
.L51:
|
||
|
li a5,1
|
||
|
bne s11,a5,.L53
|
||
|
li a5,998244352
|
||
|
addw a3,s3,a3
|
||
|
addiw a5,a5,1
|
||
|
remw a3,a3,a5
|
||
|
.L53:
|
||
|
li a5,1
|
||
|
beq s8,a5,.L174
|
||
|
.L49:
|
||
|
mv a2,s8
|
||
|
mv a1,s7
|
||
|
mv a0,s0
|
||
|
call fft.part.0
|
||
|
li a5,1
|
||
|
ble s1,a5,.L164
|
||
|
sraiw a5,s3,31
|
||
|
srliw a5,a5,31
|
||
|
srliw s10,s3,31
|
||
|
addw s11,a5,s3
|
||
|
addw s10,s10,s3
|
||
|
andi s11,s11,1
|
||
|
sraiw s10,s10,1
|
||
|
subw s11,s11,a5
|
||
|
slli s6,s5,2
|
||
|
.L54:
|
||
|
sraiw a5,s10,31
|
||
|
srliw a5,a5,31
|
||
|
srliw a4,s10,31
|
||
|
addw a3,a5,s10
|
||
|
add s5,s8,s5
|
||
|
addw a4,a4,s10
|
||
|
andi a3,a3,1
|
||
|
slli s5,s5,2
|
||
|
li s9,998244352
|
||
|
sraiw a4,a4,1
|
||
|
subw a3,a3,a5
|
||
|
add s6,s0,s6
|
||
|
add s5,s0,s5
|
||
|
li a6,1
|
||
|
li a2,0
|
||
|
addiw s9,s9,1
|
||
|
li s7,1
|
||
|
.L99:
|
||
|
lw s2,0(s5)
|
||
|
lw s0,0(s6)
|
||
|
beq s2,zero,.L56
|
||
|
beq s2,s7,.L57
|
||
|
srliw s4,s2,31
|
||
|
addw s4,s4,s2
|
||
|
sraiw t3,s4,1
|
||
|
mv s4,t3
|
||
|
beq t3,zero,.L175
|
||
|
beq t3,s7,.L176
|
||
|
srliw s1,t3,31
|
||
|
addw a7,s1,t3
|
||
|
sraiw a5,a7,1
|
||
|
mv a7,a5
|
||
|
beq a5,zero,.L64
|
||
|
beq a5,s7,.L177
|
||
|
srliw t1,a5,31
|
||
|
addw t1,t1,a5
|
||
|
sraiw a5,t1,1
|
||
|
mv t1,a5
|
||
|
beq a5,zero,.L66
|
||
|
beq a5,s7,.L178
|
||
|
srliw a1,a5,31
|
||
|
addw a1,a1,a5
|
||
|
sraiw a1,a1,1
|
||
|
beq a1,zero,.L68
|
||
|
beq a1,s7,.L179
|
||
|
mv a0,a6
|
||
|
sw a5,44(sp)
|
||
|
sw a7,40(sp)
|
||
|
sd a3,32(sp)
|
||
|
sd a4,24(sp)
|
||
|
sd t3,16(sp)
|
||
|
sd a2,8(sp)
|
||
|
sd a6,0(sp)
|
||
|
call multiply.part.0
|
||
|
li a5,998244352
|
||
|
slliw a1,a0,1
|
||
|
addiw a5,a5,1
|
||
|
remw a1,a1,a5
|
||
|
lw t1,44(sp)
|
||
|
lw a7,40(sp)
|
||
|
ld a3,32(sp)
|
||
|
ld a4,24(sp)
|
||
|
ld t3,16(sp)
|
||
|
ld a2,8(sp)
|
||
|
ld a6,0(sp)
|
||
|
.L68:
|
||
|
srliw a0,t1,31
|
||
|
addw a5,t1,a0
|
||
|
andi a5,a5,1
|
||
|
subw a5,a5,a0
|
||
|
li a0,1
|
||
|
beq a5,a0,.L70
|
||
|
slliw a5,a1,1
|
||
|
li a1,998244352
|
||
|
addiw a1,a1,1
|
||
|
remw a5,a5,a1
|
||
|
.L66:
|
||
|
srliw a1,a7,31
|
||
|
addw a7,a7,a1
|
||
|
andi a7,a7,1
|
||
|
subw a7,a7,a1
|
||
|
li a1,1
|
||
|
beq a7,a1,.L71
|
||
|
li a1,998244352
|
||
|
slliw a5,a5,1
|
||
|
addiw a1,a1,1
|
||
|
remw a5,a5,a1
|
||
|
.L64:
|
||
|
srliw a0,s4,31
|
||
|
addw a1,s4,a0
|
||
|
andi a1,a1,1
|
||
|
subw a1,a1,a0
|
||
|
sraiw t1,s4,31
|
||
|
beq a1,s7,.L72
|
||
|
sraiw a1,s2,31
|
||
|
srliw a0,a1,31
|
||
|
addw a7,a0,s2
|
||
|
andi a7,a7,1
|
||
|
slliw a5,a5,1
|
||
|
subw a7,a7,a0
|
||
|
remw t4,a5,s9
|
||
|
beq a7,s7,.L62
|
||
|
addw a5,s0,t4
|
||
|
remw a5,a5,s9
|
||
|
.L73:
|
||
|
addw s1,s1,s4
|
||
|
sw a5,0(s6)
|
||
|
sraiw s1,s1,1
|
||
|
beq s1,zero,.L75
|
||
|
li a5,1
|
||
|
beq s1,a5,.L76
|
||
|
srliw a1,a1,29
|
||
|
addw s2,a1,s2
|
||
|
sraiw s2,s2,3
|
||
|
bne s2,zero,.L77
|
||
|
.L79:
|
||
|
sraiw a5,s1,31
|
||
|
srliw a5,a5,31
|
||
|
addw s1,a5,s1
|
||
|
andi s1,s1,1
|
||
|
subw s1,s1,a5
|
||
|
li a5,1
|
||
|
beq s1,a5,.L84
|
||
|
.L191:
|
||
|
li s1,998244352
|
||
|
slliw s2,s2,1
|
||
|
addiw s1,s1,1
|
||
|
remw s1,s2,s1
|
||
|
.L75:
|
||
|
srliw t1,t1,31
|
||
|
addw s4,s4,t1
|
||
|
andi s4,s4,1
|
||
|
subw s4,s4,t1
|
||
|
bne s4,s7,.L85
|
||
|
li a5,998244352
|
||
|
addw s1,a6,s1
|
||
|
addiw a5,a5,1
|
||
|
remw s1,s1,a5
|
||
|
.L85:
|
||
|
slliw s1,s1,1
|
||
|
remw s1,s1,s9
|
||
|
bne a7,s7,.L167
|
||
|
addw s1,s1,a6
|
||
|
.L101:
|
||
|
remw s1,s1,s9
|
||
|
.L167:
|
||
|
subw s0,s0,s1
|
||
|
.L187:
|
||
|
addw s0,s0,s9
|
||
|
remw s0,s0,s9
|
||
|
sw s0,0(s5)
|
||
|
bne s3,zero,.L180
|
||
|
.L111:
|
||
|
li a6,0
|
||
|
.L87:
|
||
|
addiw a2,a2,1
|
||
|
addi s6,s6,4
|
||
|
addi s5,s5,4
|
||
|
blt a2,s8,.L99
|
||
|
.L164:
|
||
|
ld ra,152(sp)
|
||
|
ld s0,144(sp)
|
||
|
ld s1,136(sp)
|
||
|
ld s2,128(sp)
|
||
|
ld s3,120(sp)
|
||
|
ld s4,112(sp)
|
||
|
ld s5,104(sp)
|
||
|
ld s6,96(sp)
|
||
|
ld s7,88(sp)
|
||
|
ld s8,80(sp)
|
||
|
ld s9,72(sp)
|
||
|
ld s10,64(sp)
|
||
|
ld s11,56(sp)
|
||
|
li a0,0
|
||
|
addi sp,sp,160
|
||
|
jr ra
|
||
|
.L32:
|
||
|
slli a5,a5,2
|
||
|
lla a4,temp
|
||
|
add a5,a5,a0
|
||
|
.L39:
|
||
|
lw a3,0(a4)
|
||
|
addi a4,a4,4
|
||
|
addi a1,a1,4
|
||
|
sw a3,-4(a1)
|
||
|
bne a5,a4,.L39
|
||
|
sraiw s8,s8,1
|
||
|
beq s3,zero,.L181
|
||
|
li a5,1
|
||
|
bne s3,a5,.L43
|
||
|
li s11,1
|
||
|
li s10,0
|
||
|
beq s8,s3,.L54
|
||
|
.L42:
|
||
|
li a3,1
|
||
|
mv a2,s8
|
||
|
mv a1,s5
|
||
|
mv a0,s0
|
||
|
call fft.part.0
|
||
|
addw s7,s5,s8
|
||
|
li a3,1
|
||
|
j .L49
|
||
|
.L56:
|
||
|
remw a5,s0,s9
|
||
|
.L60:
|
||
|
sw a5,0(s6)
|
||
|
.L74:
|
||
|
addw s0,s0,s9
|
||
|
remw s0,s0,s9
|
||
|
sw s0,0(s5)
|
||
|
beq s3,zero,.L111
|
||
|
.L180:
|
||
|
beq s3,s7,.L87
|
||
|
li a5,0
|
||
|
beq s10,zero,.L88
|
||
|
beq s10,s7,.L182
|
||
|
li a5,0
|
||
|
beq a4,zero,.L90
|
||
|
beq a4,s7,.L183
|
||
|
srliw s0,a4,31
|
||
|
addw s0,s0,a4
|
||
|
sraiw a5,s0,1
|
||
|
mv s0,a5
|
||
|
beq a5,zero,.L92
|
||
|
beq a5,s7,.L184
|
||
|
srliw a1,a5,31
|
||
|
addw a1,a1,a5
|
||
|
sraiw a1,a1,1
|
||
|
beq a1,zero,.L94
|
||
|
beq a1,s7,.L185
|
||
|
mv a0,a6
|
||
|
sd a3,24(sp)
|
||
|
sd a4,16(sp)
|
||
|
sd a2,8(sp)
|
||
|
sd a6,0(sp)
|
||
|
call multiply.part.0
|
||
|
li a5,998244352
|
||
|
slliw a1,a0,1
|
||
|
addiw a5,a5,1
|
||
|
remw a1,a1,a5
|
||
|
ld a3,24(sp)
|
||
|
ld a4,16(sp)
|
||
|
ld a2,8(sp)
|
||
|
ld a6,0(sp)
|
||
|
.L94:
|
||
|
srliw a0,s0,31
|
||
|
addw a5,s0,a0
|
||
|
andi a5,a5,1
|
||
|
subw a5,a5,a0
|
||
|
li a0,1
|
||
|
beq a5,a0,.L96
|
||
|
slliw a5,a1,1
|
||
|
li a1,998244352
|
||
|
addiw a1,a1,1
|
||
|
remw a5,a5,a1
|
||
|
.L92:
|
||
|
sraiw a0,a4,31
|
||
|
srliw a0,a0,31
|
||
|
addw a1,a0,a4
|
||
|
andi a1,a1,1
|
||
|
subw a1,a1,a0
|
||
|
li a0,1
|
||
|
beq a1,a0,.L97
|
||
|
li a1,998244352
|
||
|
slliw a5,a5,1
|
||
|
addiw a1,a1,1
|
||
|
remw a5,a5,a1
|
||
|
.L90:
|
||
|
beq a3,s7,.L98
|
||
|
slliw a5,a5,1
|
||
|
remw a5,a5,s9
|
||
|
.L88:
|
||
|
beq s11,s7,.L186
|
||
|
addiw a2,a2,1
|
||
|
mv a6,a5
|
||
|
addi s6,s6,4
|
||
|
addi s5,s5,4
|
||
|
blt a2,s8,.L99
|
||
|
j .L164
|
||
|
.L57:
|
||
|
addw a5,s0,a6
|
||
|
remw a5,a5,s9
|
||
|
subw s0,s0,a6
|
||
|
sw a5,0(s6)
|
||
|
j .L74
|
||
|
.L186:
|
||
|
addw a5,a6,a5
|
||
|
addiw a2,a2,1
|
||
|
remw a6,a5,s9
|
||
|
addi s6,s6,4
|
||
|
addi s5,s5,4
|
||
|
blt a2,s8,.L99
|
||
|
j .L164
|
||
|
.L175:
|
||
|
sraiw a5,s2,31
|
||
|
srliw a5,a5,31
|
||
|
addw s2,a5,s2
|
||
|
andi s2,s2,1
|
||
|
subw s2,s2,a5
|
||
|
beq s2,s7,.L59
|
||
|
li a5,998244352
|
||
|
addiw a5,a5,1
|
||
|
remw a5,s0,a5
|
||
|
j .L60
|
||
|
.L176:
|
||
|
sraiw a1,s2,31
|
||
|
srliw t1,a1,31
|
||
|
addw a5,t1,s2
|
||
|
li a7,998244352
|
||
|
andi a5,a5,1
|
||
|
slliw a0,a6,1
|
||
|
addiw a7,a7,1
|
||
|
subw a5,a5,t1
|
||
|
remw t4,a0,a7
|
||
|
beq a5,s7,.L62
|
||
|
addw a0,s0,t4
|
||
|
mv s1,t4
|
||
|
subw s0,s0,s1
|
||
|
remw a0,a0,a7
|
||
|
sw a0,0(s6)
|
||
|
j .L187
|
||
|
.L182:
|
||
|
slliw a5,a6,1
|
||
|
remw a5,a5,s9
|
||
|
j .L88
|
||
|
.L62:
|
||
|
li a0,998244352
|
||
|
addiw a0,a0,1
|
||
|
addw a5,t4,a6
|
||
|
remw a5,a5,a0
|
||
|
li a7,1
|
||
|
addw a5,a5,s0
|
||
|
remw a5,a5,a0
|
||
|
sw a5,0(s6)
|
||
|
beq t3,a7,.L188
|
||
|
srliw s1,s4,31
|
||
|
addw s1,s1,s4
|
||
|
sraiw s1,s1,1
|
||
|
beq s1,zero,.L109
|
||
|
beq s1,a7,.L110
|
||
|
srliw a1,a1,29
|
||
|
addw s2,a1,s2
|
||
|
sraiw s2,s2,3
|
||
|
li a7,1
|
||
|
sraiw t1,s4,31
|
||
|
.L77:
|
||
|
li a5,1
|
||
|
beq s2,a5,.L189
|
||
|
srliw a1,s2,31
|
||
|
addw a1,a1,s2
|
||
|
sraiw a1,a1,1
|
||
|
beq a1,zero,.L81
|
||
|
beq a1,a5,.L190
|
||
|
mv a0,a6
|
||
|
sw t1,40(sp)
|
||
|
sd a7,32(sp)
|
||
|
sd a3,24(sp)
|
||
|
sd a4,16(sp)
|
||
|
sd a2,8(sp)
|
||
|
sd a6,0(sp)
|
||
|
call multiply.part.0
|
||
|
li a5,998244352
|
||
|
slliw a1,a0,1
|
||
|
addiw a5,a5,1
|
||
|
remw a1,a1,a5
|
||
|
lw t1,40(sp)
|
||
|
ld a7,32(sp)
|
||
|
ld a3,24(sp)
|
||
|
ld a4,16(sp)
|
||
|
ld a2,8(sp)
|
||
|
ld a6,0(sp)
|
||
|
.L81:
|
||
|
sraiw a0,s2,31
|
||
|
srliw a0,a0,31
|
||
|
addw a5,a0,s2
|
||
|
andi a5,a5,1
|
||
|
subw a5,a5,a0
|
||
|
li a0,1
|
||
|
beq a5,a0,.L83
|
||
|
sraiw a5,s1,31
|
||
|
srliw a5,a5,31
|
||
|
addw s1,a5,s1
|
||
|
li s2,998244352
|
||
|
andi s1,s1,1
|
||
|
slliw a1,a1,1
|
||
|
addiw s2,s2,1
|
||
|
subw s1,s1,a5
|
||
|
li a5,1
|
||
|
remw s2,a1,s2
|
||
|
bne s1,a5,.L191
|
||
|
.L84:
|
||
|
li s1,998244352
|
||
|
addiw s1,s1,1
|
||
|
addw a5,a6,s2
|
||
|
remw a5,a5,s1
|
||
|
slliw a5,a5,1
|
||
|
remw s1,a5,s1
|
||
|
j .L75
|
||
|
.L98:
|
||
|
li a1,998244352
|
||
|
addiw a1,a1,1
|
||
|
addw a5,a6,a5
|
||
|
remw a5,a5,a1
|
||
|
slliw a5,a5,1
|
||
|
remw a5,a5,a1
|
||
|
j .L88
|
||
|
.L72:
|
||
|
li a0,998244352
|
||
|
addiw a0,a0,1
|
||
|
addw a5,a6,a5
|
||
|
remw a5,a5,a0
|
||
|
sraiw a1,s2,31
|
||
|
srliw t4,a1,31
|
||
|
addw a7,t4,s2
|
||
|
andi a7,a7,1
|
||
|
subw a7,a7,t4
|
||
|
slliw a5,a5,1
|
||
|
remw t4,a5,a0
|
||
|
beq a7,s7,.L62
|
||
|
addw a5,s0,t4
|
||
|
remw a5,a5,a0
|
||
|
j .L73
|
||
|
.L59:
|
||
|
li a1,998244352
|
||
|
addw a5,s0,a6
|
||
|
addiw a1,a1,1
|
||
|
remw a5,a5,a1
|
||
|
mv s1,a6
|
||
|
remw s1,s1,s9
|
||
|
sw a5,0(s6)
|
||
|
j .L167
|
||
|
.L177:
|
||
|
li a1,998244352
|
||
|
slliw a5,a6,1
|
||
|
addiw a1,a1,1
|
||
|
remw a5,a5,a1
|
||
|
j .L64
|
||
|
.L183:
|
||
|
slliw a5,a6,1
|
||
|
remw a5,a5,s9
|
||
|
j .L90
|
||
|
.L110:
|
||
|
li a7,1
|
||
|
sraiw t1,s4,31
|
||
|
.L76:
|
||
|
li a5,998244352
|
||
|
slliw s1,a6,1
|
||
|
addiw a5,a5,1
|
||
|
remw s1,s1,a5
|
||
|
j .L75
|
||
|
.L188:
|
||
|
slliw s1,a6,1
|
||
|
remw s1,s1,a0
|
||
|
addw s1,s1,a6
|
||
|
j .L101
|
||
|
.L181:
|
||
|
li a5,1
|
||
|
li s11,0
|
||
|
li s10,0
|
||
|
beq s8,a5,.L41
|
||
|
.L27:
|
||
|
li a3,0
|
||
|
mv a2,s8
|
||
|
mv a1,s5
|
||
|
mv a0,s0
|
||
|
call fft.part.0
|
||
|
addw s7,s5,s8
|
||
|
li a3,0
|
||
|
j .L49
|
||
|
.L71:
|
||
|
li a1,998244352
|
||
|
addiw a1,a1,1
|
||
|
addw a5,a6,a5
|
||
|
remw a5,a5,a1
|
||
|
slliw a5,a5,1
|
||
|
remw a5,a5,a1
|
||
|
j .L64
|
||
|
.L97:
|
||
|
li a1,998244352
|
||
|
addiw a1,a1,1
|
||
|
addw a5,a6,a5
|
||
|
remw a5,a5,a1
|
||
|
slliw a5,a5,1
|
||
|
remw a5,a5,a1
|
||
|
j .L90
|
||
|
.L172:
|
||
|
li a5,998244352
|
||
|
addiw a5,a5,1
|
||
|
remw a3,s3,a5
|
||
|
slliw a3,a3,1
|
||
|
remw a3,a3,a5
|
||
|
j .L45
|
||
|
.L173:
|
||
|
li a5,998244352
|
||
|
addiw a5,a5,1
|
||
|
remw a3,s3,a5
|
||
|
slliw a3,a3,1
|
||
|
remw a3,a3,a5
|
||
|
j .L51
|
||
|
.L83:
|
||
|
li s2,998244352
|
||
|
addiw s2,s2,1
|
||
|
addw a5,a6,a1
|
||
|
remw a5,a5,s2
|
||
|
slliw a5,a5,1
|
||
|
remw s2,a5,s2
|
||
|
j .L79
|
||
|
.L96:
|
||
|
li a0,998244352
|
||
|
addiw a0,a0,1
|
||
|
addw a5,a6,a1
|
||
|
remw a5,a5,a0
|
||
|
slliw a5,a5,1
|
||
|
remw a5,a5,a0
|
||
|
j .L92
|
||
|
.L70:
|
||
|
li a0,998244352
|
||
|
addiw a0,a0,1
|
||
|
addw a5,a6,a1
|
||
|
remw a5,a5,a0
|
||
|
slliw a5,a5,1
|
||
|
remw a5,a5,a0
|
||
|
j .L66
|
||
|
.L109:
|
||
|
li a7,1
|
||
|
sraiw t1,s4,31
|
||
|
j .L75
|
||
|
.L174:
|
||
|
slli s6,s5,2
|
||
|
.L41:
|
||
|
li s8,1
|
||
|
j .L54
|
||
|
.L184:
|
||
|
slliw a5,a6,1
|
||
|
remw a5,a5,s9
|
||
|
j .L92
|
||
|
.L178:
|
||
|
li a1,998244352
|
||
|
slliw a5,a6,1
|
||
|
addiw a1,a1,1
|
||
|
remw a5,a5,a1
|
||
|
j .L66
|
||
|
.L189:
|
||
|
li a5,998244352
|
||
|
slliw s2,a6,1
|
||
|
addiw a5,a5,1
|
||
|
remw s2,s2,a5
|
||
|
j .L79
|
||
|
.L169:
|
||
|
srliw s8,a2,31
|
||
|
addw s8,s8,a2
|
||
|
sraiw s8,s8,1
|
||
|
bne a3,zero,.L161
|
||
|
j .L27
|
||
|
.L48:
|
||
|
addiw s7,s5,1
|
||
|
j .L50
|
||
|
.L185:
|
||
|
li a5,998244352
|
||
|
slliw a1,a6,1
|
||
|
addiw a5,a5,1
|
||
|
remw a1,a1,a5
|
||
|
j .L94
|
||
|
.L179:
|
||
|
li a5,998244352
|
||
|
slliw a1,a6,1
|
||
|
addiw a5,a5,1
|
||
|
remw a1,a1,a5
|
||
|
j .L68
|
||
|
.L190:
|
||
|
li a5,998244352
|
||
|
slliw a1,a6,1
|
||
|
addiw a5,a5,1
|
||
|
remw a1,a1,a5
|
||
|
j .L81
|
||
|
.L107:
|
||
|
li a3,1
|
||
|
j .L49
|
||
|
.size fft.part.0, .-fft.part.0
|
||
|
.align 1
|
||
|
.type power.part.0, @function
|
||
|
power.part.0:
|
||
|
addi sp,sp,-96
|
||
|
sd s3,56(sp)
|
||
|
srliw s3,a1,31
|
||
|
addw s3,s3,a1
|
||
|
sd s0,80(sp)
|
||
|
sd s1,72(sp)
|
||
|
sd s4,48(sp)
|
||
|
sd ra,88(sp)
|
||
|
sd s2,64(sp)
|
||
|
sd s5,40(sp)
|
||
|
sd s6,32(sp)
|
||
|
sd s7,24(sp)
|
||
|
sd s8,16(sp)
|
||
|
sd s9,8(sp)
|
||
|
sd s10,0(sp)
|
||
|
sraiw a5,s3,1
|
||
|
mv s0,a1
|
||
|
mv s4,a0
|
||
|
li s1,1
|
||
|
bne a5,zero,.L412
|
||
|
.L193:
|
||
|
sraiw a5,s0,31
|
||
|
srliw a5,a5,31
|
||
|
addw s0,a5,s0
|
||
|
andi s0,s0,1
|
||
|
subw s0,s0,a5
|
||
|
li a5,1
|
||
|
beq s0,a5,.L413
|
||
|
.L330:
|
||
|
ld ra,88(sp)
|
||
|
ld s0,80(sp)
|
||
|
ld s2,64(sp)
|
||
|
ld s3,56(sp)
|
||
|
ld s4,48(sp)
|
||
|
ld s5,40(sp)
|
||
|
ld s6,32(sp)
|
||
|
ld s7,24(sp)
|
||
|
ld s8,16(sp)
|
||
|
ld s9,8(sp)
|
||
|
ld s10,0(sp)
|
||
|
mv a0,s1
|
||
|
ld s1,72(sp)
|
||
|
addi sp,sp,96
|
||
|
jr ra
|
||
|
.L412:
|
||
|
srliw s5,a5,31
|
||
|
addw s5,s5,a5
|
||
|
mv s2,a5
|
||
|
sraiw a5,s5,1
|
||
|
mv s6,a5
|
||
|
sraiw s7,s3,31
|
||
|
bne a5,zero,.L414
|
||
|
.L194:
|
||
|
srliw s7,s7,31
|
||
|
addw s2,s2,s7
|
||
|
andi s2,s2,1
|
||
|
subw s2,s2,s7
|
||
|
li s1,1
|
||
|
bne s2,s1,.L193
|
||
|
li s1,0
|
||
|
beq s4,zero,.L330
|
||
|
.L254:
|
||
|
li a4,1
|
||
|
beq s4,a4,.L234
|
||
|
sraiw a5,s4,31
|
||
|
srliw a5,a5,31
|
||
|
srliw s1,s4,31
|
||
|
addw s1,s1,s4
|
||
|
addw s2,a5,s4
|
||
|
andi s2,s2,1
|
||
|
sraiw s1,s1,1
|
||
|
subw s2,s2,a5
|
||
|
li s5,1
|
||
|
bne s1,zero,.L270
|
||
|
bne s2,a4,.L330
|
||
|
li s3,1
|
||
|
j .L271
|
||
|
.L413:
|
||
|
beq s4,zero,.L325
|
||
|
.L235:
|
||
|
li a5,1
|
||
|
beq s4,a5,.L330
|
||
|
sraiw a5,s4,31
|
||
|
srliw a5,a5,31
|
||
|
srliw a1,s4,31
|
||
|
addw s2,a5,s4
|
||
|
addw a1,a1,s4
|
||
|
andi s2,s2,1
|
||
|
sraiw a1,a1,1
|
||
|
subw s2,s2,a5
|
||
|
.L277:
|
||
|
beq a1,zero,.L415
|
||
|
.L276:
|
||
|
li a5,1
|
||
|
beq a1,a5,.L416
|
||
|
mv a0,s1
|
||
|
call multiply.part.0
|
||
|
mv a5,s1
|
||
|
li s1,998244352
|
||
|
slliw a0,a0,1
|
||
|
addiw s1,s1,1
|
||
|
remw s1,a0,s1
|
||
|
.L286:
|
||
|
li a4,1
|
||
|
bne s2,a4,.L330
|
||
|
addw a5,a5,s1
|
||
|
li s1,998244352
|
||
|
addiw s1,s1,1
|
||
|
remw s1,a5,s1
|
||
|
j .L330
|
||
|
.L414:
|
||
|
srliw a5,a5,31
|
||
|
addw a5,a5,s6
|
||
|
sraiw a3,a5,1
|
||
|
sraiw s9,s5,31
|
||
|
bne a3,zero,.L417
|
||
|
.L195:
|
||
|
srliw s9,s9,31
|
||
|
addw a5,s6,s9
|
||
|
andi a5,a5,1
|
||
|
subw a5,a5,s9
|
||
|
li a4,1
|
||
|
sraiw s7,s2,31
|
||
|
bne a5,a4,.L194
|
||
|
li s1,0
|
||
|
beq s4,zero,.L330
|
||
|
.L232:
|
||
|
li s5,1
|
||
|
bne s4,s5,.L230
|
||
|
.L289:
|
||
|
srliw s7,s7,31
|
||
|
addw a5,s2,s7
|
||
|
andi a5,a5,1
|
||
|
subw a5,a5,s7
|
||
|
li a4,1
|
||
|
beq a5,a4,.L418
|
||
|
sraiw a5,s0,31
|
||
|
srliw a5,a5,31
|
||
|
addw s1,a5,s0
|
||
|
andi s1,s1,1
|
||
|
subw s1,s1,a5
|
||
|
beq s1,a4,.L235
|
||
|
li s1,1
|
||
|
j .L330
|
||
|
.L417:
|
||
|
srliw a5,a5,31
|
||
|
srliw a1,a3,31
|
||
|
addw a1,a1,a3
|
||
|
addw a4,a3,a5
|
||
|
andi a4,a4,1
|
||
|
sraiw a1,a1,1
|
||
|
subw s8,a4,a5
|
||
|
bne a1,zero,.L419
|
||
|
.L196:
|
||
|
li a5,1
|
||
|
sraiw s9,s6,31
|
||
|
bne s8,a5,.L195
|
||
|
srliw a5,s9,31
|
||
|
addw a3,s6,a5
|
||
|
andi a3,a3,1
|
||
|
subw a3,a3,a5
|
||
|
beq s4,zero,.L420
|
||
|
li s10,1
|
||
|
bne s4,s8,.L200
|
||
|
sraiw s7,s2,31
|
||
|
beq a3,s4,.L289
|
||
|
srliw a4,s2,31
|
||
|
addw a5,s2,a4
|
||
|
andi a5,a5,1
|
||
|
subw a5,a5,a4
|
||
|
beq a5,s4,.L254
|
||
|
.L324:
|
||
|
li s1,1
|
||
|
j .L193
|
||
|
.L325:
|
||
|
li s1,0
|
||
|
j .L330
|
||
|
.L419:
|
||
|
call power.part.0
|
||
|
mv s10,a0
|
||
|
bne a0,zero,.L197
|
||
|
beq s8,s1,.L421
|
||
|
.L198:
|
||
|
srliw s9,s9,31
|
||
|
addw a5,s6,s9
|
||
|
andi a5,a5,1
|
||
|
subw a5,a5,s9
|
||
|
li a4,1
|
||
|
sraiw s7,s2,31
|
||
|
beq a5,a4,.L422
|
||
|
.L229:
|
||
|
srliw s7,s7,31
|
||
|
addw s2,s2,s7
|
||
|
andi s2,s2,1
|
||
|
subw s2,s2,s7
|
||
|
li a5,1
|
||
|
li s1,0
|
||
|
bne s2,a5,.L193
|
||
|
beq s4,zero,.L330
|
||
|
.L251:
|
||
|
li a5,1
|
||
|
li s1,0
|
||
|
beq s4,a5,.L330
|
||
|
srliw a5,s4,31
|
||
|
sraiw a4,s4,31
|
||
|
.L252:
|
||
|
srliw a4,a4,31
|
||
|
addw a5,a5,s4
|
||
|
addw s2,a4,s4
|
||
|
andi s2,s2,1
|
||
|
sraiw s1,a5,1
|
||
|
subw s2,s2,a4
|
||
|
li s5,0
|
||
|
beq s1,zero,.L423
|
||
|
.L270:
|
||
|
li a5,1
|
||
|
mv a0,s5
|
||
|
beq s1,a5,.L274
|
||
|
mv a1,s1
|
||
|
call multiply.part.0
|
||
|
.L274:
|
||
|
li a5,998244352
|
||
|
slliw a0,a0,1
|
||
|
addiw a5,a5,1
|
||
|
li a4,1
|
||
|
remw s3,a0,a5
|
||
|
beq s2,a4,.L424
|
||
|
beq s3,zero,.L425
|
||
|
.L271:
|
||
|
li a5,1
|
||
|
beq s3,a5,.L324
|
||
|
.L269:
|
||
|
srliw a5,s3,31
|
||
|
addw a5,a5,s3
|
||
|
sraiw s1,a5,1
|
||
|
mv s2,s1
|
||
|
beq s1,zero,.L278
|
||
|
li a5,1
|
||
|
beq s1,a5,.L426
|
||
|
srliw s5,s1,31
|
||
|
addw s5,s5,s1
|
||
|
sraiw s1,s5,1
|
||
|
mv s5,s1
|
||
|
beq s1,zero,.L280
|
||
|
beq s1,a5,.L427
|
||
|
srliw a1,s1,31
|
||
|
addw a1,a1,s1
|
||
|
sraiw a1,a1,1
|
||
|
beq a1,zero,.L282
|
||
|
beq a1,a5,.L428
|
||
|
mv a0,s3
|
||
|
call multiply.part.0
|
||
|
li a5,998244352
|
||
|
slliw a1,a0,1
|
||
|
addiw a5,a5,1
|
||
|
remw a1,a1,a5
|
||
|
.L282:
|
||
|
srliw a5,s5,31
|
||
|
addw s5,s5,a5
|
||
|
andi s5,s5,1
|
||
|
subw s5,s5,a5
|
||
|
li a5,1
|
||
|
beq s5,a5,.L284
|
||
|
li a5,998244352
|
||
|
slliw s1,a1,1
|
||
|
addiw a5,a5,1
|
||
|
remw s1,s1,a5
|
||
|
.L280:
|
||
|
srliw a4,s2,31
|
||
|
addw a5,s2,a4
|
||
|
andi a5,a5,1
|
||
|
subw a5,a5,a4
|
||
|
li a4,1
|
||
|
beq a5,a4,.L285
|
||
|
li a5,998244352
|
||
|
slliw s1,s1,1
|
||
|
addiw a5,a5,1
|
||
|
remw s1,s1,a5
|
||
|
.L278:
|
||
|
sraiw a4,s3,31
|
||
|
srliw a4,a4,31
|
||
|
addw a5,a4,s3
|
||
|
andi a5,a5,1
|
||
|
subw a5,a5,a4
|
||
|
li a4,1
|
||
|
bne a5,a4,.L193
|
||
|
addw a5,s3,s1
|
||
|
li s1,998244352
|
||
|
addiw s1,s1,1
|
||
|
remw s1,a5,s1
|
||
|
j .L193
|
||
|
.L197:
|
||
|
li a4,1
|
||
|
beq a0,s1,.L196
|
||
|
srliw s7,a0,31
|
||
|
addw s7,s7,a0
|
||
|
sraiw s1,s7,1
|
||
|
mv s7,s1
|
||
|
beq s1,zero,.L429
|
||
|
beq s1,a4,.L430
|
||
|
srliw s1,s1,31
|
||
|
addw s1,s1,s7
|
||
|
sraiw a5,s1,1
|
||
|
mv s1,a5
|
||
|
beq a5,zero,.L211
|
||
|
beq a5,a4,.L431
|
||
|
srliw a1,a5,31
|
||
|
addw a1,a1,a5
|
||
|
sraiw a1,a1,1
|
||
|
beq a1,zero,.L213
|
||
|
li a5,1
|
||
|
beq a1,a5,.L432
|
||
|
call multiply.part.0
|
||
|
li a5,998244352
|
||
|
slliw a1,a0,1
|
||
|
addiw a5,a5,1
|
||
|
remw a1,a1,a5
|
||
|
.L213:
|
||
|
srliw a4,s1,31
|
||
|
addw a5,s1,a4
|
||
|
andi a5,a5,1
|
||
|
subw a5,a5,a4
|
||
|
li a4,1
|
||
|
beq a5,a4,.L215
|
||
|
li a4,998244352
|
||
|
slliw a5,a1,1
|
||
|
addiw a4,a4,1
|
||
|
remw a5,a5,a4
|
||
|
.L211:
|
||
|
srliw a3,s7,31
|
||
|
addw a4,s7,a3
|
||
|
andi a4,a4,1
|
||
|
subw a4,a4,a3
|
||
|
li a3,1
|
||
|
beq a4,a3,.L216
|
||
|
li a4,998244352
|
||
|
slliw a5,a5,1
|
||
|
addiw a4,a4,1
|
||
|
remw s1,a5,a4
|
||
|
.L210:
|
||
|
srliw a4,s10,31
|
||
|
addw a5,a4,s10
|
||
|
andi a5,a5,1
|
||
|
subw a5,a5,a4
|
||
|
li a4,1
|
||
|
beq a5,a4,.L207
|
||
|
.L217:
|
||
|
li a5,1
|
||
|
sraiw s9,s6,31
|
||
|
beq s8,a5,.L433
|
||
|
.L218:
|
||
|
beq s1,zero,.L198
|
||
|
.L227:
|
||
|
li a5,1
|
||
|
beq s1,a5,.L195
|
||
|
.L231:
|
||
|
srliw a5,s1,31
|
||
|
addw a5,a5,s1
|
||
|
sraiw s5,a5,1
|
||
|
mv s3,s5
|
||
|
beq s5,zero,.L236
|
||
|
li a5,1
|
||
|
beq s5,a5,.L434
|
||
|
srliw s5,s5,31
|
||
|
addw s5,s5,s3
|
||
|
sraiw a4,s5,1
|
||
|
mv s5,a4
|
||
|
beq a4,zero,.L238
|
||
|
beq a4,a5,.L435
|
||
|
srliw a1,a4,31
|
||
|
addw a1,a1,a4
|
||
|
sraiw a1,a1,1
|
||
|
beq a1,zero,.L240
|
||
|
beq a1,a5,.L436
|
||
|
mv a0,s1
|
||
|
call multiply.part.0
|
||
|
li a5,998244352
|
||
|
slliw a1,a0,1
|
||
|
addiw a5,a5,1
|
||
|
remw a1,a1,a5
|
||
|
.L240:
|
||
|
srliw a4,s5,31
|
||
|
addw a5,s5,a4
|
||
|
andi a5,a5,1
|
||
|
subw a5,a5,a4
|
||
|
li a4,1
|
||
|
beq a5,a4,.L242
|
||
|
li a5,998244352
|
||
|
slliw a4,a1,1
|
||
|
addiw a5,a5,1
|
||
|
remw a4,a4,a5
|
||
|
.L238:
|
||
|
srliw a3,s3,31
|
||
|
addw a5,s3,a3
|
||
|
andi a5,a5,1
|
||
|
subw a5,a5,a3
|
||
|
li a3,1
|
||
|
beq a5,a3,.L243
|
||
|
li a5,998244352
|
||
|
slliw a4,a4,1
|
||
|
addiw a5,a5,1
|
||
|
remw s5,a4,a5
|
||
|
.L236:
|
||
|
srliw a4,s1,31
|
||
|
addw a5,a4,s1
|
||
|
andi a5,a5,1
|
||
|
subw a5,a5,a4
|
||
|
li a4,1
|
||
|
bne a5,a4,.L244
|
||
|
li a5,998244352
|
||
|
addw a4,s1,s5
|
||
|
addiw a5,a5,1
|
||
|
remw s5,a4,a5
|
||
|
.L244:
|
||
|
srliw s9,s9,31
|
||
|
addw a5,s6,s9
|
||
|
andi a5,a5,1
|
||
|
subw a5,a5,s9
|
||
|
li a4,1
|
||
|
sraiw s7,s2,31
|
||
|
beq a5,a4,.L437
|
||
|
.L245:
|
||
|
beq s5,zero,.L229
|
||
|
.L250:
|
||
|
li a5,1
|
||
|
beq s5,a5,.L194
|
||
|
.L253:
|
||
|
srliw a4,s5,31
|
||
|
addw a4,a4,s5
|
||
|
sraiw s1,a4,1
|
||
|
mv s3,s1
|
||
|
beq s1,zero,.L438
|
||
|
li a4,1
|
||
|
beq s1,a4,.L439
|
||
|
srliw s1,s1,31
|
||
|
addw s1,s1,s3
|
||
|
sraiw a5,s1,1
|
||
|
mv s1,a5
|
||
|
beq a5,zero,.L261
|
||
|
beq a5,a4,.L440
|
||
|
srliw a1,a5,31
|
||
|
addw a1,a1,a5
|
||
|
sraiw a1,a1,1
|
||
|
beq a1,zero,.L263
|
||
|
beq a1,a4,.L441
|
||
|
mv a0,s5
|
||
|
call multiply.part.0
|
||
|
li a5,998244352
|
||
|
slliw a1,a0,1
|
||
|
addiw a5,a5,1
|
||
|
remw a1,a1,a5
|
||
|
.L263:
|
||
|
srliw a4,s1,31
|
||
|
addw a5,s1,a4
|
||
|
andi a5,a5,1
|
||
|
subw a5,a5,a4
|
||
|
li a4,1
|
||
|
beq a5,a4,.L265
|
||
|
li a4,998244352
|
||
|
slliw a5,a1,1
|
||
|
addiw a4,a4,1
|
||
|
remw a5,a5,a4
|
||
|
.L261:
|
||
|
srliw a3,s3,31
|
||
|
addw a4,s3,a3
|
||
|
andi a4,a4,1
|
||
|
subw a4,a4,a3
|
||
|
li a3,1
|
||
|
beq a4,a3,.L266
|
||
|
li a4,998244352
|
||
|
slliw a5,a5,1
|
||
|
addiw a4,a4,1
|
||
|
remw s3,a5,a4
|
||
|
.L260:
|
||
|
sraiw a4,s5,31
|
||
|
srliw a4,a4,31
|
||
|
addw a5,a4,s5
|
||
|
andi a5,a5,1
|
||
|
subw a5,a5,a4
|
||
|
li a4,1
|
||
|
beq a5,a4,.L257
|
||
|
.L267:
|
||
|
srliw s7,s7,31
|
||
|
addw s2,s2,s7
|
||
|
andi s2,s2,1
|
||
|
subw s2,s2,s7
|
||
|
li a5,1
|
||
|
beq s2,a5,.L442
|
||
|
bne s3,zero,.L271
|
||
|
li s1,0
|
||
|
j .L193
|
||
|
.L437:
|
||
|
li s1,0
|
||
|
beq s4,zero,.L330
|
||
|
beq s4,a5,.L443
|
||
|
.L230:
|
||
|
sraiw a4,s4,31
|
||
|
srliw a4,a4,31
|
||
|
srliw a5,s4,31
|
||
|
addw a5,a5,s4
|
||
|
addw s1,a4,s4
|
||
|
andi s1,s1,1
|
||
|
sraiw a1,a5,1
|
||
|
subw s1,s1,a4
|
||
|
li a5,1
|
||
|
beq a1,zero,.L444
|
||
|
mv a0,s5
|
||
|
beq a1,a5,.L249
|
||
|
call multiply.part.0
|
||
|
.L249:
|
||
|
li a5,998244352
|
||
|
slliw a0,a0,1
|
||
|
addiw a5,a5,1
|
||
|
li a4,1
|
||
|
remw a3,a0,a5
|
||
|
beq s1,a4,.L445
|
||
|
mv s5,a3
|
||
|
j .L245
|
||
|
.L433:
|
||
|
srliw a2,s9,31
|
||
|
srliw a4,s2,31
|
||
|
addw a3,s6,a2
|
||
|
addw a5,s2,a4
|
||
|
andi a3,a3,1
|
||
|
andi a5,a5,1
|
||
|
subw a3,a3,a2
|
||
|
sraiw s7,s2,31
|
||
|
subw a5,a5,a4
|
||
|
beq s4,zero,.L199
|
||
|
mv s10,s1
|
||
|
beq s4,s8,.L446
|
||
|
.L200:
|
||
|
sraiw a4,s4,31
|
||
|
srliw a1,a4,31
|
||
|
srliw a5,s4,31
|
||
|
addw s1,a5,s4
|
||
|
addw a2,a1,s4
|
||
|
andi a2,a2,1
|
||
|
sraiw s1,s1,1
|
||
|
subw s3,a2,a1
|
||
|
beq s1,zero,.L447
|
||
|
li a5,1
|
||
|
mv a0,s10
|
||
|
beq s1,a5,.L226
|
||
|
mv a1,s1
|
||
|
call multiply.part.0
|
||
|
.L226:
|
||
|
li a4,998244352
|
||
|
slliw a5,a0,1
|
||
|
addiw a4,a4,1
|
||
|
li a3,1
|
||
|
remw s1,a5,a4
|
||
|
bne s3,a3,.L218
|
||
|
addw a5,s1,s10
|
||
|
remw s1,a5,a4
|
||
|
.L224:
|
||
|
bne s1,zero,.L227
|
||
|
li a5,2
|
||
|
remw a5,s6,a5
|
||
|
li a4,1
|
||
|
beq a5,a4,.L228
|
||
|
sraiw s7,s2,31
|
||
|
j .L229
|
||
|
.L426:
|
||
|
li a5,998244352
|
||
|
slliw s1,s3,1
|
||
|
addiw a5,a5,1
|
||
|
remw s1,s1,a5
|
||
|
j .L278
|
||
|
.L438:
|
||
|
sraiw a4,s5,31
|
||
|
srliw a4,a4,31
|
||
|
addw a5,a4,s5
|
||
|
andi a5,a5,1
|
||
|
subw a5,a5,a4
|
||
|
li a4,1
|
||
|
beq a5,a4,.L312
|
||
|
srliw s7,s7,31
|
||
|
addw a5,s2,s7
|
||
|
andi a5,a5,1
|
||
|
subw a5,a5,s7
|
||
|
bne a5,a4,.L193
|
||
|
beq s4,zero,.L330
|
||
|
li s3,0
|
||
|
beq s4,a5,.L330
|
||
|
.L258:
|
||
|
sraiw a5,s4,31
|
||
|
srliw a5,a5,31
|
||
|
srliw s1,s4,31
|
||
|
addw s1,s1,s4
|
||
|
addw s2,a5,s4
|
||
|
andi s2,s2,1
|
||
|
sraiw s1,s1,1
|
||
|
subw s2,s2,a5
|
||
|
mv s5,s3
|
||
|
bne s1,zero,.L270
|
||
|
li a5,1
|
||
|
bne s2,a5,.L330
|
||
|
.L273:
|
||
|
bne s3,zero,.L271
|
||
|
.L272:
|
||
|
sraiw a5,s0,31
|
||
|
srliw a5,a5,31
|
||
|
addw s2,a5,s0
|
||
|
andi s2,s2,1
|
||
|
subw s2,s2,a5
|
||
|
li a5,1
|
||
|
bne s2,a5,.L325
|
||
|
mv a1,s1
|
||
|
li s1,0
|
||
|
j .L277
|
||
|
.L312:
|
||
|
li s3,0
|
||
|
.L257:
|
||
|
li a5,998244352
|
||
|
addw a4,s5,s3
|
||
|
addiw a5,a5,1
|
||
|
remw s3,a4,a5
|
||
|
j .L267
|
||
|
.L285:
|
||
|
li a5,998244352
|
||
|
addiw a5,a5,1
|
||
|
addw s1,s3,s1
|
||
|
remw s1,s1,a5
|
||
|
slliw s1,s1,1
|
||
|
remw s1,s1,a5
|
||
|
j .L278
|
||
|
.L442:
|
||
|
li s1,0
|
||
|
beq s4,zero,.L330
|
||
|
bne s4,s2,.L258
|
||
|
beq s3,zero,.L330
|
||
|
bne s3,s4,.L269
|
||
|
li s1,2
|
||
|
remw s1,s0,s1
|
||
|
beq s1,s3,.L235
|
||
|
li s1,1
|
||
|
j .L330
|
||
|
.L439:
|
||
|
li a4,998244352
|
||
|
slliw a5,s5,1
|
||
|
addiw a4,a4,1
|
||
|
remw s3,a5,a4
|
||
|
j .L260
|
||
|
.L415:
|
||
|
mv a5,s1
|
||
|
li s1,0
|
||
|
j .L286
|
||
|
.L427:
|
||
|
li a5,998244352
|
||
|
slliw s1,s3,1
|
||
|
addiw a5,a5,1
|
||
|
remw s1,s1,a5
|
||
|
j .L280
|
||
|
.L416:
|
||
|
slliw a4,s1,1
|
||
|
mv a5,s1
|
||
|
li s1,998244352
|
||
|
addiw s1,s1,1
|
||
|
remw s1,a4,s1
|
||
|
j .L286
|
||
|
.L266:
|
||
|
li a4,998244352
|
||
|
addiw a4,a4,1
|
||
|
addw a5,s5,a5
|
||
|
remw a5,a5,a4
|
||
|
slliw a5,a5,1
|
||
|
remw s3,a5,a4
|
||
|
j .L260
|
||
|
.L284:
|
||
|
li a5,998244352
|
||
|
addiw a5,a5,1
|
||
|
addw s1,s3,a1
|
||
|
remw s1,s1,a5
|
||
|
slliw s1,s1,1
|
||
|
remw s1,s1,a5
|
||
|
j .L280
|
||
|
.L434:
|
||
|
li a5,998244352
|
||
|
slliw a4,s1,1
|
||
|
addiw a5,a5,1
|
||
|
remw s5,a4,a5
|
||
|
j .L236
|
||
|
.L422:
|
||
|
li s1,0
|
||
|
beq s4,zero,.L330
|
||
|
.L228:
|
||
|
li a5,1
|
||
|
li s1,0
|
||
|
beq s4,a5,.L330
|
||
|
li s5,0
|
||
|
sraiw s7,s2,31
|
||
|
j .L230
|
||
|
.L440:
|
||
|
li a4,998244352
|
||
|
slliw a5,s5,1
|
||
|
addiw a4,a4,1
|
||
|
remw a5,a5,a4
|
||
|
j .L261
|
||
|
.L428:
|
||
|
li a5,998244352
|
||
|
slliw a1,s3,1
|
||
|
addiw a5,a5,1
|
||
|
remw a1,a1,a5
|
||
|
j .L282
|
||
|
.L429:
|
||
|
srliw a3,a0,31
|
||
|
addw a5,a3,a0
|
||
|
andi a5,a5,1
|
||
|
subw a5,a5,a3
|
||
|
beq a5,a4,.L207
|
||
|
sraiw s9,s5,31
|
||
|
bne s8,a4,.L198
|
||
|
srliw a4,s5,31
|
||
|
srliw s3,s3,31
|
||
|
addw a3,s6,a4
|
||
|
addw a5,s2,s3
|
||
|
andi a3,a3,1
|
||
|
andi a5,a5,1
|
||
|
subw a3,a3,a4
|
||
|
subw a5,a5,s3
|
||
|
beq s4,zero,.L199
|
||
|
li a4,1
|
||
|
li s10,0
|
||
|
bne s4,a4,.L200
|
||
|
.L208:
|
||
|
beq a3,s4,.L201
|
||
|
bne a5,s4,.L193
|
||
|
j .L330
|
||
|
.L207:
|
||
|
addw s10,s10,s1
|
||
|
li s1,998244352
|
||
|
addiw s1,s1,1
|
||
|
remw s1,s10,s1
|
||
|
j .L217
|
||
|
.L424:
|
||
|
addw s5,s5,s3
|
||
|
remw s3,s5,a5
|
||
|
j .L273
|
||
|
.L243:
|
||
|
li a5,998244352
|
||
|
addiw a5,a5,1
|
||
|
addw a4,a4,s1
|
||
|
remw a4,a4,a5
|
||
|
slliw a4,a4,1
|
||
|
remw s5,a4,a5
|
||
|
j .L236
|
||
|
.L420:
|
||
|
srliw a4,s2,31
|
||
|
addw a5,s2,a4
|
||
|
andi a5,a5,1
|
||
|
subw a5,a5,a4
|
||
|
.L199:
|
||
|
li a4,1
|
||
|
li s1,0
|
||
|
beq a3,a4,.L330
|
||
|
bne a5,a4,.L193
|
||
|
j .L330
|
||
|
.L421:
|
||
|
srliw a4,s5,31
|
||
|
srliw s3,s3,31
|
||
|
addw a3,s6,a4
|
||
|
addw a5,s2,s3
|
||
|
andi a3,a3,1
|
||
|
andi a5,a5,1
|
||
|
subw a3,a3,a4
|
||
|
subw a5,a5,s3
|
||
|
beq s4,zero,.L199
|
||
|
bne s4,s8,.L200
|
||
|
beq a3,s4,.L201
|
||
|
li s1,0
|
||
|
bne a5,s4,.L193
|
||
|
j .L330
|
||
|
.L265:
|
||
|
li a4,998244352
|
||
|
addiw a4,a4,1
|
||
|
addw a5,s5,a1
|
||
|
remw a5,a5,a4
|
||
|
slliw a5,a5,1
|
||
|
remw a5,a5,a4
|
||
|
j .L261
|
||
|
.L430:
|
||
|
li a5,998244352
|
||
|
slliw s1,a0,1
|
||
|
addiw a5,a5,1
|
||
|
remw s1,s1,a5
|
||
|
j .L210
|
||
|
.L444:
|
||
|
bne s1,a5,.L229
|
||
|
.L248:
|
||
|
bne s5,zero,.L250
|
||
|
srliw s7,s7,31
|
||
|
addw a5,s2,s7
|
||
|
andi a5,a5,1
|
||
|
subw a5,a5,s7
|
||
|
li a4,1
|
||
|
beq a5,a4,.L251
|
||
|
li s1,0
|
||
|
j .L193
|
||
|
.L435:
|
||
|
li a5,998244352
|
||
|
slliw a4,s1,1
|
||
|
addiw a5,a5,1
|
||
|
remw a4,a4,a5
|
||
|
j .L238
|
||
|
.L418:
|
||
|
li s1,0
|
||
|
beq s4,zero,.L330
|
||
|
.L234:
|
||
|
sraiw a4,s0,31
|
||
|
srliw a4,a4,31
|
||
|
addw a5,a4,s0
|
||
|
andi a5,a5,1
|
||
|
subw a5,a5,a4
|
||
|
li s1,1
|
||
|
bne a5,s1,.L330
|
||
|
snez s1,s4
|
||
|
j .L330
|
||
|
.L441:
|
||
|
li a5,998244352
|
||
|
slliw a1,s5,1
|
||
|
addiw a5,a5,1
|
||
|
remw a1,a1,a5
|
||
|
j .L263
|
||
|
.L443:
|
||
|
beq s5,zero,.L330
|
||
|
bne s5,s4,.L253
|
||
|
li a5,2
|
||
|
remw a5,s2,a5
|
||
|
beq a5,s4,.L254
|
||
|
li s1,1
|
||
|
j .L193
|
||
|
.L445:
|
||
|
addw a0,a3,s5
|
||
|
remw s5,a0,a5
|
||
|
j .L248
|
||
|
.L216:
|
||
|
li a4,998244352
|
||
|
addiw a4,a4,1
|
||
|
addw s1,s10,a5
|
||
|
remw s1,s1,a4
|
||
|
slliw s1,s1,1
|
||
|
remw s1,s1,a4
|
||
|
j .L210
|
||
|
.L423:
|
||
|
li a5,1
|
||
|
bne s2,a5,.L330
|
||
|
j .L272
|
||
|
.L242:
|
||
|
li a5,998244352
|
||
|
addiw a5,a5,1
|
||
|
addw a4,a1,s1
|
||
|
remw a4,a4,a5
|
||
|
slliw a4,a4,1
|
||
|
remw a4,a4,a5
|
||
|
j .L238
|
||
|
.L447:
|
||
|
li a2,1
|
||
|
beq s3,a2,.L448
|
||
|
sraiw s7,s2,31
|
||
|
bne a3,a2,.L229
|
||
|
beq s4,a3,.L330
|
||
|
li a2,2
|
||
|
remw a2,s2,a2
|
||
|
bne a2,a3,.L193
|
||
|
bne s4,zero,.L252
|
||
|
j .L330
|
||
|
.L431:
|
||
|
li a4,998244352
|
||
|
slliw a5,a0,1
|
||
|
addiw a4,a4,1
|
||
|
remw a5,a5,a4
|
||
|
j .L211
|
||
|
.L436:
|
||
|
li a5,998244352
|
||
|
slliw a1,s1,1
|
||
|
addiw a5,a5,1
|
||
|
remw a1,a1,a5
|
||
|
j .L240
|
||
|
.L446:
|
||
|
beq s1,zero,.L208
|
||
|
bne s1,s4,.L231
|
||
|
li a5,2
|
||
|
remw a5,s6,a5
|
||
|
bne a5,s4,.L194
|
||
|
j .L232
|
||
|
.L215:
|
||
|
li a4,998244352
|
||
|
addiw a4,a4,1
|
||
|
addw a5,s10,a1
|
||
|
remw a5,a5,a4
|
||
|
slliw a5,a5,1
|
||
|
remw a5,a5,a4
|
||
|
j .L211
|
||
|
.L432:
|
||
|
li a5,998244352
|
||
|
slliw a1,a0,1
|
||
|
addiw a5,a5,1
|
||
|
remw a1,a1,a5
|
||
|
j .L213
|
||
|
.L448:
|
||
|
mv s1,s10
|
||
|
j .L224
|
||
|
.L201:
|
||
|
li a5,2
|
||
|
remw s2,s2,a5
|
||
|
li a4,1
|
||
|
beq s2,a4,.L325
|
||
|
remw a5,s0,a5
|
||
|
li s1,0
|
||
|
bne a5,a4,.L330
|
||
|
j .L235
|
||
|
.L425:
|
||
|
li a5,2
|
||
|
remw a5,s0,a5
|
||
|
bne a5,a4,.L325
|
||
|
mv a1,s1
|
||
|
li s1,0
|
||
|
j .L276
|
||
|
.size power.part.0, .-power.part.0
|
||
|
.align 1
|
||
|
.globl multiply
|
||
|
.type multiply, @function
|
||
|
multiply:
|
||
|
beq a1,zero,.L457
|
||
|
addi sp,sp,-32
|
||
|
sd s0,16(sp)
|
||
|
sd s2,0(sp)
|
||
|
sd ra,24(sp)
|
||
|
sd s1,8(sp)
|
||
|
li a5,1
|
||
|
mv s0,a1
|
||
|
mv s2,a0
|
||
|
beq a1,a5,.L468
|
||
|
srliw s1,a1,31
|
||
|
addw s1,s1,a1
|
||
|
sraiw a1,s1,1
|
||
|
mv s1,a1
|
||
|
beq a1,zero,.L452
|
||
|
beq a1,a5,.L469
|
||
|
srliw a1,a1,31
|
||
|
addw a1,a1,s1
|
||
|
sraiw a1,a1,1
|
||
|
beq a1,zero,.L454
|
||
|
beq a1,a5,.L470
|
||
|
call multiply.part.0
|
||
|
li a5,998244352
|
||
|
slliw a1,a0,1
|
||
|
addiw a5,a5,1
|
||
|
remw a1,a1,a5
|
||
|
.L454:
|
||
|
srliw a5,s1,31
|
||
|
addw s1,s1,a5
|
||
|
andi s1,s1,1
|
||
|
subw s1,s1,a5
|
||
|
li a5,1
|
||
|
beq s1,a5,.L456
|
||
|
li a5,998244352
|
||
|
slliw a1,a1,1
|
||
|
addiw a5,a5,1
|
||
|
remw a1,a1,a5
|
||
|
.L452:
|
||
|
sraiw a5,s0,31
|
||
|
srliw a5,a5,31
|
||
|
addw s0,a5,s0
|
||
|
andi s0,s0,1
|
||
|
subw s0,s0,a5
|
||
|
li a5,1
|
||
|
bne s0,a5,.L450
|
||
|
li a5,998244352
|
||
|
addw a1,s2,a1
|
||
|
addiw a5,a5,1
|
||
|
ld ra,24(sp)
|
||
|
ld s0,16(sp)
|
||
|
ld s1,8(sp)
|
||
|
ld s2,0(sp)
|
||
|
addi sp,sp,32
|
||
|
remw a1,a1,a5
|
||
|
mv a0,a1
|
||
|
jr ra
|
||
|
.L468:
|
||
|
li a1,998244352
|
||
|
addiw a1,a1,1
|
||
|
remw a1,a0,a1
|
||
|
.L450:
|
||
|
ld ra,24(sp)
|
||
|
ld s0,16(sp)
|
||
|
ld s1,8(sp)
|
||
|
ld s2,0(sp)
|
||
|
mv a0,a1
|
||
|
addi sp,sp,32
|
||
|
jr ra
|
||
|
.L457:
|
||
|
li a1,0
|
||
|
mv a0,a1
|
||
|
ret
|
||
|
.L469:
|
||
|
li a5,998244352
|
||
|
addiw a5,a5,1
|
||
|
remw a1,a0,a5
|
||
|
slliw a1,a1,1
|
||
|
remw a1,a1,a5
|
||
|
j .L452
|
||
|
.L456:
|
||
|
li a5,998244352
|
||
|
addiw a5,a5,1
|
||
|
addw a1,s2,a1
|
||
|
remw a1,a1,a5
|
||
|
slliw a1,a1,1
|
||
|
remw a1,a1,a5
|
||
|
j .L452
|
||
|
.L470:
|
||
|
li a5,998244352
|
||
|
addiw a5,a5,1
|
||
|
remw a1,a0,a5
|
||
|
slliw a1,a1,1
|
||
|
remw a1,a1,a5
|
||
|
j .L454
|
||
|
.size multiply, .-multiply
|
||
|
.align 1
|
||
|
.globl power
|
||
|
.type power, @function
|
||
|
power:
|
||
|
addi sp,sp,-80
|
||
|
sd ra,72(sp)
|
||
|
sd s0,64(sp)
|
||
|
sd s1,56(sp)
|
||
|
sd s2,48(sp)
|
||
|
sd s3,40(sp)
|
||
|
sd s4,32(sp)
|
||
|
sd s5,24(sp)
|
||
|
bne a1,zero,.L555
|
||
|
.L509:
|
||
|
li s1,1
|
||
|
.L472:
|
||
|
ld ra,72(sp)
|
||
|
ld s0,64(sp)
|
||
|
ld s2,48(sp)
|
||
|
ld s3,40(sp)
|
||
|
ld s4,32(sp)
|
||
|
ld s5,24(sp)
|
||
|
mv a0,s1
|
||
|
ld s1,56(sp)
|
||
|
addi sp,sp,80
|
||
|
jr ra
|
||
|
.L555:
|
||
|
srliw a5,a1,31
|
||
|
addw a5,a5,a1
|
||
|
sraiw a3,a5,1
|
||
|
mv s0,a1
|
||
|
mv s3,a0
|
||
|
li s1,1
|
||
|
beq a3,zero,.L473
|
||
|
srliw a5,a5,31
|
||
|
srliw a1,a3,31
|
||
|
addw a1,a1,a3
|
||
|
addw s2,a3,a5
|
||
|
andi s2,s2,1
|
||
|
sraiw a1,a1,1
|
||
|
subw s2,s2,a5
|
||
|
bne a1,zero,.L556
|
||
|
.L474:
|
||
|
li s1,1
|
||
|
beq s2,s1,.L557
|
||
|
.L473:
|
||
|
sraiw a5,s0,31
|
||
|
srliw a5,a5,31
|
||
|
addw s0,a5,s0
|
||
|
andi s0,s0,1
|
||
|
subw s0,s0,a5
|
||
|
li a5,1
|
||
|
bne s0,a5,.L472
|
||
|
beq s3,zero,.L528
|
||
|
.L493:
|
||
|
li a5,1
|
||
|
beq s3,a5,.L472
|
||
|
sraiw a5,s3,31
|
||
|
srliw a5,a5,31
|
||
|
srliw a1,s3,31
|
||
|
addw a4,a5,s3
|
||
|
addw a1,a1,s3
|
||
|
andi a4,a4,1
|
||
|
sraiw a1,a1,1
|
||
|
subw s5,a4,a5
|
||
|
.L501:
|
||
|
beq a1,zero,.L558
|
||
|
.L500:
|
||
|
li a5,1
|
||
|
beq a1,a5,.L559
|
||
|
mv a0,s1
|
||
|
call multiply.part.0
|
||
|
mv a5,s1
|
||
|
li s1,998244352
|
||
|
slliw a0,a0,1
|
||
|
addiw s1,s1,1
|
||
|
remw s1,a0,s1
|
||
|
.L507:
|
||
|
li a3,1
|
||
|
bne s5,a3,.L472
|
||
|
addw a5,a5,s1
|
||
|
li s1,998244352
|
||
|
addiw s1,s1,1
|
||
|
remw s1,a5,s1
|
||
|
j .L472
|
||
|
.L556:
|
||
|
call power.part.0
|
||
|
mv s1,a0
|
||
|
bne a0,zero,.L475
|
||
|
li a5,1
|
||
|
bne s2,a5,.L473
|
||
|
beq s3,zero,.L472
|
||
|
beq s3,s2,.L472
|
||
|
sraiw a5,s3,31
|
||
|
srliw a5,a5,31
|
||
|
srliw a1,s3,31
|
||
|
addw a1,a1,s3
|
||
|
addw a4,a5,s3
|
||
|
andi a4,a4,1
|
||
|
sraiw a1,a1,1
|
||
|
subw s5,a4,a5
|
||
|
beq a1,zero,.L560
|
||
|
.L494:
|
||
|
li a5,1
|
||
|
mv a0,s1
|
||
|
beq a1,a5,.L498
|
||
|
sd a1,8(sp)
|
||
|
call multiply.part.0
|
||
|
ld a1,8(sp)
|
||
|
.L498:
|
||
|
li a5,998244352
|
||
|
slliw a0,a0,1
|
||
|
addiw a5,a5,1
|
||
|
li a3,1
|
||
|
remw s4,a0,a5
|
||
|
beq s5,a3,.L561
|
||
|
beq s4,zero,.L562
|
||
|
.L496:
|
||
|
li a5,1
|
||
|
beq s4,a5,.L527
|
||
|
.L492:
|
||
|
srliw s2,s4,31
|
||
|
addw s2,s2,s4
|
||
|
sraiw s1,s2,1
|
||
|
mv s2,s1
|
||
|
beq s1,zero,.L502
|
||
|
li a5,1
|
||
|
beq s1,a5,.L563
|
||
|
srliw a1,s1,31
|
||
|
addw a1,a1,s1
|
||
|
sraiw a1,a1,1
|
||
|
beq a1,zero,.L504
|
||
|
beq a1,a5,.L564
|
||
|
mv a0,s4
|
||
|
call multiply.part.0
|
||
|
li a5,998244352
|
||
|
slliw a1,a0,1
|
||
|
addiw a5,a5,1
|
||
|
remw a1,a1,a5
|
||
|
.L504:
|
||
|
srliw a5,s2,31
|
||
|
addw s2,s2,a5
|
||
|
andi s2,s2,1
|
||
|
subw s2,s2,a5
|
||
|
li a5,1
|
||
|
beq s2,a5,.L506
|
||
|
li a5,998244352
|
||
|
slliw a1,a1,1
|
||
|
addiw a5,a5,1
|
||
|
remw s1,a1,a5
|
||
|
.L502:
|
||
|
sraiw a4,s4,31
|
||
|
srliw a4,a4,31
|
||
|
addw a5,a4,s4
|
||
|
andi a5,a5,1
|
||
|
subw a5,a5,a4
|
||
|
li a4,1
|
||
|
bne a5,a4,.L473
|
||
|
addw a5,s4,s1
|
||
|
li s1,998244352
|
||
|
addiw s1,s1,1
|
||
|
remw s1,a5,s1
|
||
|
j .L473
|
||
|
.L565:
|
||
|
srliw a3,a0,31
|
||
|
addw a5,a3,a0
|
||
|
andi a5,a5,1
|
||
|
subw a5,a5,a3
|
||
|
beq a5,a4,.L480
|
||
|
li s1,0
|
||
|
bne s2,a4,.L473
|
||
|
beq s3,zero,.L472
|
||
|
beq s3,s2,.L472
|
||
|
.L481:
|
||
|
sraiw a5,s3,31
|
||
|
srliw a5,a5,31
|
||
|
srliw a1,s3,31
|
||
|
addw a1,a1,s3
|
||
|
addw a4,a5,s3
|
||
|
andi a4,a4,1
|
||
|
sraiw a1,a1,1
|
||
|
subw s5,a4,a5
|
||
|
mv s1,s4
|
||
|
bne a1,zero,.L494
|
||
|
li a5,1
|
||
|
beq s5,a5,.L497
|
||
|
.L528:
|
||
|
li s1,0
|
||
|
j .L472
|
||
|
.L558:
|
||
|
mv a5,s1
|
||
|
li s1,0
|
||
|
j .L507
|
||
|
.L557:
|
||
|
li s1,0
|
||
|
beq s3,zero,.L472
|
||
|
li s1,1
|
||
|
beq s3,s1,.L472
|
||
|
sraiw a5,s3,31
|
||
|
srliw a5,a5,31
|
||
|
srliw a1,s3,31
|
||
|
addw a1,a1,s3
|
||
|
addw a4,a5,s3
|
||
|
andi a4,a4,1
|
||
|
sraiw a1,a1,1
|
||
|
subw s5,a4,a5
|
||
|
bne a1,zero,.L494
|
||
|
bne s5,s1,.L528
|
||
|
li s4,1
|
||
|
j .L496
|
||
|
.L563:
|
||
|
li a5,998244352
|
||
|
slliw s1,s4,1
|
||
|
addiw a5,a5,1
|
||
|
remw s1,s1,a5
|
||
|
j .L502
|
||
|
.L475:
|
||
|
li a4,1
|
||
|
beq a0,a4,.L474
|
||
|
srliw s5,a0,31
|
||
|
addw s5,s5,a0
|
||
|
sraiw s4,s5,1
|
||
|
mv s5,s4
|
||
|
beq s4,zero,.L565
|
||
|
beq s4,a4,.L566
|
||
|
srliw s4,s4,31
|
||
|
addw s4,s4,s5
|
||
|
sraiw a5,s4,1
|
||
|
mv s4,a5
|
||
|
beq a5,zero,.L484
|
||
|
beq a5,a4,.L567
|
||
|
srliw a1,a5,31
|
||
|
addw a1,a1,a5
|
||
|
sraiw a1,a1,1
|
||
|
beq a1,zero,.L486
|
||
|
li a5,1
|
||
|
beq a1,a5,.L568
|
||
|
call multiply.part.0
|
||
|
li a5,998244352
|
||
|
slliw a1,a0,1
|
||
|
addiw a5,a5,1
|
||
|
remw a1,a1,a5
|
||
|
.L486:
|
||
|
srliw a4,s4,31
|
||
|
addw a5,s4,a4
|
||
|
andi a5,a5,1
|
||
|
subw a5,a5,a4
|
||
|
li a4,1
|
||
|
beq a5,a4,.L488
|
||
|
li a4,998244352
|
||
|
slliw a5,a1,1
|
||
|
addiw a4,a4,1
|
||
|
remw a5,a5,a4
|
||
|
.L484:
|
||
|
srliw a3,s5,31
|
||
|
addw a4,s5,a3
|
||
|
andi a4,a4,1
|
||
|
subw a4,a4,a3
|
||
|
li a3,1
|
||
|
beq a4,a3,.L489
|
||
|
li a4,998244352
|
||
|
slliw a5,a5,1
|
||
|
addiw a4,a4,1
|
||
|
remw s4,a5,a4
|
||
|
.L483:
|
||
|
srliw a4,s1,31
|
||
|
addw a5,a4,s1
|
||
|
andi a5,a5,1
|
||
|
subw a5,a5,a4
|
||
|
li a4,1
|
||
|
beq a5,a4,.L480
|
||
|
.L490:
|
||
|
li a5,1
|
||
|
beq s2,a5,.L569
|
||
|
bne s4,zero,.L496
|
||
|
li s1,0
|
||
|
j .L473
|
||
|
.L561:
|
||
|
addw a0,s1,s4
|
||
|
remw s4,a0,a5
|
||
|
.L497:
|
||
|
bne s4,zero,.L496
|
||
|
.L495:
|
||
|
sraiw a5,s0,31
|
||
|
srliw a5,a5,31
|
||
|
addw a4,a5,s0
|
||
|
andi a4,a4,1
|
||
|
subw s5,a4,a5
|
||
|
li a5,1
|
||
|
li s1,0
|
||
|
bne s5,a5,.L472
|
||
|
j .L501
|
||
|
.L480:
|
||
|
li a5,998244352
|
||
|
addw s1,s1,s4
|
||
|
addiw a5,a5,1
|
||
|
remw s4,s1,a5
|
||
|
j .L490
|
||
|
.L506:
|
||
|
li a5,998244352
|
||
|
addiw a5,a5,1
|
||
|
addw s1,s4,a1
|
||
|
remw s1,s1,a5
|
||
|
slliw s1,s1,1
|
||
|
remw s1,s1,a5
|
||
|
j .L502
|
||
|
.L569:
|
||
|
li s1,0
|
||
|
beq s3,zero,.L472
|
||
|
bne s3,s2,.L481
|
||
|
beq s4,zero,.L472
|
||
|
bne s4,s3,.L492
|
||
|
li s1,2
|
||
|
remw s1,s0,s1
|
||
|
bne s1,s4,.L509
|
||
|
j .L493
|
||
|
.L566:
|
||
|
li a4,998244352
|
||
|
slliw a5,a0,1
|
||
|
addiw a4,a4,1
|
||
|
remw s4,a5,a4
|
||
|
j .L483
|
||
|
.L564:
|
||
|
li a5,998244352
|
||
|
slliw a1,s4,1
|
||
|
addiw a5,a5,1
|
||
|
remw a1,a1,a5
|
||
|
j .L504
|
||
|
.L559:
|
||
|
slliw a3,s1,1
|
||
|
mv a5,s1
|
||
|
li s1,998244352
|
||
|
addiw s1,s1,1
|
||
|
remw s1,a3,s1
|
||
|
j .L507
|
||
|
.L489:
|
||
|
li a4,998244352
|
||
|
addiw a4,a4,1
|
||
|
addw a5,s1,a5
|
||
|
remw a5,a5,a4
|
||
|
slliw a5,a5,1
|
||
|
remw s4,a5,a4
|
||
|
j .L483
|
||
|
.L567:
|
||
|
li a4,998244352
|
||
|
slliw a5,a0,1
|
||
|
addiw a4,a4,1
|
||
|
remw a5,a5,a4
|
||
|
j .L484
|
||
|
.L527:
|
||
|
li s1,1
|
||
|
j .L473
|
||
|
.L488:
|
||
|
li a4,998244352
|
||
|
addiw a4,a4,1
|
||
|
addw a5,s1,a1
|
||
|
remw a5,a5,a4
|
||
|
slliw a5,a5,1
|
||
|
remw a5,a5,a4
|
||
|
j .L484
|
||
|
.L568:
|
||
|
li a5,998244352
|
||
|
slliw a1,a0,1
|
||
|
addiw a5,a5,1
|
||
|
remw a1,a1,a5
|
||
|
j .L486
|
||
|
.L560:
|
||
|
bne s5,s2,.L472
|
||
|
j .L495
|
||
|
.L562:
|
||
|
li a5,2
|
||
|
remw a5,s0,a5
|
||
|
li s1,0
|
||
|
bne a5,a3,.L472
|
||
|
j .L500
|
||
|
.size power, .-power
|
||
|
.align 1
|
||
|
.globl memmove
|
||
|
.type memmove, @function
|
||
|
memmove:
|
||
|
mv a4,a0
|
||
|
mv a5,a1
|
||
|
ble a3,zero,.L577
|
||
|
addiw a1,a3,-1
|
||
|
li a0,8
|
||
|
sext.w t1,a3
|
||
|
slli a6,a5,2
|
||
|
bleu a1,a0,.L572
|
||
|
add a1,a4,a6
|
||
|
or a0,a2,a1
|
||
|
andi a0,a0,7
|
||
|
bne a0,zero,.L572
|
||
|
addi a0,a2,4
|
||
|
beq a1,a0,.L572
|
||
|
srliw a7,t1,1
|
||
|
slli a7,a7,3
|
||
|
mv a0,a2
|
||
|
add a7,a7,a2
|
||
|
.L573:
|
||
|
ld a6,0(a0)
|
||
|
addi a0,a0,8
|
||
|
addi a1,a1,8
|
||
|
sd a6,-8(a1)
|
||
|
bne a0,a7,.L573
|
||
|
andi a1,a3,-2
|
||
|
mv a0,a1
|
||
|
beq t1,a1,.L576
|
||
|
slli a1,a1,32
|
||
|
srli a1,a1,30
|
||
|
add a2,a2,a1
|
||
|
lw a2,0(a2)
|
||
|
addw a5,a5,a0
|
||
|
slli a5,a5,2
|
||
|
add a5,a4,a5
|
||
|
sw a2,0(a5)
|
||
|
.L576:
|
||
|
mv a0,a3
|
||
|
ret
|
||
|
.L572:
|
||
|
slli a1,a3,2
|
||
|
add a5,a4,a6
|
||
|
add a1,a2,a1
|
||
|
.L575:
|
||
|
lw a4,0(a2)
|
||
|
addi a2,a2,4
|
||
|
addi a5,a5,4
|
||
|
sw a4,-4(a5)
|
||
|
bne a1,a2,.L575
|
||
|
mv a0,a3
|
||
|
ret
|
||
|
.L577:
|
||
|
li a0,0
|
||
|
ret
|
||
|
.size memmove, .-memmove
|
||
|
.align 1
|
||
|
.globl fft
|
||
|
.type fft, @function
|
||
|
fft:
|
||
|
li a5,1
|
||
|
beq a2,a5,.L589
|
||
|
tail fft.part.0
|
||
|
.L589:
|
||
|
li a0,1
|
||
|
ret
|
||
|
.size fft, .-fft
|
||
|
.section .text.startup,"ax",@progbits
|
||
|
.align 1
|
||
|
.globl main
|
||
|
.type main, @function
|
||
|
main:
|
||
|
addi sp,sp,-144
|
||
|
lla a0,a
|
||
|
sd ra,136(sp)
|
||
|
sd s0,128(sp)
|
||
|
sd s2,112(sp)
|
||
|
sd s3,104(sp)
|
||
|
sd s1,120(sp)
|
||
|
sd s4,96(sp)
|
||
|
sd s5,88(sp)
|
||
|
sd s6,80(sp)
|
||
|
sd s7,72(sp)
|
||
|
sd s8,64(sp)
|
||
|
sd s9,56(sp)
|
||
|
sd s10,48(sp)
|
||
|
sd s11,40(sp)
|
||
|
call getarray@plt
|
||
|
mv s2,a0
|
||
|
lla a0,b
|
||
|
call getarray@plt
|
||
|
mv s0,a0
|
||
|
li a0,62
|
||
|
call _sysy_starttime@plt
|
||
|
addw s2,s2,s0
|
||
|
lla s3,.LANCHOR0
|
||
|
li a5,1
|
||
|
sw a5,0(s3)
|
||
|
addiw s2,s2,-1
|
||
|
li s0,1
|
||
|
ble s2,a5,.L782
|
||
|
.L591:
|
||
|
slliw s0,s0,1
|
||
|
blt s0,s2,.L591
|
||
|
li a1,998244352
|
||
|
divw a1,a1,s0
|
||
|
sw s0,0(s3)
|
||
|
li a3,1
|
||
|
beq a1,zero,.L593
|
||
|
li a0,3
|
||
|
call power.part.0
|
||
|
mv a3,a0
|
||
|
.L593:
|
||
|
mv a2,s0
|
||
|
li a1,0
|
||
|
lla a0,a
|
||
|
call fft.part.0
|
||
|
lw s0,0(s3)
|
||
|
li a1,998244352
|
||
|
li a3,1
|
||
|
divw a1,a1,s0
|
||
|
bne a1,zero,.L592
|
||
|
.L594:
|
||
|
li a5,1
|
||
|
beq s0,a5,.L595
|
||
|
mv a2,s0
|
||
|
li a1,0
|
||
|
lla a0,b
|
||
|
call fft.part.0
|
||
|
lw s10,0(s3)
|
||
|
ble s10,zero,.L596
|
||
|
.L670:
|
||
|
lla s11,a
|
||
|
slli s8,s10,2
|
||
|
li s9,998244352
|
||
|
mv s1,s11
|
||
|
lla s5,b
|
||
|
add s8,s8,s11
|
||
|
li s7,1
|
||
|
addiw s9,s9,1
|
||
|
.L606:
|
||
|
lw s0,0(s5)
|
||
|
lw s6,0(s1)
|
||
|
beq s0,zero,.L597
|
||
|
beq s0,s7,.L780
|
||
|
srliw s4,s0,31
|
||
|
addw s4,s4,s0
|
||
|
sraiw a5,s4,1
|
||
|
mv s4,a5
|
||
|
beq a5,zero,.L599
|
||
|
beq a5,s7,.L783
|
||
|
srliw a4,a5,31
|
||
|
addw a4,a4,a5
|
||
|
sraiw a5,a4,1
|
||
|
mv a4,a5
|
||
|
beq a5,zero,.L601
|
||
|
beq a5,s7,.L784
|
||
|
li a1,2
|
||
|
divw a1,a5,a1
|
||
|
beq a1,zero,.L603
|
||
|
beq a1,s7,.L785
|
||
|
mv a0,s6
|
||
|
sw a5,8(sp)
|
||
|
call multiply.part.0
|
||
|
lw a4,8(sp)
|
||
|
mv a1,a0
|
||
|
.L603:
|
||
|
li a5,2
|
||
|
remw a4,a4,a5
|
||
|
li a3,998244352
|
||
|
slliw a1,a1,1
|
||
|
addiw a3,a3,1
|
||
|
li a2,1
|
||
|
remw a5,a1,a3
|
||
|
beq a4,a2,.L786
|
||
|
.L601:
|
||
|
srliw a4,s4,31
|
||
|
addw s4,s4,a4
|
||
|
andi s4,s4,1
|
||
|
slliw a5,a5,1
|
||
|
subw s4,s4,a4
|
||
|
remw a5,a5,s9
|
||
|
bne s4,s7,.L779
|
||
|
addw a5,s6,a5
|
||
|
remw a5,a5,s9
|
||
|
.L779:
|
||
|
slliw a5,a5,1
|
||
|
remw a5,a5,s9
|
||
|
.L599:
|
||
|
srliw a3,s0,31
|
||
|
addw a4,a3,s0
|
||
|
andi a4,a4,1
|
||
|
subw a4,a4,a3
|
||
|
mv s0,a5
|
||
|
beq a4,s7,.L787
|
||
|
.L597:
|
||
|
sw s0,0(s1)
|
||
|
addi s1,s1,4
|
||
|
addi s5,s5,4
|
||
|
bne s1,s8,.L606
|
||
|
li a1,-998244352
|
||
|
li a5,998244352
|
||
|
li a3,1
|
||
|
divw a1,a1,s10
|
||
|
addw a1,a1,a5
|
||
|
beq a1,zero,.L609
|
||
|
li a0,3
|
||
|
call power.part.0
|
||
|
mv a3,a0
|
||
|
.L609:
|
||
|
li a5,1
|
||
|
beq s10,a5,.L610
|
||
|
.L608:
|
||
|
mv a2,s10
|
||
|
li a1,0
|
||
|
lla a0,a
|
||
|
call fft.part.0
|
||
|
lw s3,0(s3)
|
||
|
lla s11,a
|
||
|
ble s3,zero,.L662
|
||
|
.L611:
|
||
|
slli s6,s3,2
|
||
|
li s5,62390272
|
||
|
li s4,998244352
|
||
|
lla s8,a
|
||
|
add s6,s6,s11
|
||
|
addi s5,s5,-1
|
||
|
li s9,1
|
||
|
addiw s4,s4,1
|
||
|
sraiw s7,s3,1
|
||
|
.L661:
|
||
|
mv a1,s5
|
||
|
mv a0,s3
|
||
|
call power.part.0
|
||
|
mv s0,a0
|
||
|
lw s10,0(s8)
|
||
|
beq a0,zero,.L612
|
||
|
li a5,1
|
||
|
beq a0,a5,.L788
|
||
|
li a1,2
|
||
|
divw a1,a0,a1
|
||
|
beq a1,zero,.L616
|
||
|
beq a1,a5,.L789
|
||
|
call multiply.part.0
|
||
|
mv a1,a0
|
||
|
.L616:
|
||
|
li a4,2
|
||
|
remw a4,s0,a4
|
||
|
li a5,998244352
|
||
|
slliw a1,a1,1
|
||
|
addiw a5,a5,1
|
||
|
li a3,1
|
||
|
remw a2,a1,a5
|
||
|
beq a4,a3,.L790
|
||
|
mv s0,a2
|
||
|
.L618:
|
||
|
li a5,1
|
||
|
bne s3,a5,.L615
|
||
|
beq s0,zero,.L622
|
||
|
bne s0,s3,.L781
|
||
|
.L614:
|
||
|
remw s0,s10,s4
|
||
|
.L622:
|
||
|
sw s0,0(s8)
|
||
|
addi s8,s8,4
|
||
|
bne s8,s6,.L661
|
||
|
.L662:
|
||
|
li a0,81
|
||
|
call _sysy_stoptime@plt
|
||
|
mv a0,s2
|
||
|
lla a1,a
|
||
|
call putarray@plt
|
||
|
ld ra,136(sp)
|
||
|
ld s0,128(sp)
|
||
|
ld s1,120(sp)
|
||
|
ld s2,112(sp)
|
||
|
ld s3,104(sp)
|
||
|
ld s4,96(sp)
|
||
|
ld s5,88(sp)
|
||
|
ld s6,80(sp)
|
||
|
ld s7,72(sp)
|
||
|
ld s8,64(sp)
|
||
|
ld s9,56(sp)
|
||
|
ld s10,48(sp)
|
||
|
ld s11,40(sp)
|
||
|
li a0,0
|
||
|
addi sp,sp,144
|
||
|
jr ra
|
||
|
.L787:
|
||
|
addw s6,s6,a5
|
||
|
.L780:
|
||
|
remw s0,s6,s9
|
||
|
j .L597
|
||
|
.L612:
|
||
|
beq s3,s9,.L622
|
||
|
.L615:
|
||
|
mv a0,s0
|
||
|
mv a1,s3
|
||
|
call multiply.part.0
|
||
|
mv s0,a0
|
||
|
beq a0,zero,.L620
|
||
|
li a5,1
|
||
|
beq a0,a5,.L620
|
||
|
.L781:
|
||
|
srliw s1,s0,31
|
||
|
addw s1,s1,s0
|
||
|
sraiw a4,s1,1
|
||
|
mv s11,s0
|
||
|
mv s1,a4
|
||
|
li a5,0
|
||
|
beq a4,zero,.L623
|
||
|
li a5,1
|
||
|
beq a4,a5,.L679
|
||
|
li a1,2
|
||
|
divw a1,a4,a1
|
||
|
beq a1,zero,.L624
|
||
|
beq a1,a5,.L680
|
||
|
mv a0,s0
|
||
|
call multiply.part.0
|
||
|
mv a1,a0
|
||
|
.L624:
|
||
|
li a5,2
|
||
|
remw s1,s1,a5
|
||
|
li a4,998244352
|
||
|
slliw a1,a1,1
|
||
|
addiw a4,a4,1
|
||
|
li a3,1
|
||
|
remw a5,a1,a4
|
||
|
bne s1,a3,.L623
|
||
|
addw a1,a5,s0
|
||
|
remw a5,a1,a4
|
||
|
.L623:
|
||
|
srliw a2,s11,31
|
||
|
addw a4,a2,s11
|
||
|
li a3,998244352
|
||
|
andi a4,a4,1
|
||
|
slliw a5,a5,1
|
||
|
addiw a3,a3,1
|
||
|
subw a4,a4,a2
|
||
|
li a2,1
|
||
|
remw s0,a5,a3
|
||
|
bne a4,a2,.L625
|
||
|
addw a5,s0,s11
|
||
|
remw s0,a5,a3
|
||
|
.L625:
|
||
|
li a5,1
|
||
|
bne s3,a5,.L620
|
||
|
beq s0,zero,.L622
|
||
|
beq s0,s3,.L614
|
||
|
mv s1,s0
|
||
|
j .L629
|
||
|
.L783:
|
||
|
li a4,998244352
|
||
|
addiw a4,a4,1
|
||
|
remw a5,s6,a4
|
||
|
slliw a5,a5,1
|
||
|
remw a5,a5,a4
|
||
|
j .L599
|
||
|
.L786:
|
||
|
addw a1,s6,a5
|
||
|
remw a5,a1,a3
|
||
|
j .L601
|
||
|
.L620:
|
||
|
mv a1,s3
|
||
|
mv a0,s0
|
||
|
call multiply.part.0
|
||
|
mv s1,a0
|
||
|
beq a0,zero,.L627
|
||
|
li a5,1
|
||
|
beq a0,a5,.L791
|
||
|
.L629:
|
||
|
srliw s0,s1,31
|
||
|
addw s0,s0,s1
|
||
|
sraiw a4,s0,1
|
||
|
mv s0,a4
|
||
|
li a5,0
|
||
|
beq a4,zero,.L630
|
||
|
mv a5,s1
|
||
|
beq a4,s9,.L630
|
||
|
srliw a1,a4,31
|
||
|
addw a1,a1,a4
|
||
|
sraiw a1,a1,1
|
||
|
beq a1,zero,.L631
|
||
|
beq a1,s9,.L683
|
||
|
mv a0,s1
|
||
|
call multiply.part.0
|
||
|
mv a1,a0
|
||
|
.L631:
|
||
|
li a4,998244352
|
||
|
slliw a1,a1,1
|
||
|
addiw a4,a4,1
|
||
|
remw a1,a1,a4
|
||
|
srliw a5,s0,31
|
||
|
addw s0,s0,a5
|
||
|
andi s0,s0,1
|
||
|
subw s0,s0,a5
|
||
|
li a3,1
|
||
|
sext.w a5,a1
|
||
|
bne s0,a3,.L630
|
||
|
addw a1,s1,a1
|
||
|
remw a5,a1,a4
|
||
|
.L630:
|
||
|
srliw a3,s1,31
|
||
|
addw a4,a3,s1
|
||
|
andi a4,a4,1
|
||
|
slliw a5,a5,1
|
||
|
subw a4,a4,a3
|
||
|
remw s0,a5,s4
|
||
|
bne a4,s9,.L632
|
||
|
addw a5,s1,s0
|
||
|
remw s0,a5,s4
|
||
|
.L632:
|
||
|
li a5,1
|
||
|
beq s3,a5,.L633
|
||
|
mv s1,s0
|
||
|
.L627:
|
||
|
andi a2,s3,1
|
||
|
srai a5,s3,1
|
||
|
sraiw a4,s3,1
|
||
|
mv s11,a2
|
||
|
beq a5,zero,.L792
|
||
|
li a3,1
|
||
|
beq a5,a3,.L793
|
||
|
mv a1,a5
|
||
|
mv a0,s1
|
||
|
sd a2,24(sp)
|
||
|
sw a4,16(sp)
|
||
|
sd a5,8(sp)
|
||
|
call multiply.part.0
|
||
|
li a3,998244352
|
||
|
slliw s0,a0,1
|
||
|
addiw a3,a3,1
|
||
|
ld a5,8(sp)
|
||
|
lw a4,16(sp)
|
||
|
ld a2,24(sp)
|
||
|
remw s0,s0,a3
|
||
|
bne s11,zero,.L637
|
||
|
beq s0,zero,.L639
|
||
|
.L638:
|
||
|
li a3,1
|
||
|
beq s0,a3,.L794
|
||
|
li a5,2
|
||
|
divw s11,s0,a5
|
||
|
beq s11,zero,.L795
|
||
|
.L641:
|
||
|
beq s11,s9,.L796
|
||
|
srliw s1,s11,31
|
||
|
addw s1,s1,s11
|
||
|
sraiw a5,s1,1
|
||
|
mv s1,a5
|
||
|
li a4,0
|
||
|
beq a5,zero,.L646
|
||
|
mv a4,s0
|
||
|
beq a5,s9,.L646
|
||
|
li a1,2
|
||
|
divw a1,a5,a1
|
||
|
beq a1,zero,.L647
|
||
|
beq a1,s9,.L688
|
||
|
mv a0,s0
|
||
|
call multiply.part.0
|
||
|
mv a1,a0
|
||
|
.L647:
|
||
|
li a5,2
|
||
|
remw s1,s1,a5
|
||
|
li a5,998244352
|
||
|
slliw a1,a1,1
|
||
|
addiw a5,a5,1
|
||
|
li a3,1
|
||
|
remw a4,a1,a5
|
||
|
bne s1,a3,.L646
|
||
|
addw a1,s0,a4
|
||
|
remw a4,a1,a5
|
||
|
.L646:
|
||
|
srliw a3,s11,31
|
||
|
addw a5,a3,s11
|
||
|
andi a5,a5,1
|
||
|
slliw a4,a4,1
|
||
|
subw a5,a5,a3
|
||
|
remw a4,a4,s4
|
||
|
beq a5,s9,.L648
|
||
|
slliw a4,a4,1
|
||
|
remw s11,a4,s4
|
||
|
.L645:
|
||
|
srliw a4,s0,31
|
||
|
addw a5,a4,s0
|
||
|
andi a5,a5,1
|
||
|
subw a5,a5,a4
|
||
|
beq a5,s9,.L642
|
||
|
.L649:
|
||
|
beq s3,s9,.L650
|
||
|
mv a4,s7
|
||
|
.L643:
|
||
|
sext.w s0,a4
|
||
|
beq s0,zero,.L622
|
||
|
mv a5,s0
|
||
|
andi a2,s3,1
|
||
|
.L663:
|
||
|
li a4,1
|
||
|
mv s0,s11
|
||
|
beq a5,a4,.L651
|
||
|
.L639:
|
||
|
srai a1,a5,1
|
||
|
li a4,1
|
||
|
beq a1,a4,.L690
|
||
|
mv a0,s0
|
||
|
sd a2,16(sp)
|
||
|
sd a5,8(sp)
|
||
|
call multiply.part.0
|
||
|
ld a5,8(sp)
|
||
|
ld a2,16(sp)
|
||
|
mv a4,a0
|
||
|
.L652:
|
||
|
li a3,998244352
|
||
|
slliw a4,a4,1
|
||
|
addiw a3,a3,1
|
||
|
andi a5,a5,1
|
||
|
remw s11,a4,a3
|
||
|
beq a5,zero,.L651
|
||
|
addw a4,s0,s11
|
||
|
remw s11,a4,a3
|
||
|
.L651:
|
||
|
li a4,998244352
|
||
|
slliw a5,s11,1
|
||
|
addiw a4,a4,1
|
||
|
remw s11,a5,a4
|
||
|
bne a2,zero,.L797
|
||
|
.L650:
|
||
|
beq s11,zero,.L694
|
||
|
beq s11,s9,.L614
|
||
|
srliw s1,s11,31
|
||
|
addw s1,s1,s11
|
||
|
sraiw s0,s1,1
|
||
|
mv s1,s0
|
||
|
beq s0,zero,.L654
|
||
|
beq s0,s9,.L798
|
||
|
srliw s0,s0,31
|
||
|
addw s0,s0,s1
|
||
|
sraiw a4,s0,1
|
||
|
mv s0,a4
|
||
|
beq a4,zero,.L656
|
||
|
beq a4,s9,.L799
|
||
|
li a1,2
|
||
|
divw a1,a4,a1
|
||
|
beq a1,zero,.L658
|
||
|
beq a1,s9,.L800
|
||
|
mv a0,s10
|
||
|
call multiply.part.0
|
||
|
mv a1,a0
|
||
|
.L658:
|
||
|
li a5,2
|
||
|
remw s0,s0,a5
|
||
|
li a5,998244352
|
||
|
slliw a1,a1,1
|
||
|
addiw a5,a5,1
|
||
|
li a3,1
|
||
|
remw a4,a1,a5
|
||
|
bne s0,a3,.L656
|
||
|
addw a1,s10,a4
|
||
|
remw a4,a1,a5
|
||
|
.L656:
|
||
|
srliw a5,s1,31
|
||
|
addw s1,s1,a5
|
||
|
andi s1,s1,1
|
||
|
slliw a4,a4,1
|
||
|
subw s1,s1,a5
|
||
|
remw a4,a4,s4
|
||
|
beq s1,s9,.L660
|
||
|
slliw a4,a4,1
|
||
|
remw s0,a4,s4
|
||
|
.L654:
|
||
|
srliw a4,s11,31
|
||
|
addw a5,a4,s11
|
||
|
andi a5,a5,1
|
||
|
subw a5,a5,a4
|
||
|
bne a5,s9,.L622
|
||
|
addw s0,s10,s0
|
||
|
addi s8,s8,4
|
||
|
remw s0,s0,s4
|
||
|
sw s0,-4(s8)
|
||
|
bne s8,s6,.L661
|
||
|
j .L662
|
||
|
.L782:
|
||
|
li a1,998244352
|
||
|
li a0,3
|
||
|
call power.part.0
|
||
|
li a1,998244352
|
||
|
.L592:
|
||
|
li a0,3
|
||
|
call power.part.0
|
||
|
mv a3,a0
|
||
|
j .L594
|
||
|
.L784:
|
||
|
li a5,998244352
|
||
|
addiw a5,a5,1
|
||
|
remw a5,s6,a5
|
||
|
j .L601
|
||
|
.L610:
|
||
|
lw s3,0(s3)
|
||
|
j .L611
|
||
|
.L595:
|
||
|
lw s10,0(s3)
|
||
|
j .L670
|
||
|
.L795:
|
||
|
remw a5,s0,a5
|
||
|
bne a5,a3,.L643
|
||
|
.L642:
|
||
|
addw s0,s0,s11
|
||
|
remw s11,s0,s4
|
||
|
j .L649
|
||
|
.L797:
|
||
|
addw a5,s0,s11
|
||
|
remw s11,a5,a4
|
||
|
j .L650
|
||
|
.L789:
|
||
|
li a1,998244352
|
||
|
addiw a1,a1,1
|
||
|
remw a1,a0,a1
|
||
|
j .L616
|
||
|
.L637:
|
||
|
li a1,998244352
|
||
|
addw a3,s0,s1
|
||
|
addiw a1,a1,1
|
||
|
remw s0,a3,a1
|
||
|
mv a3,s0
|
||
|
beq s0,zero,.L801
|
||
|
li s11,1
|
||
|
li a1,1
|
||
|
beq s0,s11,.L663
|
||
|
li a5,2
|
||
|
divw s11,a3,a5
|
||
|
bne s11,zero,.L641
|
||
|
remw a3,a3,a5
|
||
|
bne a3,a1,.L643
|
||
|
j .L642
|
||
|
.L796:
|
||
|
li a4,998244352
|
||
|
slliw a5,s0,1
|
||
|
addiw a4,a4,1
|
||
|
remw s11,a5,a4
|
||
|
j .L645
|
||
|
.L798:
|
||
|
li a5,998244352
|
||
|
addiw a5,a5,1
|
||
|
remw s0,s10,a5
|
||
|
slliw s0,s0,1
|
||
|
remw s0,s0,a5
|
||
|
j .L654
|
||
|
.L648:
|
||
|
addw a5,s0,a4
|
||
|
remw a5,a5,s4
|
||
|
slliw a5,a5,1
|
||
|
remw s11,a5,s4
|
||
|
j .L645
|
||
|
.L660:
|
||
|
addw s0,s10,a4
|
||
|
remw s0,s0,s4
|
||
|
slliw s0,s0,1
|
||
|
remw s0,s0,s4
|
||
|
j .L654
|
||
|
.L799:
|
||
|
li a4,998244352
|
||
|
addiw a4,a4,1
|
||
|
remw a4,s10,a4
|
||
|
j .L656
|
||
|
.L633:
|
||
|
beq s0,zero,.L622
|
||
|
beq s0,s3,.L614
|
||
|
li a5,2
|
||
|
divw s11,s0,a5
|
||
|
bne s11,zero,.L641
|
||
|
remw a5,s0,a5
|
||
|
beq a5,s3,.L642
|
||
|
.L694:
|
||
|
li s0,0
|
||
|
j .L622
|
||
|
.L792:
|
||
|
beq a2,zero,.L694
|
||
|
beq s1,zero,.L694
|
||
|
li a5,1
|
||
|
beq s1,a5,.L614
|
||
|
li a4,2
|
||
|
divw s0,s1,a4
|
||
|
beq s0,zero,.L802
|
||
|
mv s11,s0
|
||
|
mv s0,s1
|
||
|
j .L641
|
||
|
.L679:
|
||
|
mv a5,s0
|
||
|
j .L623
|
||
|
.L690:
|
||
|
mv a4,s0
|
||
|
j .L652
|
||
|
.L683:
|
||
|
mv a1,s1
|
||
|
j .L631
|
||
|
.L688:
|
||
|
mv a1,s0
|
||
|
j .L647
|
||
|
.L785:
|
||
|
li a1,998244352
|
||
|
addiw a1,a1,1
|
||
|
remw a1,s6,a1
|
||
|
j .L603
|
||
|
.L800:
|
||
|
li a1,998244352
|
||
|
addiw a1,a1,1
|
||
|
remw a1,s10,a1
|
||
|
j .L658
|
||
|
.L790:
|
||
|
addw a1,s0,a2
|
||
|
remw s0,a1,a5
|
||
|
j .L618
|
||
|
.L793:
|
||
|
li a3,998244352
|
||
|
slliw s0,s1,1
|
||
|
addiw a3,a3,1
|
||
|
remw s0,s0,a3
|
||
|
bne a2,zero,.L637
|
||
|
bne s0,zero,.L638
|
||
|
j .L622
|
||
|
.L596:
|
||
|
li a5,-998244352
|
||
|
divw a5,a5,s10
|
||
|
li a1,998244352
|
||
|
li a0,3
|
||
|
addw a1,a5,a1
|
||
|
call power.part.0
|
||
|
mv a3,a0
|
||
|
j .L608
|
||
|
.L680:
|
||
|
mv a1,s0
|
||
|
j .L624
|
||
|
.L794:
|
||
|
li s11,1
|
||
|
j .L663
|
||
|
.L791:
|
||
|
bne s3,a0,.L627
|
||
|
remw s0,s10,s4
|
||
|
j .L622
|
||
|
.L788:
|
||
|
bne s3,a0,.L615
|
||
|
remw s0,s10,s4
|
||
|
j .L622
|
||
|
.L801:
|
||
|
li a4,1
|
||
|
bne a5,a4,.L639
|
||
|
j .L622
|
||
|
.L802:
|
||
|
remw a4,s1,a4
|
||
|
bne a4,a5,.L622
|
||
|
li s11,0
|
||
|
mv s0,s1
|
||
|
j .L642
|
||
|
.size main, .-main
|
||
|
.globl c
|
||
|
.globl b
|
||
|
.globl a
|
||
|
.globl temp
|
||
|
.globl d
|
||
|
.globl _sysy_idx
|
||
|
.globl _sysy_us
|
||
|
.globl _sysy_s
|
||
|
.globl _sysy_m
|
||
|
.globl _sysy_h
|
||
|
.globl _sysy_l2
|
||
|
.globl _sysy_l1
|
||
|
.globl _sysy_end
|
||
|
.globl _sysy_start
|
||
|
.bss
|
||
|
.align 3
|
||
|
.set .LANCHOR0,. + 0
|
||
|
.type d, @object
|
||
|
.size d, 4
|
||
|
d:
|
||
|
.zero 4
|
||
|
.zero 4
|
||
|
.type c, @object
|
||
|
.size c, 8388608
|
||
|
c:
|
||
|
.zero 8388608
|
||
|
.type b, @object
|
||
|
.size b, 8388608
|
||
|
b:
|
||
|
.zero 8388608
|
||
|
.type a, @object
|
||
|
.size a, 8388608
|
||
|
a:
|
||
|
.zero 8388608
|
||
|
.type temp, @object
|
||
|
.size temp, 8388608
|
||
|
temp:
|
||
|
.zero 8388608
|
||
|
.type _sysy_idx, @object
|
||
|
.size _sysy_idx, 4
|
||
|
_sysy_idx:
|
||
|
.zero 4
|
||
|
.zero 4
|
||
|
.type _sysy_us, @object
|
||
|
.size _sysy_us, 4096
|
||
|
_sysy_us:
|
||
|
.zero 4096
|
||
|
.type _sysy_s, @object
|
||
|
.size _sysy_s, 4096
|
||
|
_sysy_s:
|
||
|
.zero 4096
|
||
|
.type _sysy_m, @object
|
||
|
.size _sysy_m, 4096
|
||
|
_sysy_m:
|
||
|
.zero 4096
|
||
|
.type _sysy_h, @object
|
||
|
.size _sysy_h, 4096
|
||
|
_sysy_h:
|
||
|
.zero 4096
|
||
|
.type _sysy_l2, @object
|
||
|
.size _sysy_l2, 4096
|
||
|
_sysy_l2:
|
||
|
.zero 4096
|
||
|
.type _sysy_l1, @object
|
||
|
.size _sysy_l1, 4096
|
||
|
_sysy_l1:
|
||
|
.zero 4096
|
||
|
.type _sysy_end, @object
|
||
|
.size _sysy_end, 16
|
||
|
_sysy_end:
|
||
|
.zero 16
|
||
|
.type _sysy_start, @object
|
||
|
.size _sysy_start, 16
|
||
|
_sysy_start:
|
||
|
.zero 16
|
||
|
.ident "GCC: (Debian 12.2.0-13) 12.2.0"
|
||
|
.section .note.GNU-stack,"",@progbits
|