Advertisement
Guest User

AC Linear

a guest
May 27th, 2016
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.32 KB | None | 0 0
  1. .global main ; makes main accessible from outside this file.
  2. .thumb ; use thumb
  3. .data ; set memory location to ram
  4. ; put your variables here
  5.  
  6. arrayLinearX: .float -1.00000, -0.90000, -0.80000, -0.70000, -0.60000, -0.50000, -0.40000, -0.30000, -0.20000, -0.10000, 0.00000, 0.10000, 0.20000, 0.30000, 0.40000, 0.50000, 0.60000, 0.70000, 0.80000, 0.90000, 1.00000, 1.10000, 1.20000, 1.30000, 1.40000, 1.50000, 1.60000, 1.70000, 1.80000, 1.90000, 2.00000, 2.10000, 2.20000, 2.30000, 2.40000, 2.50000, 2.60000, 2.70000, 2.80000, 2.90000, 3.00000
  7. arrayLinearY: .float -2.67055, -2.25842, -3.58603, -1.78325, -2.11528, -2.95492, -2.36300, -1.59624, -0.54499, -0.30022, -1.68477, 0.17119, 0.37433, -0.33925, 0.52056, -0.56623, 0.22352, 1.44147, 1.42441, 1.98898, 1.61148, 0.60142, 2.45826, 2.85799, 2.57747, 2.96548, 3.16626, 2.69445, 3.45096, 2.71237, 4.01209, 2.89367, 3.61385, 3.38234, 3.71426, 5.39692, 5.36966, 4.84420, 6.34044, 4.73889, 5.77749
  8.  
  9. arrayQuadraticaX: .float -2.0000, -1.9000, -1.8000, -1.7000, -1.6000, -1.5000, -1.4000, -1.3000, -1.2000, -1.1000, -1.0000, -0.9000, -0.8000, -0.7000, -0.6000, -0.5000, -0.4000, -0.3000, -0.2000, -0.1000, 0.0000, 0.1000, 0.2000, 0.3000, 0.4000, 0.5000, 0.6000, 0.7000, 0.8000, 0.9000, 1.0000, 1.1000, 1.2000, 1.3000, 1.4000, 1.5000, 1.6000, 1.7000, 1.8000, 1.9000, 2.0000, 2.1000, 2.2000, 2.3000, 2.4000, 2.5000, 2.6000, 2.7000, 2.8000, 2.9000, 3.0000
  10. arrayQuadraticaY: .float 5.5262, 6.1421, 5.4008, 2.1675, 2.6391, 1.7823, 1.9653, 1.6575, 1.3387, -1.0159, 0.2188, -0.1996, -2.4296, -2.8040, -1.4265, 0.3390, -2.1585, -1.1389, -2.4848, -0.2149, -1.9796, -0.6962, 0.4163, 1.5836, 2.3172, 1.1889, 0.1345, 0.8172, 1.9500, 5.0429, 3.5171, 6.6371, 5.2941, 9.0371, 7.7799, 8.2864, 9.6843, 12.3842, 13.1132, 13.9866, 17.3233, 17.8211, 19.2189, 22.2888, 21.4234, 25.0288, 26.7949, 27.1418, 29.7913, 29.7834, 31.7158
  11.  
  12. arrayRaizQuadradaX: .float 0.0000, 0.1000, 0.2000, 0.3000, 0.4000, 0.5000, 0.6000, 0.7000, 0.8000, 0.9000, 1.0000, 1.1000, 1.2000, 1.3000, 1.4000, 1.5000, 1.6000, 1.7000, 1.8000, 1.9000, 2.0000, 2.1000, 2.2000, 2.3000, 2.4000, 2.5000, 2.6000, 2.7000, 2.8000, 2.9000, 3.0000, 3.1000, 3.2000, 3.3000, 3.4000, 3.5000, 3.6000, 3.7000, 3.8000, 3.9000, 4.0000
  13. arrayRaizQuadradaY: .float 0.5616, 2.9557, 4.0513, 3.0461, 4.4324, 4.6814, 4.1714, 5.1942, 5.1909, 6.7807, 6.1224, 6.8499, 6.4040, 7.5450, 7.1252, 8.1566, 8.4679, 8.8193, 8.4509, 7.9381, 8.4432, 10.0215, 8.7042, 10.2511, 9.8718, 10.9791, 9.3311, 10.2444, 9.7532, 11.6414, 9.9016, 11.6139, 11.8677, 12.1369, 10.7323, 11.5245, 11.4039, 12.6414, 12.0590, 13.1703, 11.8637
  14.  
  15. arrayExponencialX: .float -2.0000, -1.9000, -1.8000, -1.7000, -1.6000, -1.5000, -1.4000, -1.3000, -1.2000, -1.1000, -1.0000, -0.9000, -0.8000, -0.7000, -0.6000, -0.5000, -0.4000, -0.3000, -0.2000, -0.1000, 0.0000, 0.1000, 0.2000, 0.3000, 0.4000, 0.5000, 0.6000, 0.7000, 0.8000, 0.9000, 1.0000, 1.1000, 1.2000, 1.3000, 1.4000, 1.5000, 1.6000, 1.7000, 1.8000, 1.9000, 2.0000
  16. arrayExponencialY: .float 1.5793, 1.2081, 1.2221, 3.8406, 2.8847, 2.8439, 1.4971, 4.0532, 3.3308, 2.4769, 3.1500, 2.8760, 1.8639, 2.5795, 2.3281, 2.7133, 3.1008, 3.9329, 2.8800, 6.1240, 6.5568, 5.2835, 5.6266, 5.4816, 7.8757, 6.4885, 6.1056, 9.0221, 8.2907, 8.4747, 9.8185, 9.6001, 10.6723, 14.5551, 15.7621, 15.7083, 15.3183, 17.4936, 19.6350, 23.1819, 22.4711
  17.  
  18. .text ; set memory location to flash
  19.  
  20. ptArrayLinearX: .word arrayLinearX
  21. ptArrayLinearY: .word arrayLinearY
  22.  
  23. ptArrayQuadraticaX: .word arrayQuadraticaX
  24. ptArrayQuadraticaY: .word arrayQuadraticaY
  25.  
  26. ptArrayQuadradaX: .word arrayRaizQuadradaX
  27. ptArrayQuadradaY: .word arrayRaizQuadradaY
  28.  
  29. ptArrayExponencialX: .word arrayExponencialX
  30. ptArrayExponencialY: .word arrayExponencialY
  31.  
  32. dimArrayLinear: .word 41
  33. dimArrayQuadratica: .word 51
  34. dimArrayQuadrada: .word 41
  35. dimArrayExponencial: .word 41
  36.  
  37. float0: .float 0
  38.  
  39. main:
  40. bl registersA
  41.  
  42. fim:
  43. b fim
  44.  
  45. ;2. Regressao Linear
  46.  
  47. ;;;;;;;;;;;;;;Average X;;;;;;;;;;;;;;
  48. sumAvgX:
  49. mov r0, #0 ;r0 = 0 = i
  50. vsub.F32 s2, s2, s2 ;s2 has the 0 value in float
  51. ldr r1, ptArrayLinearX ;gets the address of ptArrayLinearX
  52. ldr r4, dimArrayLinear ;gets the address of dimArrayLinear
  53. sumAvgX_for:
  54. cmp r0, r4 ;if we reach the array dimension ->
  55. beq sumAvgX_for_end ;jump to sumAvgX_for_end
  56. vldr s0, [r1] ;load byte and update address.
  57. add r1, #4 ;add 4 to r1
  58. vadd.f32 s2, s2, s0 ;s2 = s2 + s0
  59. add r0, #1 ;add 1 to r0
  60. b sumAvgX_for ;branch sumAvgX_for
  61. sumAvgX_for_end:
  62. vmov s4, r4 ;s4 = r4
  63. vcvt.f32.s32 s4, s4 ;converts int to float
  64. vdiv.f32 s0, s2, s4 ;s0 = s2/s4
  65. bx LR ;branch and exchange
  66.  
  67. ;;;;;;;;;;;;;;Average Y;;;;;;;;;;;;;;
  68.  
  69. sumAvgY:
  70. mov r0, #0 ;r0 = 0 = i
  71. vldr s2, float0 ;s2 has the 0 value in float
  72. ldr r1, ptArrayLinearY ;gets the address of ptArrayLinearY
  73. ldr r4, dimArrayLinear ;gets the address of dimArrayLinear
  74. sumAvgY_for:
  75. cmp r0, r4 ;if we reach the array dimension ->
  76. beq sumAvgY_for_end ;jump to sumAvgY_for_end
  77. vldr s0, [r1] ;load byte and update address.
  78. add r1, #4 ;add 4 to r1
  79. vadd.f32 s2, s2, s0 ;s2 = s2 + s0
  80. add r0, #1 ;add 1 to r0
  81. b sumAvgY_for ;branch sumAvgY_for
  82. sumAvgY_for_end:
  83. vmov s4, r4 ;s4 = r4
  84. vcvt.f32.s32 s4, s4 ;
  85. vdiv.f32 s0, s2, s4 ;s0 = s2/s4
  86. bx LR ;branch and exchange
  87.  
  88. ;;;;;;;;;;;;;;Average X*Y;;;;;;;;;;;;;;
  89.  
  90. sumAvgXY:
  91. mov r0, #0 ;r0 = 0 = i
  92. vldr s2, float0 ;s2 has the 0 value in float
  93. ldr r1, ptArrayLinearY ;gets the address of ptArrayLinearY
  94. ldr r2, ptArrayLinearX ;gets the address of ptArrayLinearX
  95. ldr r4, dimArrayLinear ;gets the address of do dimArrayLinear
  96. sumAvgXY_for:
  97. cmp r0, r4 ;if we reach the array dimension ->
  98. beq sumAvgXY_for_end ;jump to sumAvgXY_for_end
  99. vldr s0, [r1] ;load byte and update address
  100. vldr s1, [r2] ;load byte and update address
  101. add r1, #4 ;add 4 bytes to r1
  102. add r2, #4 ;add 4 bytes to r2
  103. vmla.f32 s2, s1, s0 ;s2 = s2 + (s1 * s0)
  104. add r0, #1 ;add 1 to r0
  105. b sumAvgXY_for ;branch sumAvgXY_for
  106. sumAvgXY_for_end:
  107. vmov s4, r4 ;s4 = r4
  108. vcvt.f32.s32 s4, s4 ;
  109. vdiv.f32 s0, s2, s4 ;s0 = s2/s4
  110. bx LR ;branch and exchange
  111.  
  112. ;;;;;;;;;;;;;;Average X*X;;;;;;;;;;;;;;
  113.  
  114. sumAvgXX:
  115. mov r0, #0 ;r0 = 0 = i
  116. vldr s2, float0 ;s2 has the 0 value in float
  117. ldr r1, ptArrayLinearX ;gets the address of ptArrayLinearX
  118. ldr r4, dimArrayLinear ;gets the address of dimArrayLinear
  119. sumAvgXX_for:
  120. cmp r0, r4 ;if we reach the array dimension ->
  121. beq sumAvgXX_for_end ;jump to sumAvgX_for_end
  122. vldr s0, [r1] ;load byte and update address.
  123. add r1, #4 ;add 4 to r1
  124. vmla.f32 s2, s0, s0 ;s2 = s2 + (s0 * s0)
  125. add r0, #1 ;add 1 to r0
  126. b sumAvgXX_for ;branch sumAvgX_for
  127. sumAvgXX_for_end:
  128. vmov s4, r4 ;s4 = r4
  129. vcvt.f32.s32 s4, s4 ;converts the value in case it stacks
  130. vdiv.f32 s0, s2, s4 ;s0 = s2/s4
  131. bx LR ;branch and exchange
  132.  
  133. ;;;;;;;;;;;;;;Parameter B;;;;;;;;;;;;;;
  134.  
  135. registersB:
  136. push{lr}
  137.  
  138. bl sumAvgX ;gets the final value of sumAvgX
  139. push{s0}
  140. bl sumAvgY ;gets the final value of sumAvgY
  141. push{s0}
  142. bl sumAvgXY ;gets the final value of sumAvgXY
  143. push{s0}
  144. bl sumAvgXX ;gets the final value of sumAvgXX
  145. push{s0}
  146.  
  147. pop{s4} ;sumAvgXX in s4
  148. pop{s3} ;sumAvgXY in s3
  149. pop{s2} ;sumAvgY in s2
  150. pop{s1} ;sumAvgX in s1
  151.  
  152. pop{lr}
  153. operationsB:
  154. vnmls.f32 s3, s1, s2 ;s3 = -s3 + (s1 * s2) => s3 = avg(X)*avg(Y) - avg(XY)
  155. vnmls.f32 s4, s1, s1 ;s4 = -s4 + (s1 * s1) => s4 = avg(X)*avg(X) - avg(XX)
  156. vdiv.f32 s0, s3, s4 ;s0 = s3/s4
  157. bx LR ;branch and exchange
  158.  
  159. ;;;;;;;;;;;;;;Parameter A;;;;;;;;;;;;;;
  160.  
  161. registersA:
  162. push{lr}
  163.  
  164. bl sumAvgX
  165. push{s0} ;gets the final value of sumAvgX
  166. bl sumAvgY
  167. push{s0} ;gets the final value of sumAvgY
  168. bl operationsB
  169. push{s0} ;gets the final value of operationsB
  170.  
  171. pop{s3} ;s3 = operationsB
  172. pop{s2} ;s2 = sumAvgY
  173. pop{s1} ;s1 = sumAvgX
  174.  
  175. pop{lr}
  176. operationsA:
  177. vmls.f32 s2, s1, s3 ;r2 = r2 - (r3 * r1) => r3 = avg(y) - (B * avg(X))
  178. vmov.f32 s0, s3 ;s0 = s3
  179. bx LR ;branch and exchange
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement