Follow-up to #168 (mitigated by skip-and-continue in PR #169).
The ARM register allocator hard-fails with "no consecutive pair of free registers for i64" on i64-heavy functions (e.g. compiler_builtins::float::div). PR #169 makes --all-exports skip such a function instead of aborting the module, but the function still does not compile.
Real fixes (from the #168 suggestions), in increasing order of effort:
- Spill one operand of the i64 pair to a stack slot when no consecutive pair is free (graceful degradation).
- Register-pair coalescing / pre-coloring pass for i64 values so consecutive pairs are reserved up front.
This is what unblocks actually compiling (not just skipping) f64 division and other i64-heavy compiler_builtins.
Follow-up to #168 (mitigated by skip-and-continue in PR #169).
The ARM register allocator hard-fails with "no consecutive pair of free registers for i64" on i64-heavy functions (e.g.
compiler_builtins::float::div). PR #169 makes--all-exportsskip such a function instead of aborting the module, but the function still does not compile.Real fixes (from the #168 suggestions), in increasing order of effort:
This is what unblocks actually compiling (not just skipping) f64 division and other i64-heavy
compiler_builtins.