1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- # 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
|