sysy-data/performance_c/asm/fft2.s

3103 lines
41 KiB
ArmAsm
Raw Normal View History

2024-06-14 13:10:27 +08:00
.file "fft2.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