1  /* C99 Logical AND operator.
       2     C99 Logical OR operator.
       3     Test with decimal float operands.  */
       4  
       5  #include "dfp-dbg.h"
       6  
       7  #define OPERATE(OPRD1,OPRT,OPRD2,RLT)	\
       8  do					\
       9  {					\
      10    if (( (OPRD1) OPRT (OPRD2) )!= RLT)	\
      11      __builtin_abort ();			\
      12  } while (0)
      13  
      14  #define DECIMAL_LOGICAL_OR(OPRD)	\
      15  do					\
      16  {					\
      17    OPRD = 1.0;				\
      18    OPERATE(1,||,OPRD,1);			\
      19    OPERATE(0,||,OPRD,1);			\
      20    OPERATE(OPRD,||,1,1);			\
      21    OPERATE(OPRD,||,0,1);			\
      22    OPRD = 0.0;				\
      23    OPERATE(1,||,OPRD,1);			\
      24    OPERATE(0,||,OPRD,0);			\
      25    OPERATE(OPRD,||,1,1);			\
      26    OPERATE(OPRD,||,0,0);			\
      27  } while (0)
      28  
      29  #define DECIMAL_LOGICAL_AND(OPRD)	\
      30  do					\
      31  {					\
      32    OPRD = 1.0;				\
      33    OPERATE(1,&&,OPRD,1);			\
      34    OPERATE(0,&&,OPRD,0);			\
      35    OPERATE(OPRD,&&,1,1);			\
      36    OPERATE(OPRD,&&,0,0);			\
      37    OPRD = 0.0;				\
      38    OPERATE(1,&&,OPRD,0);			\
      39    OPERATE(0,&&,OPRD,0);			\
      40    OPERATE(OPRD,&&,1,0);			\
      41    OPERATE(OPRD,&&,0,0);			\
      42  } while (0)
      43  
      44  int
      45  main ()
      46  {
      47    _Decimal32 d32;
      48    _Decimal64 d64;
      49    _Decimal128 d128;
      50  
      51    /* C99 Section 6.5.{13,14} Logical operator.  Constraints Each of the
      52       operands shall have scalar type.  DFP types would obey this.  */
      53    DECIMAL_LOGICAL_OR (d32);
      54    DECIMAL_LOGICAL_AND (d32);
      55  
      56    DECIMAL_LOGICAL_OR (d64);
      57    DECIMAL_LOGICAL_AND (d64);
      58  
      59    DECIMAL_LOGICAL_OR (d128);
      60    DECIMAL_LOGICAL_AND (d128);
      61  
      62    return 0;
      63  }