111 lines
1.5 KiB
ArmAsm
111 lines
1.5 KiB
ArmAsm
.text
|
|
.globl _start
|
|
.type _start,@function
|
|
_start:
|
|
ilhu $3,f5@h
|
|
iohl $3,f5@l
|
|
br f1
|
|
|
|
.data
|
|
.word f1, f2, f3, f4
|
|
|
|
.section ".f1.part1","ax",@progbits
|
|
.globl f1
|
|
.type f1,@function
|
|
f1:
|
|
nop
|
|
stqd $0,16($1)
|
|
ai $1,$1,-64
|
|
stqd $1,0($1)
|
|
brsl $0,f2
|
|
brsl $0,f3
|
|
.fill 800
|
|
br .Lf1.part2
|
|
.size f1,.-f1
|
|
|
|
.section ".f1.part2","ax",@progbits
|
|
.Lf1.part2:
|
|
ai $1,$1,64
|
|
lqd $0,16($1)
|
|
bi $0
|
|
.fill 800
|
|
.size .Lf1.part2,.-.Lf1.part2
|
|
|
|
.section ".f2.part1","ax",@progbits
|
|
.globl f2
|
|
.type f2,@function
|
|
f2:
|
|
ai $1,$1,-128
|
|
stqd $1,0($1)
|
|
.fill 512
|
|
ai $1,$1,128
|
|
bi $0
|
|
.size f2,.-f2
|
|
|
|
.section ".f3.part1","ax",@progbits
|
|
.type f3,@function
|
|
f3:
|
|
.fill 256
|
|
bi $0
|
|
.size f3,.-f3
|
|
|
|
.section ".f4.part1","ax",@progbits
|
|
.type f4,@function
|
|
f4:
|
|
stqd $(0),16($1)
|
|
stqd $1,-512($1)
|
|
ai $1,$1,-512
|
|
brasl $0,f2
|
|
.fill 800
|
|
br .Lf4.part2
|
|
.size f4,.-f4
|
|
|
|
.section ".f4.part2","ax",@progbits
|
|
.Lf4.part2:
|
|
#alloca
|
|
ilhu $3,-4000@h
|
|
iohl $3,-4000@l
|
|
a $4,$1,$3
|
|
lnop
|
|
ori $1,$4,0
|
|
stqd $4,0($4)
|
|
brsl $0,f5
|
|
#recursion
|
|
brsl $0,f4
|
|
lqd $1,0($1)
|
|
.fill 800
|
|
br .Lf4.part3
|
|
.size .Lf4.part2,.-.Lf4.part2
|
|
|
|
.section ".f4.part3","ax",@progbits
|
|
.Lf4.part3:
|
|
#recursion
|
|
brasl $0,f4
|
|
brsl $0,f4
|
|
.fill 800
|
|
br .Lf4.part4
|
|
.size .Lf4.part3,.-.Lf4.part3
|
|
|
|
.section ".f4.part4","ax",@progbits
|
|
.Lf4.part4:
|
|
.fill 800
|
|
ila $3,512
|
|
a $1,$1,$3
|
|
lqd $0,16($1)
|
|
#sibling call
|
|
bra f5
|
|
.size .Lf4.part4,.-.Lf4.part4
|
|
|
|
.section ".f5.part1","ax",@progbits
|
|
.type f5,@function
|
|
f5:
|
|
stqd $(0),16($1)
|
|
stqd $1,-512($1)
|
|
ai $1,$1,-512
|
|
brsl $0,f5
|
|
.fill 800
|
|
ila $3,512
|
|
a $1,$1,$3
|
|
lqd $0,16($1)
|
|
bi $0
|
|
.size f5,.-f5
|