This is the mail archive of the
mailing list for the GCC project.
Re: [PATCH]: R10000 Needs LL/SC Workaround in Gcc
Richard Sandiford wrote:
To be clear, the first option above was to check -- in mips_override_options --
that -mfix-r10000 is only used in cases where -mbranch-likely is in effect.
If we pick that option, it would be an error to use -mfix-r10000 in
other cases, and any code protected by TARGET_FIX_R10000 would be free
to use branch-likely instructions. (Actually, we should use sorry()
instead of error() to report something like this.)
That's the second option above, yes. In other words, -mfix-r10000
would support both -mbranch-likely and -mno-branch-likely, and act
So do I need to worry about modifying the asm templates at all? Or is that only
needed if pursuing option #2?
The branch-likely stuff is only going to work for MIPS-II or higher targets. In
the odd (but possible) cases where MIPS-I might be used with -mfix-r10000, I
assume we'll still have to emit 28 nops prior to a beq/beqz instruction. Is
this already taken care of someplace?
...that's a good question. My take is "no". I don't think we want
-mfix-r10000 to enable branch-likely instructions in cases where
it isn't necessary for R10000 errata. If we take the first option,
we can simply raise an error if:
Hmm, okay. Might this work to enable -mbranch-likely if -mfix-r10000? (Kind of
guessing by looking at other segments of code).
if ((target_flags_explicit & MASK_BRANCHLIKELY) == 0)
|| (!(target_flags_explicit & MASK_FIX_R10000) == 0)
|| (mips_tune_info->tune_flags & PTF_AVOID_BRANCHLIKELY) == 0))
target_flags |= MASK_BRANCHLIKELY;
target_flags &= ~MASK_BRANCHLIKELY;
My understanding so far for -mfix-r10000:
- Gets enabled if -march=r10000 is passed (done)
- Enable -mbranch-likely if not already enabled on >= MIPS-II (working on)
- Emits beqzl in the asm templates if enabled and >= MIPS-II (unsure)
- Emits 28 nops prior to beq/beqz if enabled and == MIPS-I (unsure)
- Ditto for asm templates (unsure)
- Documentation (not done)
Yeah, I was wondering that too. I did a search, but couldn't
It seems we just need to use nop only and not worry about ssnop.
"The past tempts us, the present confuses us, the future frightens us. And our
lives slip away, moment by moment, lost in that vast, terrible in-between."
--Emperor Turhan, Centauri Republic