@@ -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