(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
powerpc/
amo1.c
       1  /* { dg-do compile { target { powerpc*-*-* && lp64 } } } */
       2  /* { dg-require-effective-target powerpc_p9vector_ok } */
       3  /* { dg-options "-mpower9-vector -mpower9-misc -O2" } */
       4  
       5  /* Verify P9 atomic memory operations.  */
       6  
       7  #include <amo.h>
       8  #include <stdint.h>
       9  
      10  uint32_t
      11  do_lw_add (uint32_t *mem, uint32_t value)
      12  {
      13    return amo_lwat_add (mem, value);
      14  }
      15  
      16  int32_t
      17  do_lw_sadd (int32_t *mem, int32_t value)
      18  {
      19    return amo_lwat_sadd (mem, value);
      20  }
      21  
      22  uint32_t
      23  do_lw_xor (uint32_t *mem, uint32_t value)
      24  {
      25    return amo_lwat_xor (mem, value);
      26  }
      27  
      28  uint32_t
      29  do_lw_ior (uint32_t *mem, uint32_t value)
      30  {
      31    return amo_lwat_ior (mem, value);
      32  }
      33  
      34  uint32_t
      35  do_lw_and (uint32_t *mem, uint32_t value)
      36  {
      37    return amo_lwat_and (mem, value);
      38  }
      39  
      40  uint32_t
      41  do_lw_umax (uint32_t *mem, uint32_t value)
      42  {
      43    return amo_lwat_umax (mem, value);
      44  }
      45  
      46  int32_t
      47  do_lw_smax (int32_t *mem, int32_t value)
      48  {
      49    return amo_lwat_smax (mem, value);
      50  }
      51  
      52  uint32_t
      53  do_lw_umin (uint32_t *mem, uint32_t value)
      54  {
      55    return amo_lwat_umin (mem, value);
      56  }
      57  
      58  int32_t
      59  do_lw_smin (int32_t *mem, int32_t value)
      60  {
      61    return amo_lwat_smin (mem, value);
      62  }
      63  
      64  uint32_t
      65  do_lw_swap (uint32_t *mem, uint32_t value)
      66  {
      67    return amo_lwat_swap (mem, value);
      68  }
      69  
      70  int32_t
      71  do_lw_sswap (int32_t *mem, int32_t value)
      72  {
      73    return amo_lwat_sswap (mem, value);
      74  }
      75  
      76  uint64_t
      77  do_ld_add (uint64_t *mem, uint64_t value)
      78  {
      79    return amo_ldat_add (mem, value);
      80  }
      81  
      82  int64_t
      83  do_ld_sadd (int64_t *mem, int64_t value)
      84  {
      85    return amo_ldat_sadd (mem, value);
      86  }
      87  
      88  uint64_t
      89  do_ld_xor (uint64_t *mem, uint64_t value)
      90  {
      91    return amo_ldat_xor (mem, value);
      92  }
      93  
      94  uint64_t
      95  do_ld_ior (uint64_t *mem, uint64_t value)
      96  {
      97    return amo_ldat_ior (mem, value);
      98  }
      99  
     100  uint64_t
     101  do_ld_and (uint64_t *mem, uint64_t value)
     102  {
     103    return amo_ldat_and (mem, value);
     104  }
     105  
     106  uint64_t
     107  do_ld_umax (uint64_t *mem, uint64_t value)
     108  {
     109    return amo_ldat_umax (mem, value);
     110  }
     111  
     112  int64_t
     113  do_ld_smax (int64_t *mem, int64_t value)
     114  {
     115    return amo_ldat_smax (mem, value);
     116  }
     117  
     118  uint64_t
     119  do_ld_umin (uint64_t *mem, uint64_t value)
     120  {
     121    return amo_ldat_umin (mem, value);
     122  }
     123  
     124  int64_t
     125  do_ld_smin (int64_t *mem, int64_t value)
     126  {
     127    return amo_ldat_smin (mem, value);
     128  }
     129  
     130  uint64_t
     131  do_ld_swap (uint64_t *mem, uint64_t value)
     132  {
     133    return amo_ldat_swap (mem, value);
     134  }
     135  
     136  int64_t
     137  do_ld_sswap (int64_t *mem, int64_t value)
     138  {
     139    return amo_ldat_sswap (mem, value);
     140  }
     141  
     142  void
     143  do_sw_add (uint32_t *mem, uint32_t value)
     144  {
     145    amo_stwat_add (mem, value);
     146  }
     147  
     148  void
     149  do_sw_sadd (int32_t *mem, int32_t value)
     150  {
     151    amo_stwat_sadd (mem, value);
     152  }
     153  
     154  void
     155  do_sw_xor (uint32_t *mem, uint32_t value)
     156  {
     157    amo_stwat_xor (mem, value);
     158  }
     159  
     160  void
     161  do_sw_ior (uint32_t *mem, uint32_t value)
     162  {
     163    amo_stwat_ior (mem, value);
     164  }
     165  
     166  void
     167  do_sw_and (uint32_t *mem, uint32_t value)
     168  {
     169    amo_stwat_and (mem, value);
     170  }
     171  
     172  void
     173  do_sw_umax (int32_t *mem, int32_t value)
     174  {
     175    amo_stwat_umax (mem, value);
     176  }
     177  
     178  void
     179  do_sw_smax (int32_t *mem, int32_t value)
     180  {
     181    amo_stwat_smax (mem, value);
     182  }
     183  
     184  void
     185  do_sw_umin (int32_t *mem, int32_t value)
     186  {
     187    amo_stwat_umin (mem, value);
     188  }
     189  
     190  void
     191  do_sw_smin (int32_t *mem, int32_t value)
     192  {
     193    amo_stwat_smin (mem, value);
     194  }
     195  
     196  void
     197  do_sd_add (uint64_t *mem, uint64_t value)
     198  {
     199    amo_stdat_add (mem, value);
     200  }
     201  
     202  void
     203  do_sd_sadd (int64_t *mem, int64_t value)
     204  {
     205    amo_stdat_sadd (mem, value);
     206  }
     207  
     208  void
     209  do_sd_xor (uint64_t *mem, uint64_t value)
     210  {
     211    amo_stdat_xor (mem, value);
     212  }
     213  
     214  void
     215  do_sd_ior (uint64_t *mem, uint64_t value)
     216  {
     217    amo_stdat_ior (mem, value);
     218  }
     219  
     220  void
     221  do_sd_and (uint64_t *mem, uint64_t value)
     222  {
     223    amo_stdat_and (mem, value);
     224  }
     225  
     226  void
     227  do_sd_umax (int64_t *mem, int64_t value)
     228  {
     229    amo_stdat_umax (mem, value);
     230  }
     231  
     232  void
     233  do_sd_smax (int64_t *mem, int64_t value)
     234  {
     235    amo_stdat_smax (mem, value);
     236  }
     237  
     238  void
     239  do_sd_umin (int64_t *mem, int64_t value)
     240  {
     241    amo_stdat_umin (mem, value);
     242  }
     243  
     244  void
     245  do_sd_smin (int64_t *mem, int64_t value)
     246  {
     247    amo_stdat_smin (mem, value);
     248  }
     249  
     250  /* { dg-final { scan-assembler-times {\mldat\M}  11 } } */
     251  /* { dg-final { scan-assembler-times {\mlwat\M}  11 } } */
     252  /* { dg-final { scan-assembler-times {\mstdat\M}  9 } } */
     253  /* { dg-final { scan-assembler-times {\mstwat\M}  9 } } */