Floats are always returned in FPU register st0. Since the value in st0 doesn't matter in a pre-hook before the function was executed, don't try to save and restore the value of the FPU stack top for a pre-hook.
Only replace st0 after a post hook.
The custom return value was lost when calling the original function.
Save and restore our own return value, if we're about to call the original function.