My integer version was also bad, but I get why now. The stuff I'm doing relies heavily on power of 2 integers, which compile down to a simple shift. But when I define the stuff as a function, and it's not inlined, the compiler has no way of knowing it'll be a power of 2 - So it applies the (apparently) expensive generic division.
That makes sense for integers, but doesn't the epiphany have some way to divide floats? Or is there only multiply?