Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- define(fd_r, w19)
- define(nread, x20)
- define(buf_base, x21)
- // Assembler equates
- AT_FDCWD = -100
- buf_size = 8
- alloc = -(16 + buf_size) & -16
- dealloc = -alloc
- buf_s = 16
- increment = 1
- power .req d19
- numerator .req d20
- factor .req d21
- term .req d22
- accumulator .req d23
- incr .req d24
- counter .req d25
- curNumb .req d26
- someFloat: .double 0r1.0e-10
- error: .string "Error opening file: %s\nAborting.\n"
- file: .string "input.bin"
- header: .string "x e^x e^-x:\n"
- values: .string "%13.10f %13.10f %13.10f\n"
- .balign 4
- .global main
- main: stp x29, x30, [sp, alloc]!
- mov x29, sp
- adrp x0, header
- add x0, x0, :lo12:header
- bl printf
- mov w0, AT_FDCWD
- adrp x1, file
- add x1, x1, :lo12:file
- mov w2, 0
- mov w3, 0
- mov x8, 56
- svc 0
- mov fd_r, w0
- cmp fd_r, 0
- b.ge fileOpen
- adrp x0, error
- add x0, x0, :lo12:error
- adrp x1, file
- add x1, x1, :lo12:file
- bl printf
- mov w0, -1
- b exit
- fileOpen:
- add buf_base, x29, buf_s
- top: mov w0, fd_r
- mov x1, buf_base
- mov w2, buf_size
- mov x8, 63
- svc 0
- mov nread, x0
- cmp nread, buf_size
- b.ne end
- ldr d1, [buf_base]
- bl calc
- fmov d2, d1
- ldr d1, [buf_base]
- fneg d1, d1
- bl calc
- fmov d3, d1
- adrp x0, values
- add x0, x0, :lo12:values
- ldr d1, [buf_base]
- bl printf
- b top
- end: mov w0, fd_r
- mov x8, 57
- svc 0
- mov w0, 0
- exit: ldp x29, x30, [sp], dealloc
- ret
- .balign 4
- .global calc
- calc: stp x29, x30, [sp, -16]!
- mov x29, sp
- // someFloat
- adrp x22, someFloat
- add x22, x22, :lo12:someFloat
- ldr d4, [x22]
- fmov power, 1.0
- fmov incr, 1.0
- fmov accumulator, 1.0
- fmov counter, 1.0
- loop: fmov numerator, d1
- fcmp power, incr
- b.gt calcNum
- fmov factor, power
- fmov curNumb, factor
- fsub curNumb, curNumb, incr
- fcmp power, curNumb
- b.gt calcFact
- fdiv term, numerator, factor
- fadd accumulator, accumulator, term
- fadd power, power, incr
- fabs term, term
- fcmp term, d4
- b.ge loop
- fmov d1, accumulator
- ldp x29, x30, [sp], 16
- ret
- calcNum:
- fmul numerator, numerator, d1
- fadd counter, counter, incr
- fcmp power, counter
- b.gt calcNum
- ret
- calcFact:
- fmul factor, factor, curNumb
- fsub curNumb, curNumb, incr
- fcmp curNumb, incr
- b.gt calcFact
- ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement