modernc.org/ccgo/v3@v3.16.14/lib/testdata/gcc-9.1.0/gcc/testsuite/gcc.c-torture/execute/20020108-1.c (about)

     1  /* This file tests shifts in various integral modes.  */
     2  
     3  #include <limits.h>
     4  
     5  #define CAT(A, B) A ## B
     6  
     7  #define REPEAT_8	\
     8  REPEAT_FN ( 0)		\
     9  REPEAT_FN ( 1)		\
    10  REPEAT_FN ( 2)		\
    11  REPEAT_FN ( 3)		\
    12  REPEAT_FN ( 4)		\
    13  REPEAT_FN ( 5)		\
    14  REPEAT_FN ( 6)		\
    15  REPEAT_FN ( 7)
    16  
    17  #define REPEAT_16	\
    18  REPEAT_8		\
    19  REPEAT_FN ( 8)		\
    20  REPEAT_FN ( 9)		\
    21  REPEAT_FN (10)		\
    22  REPEAT_FN (11)		\
    23  REPEAT_FN (12)		\
    24  REPEAT_FN (13)		\
    25  REPEAT_FN (14)		\
    26  REPEAT_FN (15)
    27  
    28  #define REPEAT_32	\
    29  REPEAT_16		\
    30  REPEAT_FN (16)		\
    31  REPEAT_FN (17)		\
    32  REPEAT_FN (18)		\
    33  REPEAT_FN (19)		\
    34  REPEAT_FN (20)		\
    35  REPEAT_FN (21)		\
    36  REPEAT_FN (22)		\
    37  REPEAT_FN (23)		\
    38  REPEAT_FN (24)		\
    39  REPEAT_FN (25)		\
    40  REPEAT_FN (26)		\
    41  REPEAT_FN (27)		\
    42  REPEAT_FN (28)		\
    43  REPEAT_FN (29)		\
    44  REPEAT_FN (30)		\
    45  REPEAT_FN (31)
    46  
    47  /* Define 8-bit shifts.  */
    48  #if CHAR_BIT == 8
    49  typedef unsigned int u8 __attribute__((mode(QI)));
    50  typedef signed int s8 __attribute__((mode(QI)));
    51  
    52  #define REPEAT_FN(COUNT) \
    53  u8 CAT (ashift_qi_, COUNT) (u8 n) { return n << COUNT; }
    54  REPEAT_8
    55  #undef REPEAT_FN
    56  
    57  #define REPEAT_FN(COUNT) \
    58  u8 CAT (lshiftrt_qi_, COUNT) (u8 n) { return n >> COUNT; }
    59  REPEAT_8
    60  #undef REPEAT_FN
    61  
    62  #define REPEAT_FN(COUNT) \
    63  s8 CAT (ashiftrt_qi_, COUNT) (s8 n) { return n >> COUNT; }
    64  REPEAT_8
    65  #undef REPEAT_FN
    66  #endif /* CHAR_BIT == 8 */
    67  
    68  /* Define 16-bit shifts.  */
    69  #if CHAR_BIT == 8 || CHAR_BIT == 16
    70  #if CHAR_BIT == 8
    71  typedef unsigned int u16 __attribute__((mode(HI)));
    72  typedef signed int s16 __attribute__((mode(HI)));
    73  #elif CHAR_BIT == 16
    74  typedef unsigned int u16 __attribute__((mode(QI)));
    75  typedef signed int s16 __attribute__((mode(QI)));
    76  #endif
    77  
    78  #define REPEAT_FN(COUNT) \
    79  u16 CAT (ashift_hi_, COUNT) (u16 n) { return n << COUNT; }
    80  REPEAT_16
    81  #undef REPEAT_FN
    82  
    83  #define REPEAT_FN(COUNT) \
    84  u16 CAT (lshiftrt_hi_, COUNT) (u16 n) { return n >> COUNT; }
    85  REPEAT_16
    86  #undef REPEAT_FN
    87  
    88  #define REPEAT_FN(COUNT) \
    89  s16 CAT (ashiftrt_hi_, COUNT) (s16 n) { return n >> COUNT; }
    90  REPEAT_16
    91  #undef REPEAT_FN
    92  #endif /* CHAR_BIT == 8 || CHAR_BIT == 16 */
    93  
    94  /* Define 32-bit shifts.  */
    95  #if CHAR_BIT == 8 || CHAR_BIT == 16 || CHAR_BIT == 32
    96  #if CHAR_BIT == 8
    97  typedef unsigned int u32 __attribute__((mode(SI)));
    98  typedef signed int s32 __attribute__((mode(SI)));
    99  #elif CHAR_BIT == 16
   100  typedef unsigned int u32 __attribute__((mode(HI)));
   101  typedef signed int s32 __attribute__((mode(HI)));
   102  #elif CHAR_BIT == 32
   103  typedef unsigned int u32 __attribute__((mode(QI)));
   104  typedef signed int s32 __attribute__((mode(QI)));
   105  #endif
   106  
   107  #define REPEAT_FN(COUNT) \
   108  u32 CAT (ashift_si_, COUNT) (u32 n) { return n << COUNT; }
   109  REPEAT_32
   110  #undef REPEAT_FN
   111  
   112  #define REPEAT_FN(COUNT) \
   113  u32 CAT (lshiftrt_si_, COUNT) (u32 n) { return n >> COUNT; }
   114  REPEAT_32
   115  #undef REPEAT_FN
   116  
   117  #define REPEAT_FN(COUNT) \
   118  s32 CAT (ashiftrt_si_, COUNT) (s32 n) { return n >> COUNT; }
   119  REPEAT_32
   120  #undef REPEAT_FN
   121  #endif /* CHAR_BIT == 8 || CHAR_BIT == 16 || CHAR_BIT == 32 */
   122  
   123  extern void abort (void);
   124  extern void exit (int);
   125  
   126  int
   127  main ()
   128  {
   129    /* Test 8-bit shifts.  */
   130  #if CHAR_BIT == 8
   131  # define REPEAT_FN(COUNT) \
   132    if (CAT (ashift_qi_, COUNT) (0xff) != (u8) ((u8)0xff << COUNT)) abort ();
   133    REPEAT_8;
   134  # undef REPEAT_FN
   135  
   136  # define REPEAT_FN(COUNT) \
   137    if (CAT (lshiftrt_qi_, COUNT) (0xff) != (u8) ((u8)0xff >> COUNT)) abort ();
   138    REPEAT_8;
   139  # undef REPEAT_FN
   140  
   141  # define REPEAT_FN(COUNT) \
   142    if (CAT (ashiftrt_qi_, COUNT) (-1) != -1) abort ();
   143    REPEAT_8;
   144  # undef REPEAT_FN
   145  
   146  # define REPEAT_FN(COUNT) \
   147    if (CAT (ashiftrt_qi_, COUNT) (0) != 0) abort ();
   148    REPEAT_8;
   149  # undef REPEAT_FN
   150  #endif /* CHAR_BIT == 8 */
   151  
   152    /* Test 16-bit shifts.  */
   153  #if CHAR_BIT == 8 || CHAR_BIT == 16
   154  # define REPEAT_FN(COUNT)			\
   155    if (CAT (ashift_hi_, COUNT) (0xffff)		\
   156        != (u16) ((u16) 0xffff << COUNT)) abort ();
   157    REPEAT_16;
   158  # undef REPEAT_FN
   159  
   160  # define REPEAT_FN(COUNT)			\
   161    if (CAT (lshiftrt_hi_, COUNT) (0xffff)	\
   162        != (u16) ((u16) 0xffff >> COUNT)) abort ();
   163    REPEAT_16;
   164  # undef REPEAT_FN
   165  
   166  # define REPEAT_FN(COUNT) \
   167    if (CAT (ashiftrt_hi_, COUNT) (-1) != -1) abort ();
   168    REPEAT_16;
   169  # undef REPEAT_FN
   170  
   171  # define REPEAT_FN(COUNT) \
   172    if (CAT (ashiftrt_hi_, COUNT) (0) != 0) abort ();
   173    REPEAT_16;
   174  # undef REPEAT_FN
   175  #endif /* CHAR_BIT == 8 || CHAR_BIT == 16 */
   176  
   177    /* Test 32-bit shifts.  */
   178  #if CHAR_BIT == 8 || CHAR_BIT == 16 || CHAR_BIT == 32
   179  # define REPEAT_FN(COUNT)				\
   180    if (CAT (ashift_si_, COUNT) (0xffffffff)		\
   181        != (u32) ((u32) 0xffffffff << COUNT)) abort ();
   182    REPEAT_32;
   183  # undef REPEAT_FN
   184  
   185  # define REPEAT_FN(COUNT)				\
   186    if (CAT (lshiftrt_si_, COUNT) (0xffffffff)		\
   187        != (u32) ((u32) 0xffffffff >> COUNT)) abort ();
   188    REPEAT_32;
   189  # undef REPEAT_FN
   190  
   191  # define REPEAT_FN(COUNT) \
   192    if (CAT (ashiftrt_si_, COUNT) (-1) != -1) abort ();
   193    REPEAT_32;
   194  # undef REPEAT_FN
   195  
   196  # define REPEAT_FN(COUNT) \
   197    if (CAT (ashiftrt_si_, COUNT) (0) != 0) abort ();
   198    REPEAT_32;
   199  # undef REPEAT_FN
   200  #endif /* CHAR_BIT == 8 || CHAR_BIT == 16 || CHAR_BIT == 32 */
   201  
   202    exit (0);
   203  }