https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62631
--- Comment #19 from Eric Botcazou <ebotcazou at gcc dot gnu.org> ---
> The assembly is as below on sparc64:
> f1:
> .register %g2, #scratch
> sllx %o1, 2, %g1
> mov 99, %g2
> add %o0, %g1, %o0
> sub %g2, %o1, %o1
> srl %o1, 0, %g1
> add %g1, 1, %g1
> sllx %g1, 2, %g1
> add %o0, %g1, %g1
> st %g0, [%o0]
> .LL5:
> add %o0, 4, %o0
> cmp %o0, %g1
> blu,a,pt %xcc, .LL5
> st %g0, [%o0]
> jmp %o7+8
> nop
How did you configure the compiler? We're talking about 64-bit SPARC/Solaris
and here's the code actually generated for the time being:
.type f1, #function
.proc 020
f1:
sllx %o1, 2, %g1
add %o0, %g1, %o0
.LL2:
st %g0, [%o0]
add %o1, 1, %g1
add %o0, 4, %o0
cmp %g1, 99
bleu,pt %icc, .LL2
srl %g1, 0, %o1
jmp %o7+8
nop
so it is still suboptimal, hence my generic fix.