[Top] [All Lists]

Re: [PATCH]: R10000 Needs LL/SC Workaround in Gcc

Subject: Re: [PATCH]: R10000 Needs LL/SC Workaround in Gcc
From: Kumba <>
Date: Sat, 01 Nov 2008 20:00:57 -0400
Cc: Linux MIPS List <>,
In-reply-to: <87tzargrn4.fsf@firetop.home>
Original-recipient: rfc822;
References: <> <> <87abcjibsl.fsf@firetop.home> <> <87tzargrn4.fsf@firetop.home>
User-agent: Thunderbird (Windows/20080914)
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)
          && (optimize_size
              || (!(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)

Missing anything?

Yeah, I was wondering that too.  I did a search, but couldn't
find anything.

It seems we just need to use nop only and not worry about ssnop.

Joshua Kinard

"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

<Prev in Thread] Current Thread [Next in Thread>