(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
i386/
pr69052.c
       1  /* { dg-do compile { target ia32 } } */
       2  /* { dg-require-effective-target pie } */
       3  /* { dg-options "-O2 -fPIE -fcommon" } */
       4  
       5  int look_nbits[256], loop_sym[256];
       6  const int ind[] = {
       7    0,  1,  8, 16,  9,  2,  3, 10, 17, 24, 32, 25, 18, 11,  4,  5,
       8   12, 19, 26, 33, 40, 48, 41, 34, 27, 20, 13,  6,  7, 14, 21, 28,
       9   35, 42, 49, 56, 57, 50, 43, 36, 29, 22, 15, 23, 30, 37, 44, 51,
      10   58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61, 54, 47, 55, 62, 63
      11  };
      12  int out[256];
      13  extern void bar (int *, int *);
      14  void foo (int *l1, int *l2, int *v, int *v1, int *m1, int i)
      15  {
      16    int L = i + 1, b = 20;
      17    int result, k;
      18  
      19    for (k = 1; k < 64; k++)
      20      {
      21        int look = (((L >> (b - 8))) & ((1 << 8) - 1));
      22        int nb = l1[look];
      23        int code;
      24        int r;
      25  
      26        if (nb)
      27  	{
      28  	  b -= nb;
      29  	  result = l2[look];
      30  	}
      31        else
      32  	{
      33  	  nb = 9;
      34  	  code = (((L >> (b -= nb))) & ((1 << nb) - 1));
      35  	  result = v[(code + v1[nb])];
      36  	}
      37        r = result >> 4;
      38        result &= 15;
      39        if (result)
      40  	{
      41  	  k += r;
      42  	  r = (((L >> (b -= result))) & ((1 << result) - 1));
      43  	  if (r < (1 << (result - 1)))
      44  	    result = r + (((-1) << result) + 1);
      45  	  else
      46  	    result = r;
      47  
      48  	  out[ind[k]] = result;
      49  	}
      50        bar (&L, &b);
      51      }
      52  }
      53  
      54  /* { dg-final { scan-assembler-not "leal\[ \t\]ind@GOTOFF\\(%\[^,\]*\\), %" } } */