Commit 26fa818d authored by Jakub Kicinski's avatar Jakub Kicinski Committed by David S. Miller

nfp: bpf: fix compare instructions

Now that we have BPF assemebler support in LLVM 6 we can easily
test all compare instructions (LLVM 4 didn't generate most of them
from C).  Fix the compare to immediates and refactor the order
of compare to regs to make sure they both follow the same pattern.
Signed-off-by: default avatarJakub Kicinski <jakub.kicinski@netronome.com>
Reviewed-by: default avatarSimon Horman <simon.horman@netronome.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 82837370
...@@ -720,7 +720,10 @@ wrp_cmp_reg(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta, ...@@ -720,7 +720,10 @@ wrp_cmp_reg(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta,
enum br_mask br_mask, bool swap) enum br_mask br_mask, bool swap)
{ {
const struct bpf_insn *insn = &meta->insn; const struct bpf_insn *insn = &meta->insn;
u8 areg = insn->src_reg * 2, breg = insn->dst_reg * 2; u8 areg, breg;
areg = insn->dst_reg * 2;
breg = insn->src_reg * 2;
if (insn->off < 0) /* TODO */ if (insn->off < 0) /* TODO */
return -EOPNOTSUPP; return -EOPNOTSUPP;
...@@ -1129,22 +1132,22 @@ static int jeq_imm(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta) ...@@ -1129,22 +1132,22 @@ static int jeq_imm(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta)
static int jgt_imm(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta) static int jgt_imm(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta)
{ {
return wrp_cmp_imm(nfp_prog, meta, BR_BLO, false); return wrp_cmp_imm(nfp_prog, meta, BR_BLO, true);
} }
static int jge_imm(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta) static int jge_imm(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta)
{ {
return wrp_cmp_imm(nfp_prog, meta, BR_BHS, true); return wrp_cmp_imm(nfp_prog, meta, BR_BHS, false);
} }
static int jlt_imm(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta) static int jlt_imm(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta)
{ {
return wrp_cmp_imm(nfp_prog, meta, BR_BHS, false); return wrp_cmp_imm(nfp_prog, meta, BR_BLO, false);
} }
static int jle_imm(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta) static int jle_imm(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta)
{ {
return wrp_cmp_imm(nfp_prog, meta, BR_BLO, true); return wrp_cmp_imm(nfp_prog, meta, BR_BHS, true);
} }
static int jset_imm(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta) static int jset_imm(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta)
...@@ -1227,22 +1230,22 @@ static int jeq_reg(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta) ...@@ -1227,22 +1230,22 @@ static int jeq_reg(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta)
static int jgt_reg(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta) static int jgt_reg(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta)
{ {
return wrp_cmp_reg(nfp_prog, meta, BR_BLO, false); return wrp_cmp_reg(nfp_prog, meta, BR_BLO, true);
} }
static int jge_reg(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta) static int jge_reg(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta)
{ {
return wrp_cmp_reg(nfp_prog, meta, BR_BHS, true); return wrp_cmp_reg(nfp_prog, meta, BR_BHS, false);
} }
static int jlt_reg(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta) static int jlt_reg(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta)
{ {
return wrp_cmp_reg(nfp_prog, meta, BR_BHS, false); return wrp_cmp_reg(nfp_prog, meta, BR_BLO, false);
} }
static int jle_reg(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta) static int jle_reg(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta)
{ {
return wrp_cmp_reg(nfp_prog, meta, BR_BLO, true); return wrp_cmp_reg(nfp_prog, meta, BR_BHS, true);
} }
static int jset_reg(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta) static int jset_reg(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment