pub fn floats(func: &mut Func)Expand description
Rewrites the float instructions no rule can be written for, and leaves the rest alone.
Each of them needs a value worked out from one the pattern matched, which is the one thing the rule language deliberately cannot do. A float constant is an integer constant read as a float, and reading it is arithmetic on the immediate. A negation is an exclusive or with a mask that depends on the format. A conversion between a float and an integer is that conversion at a width the machine has, which is a width neither the pattern nor the replacement can work out.
What is left after this is a function whose float instructions are each one machine instruction, so what a rule is asked stays a table. The conversions between a float and an unsigned sixty four bit integer are the two that are not a widening or a narrowing away from a signed one, because there is no signed width that holds those values, and each gets a rewrite of its own below.