From 4200337219274445a17e16d18d3c113f555cc786 Mon Sep 17 00:00:00 2001 From: "Jose E. Marchesi" Date: Wed, 26 Jul 2023 11:44:20 +0200 Subject: [PATCH] bpf: fix neg and neg32 BPF instructions in simulator This patch fixes the semantics of the neg and neg32 BPF instructions in the simulator, and also updates the corresponding tests accordingly. Tested in target bpf-unknown-none. --- sim/bpf/bpf-sim.c | 4 ++-- sim/testsuite/bpf/alu.s | 4 ++-- sim/testsuite/bpf/alu32.s | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/sim/bpf/bpf-sim.c b/sim/bpf/bpf-sim.c index 8d3a28e1940..5e01ddeca9f 100644 --- a/sim/bpf/bpf-sim.c +++ b/sim/bpf/bpf-sim.c @@ -728,7 +728,7 @@ execute (SIM_CPU *cpu, struct bpf_insn *insn) break; case BPF_INSN_NEGR: BPF_TRACE ("BPF_INSN_NEGR\n"); - bpf_regs[insn->dst] = - (int64_t) bpf_regs[insn->src]; + bpf_regs[insn->dst] = - (int64_t) bpf_regs[insn->dst]; break; case BPF_INSN_NEGI: BPF_TRACE ("BPF_INSN_NEGI\n"); @@ -865,7 +865,7 @@ execute (SIM_CPU *cpu, struct bpf_insn *insn) break; case BPF_INSN_NEG32R: BPF_TRACE ("BPF_INSN_NEG32R\n"); - bpf_regs[insn->dst] = (uint32_t) (- (int32_t) bpf_regs[insn->src]); + bpf_regs[insn->dst] = (uint32_t) (- (int32_t) bpf_regs[insn->dst]); break; case BPF_INSN_NEG32I: BPF_TRACE ("BPF_INSN_NEG32I\n"); diff --git a/sim/testsuite/bpf/alu.s b/sim/testsuite/bpf/alu.s index c073f67f819..4dc37b1f01a 100644 --- a/sim/testsuite/bpf/alu.s +++ b/sim/testsuite/bpf/alu.s @@ -112,10 +112,10 @@ main: fail_ne %r1, 0 ;; neg - neg %r2, %r2 + neg %r2 fail_ne %r2, -5 mov %r1, -1025 - neg %r1, %r1 + neg %r1 fail_ne %r1, 1025 pass diff --git a/sim/testsuite/bpf/alu32.s b/sim/testsuite/bpf/alu32.s index d797122daf1..e8d5062476c 100644 --- a/sim/testsuite/bpf/alu32.s +++ b/sim/testsuite/bpf/alu32.s @@ -100,11 +100,11 @@ main: ;; neg mov32 %r1, -1 mov32 %r2, 0x7fffffff - neg32 %r1, %r1 - neg32 %r2, %r2 + neg32 %r1 + neg32 %r2 fail_ne32 %r1, 1 fail_ne %r2, 0x80000001 ; Note: check for (bad) sign-extend - neg32 %r2, %r2 + neg32 %r2 fail_ne32 %r2, 0x7fffffff pass -- 2.30.2