Fix clobber_abi and disallow SVE-related registers in Arm64EC inline assembly by taiki-e · Pull Request #131332 · rust-lang/rust
rustbot
added
S-waiting-on-review
labels
Oct 6, 2024
taiki-e
changed the title
Fix clobber_abi in Arm64EC inline assembly
Fix clobber_abi and disallow preg in Arm64EC inline assembly
taiki-e
changed the title
Fix clobber_abi and disallow preg in Arm64EC inline assembly
Fix clobber_abi and disallow SVE-related registers in Arm64EC inline assembly
taiki-e
marked this pull request as ready for review
bors
added
S-waiting-on-bors
and removed S-waiting-on-review
Status: Awaiting review from the assignee but also interested parties.labels
Oct 14, 2024matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request
Oct 14, 2024…nieu Fix clobber_abi and disallow SVE-related registers in Arm64EC inline assembly Currently `clobber_abi` in Arm64EC inline assembly is implemented using `InlineAsmClobberAbi::AArch64NoX18`, but broken since it attempts to clobber registers that cannot be used in Arm64EC: https://godbolt.org/z/r3PTrGz5r ``` error: cannot use register `x13`: x13, x14, x23, x24, x28, v16-v31 cannot be used for Arm64EC --> <source>:6:14 | 6 | asm!("", clobber_abi("C"), options(nostack, nomem, preserves_flags)); | ^^^^^^^^^^^^^^^^ error: cannot use register `x14`: x13, x14, x23, x24, x28, v16-v31 cannot be used for Arm64EC --> <source>:6:14 | 6 | asm!("", clobber_abi("C"), options(nostack, nomem, preserves_flags)); | ^^^^^^^^^^^^^^^^ <omitted the same errors for v16-v31> ``` Additionally, this disallows SVE-related registers per rust-lang#131332 (comment). cc `@dpaoliello` r? `@Amanieu` `@rustbot` label O-windows O-AArch64 +A-inline-assembly
This was referenced
Oct 14, 2024bors added a commit to rust-lang-ci/rust that referenced this pull request
Oct 14, 2024…iaskrgr Rollup of 8 pull requests Successful merges: - rust-lang#129424 (Stabilize `Pin::as_deref_mut()`) - rust-lang#131332 (Fix clobber_abi and disallow SVE-related registers in Arm64EC inline assembly) - rust-lang#131384 (Update precondition tests (especially for zero-size access to null)) - rust-lang#131430 (Special treatment empty tuple when suggest adding a string literal in format macro.) - rust-lang#131550 (Make some tweaks to extern block diagnostics) - rust-lang#131667 (Fix AArch64InlineAsmReg::emit) - rust-lang#131679 (compiletest: Document various parts of compiletest's `lib.rs`) - rust-lang#131682 (Tag PRs affecting compiletest with `A-compiletest`) Failed merges: - rust-lang#131496 (Stabilise `const_make_ascii`.) r? `@ghost` `@rustbot` modify labels: rollup
bors added a commit to rust-lang-ci/rust that referenced this pull request
Oct 14, 2024…iaskrgr Rollup of 8 pull requests Successful merges: - rust-lang#129424 (Stabilize `Pin::as_deref_mut()`) - rust-lang#131332 (Fix clobber_abi and disallow SVE-related registers in Arm64EC inline assembly) - rust-lang#131384 (Update precondition tests (especially for zero-size access to null)) - rust-lang#131430 (Special treatment empty tuple when suggest adding a string literal in format macro.) - rust-lang#131550 (Make some tweaks to extern block diagnostics) - rust-lang#131667 (Fix AArch64InlineAsmReg::emit) - rust-lang#131679 (compiletest: Document various parts of compiletest's `lib.rs`) - rust-lang#131682 (Tag PRs affecting compiletest with `A-compiletest`) Failed merges: - rust-lang#131496 (Stabilise `const_make_ascii`.) r? `@ghost` `@rustbot` modify labels: rollup
rust-timer added a commit to rust-lang-ci/rust that referenced this pull request
Oct 14, 2024Rollup merge of rust-lang#131332 - taiki-e:arm64ec-clobber-abi, r=Amanieu Fix clobber_abi and disallow SVE-related registers in Arm64EC inline assembly Currently `clobber_abi` in Arm64EC inline assembly is implemented using `InlineAsmClobberAbi::AArch64NoX18`, but broken since it attempts to clobber registers that cannot be used in Arm64EC: https://godbolt.org/z/r3PTrGz5r ``` error: cannot use register `x13`: x13, x14, x23, x24, x28, v16-v31 cannot be used for Arm64EC --> <source>:6:14 | 6 | asm!("", clobber_abi("C"), options(nostack, nomem, preserves_flags)); | ^^^^^^^^^^^^^^^^ error: cannot use register `x14`: x13, x14, x23, x24, x28, v16-v31 cannot be used for Arm64EC --> <source>:6:14 | 6 | asm!("", clobber_abi("C"), options(nostack, nomem, preserves_flags)); | ^^^^^^^^^^^^^^^^ <omitted the same errors for v16-v31> ``` Additionally, this disallows SVE-related registers per rust-lang#131332 (comment). cc ``@dpaoliello`` r? ``@Amanieu`` ``@rustbot`` label O-windows O-AArch64 +A-inline-assembly
taiki-e
deleted the
arm64ec-clobber-abi
branch
jieyouxu added a commit to jieyouxu/rust that referenced this pull request
Nov 1, 2024Move remaining inline assembly test files into asm directory Before: ``` tests/assembly/asm/* tests/assembly/asm-comments.rs tests/codegen/asm-target-clobbers.rs tests/codegen/asm-goto.rs tests/codegen/asm-maybe-uninit.rs tests/codegen/asm-msp430-clobbers.rs tests/codegen/asm-options.rs tests/codegen/asm-clobbers.rs tests/codegen/asm-may_unwind.rs tests/codegen/asm-arm64ec-clobbers.rs tests/codegen/asm-powerpc-clobbers.rs tests/codegen/asm-sanitize-llvm.rs tests/codegen/asm-s390x-clobbers.rs tests/codegen/asm-clobber_abi.rs tests/codegen/asm-multiple-options.rs tests/codegen/global_asm.rs tests/codegen/global_asm_include.rs tests/codegen/global_asm_x2.rs tests/ui/asm/* ``` After: ``` tests/assembly/asm/* tests/codegen/asm/* tests/ui/asm/* ``` I moved the remaining standalone test files into the asm directory, and then either removed the "asm-" suffix or for x86-specific registers tests replaced the "asm-" suffix with the "x86-" suffix. (Then I noticed that there is no test for clobber_abi for already stabilized aarch64, arm, riscv, and loongarch64 asm... I don't believe there is a problem like rust-lang#131332, but I plan to add tests for them later.) r? `@Amanieu` `@rustbot` label +A-inline-assembly
GuillaumeGomez added a commit to GuillaumeGomez/rust that referenced this pull request
Nov 1, 2024Move remaining inline assembly test files into asm directory Before: ``` tests/assembly/asm/* tests/assembly/asm-comments.rs tests/codegen/asm-target-clobbers.rs tests/codegen/asm-goto.rs tests/codegen/asm-maybe-uninit.rs tests/codegen/asm-msp430-clobbers.rs tests/codegen/asm-options.rs tests/codegen/asm-clobbers.rs tests/codegen/asm-may_unwind.rs tests/codegen/asm-arm64ec-clobbers.rs tests/codegen/asm-powerpc-clobbers.rs tests/codegen/asm-sanitize-llvm.rs tests/codegen/asm-s390x-clobbers.rs tests/codegen/asm-clobber_abi.rs tests/codegen/asm-multiple-options.rs tests/codegen/global_asm.rs tests/codegen/global_asm_include.rs tests/codegen/global_asm_x2.rs tests/ui/asm/* ``` After: ``` tests/assembly/asm/* tests/codegen/asm/* tests/ui/asm/* ``` I moved the remaining standalone test files into the asm directory, and then either removed the "asm-" suffix or for x86-specific registers tests replaced the "asm-" suffix with the "x86-" suffix. (Then I noticed that there is no test for clobber_abi for already stabilized aarch64, arm, riscv, and loongarch64 asm... I don't believe there is a problem like rust-lang#131332, but I plan to add tests for them later.) r? ``@Amanieu`` ``@rustbot`` label +A-inline-assembly
rust-timer added a commit to rust-lang-ci/rust that referenced this pull request
Nov 2, 2024Rollup merge of rust-lang#132456 - taiki-e:test-asm-dir, r=jieyouxu Move remaining inline assembly test files into asm directory Before: ``` tests/assembly/asm/* tests/assembly/asm-comments.rs tests/codegen/asm-target-clobbers.rs tests/codegen/asm-goto.rs tests/codegen/asm-maybe-uninit.rs tests/codegen/asm-msp430-clobbers.rs tests/codegen/asm-options.rs tests/codegen/asm-clobbers.rs tests/codegen/asm-may_unwind.rs tests/codegen/asm-arm64ec-clobbers.rs tests/codegen/asm-powerpc-clobbers.rs tests/codegen/asm-sanitize-llvm.rs tests/codegen/asm-s390x-clobbers.rs tests/codegen/asm-clobber_abi.rs tests/codegen/asm-multiple-options.rs tests/codegen/global_asm.rs tests/codegen/global_asm_include.rs tests/codegen/global_asm_x2.rs tests/ui/asm/* ``` After: ``` tests/assembly/asm/* tests/codegen/asm/* tests/ui/asm/* ``` I moved the remaining standalone test files into the asm directory, and then either removed the "asm-" suffix or for x86-specific registers tests replaced the "asm-" suffix with the "x86-" suffix. (Then I noticed that there is no test for clobber_abi for already stabilized aarch64, arm, riscv, and loongarch64 asm... I don't believe there is a problem like rust-lang#131332, but I plan to add tests for them later.) r? ``@Amanieu`` ``@rustbot`` label +A-inline-assembly
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request
Nov 10, 2024…manieu,traviscross
Stabilize Arm64EC inline assembly
This stabilizes inline assembly for Arm64EC ("Emulation Compatible").
Corresponding reference PR: rust-lang/reference#1653
---
From the requirements of stabilization mentioned in rust-lang#93335
> Each architecture needs to be reviewed before stabilization:
> - It must have clobber_abi.
Done in rust-lang#131332.
> - It must be possible to clobber every register that is normally clobbered by a function call.
This is possible from the time of the initial implementation.
> - Generally review that the exposed register classes make sense.
The registers available in this target are a subset of those available in the AArch64 inline assembly which is already stable.
The following registers cannot be used in Arm64EC compared to AArch64:
- `x13`, `x14`, `x23`, `x24`, `x28` (register class: `reg`)
- `v[16-31]` (register class: `vreg`)
- `p[0-15]`, `ffr` (clobber-only register class `preg`)
These are disallowed by the ABI (see also [abi docs](https://learn.microsoft.com/en-us/cpp/build/arm64ec-windows-abi-conventions?view=msvc-170#register-mapping) for `reg`/`vreg` and rust-lang#131332 (comment) for `preg`).
Although not listed in the above requirements, preserves_flags is also implemented and the same as AArch64.
---
cc `@dpaoliello`
r? `@Amanieu`
`@rustbot` label O-windows O-AArch64 +A-inline-assembly +T-lang -T-compiler +needs-fcp
rust-timer added a commit to rust-lang-ci/rust that referenced this pull request
Nov 11, 2024Rollup merge of rust-lang#131781 - taiki-e:arm64ec-stabilize-asm, r=Amanieu,traviscross Stabilize Arm64EC inline assembly This stabilizes inline assembly for Arm64EC ("Emulation Compatible"). Corresponding reference PR: rust-lang/reference#1653 --- From the requirements of stabilization mentioned in rust-lang#93335 > Each architecture needs to be reviewed before stabilization: > - It must have clobber_abi. Done in rust-lang#131332. > - It must be possible to clobber every register that is normally clobbered by a function call. This is possible from the time of the initial implementation. > - Generally review that the exposed register classes make sense. The registers available in this target are a subset of those available in the AArch64 inline assembly which is already stable. The following registers cannot be used in Arm64EC compared to AArch64: - `x13`, `x14`, `x23`, `x24`, `x28` (register class: `reg`) - `v[16-31]` (register class: `vreg`) - `p[0-15]`, `ffr` (clobber-only register class `preg`) These are disallowed by the ABI (see also [abi docs](https://learn.microsoft.com/en-us/cpp/build/arm64ec-windows-abi-conventions?view=msvc-170#register-mapping) for `reg`/`vreg` and rust-lang#131332 (comment) for `preg`). Although not listed in the above requirements, preserves_flags is also implemented and the same as AArch64. --- cc `@dpaoliello` r? `@Amanieu` `@rustbot` label O-windows O-AArch64 +A-inline-assembly +T-lang -T-compiler +needs-fcp
mati865 pushed a commit to mati865/rust that referenced this pull request
Nov 12, 2024…manieu,traviscross
Stabilize Arm64EC inline assembly
This stabilizes inline assembly for Arm64EC ("Emulation Compatible").
Corresponding reference PR: rust-lang/reference#1653
---
From the requirements of stabilization mentioned in rust-lang#93335
> Each architecture needs to be reviewed before stabilization:
> - It must have clobber_abi.
Done in rust-lang#131332.
> - It must be possible to clobber every register that is normally clobbered by a function call.
This is possible from the time of the initial implementation.
> - Generally review that the exposed register classes make sense.
The registers available in this target are a subset of those available in the AArch64 inline assembly which is already stable.
The following registers cannot be used in Arm64EC compared to AArch64:
- `x13`, `x14`, `x23`, `x24`, `x28` (register class: `reg`)
- `v[16-31]` (register class: `vreg`)
- `p[0-15]`, `ffr` (clobber-only register class `preg`)
These are disallowed by the ABI (see also [abi docs](https://learn.microsoft.com/en-us/cpp/build/arm64ec-windows-abi-conventions?view=msvc-170#register-mapping) for `reg`/`vreg` and rust-lang#131332 (comment) for `preg`).
Although not listed in the above requirements, preserves_flags is also implemented and the same as AArch64.
---
cc `@dpaoliello`
r? `@Amanieu`
`@rustbot` label O-windows O-AArch64 +A-inline-assembly +T-lang -T-compiler +needs-fcp
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters