/* { dg-do compile } */ /* { dg-options "-mh -mint32 -O2" } */ /* { dg-final { scan-assembler-not "cmp" } } */ typedef unsigned char uchar; typedef signed char schar; typedef unsigned short ushort; typedef unsigned long ulong; volatile void abort (void); #define ADD(T)\ T addE##T (T x, T y) { T t = x + y ; if (t == 0) abort (); return t; } \ T addNE##T (T x, T y) { T t = x + y ; if (t != 0) return t; abort (); } \ T addGE##T (T x, T y) { T t = x + y ; if (t >= 0) abort (); return t; } \ T addLT##T (T x, T y) { T t = x + y ; if (t < 0) abort (); return t; } #define ADDC(T,N)\ T addEQ##N##T (T a) { T t = a + N; if (t == 0) abort (); return t; } \ T addNE##N##T (T a) { T t = a + N; if (t != 0) return t; abort (); } \ T addGE##N##T (T a) { T t = a + N; if (t >= 0) abort (); return t; } \ T addLT##N##T (T a) { T t = a + N; if (t < 0) abort (); return t; } #define ADDNC(T,N)\ T addEQN##N##T (T a) { T t = a + -N; if (t == 0) abort (); return t; } \ T addNEN##N##T (T a) { T t = a + -N; if (t != 0) return t; abort (); } \ T addGEN##N##T (T a) { T t = a + -N; if (t >= 0) abort (); return t; } \ T addLTN##N##T (T a) { T t = a + -N; if (t < 0) abort (); return t; } ADD (schar) ADD (short) ADD (long) ADD (uchar) ADD (ushort) ADD (ulong) ADDC (schar,1) ADDC (schar,2) ADDC (schar,3) ADDC (schar,4) ADDC (schar,6) ADDC (schar,8) ADDNC (schar,1) ADDNC (schar,2) ADDNC (schar,3) ADDNC (schar,4) ADDNC (schar,6) ADDNC (schar,8) ADDC (uchar,1) ADDC (uchar,2) ADDC (uchar,3) ADDC (uchar,4) ADDC (uchar,6) ADDC (uchar,8) ADDNC (uchar,1) ADDNC (uchar,2) ADDNC (uchar,3) ADDNC (uchar,4) ADDNC (uchar,6) ADDNC (uchar,8) ADDC (short,1) ADDC (short,2) ADDC (short,3) ADDC (short,4) ADDC (short,6) ADDC (short,8) ADDNC (short,1) ADDNC (short,2) ADDNC (short,3) ADDNC (short,4) ADDNC (short,6) ADDNC (short,8) ADDC (ushort,1) ADDC (ushort,2) ADDC (ushort,3) ADDC (ushort,4) ADDC (ushort,6) ADDC (ushort,8) ADDNC (ushort,1) ADDNC (ushort,2) ADDNC (ushort,3) ADDNC (ushort,4) ADDNC (ushort,6) ADDNC (ushort,8) ADDC (long,1) ADDC (long,2) ADDC (long,3) ADDC (long,4) ADDC (long,6) ADDC (long,8) ADDNC (long,1) ADDNC (long,2) ADDNC (long,3) ADDNC (long,4) ADDNC (long,6) ADDNC (long,8) ADDC (ulong,1) ADDC (ulong,2) ADDC (ulong,3) ADDC (ulong,4) ADDC (ulong,6) ADDC (ulong,8) ADDNC (ulong,1) ADDNC (ulong,2) ADDNC (ulong,3) ADDNC (ulong,4) ADDNC (ulong,6) ADDNC (ulong,8)