1  /* { dg-do compile } */
       2  /* { dg-options "-O2" } */
       3  
       4  #pragma GCC push_options
       5  #pragma GCC target ("arch=armv8-a")
       6  
       7  #pragma GCC push_options
       8  #pragma GCC target ("arch=armv8-a+tme")
       9  #ifndef __ARM_FEATURE_TME
      10  #error "__ARM_FEATURE_TME is not defined but should be!"
      11  #endif
      12  
      13  #pragma GCC pop_options
      14  
      15  #ifdef __ARM_FEATURE_TME
      16  #error "__ARM_FEATURE_TME is defined but should not be!"
      17  #endif
      18  
      19  /* Test Armv8.6-A features.  */
      20  
      21  #ifdef __ARM_FEATURE_MATMUL_INT8
      22  #error "__ARM_FEATURE_MATMUL_INT8 is defined but should not be!"
      23  #endif
      24  #ifdef __ARM_FEATURE_SVE_MATMUL_INT8
      25  #error "__ARM_FEATURE_SVE_MATMUL_INT8 is defined but should not be!"
      26  #endif
      27  #ifdef __ARM_FEATURE_SVE_MATMUL_FP32
      28  #error "__ARM_FEATURE_SVE_MATMUL_FP32 is defined but should not be!"
      29  #endif
      30  #ifdef __ARM_FEATURE_SVE_MATMUL_FP64
      31  #error "__ARM_FEATURE_SVE_MATMUL_FP64 is defined but should not be!"
      32  #endif
      33  
      34  #pragma GCC push_options
      35  #pragma GCC target ("arch=armv8.6-a")
      36  #ifndef __ARM_FEATURE_MATMUL_INT8
      37  #error "__ARM_FEATURE_MATMUL_INT8 is not defined but should be!"
      38  #endif
      39  #ifdef __ARM_FEATURE_SVE
      40  #error "__ARM_FEATURE_SVE is defined but should not be!"
      41  #endif
      42  #ifdef __ARM_FEATURE_SVE_MATMUL_INT8
      43  #error "__ARM_FEATURE_SVE_MATMUL_INT8 is defined but should not be!"
      44  #endif
      45  #ifdef __ARM_FEATURE_SVE_MATMUL_FP32
      46  #error "__ARM_FEATURE_SVE_MATMUL_FP32 is defined but should not be!"
      47  #endif
      48  #ifdef __ARM_FEATURE_SVE_MATMUL_FP64
      49  #error "__ARM_FEATURE_SVE_MATMUL_FP64 is defined but should not be!"
      50  #endif
      51  #pragma GCC pop_options
      52  
      53  #pragma GCC push_options
      54  #pragma GCC target ("arch=armv8.6-a+sve")
      55  #ifndef __ARM_FEATURE_MATMUL_INT8
      56  #error "__ARM_FEATURE_MATMUL_INT8 is not defined but should be!"
      57  #endif
      58  #ifndef __ARM_FEATURE_SVE
      59  #error "__ARM_FEATURE_SVE is not defined but should be!"
      60  #endif
      61  #ifndef __ARM_FEATURE_SVE_MATMUL_INT8
      62  #error "__ARM_FEATURE_SVE_MATMUL_INT8 is not defined but should be!"
      63  #endif
      64  #ifdef __ARM_FEATURE_SVE_MATMUL_FP32
      65  #error "__ARM_FEATURE_SVE_MATMUL_FP32 is defined but should not be!"
      66  #endif
      67  #ifdef __ARM_FEATURE_SVE_MATMUL_FP64
      68  #error "__ARM_FEATURE_SVE_MATMUL_FP64 is defined but should not be!"
      69  #endif
      70  #pragma GCC pop_options
      71  
      72  #pragma GCC push_options
      73  #pragma GCC target ("arch=armv8.2-a+i8mm")
      74  #ifndef __ARM_FEATURE_MATMUL_INT8
      75  #error "__ARM_FEATURE_MATMUL_INT8 is not defined but should be!"
      76  #endif
      77  #ifdef __ARM_FEATURE_SVE
      78  #error "__ARM_FEATURE_SVE is defined but should not be!"
      79  #endif
      80  #ifdef __ARM_FEATURE_SVE_MATMUL_INT8
      81  #error "__ARM_FEATURE_SVE_MATMUL_INT8 is defined but should not be!"
      82  #endif
      83  #pragma GCC pop_options
      84  
      85  #pragma GCC push_options
      86  #pragma GCC target ("arch=armv8.2-a+i8mm+sve")
      87  #ifndef __ARM_FEATURE_MATMUL_INT8
      88  #error "__ARM_FEATURE_MATMUL_INT8 is not defined but should be!"
      89  #endif
      90  #ifndef __ARM_FEATURE_SVE
      91  #error "__ARM_FEATURE_SVE is not defined but should be!"
      92  #endif
      93  #ifndef __ARM_FEATURE_SVE_MATMUL_INT8
      94  #error "__ARM_FEATURE_SVE_MATMUL_INT8 is not defined but should be!"
      95  #endif
      96  #ifdef __ARM_FEATURE_SVE_MATMUL_FP32
      97  #error "__ARM_FEATURE_SVE_MATMUL_FP32 is defined but should not be!"
      98  #endif
      99  #ifdef __ARM_FEATURE_SVE_MATMUL_FP64
     100  #error "__ARM_FEATURE_SVE_MATMUL_FP64 is defined but should not be!"
     101  #endif
     102  #pragma GCC pop_options
     103  
     104  #pragma GCC push_options
     105  #pragma GCC target ("arch=armv8.2-a+f32mm")
     106  #ifndef __ARM_FEATURE_SVE
     107  #error "__ARM_FEATURE_SVE is not defined but should be!"
     108  #endif
     109  #ifdef __ARM_FEATURE_SVE_MATMUL_INT8
     110  #error "__ARM_FEATURE_SVE_MATMUL_INT8 is defined but should not be!"
     111  #endif
     112  #ifndef __ARM_FEATURE_SVE_MATMUL_FP32
     113  #error "__ARM_FEATURE_SVE_MATMUL_FP32 is not defined but should be!"
     114  #endif
     115  #ifdef __ARM_FEATURE_SVE_MATMUL_FP64
     116  #error "__ARM_FEATURE_SVE_MATMUL_FP64 is defined but should not be!"
     117  #endif
     118  #pragma GCC pop_options
     119  
     120  #pragma GCC push_options
     121  #pragma GCC target ("arch=armv8.2-a+f64mm")
     122  #ifndef __ARM_FEATURE_SVE
     123  #error "__ARM_FEATURE_SVE is not defined but should be!"
     124  #endif
     125  #ifdef __ARM_FEATURE_SVE_MATMUL_INT8
     126  #error "__ARM_FEATURE_SVE_MATMUL_INT8 is defined but should not be!"
     127  #endif
     128  #ifdef __ARM_FEATURE_SVE_MATMUL_FP32
     129  #error "__ARM_FEATURE_SVE_MATMUL_FP32 is defined but should not be!"
     130  #endif
     131  #ifndef __ARM_FEATURE_SVE_MATMUL_FP64
     132  #error "__ARM_FEATURE_SVE_MATMUL_FP64 is not defined but should be!"
     133  #endif
     134  #pragma GCC pop_options
     135  
     136  #pragma GCC push_options
     137  #pragma GCC target ("arch=armv8.6-a+nosimd")
     138  #ifdef __ARM_FEATURE_MATMUL_INT8
     139  #error "__ARM_FEATURE_MATMUL_INT8 is defined but should not be!"
     140  #endif
     141  #ifdef __ARM_FEATURE_SVE_MATMUL_FP32
     142  #error "__ARM_FEATURE_SVE_MATMUL_FP32 is defined but should not be!"
     143  #endif
     144  #ifdef __ARM_FEATURE_SVE_MATMUL_FP64
     145  #error "__ARM_FEATURE_SVE_MATMUL_FP64 is defined but should not be!"
     146  #endif
     147  #pragma GCC pop_options
     148  
     149  #pragma GCC push_options
     150  #pragma GCC target ("arch=armv8.6-a+nofp")
     151  #ifdef __ARM_FEATURE_MATMUL_INT8
     152  #error "__ARM_FEATURE_MATMUL_INT8 is defined but should not be!"
     153  #endif
     154  #ifdef __ARM_FEATURE_SVE_MATMUL_FP32
     155  #error "__ARM_FEATURE_SVE_MATMUL_FP32 is defined but should not be!"
     156  #endif
     157  #ifdef __ARM_FEATURE_SVE_MATMUL_FP64
     158  #error "__ARM_FEATURE_SVE_MATMUL_FP64 is defined but should not be!"
     159  #endif
     160  #pragma GCC pop_options
     161  
     162  #ifdef __ARM_FEATURE_BF16_SCALAR_ARITHMETIC
     163  #error "__ARM_FEATURE_BF16_SCALAR_ARITHMETIC is defined but should not be!"
     164  #endif
     165  #ifdef __ARM_FEATURE_BF16_VECTOR_ARITHMETIC
     166  #error "__ARM_FEATURE_BF16_VECTOR_ARITHMETIC is defined but should not be!"
     167  #endif
     168  
     169  #pragma GCC push_options
     170  #pragma GCC target ("arch=armv8.6-a")
     171  #ifndef __ARM_FEATURE_BF16_SCALAR_ARITHMETIC
     172  #error "__ARM_FEATURE_BF16_SCALAR_ARITHMETIC is not defined but should be!"
     173  #endif
     174  #ifndef __ARM_FEATURE_BF16_VECTOR_ARITHMETIC
     175  #error "__ARM_FEATURE_BF16_VECTOR_ARITHMETIC is not defined but should be!"
     176  #endif
     177  #pragma GCC pop_options
     178  
     179  #pragma GCC push_options
     180  #pragma GCC target ("arch=armv8.2-a+bf16")
     181  #ifndef __ARM_FEATURE_BF16_SCALAR_ARITHMETIC
     182  #error "__ARM_FEATURE_BF16_SCALAR_ARITHMETIC is not defined but should be!"
     183  #endif
     184  #ifndef __ARM_FEATURE_BF16_VECTOR_ARITHMETIC
     185  #error "__ARM_FEATURE_BF16_VECTOR_ARITHMETIC is not defined but should be!"
     186  #endif
     187  #pragma GCC pop_options
     188  
     189  #pragma GCC push_options
     190  #pragma GCC target ("arch=armv8.2-a+bf16+nosimd")
     191  #ifndef __ARM_FEATURE_BF16_SCALAR_ARITHMETIC
     192  #error "__ARM_FEATURE_BF16_SCALAR_ARITHMETIC is not defined but should be!"
     193  #endif
     194  #ifdef __ARM_FEATURE_BF16_VECTOR_ARITHMETIC
     195  #error "__ARM_FEATURE_BF16_VECTOR_ARITHMETIC is defined but should not be!"
     196  #endif
     197  #pragma GCC pop_options
     198  
     199  #pragma GCC push_options
     200  #pragma GCC target ("arch=armv8.6-a+nofp")
     201  #ifdef __ARM_FEATURE_BF16_SCALAR_ARITHMETIC
     202  #error "__ARM_FEATURE_BF16_SCALAR_ARITHMETIC is defined but should not be!"
     203  #endif
     204  #ifdef __ARM_FEATURE_BF16_VECTOR_ARITHMETIC
     205  #error "__ARM_FEATURE_BF16_VECTOR_ARITHMETIC is defined but should not be!"
     206  #endif
     207  #pragma GCC pop_options
     208  
     209  #pragma GCC pop_options
     210  
     211  /* Make sure that general-regs-only works too.  */
     212  #pragma GCC push_options
     213  #pragma GCC target ("arch=armv8.2-a+sve+i8mm+f32mm+f64mm")
     214  #ifndef __ARM_FEATURE_SVE
     215  #error "__ARM_FEATURE_SVE is not defined but should be!"
     216  #endif
     217  #ifndef __ARM_FEATURE_SVE_MATMUL_INT8
     218  #error "__ARM_FEATURE_SVE_MATMUL_INT8 is not defined but should be!"
     219  #endif
     220  #ifndef __ARM_FEATURE_SVE_MATMUL_FP32
     221  #error "__ARM_FEATURE_SVE_MATMUL_FP32 is not defined but should be!"
     222  #endif
     223  #ifndef __ARM_FEATURE_SVE_MATMUL_FP64
     224  #error "__ARM_FEATURE_SVE_MATMUL_FP64 is not defined but should be!"
     225  #endif
     226  
     227  #pragma GCC push_options
     228  #pragma GCC target ("general-regs-only")
     229  #ifdef __ARM_FEATURE_SVE
     230  #error "__ARM_FEATURE_SVE is defined but should not be!"
     231  #endif
     232  #ifdef __ARM_FEATURE_SVE_MATMUL_INT8
     233  #error "__ARM_FEATURE_SVE_MATMUL_INT8 is defined but should not be!"
     234  #endif
     235  #ifdef __ARM_FEATURE_SVE_MATMUL_FP32
     236  #error "__ARM_FEATURE_SVE_MATMUL_FP32 is defined but should not be!"
     237  #endif
     238  #ifdef __ARM_FEATURE_SVE_MATMUL_FP64
     239  #error "__ARM_FEATURE_SVE_MATMUL_FP64 is defined but should not be!"
     240  #endif
     241  #pragma GCC pop_options
     242  
     243  #pragma GCC push_options
     244  #pragma GCC target ("arch=armv8.7-a")
     245  #ifndef __ARM_FEATURE_LS64
     246  #error "__ARM_FEATURE_LS64 is not defined but should be!"
     247  #endif
     248  #pragma GCC pop_options
     249  
     250  #pragma GCC push_options
     251  #pragma GCC target ("arch=armv8.7-a+ls64")
     252  #ifndef __ARM_FEATURE_LS64
     253  #error "__ARM_FEATURE_LS64 is not defined but should be!"
     254  #endif
     255  #pragma GCC pop_options
     256  
     257  #pragma GCC pop_options
     258  
     259  int
     260  foo (int a)
     261  {
     262    return a;
     263  }