xref: /netbsd-src/external/gpl3/gdb/dist/sim/testsuite/bpf/xadd.s (revision 22ebeae4b2252475e0ebe332f69734639cb946ea)
1# mach: bpf
2# output: pass\nexit 0 (0x0)\n
3/* xadd.s
4   Tests for BPF atomic exchange-and-add instructions in simulator
5
6   The xadd instructions (XADDW, XADDDW) operate on a memory location
7   specified in $dst + offset16, atomically adding the value in $src.
8
9   In the simulator, there isn't anything else happening. The atomic
10   instructions are identical to a non-atomic load/add/store.  */
11
12    .include "testutils.inc"
13
14    .text
15    .global main
16    .type main, @function
17main:
18    mov         %r1, 0x1000
19    mov         %r2, 5
20
21    /* basic xadd w */
22    stw         [%r1+0], 10
23    xaddw       [%r1+0], %r2
24    ldxw        %r3, [%r1+0]
25    fail_ne     %r3, 15
26
27    /* basic xadd dw */
28    stdw        [%r1+8], 42
29    xadddw      [%r1+8], %r2
30    ldxdw       %r3, [%r1+8]
31    fail_ne     %r3, 47
32
33    /* xadd w negative value */
34    mov         %r4, -1
35    xaddw       [%r1+0], %r4
36    ldxw        %r3, [%r1+0]
37    fail_ne     %r3, 14
38
39    /* xadd dw negative val */
40    xadddw      [%r1+8], %r4
41    ldxdw       %r3, [%r1+8]
42    fail_ne     %r3, 46
43
44    pass
45