Skip to content

Commit 94bded8

Browse files
committed
Add LoongArch LSX/LASX inline asm documentation
Update the inline assembly reference to document LoongArch LSX (`vreg`) and LASX (`xreg`) register classes, their supported operand types, register aliases with FPU registers, and the `w`/`u` template modifiers.
1 parent e097e1b commit 94bded8

1 file changed

Lines changed: 14 additions & 4 deletions

File tree

src/inline-assembly.md

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -626,6 +626,8 @@ Here is the list of currently supported register classes:
626626
| RISC-V | `vreg` | `v[0-31]` | Only clobbers |
627627
| LoongArch | `reg` | `$r1`, `$r[4-20]`, `$r[23,30]` | `r` |
628628
| LoongArch | `freg` | `$f[0-31]` | `f` |
629+
| LoongArch | `vreg` | `$vr[0-31]` | `f` |
630+
| LoongArch | `xreg` | `$xr[0-31]` | `f` |
629631
| s390x | `reg` | `r[0-10]`, `r[12-14]` | `r` |
630632
| s390x | `reg_addr` | `r[1-10]`, `r[12-14]` | `a` |
631633
| s390x | `freg` | `f[0-15]` | `f` |
@@ -683,7 +685,9 @@ Each register class has constraints on which value types they can be used with.
683685
| LoongArch32 | `reg` | None | `i8`, `i16`, `i32`, `f32` |
684686
| LoongArch64 | `reg` | None | `i8`, `i16`, `i32`, `i64`, `f32`, `f64` |
685687
| LoongArch | `freg` | `f` | `f32` |
686-
| LoongArch | `freg` | `d` | `f64` |
688+
| LoongArch | `freg` | `d` | 'f32', `f64` |
689+
| LoongArch | `vreg` | `lsx` | `f32`, `f64`, <br> `i8x16`, `i16x8`, `i32x4`, `i64x2`, `f32x4`, `f64x2` |
690+
| LoongArch | `xreg` | `lasx` | `f32`, `f64`, <br> `i8x16`, `i16x8`, `i32x4`, `i64x2`, `f32x4`, `f64x2`, <br> `i8x32`, `i16x16`, `i32x8`, `i64x4`, `f32x8`, `f64x4` |
687691
| s390x | `reg`, `reg_addr` | None | `i8`, `i16`, `i32`, `i64` |
688692
| s390x | `freg` | None | `f32`, `f64` |
689693
| s390x | `vreg` | `vector` | `i32`, `f32`, `i64`, `f64`, `i128`, <br> `i8x16`, `i16x8`, `i32x4`, `i64x2`, `f32x4`, `f64x2` |
@@ -832,9 +836,9 @@ Some registers have multiple names. These are all treated by the compiler as ide
832836
| LoongArch | `$r21` | |
833837
| LoongArch | `$r22` | `$fp`, `$s9` |
834838
| LoongArch | `$r[23-31]` | `$s[0-8]` |
835-
| LoongArch | `$f[0-7]` | `$fa[0-7]` |
836-
| LoongArch | `$f[8-23]` | `$ft[0-15]` |
837-
| LoongArch | `$f[24-31]` | `$fs[0-7]` |
839+
| LoongArch | `$f[0-7]` | `$fa[0-7]`, `$vr[0-7]`, `$xr[0-7]` |
840+
| LoongArch | `$f[8-23]` | `$ft[0-15]`, `$vr[8-23]`, `$xr[8-23]` |
841+
| LoongArch | `$f[24-31]` | `$fs[0-7]`, `$vr[24-31]`, `$xr[24-31]` |
838842
| PowerPC/PowerPC64 | `r1` | `sp` |
839843
| PowerPC/PowerPC64 | `r31` | `fp` |
840844
| PowerPC/PowerPC64 | `r[0-31]` | `[0-31]` |
@@ -945,6 +949,12 @@ The supported modifiers are a subset of LLVM's (and GCC's) [asm template argumen
945949
| RISC-V | `freg` | None | `f0` | None |
946950
| LoongArch | `reg` | None | `$r1` | None |
947951
| LoongArch | `freg` | None | `$f0` | None |
952+
| LoongArch | `freg` | `w` | `$vr0` | `w` |
953+
| LoongArch | `freg` | `u` | `$xr0` | `u` |
954+
| LoongArch | `vreg` | None | `$vr0` | `w` |
955+
| LoongArch | `vreg` | `u` | `$xr0` | `u` |
956+
| LoongArch | `xreg` | None | `$xr0` | `u` |
957+
| LoongArch | `xreg` | `w` | `$vr0` | `w` |
948958
| s390x | `reg` | None | `%r0` | None |
949959
| s390x | `reg_addr` | None | `%r1` | None |
950960
| s390x | `freg` | None | `%f0` | None |

0 commit comments

Comments
 (0)