@@ -497,12 +497,11 @@ def LD_pseudo
497497}
498498
499499// STORE instructions
500- class STORE<BPFWidthModifer SizeOp, string OpcodeStr , list<dag> Pattern>
501- : TYPE_LD_ST<BPF_MEM .Value, SizeOp.Value,
500+ class STORE<BPFWidthModifer SizeOp, BPFModeModifer ModOp, string AsmString , list<dag> Pattern>
501+ : TYPE_LD_ST<ModOp .Value, SizeOp.Value,
502502 (outs),
503503 (ins GPR:$src, MEMri:$addr),
504- "*("#OpcodeStr#" *)($addr) = $src",
505- Pattern> {
504+ AsmString, Pattern> {
506505 bits<4> src;
507506 bits<20> addr;
508507
@@ -513,7 +512,7 @@ class STORE<BPFWidthModifer SizeOp, string OpcodeStr, list<dag> Pattern>
513512}
514513
515514class STOREi64<BPFWidthModifer Opc, string OpcodeStr, PatFrag OpNode>
516- : STORE<Opc, OpcodeStr, [(OpNode GPR:$src, ADDRri:$addr)]>;
515+ : STORE<Opc, BPF_MEM, "*("# OpcodeStr#" *)($addr) = $src" , [(OpNode GPR:$src, ADDRri:$addr)]>;
517516
518517let Predicates = [BPFNoALU32] in {
519518 def STW : STOREi64<BPF_W, "u32", truncstorei32>;
@@ -567,12 +566,11 @@ let Predicates = [BPFHasALU32, BPFHasStoreImm] in {
567566}
568567
569568// LOAD instructions
570- class LOAD<BPFWidthModifer SizeOp, BPFModeModifer ModOp, string OpcodeStr , list<dag> Pattern>
569+ class LOAD<BPFWidthModifer SizeOp, BPFModeModifer ModOp, string AsmString , list<dag> Pattern>
571570 : TYPE_LD_ST<ModOp.Value, SizeOp.Value,
572571 (outs GPR:$dst),
573572 (ins MEMri:$addr),
574- "$dst = *("#OpcodeStr#" *)($addr)",
575- Pattern> {
573+ AsmString, Pattern> {
576574 bits<4> dst;
577575 bits<20> addr;
578576
@@ -583,7 +581,8 @@ class LOAD<BPFWidthModifer SizeOp, BPFModeModifer ModOp, string OpcodeStr, list<
583581}
584582
585583class LOADi64<BPFWidthModifer SizeOp, BPFModeModifer ModOp, string OpcodeStr, PatFrag OpNode>
586- : LOAD<SizeOp, ModOp, OpcodeStr, [(set i64:$dst, (OpNode ADDRri:$addr))]>;
584+ : LOAD<SizeOp, ModOp, "$dst = *("#OpcodeStr#" *)($addr)",
585+ [(set i64:$dst, (OpNode ADDRri:$addr))]>;
587586
588587let isCodeGenOnly = 1 in {
589588 class CORE_LD<RegisterClass RegClass, string Sz>
@@ -1069,12 +1068,11 @@ def : Pat<(i32 (trunc GPR:$src)),
10691068def : Pat<(i64 (anyext GPR32:$src)),
10701069 (INSERT_SUBREG (i64 (IMPLICIT_DEF)), GPR32:$src, sub_32)>;
10711070
1072- class STORE32<BPFWidthModifer SizeOp, string OpcodeStr , list<dag> Pattern>
1073- : TYPE_LD_ST<BPF_MEM .Value, SizeOp.Value,
1071+ class STORE32<BPFWidthModifer SizeOp, BPFModeModifer ModOp, string AsmString , list<dag> Pattern>
1072+ : TYPE_LD_ST<ModOp .Value, SizeOp.Value,
10741073 (outs),
10751074 (ins GPR32:$src, MEMri:$addr),
1076- "*("#OpcodeStr#" *)($addr) = $src",
1077- Pattern> {
1075+ AsmString, Pattern> {
10781076 bits<4> src;
10791077 bits<20> addr;
10801078
@@ -1085,20 +1083,20 @@ class STORE32<BPFWidthModifer SizeOp, string OpcodeStr, list<dag> Pattern>
10851083}
10861084
10871085class STOREi32<BPFWidthModifer Opc, string OpcodeStr, PatFrag OpNode>
1088- : STORE32<Opc, OpcodeStr, [(OpNode GPR32:$src, ADDRri:$addr)]>;
1086+ : STORE32<Opc, BPF_MEM, "*("#OpcodeStr#" *)($addr) = $src",
1087+ [(OpNode GPR32:$src, ADDRri:$addr)]>;
10891088
10901089let Predicates = [BPFHasALU32], DecoderNamespace = "BPFALU32" in {
10911090 def STW32 : STOREi32<BPF_W, "u32", store>;
10921091 def STH32 : STOREi32<BPF_H, "u16", truncstorei16>;
10931092 def STB32 : STOREi32<BPF_B, "u8", truncstorei8>;
10941093}
10951094
1096- class LOAD32<BPFWidthModifer SizeOp, BPFModeModifer ModOp, string OpcodeStr , list<dag> Pattern>
1095+ class LOAD32<BPFWidthModifer SizeOp, BPFModeModifer ModOp, string AsmString , list<dag> Pattern>
10971096 : TYPE_LD_ST<ModOp.Value, SizeOp.Value,
10981097 (outs GPR32:$dst),
10991098 (ins MEMri:$addr),
1100- "$dst = *("#OpcodeStr#" *)($addr)",
1101- Pattern> {
1099+ AsmString, Pattern> {
11021100 bits<4> dst;
11031101 bits<20> addr;
11041102
@@ -1109,7 +1107,8 @@ class LOAD32<BPFWidthModifer SizeOp, BPFModeModifer ModOp, string OpcodeStr, lis
11091107}
11101108
11111109class LOADi32<BPFWidthModifer SizeOp, BPFModeModifer ModOp, string OpcodeStr, PatFrag OpNode>
1112- : LOAD32<SizeOp, ModOp, OpcodeStr, [(set i32:$dst, (OpNode ADDRri:$addr))]>;
1110+ : LOAD32<SizeOp, ModOp, "$dst = *("#OpcodeStr#" *)($addr)",
1111+ [(set i32:$dst, (OpNode ADDRri:$addr))]>;
11131112
11141113let Predicates = [BPFHasALU32], DecoderNamespace = "BPFALU32" in {
11151114 def LDW32 : LOADi32<BPF_W, BPF_MEM, "u32", load>;
0 commit comments