-
- Downloads
bpf: add v3 atomic instructions
This patch adds support for the general atomic operations introduced in eBPF v3. In addition to the existing atomic add instruction, this adds: - Atomic and, or, xor - Fetching versions of these operations (including add) - Atomic exchange - Atomic compare-and-exchange To control emission of these instructions, a new target option -m[no-]v3-atomics is added. This option is enabled by -mcpu=v3 and above. Support for these instructions was recently added in binutils. gcc/ * config/bpf/bpf.opt (mv3-atomics): New option. * config/bpf/bpf.cc (bpf_option_override): Handle it here. * config/bpf/bpf.h (enum_reg_class): Add R0 class. (REG_CLASS_NAMES): Likewise. (REG_CLASS_CONTENTS): Likewise. (REGNO_REG_CLASS): Handle R0. * config/bpf/bpf.md (UNSPEC_XADD): Rename to UNSPEC_AADD. (UNSPEC_AAND): New unspec. (UNSPEC_AOR): Likewise. (UNSPEC_AXOR): Likewise. (UNSPEC_AFADD): Likewise. (UNSPEC_AFAND): Likewise. (UNSPEC_AFOR): Likewise. (UNSPEC_AFXOR): Likewise. (UNSPEC_AXCHG): Likewise. (UNSPEC_ACMPX): Likewise. (atomic_add<mode>): Use UNSPEC_AADD and atomic type attribute. Move to... * config/bpf/atomic.md: ...Here. New file. * config/bpf/constraints.md (t): New constraint for R0. * doc/invoke.texi (eBPF Options): Document -mv3-atomics. gcc/testsuite/ * gcc.target/bpf/atomic-cmpxchg-1.c: New test. * gcc.target/bpf/atomic-cmpxchg-2.c: New test. * gcc.target/bpf/atomic-fetch-op-1.c: New test. * gcc.target/bpf/atomic-fetch-op-2.c: New test. * gcc.target/bpf/atomic-fetch-op-3.c: New test. * gcc.target/bpf/atomic-op-1.c: New test. * gcc.target/bpf/atomic-op-2.c: New test. * gcc.target/bpf/atomic-op-3.c: New test. * gcc.target/bpf/atomic-xchg-1.c: New test. * gcc.target/bpf/atomic-xchg-2.c: New test.
Showing
- gcc/config/bpf/atomic.md 185 additions, 0 deletionsgcc/config/bpf/atomic.md
- gcc/config/bpf/bpf.cc 3 additions, 0 deletionsgcc/config/bpf/bpf.cc
- gcc/config/bpf/bpf.h 5 additions, 1 deletiongcc/config/bpf/bpf.h
- gcc/config/bpf/bpf.md 12 additions, 17 deletionsgcc/config/bpf/bpf.md
- gcc/config/bpf/bpf.opt 4 additions, 0 deletionsgcc/config/bpf/bpf.opt
- gcc/config/bpf/constraints.md 3 additions, 0 deletionsgcc/config/bpf/constraints.md
- gcc/doc/invoke.texi 7 additions, 1 deletiongcc/doc/invoke.texi
- gcc/testsuite/gcc.target/bpf/atomic-cmpxchg-1.c 19 additions, 0 deletionsgcc/testsuite/gcc.target/bpf/atomic-cmpxchg-1.c
- gcc/testsuite/gcc.target/bpf/atomic-cmpxchg-2.c 19 additions, 0 deletionsgcc/testsuite/gcc.target/bpf/atomic-cmpxchg-2.c
- gcc/testsuite/gcc.target/bpf/atomic-fetch-op-1.c 50 additions, 0 deletionsgcc/testsuite/gcc.target/bpf/atomic-fetch-op-1.c
- gcc/testsuite/gcc.target/bpf/atomic-fetch-op-2.c 50 additions, 0 deletionsgcc/testsuite/gcc.target/bpf/atomic-fetch-op-2.c
- gcc/testsuite/gcc.target/bpf/atomic-fetch-op-3.c 49 additions, 0 deletionsgcc/testsuite/gcc.target/bpf/atomic-fetch-op-3.c
- gcc/testsuite/gcc.target/bpf/atomic-op-1.c 49 additions, 0 deletionsgcc/testsuite/gcc.target/bpf/atomic-op-1.c
- gcc/testsuite/gcc.target/bpf/atomic-op-2.c 49 additions, 0 deletionsgcc/testsuite/gcc.target/bpf/atomic-op-2.c
- gcc/testsuite/gcc.target/bpf/atomic-op-3.c 49 additions, 0 deletionsgcc/testsuite/gcc.target/bpf/atomic-op-3.c
- gcc/testsuite/gcc.target/bpf/atomic-xchg-1.c 20 additions, 0 deletionsgcc/testsuite/gcc.target/bpf/atomic-xchg-1.c
- gcc/testsuite/gcc.target/bpf/atomic-xchg-2.c 20 additions, 0 deletionsgcc/testsuite/gcc.target/bpf/atomic-xchg-2.c
Loading
Please register or sign in to comment