Better tabselect

Torbjorn Granlund tg at
Fri Apr 12 20:10:13 CEST 2013

David Miller <davem at> writes:

  From: Torbjorn Granlund <tg at>
  Date: Fri, 12 Apr 2013 19:30:42 +0200
  > David Miller <davem at> writes:
  >   It isn't really conditional execution on sparc, the resources and
  >   timing required for the "move" instruction are constant whether the
  >   condition matches or not.
  > That's not enough.
  > It needs to have the same data-dependency behaviour too.
  > And it needs to be a documented feature, since it is easy to imagine an
  > implementation which does create different data-dependency behaviour,
  > even if all current ones do not.
  > Using carry seems safer.  Of course, it is conceivable that a
  > carry-dependent instruction could run diffferently depending on the
  > value of the carry flag, but that'd be quite strange.
  Even on a pipeline that dynamically renames the condition codes?
  You know, something we've never seen before :-)
I am not worrying mainly about WAR and WAW dependencies, but about plain
RAW dependencies.  Does the movXX read the source register or not, for a
false condition?  Does it read the destnation, or does it only write it
(for a true condition)?

If we could trust movXX to be silent, we should of course not bother to
create that mask, but replace that and the logops with 4 moveq for a
great speedup...

  > (For generic sparc64 code, we should perhaps avoid movXX for other
  > reasons too, since it interacts poorly with loads on US1-2, IIRC.)
  Now that's a more solid reason to avoid movcc.
Keeping cnd functions and tabselect side-channel silent is crucial.
(And while not specificaly designed for side-channel silence, also
mul_k, addmul_k and submul_k should be silent.)


More information about the gmp-devel mailing list