[1] https://github.com/riscv/riscv-zalasr

Add minimal support for the zalasr (load-acquire/store-release)
extension

Currently there is no toggle to opt into the abi-breaking note 3
mappings in the PSABI doc so support for that has been omitted from this
patch.

gcc/ChangeLog:

        * common/config/riscv/riscv-common.cc: Recognize zalasr.
        * config/riscv/riscv.opt: Ditto.
        * config/riscv/sync-rvwmo.md: Add check for zalasr.
        * config/riscv/sync-ztso.md: Ditto

gcc/testsuite/ChangeLog:

        * gcc.target/riscv/amo/a-rvwmo-fence.c: Disable zalasr from
          march if exists.
        * gcc.target/riscv/amo/a-rvwmo-load-acquire.c: Ditto.
        * gcc.target/riscv/amo/a-rvwmo-load-relaxed.c: Ditto.
        * gcc.target/riscv/amo/a-rvwmo-load-seq-cst.c: Ditto.
        * gcc.target/riscv/amo/a-rvwmo-store-compat-seq-cst.c: Ditto.
        * gcc.target/riscv/amo/a-rvwmo-store-relaxed.c: Ditto.
        * gcc.target/riscv/amo/a-rvwmo-store-release.c: Ditto.
        * gcc.target/riscv/amo/a-ztso-fence.c: Ditto.
        * gcc.target/riscv/amo/a-ztso-load-acquire.c:
        * gcc.target/riscv/amo/a-ztso-load-relaxed.c: Ditto.
        * gcc.target/riscv/amo/a-ztso-load-seq-cst.c: Ditto.
        * gcc.target/riscv/amo/a-ztso-store-compat-seq-cst.c: Ditto.
        * gcc.target/riscv/amo/a-ztso-store-relaxed.c: Ditto.
        * gcc.target/riscv/amo/a-ztso-store-release.c: Ditto.
        * gcc.target/riscv/amo/zaamo-ztso-amo-add-int.c: Ditto.
        * gcc.target/riscv/amo/zabha-ztso-amo-add-char.c: Ditto.
        * gcc.target/riscv/amo/zabha-ztso-amo-add-short.c: Ditto.
        * gcc.target/riscv/amo/zacas-ztso-compare-exchange-char-seq-cst.c: 
Ditto.
        * gcc.target/riscv/amo/zacas-ztso-compare-exchange-char.c:
          Ditto.
        * 
gcc.target/riscv/amo/zacas-ztso-compare-exchange-compatability-mapping-no-fence.c:
 Ditto.
        * 
gcc.target/riscv/amo/zacas-ztso-compare-exchange-compatability-mapping.cc: 
Ditto.
        * gcc.target/riscv/amo/zacas-ztso-compare-exchange-int-seq-cst.c: Ditto.
        * gcc.target/riscv/amo/zacas-ztso-compare-exchange-int.c: Ditto.
        * gcc.target/riscv/amo/zacas-ztso-compare-exchange-short-seq-cst.c: 
Ditto.
        * gcc.target/riscv/amo/zacas-ztso-compare-exchange-short.c:
          Ditto.
        * gcc.target/riscv/amo/zalrsc-ztso-amo-add-int.c: Ditto.
        * 
gcc.target/riscv/amo/zalrsc-ztso-compare-exchange-int-acquire-release.c: Ditto.
        * gcc.target/riscv/amo/zalrsc-ztso-compare-exchange-int-acquire.c: 
Ditto.
        * gcc.target/riscv/amo/zalrsc-ztso-compare-exchange-int-consume.c: 
Ditto.
        * gcc.target/riscv/amo/zalrsc-ztso-compare-exchange-int-relaxed.c: 
Ditto.
        * gcc.target/riscv/amo/zalrsc-ztso-compare-exchange-int-release.c: 
Ditto.
        * 
gcc.target/riscv/amo/zalrsc-ztso-compare-exchange-int-seq-cst-relaxed.c: Ditto.
        * gcc.target/riscv/amo/zalrsc-ztso-compare-exchange-int-seq-cst.c: 
Ditto.
        * gcc.target/riscv/amo/zalrsc-ztso-subword-amo-add-char-acq-rel.c: 
Ditto.
        * gcc.target/riscv/amo/zalrsc-ztso-subword-amo-add-char-acquire.c: 
Ditto.
        * gcc.target/riscv/amo/zalrsc-ztso-subword-amo-add-char-relaxed.c: 
Ditto.
        * gcc.target/riscv/amo/zalrsc-ztso-subword-amo-add-char-release.c: 
Ditto.
        * gcc.target/riscv/amo/zalrsc-ztso-subword-amo-add-char-seq-cst.c: 
Ditto.
        * lib/target-supports.exp: Add zalasr checks.
        * gcc.target/riscv/amo/zalasr-rvwmo-load-acquire.c: New test.
        * gcc.target/riscv/amo/zalasr-rvwmo-load-relaxed.c: New test.
        * gcc.target/riscv/amo/zalasr-rvwmo-load-seq-cst.c: New test.
        * gcc.target/riscv/amo/zalasr-rvwmo-store-compat-seq-cst.c: New test.
        * gcc.target/riscv/amo/zalasr-rvwmo-store-relaxed.c: New test.
        * gcc.target/riscv/amo/zalasr-rvwmo-store-release.c: New test.
        * gcc.target/riscv/amo/zalasr-ztso-load-acquire.c: New test.
        * gcc.target/riscv/amo/zalasr-ztso-load-relaxed.c: New test.
        * gcc.target/riscv/amo/zalasr-ztso-load-seq-cst.c: New test.
        * gcc.target/riscv/amo/zalasr-ztso-store-compat-seq-cst.c: New test.
        * gcc.target/riscv/amo/zalasr-ztso-store-relaxed.c: New test.
        * gcc.target/riscv/amo/zalasr-ztso-store-release.c: New test.

Signed-off-by: Edwin Lu <e...@rivosinc.com>
---
v2: fix ztso mappings
    - Removed .aq annotation on load acquire
    - Removed .rl annotation on store release
---
 gcc/common/config/riscv/riscv-common.cc       |  2 +
 gcc/config/riscv/riscv.opt                    |  2 +
 gcc/config/riscv/sync-rvwmo.md                | 17 +++--
 gcc/config/riscv/sync-ztso.md                 | 13 ++--
 .../gcc.target/riscv/amo/a-rvwmo-fence.c      |  1 +
 .../riscv/amo/a-rvwmo-load-acquire.c          |  1 +
 .../riscv/amo/a-rvwmo-load-relaxed.c          |  1 +
 .../riscv/amo/a-rvwmo-load-seq-cst.c          |  1 +
 .../riscv/amo/a-rvwmo-store-compat-seq-cst.c  |  1 +
 .../riscv/amo/a-rvwmo-store-relaxed.c         |  1 +
 .../riscv/amo/a-rvwmo-store-release.c         |  1 +
 .../gcc.target/riscv/amo/a-ztso-fence.c       |  1 +
 .../riscv/amo/a-ztso-load-acquire.c           |  1 +
 .../riscv/amo/a-ztso-load-relaxed.c           |  1 +
 .../riscv/amo/a-ztso-load-seq-cst.c           |  1 +
 .../riscv/amo/a-ztso-store-compat-seq-cst.c   |  1 +
 .../riscv/amo/a-ztso-store-relaxed.c          |  1 +
 .../riscv/amo/a-ztso-store-release.c          |  1 +
 .../riscv/amo/zaamo-ztso-amo-add-int.c        |  1 +
 .../riscv/amo/zabha-ztso-amo-add-char.c       |  1 +
 .../riscv/amo/zabha-ztso-amo-add-short.c      |  1 +
 ...zacas-ztso-compare-exchange-char-seq-cst.c |  1 +
 .../amo/zacas-ztso-compare-exchange-char.c    |  1 +
 ...-exchange-compatability-mapping-no-fence.c |  1 +
 ...-compare-exchange-compatability-mapping.cc |  1 +
 .../zacas-ztso-compare-exchange-int-seq-cst.c |  1 +
 .../amo/zacas-ztso-compare-exchange-int.c     |  1 +
 ...acas-ztso-compare-exchange-short-seq-cst.c |  1 +
 .../amo/zacas-ztso-compare-exchange-short.c   |  1 +
 .../riscv/amo/zalasr-rvwmo-load-acquire.c     | 62 ++++++++++++++++
 .../riscv/amo/zalasr-rvwmo-load-relaxed.c     | 62 ++++++++++++++++
 .../riscv/amo/zalasr-rvwmo-load-seq-cst.c     | 72 +++++++++++++++++++
 .../amo/zalasr-rvwmo-store-compat-seq-cst.c   | 63 ++++++++++++++++
 .../riscv/amo/zalasr-rvwmo-store-relaxed.c    | 62 ++++++++++++++++
 .../riscv/amo/zalasr-rvwmo-store-release.c    | 62 ++++++++++++++++
 .../riscv/amo/zalasr-ztso-load-acquire.c      | 62 ++++++++++++++++
 .../riscv/amo/zalasr-ztso-load-relaxed.c      | 62 ++++++++++++++++
 .../riscv/amo/zalasr-ztso-load-seq-cst.c      | 67 +++++++++++++++++
 .../amo/zalasr-ztso-store-compat-seq-cst.c    | 63 ++++++++++++++++
 .../riscv/amo/zalasr-ztso-store-relaxed.c     | 62 ++++++++++++++++
 .../riscv/amo/zalasr-ztso-store-release.c     | 62 ++++++++++++++++
 .../riscv/amo/zalrsc-ztso-amo-add-int.c       |  1 +
 ...tso-compare-exchange-int-acquire-release.c |  1 +
 ...zalrsc-ztso-compare-exchange-int-acquire.c |  1 +
 ...zalrsc-ztso-compare-exchange-int-consume.c |  1 +
 ...zalrsc-ztso-compare-exchange-int-relaxed.c |  1 +
 ...zalrsc-ztso-compare-exchange-int-release.c |  1 +
 ...tso-compare-exchange-int-seq-cst-relaxed.c |  1 +
 ...zalrsc-ztso-compare-exchange-int-seq-cst.c |  1 +
 ...zalrsc-ztso-subword-amo-add-char-acq-rel.c |  1 +
 ...zalrsc-ztso-subword-amo-add-char-acquire.c |  1 +
 ...zalrsc-ztso-subword-amo-add-char-relaxed.c |  1 +
 ...zalrsc-ztso-subword-amo-add-char-release.c |  1 +
 ...zalrsc-ztso-subword-amo-add-char-seq-cst.c |  1 +
 gcc/testsuite/lib/target-supports.exp         | 28 ++++++--
 55 files changed, 847 insertions(+), 14 deletions(-)
 create mode 100644 
gcc/testsuite/gcc.target/riscv/amo/zalasr-rvwmo-load-acquire.c
 create mode 100644 
gcc/testsuite/gcc.target/riscv/amo/zalasr-rvwmo-load-relaxed.c
 create mode 100644 
gcc/testsuite/gcc.target/riscv/amo/zalasr-rvwmo-load-seq-cst.c
 create mode 100644 
gcc/testsuite/gcc.target/riscv/amo/zalasr-rvwmo-store-compat-seq-cst.c
 create mode 100644 
gcc/testsuite/gcc.target/riscv/amo/zalasr-rvwmo-store-relaxed.c
 create mode 100644 
gcc/testsuite/gcc.target/riscv/amo/zalasr-rvwmo-store-release.c
 create mode 100644 
gcc/testsuite/gcc.target/riscv/amo/zalasr-ztso-load-acquire.c
 create mode 100644 
gcc/testsuite/gcc.target/riscv/amo/zalasr-ztso-load-relaxed.c
 create mode 100644 
gcc/testsuite/gcc.target/riscv/amo/zalasr-ztso-load-seq-cst.c
 create mode 100644 
gcc/testsuite/gcc.target/riscv/amo/zalasr-ztso-store-compat-seq-cst.c
 create mode 100644 
gcc/testsuite/gcc.target/riscv/amo/zalasr-ztso-store-relaxed.c
 create mode 100644 
gcc/testsuite/gcc.target/riscv/amo/zalasr-ztso-store-release.c

diff --git a/gcc/common/config/riscv/riscv-common.cc 
b/gcc/common/config/riscv/riscv-common.cc
index b34409adf39..6cd9ea93cdc 100644
--- a/gcc/common/config/riscv/riscv-common.cc
+++ b/gcc/common/config/riscv/riscv-common.cc
@@ -295,6 +295,7 @@ static const struct riscv_ext_version 
riscv_ext_version_table[] =
   {"zalrsc", ISA_SPEC_CLASS_NONE, 1, 0},
   {"zabha", ISA_SPEC_CLASS_NONE, 1, 0},
   {"zacas", ISA_SPEC_CLASS_NONE, 1, 0},
+  {"zalasr", ISA_SPEC_CLASS_NONE, 0, 3},

   {"zba", ISA_SPEC_CLASS_NONE, 1, 0},
   {"zbb", ISA_SPEC_CLASS_NONE, 1, 0},
@@ -1620,6 +1621,7 @@ static const riscv_ext_flag_table_t 
riscv_ext_flag_table[] =
   RISCV_EXT_FLAG_ENTRY ("zalrsc",  x_riscv_za_subext, MASK_ZALRSC),
   RISCV_EXT_FLAG_ENTRY ("zabha",   x_riscv_za_subext, MASK_ZABHA),
   RISCV_EXT_FLAG_ENTRY ("zacas",   x_riscv_za_subext, MASK_ZACAS),
+  RISCV_EXT_FLAG_ENTRY ("zalasr",  x_riscv_za_subext, MASK_ZALASR),

   RISCV_EXT_FLAG_ENTRY ("zba", x_riscv_zb_subext, MASK_ZBA),
   RISCV_EXT_FLAG_ENTRY ("zbb", x_riscv_zb_subext, MASK_ZBB),
diff --git a/gcc/config/riscv/riscv.opt b/gcc/config/riscv/riscv.opt
index 7515c8ea13d..1b19413d03d 100644
--- a/gcc/config/riscv/riscv.opt
+++ b/gcc/config/riscv/riscv.opt
@@ -270,6 +270,8 @@ Mask(ZABHA) Var(riscv_za_subext)

 Mask(ZACAS) Var(riscv_za_subext)

+Mask(ZALASR) Var(riscv_za_subext)
+
 Mask(ZA64RS)  Var(riscv_za_subext)

 Mask(ZA128RS) Var(riscv_za_subext)
diff --git a/gcc/config/riscv/sync-rvwmo.md b/gcc/config/riscv/sync-rvwmo.md
index c523dde0226..43192946fac 100644
--- a/gcc/config/riscv/sync-rvwmo.md
+++ b/gcc/config/riscv/sync-rvwmo.md
@@ -61,11 +61,15 @@ (define_insn "atomic_load_rvwmo<mode>"
       return "fence\trw,rw\;"
             "<load>\t%0,%1\;"
             "fence\tr,rw";
+
+    if (TARGET_ZALASR && model == MEMMODEL_ACQUIRE)
+      return "<load>.aq\t%0,%1";
+
     if (model == MEMMODEL_ACQUIRE)
       return "<load>\t%0,%1\;"
             "fence\tr,rw";
-    else
-      return "<load>\t%0,%1";
+
+    return "<load>\t%0,%1";
   }
   [(set_attr "type" "multi")
    (set (attr "length")
@@ -86,15 +90,20 @@ (define_insn "atomic_store_rvwmo<mode>"
     enum memmodel model = (enum memmodel) INTVAL (operands[2]);
     model = memmodel_base (model);

+    if (TARGET_ZALASR
+        && (model == MEMMODEL_RELEASE || model == MEMMODEL_SEQ_CST))
+      return "<store>.rl\t%z1,%0";
+
     if (model == MEMMODEL_SEQ_CST)
       return "fence\trw,w\;"
             "<store>\t%z1,%0\;"
             "fence\trw,rw";
+
     if (model == MEMMODEL_RELEASE)
       return "fence\trw,w\;"
             "<store>\t%z1,%0";
-    else
-      return "<store>\t%z1,%0";
+
+    return "<store>\t%z1,%0";
   }
   [(set_attr "type" "multi")
    (set (attr "length")
diff --git a/gcc/config/riscv/sync-ztso.md b/gcc/config/riscv/sync-ztso.md
index 254accbac40..c40fc9cdcea 100644
--- a/gcc/config/riscv/sync-ztso.md
+++ b/gcc/config/riscv/sync-ztso.md
@@ -51,11 +51,13 @@ (define_insn "atomic_load_ztso<mode>"
     enum memmodel model = (enum memmodel) INTVAL (operands[2]);
     model = memmodel_base (model);

+    /* Ignoring RCsc atomic load-acquire on MEMMODEL_SEQ_CST due to
+       Note 3 abi break for when TARGET_ZALASR is enabled.  */
     if (model == MEMMODEL_SEQ_CST)
       return "fence\trw,rw\;"
             "<load>\t%0,%1";
-    else
-      return "<load>\t%0,%1";
+
+    return "<load>\t%0,%1";
   }
   [(set_attr "type" "multi")
    (set (attr "length")
@@ -74,11 +76,14 @@ (define_insn "atomic_store_ztso<mode>"
     enum memmodel model = (enum memmodel) INTVAL (operands[2]);
     model = memmodel_base (model);

+    if (TARGET_ZALASR && model == MEMMODEL_SEQ_CST)
+      return "<store>.rl\t%z1,%0";
+
     if (model == MEMMODEL_SEQ_CST)
       return "<store>\t%z1,%0\;"
             "fence\trw,rw";
-    else
-      return "<store>\t%z1,%0";
+
+    return "<store>\t%z1,%0";
   }
   [(set_attr "type" "multi")
    (set (attr "length")
diff --git a/gcc/testsuite/gcc.target/riscv/amo/a-rvwmo-fence.c 
b/gcc/testsuite/gcc.target/riscv/amo/a-rvwmo-fence.c
index 6803bf92aa3..3947923e6ea 100644
--- a/gcc/testsuite/gcc.target/riscv/amo/a-rvwmo-fence.c
+++ b/gcc/testsuite/gcc.target/riscv/amo/a-rvwmo-fence.c
@@ -2,6 +2,7 @@
 /* Verify that fence mappings match the PSABI doc's recommended mapping.  */
 /* { dg-options "-O3" } */
 /* { dg-remove-options riscv_ztso } */
+/* { dg-remove-options riscv_zalasr } */
 /* { dg-skip-if "" { *-*-* } { "-g" "-flto"} } */
 /* { dg-final { check-function-bodies "**" "" } } */

diff --git a/gcc/testsuite/gcc.target/riscv/amo/a-rvwmo-load-acquire.c 
b/gcc/testsuite/gcc.target/riscv/amo/a-rvwmo-load-acquire.c
index 93a0c68ae8a..810e7959508 100644
--- a/gcc/testsuite/gcc.target/riscv/amo/a-rvwmo-load-acquire.c
+++ b/gcc/testsuite/gcc.target/riscv/amo/a-rvwmo-load-acquire.c
@@ -2,6 +2,7 @@
 /* Verify that load mappings match the PSABI doc's recommended mapping.  */
 /* { dg-options "-O3" } */
 /* { dg-remove-options riscv_ztso } */
+/* { dg-remove-options riscv_zalasr } */
 /* { dg-skip-if "" { *-*-* } { "-g" "-flto"} } */
 /* { dg-final { check-function-bodies "**" "" } } */

diff --git a/gcc/testsuite/gcc.target/riscv/amo/a-rvwmo-load-relaxed.c 
b/gcc/testsuite/gcc.target/riscv/amo/a-rvwmo-load-relaxed.c
index 2403d53c131..01a1e3c5c86 100644
--- a/gcc/testsuite/gcc.target/riscv/amo/a-rvwmo-load-relaxed.c
+++ b/gcc/testsuite/gcc.target/riscv/amo/a-rvwmo-load-relaxed.c
@@ -2,6 +2,7 @@
 /* Verify that load mappings match the PSABI doc's recommended mapping.  */
 /* { dg-options "-O3" } */
 /* { dg-remove-options riscv_ztso } */
+/* { dg-remove-options riscv_zalasr } */
 /* { dg-skip-if "" { *-*-* } { "-g" "-flto"} } */
 /* { dg-final { check-function-bodies "**" "" } } */

diff --git a/gcc/testsuite/gcc.target/riscv/amo/a-rvwmo-load-seq-cst.c 
b/gcc/testsuite/gcc.target/riscv/amo/a-rvwmo-load-seq-cst.c
index 31b35cf9f6a..ee728675155 100644
--- a/gcc/testsuite/gcc.target/riscv/amo/a-rvwmo-load-seq-cst.c
+++ b/gcc/testsuite/gcc.target/riscv/amo/a-rvwmo-load-seq-cst.c
@@ -2,6 +2,7 @@
 /* Verify that load mappings match the PSABI doc's recommended mapping.  */
 /* { dg-options "-O3" } */
 /* { dg-remove-options riscv_ztso } */
+/* { dg-remove-options riscv_zalasr } */
 /* { dg-skip-if "" { *-*-* } { "-g" "-flto"} } */
 /* { dg-final { check-function-bodies "**" "" } } */

diff --git a/gcc/testsuite/gcc.target/riscv/amo/a-rvwmo-store-compat-seq-cst.c 
b/gcc/testsuite/gcc.target/riscv/amo/a-rvwmo-store-compat-seq-cst.c
index 45c9abb1425..b3ec4e1061b 100644
--- a/gcc/testsuite/gcc.target/riscv/amo/a-rvwmo-store-compat-seq-cst.c
+++ b/gcc/testsuite/gcc.target/riscv/amo/a-rvwmo-store-compat-seq-cst.c
@@ -3,6 +3,7 @@
    mapping.  */
 /* { dg-options "-O3" } */
 /* { dg-remove-options riscv_ztso } */
+/* { dg-remove-options riscv_zalasr } */
 /* { dg-skip-if "" { *-*-* } { "-g" "-flto"} } */
 /* { dg-final { check-function-bodies "**" "" } } */

diff --git a/gcc/testsuite/gcc.target/riscv/amo/a-rvwmo-store-relaxed.c 
b/gcc/testsuite/gcc.target/riscv/amo/a-rvwmo-store-relaxed.c
index 4b321b2b75f..2f224f993de 100644
--- a/gcc/testsuite/gcc.target/riscv/amo/a-rvwmo-store-relaxed.c
+++ b/gcc/testsuite/gcc.target/riscv/amo/a-rvwmo-store-relaxed.c
@@ -2,6 +2,7 @@
 /* Verify that store mappings match the PSABI doc's recommended mapping.  */
 /* { dg-options "-O3" } */
 /* { dg-remove-options riscv_ztso } */
+/* { dg-remove-options riscv_zalasr } */
 /* { dg-skip-if "" { *-*-* } { "-g" "-flto"} } */
 /* { dg-final { check-function-bodies "**" "" } } */

diff --git a/gcc/testsuite/gcc.target/riscv/amo/a-rvwmo-store-release.c 
b/gcc/testsuite/gcc.target/riscv/amo/a-rvwmo-store-release.c
index a2a617c4d15..6daca225d24 100644
--- a/gcc/testsuite/gcc.target/riscv/amo/a-rvwmo-store-release.c
+++ b/gcc/testsuite/gcc.target/riscv/amo/a-rvwmo-store-release.c
@@ -2,6 +2,7 @@
 /* Verify that store mappings match the PSABI doc's recommended mapping.  */
 /* { dg-options "-O3" } */
 /* { dg-remove-options riscv_ztso } */
+/* { dg-remove-options riscv_zalasr } */
 /* { dg-skip-if "" { *-*-* } { "-g" "-flto"} } */
 /* { dg-final { check-function-bodies "**" "" } } */

diff --git a/gcc/testsuite/gcc.target/riscv/amo/a-ztso-fence.c 
b/gcc/testsuite/gcc.target/riscv/amo/a-ztso-fence.c
index 153f6ef8a3d..d432cdc2ffc 100644
--- a/gcc/testsuite/gcc.target/riscv/amo/a-ztso-fence.c
+++ b/gcc/testsuite/gcc.target/riscv/amo/a-ztso-fence.c
@@ -2,6 +2,7 @@
 /* Verify that fence mappings match the PSABI doc's recommended mapping.  */
 /* { dg-options "-O3" } */
 /* { dg-add-options riscv_ztso } */
+/* { dg-remove-options riscv_zalasr } */
 /* { dg-skip-if "" { *-*-* } { "-g" "-flto"} } */
 /* { dg-final { check-function-bodies "**" "" } } */

diff --git a/gcc/testsuite/gcc.target/riscv/amo/a-ztso-load-acquire.c 
b/gcc/testsuite/gcc.target/riscv/amo/a-ztso-load-acquire.c
index 76a12059f39..f221169def9 100644
--- a/gcc/testsuite/gcc.target/riscv/amo/a-ztso-load-acquire.c
+++ b/gcc/testsuite/gcc.target/riscv/amo/a-ztso-load-acquire.c
@@ -2,6 +2,7 @@
 /* Verify that load mappings match the PSABI doc's recommended mapping.  */
 /* { dg-options "-O3" } */
 /* { dg-add-options riscv_ztso } */
+/* { dg-remove-options riscv_zalasr } */
 /* { dg-skip-if "" { *-*-* } { "-g" "-flto"} } */
 /* { dg-final { check-function-bodies "**" "" } } */

diff --git a/gcc/testsuite/gcc.target/riscv/amo/a-ztso-load-relaxed.c 
b/gcc/testsuite/gcc.target/riscv/amo/a-ztso-load-relaxed.c
index c4ee56e2cc0..2ee094679eb 100644
--- a/gcc/testsuite/gcc.target/riscv/amo/a-ztso-load-relaxed.c
+++ b/gcc/testsuite/gcc.target/riscv/amo/a-ztso-load-relaxed.c
@@ -2,6 +2,7 @@
 /* Verify that load mappings match the PSABI doc's recommended mapping.  */
 /* { dg-options "-O3" } */
 /* { dg-add-options riscv_ztso } */
+/* { dg-remove-options riscv_zalasr } */
 /* { dg-skip-if "" { *-*-* } { "-g" "-flto"} } */
 /* { dg-final { check-function-bodies "**" "" } } */

diff --git a/gcc/testsuite/gcc.target/riscv/amo/a-ztso-load-seq-cst.c 
b/gcc/testsuite/gcc.target/riscv/amo/a-ztso-load-seq-cst.c
index 7163311433c..8ad64e6579c 100644
--- a/gcc/testsuite/gcc.target/riscv/amo/a-ztso-load-seq-cst.c
+++ b/gcc/testsuite/gcc.target/riscv/amo/a-ztso-load-seq-cst.c
@@ -2,6 +2,7 @@
 /* Verify that load mappings match the PSABI doc's recommended mapping.  */
 /* { dg-options "-O3" } */
 /* { dg-add-options riscv_ztso } */
+/* { dg-remove-options riscv_zalasr } */
 /* { dg-skip-if "" { *-*-* } { "-g" "-flto"} } */
 /* { dg-final { check-function-bodies "**" "" } } */

diff --git a/gcc/testsuite/gcc.target/riscv/amo/a-ztso-store-compat-seq-cst.c 
b/gcc/testsuite/gcc.target/riscv/amo/a-ztso-store-compat-seq-cst.c
index 2f4c9124aaf..a1cefbb1109 100644
--- a/gcc/testsuite/gcc.target/riscv/amo/a-ztso-store-compat-seq-cst.c
+++ b/gcc/testsuite/gcc.target/riscv/amo/a-ztso-store-compat-seq-cst.c
@@ -3,6 +3,7 @@
    mapping.  */
 /* { dg-options "-O3" } */
 /* { dg-add-options riscv_ztso } */
+/* { dg-remove-options riscv_zalasr } */
 /* { dg-skip-if "" { *-*-* } { "-g" "-flto"} } */
 /* { dg-final { check-function-bodies "**" "" } } */

diff --git a/gcc/testsuite/gcc.target/riscv/amo/a-ztso-store-relaxed.c 
b/gcc/testsuite/gcc.target/riscv/amo/a-ztso-store-relaxed.c
index d469bf348d9..939ad757462 100644
--- a/gcc/testsuite/gcc.target/riscv/amo/a-ztso-store-relaxed.c
+++ b/gcc/testsuite/gcc.target/riscv/amo/a-ztso-store-relaxed.c
@@ -2,6 +2,7 @@
 /* Verify that store mappings match the PSABI doc's recommended mapping.  */
 /* { dg-options "-O3" } */
 /* { dg-add-options riscv_ztso } */
+/* { dg-remove-options riscv_zalasr } */
 /* { dg-skip-if "" { *-*-* } { "-g" "-flto"} } */
 /* { dg-final { check-function-bodies "**" "" } } */

diff --git a/gcc/testsuite/gcc.target/riscv/amo/a-ztso-store-release.c 
b/gcc/testsuite/gcc.target/riscv/amo/a-ztso-store-release.c
index 3a275740401..bb97b8a6d52 100644
--- a/gcc/testsuite/gcc.target/riscv/amo/a-ztso-store-release.c
+++ b/gcc/testsuite/gcc.target/riscv/amo/a-ztso-store-release.c
@@ -2,6 +2,7 @@
 /* Verify that store mappings match the PSABI doc's recommended mapping.  */
 /* { dg-options "-O3" } */
 /* { dg-add-options riscv_ztso } */
+/* { dg-remove-options riscv_zalasr } */
 /* { dg-skip-if "" { *-*-* } { "-g" "-flto"} } */
 /* { dg-final { check-function-bodies "**" "" } } */

diff --git a/gcc/testsuite/gcc.target/riscv/amo/zaamo-ztso-amo-add-int.c 
b/gcc/testsuite/gcc.target/riscv/amo/zaamo-ztso-amo-add-int.c
index 8ebdc61992e..56122bc1f05 100644
--- a/gcc/testsuite/gcc.target/riscv/amo/zaamo-ztso-amo-add-int.c
+++ b/gcc/testsuite/gcc.target/riscv/amo/zaamo-ztso-amo-add-int.c
@@ -3,6 +3,7 @@
 /* { dg-options "-O3" } */
 /* { dg-add-options riscv_zaamo } */
 /* { dg-add-options riscv_ztso } */
+/* { dg-remove-options riscv_zalasr } */
 /* { dg-skip-if "" { *-*-* } { "-g" "-flto"} } */
 /* { dg-final { check-function-bodies "**" "" } } */

diff --git a/gcc/testsuite/gcc.target/riscv/amo/zabha-ztso-amo-add-char.c 
b/gcc/testsuite/gcc.target/riscv/amo/zabha-ztso-amo-add-char.c
index bcd7477c673..f3c1a26166f 100644
--- a/gcc/testsuite/gcc.target/riscv/amo/zabha-ztso-amo-add-char.c
+++ b/gcc/testsuite/gcc.target/riscv/amo/zabha-ztso-amo-add-char.c
@@ -3,6 +3,7 @@
 /* { dg-options "-O3" } */
 /* { dg-add-options riscv_ztso } */
 /* { dg-add-options riscv_zabha } */
+/* { dg-remove-options riscv_zalasr } */
 /* { dg-skip-if "" { *-*-* } { "-g" "-flto"} } */
 /* { dg-final { check-function-bodies "**" "" } } */

diff --git a/gcc/testsuite/gcc.target/riscv/amo/zabha-ztso-amo-add-short.c 
b/gcc/testsuite/gcc.target/riscv/amo/zabha-ztso-amo-add-short.c
index c4e8c9cf3ef..b632094acfe 100644
--- a/gcc/testsuite/gcc.target/riscv/amo/zabha-ztso-amo-add-short.c
+++ b/gcc/testsuite/gcc.target/riscv/amo/zabha-ztso-amo-add-short.c
@@ -3,6 +3,7 @@
 /* { dg-options "-O3" } */
 /* { dg-add-options riscv_ztso } */
 /* { dg-add-options riscv_zabha } */
+/* { dg-remove-options riscv_zalasr } */
 /* { dg-skip-if "" { *-*-* } { "-g" "-flto"} } */
 /* { dg-final { check-function-bodies "**" "" } } */

diff --git 
a/gcc/testsuite/gcc.target/riscv/amo/zacas-ztso-compare-exchange-char-seq-cst.c 
b/gcc/testsuite/gcc.target/riscv/amo/zacas-ztso-compare-exchange-char-seq-cst.c
index e219bd14b15..0ab231de94d 100644
--- 
a/gcc/testsuite/gcc.target/riscv/amo/zacas-ztso-compare-exchange-char-seq-cst.c
+++ 
b/gcc/testsuite/gcc.target/riscv/amo/zacas-ztso-compare-exchange-char-seq-cst.c
@@ -4,6 +4,7 @@
 /* { dg-add-options riscv_zabha } */
 /* { dg-add-options riscv_zacas } */
 /* { dg-add-options riscv_ztso } */
+/* { dg-remove-options riscv_zalasr } */
 /* { dg-final { scan-assembler-not "\tlr\.w" } } */
 /* { dg-final { scan-assembler-not "\tsc\.w" } } */
 /* { dg-final { scan-assembler-times "amocas\.b\t" 2 } } */
diff --git 
a/gcc/testsuite/gcc.target/riscv/amo/zacas-ztso-compare-exchange-char.c 
b/gcc/testsuite/gcc.target/riscv/amo/zacas-ztso-compare-exchange-char.c
index 183dc4020c7..9ede267eea2 100644
--- a/gcc/testsuite/gcc.target/riscv/amo/zacas-ztso-compare-exchange-char.c
+++ b/gcc/testsuite/gcc.target/riscv/amo/zacas-ztso-compare-exchange-char.c
@@ -4,6 +4,7 @@
 /* { dg-add-options riscv_zabha } */
 /* { dg-add-options riscv_zacas } */
 /* { dg-add-options riscv_ztso } */
+/* { dg-remove-options riscv_zalasr } */
 /* { dg-final { scan-assembler-not "\tlr\.w" } } */
 /* { dg-final { scan-assembler-not "\tsc\.w" } } */
 /* { dg-final { scan-assembler-times "amocas\.b\t" 8 } } */
diff --git 
a/gcc/testsuite/gcc.target/riscv/amo/zacas-ztso-compare-exchange-compatability-mapping-no-fence.c
 
b/gcc/testsuite/gcc.target/riscv/amo/zacas-ztso-compare-exchange-compatability-mapping-no-fence.c
index 2712eff5107..65b6e392fcf 100644
--- 
a/gcc/testsuite/gcc.target/riscv/amo/zacas-ztso-compare-exchange-compatability-mapping-no-fence.c
+++ 
b/gcc/testsuite/gcc.target/riscv/amo/zacas-ztso-compare-exchange-compatability-mapping-no-fence.c
@@ -7,6 +7,7 @@
 /* { dg-options "-O3" } */
 /* { dg-add-options riscv_zacas } */
 /* { dg-add-options riscv_ztso } */
+/* { dg-remove-options riscv_zalasr } */
 /* { dg-final { scan-assembler-not "\tfence" } } */

 void atomic_compare_exchange_weak_int_seq_cst_relaxed (int *bar, int *baz, int 
qux)
diff --git 
a/gcc/testsuite/gcc.target/riscv/amo/zacas-ztso-compare-exchange-compatability-mapping.cc
 
b/gcc/testsuite/gcc.target/riscv/amo/zacas-ztso-compare-exchange-compatability-mapping.cc
index 560172bfbed..8556837793c 100644
--- 
a/gcc/testsuite/gcc.target/riscv/amo/zacas-ztso-compare-exchange-compatability-mapping.cc
+++ 
b/gcc/testsuite/gcc.target/riscv/amo/zacas-ztso-compare-exchange-compatability-mapping.cc
@@ -7,6 +7,7 @@
 /* { dg-options "-O3 -std=c++17" } */
 /* { dg-add-options riscv_zacas } */
 /* { dg-add-options riscv_ztso } */
+/* { dg-remove-options riscv_zalasr } */
 /* { dg-final { check-function-bodies "**" "" } } */

 /*
diff --git 
a/gcc/testsuite/gcc.target/riscv/amo/zacas-ztso-compare-exchange-int-seq-cst.c 
b/gcc/testsuite/gcc.target/riscv/amo/zacas-ztso-compare-exchange-int-seq-cst.c
index 1ee6cc20218..766ae162253 100644
--- 
a/gcc/testsuite/gcc.target/riscv/amo/zacas-ztso-compare-exchange-int-seq-cst.c
+++ 
b/gcc/testsuite/gcc.target/riscv/amo/zacas-ztso-compare-exchange-int-seq-cst.c
@@ -3,6 +3,7 @@
 /* { dg-options "-O3" } */
 /* { dg-add-options riscv_zacas } */
 /* { dg-add-options riscv_ztso } */
+/* { dg-remove-options riscv_zalasr } */
 /* { dg-final { scan-assembler-not "\tlr\.w" } } */
 /* { dg-final { scan-assembler-not "\tsc\.w" } } */
 /* { dg-final { scan-assembler-times "amocas\.w\t" 2 } } */
diff --git 
a/gcc/testsuite/gcc.target/riscv/amo/zacas-ztso-compare-exchange-int.c 
b/gcc/testsuite/gcc.target/riscv/amo/zacas-ztso-compare-exchange-int.c
index 2c332623a95..6d2a17f9199 100644
--- a/gcc/testsuite/gcc.target/riscv/amo/zacas-ztso-compare-exchange-int.c
+++ b/gcc/testsuite/gcc.target/riscv/amo/zacas-ztso-compare-exchange-int.c
@@ -3,6 +3,7 @@
 /* { dg-options "-O3" } */
 /* { dg-add-options riscv_zacas } */
 /* { dg-add-options riscv_ztso } */
+/* { dg-remove-options riscv_zalasr } */
 /* { dg-final { scan-assembler-not "\tlr\.w" } } */
 /* { dg-final { scan-assembler-not "\tsc\.w" } } */
 /* { dg-final { scan-assembler-times "amocas\.w\t" 8 } } */
diff --git 
a/gcc/testsuite/gcc.target/riscv/amo/zacas-ztso-compare-exchange-short-seq-cst.c
 
b/gcc/testsuite/gcc.target/riscv/amo/zacas-ztso-compare-exchange-short-seq-cst.c
index 1938448183c..7ab8ce0e98f 100644
--- 
a/gcc/testsuite/gcc.target/riscv/amo/zacas-ztso-compare-exchange-short-seq-cst.c
+++ 
b/gcc/testsuite/gcc.target/riscv/amo/zacas-ztso-compare-exchange-short-seq-cst.c
@@ -4,6 +4,7 @@
 /* { dg-add-options riscv_zabha } */
 /* { dg-add-options riscv_zacas } */
 /* { dg-add-options riscv_ztso } */
+/* { dg-remove-options riscv_zalasr } */
 /* { dg-final { scan-assembler-not "\tlr\.w" } } */
 /* { dg-final { scan-assembler-not "\tsc\.w" } } */
 /* { dg-final { scan-assembler-times "amocas\.h\t" 2 } } */
diff --git 
a/gcc/testsuite/gcc.target/riscv/amo/zacas-ztso-compare-exchange-short.c 
b/gcc/testsuite/gcc.target/riscv/amo/zacas-ztso-compare-exchange-short.c
index 69fe5ae3eac..3089e68ab71 100644
--- a/gcc/testsuite/gcc.target/riscv/amo/zacas-ztso-compare-exchange-short.c
+++ b/gcc/testsuite/gcc.target/riscv/amo/zacas-ztso-compare-exchange-short.c
@@ -4,6 +4,7 @@
 /* { dg-add-options riscv_zabha } */
 /* { dg-add-options riscv_zacas } */
 /* { dg-add-options riscv_ztso } */
+/* { dg-remove-options riscv_zalasr } */
 /* { dg-final { scan-assembler-not "\tlr\.w" } } */
 /* { dg-final { scan-assembler-not "\tsc\.w" } } */
 /* { dg-final { scan-assembler-times "amocas\.h\t" 8 } } */
diff --git a/gcc/testsuite/gcc.target/riscv/amo/zalasr-rvwmo-load-acquire.c 
b/gcc/testsuite/gcc.target/riscv/amo/zalasr-rvwmo-load-acquire.c
new file mode 100644
index 00000000000..aea6bc6822a
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/amo/zalasr-rvwmo-load-acquire.c
@@ -0,0 +1,62 @@
+/* { dg-do compile } */
+/* Verify that load mappings match the PSABI doc's recommended mapping.  */
+/* { dg-options "-O3" } */
+/* { dg-add-options riscv_zalasr } */
+/* { dg-remove-options riscv_ztso } */
+/* { dg-skip-if "" { *-*-* } { "-g" "-flto"} } */
+/* { dg-final { check-function-bodies "**" "" } } */
+
+/*
+** atomic_load_long_acquire:
+**     l[wd].aq\t[atx][0-9]+,0\(a0\)
+**     s[wd]\t[atx][0-9]+,0\(a1\)
+**     ret
+*/
+void atomic_load_long_acquire (long* bar, long* baz)
+{
+  __atomic_load(bar, baz, __ATOMIC_ACQUIRE);
+}
+
+/*
+** atomic_load_int_acquire:
+**     lw.aq\t[atx][0-9]+,0\(a0\)
+**     sw\t[atx][0-9]+,0\(a1\)
+**     ret
+*/
+void atomic_load_int_acquire (int* bar, int* baz)
+{
+  __atomic_load(bar, baz, __ATOMIC_ACQUIRE);
+}
+
+/*
+** atomic_load_short_acquire:
+**     lh.aq\t[atx][0-9]+,0\(a0\)
+**     sh\t[atx][0-9]+,0\(a1\)
+**     ret
+*/
+void atomic_load_short_acquire (short* bar, short* baz)
+{
+  __atomic_load(bar, baz, __ATOMIC_ACQUIRE);
+}
+
+/*
+** atomic_load_char_acquire:
+**     lb.aq\t[atx][0-9]+,0\(a0\)
+**     sb\t[atx][0-9]+,0\(a1\)
+**     ret
+*/
+void atomic_load_char_acquire (char* bar, char* baz)
+{
+  __atomic_load(bar, baz, __ATOMIC_ACQUIRE);
+}
+
+/*
+** atomic_load_bool_acquire:
+**     lb.aq\t[atx][0-9]+,0\(a0\)
+**     sb\t[atx][0-9]+,0\(a1\)
+**     ret
+*/
+void atomic_load_bool_acquire (_Bool* bar, _Bool* baz)
+{
+  __atomic_load(bar, baz, __ATOMIC_ACQUIRE);
+}
diff --git a/gcc/testsuite/gcc.target/riscv/amo/zalasr-rvwmo-load-relaxed.c 
b/gcc/testsuite/gcc.target/riscv/amo/zalasr-rvwmo-load-relaxed.c
new file mode 100644
index 00000000000..eee5f8d5bb9
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/amo/zalasr-rvwmo-load-relaxed.c
@@ -0,0 +1,62 @@
+/* { dg-do compile } */
+/* Verify that load mappings match the PSABI doc's recommended mapping.  */
+/* { dg-options "-O3" } */
+/* { dg-add-options riscv_zalasr } */
+/* { dg-remove-options riscv_ztso } */
+/* { dg-skip-if "" { *-*-* } { "-g" "-flto"} } */
+/* { dg-final { check-function-bodies "**" "" } } */
+
+/*
+** atomic_load_long_relaxed:
+**     l[wd]\t[atx][0-9]+,0\(a0\)
+**     s[wd]\t[atx][0-9]+,0\(a1\)
+**     ret
+*/
+void atomic_load_long_relaxed (long* bar, long* baz)
+{
+  __atomic_load(bar, baz, __ATOMIC_RELAXED);
+}
+
+/*
+** atomic_load_int_relaxed:
+**     lw\t[atx][0-9]+,0\(a0\)
+**     sw\t[atx][0-9]+,0\(a1\)
+**     ret
+*/
+void atomic_load_int_relaxed (int* bar, int* baz)
+{
+  __atomic_load(bar, baz, __ATOMIC_RELAXED);
+}
+
+/*
+** atomic_load_short_relaxed:
+**     lh\t[atx][0-9]+,0\(a0\)
+**     sh\t[atx][0-9]+,0\(a1\)
+**     ret
+*/
+void atomic_load_short_relaxed (short* bar, short* baz)
+{
+  __atomic_load(bar, baz, __ATOMIC_RELAXED);
+}
+
+/*
+** atomic_load_char_relaxed:
+**     lb\t[atx][0-9]+,0\(a0\)
+**     sb\t[atx][0-9]+,0\(a1\)
+**     ret
+*/
+void atomic_load_char_relaxed (char* bar, char* baz)
+{
+  __atomic_load(bar, baz, __ATOMIC_RELAXED);
+}
+
+/*
+** atomic_load_bool_relaxed:
+**     lb\t[atx][0-9]+,0\(a0\)
+**     sb\t[atx][0-9]+,0\(a1\)
+**     ret
+*/
+void atomic_load_bool_relaxed (_Bool* bar, _Bool* baz)
+{
+  __atomic_load(bar, baz, __ATOMIC_RELAXED);
+}
diff --git a/gcc/testsuite/gcc.target/riscv/amo/zalasr-rvwmo-load-seq-cst.c 
b/gcc/testsuite/gcc.target/riscv/amo/zalasr-rvwmo-load-seq-cst.c
new file mode 100644
index 00000000000..54ad19b1071
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/amo/zalasr-rvwmo-load-seq-cst.c
@@ -0,0 +1,72 @@
+/* { dg-do compile } */
+/* Verify that load mappings match the PSABI doc's recommended mapping.  */
+/* { dg-options "-O3" } */
+/* { dg-add-options riscv_zalasr } */
+/* { dg-remove-options riscv_ztso } */
+/* { dg-skip-if "" { *-*-* } { "-g" "-flto"} } */
+/* { dg-final { check-function-bodies "**" "" } } */
+
+/*
+** atomic_load_long_seq_cst:
+**     fence\trw,rw
+**     l[wd]\t[atx][0-9]+,0\(a0\)
+**     fence\tr,rw
+**     s[wd]\t[atx][0-9]+,0\(a1\)
+**     ret
+*/
+void atomic_load_long_seq_cst (long* bar, long* baz)
+{
+  __atomic_load(bar, baz, __ATOMIC_SEQ_CST);
+}
+
+/*
+** atomic_load_int_seq_cst:
+**     fence\trw,rw
+**     lw\t[atx][0-9]+,0\(a0\)
+**     fence\tr,rw
+**     sw\t[atx][0-9]+,0\(a1\)
+**     ret
+*/
+void atomic_load_int_seq_cst (int* bar, int* baz)
+{
+  __atomic_load(bar, baz, __ATOMIC_SEQ_CST);
+}
+
+/*
+** atomic_load_short_seq_cst:
+**     fence\trw,rw
+**     lh\t[atx][0-9]+,0\(a0\)
+**     fence\tr,rw
+**     sh\t[atx][0-9]+,0\(a1\)
+**     ret
+*/
+void atomic_load_short_seq_cst (short* bar, short* baz)
+{
+  __atomic_load(bar, baz, __ATOMIC_SEQ_CST);
+}
+
+/*
+** atomic_load_char_seq_cst:
+**     fence\trw,rw
+**     lb\t[atx][0-9]+,0\(a0\)
+**     fence\tr,rw
+**     sb\t[atx][0-9]+,0\(a1\)
+**     ret
+*/
+void atomic_load_char_seq_cst (char* bar, char* baz)
+{
+  __atomic_load(bar, baz, __ATOMIC_SEQ_CST);
+}
+
+/*
+** atomic_load_bool_seq_cst:
+**     fence\trw,rw
+**     lb\t[atx][0-9]+,0\(a0\)
+**     fence\tr,rw
+**     sb\t[atx][0-9]+,0\(a1\)
+**     ret
+*/
+void atomic_load_bool_seq_cst (_Bool* bar, _Bool* baz)
+{
+  __atomic_load(bar, baz, __ATOMIC_SEQ_CST);
+}
diff --git 
a/gcc/testsuite/gcc.target/riscv/amo/zalasr-rvwmo-store-compat-seq-cst.c 
b/gcc/testsuite/gcc.target/riscv/amo/zalasr-rvwmo-store-compat-seq-cst.c
new file mode 100644
index 00000000000..7f40d443bd0
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/amo/zalasr-rvwmo-store-compat-seq-cst.c
@@ -0,0 +1,63 @@
+/* { dg-do compile } */
+/* Verify that store mappings match the PSABI doc's recommended compatibility
+   mapping.  */
+/* { dg-options "-O3" } */
+/* { dg-add-options riscv_zalasr } */
+/* { dg-remove-options riscv_ztso } */
+/* { dg-skip-if "" { *-*-* } { "-g" "-flto"} } */
+/* { dg-final { check-function-bodies "**" "" } } */
+
+/*
+** atomic_store_long_seq_cst:
+**     l[wd]\t[atx][0-9]+,0\(a1\)
+**     s[wd].rl\t[atx][0-9]+,0\(a0\)
+**     ret
+*/
+void atomic_store_long_seq_cst (long* bar, long* baz)
+{
+  __atomic_store(bar, baz, __ATOMIC_SEQ_CST);
+}
+
+/*
+** atomic_store_int_seq_cst:
+**     lw\t[atx][0-9]+,0\(a1\)
+**     sw.rl\t[atx][0-9]+,0\(a0\)
+**     ret
+*/
+void atomic_store_int_seq_cst (int* bar, int* baz)
+{
+  __atomic_store(bar, baz, __ATOMIC_SEQ_CST);
+}
+
+/*
+** atomic_store_short_seq_cst:
+**     lhu\t[atx][0-9]+,0\(a1\)
+**     sh.rl\t[atx][0-9]+,0\(a0\)
+**     ret
+*/
+void atomic_store_short_seq_cst (short* bar, short* baz)
+{
+  __atomic_store(bar, baz, __ATOMIC_SEQ_CST);
+}
+
+/*
+** atomic_store_char_seq_cst:
+**     lbu\t[atx][0-9]+,0\(a1\)
+**     sb.rl\t[atx][0-9]+,0\(a0\)
+**     ret
+*/
+void atomic_store_char_seq_cst (char* bar, char* baz)
+{
+  __atomic_store(bar, baz, __ATOMIC_SEQ_CST);
+}
+
+/*
+** atomic_store_bool_seq_cst:
+**     lbu\t[atx][0-9]+,0\(a1\)
+**     sb.rl\t[atx][0-9]+,0\(a0\)
+**     ret
+*/
+void atomic_store_bool_seq_cst (_Bool* bar, _Bool* baz)
+{
+  __atomic_store(bar, baz, __ATOMIC_SEQ_CST);
+}
diff --git a/gcc/testsuite/gcc.target/riscv/amo/zalasr-rvwmo-store-relaxed.c 
b/gcc/testsuite/gcc.target/riscv/amo/zalasr-rvwmo-store-relaxed.c
new file mode 100644
index 00000000000..d0127e53baa
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/amo/zalasr-rvwmo-store-relaxed.c
@@ -0,0 +1,62 @@
+/* { dg-do compile } */
+/* Verify that store mappings match the PSABI doc's recommended mapping.  */
+/* { dg-options "-O3" } */
+/* { dg-add-options riscv_zalasr } */
+/* { dg-remove-options riscv_ztso } */
+/* { dg-skip-if "" { *-*-* } { "-g" "-flto"} } */
+/* { dg-final { check-function-bodies "**" "" } } */
+
+/*
+** atomic_store_long_relaxed:
+**     l[wd]\t[atx][0-9]+,0\(a1\)
+**     s[wd]\t[atx][0-9]+,0\(a0\)
+**     ret
+*/
+void atomic_store_long_relaxed (long* bar, long* baz)
+{
+  __atomic_store(bar, baz, __ATOMIC_RELAXED);
+}
+
+/*
+** atomic_store_int_relaxed:
+**     lw\t[atx][0-9]+,0\(a1\)
+**     sw\t[atx][0-9]+,0\(a0\)
+**     ret
+*/
+void atomic_store_int_relaxed (int* bar, int* baz)
+{
+  __atomic_store(bar, baz, __ATOMIC_RELAXED);
+}
+
+/*
+** atomic_store_short_relaxed:
+**     lhu\t[atx][0-9]+,0\(a1\)
+**     sh\t[atx][0-9]+,0\(a0\)
+**     ret
+*/
+void atomic_store_short_relaxed (short* bar, short* baz)
+{
+  __atomic_store(bar, baz, __ATOMIC_RELAXED);
+}
+
+/*
+** atomic_store_char_relaxed:
+**     lbu\t[atx][0-9]+,0\(a1\)
+**     sb\t[atx][0-9]+,0\(a0\)
+**     ret
+*/
+void atomic_store_char_relaxed (char* bar, char* baz)
+{
+  __atomic_store(bar, baz, __ATOMIC_RELAXED);
+}
+
+/*
+** atomic_store_bool_relaxed:
+**     lbu\t[atx][0-9]+,0\(a1\)
+**     sb\t[atx][0-9]+,0\(a0\)
+**     ret
+*/
+void atomic_store_bool_relaxed (_Bool* bar, _Bool* baz)
+{
+  __atomic_store(bar, baz, __ATOMIC_RELAXED);
+}
diff --git a/gcc/testsuite/gcc.target/riscv/amo/zalasr-rvwmo-store-release.c 
b/gcc/testsuite/gcc.target/riscv/amo/zalasr-rvwmo-store-release.c
new file mode 100644
index 00000000000..6174718fe2d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/amo/zalasr-rvwmo-store-release.c
@@ -0,0 +1,62 @@
+/* { dg-do compile } */
+/* Verify that store mappings match the PSABI doc's recommended mapping.  */
+/* { dg-options "-O3" } */
+/* { dg-add-options riscv_zalasr } */
+/* { dg-remove-options riscv_ztso } */
+/* { dg-skip-if "" { *-*-* } { "-g" "-flto"} } */
+/* { dg-final { check-function-bodies "**" "" } } */
+
+/*
+** atomic_store_long_release:
+**     l[wd]\t[atx][0-9]+,0\(a1\)
+**     s[wd].rl\t[atx][0-9]+,0\(a0\)
+**     ret
+*/
+void atomic_store_long_release (long* bar, long* baz)
+{
+  __atomic_store(bar, baz, __ATOMIC_RELEASE);
+}
+
+/*
+** atomic_store_int_release:
+**     lw\t[atx][0-9]+,0\(a1\)
+**     sw.rl\t[atx][0-9]+,0\(a0\)
+**     ret
+*/
+void atomic_store_int_release (int* bar, int* baz)
+{
+  __atomic_store(bar, baz, __ATOMIC_RELEASE);
+}
+
+/*
+** atomic_store_short_release:
+**     lhu\t[atx][0-9]+,0\(a1\)
+**     sh.rl\t[atx][0-9]+,0\(a0\)
+**     ret
+*/
+void atomic_store_short_release (short* bar, short* baz)
+{
+  __atomic_store(bar, baz, __ATOMIC_RELEASE);
+}
+
+/*
+** atomic_store_char_release:
+**     lbu\t[atx][0-9]+,0\(a1\)
+**     sb.rl\t[atx][0-9]+,0\(a0\)
+**     ret
+*/
+void atomic_store_char_release (char* bar, char* baz)
+{
+  __atomic_store(bar, baz, __ATOMIC_RELEASE);
+}
+
+/*
+** atomic_store_bool_release:
+**     lbu\t[atx][0-9]+,0\(a1\)
+**     sb.rl\t[atx][0-9]+,0\(a0\)
+**     ret
+*/
+void atomic_store_bool_release (_Bool* bar, _Bool* baz)
+{
+  __atomic_store(bar, baz, __ATOMIC_RELEASE);
+}
diff --git a/gcc/testsuite/gcc.target/riscv/amo/zalasr-ztso-load-acquire.c 
b/gcc/testsuite/gcc.target/riscv/amo/zalasr-ztso-load-acquire.c
new file mode 100644
index 00000000000..2e71ea38678
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/amo/zalasr-ztso-load-acquire.c
@@ -0,0 +1,62 @@
+/* { dg-do compile } */
+/* Verify that load mappings match the PSABI doc's recommended mapping.  */
+/* { dg-options "-O3" } */
+/* { dg-add-options riscv_zalasr } */
+/* { dg-add-options riscv_ztso } */
+/* { dg-skip-if "" { *-*-* } { "-g" "-flto"} } */
+/* { dg-final { check-function-bodies "**" "" } } */
+
+/*
+** atomic_load_long_acquire:
+**     l[wd]\t[atx][0-9]+,0\(a0\)
+**     s[wd]\t[atx][0-9]+,0\(a1\)
+**     ret
+*/
+void atomic_load_long_acquire (long* bar, long* baz)
+{
+  __atomic_load(bar, baz, __ATOMIC_ACQUIRE);
+}
+
+/*
+** atomic_load_int_acquire:
+**     lw\t[atx][0-9]+,0\(a0\)
+**     sw\t[atx][0-9]+,0\(a1\)
+**     ret
+*/
+void atomic_load_int_acquire (int* bar, int* baz)
+{
+  __atomic_load(bar, baz, __ATOMIC_ACQUIRE);
+}
+
+/*
+** atomic_load_short_acquire:
+**     lh\t[atx][0-9]+,0\(a0\)
+**     sh\t[atx][0-9]+,0\(a1\)
+**     ret
+*/
+void atomic_load_short_acquire (short* bar, short* baz)
+{
+  __atomic_load(bar, baz, __ATOMIC_ACQUIRE);
+}
+
+/*
+** atomic_load_char_acquire:
+**     lb\t[atx][0-9]+,0\(a0\)
+**     sb\t[atx][0-9]+,0\(a1\)
+**     ret
+*/
+void atomic_load_char_acquire (char* bar, char* baz)
+{
+  __atomic_load(bar, baz, __ATOMIC_ACQUIRE);
+}
+
+/*
+** atomic_load_bool_acquire:
+**     lb\t[atx][0-9]+,0\(a0\)
+**     sb\t[atx][0-9]+,0\(a1\)
+**     ret
+*/
+void atomic_load_bool_acquire (_Bool* bar, _Bool* baz)
+{
+  __atomic_load(bar, baz, __ATOMIC_ACQUIRE);
+}
diff --git a/gcc/testsuite/gcc.target/riscv/amo/zalasr-ztso-load-relaxed.c 
b/gcc/testsuite/gcc.target/riscv/amo/zalasr-ztso-load-relaxed.c
new file mode 100644
index 00000000000..ce2c41563a4
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/amo/zalasr-ztso-load-relaxed.c
@@ -0,0 +1,62 @@
+/* { dg-do compile } */
+/* Verify that load mappings match the PSABI doc's recommended mapping.  */
+/* { dg-options "-O3" } */
+/* { dg-add-options riscv_zalasr } */
+/* { dg-add-options riscv_ztso } */
+/* { dg-skip-if "" { *-*-* } { "-g" "-flto"} } */
+/* { dg-final { check-function-bodies "**" "" } } */
+
+/*
+** atomic_load_long_relaxed:
+**     l[wd]\t[atx][0-9]+,0\(a0\)
+**     s[wd]\t[atx][0-9]+,0\(a1\)
+**     ret
+*/
+void atomic_load_long_relaxed (long* bar, long* baz)
+{
+  __atomic_load(bar, baz, __ATOMIC_RELAXED);
+}
+
+/*
+** atomic_load_int_relaxed:
+**     lw\t[atx][0-9]+,0\(a0\)
+**     sw\t[atx][0-9]+,0\(a1\)
+**     ret
+*/
+void atomic_load_int_relaxed (int* bar, int* baz)
+{
+  __atomic_load(bar, baz, __ATOMIC_RELAXED);
+}
+
+/*
+** atomic_load_short_relaxed:
+**     lh\t[atx][0-9]+,0\(a0\)
+**     sh\t[atx][0-9]+,0\(a1\)
+**     ret
+*/
+void atomic_load_short_relaxed (short* bar, short* baz)
+{
+  __atomic_load(bar, baz, __ATOMIC_RELAXED);
+}
+
+/*
+** atomic_load_char_relaxed:
+**     lb\t[atx][0-9]+,0\(a0\)
+**     sb\t[atx][0-9]+,0\(a1\)
+**     ret
+*/
+void atomic_load_char_relaxed (char* bar, char* baz)
+{
+  __atomic_load(bar, baz, __ATOMIC_RELAXED);
+}
+
+/*
+** atomic_load_bool_relaxed:
+**     lb\t[atx][0-9]+,0\(a0\)
+**     sb\t[atx][0-9]+,0\(a1\)
+**     ret
+*/
+void atomic_load_bool_relaxed (_Bool* bar, _Bool* baz)
+{
+  __atomic_load(bar, baz, __ATOMIC_RELAXED);
+}
diff --git a/gcc/testsuite/gcc.target/riscv/amo/zalasr-ztso-load-seq-cst.c 
b/gcc/testsuite/gcc.target/riscv/amo/zalasr-ztso-load-seq-cst.c
new file mode 100644
index 00000000000..70038f81c13
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/amo/zalasr-ztso-load-seq-cst.c
@@ -0,0 +1,67 @@
+/* { dg-do compile } */
+/* Verify that load mappings match the PSABI doc's recommended mapping.  */
+/* { dg-options "-O3" } */
+/* { dg-add-options riscv_zalasr } */
+/* { dg-add-options riscv_ztso } */
+/* { dg-skip-if "" { *-*-* } { "-g" "-flto"} } */
+/* { dg-final { check-function-bodies "**" "" } } */
+
+/*
+** atomic_load_long_seq_cst:
+**     fence\trw,rw
+**     l[wd]\t[atx][0-9]+,0\(a0\)
+**     s[wd]\t[atx][0-9]+,0\(a1\)
+**     ret
+*/
+void atomic_load_long_seq_cst (long* bar, long* baz)
+{
+  __atomic_load(bar, baz, __ATOMIC_SEQ_CST);
+}
+
+/*
+** atomic_load_int_seq_cst:
+**     fence\trw,rw
+**     lw\t[atx][0-9]+,0\(a0\)
+**     sw\t[atx][0-9]+,0\(a1\)
+**     ret
+*/
+void atomic_load_int_seq_cst (int* bar, int* baz)
+{
+  __atomic_load(bar, baz, __ATOMIC_SEQ_CST);
+}
+
+/*
+** atomic_load_short_seq_cst:
+**     fence\trw,rw
+**     lh\t[atx][0-9]+,0\(a0\)
+**     sh\t[atx][0-9]+,0\(a1\)
+**     ret
+*/
+void atomic_load_short_seq_cst (short* bar, short* baz)
+{
+  __atomic_load(bar, baz, __ATOMIC_SEQ_CST);
+}
+
+/*
+** atomic_load_char_seq_cst:
+**     fence\trw,rw
+**     lb\t[atx][0-9]+,0\(a0\)
+**     sb\t[atx][0-9]+,0\(a1\)
+**     ret
+*/
+void atomic_load_char_seq_cst (char* bar, char* baz)
+{
+  __atomic_load(bar, baz, __ATOMIC_SEQ_CST);
+}
+
+/*
+** atomic_load_bool_seq_cst:
+**     fence\trw,rw
+**     lb\t[atx][0-9]+,0\(a0\)
+**     sb\t[atx][0-9]+,0\(a1\)
+**     ret
+*/
+void atomic_load_bool_seq_cst (_Bool* bar, _Bool* baz)
+{
+  __atomic_load(bar, baz, __ATOMIC_SEQ_CST);
+}
diff --git 
a/gcc/testsuite/gcc.target/riscv/amo/zalasr-ztso-store-compat-seq-cst.c 
b/gcc/testsuite/gcc.target/riscv/amo/zalasr-ztso-store-compat-seq-cst.c
new file mode 100644
index 00000000000..085f94e5d42
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/amo/zalasr-ztso-store-compat-seq-cst.c
@@ -0,0 +1,63 @@
+/* { dg-do compile } */
+/* Verify that store mappings match the PSABI doc's recommended compatibility
+   mapping.  */
+/* { dg-options "-O3" } */
+/* { dg-add-options riscv_zalasr } */
+/* { dg-add-options riscv_ztso } */
+/* { dg-skip-if "" { *-*-* } { "-g" "-flto"} } */
+/* { dg-final { check-function-bodies "**" "" } } */
+
+/*
+** atomic_store_long_seq_cst:
+**     l[wd]\t[atx][0-9]+,0\(a1\)
+**     s[wd].rl\t[atx][0-9]+,0\(a0\)
+**     ret
+*/
+void atomic_store_long_seq_cst (long* bar, long* baz)
+{
+  __atomic_store(bar, baz, __ATOMIC_SEQ_CST);
+}
+
+/*
+** atomic_store_int_seq_cst:
+**     lw\t[atx][0-9]+,0\(a1\)
+**     sw.rl\t[atx][0-9]+,0\(a0\)
+**     ret
+*/
+void atomic_store_int_seq_cst (int* bar, int* baz)
+{
+  __atomic_store(bar, baz, __ATOMIC_SEQ_CST);
+}
+
+/*
+** atomic_store_short_seq_cst:
+**     lhu\t[atx][0-9]+,0\(a1\)
+**     sh.rl\t[atx][0-9]+,0\(a0\)
+**     ret
+*/
+void atomic_store_short_seq_cst (short* bar, short* baz)
+{
+  __atomic_store(bar, baz, __ATOMIC_SEQ_CST);
+}
+
+/*
+** atomic_store_char_seq_cst:
+**     lbu\t[atx][0-9]+,0\(a1\)
+**     sb.rl\t[atx][0-9]+,0\(a0\)
+**     ret
+*/
+void atomic_store_char_seq_cst (char* bar, char* baz)
+{
+  __atomic_store(bar, baz, __ATOMIC_SEQ_CST);
+}
+
+/*
+** atomic_store_bool_seq_cst:
+**     lbu\t[atx][0-9]+,0\(a1\)
+**     sb.rl\t[atx][0-9]+,0\(a0\)
+**     ret
+*/
+void atomic_store_bool_seq_cst (_Bool* bar, _Bool* baz)
+{
+  __atomic_store(bar, baz, __ATOMIC_SEQ_CST);
+}
diff --git a/gcc/testsuite/gcc.target/riscv/amo/zalasr-ztso-store-relaxed.c 
b/gcc/testsuite/gcc.target/riscv/amo/zalasr-ztso-store-relaxed.c
new file mode 100644
index 00000000000..cb68849291b
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/amo/zalasr-ztso-store-relaxed.c
@@ -0,0 +1,62 @@
+/* { dg-do compile } */
+/* Verify that store mappings match the PSABI doc's recommended mapping.  */
+/* { dg-options "-O3" } */
+/* { dg-add-options riscv_zalasr } */
+/* { dg-add-options riscv_ztso } */
+/* { dg-skip-if "" { *-*-* } { "-g" "-flto"} } */
+/* { dg-final { check-function-bodies "**" "" } } */
+
+/*
+** atomic_store_long_relaxed:
+**     l[wd]\t[atx][0-9]+,0\(a1\)
+**     s[wd]\t[atx][0-9]+,0\(a0\)
+**     ret
+*/
+void atomic_store_long_relaxed (long* bar, long* baz)
+{
+  __atomic_store(bar, baz, __ATOMIC_RELAXED);
+}
+
+/*
+** atomic_store_int_relaxed:
+**     lw\t[atx][0-9]+,0\(a1\)
+**     sw\t[atx][0-9]+,0\(a0\)
+**     ret
+*/
+void atomic_store_int_relaxed (int* bar, int* baz)
+{
+  __atomic_store(bar, baz, __ATOMIC_RELAXED);
+}
+
+/*
+** atomic_store_short_relaxed:
+**     lhu\t[atx][0-9]+,0\(a1\)
+**     sh\t[atx][0-9]+,0\(a0\)
+**     ret
+*/
+void atomic_store_short_relaxed (short* bar, short* baz)
+{
+  __atomic_store(bar, baz, __ATOMIC_RELAXED);
+}
+
+/*
+** atomic_store_char_relaxed:
+**     lbu\t[atx][0-9]+,0\(a1\)
+**     sb\t[atx][0-9]+,0\(a0\)
+**     ret
+*/
+void atomic_store_char_relaxed (char* bar, char* baz)
+{
+  __atomic_store(bar, baz, __ATOMIC_RELAXED);
+}
+
+/*
+** atomic_store_bool_relaxed:
+**     lbu\t[atx][0-9]+,0\(a1\)
+**     sb\t[atx][0-9]+,0\(a0\)
+**     ret
+*/
+void atomic_store_bool_relaxed (_Bool* bar, _Bool* baz)
+{
+  __atomic_store(bar, baz, __ATOMIC_RELAXED);
+}
diff --git a/gcc/testsuite/gcc.target/riscv/amo/zalasr-ztso-store-release.c 
b/gcc/testsuite/gcc.target/riscv/amo/zalasr-ztso-store-release.c
new file mode 100644
index 00000000000..b5cc2e967d2
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/amo/zalasr-ztso-store-release.c
@@ -0,0 +1,62 @@
+/* { dg-do compile } */
+/* Verify that store mappings match the PSABI doc's recommended mapping.  */
+/* { dg-options "-O3" } */
+/* { dg-add-options riscv_zalasr } */
+/* { dg-add-options riscv_ztso } */
+/* { dg-skip-if "" { *-*-* } { "-g" "-flto"} } */
+/* { dg-final { check-function-bodies "**" "" } } */
+
+/*
+** atomic_store_long_release:
+**     l[wd]\t[atx][0-9]+,0\(a1\)
+**     s[wd]\t[atx][0-9]+,0\(a0\)
+**     ret
+*/
+void atomic_store_long_release (long* bar, long* baz)
+{
+  __atomic_store(bar, baz, __ATOMIC_RELEASE);
+}
+
+/*
+** atomic_store_int_release:
+**     lw\t[atx][0-9]+,0\(a1\)
+**     sw\t[atx][0-9]+,0\(a0\)
+**     ret
+*/
+void atomic_store_int_release (int* bar, int* baz)
+{
+  __atomic_store(bar, baz, __ATOMIC_RELEASE);
+}
+
+/*
+** atomic_store_short_release:
+**     lhu\t[atx][0-9]+,0\(a1\)
+**     sh\t[atx][0-9]+,0\(a0\)
+**     ret
+*/
+void atomic_store_short_release (short* bar, short* baz)
+{
+  __atomic_store(bar, baz, __ATOMIC_RELEASE);
+}
+
+/*
+** atomic_store_char_release:
+**     lbu\t[atx][0-9]+,0\(a1\)
+**     sb\t[atx][0-9]+,0\(a0\)
+**     ret
+*/
+void atomic_store_char_release (char* bar, char* baz)
+{
+  __atomic_store(bar, baz, __ATOMIC_RELEASE);
+}
+
+/*
+** atomic_store_bool_release:
+**     lbu\t[atx][0-9]+,0\(a1\)
+**     sb\t[atx][0-9]+,0\(a0\)
+**     ret
+*/
+void atomic_store_bool_release (_Bool* bar, _Bool* baz)
+{
+  __atomic_store(bar, baz, __ATOMIC_RELEASE);
+}
diff --git a/gcc/testsuite/gcc.target/riscv/amo/zalrsc-ztso-amo-add-int.c 
b/gcc/testsuite/gcc.target/riscv/amo/zalrsc-ztso-amo-add-int.c
index 3fb16c01191..2cbf70ea69f 100644
--- a/gcc/testsuite/gcc.target/riscv/amo/zalrsc-ztso-amo-add-int.c
+++ b/gcc/testsuite/gcc.target/riscv/amo/zalrsc-ztso-amo-add-int.c
@@ -3,6 +3,7 @@
 /* { dg-options "-O3" } */
 /* { dg-add-options riscv_zalrsc } */
 /* { dg-add-options riscv_ztso } */
+/* { dg-remove-options riscv_zalasr } */
 /* { dg-remove-options riscv_zaamo } */
 /* { dg-skip-if "" { *-*-* } { "-g" "-flto"} } */
 /* { dg-final { check-function-bodies "**" "" } } */
diff --git 
a/gcc/testsuite/gcc.target/riscv/amo/zalrsc-ztso-compare-exchange-int-acquire-release.c
 
b/gcc/testsuite/gcc.target/riscv/amo/zalrsc-ztso-compare-exchange-int-acquire-release.c
index 496af8bfd7d..05cc14ba747 100644
--- 
a/gcc/testsuite/gcc.target/riscv/amo/zalrsc-ztso-compare-exchange-int-acquire-release.c
+++ 
b/gcc/testsuite/gcc.target/riscv/amo/zalrsc-ztso-compare-exchange-int-acquire-release.c
@@ -3,6 +3,7 @@
 /* Mixed mappings need to be unioned.  */
 /* { dg-add-options riscv_zalrsc } */
 /* { dg-add-options riscv_ztso } */
+/* { dg-remove-options riscv_zalasr } */
 /* { dg-remove-options riscv_zacas } */
 /* { dg-final { scan-assembler-times "lr.w\t" 1 } } */
 /* { dg-final { scan-assembler-times "sc.w\t" 1 } } */
diff --git 
a/gcc/testsuite/gcc.target/riscv/amo/zalrsc-ztso-compare-exchange-int-acquire.c 
b/gcc/testsuite/gcc.target/riscv/amo/zalrsc-ztso-compare-exchange-int-acquire.c
index 737e3eb3d68..4f1b6972203 100644
--- 
a/gcc/testsuite/gcc.target/riscv/amo/zalrsc-ztso-compare-exchange-int-acquire.c
+++ 
b/gcc/testsuite/gcc.target/riscv/amo/zalrsc-ztso-compare-exchange-int-acquire.c
@@ -2,6 +2,7 @@
 /* Verify that compare exchange mappings match the PSABI doc's recommended 
mapping.  */
 /* { dg-add-options riscv_zalrsc } */
 /* { dg-add-options riscv_ztso } */
+/* { dg-remove-options riscv_zalasr } */
 /* { dg-remove-options riscv_zacas } */
 /* { dg-final { scan-assembler-times "lr.w\t" 1 } } */
 /* { dg-final { scan-assembler-times "sc.w\t" 1 } } */
diff --git 
a/gcc/testsuite/gcc.target/riscv/amo/zalrsc-ztso-compare-exchange-int-consume.c 
b/gcc/testsuite/gcc.target/riscv/amo/zalrsc-ztso-compare-exchange-int-consume.c
index 51b3b5a8dc7..60d1b9f4b2e 100644
--- 
a/gcc/testsuite/gcc.target/riscv/amo/zalrsc-ztso-compare-exchange-int-consume.c
+++ 
b/gcc/testsuite/gcc.target/riscv/amo/zalrsc-ztso-compare-exchange-int-consume.c
@@ -2,6 +2,7 @@
 /* Verify that compare exchange mappings match the PSABI doc's recommended 
mapping.  */
 /* { dg-add-options riscv_zalrsc } */
 /* { dg-add-options riscv_ztso } */
+/* { dg-remove-options riscv_zalasr } */
 /* { dg-remove-options riscv_zacas } */
 /* { dg-final { scan-assembler-times "lr.w\t" 1 } } */
 /* { dg-final { scan-assembler-times "sc.w\t" 1 } } */
diff --git 
a/gcc/testsuite/gcc.target/riscv/amo/zalrsc-ztso-compare-exchange-int-relaxed.c 
b/gcc/testsuite/gcc.target/riscv/amo/zalrsc-ztso-compare-exchange-int-relaxed.c
index 9a41410a57b..9b83c9d0b8b 100644
--- 
a/gcc/testsuite/gcc.target/riscv/amo/zalrsc-ztso-compare-exchange-int-relaxed.c
+++ 
b/gcc/testsuite/gcc.target/riscv/amo/zalrsc-ztso-compare-exchange-int-relaxed.c
@@ -2,6 +2,7 @@
 /* Verify that compare exchange mappings match the PSABI doc's recommended 
mapping.  */
 /* { dg-add-options riscv_zalrsc } */
 /* { dg-add-options riscv_ztso } */
+/* { dg-remove-options riscv_zalasr } */
 /* { dg-remove-options riscv_zacas } */
 /* { dg-final { scan-assembler-times "lr.w\t" 1 } } */
 /* { dg-final { scan-assembler-times "sc.w\t" 1 } } */
diff --git 
a/gcc/testsuite/gcc.target/riscv/amo/zalrsc-ztso-compare-exchange-int-release.c 
b/gcc/testsuite/gcc.target/riscv/amo/zalrsc-ztso-compare-exchange-int-release.c
index ee778a760d1..d81f84f2b9f 100644
--- 
a/gcc/testsuite/gcc.target/riscv/amo/zalrsc-ztso-compare-exchange-int-release.c
+++ 
b/gcc/testsuite/gcc.target/riscv/amo/zalrsc-ztso-compare-exchange-int-release.c
@@ -2,6 +2,7 @@
 /* Verify that compare exchange mappings match the PSABI doc's recommended 
mapping.  */
 /* { dg-add-options riscv_zalrsc } */
 /* { dg-add-options riscv_ztso } */
+/* { dg-remove-options riscv_zalasr } */
 /* { dg-remove-options riscv_zacas } */
 /* { dg-final { scan-assembler-times "lr.w\t" 1 } } */
 /* { dg-final { scan-assembler-times "sc.w\t" 1 } } */
diff --git 
a/gcc/testsuite/gcc.target/riscv/amo/zalrsc-ztso-compare-exchange-int-seq-cst-relaxed.c
 
b/gcc/testsuite/gcc.target/riscv/amo/zalrsc-ztso-compare-exchange-int-seq-cst-relaxed.c
index 6fbe943b316..d209aa23407 100644
--- 
a/gcc/testsuite/gcc.target/riscv/amo/zalrsc-ztso-compare-exchange-int-seq-cst-relaxed.c
+++ 
b/gcc/testsuite/gcc.target/riscv/amo/zalrsc-ztso-compare-exchange-int-seq-cst-relaxed.c
@@ -3,6 +3,7 @@
 /* Mixed mappings need to be unioned.  */
 /* { dg-add-options riscv_zalrsc } */
 /* { dg-add-options riscv_ztso } */
+/* { dg-remove-options riscv_zalasr } */
 /* { dg-remove-options riscv_zacas } */
 /* { dg-final { scan-assembler-times "lr.w.aqrl\t" 1 } } */
 /* { dg-final { scan-assembler-times "sc.w.rl\t" 1 } } */
diff --git 
a/gcc/testsuite/gcc.target/riscv/amo/zalrsc-ztso-compare-exchange-int-seq-cst.c 
b/gcc/testsuite/gcc.target/riscv/amo/zalrsc-ztso-compare-exchange-int-seq-cst.c
index a361c10086d..15fd94aecbb 100644
--- 
a/gcc/testsuite/gcc.target/riscv/amo/zalrsc-ztso-compare-exchange-int-seq-cst.c
+++ 
b/gcc/testsuite/gcc.target/riscv/amo/zalrsc-ztso-compare-exchange-int-seq-cst.c
@@ -2,6 +2,7 @@
 /* Verify that compare exchange mappings match the PSABI doc's recommended 
mapping.  */
 /* { dg-add-options riscv_zalrsc } */
 /* { dg-add-options riscv_ztso } */
+/* { dg-remove-options riscv_zalasr } */
 /* { dg-remove-options riscv_zacas } */
 /* { dg-final { scan-assembler-times "lr.w.aqrl\t" 1 } } */
 /* { dg-final { scan-assembler-times "sc.w.rl\t" 1 } } */
diff --git 
a/gcc/testsuite/gcc.target/riscv/amo/zalrsc-ztso-subword-amo-add-char-acq-rel.c 
b/gcc/testsuite/gcc.target/riscv/amo/zalrsc-ztso-subword-amo-add-char-acq-rel.c
index 7c9187e52b5..b77e04b587a 100644
--- 
a/gcc/testsuite/gcc.target/riscv/amo/zalrsc-ztso-subword-amo-add-char-acq-rel.c
+++ 
b/gcc/testsuite/gcc.target/riscv/amo/zalrsc-ztso-subword-amo-add-char-acq-rel.c
@@ -2,6 +2,7 @@
 /* Verify that subword atomic op mappings match the PSABI doc's suggested 
mapping.  */
 /* { dg-add-options riscv_zalrsc } */
 /* { dg-add-options riscv_ztso } */
+/* { dg-remove-options riscv_zalasr } */
 /* { dg-remove-options riscv_zabha } */
 /* { dg-final { scan-assembler-times "lr.w\t" 1 } } */
 /* { dg-final { scan-assembler-times "sc.w\t" 1 } } */
diff --git 
a/gcc/testsuite/gcc.target/riscv/amo/zalrsc-ztso-subword-amo-add-char-acquire.c 
b/gcc/testsuite/gcc.target/riscv/amo/zalrsc-ztso-subword-amo-add-char-acquire.c
index 675043f9c61..24fe4ea3278 100644
--- 
a/gcc/testsuite/gcc.target/riscv/amo/zalrsc-ztso-subword-amo-add-char-acquire.c
+++ 
b/gcc/testsuite/gcc.target/riscv/amo/zalrsc-ztso-subword-amo-add-char-acquire.c
@@ -2,6 +2,7 @@
 /* Verify that subword atomic op mappings match the PSABI doc's suggested 
mapping.  */
 /* { dg-add-options riscv_zalrsc } */
 /* { dg-add-options riscv_ztso } */
+/* { dg-remove-options riscv_zalasr } */
 /* { dg-remove-options riscv_zabha } */
 /* { dg-final { scan-assembler-times "lr.w\t" 1 } } */
 /* { dg-final { scan-assembler-times "sc.w\t" 1 } } */
diff --git 
a/gcc/testsuite/gcc.target/riscv/amo/zalrsc-ztso-subword-amo-add-char-relaxed.c 
b/gcc/testsuite/gcc.target/riscv/amo/zalrsc-ztso-subword-amo-add-char-relaxed.c
index 7bf9eb0a7f7..4b375f09d47 100644
--- 
a/gcc/testsuite/gcc.target/riscv/amo/zalrsc-ztso-subword-amo-add-char-relaxed.c
+++ 
b/gcc/testsuite/gcc.target/riscv/amo/zalrsc-ztso-subword-amo-add-char-relaxed.c
@@ -2,6 +2,7 @@
 /* Verify that subword atomic op mappings match the PSABI doc's suggested 
mapping.  */
 /* { dg-add-options riscv_zalrsc } */
 /* { dg-add-options riscv_ztso } */
+/* { dg-remove-options riscv_zalasr } */
 /* { dg-remove-options riscv_zabha } */
 /* { dg-final { scan-assembler-times "lr.w\t" 1 } } */
 /* { dg-final { scan-assembler-times "sc.w\t" 1 } } */
diff --git 
a/gcc/testsuite/gcc.target/riscv/amo/zalrsc-ztso-subword-amo-add-char-release.c 
b/gcc/testsuite/gcc.target/riscv/amo/zalrsc-ztso-subword-amo-add-char-release.c
index 6b78ce74b00..f329eb46440 100644
--- 
a/gcc/testsuite/gcc.target/riscv/amo/zalrsc-ztso-subword-amo-add-char-release.c
+++ 
b/gcc/testsuite/gcc.target/riscv/amo/zalrsc-ztso-subword-amo-add-char-release.c
@@ -2,6 +2,7 @@
 /* Verify that subword atomic op mappings match the PSABI doc's suggested 
mapping.  */
 /* { dg-add-options riscv_zalrsc } */
 /* { dg-add-options riscv_ztso } */
+/* { dg-remove-options riscv_zalasr } */
 /* { dg-remove-options riscv_zabha } */
 /* { dg-final { scan-assembler-times "lr.w\t" 1 } } */
 /* { dg-final { scan-assembler-times "sc.w\t" 1 } } */
diff --git 
a/gcc/testsuite/gcc.target/riscv/amo/zalrsc-ztso-subword-amo-add-char-seq-cst.c 
b/gcc/testsuite/gcc.target/riscv/amo/zalrsc-ztso-subword-amo-add-char-seq-cst.c
index 14fadf1e3fe..eda61411781 100644
--- 
a/gcc/testsuite/gcc.target/riscv/amo/zalrsc-ztso-subword-amo-add-char-seq-cst.c
+++ 
b/gcc/testsuite/gcc.target/riscv/amo/zalrsc-ztso-subword-amo-add-char-seq-cst.c
@@ -2,6 +2,7 @@
 /* Verify that subword atomic op mappings match the PSABI doc's suggested 
mapping.  */
 /* { dg-add-options riscv_zalrsc } */
 /* { dg-add-options riscv_ztso } */
+/* { dg-remove-options riscv_zalasr } */
 /* { dg-remove-options riscv_zabha } */
 /* { dg-final { scan-assembler-times "lr.w.aqrl\t" 1 } } */
 /* { dg-final { scan-assembler-times "sc.w.rl\t" 1 } } */
diff --git a/gcc/testsuite/lib/target-supports.exp 
b/gcc/testsuite/lib/target-supports.exp
index ee4138aa697..2522e3ecf58 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -2006,6 +2006,14 @@ proc check_effective_target_riscv_zacas { } {
     }]
 }

+proc check_effective_target_riscv_zalasr { } {
+    return [check_no_compiler_messages riscv_ext_zalasr assembly {
+       #ifndef __riscv_zalasr
+       #error "Not __riscv_zalasr"
+       #endif
+    }]
+}
+
 # Return 1 if the target arch supports the double precision floating point
 # extension, 0 otherwise.  Cache the result.

@@ -2368,7 +2376,7 @@ proc check_effective_target_riscv_v_misalign_ok { } {
 proc riscv_get_arch { } {
     set gcc_march ""
     # ??? do we neeed to add more extensions to the list below?
-    foreach ext { i e m a f d q c b v zicsr zifencei zfh zba zbb zbc zbkb zbkc 
zbs zvbb zvfh ztso zaamo zalrsc zabha zacas } {
+    foreach ext { i e m a f d q c b v zicsr zifencei zfh zba zbb zbc zbkb zbkc 
zbs zvbb zvfh ztso zaamo zalrsc zabha zacas zalasr } {
        if { [check_no_compiler_messages  riscv_ext_$ext assembly [string map 
[list DEF __riscv_$ext] {
                #ifndef DEF
                #error "Not DEF"
@@ -2583,6 +2591,14 @@ proc remove_options_for_riscv_zacas { flags } {
     return [remove_options_for_riscv_z_ext zacas $modified_flags]
 }

+proc add_options_for_riscv_zalasr { flags } {
+    return [add_options_for_riscv_z_ext zalasr $flags]
+}
+
+proc remove_options_for_riscv_zalasr { flags } {
+    return [remove_options_for_riscv_z_ext zalasr $flags]
+}
+
 proc add_options_for_riscv_zfh { flags } {
     return [add_options_for_riscv_z_ext zfh $flags]
 }
@@ -6073,7 +6089,7 @@ foreach { armfunc armflag armdefs } {
 #        /* { dg-add-options arm_cpu_xscale } */
 #       /* { dg-require-effective-target arm_xscale_multilib } */

-# NOTE: -mcpu does not override -mtune, so to ensure the tuning is consistent
+# NOTE: -mcpu does not override -mtune, so to ensure the tuning is consistent
 # for tests using these flags all entries should set -mcpu and -mtune 
explicitly

 # This table should only be used to set -mcpu= (and associated
@@ -13213,7 +13229,7 @@ proc check_effective_target_autoincdec { } {
 #
 proc check_effective_target_supports_stack_clash_protection { } {

-    if { [check_effective_target_x86]
+    if { [check_effective_target_x86]
          || [istarget powerpc*-*-*] || [istarget rs6000*-*-*]
          || [istarget aarch64*-**] || [istarget s390*-*-*]
          || [istarget loongarch64*-**] || [istarget riscv64*-**] } {
@@ -14181,7 +14197,7 @@ proc check_nvptx_default_ptx_isa_version_at_least { 
major minor } {
             "#error unsupported" \
             "#endif"]
     set src [join $src "\n"]
-
+
     set res [check_no_compiler_messages $name assembly $src ""]

     return $res
@@ -14216,7 +14232,7 @@ proc 
check_nvptx_default_ptx_isa_target_architecture_at_least { ta } {
             "#error unsupported" \
             "#endif"]
     set src [join $src "\n"]
-
+
     set res [check_no_compiler_messages $name assembly $src ""]

     return $res
@@ -14331,7 +14347,7 @@ proc check_effective_target_alarm { } {
        #include <stdlib.h>
        #include <unistd.h>
        void do_exit(int i) { exit (0); }
-       int main (void) {
+       int main (void) {
          struct sigaction s;
          sigemptyset (&s.sa_mask);
          s.sa_handler = exit;
--
2.43.0

Reply via email to