Skip to content

Commit 6e3ab52

Browse files
committed
Stabilize ppc inline assembly
1 parent 869fb46 commit 6e3ab52

File tree

2 files changed

+4
-33
lines changed

2 files changed

+4
-33
lines changed

compiler/rustc_ast_lowering/src/asm.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
5151
| asm::InlineAsmArch::LoongArch32
5252
| asm::InlineAsmArch::LoongArch64
5353
| asm::InlineAsmArch::S390x
54+
| asm::InlineAsmArch::PowerPC
55+
| asm::InlineAsmArch::PowerPC64
5456
);
5557
if !is_stable && !self.tcx.features().asm_experimental_arch() {
5658
feature_err(

src/doc/unstable-book/src/language-features/asm-experimental-arch.md

Lines changed: 2 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ The tracking issue for this feature is: [#93335]
88

99
This feature tracks `asm!` and `global_asm!` support for the following architectures:
1010
- NVPTX
11-
- PowerPC
1211
- Hexagon
1312
- MIPS32r2 and MIPS64r2
1413
- wasm32
@@ -31,15 +30,6 @@ This feature tracks `asm!` and `global_asm!` support for the following architect
3130
| NVPTX | `reg64` | None\* | `l` |
3231
| Hexagon | `reg` | `r[0-28]` | `r` |
3332
| Hexagon | `preg` | `p[0-3]` | Only clobbers |
34-
| PowerPC | `reg` | `r0`, `r[3-12]`, `r[14-28]` | `r` |
35-
| PowerPC | `reg_nonzero` | `r[3-12]`, `r[14-28]` | `b` |
36-
| PowerPC | `freg` | `f[0-31]` | `f` |
37-
| PowerPC | `vreg` | `v[0-31]` | `v` |
38-
| PowerPC | `vsreg | `vs[0-63]` | `wa` |
39-
| PowerPC | `cr` | `cr[0-7]`, `cr` | Only clobbers |
40-
| PowerPC | `ctr` | `ctr` | Only clobbers |
41-
| PowerPC | `lr` | `lr` | Only clobbers |
42-
| PowerPC | `xer` | `xer` | Only clobbers |
4333
| wasm32 | `local` | None\* | `r` |
4434
| BPF | `reg` | `r[0-10]` | `r` |
4535
| BPF | `wreg` | `w[0-10]` | `w` |
@@ -75,16 +65,6 @@ This feature tracks `asm!` and `global_asm!` support for the following architect
7565
| NVPTX | `reg64` | None | `i8`, `i16`, `i32`, `f32`, `i64`, `f64` |
7666
| Hexagon | `reg` | None | `i8`, `i16`, `i32`, `f32` |
7767
| Hexagon | `preg` | N/A | Only clobbers |
78-
| PowerPC | `reg` | None | `i8`, `i16`, `i32`, `i64` (powerpc64 only) |
79-
| PowerPC | `reg_nonzero` | None | `i8`, `i16`, `i32`, `i64` (powerpc64 only) |
80-
| PowerPC | `freg` | None | `f32`, `f64` |
81-
| PowerPC | `vreg` | `altivec` | `i8x16`, `i16x8`, `i32x4`, `f32x4` |
82-
| PowerPC | `vreg` | `vsx` | `f32`, `f64`, `i64x2`, `f64x2` |
83-
| PowerPC | `vsreg` | `vsx` | The union of vsx and altivec vreg types |
84-
| PowerPC | `cr` | N/A | Only clobbers |
85-
| PowerPC | `ctr` | N/A | Only clobbers |
86-
| PowerPC | `lr` | N/A | Only clobbers |
87-
| PowerPC | `xer` | N/A | Only clobbers |
8868
| wasm32 | `local` | None | `i8` `i16` `i32` `i64` `f32` `f64` |
8969
| BPF | `reg` | None | `i8` `i16` `i32` `i64` |
9070
| BPF | `wreg` | `alu32` | `i8` `i16` `i32` |
@@ -105,10 +85,6 @@ This feature tracks `asm!` and `global_asm!` support for the following architect
10585
| Hexagon | `r29` | `sp` |
10686
| Hexagon | `r30` | `fr` |
10787
| Hexagon | `r31` | `lr` |
108-
| PowerPC | `r1` | `sp` |
109-
| PowerPC | `r31` | `fp` |
110-
| PowerPC | `r[0-31]` | `[0-31]` |
111-
| PowerPC | `f[0-31]` | `fr[0-31]`|
11288
| BPF | `r[0-10]` | `w[0-10]` |
11389
| AVR | `XH` | `r27` |
11490
| AVR | `XL` | `r26` |
@@ -147,16 +123,14 @@ This feature tracks `asm!` and `global_asm!` support for the following architect
147123
| Architecture | Unsupported register | Reason |
148124
| ------------ | --------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
149125
| All | `sp`, `r14`/`o6` (SPARC) | The stack pointer must be restored to its original value at the end of an asm code block. |
150-
| All | `fr` (Hexagon), `fp` (PowerPC), `$fp` (MIPS), `Y` (AVR), `r4` (MSP430), `a6` (M68k), `r30`/`i6` (SPARC) | The frame pointer cannot be used as an input or output. |
151-
| All | `r19` (Hexagon), `r29` (PowerPC), `r30` (PowerPC) | These are used internally by LLVM as "base pointer" for functions with complex stack frames. |
126+
| All | `fr` (Hexagon) `$fp` (MIPS), `Y` (AVR), `r4` (MSP430), `a6` (M68k), `r30`/`i6` (SPARC) | The frame pointer cannot be used as an input or output. |
127+
| All | `r19` (Hexagon) | These are used internally by LLVM as "base pointer" for functions with complex stack frames. |
152128
| MIPS | `$0` or `$zero` | This is a constant zero register which can't be modified. |
153129
| MIPS | `$1` or `$at` | Reserved for assembler. |
154130
| MIPS | `$26`/`$k0`, `$27`/`$k1` | OS-reserved registers. |
155131
| MIPS | `$28`/`$gp` | Global pointer cannot be used as inputs or outputs. |
156132
| MIPS | `$ra` | Return address cannot be used as inputs or outputs. |
157133
| Hexagon | `lr` | This is the link register which cannot be used as an input or output. |
158-
| PowerPC | `r2`, `r13` | These are system reserved registers. |
159-
| PowerPC | `vrsave` | The vrsave register cannot be used as an input or output. |
160134
| AVR | `r0`, `r1`, `r1r0` | Due to an issue in LLVM, the `r0` and `r1` registers cannot be used as inputs or outputs. If modified, they must be restored to their original values before the end of the block. |
161135
|MSP430 | `r0`, `r2`, `r3` | These are the program counter, status register, and constant generator respectively. Neither the status register nor constant generator can be written to. |
162136
| M68k | `a4`, `a5` | Used internally by LLVM for the base pointer and global base pointer. |
@@ -183,11 +157,6 @@ This feature tracks `asm!` and `global_asm!` support for the following architect
183157
| NVPTX | `reg32` | None | `r0` | None |
184158
| NVPTX | `reg64` | None | `rd0` | None |
185159
| Hexagon | `reg` | None | `r0` | None |
186-
| PowerPC | `reg` | None | `0` | None |
187-
| PowerPC | `reg_nonzero` | None | `3` | None |
188-
| PowerPC | `freg` | None | `0` | None |
189-
| PowerPC | `vreg` | None | `0` | None |
190-
| PowerPC | `vsreg` | None | `0` | None |
191160
| SPARC | `reg` | None | `%o0` | None |
192161
| CSKY | `reg` | None | `r0` | None |
193162
| CSKY | `freg` | None | `f0` | None |

0 commit comments

Comments
 (0)