blob: ebeea579f6b19a5d7303bdbc18ccca9e6c0509e8 [file] [log] [blame]
/* { 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)