From e51a120676ee49ecb2bce76eb9a8f08c0098ec9b Mon Sep 17 00:00:00 2001 From: Bernhard Urban Date: Sun, 16 Jan 2011 15:37:08 +0100 Subject: [PATCH] progs/sum: 92 -> 74 cycles (thx @ loop unrollen) --- progs/sum.s | 42 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 36 insertions(+), 6 deletions(-) diff --git a/progs/sum.s b/progs/sum.s index d762c60..c03df08 100644 --- a/progs/sum.s +++ b/progs/sum.s @@ -81,12 +81,42 @@ sum: ldis r0, 0 addi r3, r1, 0 retzs- ; check len != 0 + + andx r1, 0x3 + + cmpi r1, 1 + addideq r3, r3, 3 + subideq r2, r2, 12 + breq- loop1 + + cmpi r1, 2 + addideq r3, r3, 2 + subideq r2, r2, 8 + breq- loop2 + + cmpi r1, 3 + addideq r3, r3, 1 + subideq r2, r2, 4 + breq- loop3 + + addi r3, r3, 4 loop: - ;load arr data + subi r3, r3, 4 + retzs- ldw r4, 0(r2) - ;sum += arr[i]; add r0, r0, r4 - addi r2, r2, 4 - subi r3, r3, 1 - brnz+ loop - ret + +loop3: + ldw r4, 4(r2) + add r0, r0, r4 + +loop2: + ldw r4, 8(r2) + add r0, r0, r4 + +loop1: + ldw r4, 12(r2) + add r0, r0, r4 + + addi r2, r2, 4*4 + br+ loop -- 2.25.1