420 lines
6.0 KiB
ArmAsm
420 lines
6.0 KiB
ArmAsm
.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
|