From: Jiong Wang <jiong.w...@netronome.com>

When immed is used with No-Dest, the emitter should use reg.dst instead of
reg.areg for the destination, using the latter will actually encode
register zero.

Signed-off-by: Jiong Wang <jiong.w...@netronome.com>
Reviewed-by: Jakub Kicinski <jakub.kicin...@netronome.com>
---
 drivers/net/ethernet/netronome/nfp/bpf/jit.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/netronome/nfp/bpf/jit.c 
b/drivers/net/ethernet/netronome/nfp/bpf/jit.c
index 54915a3b8a7e..024b44089623 100644
--- a/drivers/net/ethernet/netronome/nfp/bpf/jit.c
+++ b/drivers/net/ethernet/netronome/nfp/bpf/jit.c
@@ -224,9 +224,11 @@ emit_immed(struct nfp_prog *nfp_prog, swreg dst, u16 imm,
                return;
        }
 
-       __emit_immed(nfp_prog, reg.areg, reg.breg, imm >> 8, width,
-                    invert, shift, reg.wr_both,
-                    reg.dst_lmextn, reg.src_lmextn);
+       /* Use reg.dst when destination is No-Dest. */
+       __emit_immed(nfp_prog,
+                    swreg_type(dst) == NN_REG_NONE ? reg.dst : reg.areg,
+                    reg.breg, imm >> 8, width, invert, shift,
+                    reg.wr_both, reg.dst_lmextn, reg.src_lmextn);
 }
 
 static void
-- 
2.15.0

Reply via email to