Commit 2c74ce9d by Richard Henderson Committed by Richard Henderson

20020108-1.c: Rewrite to choose the proper type in which to perform the operation for each size.

        * gcc.c-torture/execute/20020108-1.c: Rewrite to choose the proper
        type in which to perform the operation for each size.

From-SVN: r48706
parent c893e4a4
2002-01-09 Richard Henderson <rth@redhat.com>
* gcc.c-torture/execute/20020108-1.c: Rewrite to choose the proper
type in which to perform the operation for each size.
Wed Jan 9 16:48:33 2002 Alan Matsuoka (alanm@redhat.com) Wed Jan 9 16:48:33 2002 Alan Matsuoka (alanm@redhat.com)
* gcc.c-torture/compile/20020109-2.c: New test. * gcc.c-torture/compile/20020109-2.c: New test.
......
/* This file tests shifts in QImode, HImode, and SImode. */ /* This file tests shifts in various integral modes. */
#define CAT(A, B) A ## B #include <limits.h>
/* Define 8-bit shifts. */ #define CAT(A, B) A ## B
#define REPEAT_8 \ #define REPEAT_8 \
REPEAT_FN ( 0) \ REPEAT_FN ( 0) \
REPEAT_FN ( 1) \ REPEAT_FN ( 1) \
REPEAT_FN ( 2) \ REPEAT_FN ( 2) \
REPEAT_FN ( 3) \ REPEAT_FN ( 3) \
REPEAT_FN ( 4) \ REPEAT_FN ( 4) \
REPEAT_FN ( 5) \ REPEAT_FN ( 5) \
REPEAT_FN ( 6) \ REPEAT_FN ( 6) \
REPEAT_FN ( 7) REPEAT_FN ( 7)
typedef unsigned char uchar; #define REPEAT_16 \
typedef signed char schar; REPEAT_8 \
REPEAT_FN ( 8) \
REPEAT_FN ( 9) \
REPEAT_FN (10) \
REPEAT_FN (11) \
REPEAT_FN (12) \
REPEAT_FN (13) \
REPEAT_FN (14) \
REPEAT_FN (15)
#define REPEAT_32 \
REPEAT_16 \
REPEAT_FN (16) \
REPEAT_FN (17) \
REPEAT_FN (18) \
REPEAT_FN (19) \
REPEAT_FN (20) \
REPEAT_FN (21) \
REPEAT_FN (22) \
REPEAT_FN (23) \
REPEAT_FN (24) \
REPEAT_FN (25) \
REPEAT_FN (26) \
REPEAT_FN (27) \
REPEAT_FN (28) \
REPEAT_FN (29) \
REPEAT_FN (30) \
REPEAT_FN (31)
/* Define 8-bit shifts. */
#if CHAR_BIT == 8
typedef unsigned int u8 __attribute__((mode(QI)));
typedef signed int s8 __attribute__((mode(QI)));
#define REPEAT_FN(COUNT) \ #define REPEAT_FN(COUNT) \
uchar CAT (ashift_qi_, COUNT) (uchar n) { return n << COUNT; } u8 CAT (ashift_qi_, COUNT) (u8 n) { return n << COUNT; }
REPEAT_8 REPEAT_8
#undef REPEAT_FN #undef REPEAT_FN
#define REPEAT_FN(COUNT) \ #define REPEAT_FN(COUNT) \
uchar CAT (lshiftrt_qi_, COUNT) (uchar n) { return n >> COUNT; } u8 CAT (lshiftrt_qi_, COUNT) (u8 n) { return n >> COUNT; }
REPEAT_8 REPEAT_8
#undef REPEAT_FN #undef REPEAT_FN
#define REPEAT_FN(COUNT) \ #define REPEAT_FN(COUNT) \
schar CAT (ashiftrt_qi_, COUNT) (schar n) { return n >> COUNT; } s8 CAT (ashiftrt_qi_, COUNT) (s8 n) { return n >> COUNT; }
REPEAT_8 REPEAT_8
#undef REPEAT_FN #undef REPEAT_FN
#endif /* CHAR_BIT == 8 */
/* Define 16-bit shifts. */ /* Define 16-bit shifts. */
#if CHAR_BIT == 8 || CHAR_BIT == 16
#define REPEAT_16 \ #if CHAR_BIT == 8
REPEAT_8 \ typedef unsigned int u16 __attribute__((mode(HI)));
REPEAT_FN ( 8) \ typedef signed int s16 __attribute__((mode(HI)));
REPEAT_FN ( 9) \ #elif CHAR_BIT == 16
REPEAT_FN (10) \ typedef unsigned int u16 __attribute__((mode(QI)));
REPEAT_FN (11) \ typedef signed int s16 __attribute__((mode(QI)));
REPEAT_FN (12) \ #endif
REPEAT_FN (13) \
REPEAT_FN (14) \ #define REPEAT_FN(COUNT) \
REPEAT_FN (15) u16 CAT (ashift_hi_, COUNT) (u16 n) { return n << COUNT; }
typedef unsigned short ushort;
typedef signed short sshort;
#define REPEAT_FN(COUNT) \
ushort CAT (ashift_hi_, COUNT) (ushort n) { return n << COUNT; }
REPEAT_16 REPEAT_16
#undef REPEAT_FN #undef REPEAT_FN
#define REPEAT_FN(COUNT) \ #define REPEAT_FN(COUNT) \
ushort CAT (lshiftrt_hi_, COUNT) (ushort n) { return n >> COUNT; } u16 CAT (lshiftrt_hi_, COUNT) (u16 n) { return n >> COUNT; }
REPEAT_16 REPEAT_16
#undef REPEAT_FN #undef REPEAT_FN
#define REPEAT_FN(COUNT) \ #define REPEAT_FN(COUNT) \
sshort CAT (ashiftrt_hi_, COUNT) (sshort n) { return n >> COUNT; } s16 CAT (ashiftrt_hi_, COUNT) (s16 n) { return n >> COUNT; }
REPEAT_16 REPEAT_16
#undef REPEAT_FN #undef REPEAT_FN
#endif /* CHAR_BIT == 8 || CHAR_BIT == 16 */
/* Define 32-bit shifts. */ /* Define 32-bit shifts. */
#if CHAR_BIT == 8 || CHAR_BIT == 16 || CHAR_BIT == 32
#define REPEAT_32 \ #if CHAR_BIT == 8
REPEAT_16 \ typedef unsigned int u32 __attribute__((mode(SI)));
REPEAT_FN (16) \ typedef signed int s32 __attribute__((mode(SI)));
REPEAT_FN (17) \ #elif CHAR_BIT == 16
REPEAT_FN (18) \ typedef unsigned int u32 __attribute__((mode(HI)));
REPEAT_FN (19) \ typedef signed int s32 __attribute__((mode(HI)));
REPEAT_FN (20) \ #elif CHAR_BIT == 32
REPEAT_FN (21) \ typedef unsigned int u32 __attribute__((mode(QI)));
REPEAT_FN (22) \ typedef signed int s32 __attribute__((mode(QI)));
REPEAT_FN (23) \ #endif
REPEAT_FN (24) \
REPEAT_FN (25) \ #define REPEAT_FN(COUNT) \
REPEAT_FN (26) \ u32 CAT (ashift_si_, COUNT) (u32 n) { return n << COUNT; }
REPEAT_FN (27) \
REPEAT_FN (28) \
REPEAT_FN (29) \
REPEAT_FN (30) \
REPEAT_FN (31)
typedef unsigned long ulong;
typedef signed long slong;
#define REPEAT_FN(COUNT) \
ulong CAT (ashift_si_, COUNT) (ulong n) { return n << COUNT; }
REPEAT_32 REPEAT_32
#undef REPEAT_FN #undef REPEAT_FN
#define REPEAT_FN(COUNT) \ #define REPEAT_FN(COUNT) \
ulong CAT (lshiftrt_si_, COUNT) (ulong n) { return n >> COUNT; } u32 CAT (lshiftrt_si_, COUNT) (u32 n) { return n >> COUNT; }
REPEAT_32 REPEAT_32
#undef REPEAT_FN #undef REPEAT_FN
#define REPEAT_FN(COUNT) \ #define REPEAT_FN(COUNT) \
slong CAT (ashiftrt_si_, COUNT) (slong n) { return n >> COUNT; } s32 CAT (ashiftrt_si_, COUNT) (s32 n) { return n >> COUNT; }
REPEAT_32 REPEAT_32
#undef REPEAT_FN #undef REPEAT_FN
#endif /* CHAR_BIT == 8 || CHAR_BIT == 16 || CHAR_BIT == 32 */
extern void abort (void); extern void abort (void);
extern void exit (int); extern void exit (int);
...@@ -109,76 +127,77 @@ int ...@@ -109,76 +127,77 @@ int
main () main ()
{ {
/* Test 8-bit shifts. */ /* Test 8-bit shifts. */
#if CHAR_BIT == 8
#define REPEAT_FN(COUNT) \ # define REPEAT_FN(COUNT) \
if (CAT (ashift_qi_, COUNT) (0xff) \ if (CAT (ashift_qi_, COUNT) (0xff) != (u8) ((u8)0xff << COUNT)) abort ();
!= (uchar) (0xff << COUNT)) abort ();
REPEAT_8; REPEAT_8;
#undef REPEAT_FN # undef REPEAT_FN
#define REPEAT_FN(COUNT) \ # define REPEAT_FN(COUNT) \
if (CAT (lshiftrt_qi_, COUNT) (0xff) \ if (CAT (lshiftrt_qi_, COUNT) (0xff) != (u8) ((u8)0xff >> COUNT)) abort ();
!= (uchar) (0xff >> COUNT)) abort ();
REPEAT_8; REPEAT_8;
#undef REPEAT_FN # undef REPEAT_FN
#define REPEAT_FN(COUNT) \ # define REPEAT_FN(COUNT) \
if (CAT (ashiftrt_qi_, COUNT) (-1) != -1) abort (); if (CAT (ashiftrt_qi_, COUNT) (-1) != -1) abort ();
REPEAT_8; REPEAT_8;
#undef REPEAT_FN # undef REPEAT_FN
#define REPEAT_FN(COUNT) \ # define REPEAT_FN(COUNT) \
if (CAT (ashiftrt_qi_, COUNT) (0) != 0) abort (); if (CAT (ashiftrt_qi_, COUNT) (0) != 0) abort ();
REPEAT_8; REPEAT_8;
#undef REPEAT_FN # undef REPEAT_FN
#endif /* CHAR_BIT == 8 */
/* Test 16-bit shifts. */ /* Test 16-bit shifts. */
#if CHAR_BIT == 8 || CHAR_BIT == 16
#define REPEAT_FN(COUNT) \ # define REPEAT_FN(COUNT) \
if (CAT (ashift_hi_, COUNT) (0xffff) \ if (CAT (ashift_hi_, COUNT) (0xffff) \
!= (ushort) (0xffff << COUNT)) abort (); != (u16) ((u16) 0xffff << COUNT)) abort ();
REPEAT_16; REPEAT_16;
#undef REPEAT_FN # undef REPEAT_FN
#define REPEAT_FN(COUNT) \ # define REPEAT_FN(COUNT) \
if (CAT (lshiftrt_hi_, COUNT) (0xffff) \ if (CAT (lshiftrt_hi_, COUNT) (0xffff) \
!= (ushort) (0xffff >> COUNT)) abort (); != (u16) ((u16) 0xffff >> COUNT)) abort ();
REPEAT_16; REPEAT_16;
#undef REPEAT_FN # undef REPEAT_FN
#define REPEAT_FN(COUNT) \ # define REPEAT_FN(COUNT) \
if (CAT (ashiftrt_hi_, COUNT) (-1) != -1) abort (); if (CAT (ashiftrt_hi_, COUNT) (-1) != -1) abort ();
REPEAT_16; REPEAT_16;
#undef REPEAT_FN # undef REPEAT_FN
#define REPEAT_FN(COUNT) \ # define REPEAT_FN(COUNT) \
if (CAT (ashiftrt_hi_, COUNT) (0) != 0) abort (); if (CAT (ashiftrt_hi_, COUNT) (0) != 0) abort ();
REPEAT_16; REPEAT_16;
#undef REPEAT_FN # undef REPEAT_FN
#endif /* CHAR_BIT == 8 || CHAR_BIT == 16 */
/* Test 32-bit shifts. */ /* Test 32-bit shifts. */
#if CHAR_BIT == 8 || CHAR_BIT == 16 || CHAR_BIT == 32
#define REPEAT_FN(COUNT) \ # define REPEAT_FN(COUNT) \
if (CAT (ashift_si_, COUNT) (0xffffffff) \ if (CAT (ashift_si_, COUNT) (0xffffffff) \
!= (ulong) (0xffffffff << COUNT)) abort (); != (u32) ((u32) 0xffffffff << COUNT)) abort ();
REPEAT_32; REPEAT_32;
#undef REPEAT_FN # undef REPEAT_FN
#define REPEAT_FN(COUNT) \ # define REPEAT_FN(COUNT) \
if (CAT (lshiftrt_si_, COUNT) (0xffffffff) \ if (CAT (lshiftrt_si_, COUNT) (0xffffffff) \
!= (ulong) (0xffffffff >> COUNT)) abort (); != (u32) ((u32) 0xffffffff >> COUNT)) abort ();
REPEAT_32; REPEAT_32;
#undef REPEAT_FN # undef REPEAT_FN
#define REPEAT_FN(COUNT) \ # define REPEAT_FN(COUNT) \
if (CAT (ashiftrt_si_, COUNT) (-1) != -1) abort (); if (CAT (ashiftrt_si_, COUNT) (-1) != -1) abort ();
REPEAT_32; REPEAT_32;
#undef REPEAT_FN # undef REPEAT_FN
#define REPEAT_FN(COUNT) \ # define REPEAT_FN(COUNT) \
if (CAT (ashiftrt_si_, COUNT) (0) != 0) abort (); if (CAT (ashiftrt_si_, COUNT) (0) != 0) abort ();
REPEAT_32; REPEAT_32;
#undef REPEAT_FN # undef REPEAT_FN
#endif /* CHAR_BIT == 8 || CHAR_BIT == 16 || CHAR_BIT == 32 */
exit (0); exit (0);
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment