@@ -138,6 +138,10 @@ class PI<bits<6> pref, bits<6> opcode, dag OOL, dag IOL, string asmstr,
138138 bits<1> Prefixed = 1; // This is a prefixed instruction.
139139 let TSFlags{7} = Prefixed;
140140
141+ // Indicate that this instruction takes a register+immediate memory operand.
142+ bits<1> MemriOp = 0;
143+ let TSFlags{10} = MemriOp;
144+
141145 // For cases where multiple instruction definitions really represent the
142146 // same underlying instruction but with one definition for 64-bit arguments
143147 // and one for 32-bit arguments, this bit breaks the degeneracy between
@@ -183,7 +187,7 @@ multiclass VXForm_VTB5_RCr<bits<10> xo, bits<5> R, dag OOL, dag IOL,
183187
184188class MLS_DForm_R_SI34_RTA5_MEM<bits<6> opcode, dag OOL, dag IOL, string asmstr,
185189 InstrItinClass itin, list<dag> pattern>
186- : PI<1, opcode, OOL, IOL, asmstr, itin> {
190+ : PI<1, opcode, OOL, IOL, asmstr, itin>, MemriOp {
187191 bits<5> RST;
188192 bits<5> RA;
189193 bits<34> D;
@@ -257,7 +261,7 @@ multiclass MLS_DForm_R_SI34_RTA5_p<bits<6> opcode, dag OOL, dag IOL,
257261
258262class 8LS_DForm_R_SI34_RTA5_MEM<bits<6> opcode, dag OOL, dag IOL, string asmstr,
259263 InstrItinClass itin, list<dag> pattern>
260- : PI<1, opcode, OOL, IOL, asmstr, itin> {
264+ : PI<1, opcode, OOL, IOL, asmstr, itin>, MemriOp {
261265 bits<5> RST;
262266 bits<5> RA;
263267 bits<34> D;
@@ -281,7 +285,7 @@ class 8LS_DForm_R_SI34_RTA5_MEM<bits<6> opcode, dag OOL, dag IOL, string asmstr,
281285class 8LS_DForm_R_SI34_XT6_RA5_MEM<bits<5> opcode, dag OOL, dag IOL,
282286 string asmstr, InstrItinClass itin,
283287 list<dag> pattern>
284- : PI<1, { opcode, ? }, OOL, IOL, asmstr, itin> {
288+ : PI<1, { opcode, ? }, OOL, IOL, asmstr, itin>, MemriOp {
285289 bits<6> XST;
286290 bits<5> RA;
287291 bits<34> D;
@@ -585,7 +589,7 @@ multiclass MLS_DForm_R_SI34_RTA5_MEM_p<bits<6> opcode, dag OOL, dag IOL,
585589 isPCRel;
586590 let isAsmParserOnly = 1, hasNoSchedulingInfo = 1 in {
587591 def nopc : MLS_DForm_R_SI34_RTA5_MEM<opcode, OOL, IOL, asmstr, itin, []>;
588- let RA = 0 in
592+ let RA = 0, MemriOp = 0 in
589593 def onlypc : MLS_DForm_R_SI34_RTA5_MEM<opcode, OOL, PCRelOnly_IOL,
590594 asmstr_pcext, itin, []>, isPCRel;
591595 }
@@ -602,7 +606,7 @@ multiclass 8LS_DForm_R_SI34_RTA5_MEM_p<bits<6> opcode, dag OOL, dag IOL,
602606 isPCRel;
603607 let isAsmParserOnly = 1, hasNoSchedulingInfo = 1 in {
604608 def nopc : 8LS_DForm_R_SI34_RTA5_MEM<opcode, OOL, IOL, asmstr, itin, []>;
605- let RA = 0 in
609+ let RA = 0, MemriOp = 0 in
606610 def onlypc : 8LS_DForm_R_SI34_RTA5_MEM<opcode, OOL, PCRelOnly_IOL,
607611 asmstr_pcext, itin, []>, isPCRel;
608612 }
@@ -619,7 +623,7 @@ multiclass 8LS_DForm_R_SI34_XT6_RA5_MEM_p<bits<5> opcode, dag OOL, dag IOL,
619623 isPCRel;
620624 let isAsmParserOnly = 1, hasNoSchedulingInfo = 1 in {
621625 def nopc : 8LS_DForm_R_SI34_XT6_RA5_MEM<opcode, OOL, IOL, asmstr, itin, []>;
622- let RA = 0 in
626+ let RA = 0, MemriOp = 0 in
623627 def onlypc : 8LS_DForm_R_SI34_XT6_RA5_MEM<opcode, OOL, PCRelOnly_IOL,
624628 asmstr_pcext, itin, []>, isPCRel;
625629 }
@@ -847,7 +851,7 @@ let Predicates = [PrefixInstrs, HasP10Vector] in {
847851
848852class DQForm_XTp5_RA17_MEM<bits<6> opcode, bits<4> xo, dag OOL, dag IOL,
849853 string asmstr, InstrItinClass itin, list<dag> pattern>
850- : I<opcode, OOL, IOL, asmstr, itin> {
854+ : I<opcode, OOL, IOL, asmstr, itin>, MemriOp {
851855 bits<5> XTp;
852856 bits<5> RA;
853857 bits<12> DQ;
@@ -879,7 +883,7 @@ class XForm_XTp5_XAB5<bits<6> opcode, bits<10> xo, dag OOL, dag IOL,
879883
880884class 8LS_DForm_R_XTp5_SI34_MEM<bits<6> opcode, dag OOL, dag IOL, string asmstr,
881885 InstrItinClass itin, list<dag> pattern>
882- : PI<1, opcode, OOL, IOL, asmstr, itin> {
886+ : PI<1, opcode, OOL, IOL, asmstr, itin>, MemriOp {
883887 bits<5> XTp;
884888 bits<5> RA;
885889 bits<34> D;
@@ -910,7 +914,7 @@ multiclass 8LS_DForm_R_XTp5_SI34_MEM_p<bits<6> opcode, dag OOL,
910914 isPCRel;
911915 let isAsmParserOnly = 1, hasNoSchedulingInfo = 1 in {
912916 def nopc : 8LS_DForm_R_XTp5_SI34_MEM<opcode, OOL, IOL, asmstr, itin, []>;
913- let RA = 0 in
917+ let RA = 0, MemriOp = 0 in
914918 def onlypc : 8LS_DForm_R_XTp5_SI34_MEM<opcode, OOL, PCRelOnly_IOL,
915919 asmstr_pcext, itin, []>, isPCRel;
916920 }
@@ -2506,7 +2510,7 @@ let Predicates = [IsISA3_1, PrefixInstrs], isAsmParserOnly = 1, hasNoSchedulingI
25062510 let Interpretation64Bit = 1 in {
25072511 def PLA8 : MLS_DForm_SI34_RT5<14, (outs g8rc:$RT),
25082512 (ins g8rc_nox0:$RA, s34imm:$SI),
2509- "pla $RT, ${SI} ${RA}", IIC_IntSimple, []>;
2513+ "pla $RT, ${SI} ${RA}", IIC_IntSimple, []>, MemriOp ;
25102514 def PLA8pc : MLS_DForm_SI34_RT5<14, (outs g8rc:$RT),
25112515 (ins s34imm_pcrel:$SI),
25122516 "pla $RT, $SI", IIC_IntSimple, []>, isPCRel;
@@ -2517,7 +2521,7 @@ let Predicates = [IsISA3_1, PrefixInstrs], isAsmParserOnly = 1, hasNoSchedulingI
25172521
25182522 def PLA : MLS_DForm_SI34_RT5<14, (outs gprc:$RT),
25192523 (ins gprc_nor0:$RA, s34imm:$SI),
2520- "pla $RT, ${SI} ${RA}", IIC_IntSimple, []>;
2524+ "pla $RT, ${SI} ${RA}", IIC_IntSimple, []>, MemriOp ;
25212525 def PLApc : MLS_DForm_SI34_RT5<14, (outs gprc:$RT),
25222526 (ins s34imm_pcrel:$SI),
25232527 "pla $RT, $SI", IIC_IntSimple, []>, isPCRel;
0 commit comments