Skip to content
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

The status/purpose of the i586-pc-windows-msvc target is unclear #137244

Open
beetrees opened this issue Feb 18, 2025 · 9 comments
Open

The status/purpose of the i586-pc-windows-msvc target is unclear #137244

beetrees opened this issue Feb 18, 2025 · 9 comments
Labels
A-docs Area: Documentation for any part of the project, including the compiler, standard library, and tools A-targets Area: Concerning the implications of different compiler targets C-discussion Category: Discussion or questions that doesn't represent real issues. O-windows Operating system: Windows O-x86_32 Target: x86 processors, 32 bit (like i686-*) T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.

Comments

@beetrees
Copy link
Contributor

Location

The platform support table.

Summary

i586-pc-windows-msvc is the non-SSE version of the i686-pc-windows-msvc target, added back in 2016 in #32034 when Rust supported Windows XP. Windows XP/Vista support was subsequently dropped in MCP 378, and Windows 7/8 support for then-existing targets was dropped in MCP 651. However, the platform support table entry for i586-pc-windows-msvc currently reads "32-bit Windows (original Pentium)" (with no std support), without specifying which version of Windows it targets.

Additionally, Windows hasn't supported pre-SSE2 CPUs since Windows 8, with Windows 7 apparently dropping support for pre-SSE2 CPUs in a March 2018 update. This means that for Windows 10+ i586-pc-windows-msvc is a footgun: it provides worse performance with more miscompilations (see #114479) without providing any greater CPU support, as the underlying OS requires SSE2 anyway.

The appears to be two possibilities:

  1. i586-pc-windows-msvc has a baseline of Windows 10+ - formally speaking I think this is the status quo, as MCP 651 raised "the minimum supported Windows version of current targets to Windows 10". At minimum, this would just require an update to the platform support page to explicitly state this. However, given the lack of purpose for this target on Windows 10+ as detailed above the target almost certainly fails the tier 2 target policy requirement that a target "must document [...] why the specific difference in baseline expectations provides sufficient value to justify a separate target", so should probably either be demoted to tier 3 or removed entirely (these would both require a MCP).
  2. i586-pc-windows-msvc has a baseline of an older Windows version (perhaps Windows 7 or Windows XP). In this case the target should be renamed (similar to the existing -win7- targets) to make explicit this lower baseline.

There aren't any target maintains listed for this target.

cc @ChrisDenton (author of the two Windows version MCPs)

@beetrees beetrees added the A-docs Area: Documentation for any part of the project, including the compiler, standard library, and tools label Feb 18, 2025
@rustbot rustbot added the needs-triage This issue may need triage. Remove it if it has been sufficiently triaged. label Feb 18, 2025
@beetrees
Copy link
Contributor Author

@rustbot label +T-compiler +A-targets +O-windows +O-x86_32

@rustbot rustbot added A-targets Area: Concerning the implications of different compiler targets O-windows Operating system: Windows O-x86_32 Target: x86 processors, 32 bit (like i686-*) T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Feb 18, 2025
@jieyouxu jieyouxu added C-discussion Category: Discussion or questions that doesn't represent real issues. and removed needs-triage This issue may need triage. Remove it if it has been sufficiently triaged. labels Feb 18, 2025
@Noratrieb
Copy link
Member

Noratrieb commented Feb 18, 2025

Yeah good point, this target makes no sense. Feel free to put this description into an MCP to remove it unless the Win7 people are interested.

@roblabla @tbu- as Win7 maintainers, maybe you're interested in having an Win7 i586 target without SSE.

@ChrisDenton
Copy link
Member

I have heard of the i586 target being used. E,g, there is a project that uses the i586-pc-windows-msvc target as the basis for supporting Windows 95.

@beetrees
Copy link
Contributor Author

Do you have a link, out of interest? The only Windows 95 support project I've been able to find is rust9x, and they use a compiler fork with custom targets.

@ChrisDenton
Copy link
Member

That's what I meant by "as a basis". The custom targets are based on our i586 one.

@beetrees
Copy link
Contributor Author

rust9x base their i586 target off their i686 target (which is based on i686-pc-windows-msvc), so they should be unaffected by any changes to/removal of i586-pc-windows-msvc.

@roblabla
Copy link
Contributor

roblabla commented Feb 19, 2025

I only maintain i686-win7-windows-msvc, and have no interest in the i585-pc target (Supporting an up-to-date Windows 7 installation already feels like playing on hard mode, nevermind supporting the original release 😅). I see no issue with it getting removed.

@tbu-
Copy link
Contributor

tbu- commented Feb 19, 2025

Not interested.

@beetrees
Copy link
Contributor Author

I've opened a MCP to remove the i586-pc-windows-msvc target at rust-lang/compiler-team#840.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-docs Area: Documentation for any part of the project, including the compiler, standard library, and tools A-targets Area: Concerning the implications of different compiler targets C-discussion Category: Discussion or questions that doesn't represent real issues. O-windows Operating system: Windows O-x86_32 Target: x86 processors, 32 bit (like i686-*) T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.
Projects
None yet
Development

No branches or pull requests

7 participants