]> git.ipfire.org Git - thirdparty/gcc.git/commit
RISC-V: Add support for subword atomic loads/stores
authorPatrick O'Neill <patrick@rivosinc.com>
Thu, 13 Jun 2024 00:10:13 +0000 (17:10 -0700)
committerPatrick O'Neill <patrick@rivosinc.com>
Thu, 13 Jun 2024 23:36:30 +0000 (16:36 -0700)
commit5476853b225e1327ec857ee34fdec64429af84f6
treeece27bae160ec4866eb1f4b81d80cc1248c2def4
parent9b8c3e622c7cd4ea393f59b873c3107767e1ba88
RISC-V: Add support for subword atomic loads/stores

Andrea Parri recently pointed out that we were emitting overly conservative
fences for seq_cst atomic loads/stores. This adds support for the optimized
fences specified in the PSABI:
https://github.com/riscv-non-isa/riscv-elf-psabi-doc/blob/2092568f7896ceaa1ec0f02569b19eaa42cd51c9/riscv-atomic.adoc

gcc/ChangeLog:

* config/riscv/sync-rvwmo.md: Add support for subword fenced
loads/stores.
* config/riscv/sync-ztso.md: Ditto.
* config/riscv/sync.md: Ditto.

gcc/testsuite/ChangeLog:

* gcc.target/riscv/amo/amo-table-a-6-load-1.c: Increase test coverage to
include longs, shorts, chars, and bools.
* gcc.target/riscv/amo/amo-table-a-6-load-2.c: Ditto.
* gcc.target/riscv/amo/amo-table-a-6-load-3.c: Ditto.
* gcc.target/riscv/amo/amo-table-a-6-store-1.c: Ditto.
* gcc.target/riscv/amo/amo-table-a-6-store-2.c: Ditto.
* gcc.target/riscv/amo/amo-table-a-6-store-compat-3.c: Ditto.
* gcc.target/riscv/amo/amo-table-ztso-load-1.c: Ditto.
* gcc.target/riscv/amo/amo-table-ztso-load-2.c: Ditto.
* gcc.target/riscv/amo/amo-table-ztso-load-3.c: Ditto.
* gcc.target/riscv/amo/amo-table-ztso-store-1.c: Ditto.
* gcc.target/riscv/amo/amo-table-ztso-store-2.c: Ditto.
* gcc.target/riscv/amo/amo-table-ztso-store-3.c: Ditto.

Signed-off-by: Patrick O'Neill <patrick@rivosinc.com>
Tested-by: Andrea Parri <andrea@rivosinc.com>
15 files changed:
gcc/config/riscv/sync-rvwmo.md
gcc/config/riscv/sync-ztso.md
gcc/config/riscv/sync.md
gcc/testsuite/gcc.target/riscv/amo/amo-table-a-6-load-1.c
gcc/testsuite/gcc.target/riscv/amo/amo-table-a-6-load-2.c
gcc/testsuite/gcc.target/riscv/amo/amo-table-a-6-load-3.c
gcc/testsuite/gcc.target/riscv/amo/amo-table-a-6-store-1.c
gcc/testsuite/gcc.target/riscv/amo/amo-table-a-6-store-2.c
gcc/testsuite/gcc.target/riscv/amo/amo-table-a-6-store-compat-3.c
gcc/testsuite/gcc.target/riscv/amo/amo-table-ztso-load-1.c
gcc/testsuite/gcc.target/riscv/amo/amo-table-ztso-load-2.c
gcc/testsuite/gcc.target/riscv/amo/amo-table-ztso-load-3.c
gcc/testsuite/gcc.target/riscv/amo/amo-table-ztso-store-1.c
gcc/testsuite/gcc.target/riscv/amo/amo-table-ztso-store-2.c
gcc/testsuite/gcc.target/riscv/amo/amo-table-ztso-store-3.c