1  /* Test complex arithmetic with signed zeros.  Mixed real/complex
       2     multiplication.  */
       3  /* { dg-do run } */
       4  /* { dg-options "-std=gnu99" { target c } } */
       5  
       6  #include "complex-sign.h"
       7  
       8  #define CHECK_MUL(TYPE, COPY, ZERO, ZEROI)				\
       9    do {									\
      10      CHECK_ARITH_RC (TYPE, COPY, ZERO, ZEROI, *, +, +, +, +, +);		\
      11      CHECK_ARITH_RC (TYPE, COPY, ZERO, ZEROI, *, +, +, -, +, -);		\
      12      CHECK_ARITH_RC (TYPE, COPY, ZERO, ZEROI, *, +, -, +, -, +);		\
      13      CHECK_ARITH_RC (TYPE, COPY, ZERO, ZEROI, *, +, -, -, -, -);		\
      14      CHECK_ARITH_RC (TYPE, COPY, ZERO, ZEROI, *, -, +, +, -, -);		\
      15      CHECK_ARITH_RC (TYPE, COPY, ZERO, ZEROI, *, -, +, -, -, +);		\
      16      CHECK_ARITH_RC (TYPE, COPY, ZERO, ZEROI, *, -, -, +, +, -);		\
      17      CHECK_ARITH_RC (TYPE, COPY, ZERO, ZEROI, *, -, -, -, +, +);		\
      18      CHECK_ARITH_CR (TYPE, COPY, ZERO, ZEROI, *, +, +, +, ZERO, +, +);	\
      19      CHECK_ARITH_CR (TYPE, COPY, ZERO, ZEROI, *, +, +, -, ZERO, -, -);	\
      20      CHECK_ARITH_CR (TYPE, COPY, ZERO, ZEROI, *, +, -, +, ZERO, +, -);	\
      21      CHECK_ARITH_CR (TYPE, COPY, ZERO, ZEROI, *, +, -, -, ZERO, -, +);	\
      22      CHECK_ARITH_CR (TYPE, COPY, ZERO, ZEROI, *, -, +, +, ZERO, -, +);	\
      23      CHECK_ARITH_CR (TYPE, COPY, ZERO, ZEROI, *, -, +, -, ZERO, +, -);	\
      24      CHECK_ARITH_CR (TYPE, COPY, ZERO, ZEROI, *, -, -, +, ZERO, -, -);	\
      25      CHECK_ARITH_CR (TYPE, COPY, ZERO, ZEROI, *, -, -, -, ZERO, +, +);	\
      26    } while (0)
      27  
      28  void
      29  check_mul_float (void)
      30  {
      31    CHECK_MUL (float, __builtin_copysignf, 0.0f, 0.0if);
      32  }
      33  
      34  void
      35  check_mul_double (void)
      36  {
      37    CHECK_MUL (double, __builtin_copysign, 0.0, 0.0i);
      38  }
      39  
      40  void
      41  check_mul_long_double (void)
      42  {
      43    CHECK_MUL (long double, __builtin_copysignl, 0.0l, 0.0il);
      44  }
      45  
      46  int
      47  main (void)
      48  {
      49    check_mul_float ();
      50    check_mul_double ();
      51    check_mul_long_double ();
      52    exit (0);
      53  }