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.

379 lines
7.0 KiB

.data
.globl i
.p2align 2
i:
.zero 4
.globl k
.p2align 2
k:
.zero 4
.text
.globl inc_impl
.p2align 2
inc_impl:
.L.inc_impl.0:
stp x29, x30, [sp, #-16]!
mov x29, sp
sub sp, sp, #32
stur x0, [x29, #-8]
stur w1, [x29, #-12]
ldur w8, [x29, #-12]
stur w8, [x29, #-16]
ldur w8, [x29, #-16]
stur w8, [x29, #-20]
ldur w8, [x29, #-20]
mov w9, #0
cmp w8, w9
b.eq .L.inc_impl.1
b .L.inc_impl.2
.L.inc_impl.1:
ldur x15, [x29, #-8]
ldr w8, [x15]
stur w8, [x29, #-24]
ldur x15, [x29, #-8]
ldur w8, [x29, #-24]
mov w9, #1
add w8, w8, w9
str w8, [x15]
b .L.inc_impl.3
.L.inc_impl.2:
ldur x15, [x29, #-8]
ldr w8, [x15]
stur w8, [x29, #-28]
ldur x15, [x29, #-8]
ldur w8, [x29, #-28]
mov w9, #2
lsl w8, w8, #1
str w8, [x15]
ldur w8, [x29, #-16]
stur w8, [x29, #-32]
ldur x0, [x29, #-8]
ldur w1, [x29, #-32]
mov w8, #1
sub w1, w1, w8
bl inc_impl
b .L.inc_impl.3
.L.inc_impl.3:
add sp, sp, #32
ldp x29, x30, [sp], #16
ret
.text
.globl inc
.p2align 2
inc:
.L.inc.0:
stp x29, x30, [sp, #-16]!
mov x29, sp
sub sp, sp, #16
stur x0, [x29, #-8]
adrp x15, k
add x15, x15, :lo12:k
ldr w8, [x15]
stur w8, [x29, #-12]
ldur x0, [x29, #-8]
ldur w1, [x29, #-12]
bl inc_impl
add sp, sp, #16
ldp x29, x30, [sp], #16
ret
.text
.globl add_impl
.p2align 2
add_impl:
.L.add_impl.0:
stp x29, x30, [sp, #-16]!
mov x29, sp
sub sp, sp, #48
stur x0, [x29, #-8]
stur x1, [x29, #-16]
stur w2, [x29, #-20]
ldur w8, [x29, #-20]
stur w8, [x29, #-24]
ldur w8, [x29, #-24]
stur w8, [x29, #-28]
ldur w8, [x29, #-28]
mov w9, #0
cmp w8, w9
b.eq .L.add_impl.1
b .L.add_impl.2
.L.add_impl.1:
ldur x15, [x29, #-8]
ldr w8, [x15]
stur w8, [x29, #-32]
ldur x15, [x29, #-16]
ldr w8, [x15]
stur w8, [x29, #-36]
ldur x15, [x29, #-8]
ldur w8, [x29, #-32]
ldur w9, [x29, #-36]
add w8, w8, w9
str w8, [x15]
b .L.add_impl.3
.L.add_impl.2:
ldur x15, [x29, #-8]
ldr w8, [x15]
stur w8, [x29, #-40]
ldur x15, [x29, #-8]
ldur w8, [x29, #-40]
mov w9, #2
lsl w8, w8, #1
str w8, [x15]
ldur w8, [x29, #-24]
stur w8, [x29, #-44]
ldur x0, [x29, #-8]
ldur x1, [x29, #-16]
ldur w2, [x29, #-44]
mov w8, #1
sub w2, w2, w8
bl add_impl
b .L.add_impl.3
.L.add_impl.3:
add sp, sp, #48
ldp x29, x30, [sp], #16
ret
.text
.globl add
.p2align 2
add:
.L.add.0:
stp x29, x30, [sp, #-16]!
mov x29, sp
sub sp, sp, #32
stur x0, [x29, #-8]
stur x1, [x29, #-16]
adrp x15, k
add x15, x15, :lo12:k
ldr w8, [x15]
stur w8, [x29, #-20]
ldur x0, [x29, #-8]
ldur x1, [x29, #-16]
ldur w2, [x29, #-20]
bl add_impl
add sp, sp, #32
ldp x29, x30, [sp], #16
ret
.text
.globl sub_impl
.p2align 2
sub_impl:
.L.sub_impl.0:
stp x29, x30, [sp, #-16]!
mov x29, sp
sub sp, sp, #48
stur x0, [x29, #-8]
stur x1, [x29, #-16]
stur w2, [x29, #-20]
ldur w8, [x29, #-20]
stur w8, [x29, #-24]
ldur w8, [x29, #-24]
stur w8, [x29, #-28]
ldur w8, [x29, #-28]
mov w9, #0
cmp w8, w9
b.eq .L.sub_impl.1
b .L.sub_impl.2
.L.sub_impl.1:
ldur x15, [x29, #-8]
ldr w8, [x15]
stur w8, [x29, #-32]
ldur x15, [x29, #-16]
ldr w8, [x15]
stur w8, [x29, #-36]
ldur x15, [x29, #-8]
ldur w8, [x29, #-32]
ldur w9, [x29, #-36]
sub w8, w8, w9
str w8, [x15]
b .L.sub_impl.3
.L.sub_impl.2:
ldur x15, [x29, #-8]
ldr w8, [x15]
stur w8, [x29, #-40]
ldur x15, [x29, #-8]
ldur w8, [x29, #-40]
mov w9, #2
lsl w8, w8, #1
str w8, [x15]
ldur w8, [x29, #-24]
stur w8, [x29, #-44]
ldur x0, [x29, #-8]
ldur x1, [x29, #-16]
ldur w2, [x29, #-44]
mov w8, #1
sub w2, w2, w8
bl sub_impl
b .L.sub_impl.3
.L.sub_impl.3:
add sp, sp, #48
ldp x29, x30, [sp], #16
ret
.text
.globl sub
.p2align 2
sub:
.L.sub.0:
stp x29, x30, [sp, #-16]!
mov x29, sp
sub sp, sp, #32
stur x0, [x29, #-8]
stur x1, [x29, #-16]
adrp x15, k
add x15, x15, :lo12:k
ldr w8, [x15]
stur w8, [x29, #-20]
ldur x0, [x29, #-8]
ldur x1, [x29, #-16]
ldur w2, [x29, #-20]
bl sub_impl
add sp, sp, #32
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, #64
mov x15, x29
sub x15, x15, #16
mov w8, #-1
str w8, [x15]
mov x15, x29
sub x15, x15, #16
mov x14, #4
add x15, x15, x14
mov w8, #0
str w8, [x15]
bl getint
stur w0, [x29, #-20]
adrp x15, k
add x15, x15, :lo12:k
ldur w8, [x29, #-20]
str w8, [x15]
bl getint
stur w0, [x29, #-24]
mov x15, x29
sub x15, x15, #8
ldur w8, [x29, #-24]
str w8, [x15]
mov x0, x29
sub x0, x0, #16
bl getarray
stur w0, [x29, #-28]
b .L.main.1
.L.main.1:
mov x15, x29
sub x15, x15, #8
ldr w8, [x15]
stur w8, [x29, #-32]
ldur w8, [x29, #-32]
mov w9, #0
cmp w8, w9
b.ne .L.main.2
b .L.main.3
.L.main.2:
mov x15, x29
sub x15, x15, #16
ldr w8, [x15]
stur w8, [x29, #-36]
mov x15, x29
sub x15, x15, #4
ldur w8, [x29, #-36]
str w8, [x15]
b .L.main.4
.L.main.3:
mov w0, #10
bl putch
mov w0, #0
add sp, sp, #64
ldp x29, x30, [sp], #16
ret
.L.main.4:
mov x15, x29
sub x15, x15, #4
ldr w8, [x15]
stur w8, [x29, #-40]
ldur w8, [x29, #-40]
mov w9, #5
cmp w8, w9
b.lt .L.main.5
b .L.main.6
.L.main.5:
adrp x15, i
add x15, x15, :lo12:i
ldr w8, [x15]
stur w8, [x29, #-44]
ldur w0, [x29, #-44]
bl putint
mov x15, x29
sub x15, x15, #4
ldr w8, [x15]
stur w8, [x29, #-48]
ldur w0, [x29, #-48]
bl putint
mov x15, x29
sub x15, x15, #8
ldr w8, [x15]
stur w8, [x29, #-52]
ldur w0, [x29, #-52]
bl putint
mov x15, x29
sub x15, x15, #16
ldr w8, [x15]
stur w8, [x29, #-56]
ldur w0, [x29, #-56]
bl putint
mov x0, x29
sub x0, x0, #16
mov x1, x29
sub x1, x1, #8
bl add
mov x0, x29
sub x0, x0, #4
mov x1, x29
sub x1, x1, #8
bl add
mov x0, x29
sub x0, x0, #16
mov x1, x29
sub x1, x1, #8
bl sub
b .L.main.4
.L.main.6:
adrp x0, i
add x0, x0, :lo12:i
bl inc
adrp x0, i
add x0, x0, :lo12:i
mov x1, x29
sub x1, x1, #16
bl add
adrp x15, i
add x15, x15, :lo12:i
ldr w8, [x15]
stur w8, [x29, #-60]
mov x15, x29
sub x15, x15, #16
mov x14, #4
add x15, x15, x14
ldr w8, [x15]
stur w8, [x29, #-64]
ldur w8, [x29, #-60]
ldur w9, [x29, #-64]
cmp w8, w9
b.eq .L.main.7
b .L.main.8
.L.main.7:
b .L.main.3
.L.main.8:
b .L.main.1