Remix.run Logo
xyzsparetimexyz 2 hours ago

What if you wrote this in a branchless way?

bool v = BLQS_CMP(x, piv);

int* ptr = v ? lwr : rwr;

*ptr = x;

ptr += int(v) * 2 - 1;

tredre3 2 hours ago | parent [-]

The ternary isn't guaranteed to be branchless. In your case it should almost always be on a modern compiler, but it really shouldn't be present in what one would call branchless code.

misev 2 hours ago | parent | next [-]

You could rewrite it to

    int* ptr = ((v != 0) * lwr) + ((v == 0) * rwr);
I doubt it would be faster than the ternary though.
xyzsparetimexyz 2 hours ago | parent | prev [-]

Does any standard library have a glsl-like select(condition, true_val, false_val) that is more or less guaranteed to correspond to a csel?