From: Bernhard Urban Date: Wed, 19 Jan 2011 11:06:24 +0000 (+0100) Subject: progs/max: loop unrolling (102->84) X-Git-Url: http://wien.tomnetworks.com/gitweb/?p=calu.git;a=commitdiff_plain;h=701e1eb018a01b1cc7f13f7005ce97c3307762d5 progs/max: loop unrolling (102->84) --- diff --git a/progs/max.s b/progs/max.s index 0008d64..7192ae3 100644 --- a/progs/max.s +++ b/progs/max.s @@ -80,12 +80,52 @@ max: ; r4 = arr[x] ; r0 = x = arr[0] ldw r0, 0(r2) - subi r1, r1, 1 + + subi r5, r1, 1 + andx r5, 0x3 + + cmpi r5, 0 + breq+ loop0 + + cmpi r5, 1 + addideq r1, r1, 3-1 + subideq r2, r2, 12 + breq+ loop1 + + cmpi r5, 2 + addideq r1, r1, 2-1 + subideq r2, r2, 8 + breq+ loop2 + + cmpi r5, 3 + ; addideq r1, r1, 1-1 + subideq r2, r2, 4 + breq+ loop3 + +loop0: + addi r1, r1, 4-1 maxloop: + subi r1, r1, 4 + retzs- + ldw r4, 4(r2) cmp r0, r4 movlt r0, r4 - subi r1, r1, 1 - addid r2, r2, 4 - brnq+ maxloop - ret+ + +loop1: + ldw r4, 8(r2) + cmp r0, r4 + movlt r0, r4 + +loop2: + ldw r4, 12(r2) + cmp r0, r4 + movlt r0, r4 + +loop3: + ldw r4, 16(r2) + cmp r0, r4 + movlt r0, r4 + + addi r2, r2, 4*4 + br+ maxloop