/* { 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 SUB(T)\ T subE##T (T x, T y) { T t = x - y ; if (t == 0) abort (); return t; } \ T subNE##T (T x, T y) { T t = x - y ; if (t != 0) return t; abort (); } \ T subGE##T (T x, T y) { T t = x - y ; if (t >= 0) abort (); return t; } \ T subLT##T (T x, T y) { T t = x - y ; if (t < 0) abort (); return t; } #define SUBC(T,N)\ T subEQ##N##T (T a) { T t = a - N; if (t == 0) abort (); return t; } \ T subNE##N##T (T a) { T t = a - N; if (t != 0) return t; abort (); } \ T subGE##N##T (T a) { T t = a - N; if (t >= 0) abort (); return t; } \ T subLT##N##T (T a) { T t = a - N; if (t < 0) abort (); return t; } #define SUBNC(T,N)\ T subEQN##N##T (T a) { T t = a - -N; if (t == 0) abort (); return t; } \ T subNEN##N##T (T a) { T t = a - -N; if (t != 0) return t; abort (); } \ T subGEN##N##T (T a) { T t = a - -N; if (t >= 0) abort (); return t; } \ T subLTN##N##T (T a) { T t = a - -N; if (t < 0) abort (); return t; } SUB (schar) SUB (short) SUB (long) SUB (uchar) SUB (ushort) SUB (ulong) SUBC (schar,1) SUBC (schar,2) SUBC (schar,3) SUBC (schar,4) SUBC (schar,6) SUBC (schar,8) SUBNC (schar,1) SUBNC (schar,2) SUBNC (schar,3) SUBNC (schar,4) SUBNC (schar,6) SUBNC (schar,8) SUBC (uchar,1) SUBC (uchar,2) SUBC (uchar,3) SUBC (uchar,4) SUBC (uchar,6) SUBC (uchar,8) SUBNC (uchar,1) SUBNC (uchar,2) SUBNC (uchar,3) SUBNC (uchar,4) SUBNC (uchar,6) SUBNC (uchar,8) SUBC (short,1) SUBC (short,2) SUBC (short,3) SUBC (short,4) SUBC (short,6) SUBC (short,8) SUBNC (short,1) SUBNC (short,2) SUBNC (short,3) SUBNC (short,4) SUBNC (short,6) SUBNC (short,8) SUBC (ushort,1) SUBC (ushort,2) SUBC (ushort,3) SUBC (ushort,4) SUBC (ushort,6) SUBC (ushort,8) SUBNC (ushort,1) SUBNC (ushort,2) SUBNC (ushort,3) SUBNC (ushort,4) SUBNC (ushort,6) SUBNC (ushort,8) SUBC (long,1) SUBC (long,2) SUBC (long,3) SUBC (long,4) SUBC (long,6) SUBC (long,8) SUBNC (long,1) SUBNC (long,2) SUBNC (long,3) SUBNC (long,4) SUBNC (long,6) SUBNC (long,8) SUBC (ulong,1) SUBC (ulong,2) SUBC (ulong,3) SUBC (ulong,4) SUBC (ulong,6) SUBC (ulong,8) SUBNC (ulong,1) SUBNC (ulong,2) SUBNC (ulong,3) SUBNC (ulong,4) SUBNC (ulong,6) SUBNC (ulong,8)