-
Notifications
You must be signed in to change notification settings - Fork 12.8k
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
target-feature -hard-float
for powerpc
#117347
Comments
@ecnelises @bzEq you are target maintainers for powerpc64 (which is a different arch but hopefully similar enough) so you may have opinions or know something. |
@Emilgardis The warning you see is because not all target features LLVM offers "make sense" in the Rust Cinematic Universe in terms of target features, and also we want to be able to have Rust's target features continue making sense and be something resembling supported if you e.g. use the Cranelift codegen backend (for targets that Cranelift supports). Thus we try to collect them as explicit additions to the compiler, thus we set this warning to prompt people to complain about it (and thus find out which features people actually want suport for). However, the PowerPC targets should be using hard floats by default, shouldn't they? Why are you manually configuring this feature? |
perfect, makes sense
edit: misread your question! the device we want is a openwrt router that doesn't support hardfloats, MPC8540 |
Oh, it's a negation! I somehow missed that. That makes sense. I think we'd want to support the total configuration, at least hypothetically, though it implies more exciting adventures in float ABIs. |
Wait, that has an e500 core, doesn't it?
Not the e500v2, I take it? |
@thomas725 can you correct me on the model/arch of the device you're targetting? |
We shouldn't allow any more float-ABI-affecting target features without a way to ensure ABI compatibility. Softloat and hardfloat mode are not ABI-compatible on many targets since they pass float types in different registers. Is that the case on PowerPC as well? If yes, then either they need to be two different targets, or we need to reject calling functions that take |
My initial thought was maybe we'd want powerpc (32-bit) targets to default to softfloat. |
Won't that make |
Yes. PowerPC hard float uses FPR, while soft float uses GPR.
IIUC this is to avoid linking objects compiled with different float ABIs (since Rust has no way differentiate them)? Anyway, making soft float as default for 32-bit ppc is not a good idea.. Even |
IIUC this is to avoid linking objects compiled with different float ABIs (since Rust has no way differentiate them)?
Yes. Rust has a way to differentiate them - it's target triples.
|
I know some targets (arm? riscv?) encode float ABI into their triples, which makes sense. BTW encoding float ABI in |
@Emilgardis it's a TP-Link TL-WDR4900 v1.x featuring a Freescale P1014 MPC85xx SoC. (sorry for the late response) |
perfect, that seems to be e500v1 which does have SPE instructions but doesn't feature a FPU. So, I think this issue can be closed as for our specific purpose we should use the target for that target, I think
is correct. Will have to experiment (I'll update this comment also if a better spec is needed) However, the question about |
RUSTFLAGS="-C target-feature=-crt-static,-hard-float" cargo +nightly build --release --target powerpc-unknown-linux-musl
gives the warning
while it should be supported by llvm
is the error supposed to happen or is this expected?
cc cross-rs/cross#1363
The text was updated successfully, but these errors were encountered: