# mach: bpf # output: pass\nexit 0 (0x0)\n ;;; xadd.s ;;; Tests for BPF atomic exchange-and-add instructions in simulator ;;; ;;; The xadd instructions (XADDW, XADDDW) operate on a memory location ;;; specified in $dst + offset16, atomically adding the value in $src. ;;; ;;; In the simulator, there isn't anything else happening. The atomic ;;; instructions are identical to a non-atomic load/add/store. .include "testutils.inc" .text .global main .type main, @function main: mov %r1, 0x1000 mov %r2, 5 ;; basic xadd w stw [%r1+0], 10 xaddw [%r1+0], %r2 ldxw %r3, [%r1+0] fail_ne %r3, 15 ;; basic xadd dw stdw [%r1+8], 42 xadddw [%r1+8], %r2 ldxdw %r3, [%r1+8] fail_ne %r3, 47 ;; xadd w negative value mov %r4, -1 xaddw [%r1+0], %r4 ldxw %r3, [%r1+0] fail_ne %r3, 14 ;; xadd dw negative val xadddw [%r1+8], %r4 ldxdw %r3, [%r1+8] fail_ne %r3, 46 pass