1  /* { dg-do compile { target { powerpc*-*-linux* } } } */
       2  /* { dg-require-effective-target hard_dfp } */
       3  /* { dg-options "-mdejagnu-cpu=power7 -O2" } */
       4  /* { dg-final { scan-assembler-times "ddedpd " 4    } } */
       5  /* { dg-final { scan-assembler-times "denbcd " 2    } } */
       6  /* { dg-final { scan-assembler-times "dxex "   1    } } */
       7  /* { dg-final { scan-assembler-times "diex "   1    } } */
       8  /* { dg-final { scan-assembler-times "dscli "  2    } } */
       9  /* { dg-final { scan-assembler-times "dscri "  2    } } */
      10  /* { dg-final { scan-assembler-times "std "    1    { target lp64 } } } */
      11  /* { dg-final { scan-assembler-times "ld "     1    { target lp64 } } } */
      12  /* 32-bit needs a stack frame, and needs two GPR mem insns per _Decimal64.  */
      13  /* { dg-final { scan-assembler-times "stwu "   2    { target ilp32 } } } */
      14  /* { dg-final { scan-assembler-times "stw "    2    { target ilp32 } } } */
      15  /* { dg-final { scan-assembler-times "lwz "    2    { target ilp32 } } } */
      16  /* { dg-final { scan-assembler-times "stfd "   1    } } */
      17  /* { dg-final { scan-assembler-times "lfd "    1    } } */
      18  /* { dg-final { scan-assembler-not   "bl __builtin" } } */
      19  /* { dg-final { scan-assembler-not   "dctqpq"       } } */
      20  /* { dg-final { scan-assembler-not   "drdpq"        } } */
      21  
      22  _Decimal64
      23  do_dedpd_0 (_Decimal64 a)
      24  {
      25    return __builtin_ddedpd (0, a);
      26  }
      27  
      28  _Decimal64
      29  do_dedpd_1 (_Decimal64 a)
      30  {
      31    return __builtin_ddedpd (1, a);
      32  }
      33  
      34  _Decimal64
      35  do_dedpd_2 (_Decimal64 a)
      36  {
      37    return __builtin_ddedpd (2, a);
      38  }
      39  
      40  _Decimal64
      41  do_dedpd_3 (_Decimal64 a)
      42  {
      43    return __builtin_ddedpd (3, a);
      44  }
      45  
      46  _Decimal64
      47  do_enbcd_0 (_Decimal64 a)
      48  {
      49    return __builtin_denbcd (0, a);
      50  }
      51  
      52  _Decimal64
      53  do_enbcd_1 (_Decimal64 a)
      54  {
      55    return __builtin_denbcd (1, a);
      56  }
      57  
      58  long long
      59  do_xex (_Decimal64 a)
      60  {
      61    return __builtin_dxex (a);
      62  }
      63  
      64  _Decimal64
      65  do_iex (long long a, _Decimal64 b)
      66  {
      67    return __builtin_diex (a, b);
      68  }
      69  
      70  _Decimal64
      71  do_scli_1 (_Decimal64 a)
      72  {
      73    return __builtin_dscli (a, 1);
      74  }
      75  
      76  _Decimal64
      77  do_scli_10 (_Decimal64 a)
      78  {
      79    return __builtin_dscli (a, 10);
      80  }
      81  
      82  _Decimal64
      83  do_scri_1 (_Decimal64 a)
      84  {
      85    return __builtin_dscri (a, 1);
      86  }
      87  
      88  _Decimal64
      89  do_scri_10 (_Decimal64 a)
      90  {
      91    return __builtin_dscri (a, 10);
      92  }