sysy-data/functional_c/asm/75_max_flow.s

420 lines
6.0 KiB
ArmAsm
Raw Normal View History

2024-06-14 13:10:27 +08:00
.file "75_max_flow.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 dfs.part.0, @function
dfs.part.0:
addi sp,sp,-96
sd s4,48(sp)
sd s5,40(sp)
lla s4,.LANCHOR0
slli s5,a0,2
sd s9,8(sp)
add s9,s4,s5
lw a3,0(s9)
sd ra,88(sp)
sd s0,80(sp)
sd s1,72(sp)
sd s2,64(sp)
sd s3,56(sp)
sd s6,32(sp)
sd s7,24(sp)
sd s8,16(sp)
sd s10,0(sp)
ble a3,zero,.L11
add a5,s5,a0
slli a5,a5,3
lla s0,.LANCHOR0+40
lla s2,.LANCHOR0+440
mv s8,a0
mv s6,a1
mv s7,a2
add s0,s0,a5
add s2,s2,a5
li s1,1
li s3,1
mv s10,a2
.L10:
lw a0,0(s0)
slli a5,a0,2
add a4,s4,a5
lw a4,840(a4)
bne a4,zero,.L14
lw a4,0(s2)
ble a4,zero,.L14
sext.w a2,a4
ble a4,s7,.L7
sext.w a2,s10
.L7:
beq a0,s6,.L8
add a5,s4,a5
mv a1,s6
sw s3,840(a5)
call dfs.part.0
mv a2,a0
.L8:
bgt a2,zero,.L16
lw a3,0(s9)
.L14:
sext.w a5,s1
addi s0,s0,4
addiw s1,s1,1
addi s2,s2,4
blt a5,a3,.L10
.L11:
li a2,0
.L3:
ld ra,88(sp)
ld s0,80(sp)
ld s1,72(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,a2
addi sp,sp,96
jr ra
.L16:
add a4,s5,s8
addiw s1,s1,-1
slli a4,a4,1
add a4,a4,s1
slli a4,a4,2
add a4,s4,a4
lw a1,40(a4)
lw a0,880(a4)
lw a3,440(a4)
slli a5,a1,2
add a5,a5,a1
slli a5,a5,1
add a5,a5,a0
subw a3,a3,a2
slli a5,a5,2
sw a3,440(a4)
add a5,s4,a5
lw a4,440(a5)
addw a4,a4,a2
sw a4,440(a5)
j .L3
.size dfs.part.0, .-dfs.part.0
.align 1
.globl my_memset
.type my_memset, @function
my_memset:
ble a2,zero,.L17
srli a5,a0,2
addiw a3,a2,-1
li a6,5
sext.w a4,a2
andi a5,a5,1
bleu a3,a6,.L23
li t1,0
beq a5,zero,.L20
sw a1,0(a0)
li t1,1
.L20:
subw a4,a4,a5
srliw a3,a4,1
slli a5,a5,2
slli a6,a1,32
slli a7,a1,32
srli a6,a6,32
add a5,a0,a5
slli a3,a3,3
or a6,a6,a7
add a3,a3,a5
.L21:
sd a6,0(a5)
addi a5,a5,8
bne a3,a5,.L21
andi a5,a4,1
beq a5,zero,.L17
andi a5,a4,-2
addw a5,a5,t1
.L19:
slli a4,a5,2
add a0,a0,a4
sw a1,0(a0)
addiw a4,a5,1
bge a4,a2,.L17
sw a1,4(a0)
addiw a4,a5,2
bge a4,a2,.L17
sw a1,8(a0)
addiw a4,a5,3
bge a4,a2,.L17
sw a1,12(a0)
addiw a4,a5,4
bge a4,a2,.L17
sw a1,16(a0)
addiw a5,a5,5
bge a5,a2,.L17
sw a1,20(a0)
.L17:
ret
.L23:
li a5,0
j .L19
.size my_memset, .-my_memset
.align 1
.globl add_node
.type add_node, @function
add_node:
lla a3,.LANCHOR0
slli a5,a0,2
add a7,a3,a5
lw t1,0(a7)
slli a4,a1,2
add a6,a3,a4
lw t3,0(a6)
add a5,a5,a0
addiw t4,t1,1
sw t4,0(a7)
slli a5,a5,1
add a4,a4,a1
lw a7,0(a6)
add a5,a5,t1
slli a4,a4,1
slli a5,a5,2
add a4,a4,t3
add a5,a3,a5
slli a4,a4,2
add a3,a3,a4
sw a1,40(a5)
sw a2,440(a5)
sw t3,880(a5)
addiw a7,a7,1
sw a0,40(a3)
sw zero,440(a3)
sw t1,880(a3)
sw a7,0(a6)
ret
.size add_node, .-add_node
.align 1
.globl dfs
.type dfs, @function
dfs:
beq a0,a1,.L32
lla a4,.LANCHOR0
slli a5,a0,2
add a5,a4,a5
li a4,1
sw a4,840(a5)
tail dfs.part.0
.L32:
mv a0,a2
ret
.size dfs, .-dfs
.align 1
.globl max_flow
.type max_flow, @function
max_flow:
beq a0,a1,.L34
addi sp,sp,-48
sd s3,8(sp)
slli a5,a0,2
lla s3,.LANCHOR0
sd s0,32(sp)
sd s1,24(sp)
sd s2,16(sp)
sd s4,0(sp)
sd ra,40(sp)
mv s1,a0
mv s2,a1
li s0,0
add s3,s3,a5
li s4,1
j .L36
.L42:
addw s0,a0,s0
.L36:
sd zero,.LANCHOR0+840,a5
sd zero,.LANCHOR0+848,a5
sd zero,.LANCHOR0+856,a5
sd zero,.LANCHOR0+864,a5
sd zero,.LANCHOR0+872,a5
li a2,1879048192
mv a1,s2
mv a0,s1
sw s4,840(s3)
call dfs.part.0
bne a0,zero,.L42
ld ra,40(sp)
mv a0,s0
ld s0,32(sp)
ld s1,24(sp)
ld s2,16(sp)
ld s3,8(sp)
ld s4,0(sp)
addi sp,sp,48
jr ra
.L34:
j .L34
.size max_flow, .-max_flow
.section .text.startup,"ax",@progbits
.align 1
.globl main
.type main, @function
main:
addi sp,sp,-48
sd ra,40(sp)
sd s0,32(sp)
sd s1,24(sp)
sd s2,16(sp)
sd s3,8(sp)
sd s4,0(sp)
call getint@plt
mv s0,a0
call getint@plt
sd zero,.LANCHOR0,a5
sd zero,.LANCHOR0+8,a5
sd zero,.LANCHOR0+16,a5
sd zero,.LANCHOR0+24,a5
sd zero,.LANCHOR0+32,a5
ble a0,zero,.L44
mv s4,a0
lla s3,.LANCHOR0
.L45:
call getint@plt
mv s1,a0
call getint@plt
mv s2,a0
call getint@plt
slli a4,s1,2
add a2,s3,a4
lw a1,0(a2)
slli a5,s2,2
add a3,s3,a5
lw a6,0(a3)
add a4,a4,s1
addiw a7,a1,1
sw a7,0(a2)
slli a4,a4,1
add a5,a5,s2
lw a2,0(a3)
add a4,a4,a1
slli a5,a5,1
slli a4,a4,2
add a5,a5,a6
add a4,s3,a4
slli a5,a5,2
add a5,s3,a5
sw s2,40(a4)
sw a0,440(a4)
sw a6,880(a4)
addiw a2,a2,1
sw s1,40(a5)
sw zero,440(a5)
sw a1,880(a5)
sw a2,0(a3)
addiw s4,s4,-1
bne s4,zero,.L45
.L44:
mv a1,s0
li a0,1
call max_flow
call putint@plt
li a0,10
call putch@plt
ld ra,40(sp)
ld s0,32(sp)
ld s1,24(sp)
ld s2,16(sp)
ld s3,8(sp)
ld s4,0(sp)
li a0,0
addi sp,sp,48
jr ra
.size main, .-main
.globl used
.globl rev
.globl cap
.globl to
.globl size
.globl INF
.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
.section .rodata
.align 2
.type INF, @object
.size INF, 4
INF:
.word 1879048192
.bss
.align 3
.set .LANCHOR0,. + 0
.type size, @object
.size size, 40
size:
.zero 40
.type to, @object
.size to, 400
to:
.zero 400
.type cap, @object
.size cap, 400
cap:
.zero 400
.type used, @object
.size used, 40
used:
.zero 40
.type rev, @object
.size rev, 400
rev:
.zero 400
.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