@@ -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>
@@ -1163,12 +1162,11 @@ def : Pat<(i32 (trunc GPR:$src)),
1163
1162
def : Pat<(i64 (anyext GPR32:$src)),
1164
1163
(INSERT_SUBREG (i64 (IMPLICIT_DEF)), GPR32:$src, sub_32)>;
1165
1164
1166
- class STORE32<BPFWidthModifer SizeOp, string OpcodeStr , list<dag> Pattern>
1167
- : TYPE_LD_ST<BPF_MEM .Value, SizeOp.Value,
1165
+ class STORE32<BPFWidthModifer SizeOp, BPFModeModifer ModOp, string AsmString , list<dag> Pattern>
1166
+ : TYPE_LD_ST<ModOp .Value, SizeOp.Value,
1168
1167
(outs),
1169
1168
(ins GPR32:$src, MEMri:$addr),
1170
- "*("#OpcodeStr#" *)($addr) = $src",
1171
- Pattern> {
1169
+ AsmString, Pattern> {
1172
1170
bits<4> src;
1173
1171
bits<20> addr;
1174
1172
@@ -1179,20 +1177,20 @@ class STORE32<BPFWidthModifer SizeOp, string OpcodeStr, list<dag> Pattern>
1179
1177
}
1180
1178
1181
1179
class STOREi32<BPFWidthModifer Opc, string OpcodeStr, PatFrag OpNode>
1182
- : STORE32<Opc, OpcodeStr, [(OpNode GPR32:$src, ADDRri:$addr)]>;
1180
+ : STORE32<Opc, BPF_MEM, "*("#OpcodeStr#" *)($addr) = $src",
1181
+ [(OpNode GPR32:$src, ADDRri:$addr)]>;
1183
1182
1184
1183
let Predicates = [BPFHasALU32], DecoderNamespace = "BPFALU32" in {
1185
1184
def STW32 : STOREi32<BPF_W, "u32", store>;
1186
1185
def STH32 : STOREi32<BPF_H, "u16", truncstorei16>;
1187
1186
def STB32 : STOREi32<BPF_B, "u8", truncstorei8>;
1188
1187
}
1189
1188
1190
- class LOAD32<BPFWidthModifer SizeOp, BPFModeModifer ModOp, string OpcodeStr , list<dag> Pattern>
1189
+ class LOAD32<BPFWidthModifer SizeOp, BPFModeModifer ModOp, string AsmString , list<dag> Pattern>
1191
1190
: TYPE_LD_ST<ModOp.Value, SizeOp.Value,
1192
1191
(outs GPR32:$dst),
1193
1192
(ins MEMri:$addr),
1194
- "$dst = *("#OpcodeStr#" *)($addr)",
1195
- Pattern> {
1193
+ AsmString, Pattern> {
1196
1194
bits<4> dst;
1197
1195
bits<20> addr;
1198
1196
@@ -1203,7 +1201,8 @@ class LOAD32<BPFWidthModifer SizeOp, BPFModeModifer ModOp, string OpcodeStr, lis
1203
1201
}
1204
1202
1205
1203
class LOADi32<BPFWidthModifer SizeOp, BPFModeModifer ModOp, string OpcodeStr, PatFrag OpNode>
1206
- : LOAD32<SizeOp, ModOp, OpcodeStr, [(set i32:$dst, (OpNode ADDRri:$addr))]>;
1204
+ : LOAD32<SizeOp, ModOp, "$dst = *("#OpcodeStr#" *)($addr)",
1205
+ [(set i32:$dst, (OpNode ADDRri:$addr))]>;
1207
1206
1208
1207
let Predicates = [BPFHasALU32], DecoderNamespace = "BPFALU32" in {
1209
1208
def LDW32 : LOADi32<BPF_W, BPF_MEM, "u32", load>;
0 commit comments