(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
i386/
mult-highpart.c
       1  /* { dg-do compile { target int128 } } */
       2  /* { dg-options "-O2 -Wno-long-long -fdump-tree-optimized" } */
       3  
       4  typedef unsigned int __attribute ((mode(TI))) uti_t;
       5  typedef int __attribute ((mode(TI))) ti_t;
       6  
       7  long long stest1(long long x, long long y)
       8  {
       9    return ((ti_t)x * (ti_t)y) >> 64;
      10  }
      11  
      12  long long stest2(long long x)
      13  {
      14    return ((ti_t)x * 19065) >> 64;
      15  }
      16  
      17  long long stest3(long long x, long long y)
      18  {
      19    return (uti_t)((ti_t)x * (ti_t)y) >> 64;
      20  }
      21  
      22  long long stest4(long long x)
      23  {
      24    return (uti_t)((ti_t)x * 19065) >> 64;
      25  }
      26  
      27  ti_t stest5(long long x, long long y)
      28  {
      29    return ((ti_t)x * (ti_t)y) >> 64;
      30  }
      31  
      32  ti_t stest6(long long x)
      33  {
      34    return ((ti_t)x * 19065) >> 64;
      35  }
      36  
      37  uti_t stest7(long long x, long long y)
      38  {
      39    return (uti_t)((ti_t)x * (ti_t)y) >>64;
      40  }
      41  
      42  uti_t stest8(long long x)
      43  {
      44    return (uti_t)((ti_t)x * 19065) >> 64;
      45  }
      46  
      47  long long stest9(long long x, long long y)
      48  {
      49    return ((ti_t)x * (ti_t)y) >> 72;
      50  }
      51  
      52  long long stest10(long long x)
      53  {
      54    return ((ti_t)x * 19065) >> 72;
      55  }
      56  
      57  long long stest11(long long x, long long y)
      58  {
      59    return (uti_t)((ti_t)x * (ti_t)y) >> 72;
      60  }
      61  
      62  long long stest12(long long x)
      63  {
      64    return (uti_t)((ti_t)x * 19065) >> 72;
      65  }
      66  
      67  ti_t stest13(long long x, long long y)
      68  {
      69    return ((ti_t)x * (ti_t)y) >> 72;
      70  }
      71  
      72  ti_t stest14(long long x)
      73  {
      74    return ((ti_t)x * 19065) >> 72;
      75  }
      76  
      77  uti_t stest15(long long x, long long y)
      78  {
      79    return (uti_t)((ti_t)x * (ti_t)y) >> 72;
      80  }
      81  
      82  uti_t stest16(long long x)
      83  {
      84    return (uti_t)((ti_t)x * 19065) >> 72;
      85  }
      86  
      87  unsigned long long utest1(unsigned long long x, unsigned long long y)
      88  {
      89    return ((uti_t)x * (uti_t)y) >> 64;
      90  }
      91  
      92  unsigned long long utest2(unsigned long long x)
      93  {
      94    return ((uti_t)x * 19065) >> 64;
      95  }
      96  
      97  unsigned long long utest3(unsigned long long x, unsigned long long y)
      98  {
      99    return (ti_t)((uti_t)x * (uti_t)y) >> 64;
     100  }
     101  
     102  unsigned long long utest4(unsigned long long x)
     103  {
     104    return (ti_t)((uti_t)x * 19065) >> 64;
     105  }
     106  
     107  uti_t utest5(unsigned long long x, unsigned long long y)
     108  {
     109    return ((uti_t)x * (uti_t)y) >> 64;
     110  }
     111  
     112  uti_t utest6(unsigned long long x)
     113  {
     114    return ((uti_t)x * 19065) >> 64;
     115  }
     116  
     117  ti_t utest7(unsigned long long x, unsigned long long y)
     118  {
     119    return (ti_t)((uti_t)x * (uti_t)y) >>64;
     120  }
     121  
     122  ti_t utest8(long long x)
     123  {
     124    return (uti_t)((ti_t)x * 19065) >> 64;
     125  }
     126  
     127  unsigned long long utest9(unsigned long long x, unsigned long long y)
     128  {
     129    return ((uti_t)x * (uti_t)y) >> 72;
     130  }
     131  
     132  unsigned long long utest10(unsigned long long x)
     133  {
     134    return ((uti_t)x * 19065) >> 72;
     135  }
     136  
     137  unsigned long long utest11(unsigned long long x, unsigned long long y)
     138  {
     139    return (ti_t)((uti_t)x * (uti_t)y) >> 72;
     140  }
     141  
     142  unsigned long long utest12(unsigned long long x)
     143  {
     144    return (ti_t)((uti_t)x * 19065) >> 72;
     145  }
     146  
     147  uti_t utest13(unsigned long long x, unsigned long long y)
     148  {
     149    return ((uti_t)x * (uti_t)y) >> 72;
     150  }
     151  
     152  uti_t utest14(unsigned long long x)
     153  {
     154    return ((uti_t)x * 19065) >> 72;
     155  }
     156  
     157  ti_t utest15(unsigned long long x, unsigned long long y)
     158  {
     159    return (ti_t)((uti_t)x * (uti_t)y) >> 72;
     160  }
     161  
     162  ti_t utest16(unsigned long long x)
     163  {
     164    return (ti_t)((uti_t)x * 19065) >> 72;
     165  }
     166  
     167  /* { dg-final { scan-tree-dump-times " h\\* " 32 "optimized" } } */