You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

592 lines
9.8 KiB

.data
.globl maxn
.p2align 2
maxn:
.word 18
.globl mod
.p2align 2
mod:
.word 1000000007
.bss
.globl dp
.p2align 2
dp:
.space 52907904
.data
.bss
.globl list
.p2align 2
list:
.space 800
.data
.bss
.globl cns
.p2align 2
cns:
.space 80
.data
.text
.globl equal
.p2align 2
equal:
.L.equal.0:
stp x29, x30, [sp, #-16]!
mov x29, sp
mov w8, w0
mov w9, w1
cmp w8, w9
b.eq .L.equal.1
b .L.equal.2
.L.equal.1:
mov w8, #1
mov w0, w8
ldp x29, x30, [sp], #16
ret
.L.equal.2:
mov w8, #0
mov w0, w8
ldp x29, x30, [sp], #16
ret
.text
.globl dfs
.p2align 2
dfs:
.L.dfs.0:
stp x29, x30, [sp, #-16]!
mov x29, sp
sub sp, sp, #96
str x25, [sp, #0]
str x27, [sp, #8]
str x26, [sp, #16]
str x24, [sp, #24]
str x22, [sp, #32]
str x20, [sp, #40]
str x23, [sp, #48]
str x21, [sp, #56]
str x19, [sp, #64]
mov w24, w0
mov w23, w1
mov w22, w2
mov w20, w3
mov w21, w4
mov w19, w5
movz w8, #13936
movk w8, #11, lsl #16
mul w8, w24, w8
mov w9, #40824
mul w9, w23, w9
add w8, w8, w9
mov w9, #2268
mul w9, w22, w9
add w8, w8, w9
mov w9, #126
mul w9, w20, w9
add w8, w8, w9
mov w9, #7
mul w9, w21, w9
add w8, w8, w9
add w8, w8, w19
adrp x9, dp
add x9, x9, :lo12:dp
sxtw x8, w8
lsl x8, x8, #2
add x8, x9, x8
ldr w9, [x8]
mov w8, #-1
cmp w9, w8
b.ne .L.dfs.1
b .L.dfs.2
.L.dfs.1:
movz w8, #13936
movk w8, #11, lsl #16
mul w8, w24, w8
mov w9, #40824
mul w9, w23, w9
add w8, w8, w9
mov w9, #2268
mul w9, w22, w9
add w8, w8, w9
mov w9, #126
mul w9, w20, w9
add w8, w8, w9
mov w9, #7
mul w9, w21, w9
add w8, w8, w9
add w8, w8, w19
adrp x9, dp
add x9, x9, :lo12:dp
sxtw x8, w8
lsl x8, x8, #2
add x8, x9, x8
ldr w8, [x8]
mov w0, w8
ldr x25, [sp, #0]
ldr x27, [sp, #8]
ldr x26, [sp, #16]
ldr x24, [sp, #24]
ldr x22, [sp, #32]
ldr x20, [sp, #40]
ldr x23, [sp, #48]
ldr x21, [sp, #56]
ldr x19, [sp, #64]
add sp, sp, #96
ldp x29, x30, [sp], #16
ret
.L.dfs.2:
add w8, w24, w23
add w8, w8, w22
add w8, w8, w20
add w8, w8, w21
mov w9, #0
cmp w8, w9
b.eq .L.dfs.3
b .L.dfs.4
.L.dfs.3:
mov w8, #1
mov w0, w8
ldr x25, [sp, #0]
ldr x27, [sp, #8]
ldr x26, [sp, #16]
ldr x24, [sp, #24]
ldr x22, [sp, #32]
ldr x20, [sp, #40]
ldr x23, [sp, #48]
ldr x21, [sp, #56]
ldr x19, [sp, #64]
add sp, sp, #96
ldp x29, x30, [sp], #16
ret
.L.dfs.4:
mov w8, #0
cmp w24, w8
b.ne .L.dfs.5
mov w8, #0
mov w25, w8
b .L.dfs.10
.L.dfs.5:
b .L.dfs.6
.L.dfs.6:
mov w8, #2
cmp w19, w8
b.eq .L.dfs.7
b .L.dfs.8
.L.dfs.7:
mov w8, #1
b .L.dfs.9
.L.dfs.8:
mov w8, #0
b .L.dfs.9
.L.dfs.9:
sub w25, w24, w8
mov w8, #1
sub w9, w24, w8
mov w0, w9
mov w1, w23
mov w2, w22
mov w3, w20
mov w4, w21
mov w5, w8
bl dfs
mov w8, w0
mul w8, w25, w8
mov w9, #0
add w8, w9, w8
movz w9, #51719
movk w9, #15258, lsl #16
sdiv w14, w8, w9
msub w8, w14, w9, w8
mov w25, w8
b .L.dfs.10
.L.dfs.10:
mov w8, #0
cmp w23, w8
b.ne .L.dfs.11
mov w27, w25
b .L.dfs.16
.L.dfs.11:
b .L.dfs.12
.L.dfs.12:
mov w8, #3
cmp w19, w8
b.eq .L.dfs.13
b .L.dfs.14
.L.dfs.13:
mov w8, #1
b .L.dfs.15
.L.dfs.14:
mov w8, #0
b .L.dfs.15
.L.dfs.15:
sub w26, w23, w8
mov w8, #1
add w9, w24, w8
sub w8, w23, w8
mov w0, w9
mov w1, w8
mov w2, w22
mov w3, w20
mov w4, w21
mov w8, #2
mov w5, w8
bl dfs
mov w8, w0
mul w8, w26, w8
add w8, w25, w8
movz w9, #51719
movk w9, #15258, lsl #16
sdiv w14, w8, w9
msub w8, w14, w9, w8
mov w27, w8
b .L.dfs.16
.L.dfs.16:
mov w8, #0
cmp w22, w8
b.ne .L.dfs.17
mov w26, w27
b .L.dfs.22
.L.dfs.17:
b .L.dfs.18
.L.dfs.18:
mov w8, #4
cmp w19, w8
b.eq .L.dfs.19
b .L.dfs.20
.L.dfs.19:
mov w8, #1
b .L.dfs.21
.L.dfs.20:
mov w8, #0
b .L.dfs.21
.L.dfs.21:
sub w25, w22, w8
mov w8, #1
add w9, w23, w8
sub w8, w22, w8
mov w0, w24
mov w1, w9
mov w2, w8
mov w3, w20
mov w4, w21
mov w8, #3
mov w5, w8
bl dfs
mov w8, w0
mul w8, w25, w8
add w9, w27, w8
movz w8, #51719
movk w8, #15258, lsl #16
sdiv w14, w9, w8
msub w8, w14, w8, w9
mov w26, w8
b .L.dfs.22
.L.dfs.22:
mov w8, #0
cmp w20, w8
b.ne .L.dfs.23
mov w25, w26
b .L.dfs.28
.L.dfs.23:
b .L.dfs.24
.L.dfs.24:
mov w8, #5
cmp w19, w8
b.eq .L.dfs.25
b .L.dfs.26
.L.dfs.25:
mov w8, #1
b .L.dfs.27
.L.dfs.26:
mov w8, #0
b .L.dfs.27
.L.dfs.27:
sub w25, w20, w8
mov w8, #1
add w9, w22, w8
sub w8, w20, w8
mov w0, w24
mov w1, w23
mov w2, w9
mov w3, w8
mov w4, w21
mov w8, #4
mov w5, w8
bl dfs
mov w8, w0
mul w8, w25, w8
add w9, w26, w8
movz w8, #51719
movk w8, #15258, lsl #16
sdiv w14, w9, w8
msub w8, w14, w8, w9
mov w25, w8
b .L.dfs.28
.L.dfs.28:
mov w8, #0
cmp w21, w8
b.ne .L.dfs.29
mov w10, w25
b .L.dfs.30
.L.dfs.29:
mov w8, #1
add w9, w20, w8
sub w8, w21, w8
mov w0, w24
mov w1, w23
mov w2, w22
mov w3, w9
mov w4, w8
mov w8, #5
mov w5, w8
bl dfs
mov w8, w0
mul w8, w21, w8
add w9, w25, w8
movz w8, #51719
movk w8, #15258, lsl #16
sdiv w14, w9, w8
msub w8, w14, w8, w9
mov w10, w8
b .L.dfs.30
.L.dfs.30:
movz w8, #13936
movk w8, #11, lsl #16
mul w9, w24, w8
mov w8, #40824
mul w8, w23, w8
add w9, w9, w8
mov w8, #2268
mul w8, w22, w8
add w9, w9, w8
mov w8, #126
mul w8, w20, w8
add w9, w9, w8
mov w8, #7
mul w8, w21, w8
add w8, w9, w8
add w8, w8, w19
movz w9, #51719
movk w9, #15258, lsl #16
sdiv w14, w10, w9
msub w9, w14, w9, w10
adrp x10, dp
add x10, x10, :lo12:dp
sxtw x11, w8
lsl x11, x11, #2
add x11, x10, x11
str w9, [x11]
sxtw x8, w8
lsl x8, x8, #2
add x8, x10, x8
ldr w8, [x8]
mov w0, w8
ldr x25, [sp, #0]
ldr x27, [sp, #8]
ldr x26, [sp, #16]
ldr x24, [sp, #24]
ldr x22, [sp, #32]
ldr x20, [sp, #40]
ldr x23, [sp, #48]
ldr x21, [sp, #56]
ldr x19, [sp, #64]
add sp, sp, #96
ldp x29, x30, [sp], #16
ret
.text
.globl main
.p2align 2
main:
.L.main.0:
stp x29, x30, [sp, #-16]!
mov x29, sp
sub sp, sp, #48
str x19, [sp, #0]
str x20, [sp, #8]
str x21, [sp, #16]
str x22, [sp, #24]
bl getint
mov w19, w0
mov w8, #0
mov w9, w8
b .L.main.1
.L.main.3:
mov w8, #0
mov w20, w8
.L.main.19:
cmp w20, w19
b.lt .L.main.20
b .L.main.21
.L.main.20:
bl getint
mov w10, w0
adrp x9, list
add x9, x9, :lo12:list
sxtw x8, w20
lsl x8, x8, #2
add x8, x9, x8
str w10, [x8]
sxtw x8, w20
lsl x8, x8, #2
add x8, x9, x8
ldr w11, [x8]
sxtw x8, w20
lsl x8, x8, #2
add x8, x9, x8
ldr w9, [x8]
adrp x8, cns
add x8, x8, :lo12:cns
sxtw x9, w9
lsl x9, x9, #2
add x9, x8, x9
ldr w9, [x9]
mov w10, #1
add w9, w9, w10
sxtw x11, w11
lsl x11, x11, #2
add x8, x8, x11
str w9, [x8]
add w8, w20, w10
mov w20, w8
b .L.main.19
.L.main.5:
mov w10, #0
mov w11, w10
mov w10, w8
b .L.main.7
.L.main.9:
mov w8, #1
add w8, w10, w8
.L.main.4:
mov w10, #18
cmp w8, w10
b.lt .L.main.5
.L.main.6:
mov w8, #1
add w8, w9, w8
mov w9, w8
.L.main.1:
mov w8, #18
cmp w9, w8
b.lt .L.main.2
b .L.main.3
.L.main.2:
mov w8, #0
b .L.main.4
.L.main.12:
mov w8, #1
add w8, w11, w8
mov w11, w8
.L.main.7:
mov w8, #18
cmp w11, w8
b.lt .L.main.8
b .L.main.9
.L.main.8:
mov w8, #0
mov w21, w8
b .L.main.10
.L.main.14:
mov w8, #0
mov w10, w8
mov w11, w22
mov w21, w9
b .L.main.16
.L.main.17:
movz w8, #13936
movk w8, #11, lsl #16
mul w9, w21, w8
mov w8, #40824
mul w8, w12, w8
add w9, w9, w8
mov w8, #2268
mul w8, w20, w8
add w9, w9, w8
mov w8, #126
mul w8, w11, w8
add w9, w9, w8
mov w8, #7
mul w8, w15, w8
add w8, w9, w8
add w8, w8, w10
adrp x9, dp
add x9, x9, :lo12:dp
sxtw x8, w8
lsl x8, x8, #2
add x9, x9, x8
mov w8, #-1
str w8, [x9]
mov w8, #1
add w8, w10, w8
mov w10, w8
.L.main.16:
mov w8, #7
cmp w10, w8
b.lt .L.main.17
.L.main.18:
mov w8, #1
add w8, w15, w8
mov w15, w8
mov w22, w11
mov w9, w21
.L.main.13:
mov w8, #18
cmp w15, w8
b.lt .L.main.14
.L.main.15:
mov w8, #1
add w8, w22, w8
mov w21, w8
mov w11, w20
mov w10, w12
.L.main.10:
mov w8, #18
cmp w21, w8
b.lt .L.main.11
b .L.main.12
.L.main.11:
mov w8, #0
mov w15, w8
mov w22, w21
mov w20, w11
mov w12, w10
b .L.main.13
.L.main.21:
adrp x8, cns
add x8, x8, :lo12:cns
mov x9, #4
add x9, x8, x9
ldr w9, [x9]
mov x10, #8
add x10, x8, x10
ldr w15, [x10]
mov x10, #12
add x10, x8, x10
ldr w12, [x10]
mov x10, #16
add x10, x8, x10
ldr w11, [x10]
mov x10, #20
add x8, x8, x10
ldr w8, [x8]
mov w0, w9
mov w1, w15
mov w2, w12
mov w3, w11
mov w4, w8
mov w8, #0
mov w5, w8
bl dfs
mov w19, w0
mov w0, w19
bl putint
mov w0, w19
ldr x19, [sp, #0]
ldr x20, [sp, #8]
ldr x21, [sp, #16]
ldr x22, [sp, #24]
add sp, sp, #48
ldp x29, x30, [sp], #16
ret