1 /* { dg-do compile }  */
2 /* { dg-options "-mh -mint32 -O2" }  */
3 /* { dg-final { scan-assembler-not "cmp" } }  */
4 
5 typedef unsigned char uchar;
6 typedef signed char schar;
7 typedef unsigned short ushort;
8 typedef unsigned long ulong;
9 
10 volatile void abort (void);
11 
12 
13 #define SUB(T)\
14 T subE##T (T x, T y) { T t = x - y ; if (t == 0) abort (); return t; } \
15 T subNE##T (T x, T y) { T t = x - y ; if (t != 0) return t; abort (); } \
16 T subGE##T (T x, T y) { T t = x - y ; if (t >= 0) abort (); return t; } \
17 T subLT##T (T x, T y) { T t = x - y ; if (t < 0) abort (); return t; }
18 
19 #define SUBC(T,N)\
20 T subEQ##N##T (T a) { T t = a - N; if (t == 0) abort (); return t; } \
21 T subNE##N##T (T a) { T t = a - N; if (t != 0) return t; abort (); } \
22 T subGE##N##T (T a) { T t = a - N; if (t >= 0) abort (); return t; } \
23 T subLT##N##T (T a) { T t = a - N; if (t < 0) abort (); return t; }
24 
25 #define SUBNC(T,N)\
26 T subEQN##N##T (T a) { T t = a - -N; if (t == 0) abort (); return t; } \
27 T subNEN##N##T (T a) { T t = a - -N; if (t != 0) return t; abort (); } \
28 T subGEN##N##T (T a) { T t = a - -N; if (t >= 0) abort (); return t; } \
29 T subLTN##N##T (T a) { T t = a - -N; if (t < 0) abort (); return t; }
30 
31 
32 SUB (schar)
33 SUB (short)
34 SUB (long)
35 SUB (uchar)
36 SUB (ushort)
37 SUB (ulong)
38 
39 
40 
41 SUBC (schar,1)
42 SUBC (schar,2)
43 SUBC (schar,3)
44 SUBC (schar,4)
45 SUBC (schar,6)
46 SUBC (schar,8)
47 SUBNC (schar,1)
48 SUBNC (schar,2)
49 SUBNC (schar,3)
50 SUBNC (schar,4)
51 SUBNC (schar,6)
52 SUBNC (schar,8)
53 
54 SUBC (uchar,1)
55 SUBC (uchar,2)
56 SUBC (uchar,3)
57 SUBC (uchar,4)
58 SUBC (uchar,6)
59 SUBC (uchar,8)
60 SUBNC (uchar,1)
61 SUBNC (uchar,2)
62 SUBNC (uchar,3)
63 SUBNC (uchar,4)
64 SUBNC (uchar,6)
65 SUBNC (uchar,8)
66 
67 SUBC (short,1)
68 SUBC (short,2)
69 SUBC (short,3)
70 SUBC (short,4)
71 SUBC (short,6)
72 SUBC (short,8)
73 SUBNC (short,1)
74 SUBNC (short,2)
75 SUBNC (short,3)
76 SUBNC (short,4)
77 SUBNC (short,6)
78 SUBNC (short,8)
79 
80 SUBC (ushort,1)
81 SUBC (ushort,2)
82 SUBC (ushort,3)
83 SUBC (ushort,4)
84 SUBC (ushort,6)
85 SUBC (ushort,8)
86 SUBNC (ushort,1)
87 SUBNC (ushort,2)
88 SUBNC (ushort,3)
89 SUBNC (ushort,4)
90 SUBNC (ushort,6)
91 SUBNC (ushort,8)
92 
93 SUBC (long,1)
94 SUBC (long,2)
95 SUBC (long,3)
96 SUBC (long,4)
97 SUBC (long,6)
98 SUBC (long,8)
99 SUBNC (long,1)
100 SUBNC (long,2)
101 SUBNC (long,3)
102 SUBNC (long,4)
103 SUBNC (long,6)
104 SUBNC (long,8)
105 
106 SUBC (ulong,1)
107 SUBC (ulong,2)
108 SUBC (ulong,3)
109 SUBC (ulong,4)
110 SUBC (ulong,6)
111 SUBC (ulong,8)
112 SUBNC (ulong,1)
113 SUBNC (ulong,2)
114 SUBNC (ulong,3)
115 SUBNC (ulong,4)
116 SUBNC (ulong,6)
117 SUBNC (ulong,8)
118 
119