Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;;;;;;;;;;;;;;Average One Variable;;;;;;;;;;;;;;
- ;mov r0, #0
- ;vsub.f32 s0, s0, s0
- ;ldr r1, ptArrayLinearX
- ;ldr r2, ptArrayLinearY
- ;ldr r3, dimArrayLinear
- ;No caso de querermos fazer a media de x: ->
- ;mov r4, r1
- ;No caso de querermos fazer a media de y: ->
- ;mov r4, r2
- sumAvg1_for:
- cmp r0, r3 ;if we reach the array dimension ->
- beq sumAvg1_for_end ;jump to sumAvg1_for_end
- vldr s1, [r4] ;load byte and update address.
- add r4, #4 ;add 4 to r4
- vadd.f32 s0, s0, s1 ;s0 = s0 + s1
- add r0, #1 ;add 1 to r0
- b sumAvg1_for ;branch sumAvg1_for
- sumAvg1_for_end:
- vmov s3, r3 ;s3 = r3
- vcvt.f32.s32 s3, s3 ;makes sure it is converted int to float
- vdiv.f32 s0, s0, s3 ;s0 = s0/s3
- bx LR ;branch and exchange
- ;;;;;;;;;;;;;;Average Two Variables;;;;;;;;;;;;;;
- sumAvg2_for:
- cmp r0, r3 ;if we reach the array dimension ->
- beq sumAvg2_for_end ;jump to sumAvg2_for_end
- vldr s1, [r4] ;load byte and update address
- vldr s2, [r5] ;load byte and update address
- add r4, #4 ;add 4 bytes to r4
- add r5, #4 ;add 4 bytes to r5
- vmla.f32 s0, s1, s2 ;s0 = s0 + (s1 * s2)
- add r0, #1 ;add 1 to r0
- b sumAvg2_for ;branch sumAvg2_for
- sumAvg2_for_end:
- vmov s3, r3 ;s3 = r3
- vcvt.f32.s32 s3, s3 ;makes sure it is converted int to float
- vdiv.f32 s0, s0, s3 ;s0 = s0/s3
- bx LR ;branch and exchange
- ;;;;;;;;;;;;;;Average Three Variables;;;;;;;;;;;;;;
- sumAvg3_for:
- cmp r0, r3 ;if we reach the array dimension ->
- beq sumAvg3_for_end ;jump to sumAvg3_for_end
- vldr s1, [r4] ;load byte and update address
- vldr s2, [r5] ;load byte and update address
- vldr s3, [r6] ;load byte and update address
- add r4, #4 ;add 4 bytes to r4
- add r5, #4 ;add 4 bytes to r5
- add r6, #4 ;add 4 bytes to r6
- vmul.f32 s4, s1, s2 ;s4 = s1 * s2
- vmla.f32 s0, s4, s3 ;s0 = s0 + (s4 * s3)
- add r0, #1 ;add 1 to r0
- b sumAvg3_for ;branch sumAvg3_for
- sumAvg3_for_end:
- vmov s3, r3 ;s3 = r3
- vcvt.f32.s32 s3, s3 ;makes sure it is converted int to float
- vdiv.f32 s0, s0, s3 ;s0 = s0/s3
- bx LR ;branch and exchange
- ;;;;;;;;;;;;;;Average Four Variables;;;;;;;;;;;;;;
- sumAvg4_for:
- cmp r0, r3 ;if we reach the array dimension ->
- beq sumAvg4_for_end ;jump to sumAvg4_for_end
- vldr s1, [r4] ;load byte and update address
- vldr s2, [r5] ;load byte and update address
- vldr s3, [r6] ;load byte and update address
- vldr s4, [r7] ;load byte and update address
- add r4, #4 ;add 4 bytes to r4
- add r5, #4 ;add 4 bytes to r5
- add r6, #4 ;add 4 bytes to r6
- add r7, #4 ;add 4 bytes to r7
- vmul.f32 s5, s1, s2 ;s5 = s1 * s2
- vmul.f32 s5, s5, s3 ;s5 = s5 * s3
- vmla.f32 s0, s5, s4 ;s0 = s0 + (s5 * s4)
- add r0, #1 ;add 1 to r0
- b sumAvg4_for ;branch sumAvg4_for
- sumAvg4_for_end:
- vmov s3, r3 ;s3 = r3
- vcvt.f32.s32 s3, s3 ;makes sure it is converted int to float
- vdiv.f32 s0, s0, s3 ;s0 = s0/s3
- bx LR ;branch and exchange
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement