beagleboard at 500MHz calling all these functions with loop counter set to 500000000 a1 real 0m49.235s user 0m45.617s sys 0m3.609s a2 real 0m46.012s user 0m42.711s sys 0m3.289s b1 real 0m56.712s user 0m52.656s sys 0m4.047s b2 real 0m32.085s user 0m29.805s sys 0m2.250s /********************************************************************************/ .text .global a1 .global a2 .global b1 .global b2 .fpu neon a1: mov r2, #0 1: vadd.i32 d0, d0, d1 vmov.32 ip, d0[0] .rept 25 add r5, r5, #0 add r6, r6, #0 .endr add r2, r2, ip subs r0, r0, #1 bgt 1b bx lr a2: mov r2, #0 1: vadd.i32 d0, d0, d1 .rept 20 add r5, r5, #0 add r6, r6, #0 .endr vmov.32 ip, d0[0] .rept 5 add r5, r5, #0 add r6, r6, #0 .endr add r2, r2, ip subs r0, r0, #1 bgt 1b bx lr b1: mov r2, #0 1: vadd.i32 d0, d0, d1 vst1.32 {d0[0]}, [r1] ldr ip, [r1] .rept 25 add r5, r5, #0 add r6, r6, #0 .endr add r2, r2, ip subs r0, r0, #1 bgt 1b bx lr b2: mov r2, #0 1: vadd.i32 d0, d0, d1 vst1.32 {d0[0]}, [r1] .rept 20 add r5, r5, #0 add r6, r6, #0 .endr ldr ip, [r1] .rept 5 add r5, r5, #0 add r6, r6, #0 .endr add r2, r2, ip subs r0, r0, #1 bgt 1b bx lr