-
Notifications
You must be signed in to change notification settings - Fork 1.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Cranelift ARM64 and Spidermonkey integration #1519
Comments
Subscribe to Label Actioncc @bnjbvr
This issue or pull request has been labeled: "cranelift"
Thus the following users have been cc'd because of the following labels:
To subscribe or unsubscribe from this label, edit the |
I'm working on a patch for the DIV by 0 and overflow issue. |
I'll take care of float-to-int conversions edge cases. edit: done in #1578 |
I can take the |
Previously, `fcopysign` was mysteriously failing to pass the `float_misc` spec test. This was tracked down to bad logical-immediate masks used to separate the sign and not-sign bits. In particular, the masks for the and-not operations were wrong. The `invert()` function on an `ImmLogic` immediate, it turns out, assumed every immediate would be used by a 64-bit instruction; `ImmLogic` immediates are subtly different for 32-bit instructions. This change tracks the instruction size (32 or 64 bits) intended for use with each such immediate, and passes it back into `maybe_from_u64` when computing the inverted immediate. Addresses one of the failures (`float_misc`) for bytecodealliance#1521 (test failures) and presumably helps bytecodealliance#1519 (SpiderMonkey integration).
I'm now looking at rotations. There are a few tricks we can steal from Spidermonkey's implementation... done => #1584 |
Re
|
Previously, `fcopysign` was mysteriously failing to pass the `float_misc` spec test. This was tracked down to bad logical-immediate masks used to separate the sign and not-sign bits. In particular, the masks for the and-not operations were wrong. The `invert()` function on an `ImmLogic` immediate, it turns out, assumed every immediate would be used by a 64-bit instruction; `ImmLogic` immediates are subtly different for 32-bit instructions. This change tracks the instruction size (32 or 64 bits) intended for use with each such immediate, and passes it back into `maybe_from_u64` when computing the inverted immediate. Addresses several of the failures (`float_misc`, `f32_bitwise`) for bytecodealliance#1521 (test failures) and presumably helps bytecodealliance#1519 (SpiderMonkey integration).
Previously, `fcopysign` was mysteriously failing to pass the `float_misc` spec test. This was tracked down to bad logical-immediate masks used to separate the sign and not-sign bits. In particular, the masks for the and-not operations were wrong. The `invert()` function on an `ImmLogic` immediate, it turns out, assumed every immediate would be used by a 64-bit instruction; `ImmLogic` immediates are subtly different for 32-bit instructions. This change tracks the instruction size (32 or 64 bits) intended for use with each such immediate, and passes it back into `maybe_from_u64` when computing the inverted immediate. Addresses several of the failures (`float_misc`, `f32_bitwise`) for bytecodealliance#1521 (test failures) and presumably helps bytecodealliance#1519 (SpiderMonkey integration).
Previously, `fcopysign` was mysteriously failing to pass the `float_misc` spec test. This was tracked down to bad logical-immediate masks used to separate the sign and not-sign bits. In particular, the masks for the and-not operations were wrong. The `invert()` function on an `ImmLogic` immediate, it turns out, assumed every immediate would be used by a 64-bit instruction; `ImmLogic` immediates are subtly different for 32-bit instructions. This change tracks the instruction size (32 or 64 bits) intended for use with each such immediate, and passes it back into `maybe_from_u64` when computing the inverted immediate. Addresses several of the failures (`float_misc`, `f32_bitwise`) for bytecodealliance#1521 (test failures) and presumably helps bytecodealliance#1519 (SpiderMonkey integration).
Confirmed that as of last Friday, Spidermonkey can run all the main tests, and only have the two remaining issues. I'll open up follow-up issues instead for both remaining items, because reftypes require a bunch of work in regalloc too, and heaps with explicit bounds checks is lower priority on arm64. RESOLVED FIXED \o/ |
Trying to keep track of all the remaining correctness issues in the new arm64 backend, found when running Spidermonkey test cases. I'll update this list as I find and understand more issues.
cc @julian-seward1 @cfallin
anyref
/ reftypes integration. This is a large item that will require additional support in regalloc.rs too.emit_all_ones_funcaddrs
setting (by putting all ones in unpatched code locations when this setting is set to true) => implement emit_all_ones_funcaddrs in new backend #1538avoid_div_traps
setting is set to true. => arm64: Implement checks in division / remainder #1585(verify?) saturating conversions must return 0 for NaN(verify?) popcnt is still incorrect for i32, see also Cranelift aarch64 backend: implement 8/16/32-bit popcnt more efficiently #1537The text was updated successfully, but these errors were encountered: