]> gcc.gnu.org Git - gcc.git/commit
RISCV: Inline subword atomic ops
authorPatrick O'Neill <patrick@rivosinc.com>
Tue, 18 Apr 2023 21:33:13 +0000 (14:33 -0700)
committerPatrick O'Neill <patrick@rivosinc.com>
Tue, 16 May 2023 16:53:09 +0000 (09:53 -0700)
commit55088cf384d4c43e280ec794217e32fab64070ba
tree622f24bf0b5db5b57c3b78d74000adad29aff32d
parent7fb7d49b3c7129fa8a6b500f260abc642929361b
RISCV: Inline subword atomic ops

RISC-V has no support for subword atomic operations; code currently
generates libatomic library calls.

This patch changes the default behavior to inline subword atomic calls
(using the same logic as the existing library call).
Behavior can be specified using the -minline-atomics and
-mno-inline-atomics command line flags.

gcc/libgcc/config/riscv/atomic.c has the same logic implemented in asm.
This will need to stay for backwards compatibility and the
-mno-inline-atomics flag.

2023-05-03 Patrick O'Neill <patrick@rivosinc.com>

gcc/ChangeLog:
PR target/104338
* config/riscv/riscv-protos.h: Add helper function stubs.
* config/riscv/riscv.cc: Add helper functions for subword masking.
* config/riscv/riscv.opt: Add command-line flags
-minline-atomics and -mno-inline-atomics.
* config/riscv/sync.md: Add masking logic and inline asm for
fetch_and_op, fetch_and_nand, CAS, and exchange ops.
* doc/invoke.texi: Add blurb regarding new command-line flags
-minline-atomics and -mno-inline-atomics.

libgcc/ChangeLog:
PR target/104338
* config/riscv/atomic.c: Add reference to duplicate logic.

gcc/testsuite/ChangeLog:
PR target/104338
* gcc.target/riscv/inline-atomics-1.c: New test.
* gcc.target/riscv/inline-atomics-2.c: New test.
* gcc.target/riscv/inline-atomics-3.c: New test.
* gcc.target/riscv/inline-atomics-4.c: New test.
* gcc.target/riscv/inline-atomics-5.c: New test.
* gcc.target/riscv/inline-atomics-6.c: New test.
* gcc.target/riscv/inline-atomics-7.c: New test.
* gcc.target/riscv/inline-atomics-8.c: New test.

Signed-off-by: Patrick O'Neill <patrick@rivosinc.com>
Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
14 files changed:
gcc/config/riscv/riscv-protos.h
gcc/config/riscv/riscv.cc
gcc/config/riscv/riscv.opt
gcc/config/riscv/sync.md
gcc/doc/invoke.texi
gcc/testsuite/gcc.target/riscv/inline-atomics-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/inline-atomics-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/inline-atomics-3.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/inline-atomics-4.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/inline-atomics-5.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/inline-atomics-6.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/inline-atomics-7.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/inline-atomics-8.c [new file with mode: 0644]
libgcc/config/riscv/atomic.c
This page took 0.071389 seconds and 6 git commands to generate.