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 one thing that is not rewritten is a conversion between a float and an unsigned sixty four bit integer, which is refused by name: there is no signed width that holds those values, so it is not the signed conversion anywhere, and what it is instead is a compare and a branch that this would have to write blocks for. No program in the corpus has asked for one yet.