-
Notifications
You must be signed in to change notification settings - Fork 12.7k
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
mips64-unknown-linux-gnuabi64 assumes hard float support. #50890
Comments
resolves rust-lang#50890 This commit also introduces a naming scheme for soft float targets where 'sf' is appended to the end of the target to indicate a soft float target. Leaving the default target as hard float.
|
This still doesn't solve the original issue, however: For $ rustc +nightly --print target-features -Z unstable-options --target mips64-unknown-linux-muslabi64
Features supported by rustc for this target:
fp64 - Support 64-bit FP registers.
msa - Mips MSA ASE.
crt-static - Enables C Run-time Libraries to be statically linked.
Code-generation features supported by LLVM for this target:
...
nomadd4 - Disable 4-operand madd.fmt and related instructions.
nooddspreg - Disable odd numbered single-precision registers.
p5600 - The P5600 Processor.
ptr64 - Pointers are 64-bit wide.
single-float - Only supports single precision float.
soft-float - Does not support floating point instructions.
sym32 - Symbols are 32 bit on Mips64.
... And for $ rustc +nightly --print target-features -Z unstable-options --target mips64-unknown-linux-gnuabi64
Features supported by rustc for this target:
fp64 - Support 64-bit FP registers.
msa - Mips MSA ASE.
crt-static - Enables C Run-time Libraries to be statically linked.
Code-generation features supported by LLVM for this target:
...
mt - Mips MT ASE.
nan2008 - IEEE 754-2008 NaN encoding.
noabicalls - Disable SVR4-style position-independent code.
nomadd4 - Disable 4-operand madd.fmt and related instructions.
nooddspreg - Disable odd numbered single-precision registers.
p5600 - The P5600 Processor.
ptr64 - Pointers are 64-bit wide.
single-float - Only supports single precision float.
soft-float - Does not support floating point instructions.
... It's great there's a new target that supports soft-float, but the targets are supposed to be soft-float but the actual targets assume they are hard-float. |
With respect, I believe you are misinterpreting the printed output there. The code generation features supported by LLVM you mention are called "target features" and they are optional. You may toggle them on or off for compilation, and they are not necessarily inherently part of the base target definition. Like all compiler directives, they are functionally similar to Importantly: If you pass the correct flags to disable hardware floating point support (I am guessing |
Sorry I should have mentioned we used a |
I would only expect By merely enabling |
ldc1 is a MIPS FPU instruction. I'm running on a Cavium Octeon (ubiquiti edge router lite with OpenWRT) that has no FPU. Arm has a hard float target and a soft float target, does that need to be implemented here as well or should I pass some flag to LLVM?
``
The text was updated successfully, but these errors were encountered: