(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
h8300/
pr13721.c
       1  static __inline__ __attribute__((always_inline)) void set_bit(int nr, volatile void * addr) 
       2  {
       3  	volatile unsigned char *b_addr;
       4  	b_addr = (volatile unsigned char *)addr + ((nr >> 3) ^ 3);
       5  	nr &= 7;
       6  	if (__builtin_constant_p (nr))					  
       7  	{								  
       8  		switch(nr)						  
       9  		{							  
      10  		case 0:							  
      11  			__asm__("bset #0,%0" :"+m"(*b_addr) :"m"(*b_addr));
      12  			break;	     					  
      13  		case 1:		     					  
      14  			__asm__("bset #1,%0" :"+m"(*b_addr) :"m"(*b_addr));
      15  			break;	     					  
      16  		case 2:		     					  
      17  			__asm__("bset #2,%0" :"+m"(*b_addr) :"m"(*b_addr));
      18  			break;	     					  
      19  		case 3:		     					  
      20  			__asm__("bset #3,%0" :"+m"(*b_addr) :"m"(*b_addr));
      21  			break;	     					  
      22  		case 4:		     					  
      23  			__asm__("bset #4,%0" :"+m"(*b_addr) :"m"(*b_addr));
      24  			break;	     					  
      25  		case 5:		     					  
      26  			__asm__("bset #5,%0" :"+m"(*b_addr) :"m"(*b_addr));
      27  			break;	     					  
      28  		case 6:		     					  
      29  			__asm__("bset #6,%0" :"+m"(*b_addr) :"m"(*b_addr));
      30  			break;	     					  
      31  		case 7:		     					  
      32  			__asm__("bset #7,%0" :"+m"(*b_addr) :"m"(*b_addr));
      33  			break;						  
      34  		}							  
      35  	}								  
      36  	else								  
      37  	{								  
      38  		__asm__("bset %w1,%0"  :"+m"(*b_addr)  :"g"(nr),"m"(*b_addr));	/* { dg-error "invalid 'asm'" "" } */
      39  
      40  	}								  
      41  }
      42  
      43  static __inline__ __attribute__((always_inline)) int test_bit(int nr, const volatile void * addr)
      44  {
      45  	return (*((volatile unsigned char *)addr + ((nr >> 3) ^ 3)) & (1UL << (nr & 7))) != 0;
      46  }
      47  
      48  struct a {
      49          unsigned long a;
      50  };
      51  
      52  void dummy(struct a *a, int b);
      53  
      54  int ice_func(struct a *a, int b)
      55  {
      56    int c,d;
      57    unsigned int e;
      58  
      59    for(c=0;c<b;c++) {
      60      for(d=b; d <= b; d++) {
      61        if (!test_bit(d, &e)) {
      62          dummy(a, d * a->a);
      63          dummy(a, d * a->a);
      64          set_bit(d, &e);
      65        }
      66      }
      67      dummy(a, d * a->a);
      68    }
      69  
      70    return 0;
      71  }