Add a test.
Nice! Very fast. A few nits, but good to go.
This is very nitpicky, but I would, as far as enum order goes, put these with the casts below, for example, right before kBitCast (since I see these as converting complex to float). Right now, they break the abs/ceil/floor/sqrt sequence a bit. If you agree, then make sure they appear at the same place in switches.
(note that it is more grouped by function, and less so alphabetically)
also, we need to verify how (and if!) this interacts with vectorization