On Mon, 22 Oct 2012, Richard Sandiford wrote: > > The loop probes at FIRST + N * PROBE_INTERVAL for values of N from 1 until > > it > > is equal to ROUNDED_SIZE, inclusive, so FIRST + SIZE is always probed. > > Doh! But in that case, rather than: > > 1: > beq r1,r2,2f > addiu r1,r1,interval > b 1b > sw $0,0(r1) > 2: > > why not just: > > 1: > addiu r1,r1,interval > bne r1,r2,1b > sw $0,0(r1) > > ?
For the record that can be easily rewritten to support the MIPS16 mode, e.g.: move $1,r2 1: d/addiu r1,interval li r2,0 sw/sd r2,0(r1) move r2,$1 cmp r1,r2 btnez 1b with $2 and $3 used as temporaries (in addition to $1) as these are I believe available in MIPS16 prologues ($1 obviously is). The juggling with $1 can be avoided if the probe used need not be zero (need it?). The range of <interval> supported by the machine instruction encodings available is the same as for the standard MIPS or microMIPS mode. If we care about MIPS16 support, that is. Maciej