(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
tree-ssa/
pr24627.c
       1  /* { dg-do run } */
       2  /* { dg-options "-O" } */
       3  /* { dg-require-effective-target int32plus } */
       4  
       5  extern void abort (void);
       6  typedef unsigned int u_int32;
       7  
       8  typedef struct {
       9    union {u_int32 Xl_ui;} Ul_i;
      10    union {u_int32 Xl_uf;} Ul_f;
      11  } l_fp;
      12  
      13  void
      14  dolfptoa (short ndec)
      15  {
      16    l_fp work, ftmp;
      17  
      18    work.Ul_i.Xl_ui = 0;
      19    work.Ul_f.Xl_uf = 0x535f3d8;
      20  
      21    while (ndec > 0)
      22      {
      23        u_int32 lo_tmp;
      24        u_int32 hi_tmp;
      25  
      26        ndec--;
      27        work.Ul_i.Xl_ui = 0;
      28        work.Ul_i.Xl_ui <<= 1;
      29        if ((work.Ul_f.Xl_uf) & 0x80000000)
      30  	(work.Ul_i.Xl_ui) |= 0x1;
      31        (work.Ul_f.Xl_uf) <<= 1;
      32  
      33        ftmp = work;
      34        (work.Ul_i.Xl_ui) <<= 1;
      35        if ((work.Ul_f.Xl_uf) & 0x80000000)
      36  	(work.Ul_i.Xl_ui) |= 0x1;
      37        (work.Ul_f.Xl_uf) <<= 1;
      38  
      39        (work.Ul_i.Xl_ui) <<= 1;
      40        if ((work.Ul_f.Xl_uf) & 0x80000000)
      41  	(work.Ul_i.Xl_ui) |= 0x1;
      42        (work.Ul_f.Xl_uf) <<= 1;
      43  
      44        lo_tmp = ((work.Ul_f.Xl_uf) & 0xffff) + ((ftmp.Ul_f.Xl_uf) & 0xffff);
      45        hi_tmp = (((work.Ul_f.Xl_uf) >> 16) & 0xffff)
      46                 + (((ftmp.Ul_f.Xl_uf) >> 16) & 0xffff);
      47  
      48        if (lo_tmp & 0x10000)
      49  	hi_tmp++;
      50  
      51        (work.Ul_f.Xl_uf) = ((hi_tmp & 0xffff) << 16) | (lo_tmp & 0xffff);
      52        (work.Ul_i.Xl_ui) += (ftmp.Ul_i.Xl_ui);
      53  
      54        if (hi_tmp & 0x10000)
      55  	(work.Ul_i.Xl_ui)++;
      56  
      57  
      58        if (!(work.Ul_i.Xl_ui < 10))
      59  	abort ();
      60      }
      61  }
      62  
      63  int main()
      64  {
      65    dolfptoa(6);
      66    return 0;
      67  }