add --soft-float option - #9617

Merged
bors merged 1 commit into
rust-lang:masterfrom
crabtw:softfp
Oct 1, 2013
Merged

add --soft-float option#9617
bors merged 1 commit into
rust-lang:masterfrom
crabtw:softfp

Conversation

@crabtw

Copy link
Copy Markdown
Contributor

This change adds --soft-float option for generating
software floating point library calls.
It also implies using soft float ABI, that is the same as llc.

It is useful for targets that have no FPU.

Comment threadsrc/librustc/driver/driver.rs Outdated

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not entirely sure where soft/hard comes into play, but it seems unfortunate to add another flag to the compiler (which we try to keep to a small number).

Is this something which is more of a property of the target triple? It looks like it's on by default for MIPS, so should it always be on by default for mips? Or is it something where one triple of mips has soft floats and one triple has hard floats? Basically it'd be nice to infer soft/hard somehow instead of having to explicitly specify it.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The MIPS target of LLVM generates FPU instructions by default and there is no way to specify soft float in MIPS triple.
I enable soft float by default because I think it works on most MIPS CPUs.

I don't know what is the best way to handle this option.
Is it acceptable to hardcode softfp option in LLVMRustCreateTargetMachine like this

if (Trip.getArch() == Triple::mips) {
Options.UseSoftFloat = true;
Options.FloatABIType = FloatABI::Soft;
}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It looks like LLVM has a command-line flag for generating soft-float calls, have you tried rustc --llvm-args '-soft-float' to see if LLVM is actually picking it up from the command line?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I tried and failed. It said Unknown command line argument '-soft-float'.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hm that's unfortunate. This seems more like something we'd desire from LLVM, but perhaps they have a reason they don't have a feature/cpu flag for supporting this. I'd be more comfortable putting this behind a -Z flag than making it a first-class command line argument. I realize that -Z has recently become a bit of a "dumping ground", but this does seem like it fits better there than as a main command line parameter (although I could be wrong).

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I replaced --soft-float with -Z soft-float.

@lucab

Copy link
Copy Markdown
Contributor

At least on ARM this is shown in the triplet (eg. arm-linux-gnueabihf vs. arm-linux-gnueabi). But I couldn't find any hf ABI for mips in glibc https://sourceware.org/git/?p=glibc.git;a=blob;f=ports/sysdeps/mips/preconfigure;h=b215eb2c17a738d21b1b62404fc6e6054757d8c3;hb=HEAD

Comment threadmk/platform.mk Outdated

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can't this become part of --target-cpu or --target-feature? (Or are they passed straight to LLVM and LLVM doesn't have an option of this form to specify soft-float?)

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unfortunately, softfp of MIPS target can only be specified by TargetOptions::UseSoftFloat and this option can not be set by --target-cpu or --target-feature or other LLVM options.

This change adds -Z soft-float option for generating
software floating point library calls.
It also implies using soft float ABI, that is the same as llc.
It is useful for targets that have no FPU.
bors added a commit that referenced this pull request Oct 1, 2013
This change adds --soft-float option for generating
software floating point library calls.
It also implies using soft float ABI, that is the same as llc.
It is useful for targets that have no FPU.
@borsbors closed this Oct 1, 2013
@bors
bors merged commit 350b543 into rust-lang:masterOct 1, 2013
@alexcrichtonalexcrichton mentioned this pull request Jul 16, 2016
3 tasks
alexcrichton added a commit to alexcrichton/rust that referenced this pull request Jul 19, 2016
Right now two MIPS targets in the compiler, `mips-unknown-linux-{gnu,musl}` both
generate object files using the soft-float ABI through LLVM by default. This is
also expressed as the `-C soft-float` codegen option and otherwise isn't used
for any other target in the compiler. This option was added quite some time ago
(back in rust-lang#9617), and nowadays it's more appropriate to be done through a codegen
option.
This is motivated by rust-lang#34743 which necessitated an upgrade in the CMake
installation on our bots which necessitated an upgrade in the Ubuntu version
which invalidated the MIPS compilers we were using. The new MIPS compilers
(coming from Debian I believe) all have hard float enabled by default and soft
float support not built in. This meant that we couldn't upgrade the bots
until rust-lang#34841 landed because otherwise we would fail to compile C code as the
`-msoft-float` option wouldn't work.
Unfortunately, though, this means that once we upgrade the bots the C code we're
compiling will be compiled for hard float and the Rust code will be compiled
for soft float, a bad mismatch! This PR remedies the situation such that Rust
will compile with hard float as well.
If this lands it will likely produce broken nightlies for a day or two while we
get around to upgrading the bots because the current C toolchain only produces
soft-float binaries, and now rust will be hard-float. Hopefully, though, the
upgrade can go smoothly!
GuillaumeGomez added a commit to GuillaumeGomez/rust that referenced this pull request Jul 21, 2016
rustc: Remove soft-float from MIPS targets
Right now two MIPS targets in the compiler, `mips-unknown-linux-{gnu,musl}` both
generate object files using the soft-float ABI through LLVM by default. This is
also expressed as the `-C soft-float` codegen option and otherwise isn't used
for any other target in the compiler. This option was added quite some time ago
(back in rust-lang#9617), and nowadays it's more appropriate to be done through a codegen
option.
This is motivated by rust-lang#34743 which necessitated an upgrade in the CMake
installation on our bots which necessitated an upgrade in the Ubuntu version
which invalidated the MIPS compilers we were using. The new MIPS compilers
(coming from Debian I believe) all have hard float enabled by default and soft
float support not built in. This meant that we couldn't upgrade the bots
until rust-lang#34841 landed because otherwise we would fail to compile C code as the
`-msoft-float` option wouldn't work.
Unfortunately, though, this means that once we upgrade the bots the C code we're
compiling will be compiled for hard float and the Rust code will be compiled
for soft float, a bad mismatch! This PR remedies the situation such that Rust
will compile with hard float as well.
If this lands it will likely produce broken nightlies for a day or two while we
get around to upgrading the bots because the current C toolchain only produces
soft-float binaries, and now rust will be hard-float. Hopefully, though, the
upgrade can go smoothly!
flip1995 pushed a commit to flip1995/rust that referenced this pull request Oct 20, 2022
add `cast-nan-to-int` lint
This fixesrust-lang#371.
r? `@Alexendoo`
---
changelog: add [`cast-nan-to-int`] lint
Zalathar added a commit to Zalathar/rust that referenced this pull request Mar 20, 2026
…uwer
remove -Csoft-float
This fixesrust-lang#129893 by removing the offending flag.
The flag has been added in pre-1.0 times (rust-lang#9617) without much discussion, probably with the intent to mirror `-msoft-float` in C compilers. It never properly mirrored clang though because it only affected the LLVM float ABI setting, not the "soft-float" target feature (the clang flag sets both). It is also blatantly unsound because it affects how float arguments are passed, making it UB to invoke parts of the standard library.
The flag got deprecated with Rust 1.83 (released November 2024), and in the year since then, nobody spoke up in rust-lang#129893 to have it preserved. I think it is time to remove it. I can totally imagine us bringing back a similar flag, properly registered as a target modifier to preserve soundness, but that should come with a coherent design that works for more than one architecture (the flag only does anything on ARM).
Blocked on approval of rust-lang/compiler-team#971.
Fixesrust-lang#154106
U007D pushed a commit to U007D/rust-mos that referenced this pull request Aug 21, 2026
9637: Overhaul doc_links testing infra r=Veykril a=Veykril
and fix several issues with current implementation.
Fixesrust-lang#9617
Co-authored-by: Lukas Wirth <lukastw97@gmail.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@crabtw@lucab@alexcrichton@huonw@bors
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

add --soft-float option - #9617

Merged
bors merged 1 commit into
rust-lang:masterfrom
crabtw:softfp
Oct 1, 2013
Merged

add --soft-float option#9617
bors merged 1 commit into
rust-lang:masterfrom
crabtw:softfp

Conversation

@crabtw

Copy link
Copy Markdown
Contributor

This change adds --soft-float option for generating
software floating point library calls.
It also implies using soft float ABI, that is the same as llc.

It is useful for targets that have no FPU.

Comment threadsrc/librustc/driver/driver.rs Outdated

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not entirely sure where soft/hard comes into play, but it seems unfortunate to add another flag to the compiler (which we try to keep to a small number).

Is this something which is more of a property of the target triple? It looks like it's on by default for MIPS, so should it always be on by default for mips? Or is it something where one triple of mips has soft floats and one triple has hard floats? Basically it'd be nice to infer soft/hard somehow instead of having to explicitly specify it.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The MIPS target of LLVM generates FPU instructions by default and there is no way to specify soft float in MIPS triple.
I enable soft float by default because I think it works on most MIPS CPUs.

I don't know what is the best way to handle this option.
Is it acceptable to hardcode softfp option in LLVMRustCreateTargetMachine like this

if (Trip.getArch() == Triple::mips) {
Options.UseSoftFloat = true;
Options.FloatABIType = FloatABI::Soft;
}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It looks like LLVM has a command-line flag for generating soft-float calls, have you tried rustc --llvm-args '-soft-float' to see if LLVM is actually picking it up from the command line?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I tried and failed. It said Unknown command line argument '-soft-float'.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hm that's unfortunate. This seems more like something we'd desire from LLVM, but perhaps they have a reason they don't have a feature/cpu flag for supporting this. I'd be more comfortable putting this behind a -Z flag than making it a first-class command line argument. I realize that -Z has recently become a bit of a "dumping ground", but this does seem like it fits better there than as a main command line parameter (although I could be wrong).

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I replaced --soft-float with -Z soft-float.

@lucab

Copy link
Copy Markdown
Contributor

At least on ARM this is shown in the triplet (eg. arm-linux-gnueabihf vs. arm-linux-gnueabi). But I couldn't find any hf ABI for mips in glibc https://sourceware.org/git/?p=glibc.git;a=blob;f=ports/sysdeps/mips/preconfigure;h=b215eb2c17a738d21b1b62404fc6e6054757d8c3;hb=HEAD

Comment threadmk/platform.mk Outdated

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can't this become part of --target-cpu or --target-feature? (Or are they passed straight to LLVM and LLVM doesn't have an option of this form to specify soft-float?)

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unfortunately, softfp of MIPS target can only be specified by TargetOptions::UseSoftFloat and this option can not be set by --target-cpu or --target-feature or other LLVM options.

This change adds -Z soft-float option for generating
software floating point library calls.
It also implies using soft float ABI, that is the same as llc.
It is useful for targets that have no FPU.
bors added a commit that referenced this pull request Oct 1, 2013
This change adds --soft-float option for generating
software floating point library calls.
It also implies using soft float ABI, that is the same as llc.
It is useful for targets that have no FPU.
@borsbors closed this Oct 1, 2013
@bors
bors merged commit 350b543 into rust-lang:masterOct 1, 2013
@alexcrichtonalexcrichton mentioned this pull request Jul 16, 2016
3 tasks
alexcrichton added a commit to alexcrichton/rust that referenced this pull request Jul 19, 2016
Right now two MIPS targets in the compiler, `mips-unknown-linux-{gnu,musl}` both
generate object files using the soft-float ABI through LLVM by default. This is
also expressed as the `-C soft-float` codegen option and otherwise isn't used
for any other target in the compiler. This option was added quite some time ago
(back in rust-lang#9617), and nowadays it's more appropriate to be done through a codegen
option.
This is motivated by rust-lang#34743 which necessitated an upgrade in the CMake
installation on our bots which necessitated an upgrade in the Ubuntu version
which invalidated the MIPS compilers we were using. The new MIPS compilers
(coming from Debian I believe) all have hard float enabled by default and soft
float support not built in. This meant that we couldn't upgrade the bots
until rust-lang#34841 landed because otherwise we would fail to compile C code as the
`-msoft-float` option wouldn't work.
Unfortunately, though, this means that once we upgrade the bots the C code we're
compiling will be compiled for hard float and the Rust code will be compiled
for soft float, a bad mismatch! This PR remedies the situation such that Rust
will compile with hard float as well.
If this lands it will likely produce broken nightlies for a day or two while we
get around to upgrading the bots because the current C toolchain only produces
soft-float binaries, and now rust will be hard-float. Hopefully, though, the
upgrade can go smoothly!
GuillaumeGomez added a commit to GuillaumeGomez/rust that referenced this pull request Jul 21, 2016
rustc: Remove soft-float from MIPS targets
Right now two MIPS targets in the compiler, `mips-unknown-linux-{gnu,musl}` both
generate object files using the soft-float ABI through LLVM by default. This is
also expressed as the `-C soft-float` codegen option and otherwise isn't used
for any other target in the compiler. This option was added quite some time ago
(back in rust-lang#9617), and nowadays it's more appropriate to be done through a codegen
option.
This is motivated by rust-lang#34743 which necessitated an upgrade in the CMake
installation on our bots which necessitated an upgrade in the Ubuntu version
which invalidated the MIPS compilers we were using. The new MIPS compilers
(coming from Debian I believe) all have hard float enabled by default and soft
float support not built in. This meant that we couldn't upgrade the bots
until rust-lang#34841 landed because otherwise we would fail to compile C code as the
`-msoft-float` option wouldn't work.
Unfortunately, though, this means that once we upgrade the bots the C code we're
compiling will be compiled for hard float and the Rust code will be compiled
for soft float, a bad mismatch! This PR remedies the situation such that Rust
will compile with hard float as well.
If this lands it will likely produce broken nightlies for a day or two while we
get around to upgrading the bots because the current C toolchain only produces
soft-float binaries, and now rust will be hard-float. Hopefully, though, the
upgrade can go smoothly!
flip1995 pushed a commit to flip1995/rust that referenced this pull request Oct 20, 2022
add `cast-nan-to-int` lint
This fixesrust-lang#371.
r? `@Alexendoo`
---
changelog: add [`cast-nan-to-int`] lint
Zalathar added a commit to Zalathar/rust that referenced this pull request Mar 20, 2026
…uwer
remove -Csoft-float
This fixesrust-lang#129893 by removing the offending flag.
The flag has been added in pre-1.0 times (rust-lang#9617) without much discussion, probably with the intent to mirror `-msoft-float` in C compilers. It never properly mirrored clang though because it only affected the LLVM float ABI setting, not the "soft-float" target feature (the clang flag sets both). It is also blatantly unsound because it affects how float arguments are passed, making it UB to invoke parts of the standard library.
The flag got deprecated with Rust 1.83 (released November 2024), and in the year since then, nobody spoke up in rust-lang#129893 to have it preserved. I think it is time to remove it. I can totally imagine us bringing back a similar flag, properly registered as a target modifier to preserve soundness, but that should come with a coherent design that works for more than one architecture (the flag only does anything on ARM).
Blocked on approval of rust-lang/compiler-team#971.
Fixesrust-lang#154106
U007D pushed a commit to U007D/rust-mos that referenced this pull request Aug 21, 2026
9637: Overhaul doc_links testing infra r=Veykril a=Veykril
and fix several issues with current implementation.
Fixesrust-lang#9617
Co-authored-by: Lukas Wirth <lukastw97@gmail.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@crabtw@lucab@alexcrichton@huonw@bors
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

add --soft-float option - #9617

Merged
bors merged 1 commit into
rust-lang:masterfrom
crabtw:softfp
Oct 1, 2013
Merged

add --soft-float option#9617
bors merged 1 commit into
rust-lang:masterfrom
crabtw:softfp

Conversation

@crabtw

Copy link
Copy Markdown
Contributor

This change adds --soft-float option for generating
software floating point library calls.
It also implies using soft float ABI, that is the same as llc.

It is useful for targets that have no FPU.

Comment threadsrc/librustc/driver/driver.rs Outdated

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not entirely sure where soft/hard comes into play, but it seems unfortunate to add another flag to the compiler (which we try to keep to a small number).

Is this something which is more of a property of the target triple? It looks like it's on by default for MIPS, so should it always be on by default for mips? Or is it something where one triple of mips has soft floats and one triple has hard floats? Basically it'd be nice to infer soft/hard somehow instead of having to explicitly specify it.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The MIPS target of LLVM generates FPU instructions by default and there is no way to specify soft float in MIPS triple.
I enable soft float by default because I think it works on most MIPS CPUs.

I don't know what is the best way to handle this option.
Is it acceptable to hardcode softfp option in LLVMRustCreateTargetMachine like this

if (Trip.getArch() == Triple::mips) {
Options.UseSoftFloat = true;
Options.FloatABIType = FloatABI::Soft;
}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It looks like LLVM has a command-line flag for generating soft-float calls, have you tried rustc --llvm-args '-soft-float' to see if LLVM is actually picking it up from the command line?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I tried and failed. It said Unknown command line argument '-soft-float'.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hm that's unfortunate. This seems more like something we'd desire from LLVM, but perhaps they have a reason they don't have a feature/cpu flag for supporting this. I'd be more comfortable putting this behind a -Z flag than making it a first-class command line argument. I realize that -Z has recently become a bit of a "dumping ground", but this does seem like it fits better there than as a main command line parameter (although I could be wrong).

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I replaced --soft-float with -Z soft-float.

@lucab

Copy link
Copy Markdown
Contributor

At least on ARM this is shown in the triplet (eg. arm-linux-gnueabihf vs. arm-linux-gnueabi). But I couldn't find any hf ABI for mips in glibc https://sourceware.org/git/?p=glibc.git;a=blob;f=ports/sysdeps/mips/preconfigure;h=b215eb2c17a738d21b1b62404fc6e6054757d8c3;hb=HEAD

Comment threadmk/platform.mk Outdated

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can't this become part of --target-cpu or --target-feature? (Or are they passed straight to LLVM and LLVM doesn't have an option of this form to specify soft-float?)

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unfortunately, softfp of MIPS target can only be specified by TargetOptions::UseSoftFloat and this option can not be set by --target-cpu or --target-feature or other LLVM options.

This change adds -Z soft-float option for generating
software floating point library calls.
It also implies using soft float ABI, that is the same as llc.
It is useful for targets that have no FPU.
bors added a commit that referenced this pull request Oct 1, 2013
This change adds --soft-float option for generating
software floating point library calls.
It also implies using soft float ABI, that is the same as llc.
It is useful for targets that have no FPU.
@borsbors closed this Oct 1, 2013
@bors
bors merged commit 350b543 into rust-lang:masterOct 1, 2013
@alexcrichtonalexcrichton mentioned this pull request Jul 16, 2016
3 tasks
alexcrichton added a commit to alexcrichton/rust that referenced this pull request Jul 19, 2016
Right now two MIPS targets in the compiler, `mips-unknown-linux-{gnu,musl}` both
generate object files using the soft-float ABI through LLVM by default. This is
also expressed as the `-C soft-float` codegen option and otherwise isn't used
for any other target in the compiler. This option was added quite some time ago
(back in rust-lang#9617), and nowadays it's more appropriate to be done through a codegen
option.
This is motivated by rust-lang#34743 which necessitated an upgrade in the CMake
installation on our bots which necessitated an upgrade in the Ubuntu version
which invalidated the MIPS compilers we were using. The new MIPS compilers
(coming from Debian I believe) all have hard float enabled by default and soft
float support not built in. This meant that we couldn't upgrade the bots
until rust-lang#34841 landed because otherwise we would fail to compile C code as the
`-msoft-float` option wouldn't work.
Unfortunately, though, this means that once we upgrade the bots the C code we're
compiling will be compiled for hard float and the Rust code will be compiled
for soft float, a bad mismatch! This PR remedies the situation such that Rust
will compile with hard float as well.
If this lands it will likely produce broken nightlies for a day or two while we
get around to upgrading the bots because the current C toolchain only produces
soft-float binaries, and now rust will be hard-float. Hopefully, though, the
upgrade can go smoothly!
GuillaumeGomez added a commit to GuillaumeGomez/rust that referenced this pull request Jul 21, 2016
rustc: Remove soft-float from MIPS targets
Right now two MIPS targets in the compiler, `mips-unknown-linux-{gnu,musl}` both
generate object files using the soft-float ABI through LLVM by default. This is
also expressed as the `-C soft-float` codegen option and otherwise isn't used
for any other target in the compiler. This option was added quite some time ago
(back in rust-lang#9617), and nowadays it's more appropriate to be done through a codegen
option.
This is motivated by rust-lang#34743 which necessitated an upgrade in the CMake
installation on our bots which necessitated an upgrade in the Ubuntu version
which invalidated the MIPS compilers we were using. The new MIPS compilers
(coming from Debian I believe) all have hard float enabled by default and soft
float support not built in. This meant that we couldn't upgrade the bots
until rust-lang#34841 landed because otherwise we would fail to compile C code as the
`-msoft-float` option wouldn't work.
Unfortunately, though, this means that once we upgrade the bots the C code we're
compiling will be compiled for hard float and the Rust code will be compiled
for soft float, a bad mismatch! This PR remedies the situation such that Rust
will compile with hard float as well.
If this lands it will likely produce broken nightlies for a day or two while we
get around to upgrading the bots because the current C toolchain only produces
soft-float binaries, and now rust will be hard-float. Hopefully, though, the
upgrade can go smoothly!
flip1995 pushed a commit to flip1995/rust that referenced this pull request Oct 20, 2022
add `cast-nan-to-int` lint
This fixesrust-lang#371.
r? `@Alexendoo`
---
changelog: add [`cast-nan-to-int`] lint
Zalathar added a commit to Zalathar/rust that referenced this pull request Mar 20, 2026
…uwer
remove -Csoft-float
This fixesrust-lang#129893 by removing the offending flag.
The flag has been added in pre-1.0 times (rust-lang#9617) without much discussion, probably with the intent to mirror `-msoft-float` in C compilers. It never properly mirrored clang though because it only affected the LLVM float ABI setting, not the "soft-float" target feature (the clang flag sets both). It is also blatantly unsound because it affects how float arguments are passed, making it UB to invoke parts of the standard library.
The flag got deprecated with Rust 1.83 (released November 2024), and in the year since then, nobody spoke up in rust-lang#129893 to have it preserved. I think it is time to remove it. I can totally imagine us bringing back a similar flag, properly registered as a target modifier to preserve soundness, but that should come with a coherent design that works for more than one architecture (the flag only does anything on ARM).
Blocked on approval of rust-lang/compiler-team#971.
Fixesrust-lang#154106
U007D pushed a commit to U007D/rust-mos that referenced this pull request Aug 21, 2026
9637: Overhaul doc_links testing infra r=Veykril a=Veykril
and fix several issues with current implementation.
Fixesrust-lang#9617
Co-authored-by: Lukas Wirth <lukastw97@gmail.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@crabtw@lucab@alexcrichton@huonw@bors
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

add --soft-float option - #9617

Merged
bors merged 1 commit into
rust-lang:masterfrom
crabtw:softfp
Oct 1, 2013
Merged

add --soft-float option#9617
bors merged 1 commit into
rust-lang:masterfrom
crabtw:softfp

Conversation

@crabtw

Copy link
Copy Markdown
Contributor

This change adds --soft-float option for generating
software floating point library calls.
It also implies using soft float ABI, that is the same as llc.

It is useful for targets that have no FPU.

Comment threadsrc/librustc/driver/driver.rs Outdated

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not entirely sure where soft/hard comes into play, but it seems unfortunate to add another flag to the compiler (which we try to keep to a small number).

Is this something which is more of a property of the target triple? It looks like it's on by default for MIPS, so should it always be on by default for mips? Or is it something where one triple of mips has soft floats and one triple has hard floats? Basically it'd be nice to infer soft/hard somehow instead of having to explicitly specify it.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The MIPS target of LLVM generates FPU instructions by default and there is no way to specify soft float in MIPS triple.
I enable soft float by default because I think it works on most MIPS CPUs.

I don't know what is the best way to handle this option.
Is it acceptable to hardcode softfp option in LLVMRustCreateTargetMachine like this

if (Trip.getArch() == Triple::mips) {
Options.UseSoftFloat = true;
Options.FloatABIType = FloatABI::Soft;
}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It looks like LLVM has a command-line flag for generating soft-float calls, have you tried rustc --llvm-args '-soft-float' to see if LLVM is actually picking it up from the command line?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I tried and failed. It said Unknown command line argument '-soft-float'.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hm that's unfortunate. This seems more like something we'd desire from LLVM, but perhaps they have a reason they don't have a feature/cpu flag for supporting this. I'd be more comfortable putting this behind a -Z flag than making it a first-class command line argument. I realize that -Z has recently become a bit of a "dumping ground", but this does seem like it fits better there than as a main command line parameter (although I could be wrong).

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I replaced --soft-float with -Z soft-float.

@lucab

Copy link
Copy Markdown
Contributor

At least on ARM this is shown in the triplet (eg. arm-linux-gnueabihf vs. arm-linux-gnueabi). But I couldn't find any hf ABI for mips in glibc https://sourceware.org/git/?p=glibc.git;a=blob;f=ports/sysdeps/mips/preconfigure;h=b215eb2c17a738d21b1b62404fc6e6054757d8c3;hb=HEAD

Comment threadmk/platform.mk Outdated

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can't this become part of --target-cpu or --target-feature? (Or are they passed straight to LLVM and LLVM doesn't have an option of this form to specify soft-float?)

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unfortunately, softfp of MIPS target can only be specified by TargetOptions::UseSoftFloat and this option can not be set by --target-cpu or --target-feature or other LLVM options.

This change adds -Z soft-float option for generating
software floating point library calls.
It also implies using soft float ABI, that is the same as llc.
It is useful for targets that have no FPU.
bors added a commit that referenced this pull request Oct 1, 2013
This change adds --soft-float option for generating
software floating point library calls.
It also implies using soft float ABI, that is the same as llc.
It is useful for targets that have no FPU.
@borsbors closed this Oct 1, 2013
@bors
bors merged commit 350b543 into rust-lang:masterOct 1, 2013
@alexcrichtonalexcrichton mentioned this pull request Jul 16, 2016
3 tasks
alexcrichton added a commit to alexcrichton/rust that referenced this pull request Jul 19, 2016
Right now two MIPS targets in the compiler, `mips-unknown-linux-{gnu,musl}` both
generate object files using the soft-float ABI through LLVM by default. This is
also expressed as the `-C soft-float` codegen option and otherwise isn't used
for any other target in the compiler. This option was added quite some time ago
(back in rust-lang#9617), and nowadays it's more appropriate to be done through a codegen
option.
This is motivated by rust-lang#34743 which necessitated an upgrade in the CMake
installation on our bots which necessitated an upgrade in the Ubuntu version
which invalidated the MIPS compilers we were using. The new MIPS compilers
(coming from Debian I believe) all have hard float enabled by default and soft
float support not built in. This meant that we couldn't upgrade the bots
until rust-lang#34841 landed because otherwise we would fail to compile C code as the
`-msoft-float` option wouldn't work.
Unfortunately, though, this means that once we upgrade the bots the C code we're
compiling will be compiled for hard float and the Rust code will be compiled
for soft float, a bad mismatch! This PR remedies the situation such that Rust
will compile with hard float as well.
If this lands it will likely produce broken nightlies for a day or two while we
get around to upgrading the bots because the current C toolchain only produces
soft-float binaries, and now rust will be hard-float. Hopefully, though, the
upgrade can go smoothly!
GuillaumeGomez added a commit to GuillaumeGomez/rust that referenced this pull request Jul 21, 2016
rustc: Remove soft-float from MIPS targets
Right now two MIPS targets in the compiler, `mips-unknown-linux-{gnu,musl}` both
generate object files using the soft-float ABI through LLVM by default. This is
also expressed as the `-C soft-float` codegen option and otherwise isn't used
for any other target in the compiler. This option was added quite some time ago
(back in rust-lang#9617), and nowadays it's more appropriate to be done through a codegen
option.
This is motivated by rust-lang#34743 which necessitated an upgrade in the CMake
installation on our bots which necessitated an upgrade in the Ubuntu version
which invalidated the MIPS compilers we were using. The new MIPS compilers
(coming from Debian I believe) all have hard float enabled by default and soft
float support not built in. This meant that we couldn't upgrade the bots
until rust-lang#34841 landed because otherwise we would fail to compile C code as the
`-msoft-float` option wouldn't work.
Unfortunately, though, this means that once we upgrade the bots the C code we're
compiling will be compiled for hard float and the Rust code will be compiled
for soft float, a bad mismatch! This PR remedies the situation such that Rust
will compile with hard float as well.
If this lands it will likely produce broken nightlies for a day or two while we
get around to upgrading the bots because the current C toolchain only produces
soft-float binaries, and now rust will be hard-float. Hopefully, though, the
upgrade can go smoothly!
flip1995 pushed a commit to flip1995/rust that referenced this pull request Oct 20, 2022
add `cast-nan-to-int` lint
This fixesrust-lang#371.
r? `@Alexendoo`
---
changelog: add [`cast-nan-to-int`] lint
Zalathar added a commit to Zalathar/rust that referenced this pull request Mar 20, 2026
…uwer
remove -Csoft-float
This fixesrust-lang#129893 by removing the offending flag.
The flag has been added in pre-1.0 times (rust-lang#9617) without much discussion, probably with the intent to mirror `-msoft-float` in C compilers. It never properly mirrored clang though because it only affected the LLVM float ABI setting, not the "soft-float" target feature (the clang flag sets both). It is also blatantly unsound because it affects how float arguments are passed, making it UB to invoke parts of the standard library.
The flag got deprecated with Rust 1.83 (released November 2024), and in the year since then, nobody spoke up in rust-lang#129893 to have it preserved. I think it is time to remove it. I can totally imagine us bringing back a similar flag, properly registered as a target modifier to preserve soundness, but that should come with a coherent design that works for more than one architecture (the flag only does anything on ARM).
Blocked on approval of rust-lang/compiler-team#971.
Fixesrust-lang#154106
U007D pushed a commit to U007D/rust-mos that referenced this pull request Aug 21, 2026
9637: Overhaul doc_links testing infra r=Veykril a=Veykril
and fix several issues with current implementation.
Fixesrust-lang#9617
Co-authored-by: Lukas Wirth <lukastw97@gmail.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@crabtw@lucab@alexcrichton@huonw@bors
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

add --soft-float option - #9617

Merged
bors merged 1 commit into
rust-lang:masterfrom
crabtw:softfp
Oct 1, 2013
Merged

add --soft-float option#9617
bors merged 1 commit into
rust-lang:masterfrom
crabtw:softfp

Conversation

@crabtw

Copy link
Copy Markdown
Contributor

This change adds --soft-float option for generating
software floating point library calls.
It also implies using soft float ABI, that is the same as llc.

It is useful for targets that have no FPU.

Comment threadsrc/librustc/driver/driver.rs Outdated

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not entirely sure where soft/hard comes into play, but it seems unfortunate to add another flag to the compiler (which we try to keep to a small number).

Is this something which is more of a property of the target triple? It looks like it's on by default for MIPS, so should it always be on by default for mips? Or is it something where one triple of mips has soft floats and one triple has hard floats? Basically it'd be nice to infer soft/hard somehow instead of having to explicitly specify it.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The MIPS target of LLVM generates FPU instructions by default and there is no way to specify soft float in MIPS triple.
I enable soft float by default because I think it works on most MIPS CPUs.

I don't know what is the best way to handle this option.
Is it acceptable to hardcode softfp option in LLVMRustCreateTargetMachine like this

if (Trip.getArch() == Triple::mips) {
Options.UseSoftFloat = true;
Options.FloatABIType = FloatABI::Soft;
}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It looks like LLVM has a command-line flag for generating soft-float calls, have you tried rustc --llvm-args '-soft-float' to see if LLVM is actually picking it up from the command line?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I tried and failed. It said Unknown command line argument '-soft-float'.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hm that's unfortunate. This seems more like something we'd desire from LLVM, but perhaps they have a reason they don't have a feature/cpu flag for supporting this. I'd be more comfortable putting this behind a -Z flag than making it a first-class command line argument. I realize that -Z has recently become a bit of a "dumping ground", but this does seem like it fits better there than as a main command line parameter (although I could be wrong).

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I replaced --soft-float with -Z soft-float.

@lucab

Copy link
Copy Markdown
Contributor

At least on ARM this is shown in the triplet (eg. arm-linux-gnueabihf vs. arm-linux-gnueabi). But I couldn't find any hf ABI for mips in glibc https://sourceware.org/git/?p=glibc.git;a=blob;f=ports/sysdeps/mips/preconfigure;h=b215eb2c17a738d21b1b62404fc6e6054757d8c3;hb=HEAD

Comment threadmk/platform.mk Outdated

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can't this become part of --target-cpu or --target-feature? (Or are they passed straight to LLVM and LLVM doesn't have an option of this form to specify soft-float?)

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unfortunately, softfp of MIPS target can only be specified by TargetOptions::UseSoftFloat and this option can not be set by --target-cpu or --target-feature or other LLVM options.

This change adds -Z soft-float option for generating
software floating point library calls.
It also implies using soft float ABI, that is the same as llc.
It is useful for targets that have no FPU.
bors added a commit that referenced this pull request Oct 1, 2013
This change adds --soft-float option for generating
software floating point library calls.
It also implies using soft float ABI, that is the same as llc.
It is useful for targets that have no FPU.
@borsbors closed this Oct 1, 2013
@bors
bors merged commit 350b543 into rust-lang:masterOct 1, 2013
@alexcrichtonalexcrichton mentioned this pull request Jul 16, 2016
3 tasks
alexcrichton added a commit to alexcrichton/rust that referenced this pull request Jul 19, 2016
Right now two MIPS targets in the compiler, `mips-unknown-linux-{gnu,musl}` both
generate object files using the soft-float ABI through LLVM by default. This is
also expressed as the `-C soft-float` codegen option and otherwise isn't used
for any other target in the compiler. This option was added quite some time ago
(back in rust-lang#9617), and nowadays it's more appropriate to be done through a codegen
option.
This is motivated by rust-lang#34743 which necessitated an upgrade in the CMake
installation on our bots which necessitated an upgrade in the Ubuntu version
which invalidated the MIPS compilers we were using. The new MIPS compilers
(coming from Debian I believe) all have hard float enabled by default and soft
float support not built in. This meant that we couldn't upgrade the bots
until rust-lang#34841 landed because otherwise we would fail to compile C code as the
`-msoft-float` option wouldn't work.
Unfortunately, though, this means that once we upgrade the bots the C code we're
compiling will be compiled for hard float and the Rust code will be compiled
for soft float, a bad mismatch! This PR remedies the situation such that Rust
will compile with hard float as well.
If this lands it will likely produce broken nightlies for a day or two while we
get around to upgrading the bots because the current C toolchain only produces
soft-float binaries, and now rust will be hard-float. Hopefully, though, the
upgrade can go smoothly!
GuillaumeGomez added a commit to GuillaumeGomez/rust that referenced this pull request Jul 21, 2016
rustc: Remove soft-float from MIPS targets
Right now two MIPS targets in the compiler, `mips-unknown-linux-{gnu,musl}` both
generate object files using the soft-float ABI through LLVM by default. This is
also expressed as the `-C soft-float` codegen option and otherwise isn't used
for any other target in the compiler. This option was added quite some time ago
(back in rust-lang#9617), and nowadays it's more appropriate to be done through a codegen
option.
This is motivated by rust-lang#34743 which necessitated an upgrade in the CMake
installation on our bots which necessitated an upgrade in the Ubuntu version
which invalidated the MIPS compilers we were using. The new MIPS compilers
(coming from Debian I believe) all have hard float enabled by default and soft
float support not built in. This meant that we couldn't upgrade the bots
until rust-lang#34841 landed because otherwise we would fail to compile C code as the
`-msoft-float` option wouldn't work.
Unfortunately, though, this means that once we upgrade the bots the C code we're
compiling will be compiled for hard float and the Rust code will be compiled
for soft float, a bad mismatch! This PR remedies the situation such that Rust
will compile with hard float as well.
If this lands it will likely produce broken nightlies for a day or two while we
get around to upgrading the bots because the current C toolchain only produces
soft-float binaries, and now rust will be hard-float. Hopefully, though, the
upgrade can go smoothly!
flip1995 pushed a commit to flip1995/rust that referenced this pull request Oct 20, 2022
add `cast-nan-to-int` lint
This fixesrust-lang#371.
r? `@Alexendoo`
---
changelog: add [`cast-nan-to-int`] lint
Zalathar added a commit to Zalathar/rust that referenced this pull request Mar 20, 2026
…uwer
remove -Csoft-float
This fixesrust-lang#129893 by removing the offending flag.
The flag has been added in pre-1.0 times (rust-lang#9617) without much discussion, probably with the intent to mirror `-msoft-float` in C compilers. It never properly mirrored clang though because it only affected the LLVM float ABI setting, not the "soft-float" target feature (the clang flag sets both). It is also blatantly unsound because it affects how float arguments are passed, making it UB to invoke parts of the standard library.
The flag got deprecated with Rust 1.83 (released November 2024), and in the year since then, nobody spoke up in rust-lang#129893 to have it preserved. I think it is time to remove it. I can totally imagine us bringing back a similar flag, properly registered as a target modifier to preserve soundness, but that should come with a coherent design that works for more than one architecture (the flag only does anything on ARM).
Blocked on approval of rust-lang/compiler-team#971.
Fixesrust-lang#154106
U007D pushed a commit to U007D/rust-mos that referenced this pull request Aug 21, 2026
9637: Overhaul doc_links testing infra r=Veykril a=Veykril
and fix several issues with current implementation.
Fixesrust-lang#9617
Co-authored-by: Lukas Wirth <lukastw97@gmail.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@crabtw@lucab@alexcrichton@huonw@bors
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

add --soft-float option - #9617

Merged
bors merged 1 commit into
rust-lang:masterfrom
crabtw:softfp
Oct 1, 2013
Merged

add --soft-float option#9617
bors merged 1 commit into
rust-lang:masterfrom
crabtw:softfp

Conversation

@crabtw

Copy link
Copy Markdown
Contributor

This change adds --soft-float option for generating
software floating point library calls.
It also implies using soft float ABI, that is the same as llc.

It is useful for targets that have no FPU.

Comment threadsrc/librustc/driver/driver.rs Outdated

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not entirely sure where soft/hard comes into play, but it seems unfortunate to add another flag to the compiler (which we try to keep to a small number).

Is this something which is more of a property of the target triple? It looks like it's on by default for MIPS, so should it always be on by default for mips? Or is it something where one triple of mips has soft floats and one triple has hard floats? Basically it'd be nice to infer soft/hard somehow instead of having to explicitly specify it.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The MIPS target of LLVM generates FPU instructions by default and there is no way to specify soft float in MIPS triple.
I enable soft float by default because I think it works on most MIPS CPUs.

I don't know what is the best way to handle this option.
Is it acceptable to hardcode softfp option in LLVMRustCreateTargetMachine like this

if (Trip.getArch() == Triple::mips) {
Options.UseSoftFloat = true;
Options.FloatABIType = FloatABI::Soft;
}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It looks like LLVM has a command-line flag for generating soft-float calls, have you tried rustc --llvm-args '-soft-float' to see if LLVM is actually picking it up from the command line?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I tried and failed. It said Unknown command line argument '-soft-float'.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hm that's unfortunate. This seems more like something we'd desire from LLVM, but perhaps they have a reason they don't have a feature/cpu flag for supporting this. I'd be more comfortable putting this behind a -Z flag than making it a first-class command line argument. I realize that -Z has recently become a bit of a "dumping ground", but this does seem like it fits better there than as a main command line parameter (although I could be wrong).

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I replaced --soft-float with -Z soft-float.

@lucab

Copy link
Copy Markdown
Contributor

At least on ARM this is shown in the triplet (eg. arm-linux-gnueabihf vs. arm-linux-gnueabi). But I couldn't find any hf ABI for mips in glibc https://sourceware.org/git/?p=glibc.git;a=blob;f=ports/sysdeps/mips/preconfigure;h=b215eb2c17a738d21b1b62404fc6e6054757d8c3;hb=HEAD

Comment threadmk/platform.mk Outdated

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can't this become part of --target-cpu or --target-feature? (Or are they passed straight to LLVM and LLVM doesn't have an option of this form to specify soft-float?)

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unfortunately, softfp of MIPS target can only be specified by TargetOptions::UseSoftFloat and this option can not be set by --target-cpu or --target-feature or other LLVM options.

This change adds -Z soft-float option for generating
software floating point library calls.
It also implies using soft float ABI, that is the same as llc.
It is useful for targets that have no FPU.
bors added a commit that referenced this pull request Oct 1, 2013
This change adds --soft-float option for generating
software floating point library calls.
It also implies using soft float ABI, that is the same as llc.
It is useful for targets that have no FPU.
@borsbors closed this Oct 1, 2013
@bors
bors merged commit 350b543 into rust-lang:masterOct 1, 2013
@alexcrichtonalexcrichton mentioned this pull request Jul 16, 2016
3 tasks
alexcrichton added a commit to alexcrichton/rust that referenced this pull request Jul 19, 2016
Right now two MIPS targets in the compiler, `mips-unknown-linux-{gnu,musl}` both
generate object files using the soft-float ABI through LLVM by default. This is
also expressed as the `-C soft-float` codegen option and otherwise isn't used
for any other target in the compiler. This option was added quite some time ago
(back in rust-lang#9617), and nowadays it's more appropriate to be done through a codegen
option.
This is motivated by rust-lang#34743 which necessitated an upgrade in the CMake
installation on our bots which necessitated an upgrade in the Ubuntu version
which invalidated the MIPS compilers we were using. The new MIPS compilers
(coming from Debian I believe) all have hard float enabled by default and soft
float support not built in. This meant that we couldn't upgrade the bots
until rust-lang#34841 landed because otherwise we would fail to compile C code as the
`-msoft-float` option wouldn't work.
Unfortunately, though, this means that once we upgrade the bots the C code we're
compiling will be compiled for hard float and the Rust code will be compiled
for soft float, a bad mismatch! This PR remedies the situation such that Rust
will compile with hard float as well.
If this lands it will likely produce broken nightlies for a day or two while we
get around to upgrading the bots because the current C toolchain only produces
soft-float binaries, and now rust will be hard-float. Hopefully, though, the
upgrade can go smoothly!
GuillaumeGomez added a commit to GuillaumeGomez/rust that referenced this pull request Jul 21, 2016
rustc: Remove soft-float from MIPS targets
Right now two MIPS targets in the compiler, `mips-unknown-linux-{gnu,musl}` both
generate object files using the soft-float ABI through LLVM by default. This is
also expressed as the `-C soft-float` codegen option and otherwise isn't used
for any other target in the compiler. This option was added quite some time ago
(back in rust-lang#9617), and nowadays it's more appropriate to be done through a codegen
option.
This is motivated by rust-lang#34743 which necessitated an upgrade in the CMake
installation on our bots which necessitated an upgrade in the Ubuntu version
which invalidated the MIPS compilers we were using. The new MIPS compilers
(coming from Debian I believe) all have hard float enabled by default and soft
float support not built in. This meant that we couldn't upgrade the bots
until rust-lang#34841 landed because otherwise we would fail to compile C code as the
`-msoft-float` option wouldn't work.
Unfortunately, though, this means that once we upgrade the bots the C code we're
compiling will be compiled for hard float and the Rust code will be compiled
for soft float, a bad mismatch! This PR remedies the situation such that Rust
will compile with hard float as well.
If this lands it will likely produce broken nightlies for a day or two while we
get around to upgrading the bots because the current C toolchain only produces
soft-float binaries, and now rust will be hard-float. Hopefully, though, the
upgrade can go smoothly!
flip1995 pushed a commit to flip1995/rust that referenced this pull request Oct 20, 2022
add `cast-nan-to-int` lint
This fixesrust-lang#371.
r? `@Alexendoo`
---
changelog: add [`cast-nan-to-int`] lint
Zalathar added a commit to Zalathar/rust that referenced this pull request Mar 20, 2026
…uwer
remove -Csoft-float
This fixesrust-lang#129893 by removing the offending flag.
The flag has been added in pre-1.0 times (rust-lang#9617) without much discussion, probably with the intent to mirror `-msoft-float` in C compilers. It never properly mirrored clang though because it only affected the LLVM float ABI setting, not the "soft-float" target feature (the clang flag sets both). It is also blatantly unsound because it affects how float arguments are passed, making it UB to invoke parts of the standard library.
The flag got deprecated with Rust 1.83 (released November 2024), and in the year since then, nobody spoke up in rust-lang#129893 to have it preserved. I think it is time to remove it. I can totally imagine us bringing back a similar flag, properly registered as a target modifier to preserve soundness, but that should come with a coherent design that works for more than one architecture (the flag only does anything on ARM).
Blocked on approval of rust-lang/compiler-team#971.
Fixesrust-lang#154106
U007D pushed a commit to U007D/rust-mos that referenced this pull request Aug 21, 2026
9637: Overhaul doc_links testing infra r=Veykril a=Veykril
and fix several issues with current implementation.
Fixesrust-lang#9617
Co-authored-by: Lukas Wirth <lukastw97@gmail.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@crabtw@lucab@alexcrichton@huonw@bors
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

add --soft-float option - #9617

Merged
bors merged 1 commit into
rust-lang:masterfrom
crabtw:softfp
Oct 1, 2013
Merged

add --soft-float option#9617
bors merged 1 commit into
rust-lang:masterfrom
crabtw:softfp

Conversation

@crabtw

Copy link
Copy Markdown
Contributor

This change adds --soft-float option for generating
software floating point library calls.
It also implies using soft float ABI, that is the same as llc.

It is useful for targets that have no FPU.

Comment threadsrc/librustc/driver/driver.rs Outdated

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not entirely sure where soft/hard comes into play, but it seems unfortunate to add another flag to the compiler (which we try to keep to a small number).

Is this something which is more of a property of the target triple? It looks like it's on by default for MIPS, so should it always be on by default for mips? Or is it something where one triple of mips has soft floats and one triple has hard floats? Basically it'd be nice to infer soft/hard somehow instead of having to explicitly specify it.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The MIPS target of LLVM generates FPU instructions by default and there is no way to specify soft float in MIPS triple.
I enable soft float by default because I think it works on most MIPS CPUs.

I don't know what is the best way to handle this option.
Is it acceptable to hardcode softfp option in LLVMRustCreateTargetMachine like this

if (Trip.getArch() == Triple::mips) {
Options.UseSoftFloat = true;
Options.FloatABIType = FloatABI::Soft;
}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It looks like LLVM has a command-line flag for generating soft-float calls, have you tried rustc --llvm-args '-soft-float' to see if LLVM is actually picking it up from the command line?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I tried and failed. It said Unknown command line argument '-soft-float'.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hm that's unfortunate. This seems more like something we'd desire from LLVM, but perhaps they have a reason they don't have a feature/cpu flag for supporting this. I'd be more comfortable putting this behind a -Z flag than making it a first-class command line argument. I realize that -Z has recently become a bit of a "dumping ground", but this does seem like it fits better there than as a main command line parameter (although I could be wrong).

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I replaced --soft-float with -Z soft-float.

@lucab

Copy link
Copy Markdown
Contributor

At least on ARM this is shown in the triplet (eg. arm-linux-gnueabihf vs. arm-linux-gnueabi). But I couldn't find any hf ABI for mips in glibc https://sourceware.org/git/?p=glibc.git;a=blob;f=ports/sysdeps/mips/preconfigure;h=b215eb2c17a738d21b1b62404fc6e6054757d8c3;hb=HEAD

Comment threadmk/platform.mk Outdated

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can't this become part of --target-cpu or --target-feature? (Or are they passed straight to LLVM and LLVM doesn't have an option of this form to specify soft-float?)

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unfortunately, softfp of MIPS target can only be specified by TargetOptions::UseSoftFloat and this option can not be set by --target-cpu or --target-feature or other LLVM options.

This change adds -Z soft-float option for generating
software floating point library calls.
It also implies using soft float ABI, that is the same as llc.
It is useful for targets that have no FPU.
bors added a commit that referenced this pull request Oct 1, 2013
This change adds --soft-float option for generating
software floating point library calls.
It also implies using soft float ABI, that is the same as llc.
It is useful for targets that have no FPU.
@borsbors closed this Oct 1, 2013
@bors
bors merged commit 350b543 into rust-lang:masterOct 1, 2013
@alexcrichtonalexcrichton mentioned this pull request Jul 16, 2016
3 tasks
alexcrichton added a commit to alexcrichton/rust that referenced this pull request Jul 19, 2016
Right now two MIPS targets in the compiler, `mips-unknown-linux-{gnu,musl}` both
generate object files using the soft-float ABI through LLVM by default. This is
also expressed as the `-C soft-float` codegen option and otherwise isn't used
for any other target in the compiler. This option was added quite some time ago
(back in rust-lang#9617), and nowadays it's more appropriate to be done through a codegen
option.
This is motivated by rust-lang#34743 which necessitated an upgrade in the CMake
installation on our bots which necessitated an upgrade in the Ubuntu version
which invalidated the MIPS compilers we were using. The new MIPS compilers
(coming from Debian I believe) all have hard float enabled by default and soft
float support not built in. This meant that we couldn't upgrade the bots
until rust-lang#34841 landed because otherwise we would fail to compile C code as the
`-msoft-float` option wouldn't work.
Unfortunately, though, this means that once we upgrade the bots the C code we're
compiling will be compiled for hard float and the Rust code will be compiled
for soft float, a bad mismatch! This PR remedies the situation such that Rust
will compile with hard float as well.
If this lands it will likely produce broken nightlies for a day or two while we
get around to upgrading the bots because the current C toolchain only produces
soft-float binaries, and now rust will be hard-float. Hopefully, though, the
upgrade can go smoothly!
GuillaumeGomez added a commit to GuillaumeGomez/rust that referenced this pull request Jul 21, 2016
rustc: Remove soft-float from MIPS targets
Right now two MIPS targets in the compiler, `mips-unknown-linux-{gnu,musl}` both
generate object files using the soft-float ABI through LLVM by default. This is
also expressed as the `-C soft-float` codegen option and otherwise isn't used
for any other target in the compiler. This option was added quite some time ago
(back in rust-lang#9617), and nowadays it's more appropriate to be done through a codegen
option.
This is motivated by rust-lang#34743 which necessitated an upgrade in the CMake
installation on our bots which necessitated an upgrade in the Ubuntu version
which invalidated the MIPS compilers we were using. The new MIPS compilers
(coming from Debian I believe) all have hard float enabled by default and soft
float support not built in. This meant that we couldn't upgrade the bots
until rust-lang#34841 landed because otherwise we would fail to compile C code as the
`-msoft-float` option wouldn't work.
Unfortunately, though, this means that once we upgrade the bots the C code we're
compiling will be compiled for hard float and the Rust code will be compiled
for soft float, a bad mismatch! This PR remedies the situation such that Rust
will compile with hard float as well.
If this lands it will likely produce broken nightlies for a day or two while we
get around to upgrading the bots because the current C toolchain only produces
soft-float binaries, and now rust will be hard-float. Hopefully, though, the
upgrade can go smoothly!
flip1995 pushed a commit to flip1995/rust that referenced this pull request Oct 20, 2022
add `cast-nan-to-int` lint
This fixesrust-lang#371.
r? `@Alexendoo`
---
changelog: add [`cast-nan-to-int`] lint
Zalathar added a commit to Zalathar/rust that referenced this pull request Mar 20, 2026
…uwer
remove -Csoft-float
This fixesrust-lang#129893 by removing the offending flag.
The flag has been added in pre-1.0 times (rust-lang#9617) without much discussion, probably with the intent to mirror `-msoft-float` in C compilers. It never properly mirrored clang though because it only affected the LLVM float ABI setting, not the "soft-float" target feature (the clang flag sets both). It is also blatantly unsound because it affects how float arguments are passed, making it UB to invoke parts of the standard library.
The flag got deprecated with Rust 1.83 (released November 2024), and in the year since then, nobody spoke up in rust-lang#129893 to have it preserved. I think it is time to remove it. I can totally imagine us bringing back a similar flag, properly registered as a target modifier to preserve soundness, but that should come with a coherent design that works for more than one architecture (the flag only does anything on ARM).
Blocked on approval of rust-lang/compiler-team#971.
Fixesrust-lang#154106
U007D pushed a commit to U007D/rust-mos that referenced this pull request Aug 21, 2026
9637: Overhaul doc_links testing infra r=Veykril a=Veykril
and fix several issues with current implementation.
Fixesrust-lang#9617
Co-authored-by: Lukas Wirth <lukastw97@gmail.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@crabtw@lucab@alexcrichton@huonw@bors
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

add --soft-float option - #9617

Merged
bors merged 1 commit into
rust-lang:masterfrom
crabtw:softfp
Oct 1, 2013
Merged

add --soft-float option#9617
bors merged 1 commit into
rust-lang:masterfrom
crabtw:softfp

Conversation

@crabtw

Copy link
Copy Markdown
Contributor

This change adds --soft-float option for generating
software floating point library calls.
It also implies using soft float ABI, that is the same as llc.

It is useful for targets that have no FPU.

Comment threadsrc/librustc/driver/driver.rs Outdated

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not entirely sure where soft/hard comes into play, but it seems unfortunate to add another flag to the compiler (which we try to keep to a small number).

Is this something which is more of a property of the target triple? It looks like it's on by default for MIPS, so should it always be on by default for mips? Or is it something where one triple of mips has soft floats and one triple has hard floats? Basically it'd be nice to infer soft/hard somehow instead of having to explicitly specify it.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The MIPS target of LLVM generates FPU instructions by default and there is no way to specify soft float in MIPS triple.
I enable soft float by default because I think it works on most MIPS CPUs.

I don't know what is the best way to handle this option.
Is it acceptable to hardcode softfp option in LLVMRustCreateTargetMachine like this

if (Trip.getArch() == Triple::mips) {
Options.UseSoftFloat = true;
Options.FloatABIType = FloatABI::Soft;
}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It looks like LLVM has a command-line flag for generating soft-float calls, have you tried rustc --llvm-args '-soft-float' to see if LLVM is actually picking it up from the command line?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I tried and failed. It said Unknown command line argument '-soft-float'.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hm that's unfortunate. This seems more like something we'd desire from LLVM, but perhaps they have a reason they don't have a feature/cpu flag for supporting this. I'd be more comfortable putting this behind a -Z flag than making it a first-class command line argument. I realize that -Z has recently become a bit of a "dumping ground", but this does seem like it fits better there than as a main command line parameter (although I could be wrong).

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I replaced --soft-float with -Z soft-float.

@lucab

Copy link
Copy Markdown
Contributor

At least on ARM this is shown in the triplet (eg. arm-linux-gnueabihf vs. arm-linux-gnueabi). But I couldn't find any hf ABI for mips in glibc https://sourceware.org/git/?p=glibc.git;a=blob;f=ports/sysdeps/mips/preconfigure;h=b215eb2c17a738d21b1b62404fc6e6054757d8c3;hb=HEAD

Comment threadmk/platform.mk Outdated

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can't this become part of --target-cpu or --target-feature? (Or are they passed straight to LLVM and LLVM doesn't have an option of this form to specify soft-float?)

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unfortunately, softfp of MIPS target can only be specified by TargetOptions::UseSoftFloat and this option can not be set by --target-cpu or --target-feature or other LLVM options.

This change adds -Z soft-float option for generating
software floating point library calls.
It also implies using soft float ABI, that is the same as llc.
It is useful for targets that have no FPU.
bors added a commit that referenced this pull request Oct 1, 2013
This change adds --soft-float option for generating
software floating point library calls.
It also implies using soft float ABI, that is the same as llc.
It is useful for targets that have no FPU.
@borsbors closed this Oct 1, 2013
@bors
bors merged commit 350b543 into rust-lang:masterOct 1, 2013
@alexcrichtonalexcrichton mentioned this pull request Jul 16, 2016
3 tasks
alexcrichton added a commit to alexcrichton/rust that referenced this pull request Jul 19, 2016
Right now two MIPS targets in the compiler, `mips-unknown-linux-{gnu,musl}` both
generate object files using the soft-float ABI through LLVM by default. This is
also expressed as the `-C soft-float` codegen option and otherwise isn't used
for any other target in the compiler. This option was added quite some time ago
(back in rust-lang#9617), and nowadays it's more appropriate to be done through a codegen
option.
This is motivated by rust-lang#34743 which necessitated an upgrade in the CMake
installation on our bots which necessitated an upgrade in the Ubuntu version
which invalidated the MIPS compilers we were using. The new MIPS compilers
(coming from Debian I believe) all have hard float enabled by default and soft
float support not built in. This meant that we couldn't upgrade the bots
until rust-lang#34841 landed because otherwise we would fail to compile C code as the
`-msoft-float` option wouldn't work.
Unfortunately, though, this means that once we upgrade the bots the C code we're
compiling will be compiled for hard float and the Rust code will be compiled
for soft float, a bad mismatch! This PR remedies the situation such that Rust
will compile with hard float as well.
If this lands it will likely produce broken nightlies for a day or two while we
get around to upgrading the bots because the current C toolchain only produces
soft-float binaries, and now rust will be hard-float. Hopefully, though, the
upgrade can go smoothly!
GuillaumeGomez added a commit to GuillaumeGomez/rust that referenced this pull request Jul 21, 2016
rustc: Remove soft-float from MIPS targets
Right now two MIPS targets in the compiler, `mips-unknown-linux-{gnu,musl}` both
generate object files using the soft-float ABI through LLVM by default. This is
also expressed as the `-C soft-float` codegen option and otherwise isn't used
for any other target in the compiler. This option was added quite some time ago
(back in rust-lang#9617), and nowadays it's more appropriate to be done through a codegen
option.
This is motivated by rust-lang#34743 which necessitated an upgrade in the CMake
installation on our bots which necessitated an upgrade in the Ubuntu version
which invalidated the MIPS compilers we were using. The new MIPS compilers
(coming from Debian I believe) all have hard float enabled by default and soft
float support not built in. This meant that we couldn't upgrade the bots
until rust-lang#34841 landed because otherwise we would fail to compile C code as the
`-msoft-float` option wouldn't work.
Unfortunately, though, this means that once we upgrade the bots the C code we're
compiling will be compiled for hard float and the Rust code will be compiled
for soft float, a bad mismatch! This PR remedies the situation such that Rust
will compile with hard float as well.
If this lands it will likely produce broken nightlies for a day or two while we
get around to upgrading the bots because the current C toolchain only produces
soft-float binaries, and now rust will be hard-float. Hopefully, though, the
upgrade can go smoothly!
flip1995 pushed a commit to flip1995/rust that referenced this pull request Oct 20, 2022
add `cast-nan-to-int` lint
This fixesrust-lang#371.
r? `@Alexendoo`
---
changelog: add [`cast-nan-to-int`] lint
Zalathar added a commit to Zalathar/rust that referenced this pull request Mar 20, 2026
…uwer
remove -Csoft-float
This fixesrust-lang#129893 by removing the offending flag.
The flag has been added in pre-1.0 times (rust-lang#9617) without much discussion, probably with the intent to mirror `-msoft-float` in C compilers. It never properly mirrored clang though because it only affected the LLVM float ABI setting, not the "soft-float" target feature (the clang flag sets both). It is also blatantly unsound because it affects how float arguments are passed, making it UB to invoke parts of the standard library.
The flag got deprecated with Rust 1.83 (released November 2024), and in the year since then, nobody spoke up in rust-lang#129893 to have it preserved. I think it is time to remove it. I can totally imagine us bringing back a similar flag, properly registered as a target modifier to preserve soundness, but that should come with a coherent design that works for more than one architecture (the flag only does anything on ARM).
Blocked on approval of rust-lang/compiler-team#971.
Fixesrust-lang#154106
U007D pushed a commit to U007D/rust-mos that referenced this pull request Aug 21, 2026
9637: Overhaul doc_links testing infra r=Veykril a=Veykril
and fix several issues with current implementation.
Fixesrust-lang#9617
Co-authored-by: Lukas Wirth <lukastw97@gmail.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@crabtw@lucab@alexcrichton@huonw@bors