Advertisement
Guest User

Kinda Intersting

a guest
May 28th, 2016
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.16 KB | None | 0 0
  1. ;;;;;;;;;;;;;;Average One Variable;;;;;;;;;;;;;;
  2. ;mov r0, #0
  3. ;vsub.f32 s0, s0, s0
  4. ;ldr r1, ptArrayLinearX
  5. ;ldr r2, ptArrayLinearY
  6. ;ldr r3, dimArrayLinear
  7. ;No caso de querermos fazer a media de x: ->
  8. ;mov r4, r1
  9. ;No caso de querermos fazer a media de y: ->
  10. ;mov r4, r2
  11. sumAvg1_for:
  12. cmp r0, r3 ;if we reach the array dimension ->
  13. beq sumAvg1_for_end ;jump to sumAvg1_for_end
  14. vldr s1, [r4] ;load byte and update address.
  15. add r4, #4 ;add 4 to r4
  16. vadd.f32 s0, s0, s1 ;s0 = s0 + s1
  17. add r0, #1 ;add 1 to r0
  18. b sumAvg1_for ;branch sumAvg1_for
  19. sumAvg1_for_end:
  20. vmov s3, r3 ;s3 = r3
  21. vcvt.f32.s32 s3, s3 ;makes sure it is converted int to float
  22. vdiv.f32 s0, s0, s3 ;s0 = s0/s3
  23. bx LR ;branch and exchange
  24.  
  25. ;;;;;;;;;;;;;;Average Two Variables;;;;;;;;;;;;;;
  26. sumAvg2_for:
  27. cmp r0, r3 ;if we reach the array dimension ->
  28. beq sumAvg2_for_end ;jump to sumAvg2_for_end
  29. vldr s1, [r4] ;load byte and update address
  30. vldr s2, [r5] ;load byte and update address
  31. add r4, #4 ;add 4 bytes to r4
  32. add r5, #4 ;add 4 bytes to r5
  33. vmla.f32 s0, s1, s2 ;s0 = s0 + (s1 * s2)
  34. add r0, #1 ;add 1 to r0
  35. b sumAvg2_for ;branch sumAvg2_for
  36. sumAvg2_for_end:
  37. vmov s3, r3 ;s3 = r3
  38. vcvt.f32.s32 s3, s3 ;makes sure it is converted int to float
  39. vdiv.f32 s0, s0, s3 ;s0 = s0/s3
  40. bx LR ;branch and exchange
  41.  
  42. ;;;;;;;;;;;;;;Average Three Variables;;;;;;;;;;;;;;
  43. sumAvg3_for:
  44. cmp r0, r3 ;if we reach the array dimension ->
  45. beq sumAvg3_for_end ;jump to sumAvg3_for_end
  46. vldr s1, [r4] ;load byte and update address
  47. vldr s2, [r5] ;load byte and update address
  48. vldr s3, [r6] ;load byte and update address
  49. add r4, #4 ;add 4 bytes to r4
  50. add r5, #4 ;add 4 bytes to r5
  51. add r6, #4 ;add 4 bytes to r6
  52. vmul.f32 s4, s1, s2 ;s4 = s1 * s2
  53. vmla.f32 s0, s4, s3 ;s0 = s0 + (s4 * s3)
  54. add r0, #1 ;add 1 to r0
  55. b sumAvg3_for ;branch sumAvg3_for
  56. sumAvg3_for_end:
  57. vmov s3, r3 ;s3 = r3
  58. vcvt.f32.s32 s3, s3 ;makes sure it is converted int to float
  59. vdiv.f32 s0, s0, s3 ;s0 = s0/s3
  60. bx LR ;branch and exchange
  61.  
  62. ;;;;;;;;;;;;;;Average Four Variables;;;;;;;;;;;;;;
  63. sumAvg4_for:
  64. cmp r0, r3 ;if we reach the array dimension ->
  65. beq sumAvg4_for_end ;jump to sumAvg4_for_end
  66. vldr s1, [r4] ;load byte and update address
  67. vldr s2, [r5] ;load byte and update address
  68. vldr s3, [r6] ;load byte and update address
  69. vldr s4, [r7] ;load byte and update address
  70. add r4, #4 ;add 4 bytes to r4
  71. add r5, #4 ;add 4 bytes to r5
  72. add r6, #4 ;add 4 bytes to r6
  73. add r7, #4 ;add 4 bytes to r7
  74. vmul.f32 s5, s1, s2 ;s5 = s1 * s2
  75. vmul.f32 s5, s5, s3 ;s5 = s5 * s3
  76. vmla.f32 s0, s5, s4 ;s0 = s0 + (s5 * s4)
  77. add r0, #1 ;add 1 to r0
  78. b sumAvg4_for ;branch sumAvg4_for
  79. sumAvg4_for_end:
  80. vmov s3, r3 ;s3 = r3
  81. vcvt.f32.s32 s3, s3 ;makes sure it is converted int to float
  82. vdiv.f32 s0, s0, s3 ;s0 = s0/s3
  83. bx LR ;branch and exchange
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement