diff options
Diffstat (limited to 'sim/testsuite/bpf/xadd.s')
-rw-r--r-- | sim/testsuite/bpf/xadd.s | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/sim/testsuite/bpf/xadd.s b/sim/testsuite/bpf/xadd.s new file mode 100644 index 0000000..be60714 --- /dev/null +++ b/sim/testsuite/bpf/xadd.s @@ -0,0 +1,44 @@ +# 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 |