Well, the "branch-free" paradigm requires pushing a stack frame and making a jump to the passed function (requiring a pointer lookup) and a jump back to the calling function. In the branching paradigm, only one execution path requires a jump at all, and that jump is made based on an offset embedded directly into the machine code, so the additional pointer lookup is not needed.
So, I'm going to come down on the side of the traditional model being inherently more performant.
So, I'm going to come down on the side of the traditional model being inherently more performant.