Merge branch 'bpf-nfp-codegen-fixes'
Jiong Wang says: ==================== Code-gen for BPF_ALU | BPF_XOR | BPF_K is wrong when imm is -1, also high 32-bit of 64-bit register should always be cleared. This set fixed both bugs. ==================== Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
This commit is contained in:
commit
7d466e5fb1
|
@ -1291,15 +1291,10 @@ wrp_alu64_reg(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta,
|
|||
|
||||
static int
|
||||
wrp_alu32_imm(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta,
|
||||
enum alu_op alu_op, bool skip)
|
||||
enum alu_op alu_op)
|
||||
{
|
||||
const struct bpf_insn *insn = &meta->insn;
|
||||
|
||||
if (skip) {
|
||||
meta->skip = true;
|
||||
return 0;
|
||||
}
|
||||
|
||||
wrp_alu_imm(nfp_prog, insn->dst_reg * 2, alu_op, insn->imm);
|
||||
wrp_immed(nfp_prog, reg_both(insn->dst_reg * 2 + 1), 0);
|
||||
|
||||
|
@ -2309,7 +2304,7 @@ static int xor_reg(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta)
|
|||
|
||||
static int xor_imm(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta)
|
||||
{
|
||||
return wrp_alu32_imm(nfp_prog, meta, ALU_OP_XOR, !~meta->insn.imm);
|
||||
return wrp_alu32_imm(nfp_prog, meta, ALU_OP_XOR);
|
||||
}
|
||||
|
||||
static int and_reg(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta)
|
||||
|
@ -2319,7 +2314,7 @@ static int and_reg(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta)
|
|||
|
||||
static int and_imm(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta)
|
||||
{
|
||||
return wrp_alu32_imm(nfp_prog, meta, ALU_OP_AND, !~meta->insn.imm);
|
||||
return wrp_alu32_imm(nfp_prog, meta, ALU_OP_AND);
|
||||
}
|
||||
|
||||
static int or_reg(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta)
|
||||
|
@ -2329,7 +2324,7 @@ static int or_reg(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta)
|
|||
|
||||
static int or_imm(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta)
|
||||
{
|
||||
return wrp_alu32_imm(nfp_prog, meta, ALU_OP_OR, !meta->insn.imm);
|
||||
return wrp_alu32_imm(nfp_prog, meta, ALU_OP_OR);
|
||||
}
|
||||
|
||||
static int add_reg(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta)
|
||||
|
@ -2339,7 +2334,7 @@ static int add_reg(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta)
|
|||
|
||||
static int add_imm(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta)
|
||||
{
|
||||
return wrp_alu32_imm(nfp_prog, meta, ALU_OP_ADD, !meta->insn.imm);
|
||||
return wrp_alu32_imm(nfp_prog, meta, ALU_OP_ADD);
|
||||
}
|
||||
|
||||
static int sub_reg(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta)
|
||||
|
@ -2349,7 +2344,7 @@ static int sub_reg(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta)
|
|||
|
||||
static int sub_imm(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta)
|
||||
{
|
||||
return wrp_alu32_imm(nfp_prog, meta, ALU_OP_SUB, !meta->insn.imm);
|
||||
return wrp_alu32_imm(nfp_prog, meta, ALU_OP_SUB);
|
||||
}
|
||||
|
||||
static int mul_reg(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta)
|
||||
|
|
Loading…
Reference in New Issue