On Sun, 6 May 2012, Andrew Pinski wrote: > > For the record: MIPS processors that implement CLZ/CLO (for some reason > > CTZ/CTO haven't been added to the architecture, but these operations can > > be cheaply transformed into CLZ/CLO) generally have a dedicated unit that > > causes no pipeline stall for these instructions even in the simplest > > pipeline designs like the M4K -- IOW they are issued at the usual one > > instruction per pipeline clock rate. > > Even on Octeon this is true. Though Octeon has seq/sneq too so it > does not matter in the end.
Does Octeon's pipeline qualify as simple? For some reason I've thought it is a high-performance core. The M4K is one of the smallest/simplest MIPS chips ever built. And actually all MIPS processors (back to 1985's MIPS I ISA) support two-instruction set-if-equal and set-if-not-equal sequences: xor rd, rt, rs sltiu rd, rd, 1 and: xor rd, rt, rs sltu rd, zero, rd respectively, that may still be more beneficial than any possible alternatives, especially ones involving branches. > Note I originally was the one who proposed this optimization for > PowerPC even before I saw what XLC did. See PR 10588 (which I filed 9 > years ago) and it seems we are about to fix it soon. For that -- set-if-zero and set-if-non-zero -- you can use the instructions as above (that are supported by all MIPS processors): sltiu rd, rs, 1 and sltu rd, zero, rs However GCC doesn't seem smart enough to use them well with your example. I'd expect something like: sltiu $4, $4, 1 sltiu $2, $5, 1 jr $31 or $2, $4, $2 however I get: beq $4, $0, .L3 nop jr $31 sltiu $2, $5, 1 .L3: jr $31 li $2, 1 which is never faster and obviously not smaller either. And there is really no need to avoid the second comparison as per logical OR rules here -- it's all in registers. This pessimisation is avoided for MIPS IV and more recent processors that have move-if-non-zero however (and the second comparison is always evaluated): sltiu $5, $5, 1 li $2, 1 jr $31 movn $2, $5, $4 Any chance to get it better with the fix you've mentioned? Maciej