From 2c74ce9d880dff540a4da3ed5a099060d98c2264 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Wed, 9 Jan 2002 17:38:17 -0800 Subject: [PATCH] 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 --- gcc/testsuite/ChangeLog | 5 + .../gcc.c-torture/execute/20020108-1.c | 227 ++++++++++-------- 2 files changed, 128 insertions(+), 104 deletions(-) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8221e54f844..1f10c6f0945 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2002-01-09 Richard Henderson + + * 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) * gcc.c-torture/compile/20020109-2.c: New test. diff --git a/gcc/testsuite/gcc.c-torture/execute/20020108-1.c b/gcc/testsuite/gcc.c-torture/execute/20020108-1.c index a6bdffc2ef7..58f96673be3 100644 --- a/gcc/testsuite/gcc.c-torture/execute/20020108-1.c +++ b/gcc/testsuite/gcc.c-torture/execute/20020108-1.c @@ -1,106 +1,124 @@ -/* This file tests shifts in QImode, HImode, and SImode. */ +/* This file tests shifts in various integral modes. */ -#define CAT(A, B) A ## B +#include -/* Define 8-bit shifts. */ +#define CAT(A, B) A ## B -#define REPEAT_8 \ -REPEAT_FN ( 0) \ -REPEAT_FN ( 1) \ -REPEAT_FN ( 2) \ -REPEAT_FN ( 3) \ -REPEAT_FN ( 4) \ -REPEAT_FN ( 5) \ -REPEAT_FN ( 6) \ +#define REPEAT_8 \ +REPEAT_FN ( 0) \ +REPEAT_FN ( 1) \ +REPEAT_FN ( 2) \ +REPEAT_FN ( 3) \ +REPEAT_FN ( 4) \ +REPEAT_FN ( 5) \ +REPEAT_FN ( 6) \ REPEAT_FN ( 7) -typedef unsigned char uchar; -typedef signed char schar; +#define REPEAT_16 \ +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) \ -uchar CAT (ashift_qi_, COUNT) (uchar n) { return n << COUNT; } +#define REPEAT_FN(COUNT) \ +u8 CAT (ashift_qi_, COUNT) (u8 n) { return n << COUNT; } REPEAT_8 #undef REPEAT_FN -#define REPEAT_FN(COUNT) \ -uchar CAT (lshiftrt_qi_, COUNT) (uchar n) { return n >> COUNT; } +#define REPEAT_FN(COUNT) \ +u8 CAT (lshiftrt_qi_, COUNT) (u8 n) { return n >> COUNT; } REPEAT_8 #undef REPEAT_FN -#define REPEAT_FN(COUNT) \ -schar CAT (ashiftrt_qi_, COUNT) (schar n) { return n >> COUNT; } +#define REPEAT_FN(COUNT) \ +s8 CAT (ashiftrt_qi_, COUNT) (s8 n) { return n >> COUNT; } REPEAT_8 #undef REPEAT_FN +#endif /* CHAR_BIT == 8 */ /* Define 16-bit shifts. */ - -#define REPEAT_16 \ -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) - -typedef unsigned short ushort; -typedef signed short sshort; - -#define REPEAT_FN(COUNT) \ -ushort CAT (ashift_hi_, COUNT) (ushort n) { return n << COUNT; } +#if CHAR_BIT == 8 || CHAR_BIT == 16 +#if CHAR_BIT == 8 +typedef unsigned int u16 __attribute__((mode(HI))); +typedef signed int s16 __attribute__((mode(HI))); +#elif CHAR_BIT == 16 +typedef unsigned int u16 __attribute__((mode(QI))); +typedef signed int s16 __attribute__((mode(QI))); +#endif + +#define REPEAT_FN(COUNT) \ +u16 CAT (ashift_hi_, COUNT) (u16 n) { return n << COUNT; } REPEAT_16 #undef REPEAT_FN -#define REPEAT_FN(COUNT) \ -ushort CAT (lshiftrt_hi_, COUNT) (ushort n) { return n >> COUNT; } +#define REPEAT_FN(COUNT) \ +u16 CAT (lshiftrt_hi_, COUNT) (u16 n) { return n >> COUNT; } REPEAT_16 #undef REPEAT_FN -#define REPEAT_FN(COUNT) \ -sshort CAT (ashiftrt_hi_, COUNT) (sshort n) { return n >> COUNT; } +#define REPEAT_FN(COUNT) \ +s16 CAT (ashiftrt_hi_, COUNT) (s16 n) { return n >> COUNT; } REPEAT_16 #undef REPEAT_FN +#endif /* CHAR_BIT == 8 || CHAR_BIT == 16 */ /* Define 32-bit shifts. */ - -#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) - -typedef unsigned long ulong; -typedef signed long slong; - -#define REPEAT_FN(COUNT) \ -ulong CAT (ashift_si_, COUNT) (ulong n) { return n << COUNT; } +#if CHAR_BIT == 8 || CHAR_BIT == 16 || CHAR_BIT == 32 +#if CHAR_BIT == 8 +typedef unsigned int u32 __attribute__((mode(SI))); +typedef signed int s32 __attribute__((mode(SI))); +#elif CHAR_BIT == 16 +typedef unsigned int u32 __attribute__((mode(HI))); +typedef signed int s32 __attribute__((mode(HI))); +#elif CHAR_BIT == 32 +typedef unsigned int u32 __attribute__((mode(QI))); +typedef signed int s32 __attribute__((mode(QI))); +#endif + +#define REPEAT_FN(COUNT) \ +u32 CAT (ashift_si_, COUNT) (u32 n) { return n << COUNT; } REPEAT_32 #undef REPEAT_FN -#define REPEAT_FN(COUNT) \ -ulong CAT (lshiftrt_si_, COUNT) (ulong n) { return n >> COUNT; } +#define REPEAT_FN(COUNT) \ +u32 CAT (lshiftrt_si_, COUNT) (u32 n) { return n >> COUNT; } REPEAT_32 #undef REPEAT_FN -#define REPEAT_FN(COUNT) \ -slong CAT (ashiftrt_si_, COUNT) (slong n) { return n >> COUNT; } +#define REPEAT_FN(COUNT) \ +s32 CAT (ashiftrt_si_, COUNT) (s32 n) { return n >> COUNT; } REPEAT_32 #undef REPEAT_FN +#endif /* CHAR_BIT == 8 || CHAR_BIT == 16 || CHAR_BIT == 32 */ extern void abort (void); extern void exit (int); @@ -109,76 +127,77 @@ int main () { /* Test 8-bit shifts. */ - -#define REPEAT_FN(COUNT) \ - if (CAT (ashift_qi_, COUNT) (0xff) \ - != (uchar) (0xff << COUNT)) abort (); +#if CHAR_BIT == 8 +# define REPEAT_FN(COUNT) \ + if (CAT (ashift_qi_, COUNT) (0xff) != (u8) ((u8)0xff << COUNT)) abort (); REPEAT_8; -#undef REPEAT_FN +# undef REPEAT_FN -#define REPEAT_FN(COUNT) \ - if (CAT (lshiftrt_qi_, COUNT) (0xff) \ - != (uchar) (0xff >> COUNT)) abort (); +# define REPEAT_FN(COUNT) \ + if (CAT (lshiftrt_qi_, COUNT) (0xff) != (u8) ((u8)0xff >> COUNT)) abort (); REPEAT_8; -#undef REPEAT_FN +# undef REPEAT_FN -#define REPEAT_FN(COUNT) \ +# define REPEAT_FN(COUNT) \ if (CAT (ashiftrt_qi_, COUNT) (-1) != -1) abort (); REPEAT_8; -#undef REPEAT_FN +# undef REPEAT_FN -#define REPEAT_FN(COUNT) \ +# define REPEAT_FN(COUNT) \ if (CAT (ashiftrt_qi_, COUNT) (0) != 0) abort (); REPEAT_8; -#undef REPEAT_FN +# undef REPEAT_FN +#endif /* CHAR_BIT == 8 */ /* Test 16-bit shifts. */ - -#define REPEAT_FN(COUNT) \ +#if CHAR_BIT == 8 || CHAR_BIT == 16 +# define REPEAT_FN(COUNT) \ if (CAT (ashift_hi_, COUNT) (0xffff) \ - != (ushort) (0xffff << COUNT)) abort (); + != (u16) ((u16) 0xffff << COUNT)) abort (); REPEAT_16; -#undef REPEAT_FN +# undef REPEAT_FN -#define REPEAT_FN(COUNT) \ +# define REPEAT_FN(COUNT) \ if (CAT (lshiftrt_hi_, COUNT) (0xffff) \ - != (ushort) (0xffff >> COUNT)) abort (); + != (u16) ((u16) 0xffff >> COUNT)) abort (); REPEAT_16; -#undef REPEAT_FN +# undef REPEAT_FN -#define REPEAT_FN(COUNT) \ +# define REPEAT_FN(COUNT) \ if (CAT (ashiftrt_hi_, COUNT) (-1) != -1) abort (); REPEAT_16; -#undef REPEAT_FN +# undef REPEAT_FN -#define REPEAT_FN(COUNT) \ +# define REPEAT_FN(COUNT) \ if (CAT (ashiftrt_hi_, COUNT) (0) != 0) abort (); REPEAT_16; -#undef REPEAT_FN +# undef REPEAT_FN +#endif /* CHAR_BIT == 8 || CHAR_BIT == 16 */ /* Test 32-bit shifts. */ - -#define REPEAT_FN(COUNT) \ +#if CHAR_BIT == 8 || CHAR_BIT == 16 || CHAR_BIT == 32 +# define REPEAT_FN(COUNT) \ if (CAT (ashift_si_, COUNT) (0xffffffff) \ - != (ulong) (0xffffffff << COUNT)) abort (); + != (u32) ((u32) 0xffffffff << COUNT)) abort (); REPEAT_32; -#undef REPEAT_FN +# undef REPEAT_FN -#define REPEAT_FN(COUNT) \ +# define REPEAT_FN(COUNT) \ if (CAT (lshiftrt_si_, COUNT) (0xffffffff) \ - != (ulong) (0xffffffff >> COUNT)) abort (); + != (u32) ((u32) 0xffffffff >> COUNT)) abort (); REPEAT_32; -#undef REPEAT_FN +# undef REPEAT_FN -#define REPEAT_FN(COUNT) \ +# define REPEAT_FN(COUNT) \ if (CAT (ashiftrt_si_, COUNT) (-1) != -1) abort (); REPEAT_32; -#undef REPEAT_FN +# undef REPEAT_FN -#define REPEAT_FN(COUNT) \ +# define REPEAT_FN(COUNT) \ if (CAT (ashiftrt_si_, COUNT) (0) != 0) abort (); REPEAT_32; -#undef REPEAT_FN +# undef REPEAT_FN +#endif /* CHAR_BIT == 8 || CHAR_BIT == 16 || CHAR_BIT == 32 */ exit (0); } -- 2.30.2