@@ -497,12 +497,11 @@ def LD_pseudo
497
497
}
498
498
499
499
// 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,
502
502
(outs),
503
503
(ins GPR:$src, MEMri:$addr),
504
- "*("#OpcodeStr#" *)($addr) = $src",
505
- Pattern> {
504
+ AsmString, Pattern> {
506
505
bits<4> src;
507
506
bits<20> addr;
508
507
@@ -513,7 +512,7 @@ class STORE<BPFWidthModifer SizeOp, string OpcodeStr, list<dag> Pattern>
513
512
}
514
513
515
514
class 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)]>;
517
516
518
517
let Predicates = [BPFNoALU32] in {
519
518
def STW : STOREi64<BPF_W, "u32", truncstorei32>;
@@ -567,12 +566,11 @@ let Predicates = [BPFHasALU32, BPFHasStoreImm] in {
567
566
}
568
567
569
568
// 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>
571
570
: TYPE_LD_ST<ModOp.Value, SizeOp.Value,
572
571
(outs GPR:$dst),
573
572
(ins MEMri:$addr),
574
- "$dst = *("#OpcodeStr#" *)($addr)",
575
- Pattern> {
573
+ AsmString, Pattern> {
576
574
bits<4> dst;
577
575
bits<20> addr;
578
576
@@ -583,7 +581,8 @@ class LOAD<BPFWidthModifer SizeOp, BPFModeModifer ModOp, string OpcodeStr, list<
583
581
}
584
582
585
583
class 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))]>;
587
586
588
587
let isCodeGenOnly = 1 in {
589
588
class CORE_LD<RegisterClass RegClass, string Sz>
@@ -1069,12 +1068,11 @@ def : Pat<(i32 (trunc GPR:$src)),
1069
1068
def : Pat<(i64 (anyext GPR32:$src)),
1070
1069
(INSERT_SUBREG (i64 (IMPLICIT_DEF)), GPR32:$src, sub_32)>;
1071
1070
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,
1074
1073
(outs),
1075
1074
(ins GPR32:$src, MEMri:$addr),
1076
- "*("#OpcodeStr#" *)($addr) = $src",
1077
- Pattern> {
1075
+ AsmString, Pattern> {
1078
1076
bits<4> src;
1079
1077
bits<20> addr;
1080
1078
@@ -1085,20 +1083,20 @@ class STORE32<BPFWidthModifer SizeOp, string OpcodeStr, list<dag> Pattern>
1085
1083
}
1086
1084
1087
1085
class 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)]>;
1089
1088
1090
1089
let Predicates = [BPFHasALU32], DecoderNamespace = "BPFALU32" in {
1091
1090
def STW32 : STOREi32<BPF_W, "u32", store>;
1092
1091
def STH32 : STOREi32<BPF_H, "u16", truncstorei16>;
1093
1092
def STB32 : STOREi32<BPF_B, "u8", truncstorei8>;
1094
1093
}
1095
1094
1096
- class LOAD32<BPFWidthModifer SizeOp, BPFModeModifer ModOp, string OpcodeStr , list<dag> Pattern>
1095
+ class LOAD32<BPFWidthModifer SizeOp, BPFModeModifer ModOp, string AsmString , list<dag> Pattern>
1097
1096
: TYPE_LD_ST<ModOp.Value, SizeOp.Value,
1098
1097
(outs GPR32:$dst),
1099
1098
(ins MEMri:$addr),
1100
- "$dst = *("#OpcodeStr#" *)($addr)",
1101
- Pattern> {
1099
+ AsmString, Pattern> {
1102
1100
bits<4> dst;
1103
1101
bits<20> addr;
1104
1102
@@ -1109,7 +1107,8 @@ class LOAD32<BPFWidthModifer SizeOp, BPFModeModifer ModOp, string OpcodeStr, lis
1109
1107
}
1110
1108
1111
1109
class 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))]>;
1113
1112
1114
1113
let Predicates = [BPFHasALU32], DecoderNamespace = "BPFALU32" in {
1115
1114
def LDW32 : LOADi32<BPF_W, BPF_MEM, "u32", load>;
0 commit comments