Advertisement
Guest User

Assignment 6

a guest
Dec 9th, 2016
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ARM 3.01 KB | None | 0 0
  1. define(fd_r, w19)
  2. define(nread, x20)
  3. define(buf_base, x21)
  4.  
  5.  
  6. // Assembler equates
  7. AT_FDCWD = -100
  8. buf_size = 8
  9. alloc = -(16 + buf_size) & -16
  10. dealloc = -alloc
  11. buf_s = 16
  12.  
  13. increment = 1
  14.  
  15. power           .req    d19
  16. numerator       .req    d20
  17. factor          .req    d21
  18. term            .req    d22
  19. accumulator     .req    d23
  20. incr            .req    d24
  21. counter         .req    d25
  22. curNumb         .req    d26
  23.  
  24. someFloat:      .double 0r1.0e-10
  25.  
  26.  
  27. error:  .string "Error opening file: %s\nAborting.\n"
  28. file:   .string "input.bin"
  29. header: .string "x                       e^x                     e^-x:\n"
  30. values: .string "%13.10f                %13.10f         %13.10f\n"
  31.  
  32.  
  33.         .balign 4
  34.         .global main
  35. main:   stp x29, x30, [sp, alloc]!
  36.         mov x29, sp
  37.  
  38.         adrp x0, header
  39.         add x0, x0, :lo12:header
  40.         bl printf
  41.  
  42.  
  43.         mov w0, AT_FDCWD
  44.         adrp x1, file
  45.         add x1, x1, :lo12:file
  46.         mov w2, 0
  47.         mov w3, 0
  48.         mov x8, 56
  49.         svc 0
  50.         mov fd_r, w0
  51.  
  52.         cmp fd_r, 0
  53.         b.ge fileOpen
  54.  
  55.         adrp x0, error
  56.         add x0, x0, :lo12:error
  57.         adrp x1, file
  58.         add x1, x1, :lo12:file
  59.         bl printf
  60.         mov w0, -1
  61.         b exit
  62.  
  63.  
  64. fileOpen:
  65.         add buf_base, x29, buf_s
  66.        
  67. top:    mov w0, fd_r
  68.         mov x1, buf_base
  69.         mov w2, buf_size
  70.         mov x8, 63
  71.         svc 0
  72.         mov nread, x0
  73.  
  74.         cmp nread, buf_size
  75.         b.ne end
  76.  
  77.  
  78.  
  79.         ldr d1, [buf_base]
  80.         bl calc
  81.         fmov d2, d1
  82.  
  83.         ldr d1, [buf_base]
  84.         fneg d1, d1
  85.         bl calc
  86.         fmov d3, d1
  87.  
  88.  
  89.         adrp x0, values
  90.         add x0, x0, :lo12:values
  91.         ldr d1, [buf_base]
  92.         bl printf
  93.  
  94.         b       top
  95.  
  96.  
  97. end:    mov w0, fd_r
  98.         mov x8, 57
  99.         svc 0
  100.  
  101.         mov w0, 0
  102.  
  103. exit:   ldp x29, x30, [sp], dealloc
  104.         ret
  105.  
  106.  
  107.         .balign 4
  108.         .global calc
  109.  
  110.  
  111. calc:   stp x29, x30, [sp, -16]!
  112.         mov x29, sp
  113.  
  114.         // someFloat
  115.         adrp x22, someFloat
  116.         add x22, x22, :lo12:someFloat
  117.         ldr d4, [x22]
  118.  
  119.  
  120.  
  121.         fmov power, 1.0
  122.         fmov incr, 1.0
  123.         fmov accumulator, 1.0
  124.         fmov counter, 1.0
  125.  
  126.  
  127. loop:   fmov numerator, d1
  128.         fcmp power, incr
  129.         b.gt calcNum
  130.  
  131.         fmov factor, power
  132.         fmov curNumb, factor
  133.         fsub curNumb, curNumb, incr
  134.         fcmp power, curNumb
  135.         b.gt calcFact
  136.  
  137.         fdiv term, numerator, factor
  138.         fadd accumulator, accumulator, term
  139.  
  140.         fadd power, power, incr
  141.  
  142.         fabs term, term
  143.         fcmp term, d4
  144.         b.ge loop
  145.  
  146.         fmov d1, accumulator
  147.         ldp x29, x30, [sp], 16
  148.         ret
  149.  
  150.  
  151. calcNum:
  152.         fmul numerator, numerator, d1
  153.         fadd counter, counter, incr
  154.  
  155.         fcmp power, counter
  156.         b.gt calcNum
  157.  
  158.         ret
  159.  
  160. calcFact:
  161.         fmul factor, factor, curNumb
  162.         fsub curNumb, curNumb, incr
  163.  
  164.         fcmp curNumb, incr
  165.         b.gt calcFact
  166.  
  167.         ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement