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.
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");
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");
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
;; 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