Florian Weimer wrote:
> On s390x, all three variants use conditional
> branches, but the first one is the shortest.

On s390x in 64-bit mode (at least with gcc-4.9), and for argument types
that are smaller than 64 bits, it is possible to avoid the conditional branches
by coding a 63-bit shift:

int lessthan1 (int a, int b)
{
  return a < b;
}

int lessthan2 (int a, int b)
{
  return - (((long long) a - (long long) b) >> 63);
}

int lessthan3 (int a, int b)
{
  return ((unsigned long long) ((long long) a - (long long) b)) >> 63;
}

lessthan2 and lessthan3 produce branch-free code.

But I would not like to put this info into _GL_CMP. Such things belong in
the compiler's machine description. Maybe a newer version of GCC already
has it? (I don't have a newer GCC on this machine.)

Bruno


Reply via email to