File tree Expand file tree Collapse file tree 2 files changed +23
-1
lines changed
Expand file tree Collapse file tree 2 files changed +23
-1
lines changed Original file line number Diff line number Diff line change @@ -108,6 +108,14 @@ bool RISCVTargetInfo::validateAsmConstraint(
108108 return true ;
109109 }
110110 return false ;
111+ case ' P' :
112+ // An even-odd register pair - GPR
113+ if (Name[1 ] == ' r' ) {
114+ Info.setAllowsRegister ();
115+ Name += 1 ;
116+ return true ;
117+ }
118+ return false ;
111119 case ' v' :
112120 // A vector register.
113121 if (Name[1 ] == ' r' || Name[1 ] == ' d' || Name[1 ] == ' m' ) {
@@ -122,8 +130,9 @@ bool RISCVTargetInfo::validateAsmConstraint(
122130std::string RISCVTargetInfo::convertConstraint (const char *&Constraint) const {
123131 std::string R;
124132 switch (*Constraint) {
125- // c* and v* are two-letter constraints on RISC-V.
133+ // c*, P*, and v* are all two-letter constraints on RISC-V.
126134 case ' c' :
135+ case ' P' :
127136 case ' v' :
128137 R = std::string (" ^" ) + std::string (Constraint, 2 );
129138 Constraint += 1 ;
Original file line number Diff line number Diff line change @@ -33,6 +33,19 @@ void test_cf(float f, double d) {
3333 asm volatile ("" : "=cf" (cd ) : "cf" (d ));
3434}
3535
36+ #if __riscv_xlen == 32
37+ typedef long long double_xlen_t ;
38+ #elif __riscv_xlen == 64
39+ typedef __int128_t double_xlen_t ;
40+ #endif
41+ double_xlen_t test_Pr_wide_scalar (double_xlen_t p ) {
42+ // CHECK-LABEL: define{{.*}} {{i128|i64}} @test_Pr_wide_scalar(
43+ // CHECK: call {{i128|i64}} asm sideeffect "", "=^Pr,^Pr"({{i128|i64}} %{{.*}})
44+ double_xlen_t ret ;
45+ asm volatile ("" : "=Pr" (ret ) : "Pr" (p ));
46+ return ret ;
47+ }
48+
3649void test_I (void ) {
3750// CHECK-LABEL: define{{.*}} void @test_I()
3851// CHECK: call void asm sideeffect "", "I"(i32 2047)
You can’t perform that action at this time.
0 commit comments