# 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