(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
riscv/
zbs-bext.c
       1  /* { dg-do compile } */
       2  /* { dg-options "-march=rv64gc_zbs -mabi=lp64" } */
       3  /* { dg-skip-if "" { *-*-* } { "-O0" "-Og" } } */
       4  
       5  /* bext */
       6  long
       7  foo0 (long i, long j)
       8  {
       9    return 1L & (i >> j);
      10  }
      11  
      12  /* bexti */
      13  long
      14  foo1 (long i)
      15  {
      16    return 1L & (i >> 20);
      17  }
      18  
      19  long bext64_1(long a, char bitno)
      20  {
      21    return (a & (1UL << bitno)) ? 1 : 0;
      22  }
      23  
      24  long bext64_2(long a, char bitno)
      25  {
      26    return (a & (1UL << bitno)) ? 0 : 1;
      27  }
      28  
      29  long bext64_3(long a, char bitno)
      30  {
      31    return (a & (1UL << bitno)) ? 0 : -1;
      32  }
      33  
      34  long bext64_4(long a, char bitno)
      35  {
      36    return (a & (1UL << bitno)) ? -1 : 0;
      37  }
      38  
      39  /* { dg-final { scan-assembler-times "bexti\t" 1 } } */
      40  /* { dg-final { scan-assembler-times "bext\t" 5 } } */
      41  /* { dg-final { scan-assembler-times "xori\t|snez\t" 1 } } */
      42  /* { dg-final { scan-assembler-times "addi\t" 1 } } */
      43  /* { dg-final { scan-assembler-times "neg\t" 1 } } */
      44  /* { dg-final { scan-assembler-not "andi" } } */