Open tgross35 opened 3 months ago
I'm adding E-Easy because a PR that just enables support for aarch64 should be pretty easy, start around https://github.com/rust-lang/rust/blob/b54dd08a84f3c07efbc2aaf63c3df219ae680a03/compiler/rustc_hir_analysis/src/check/intrinsicck.rs#L65-L66 and massage the new types in. Actually figuring out rules for the rest of the platforms will be harder, but that can come later.
Sample for reference: https://rust.godbolt.org/z/zK4qha1qo
@rustbot label +T-compiler +E-Easy +F-f16_and_f128 +A-inline-assembly -needs-triage
@tgross35 I can try to submit a PR, can you give me some guidance?
Hi @lengrongfu, thanks for the interest!
This should be pretty easy I think. Start by making a test in tests/ui/asm/
that contains the assembly function from my original post. Make sure this fails when you run ./x t --stage 1 path/to/your/new/test.rs
.
Then just find where the error is emitted (search the codebase for "cannot use value of type") and work backwards from that until the test passes. This will probably mean adding F16
to InlineAsmType
and then chasing down errors.
We will need to make sure that this works on platforms with support (e.g. aarch64) but still fails on those without it (e.g. x86). Just focus on getting aarch64 to build first.
There is a compiler help stream on Zulip https://rust-lang.zulipchat.com/#narrow/stream/182449-t-compiler.2Fhelp feel free to ask if you get stuck! Also not a bad idea to post a draft PR as soon as you have some basic work done, even if not yet passing.
The below should work, but errors that f16 is not usable for registers:
On aarch64 the first function generates:
f16
types should be supported as a vreg on aarch64 in order to reproduce that code.The following other platforms also apparently have some level of instruction support, but are less well documented:
arm-*
,armv7-*
,aarch64-*
, https://developer.arm.com/documentation/den0024/a/Porting-to-A64/Data-typesf16
, and the SVP64 feature (which I can't find documented anywhere) adds full hardware supportx86
specifies an ABI for these types, and AVX512fp16 can use themAdditionally, for
f128
:f128
, referred to as "BFP Extended Format" in https://publibfp.dhe.ibm.com/epubs/pdf/a227832c.pdf. I am not sure if this comes with any special instructions.-Ctarget-cpu=pwr9
seems to have f128 support via instructions likexsaddqp
Tracking issue: https://github.com/rust-lang/rust/issues/116909