This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [patch, testsuite] Fix vector-shift2.c failures on unsigned char targets


On Mon, Jan 3, 2011 at 2:46 PM, Ulrich Weigand <uweigand@de.ibm.com> wrote:
> Hello,
>
> the gcc.dg/torture/vector-shift2.c test cases are failing on targets where
> plain "char" is unsigned (at least s390, powerpc and spu). ?The test case
> seems to assume "char" is always signed ...
>
> The patch below always uses explicit "signed char" types instead where
> appropriate, which fixes the failures.
>
> Tested on spu-elf.
>
> OK for mainline?

Ok.

Thanks,
Richard.

> Bye,
> Ulrich
>
>
> ChangeLog:
>
> ? ? ? ?* gcc.dg/torture/vector-shift2.c (schar): Define.
> ? ? ? ?(main): Always use schar or uchar instead of plain "char" to avoid
> ? ? ? ?dependencies on implementation-defined char signedness.
>
> Index: gcc/testsuite/gcc.dg/torture/vector-shift2.c
> ===================================================================
> *** gcc/testsuite/gcc.dg/torture/vector-shift2.c ? ? ? ?(revision 168294)
> --- gcc/testsuite/gcc.dg/torture/vector-shift2.c ? ? ? ?(working copy)
> ***************
> *** 4,9 ****
> --- 4,10 ----
> ?__attribute__((vector_size((elcount)*sizeof(type)))) type
>
> ?#define vidx(type, vec, idx) (*((type *) &(vec) + idx))
> + #define schar signed char
> ?#define uchar unsigned char
>
> ?#define ch14 1,2,3,4
> *************** __attribute__((vector_size((elcount)*siz
> *** 12,54 ****
>
> ?int main (int argc, char *argv[]) {
> ? ? ?vector(16, uchar) vuchar ?= { ch14, ch14, ch14, ch14};
> ! ? ? vector(16, ?char) vchar0 ?= { ch1, ch1, ch1, ch1};
> ! ? ? vector(16, ?char) vchar1 ?= { chm1, chm1, chm1, chm1};
>
> ! ? ? vector(16, ?char) i1, i2, i3;
> ? ? ?vector(16, uchar) u1, u2, u3;
>
> ? ? ?i1 = vchar1<< vchar0;
>
> ! ? ? if (vidx(char, i1, 0) != ((char)-1 << (char)1))
> ? ? ? ? ?__builtin_abort ();
> ! ? ? if (vidx(char, i1, 1) != ((char)-1 << (char)1))
> ? ? ? ? ?__builtin_abort ();
> ! ? ? if (vidx(char, i1, 2) != ((char)-1 << (char)1))
> ? ? ? ? ?__builtin_abort ();
> ! ? ? if (vidx(char, i1, 3) != ((char)-1 << (char)1))
> ? ? ? ? ?__builtin_abort ();
> ? ? ?u1 = vuchar << vchar0;
>
> ! ? ? if (vidx(char, u1, 0) != ((uchar)1 ?<< (char)1))
> ? ? ? ? ?__builtin_abort ();
> ! ? ? if (vidx(char, u1, 1) != ((uchar)2 ?<< (char)1))
> ? ? ? ? ?__builtin_abort ();
> ! ? ? if (vidx(char, u1, 2) != ((uchar)3 ?<< (char)1))
> ? ? ? ? ?__builtin_abort ();
> ! ? ? if (vidx(char, u1, 3) != ((uchar)4 ?<< (char)1))
> ? ? ? ? ?__builtin_abort ();
>
>
> ? ? ?i2 = vchar1 >> vuchar;
>
> ! ? ? if (vidx(char, i2, 0) != ((char)-1 ?>> (uchar)1))
> ? ? ? ? ?__builtin_abort ();
> ! ? ? if (vidx(char, i2, 1) != ((char)-1 ?>> (uchar)2))
> ? ? ? ? ?__builtin_abort ();
> ! ? ? if (vidx(char, i2, 2) != ((char)-1 ?>> (uchar)3))
> ? ? ? ? ?__builtin_abort ();
> ! ? ? if (vidx(char, i2, 3) != ((char)-1 ?>> (uchar)4))
> ? ? ? ? ?__builtin_abort ();
>
> ? ? ?vchar1 >>= vuchar;
> --- 13,55 ----
>
> ?int main (int argc, char *argv[]) {
> ? ? ?vector(16, uchar) vuchar ?= { ch14, ch14, ch14, ch14};
> ! ? ? vector(16, schar) vchar0 ?= { ch1, ch1, ch1, ch1};
> ! ? ? vector(16, schar) vchar1 ?= { chm1, chm1, chm1, chm1};
>
> ! ? ? vector(16, schar) i1, i2, i3;
> ? ? ?vector(16, uchar) u1, u2, u3;
>
> ? ? ?i1 = vchar1<< vchar0;
>
> ! ? ? if (vidx(schar, i1, 0) != ((schar)-1 << (schar)1))
> ? ? ? ? ?__builtin_abort ();
> ! ? ? if (vidx(schar, i1, 1) != ((schar)-1 << (schar)1))
> ? ? ? ? ?__builtin_abort ();
> ! ? ? if (vidx(schar, i1, 2) != ((schar)-1 << (schar)1))
> ? ? ? ? ?__builtin_abort ();
> ! ? ? if (vidx(schar, i1, 3) != ((schar)-1 << (schar)1))
> ? ? ? ? ?__builtin_abort ();
> ? ? ?u1 = vuchar << vchar0;
>
> ! ? ? if (vidx(uchar, u1, 0) != ((uchar)1 ?<< (schar)1))
> ? ? ? ? ?__builtin_abort ();
> ! ? ? if (vidx(uchar, u1, 1) != ((uchar)2 ?<< (schar)1))
> ? ? ? ? ?__builtin_abort ();
> ! ? ? if (vidx(uchar, u1, 2) != ((uchar)3 ?<< (schar)1))
> ? ? ? ? ?__builtin_abort ();
> ! ? ? if (vidx(uchar, u1, 3) != ((uchar)4 ?<< (schar)1))
> ? ? ? ? ?__builtin_abort ();
>
>
> ? ? ?i2 = vchar1 >> vuchar;
>
> ! ? ? if (vidx(schar, i2, 0) != ((schar)-1 ?>> (uchar)1))
> ? ? ? ? ?__builtin_abort ();
> ! ? ? if (vidx(schar, i2, 1) != ((schar)-1 ?>> (uchar)2))
> ? ? ? ? ?__builtin_abort ();
> ! ? ? if (vidx(schar, i2, 2) != ((schar)-1 ?>> (uchar)3))
> ? ? ? ? ?__builtin_abort ();
> ! ? ? if (vidx(schar, i2, 3) != ((schar)-1 ?>> (uchar)4))
> ? ? ? ? ?__builtin_abort ();
>
> ? ? ?vchar1 >>= vuchar;
> --
> ?Dr. Ulrich Weigand
> ?GNU Toolchain for Linux on System z and Cell BE
> ?Ulrich.Weigand@de.ibm.com
>


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]