On Tue, 18 Nov 2014, Andrew Bennett wrote:
> Produces (for the atomic operation):
>
> .set noat
> sync
> 1:
> ll $3,0($5)
> and $1,$3,$4
> bne $1,$7,2f
> and $1,$3,$6
> or $1,$1,$8
> sc $1,0($5)
> beql $1,$0,1b
> nop
> nop
> sync
> 2:
> .set at
With a quick look at `mips_process_sync_loop' it looks to me the
other NOP is produced from here:
else if (!(required_oldval && cmp))
mips_multi_add_insn ("nop", NULL);
-- correct? If so, then can't you just make it:
else if (!(required_oldval && cmp) && !TARGET_FIX_R10000)
mips_multi_add_insn ("nop", NULL);
instead? It appears plain and simple, and if you're concerned about it
being unobvious to the casual reader, then add a one-line comment or
suchlike. It's not like TARGET_FIX_R10000 is going to imply anything
else about branches in the future (and r6 code won't run on an R10k
anyway).
Maciej