Skip to content

Promotes 5 Thumb-mode bare-metal Arm targets to Tier 2#155763

Merged
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
cezarbbb:promote-thumb-to-tier2
Jun 3, 2026
Merged

Promotes 5 Thumb-mode bare-metal Arm targets to Tier 2#155763
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
cezarbbb:promote-thumb-to-tier2

Conversation

@cezarbbb

@cezarbbb cezarbbb commented Apr 25, 2026

Copy link
Copy Markdown
Contributor

View all comments

This PR promotes five Thumb-mode bare-metal Arm targets to Tier 2, joining their Arm-mode counterparts which are already Tier 2:

Thumb-mode target (Tier 3 → Tier 2) Arm-mode counterpart (already Tier 2)
thumbv7a-none-eabi armv7a-none-eabi
thumbv7a-none-eabihf armv7a-none-eabihf
thumbv7r-none-eabi armv7r-none-eabi
thumbv7r-none-eabihf armv7r-none-eabihf
thumbv8r-none-eabihf armv8r-none-eabihf

Note: There is no thumbv8r-none-eabi target because the Cortex-R52 processor always includes an FPU, making a soft-float ABI variant unnecessary.

These Thumb-mode targets generate T32 code by default while their Arm-mode counterparts generate A32 code. They share the same LLVM backend, ABI, and data layout — the only spec differences are the llvm_target string and the description.

See rust-lang/compiler-team#985

@rustbot

rustbot commented Apr 25, 2026

Copy link
Copy Markdown
Collaborator

Some changes occurred in src/doc/rustc/src/platform-support

cc @Noratrieb

These commits modify compiler targets.
(See the Target Tier Policy.)

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Apr 25, 2026
@rustbot

rustbot commented Apr 25, 2026

Copy link
Copy Markdown
Collaborator

r? @adwinwhite

rustbot has assigned @adwinwhite.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

Why was this reviewer chosen?

The reviewer was selected based on:

  • Owners of files modified in this PR: @ehuss, compiler
  • @ehuss, compiler expanded to 74 candidates
  • Random selection from 20 candidates

@petrochenkov

Copy link
Copy Markdown
Contributor

Blocked on rust-lang/compiler-team#985.
@rustbot blocked

@rustbot rustbot added S-blocked Status: Blocked on something else such as an RFC or other implementation work. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Apr 27, 2026
@cezarbbb

Copy link
Copy Markdown
Contributor Author

@rustbot ping arm-maintainers
As the T32 and A32 targets share a page in the rustc book, can you continue to be the maintainers of these targets?

@rustbot

rustbot commented Apr 28, 2026

Copy link
Copy Markdown
Collaborator

Error: Only Rust team members can ping teams.

Please file an issue on GitHub at triagebot if there's a problem with this bot, or reach out on #triagebot on Zulip.

@SparrowLii

Copy link
Copy Markdown
Member

@rustbot ping arm-maintainers
:)

@rustbot

rustbot commented Apr 28, 2026

Copy link
Copy Markdown
Collaborator

Error: This team (arm-maintainers) cannot be pinged via this command; it may need to be added to triagebot.toml on the default branch.

Please file an issue on GitHub at triagebot if there's a problem with this bot, or reach out on #triagebot on Zulip.

@thejpster

Copy link
Copy Markdown
Contributor

arm-maintainers said yes over on rust-lang/compiler-team#985 (comment) (just for anyone else looking at this without looking at that thread first)

@cezarbbb cezarbbb force-pushed the promote-thumb-to-tier2 branch from 0b1bacb to f45a817 Compare May 30, 2026 01:27
@rustbot rustbot added A-CI Area: Our Github Actions CI A-testsuite Area: The testsuite used to check the correctness of rustc T-infra Relevant to the infrastructure team, which will review and decide on the PR/issue. labels May 30, 2026
@rustbot

rustbot commented May 30, 2026

Copy link
Copy Markdown
Collaborator

This PR was rebased onto a different main commit. Here's a range-diff highlighting what actually changed.

Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers.

@cezarbbb

cezarbbb commented Jun 1, 2026

Copy link
Copy Markdown
Contributor Author

@petrochenkov The FCP is complete

@petrochenkov petrochenkov added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-blocked Status: Blocked on something else such as an RFC or other implementation work. labels Jun 1, 2026
@petrochenkov

Copy link
Copy Markdown
Contributor

@bors r+

@rust-bors

rust-bors Bot commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

📌 Commit f45a817 has been approved by petrochenkov

It is now in the queue for this repository.

@rust-bors rust-bors Bot added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Jun 1, 2026
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Jun 1, 2026
…=petrochenkov

Promotes 5 Thumb-mode bare-metal Arm targets to Tier 2

This PR promotes five Thumb-mode bare-metal Arm targets to Tier 2, joining their Arm-mode counterparts which are already Tier 2:

| Thumb-mode target (Tier 3 → Tier 2) | Arm-mode counterpart (already Tier 2) |
|:---|:---|
| `thumbv7a-none-eabi` | `armv7a-none-eabi` |
| `thumbv7a-none-eabihf` | `armv7a-none-eabihf` |
| `thumbv7r-none-eabi` | `armv7r-none-eabi` |
| `thumbv7r-none-eabihf` | `armv7r-none-eabihf` |
| `thumbv8r-none-eabihf` | `armv8r-none-eabihf` |

Note: There is no `thumbv8r-none-eabi` target because the Cortex-R52 processor always includes an FPU, making a soft-float ABI variant unnecessary.

These Thumb-mode targets generate T32 code by default while their Arm-mode counterparts generate A32 code. They share the same LLVM backend, ABI, and data layout — the only spec differences are the `llvm_target` string and the description.

See rust-lang/compiler-team#985
@petrochenkov petrochenkov added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Jun 2, 2026
@cezarbbb

cezarbbb commented Jun 3, 2026

Copy link
Copy Markdown
Contributor Author

Hi. I found that cc-rs automatically adds three key flags for armv7r-none-eabihf: -marm / -march=armv7-r / -mfpu=vfpv3-d16 (see cc-rs/src/lib.rs:2476-2495), but the Thumb targets — thumbv7r-none-eabihf, thumbv7a-none-eabihf, thumbv8r-none-eabihf — don't match those branches. cc-rs only adds -mthumb for them, not -march or -mfpu.

ARM and Thumb differ only in instruction encoding; the underlying hardware requirements are identical. For example, armv7r_none_eabihf.rs:20 and thumbv7r_none_eabihf.rs:20 both specify +vfp3d16, and armv7a_none_eabihf.rs:20 and thumbv7a_none_eabihf.rs:20 both specify +vfp3d16,-neon,+strict-align. So they need the same -mfpu=vfpv3-d16. My approach is simply to replicate the FPU that cc-rs already selects for the ARM variants, written explicitly in the Thumb variants' Dockerfile CFLAGS.

For thumbv8r-none-eabihf's -mfpu=fp-armv8, I simply followed @thejpster's existing armv8r config in the Dockerfile. I also want to ask @thejpster, does these approaches above look correct to you?

@cezarbbb

cezarbbb commented Jun 3, 2026

Copy link
Copy Markdown
Contributor Author

@rustbot ready

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Jun 3, 2026
@petrochenkov

Copy link
Copy Markdown
Contributor

Thanks!
@bors r+

@rust-bors

rust-bors Bot commented Jun 3, 2026

Copy link
Copy Markdown
Contributor

📌 Commit e3468ae has been approved by petrochenkov

It is now in the queue for this repository.

🌲 The tree is currently closed for pull requests below priority 5. This pull request will be tested once the tree is reopened.

@rust-bors rust-bors Bot added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Jun 3, 2026
@thejpster

Copy link
Copy Markdown
Contributor

Picking the same options as the existing Arm mode targets sounds right to me. You could build the targets and do a run of the rust-embedded/aarch32 suite to check, as it does a little bit of float maths.

jhpratt added a commit to jhpratt/rust that referenced this pull request Jun 3, 2026
…=petrochenkov

Promotes 5 Thumb-mode bare-metal Arm targets to Tier 2

This PR promotes five Thumb-mode bare-metal Arm targets to Tier 2, joining their Arm-mode counterparts which are already Tier 2:

| Thumb-mode target (Tier 3 → Tier 2) | Arm-mode counterpart (already Tier 2) |
|:---|:---|
| `thumbv7a-none-eabi` | `armv7a-none-eabi` |
| `thumbv7a-none-eabihf` | `armv7a-none-eabihf` |
| `thumbv7r-none-eabi` | `armv7r-none-eabi` |
| `thumbv7r-none-eabihf` | `armv7r-none-eabihf` |
| `thumbv8r-none-eabihf` | `armv8r-none-eabihf` |

Note: There is no `thumbv8r-none-eabi` target because the Cortex-R52 processor always includes an FPU, making a soft-float ABI variant unnecessary.

These Thumb-mode targets generate T32 code by default while their Arm-mode counterparts generate A32 code. They share the same LLVM backend, ABI, and data layout — the only spec differences are the `llvm_target` string and the description.

See rust-lang/compiler-team#985
rust-bors Bot pushed a commit that referenced this pull request Jun 3, 2026
Rollup of 7 pull requests

Successful merges:

 - #155763 (Promotes 5 Thumb-mode bare-metal Arm targets to Tier 2)
 - #156928 (Remove -Zemscripten-wasm-eh)
 - #157236 (Reorganize `tests/ui/issues` [3/N])
 - #157294 (Split coroutine layout computation to its own file)
 - #157328 (windows: Elide division-by-zero checks in Instant::now())
 - #157331 (Rewrite target checking for `#[link]`)
 - #157336 (Enable `clippy::mem_replace_with_default`)
@rust-bors

rust-bors Bot commented Jun 3, 2026

Copy link
Copy Markdown
Contributor

⌛ Testing commit e3468ae with merge e8def2b...

Workflow: https://github.com/rust-lang/rust/actions/runs/26875909522

rust-bors Bot pushed a commit that referenced this pull request Jun 3, 2026
Promotes 5 Thumb-mode bare-metal Arm targets to Tier 2



This PR promotes five Thumb-mode bare-metal Arm targets to Tier 2, joining their Arm-mode counterparts which are already Tier 2:

| Thumb-mode target (Tier 3 → Tier 2) | Arm-mode counterpart (already Tier 2) |
|:---|:---|
| `thumbv7a-none-eabi` | `armv7a-none-eabi` |
| `thumbv7a-none-eabihf` | `armv7a-none-eabihf` |
| `thumbv7r-none-eabi` | `armv7r-none-eabi` |
| `thumbv7r-none-eabihf` | `armv7r-none-eabihf` |
| `thumbv8r-none-eabihf` | `armv8r-none-eabihf` |

Note: There is no `thumbv8r-none-eabi` target because the Cortex-R52 processor always includes an FPU, making a soft-float ABI variant unnecessary.

These Thumb-mode targets generate T32 code by default while their Arm-mode counterparts generate A32 code. They share the same LLVM backend, ABI, and data layout — the only spec differences are the `llvm_target` string and the description.

See rust-lang/compiler-team#985
@JonathanBrouwer

Copy link
Copy Markdown
Contributor

@bors yield

@rust-bors

rust-bors Bot commented Jun 3, 2026

Copy link
Copy Markdown
Contributor

Auto build was cancelled. Cancelled workflows:

The next pull request likely to be tested is #157349.

JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Jun 3, 2026
…=petrochenkov

Promotes 5 Thumb-mode bare-metal Arm targets to Tier 2

This PR promotes five Thumb-mode bare-metal Arm targets to Tier 2, joining their Arm-mode counterparts which are already Tier 2:

| Thumb-mode target (Tier 3 → Tier 2) | Arm-mode counterpart (already Tier 2) |
|:---|:---|
| `thumbv7a-none-eabi` | `armv7a-none-eabi` |
| `thumbv7a-none-eabihf` | `armv7a-none-eabihf` |
| `thumbv7r-none-eabi` | `armv7r-none-eabi` |
| `thumbv7r-none-eabihf` | `armv7r-none-eabihf` |
| `thumbv8r-none-eabihf` | `armv8r-none-eabihf` |

Note: There is no `thumbv8r-none-eabi` target because the Cortex-R52 processor always includes an FPU, making a soft-float ABI variant unnecessary.

These Thumb-mode targets generate T32 code by default while their Arm-mode counterparts generate A32 code. They share the same LLVM backend, ABI, and data layout — the only spec differences are the `llvm_target` string and the description.

See rust-lang/compiler-team#985
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Jun 3, 2026
…=petrochenkov

Promotes 5 Thumb-mode bare-metal Arm targets to Tier 2

This PR promotes five Thumb-mode bare-metal Arm targets to Tier 2, joining their Arm-mode counterparts which are already Tier 2:

| Thumb-mode target (Tier 3 → Tier 2) | Arm-mode counterpart (already Tier 2) |
|:---|:---|
| `thumbv7a-none-eabi` | `armv7a-none-eabi` |
| `thumbv7a-none-eabihf` | `armv7a-none-eabihf` |
| `thumbv7r-none-eabi` | `armv7r-none-eabi` |
| `thumbv7r-none-eabihf` | `armv7r-none-eabihf` |
| `thumbv8r-none-eabihf` | `armv8r-none-eabihf` |

Note: There is no `thumbv8r-none-eabi` target because the Cortex-R52 processor always includes an FPU, making a soft-float ABI variant unnecessary.

These Thumb-mode targets generate T32 code by default while their Arm-mode counterparts generate A32 code. They share the same LLVM backend, ABI, and data layout — the only spec differences are the `llvm_target` string and the description.

See rust-lang/compiler-team#985
rust-bors Bot pushed a commit that referenced this pull request Jun 3, 2026
…uwer

Rollup of 15 pull requests

Successful merges:

 - #155763 (Promotes 5 Thumb-mode bare-metal Arm targets to Tier 2)
 - #156953 (delegation: emit error when there is an infer lifetime in user-specified args)
 - #157248 (delegation: move statements out of the first arg)
 - #157263 (rustc_codegen_ssa: Refactor `ArchiveEntry` to include entry kind)
 - #157311 (Use weak linkage for EII defaults)
 - #156089 (Fix unused_parens for pinned reference patterns)
 - #156928 (Remove -Zemscripten-wasm-eh)
 - #157236 (Reorganize `tests/ui/issues` [3/N])
 - #157287 (Const generics: remove AliasTerm::kind(), and small fixes)
 - #157294 (Split coroutine layout computation to its own file)
 - #157328 (windows: Elide division-by-zero checks in Instant::now())
 - #157331 (Rewrite target checking for `#[link]`)
 - #157336 (Enable `clippy::mem_replace_with_default`)
 - #157362 (Fix trivial wf module argument/doc comment name mismatches)
 - #157364 (Rewrite target checking of `rustc_dummy`)

Failed merges:

 - #157332 (Rewrite target checking for `#[sanitize]`)
@rust-bors rust-bors Bot merged commit bc3903e into rust-lang:main Jun 3, 2026
13 of 14 checks passed
@rustbot rustbot added this to the 1.98.0 milestone Jun 3, 2026
@cezarbbb cezarbbb deleted the promote-thumb-to-tier2 branch June 3, 2026 16:30
rust-timer added a commit that referenced this pull request Jun 3, 2026
Rollup merge of #155763 - cezarbbb:promote-thumb-to-tier2, r=petrochenkov

Promotes 5 Thumb-mode bare-metal Arm targets to Tier 2

This PR promotes five Thumb-mode bare-metal Arm targets to Tier 2, joining their Arm-mode counterparts which are already Tier 2:

| Thumb-mode target (Tier 3 → Tier 2) | Arm-mode counterpart (already Tier 2) |
|:---|:---|
| `thumbv7a-none-eabi` | `armv7a-none-eabi` |
| `thumbv7a-none-eabihf` | `armv7a-none-eabihf` |
| `thumbv7r-none-eabi` | `armv7r-none-eabi` |
| `thumbv7r-none-eabihf` | `armv7r-none-eabihf` |
| `thumbv8r-none-eabihf` | `armv8r-none-eabihf` |

Note: There is no `thumbv8r-none-eabi` target because the Cortex-R52 processor always includes an FPU, making a soft-float ABI variant unnecessary.

These Thumb-mode targets generate T32 code by default while their Arm-mode counterparts generate A32 code. They share the same LLVM backend, ABI, and data layout — the only spec differences are the `llvm_target` string and the description.

See rust-lang/compiler-team#985
@jonathanpallant

Copy link
Copy Markdown
Contributor

New rustup targets seem to run the aarch32 test suite without issue (rust-embedded/aarch32#174).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-CI Area: Our Github Actions CI A-testsuite Area: The testsuite used to check the correctness of rustc S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. T-infra Relevant to the infrastructure team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants