diff options
author | upstream source tree <ports@midipix.org> | 2015-03-15 20:14:05 -0400 |
---|---|---|
committer | upstream source tree <ports@midipix.org> | 2015-03-15 20:14:05 -0400 |
commit | 554fd8c5195424bdbcabf5de30fdc183aba391bd (patch) | |
tree | 976dc5ab7fddf506dadce60ae936f43f58787092 /gcc/testsuite/gcc.target/i386/pr30315.c | |
download | cbb-gcc-4.6.4-upstream.tar.bz2 cbb-gcc-4.6.4-upstream.tar.xz |
obtained gcc-4.6.4.tar.bz2 from upstream website;upstream
verified gcc-4.6.4.tar.bz2.sig;
imported gcc-4.6.4 source tree from verified upstream tarball.
downloading a git-generated archive based on the 'upstream' tag
should provide you with a source tree that is binary identical
to the one extracted from the above tarball.
if you have obtained the source via the command 'git clone',
however, do note that line-endings of files in your working
directory might differ from line-endings of the respective
files in the upstream repository.
Diffstat (limited to 'gcc/testsuite/gcc.target/i386/pr30315.c')
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr30315.c | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.target/i386/pr30315.c b/gcc/testsuite/gcc.target/i386/pr30315.c new file mode 100644 index 000000000..998d5071e --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr30315.c @@ -0,0 +1,97 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ +/* { dg-final { scan-assembler-times "cmp" 4 } } */ + +extern void abort (void); +int c; + +#define PLUSCC1(T, t, C) \ +T pluscc##t##C (T a, T b) \ +{ \ + T sum = a + b; \ + if (sum < C) \ + abort (); \ + return sum; \ +} +#define PLUSCC(T, t) PLUSCC1(T, t, a) PLUSCC1(T, t, b) + +#define INCCC1(T, t, C) \ +T inccc##t##C (T a, T b) \ +{ \ + T sum = a + b; \ + if (sum < C) \ + c ++; \ + return sum; \ +} +#define INCCC(T, t) INCCC1(T, t, a) INCCC1(T, t, b) + +#define PLUSCCONLY1(T, t, C) \ +void pluscconly##t##C (T a, T b) \ +{ \ + T sum = a + b; \ + if (sum < C) \ + abort (); \ +} +#define PLUSCCONLY(T, t) PLUSCCONLY1(T, t, a) PLUSCCONLY1(T, t, b) + +#define MINUSCC(T, t) \ +T minuscc##t (T a, T b) \ +{ \ + T difference = a - b; \ + if (difference > a) \ + abort (); \ + return difference; \ +} + +#define DECCC(T, t) \ +T deccc##t (T a, T b) \ +{ \ + T difference = a - b; \ + if (difference > a) \ + c --; \ + return difference; \ +} + +#define MINUSCCONLY(T, t) \ +void minuscconly##t (T a, T b) \ +{ \ + T difference = a - b; \ + if (difference > a) \ + abort (); \ +} + +#define TEST(T, t) \ + PLUSCC(T, t) \ + PLUSCCONLY(T, t) \ + INCCC(T, t) \ + MINUSCC(T, t) \ + MINUSCCONLY(T, t) \ + DECCC(T, t) + +TEST (unsigned long, l) +TEST (unsigned int, i) +TEST (unsigned short, s) +TEST (unsigned char, c) + +#define PLUSCCZEXT(C) \ +unsigned long pluscczext##C (unsigned int a, unsigned int b) \ +{ \ + unsigned int sum = a + b; \ + if (sum < C) \ + abort (); \ + return sum; \ +} + +PLUSCCZEXT(a) +PLUSCCZEXT(b) + +#define MINUSCCZEXT \ +unsigned long minuscczext (unsigned int a, unsigned int b) \ +{ \ + unsigned int difference = a - b; \ + if (difference > a) \ + abort (); \ + return difference; \ +} + +MINUSCCZEXT |