This has some similarities to how you do 'vectorization' of data processing to avoid branching; you can "make decisions" with conditional expressions (y = condition ? a : b ) implemented as y = condition * a + (!condition) * b. You do have to calculate both branches, but you get the conditional result depending on that decision.