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 ADD(T)\
14 T addE##T (T x, T y) { T t = x + y ; if (t == 0) abort (); return t; } \
15 T addNE##T (T x, T y) { T t = x + y ; if (t != 0) return t; abort (); } \
16 T addGE##T (T x, T y) { T t = x + y ; if (t >= 0) abort (); return t; } \
17 T addLT##T (T x, T y) { T t = x + y ; if (t < 0) abort (); return t; }
18
19 #define ADDC(T,N)\
20 T addEQ##N##T (T a) { T t = a + N; if (t == 0) abort (); return t; } \
21 T addNE##N##T (T a) { T t = a + N; if (t != 0) return t; abort (); } \
22 T addGE##N##T (T a) { T t = a + N; if (t >= 0) abort (); return t; } \
23 T addLT##N##T (T a) { T t = a + N; if (t < 0) abort (); return t; }
24
25 #define ADDNC(T,N)\
26 T addEQN##N##T (T a) { T t = a + -N; if (t == 0) abort (); return t; } \
27 T addNEN##N##T (T a) { T t = a + -N; if (t != 0) return t; abort (); } \
28 T addGEN##N##T (T a) { T t = a + -N; if (t >= 0) abort (); return t; } \
29 T addLTN##N##T (T a) { T t = a + -N; if (t < 0) abort (); return t; }
30
31
32 ADD (schar)
33 ADD (short)
34 ADD (long)
35 ADD (uchar)
36 ADD (ushort)
37 ADD (ulong)
38
39
40
41 ADDC (schar,1)
42 ADDC (schar,2)
43 ADDC (schar,3)
44 ADDC (schar,4)
45 ADDC (schar,6)
46 ADDC (schar,8)
47 ADDNC (schar,1)
48 ADDNC (schar,2)
49 ADDNC (schar,3)
50 ADDNC (schar,4)
51 ADDNC (schar,6)
52 ADDNC (schar,8)
53
54 ADDC (uchar,1)
55 ADDC (uchar,2)
56 ADDC (uchar,3)
57 ADDC (uchar,4)
58 ADDC (uchar,6)
59 ADDC (uchar,8)
60 ADDNC (uchar,1)
61 ADDNC (uchar,2)
62 ADDNC (uchar,3)
63 ADDNC (uchar,4)
64 ADDNC (uchar,6)
65 ADDNC (uchar,8)
66
67 ADDC (short,1)
68 ADDC (short,2)
69 ADDC (short,3)
70 ADDC (short,4)
71 ADDC (short,6)
72 ADDC (short,8)
73 ADDNC (short,1)
74 ADDNC (short,2)
75 ADDNC (short,3)
76 ADDNC (short,4)
77 ADDNC (short,6)
78 ADDNC (short,8)
79
80 ADDC (ushort,1)
81 ADDC (ushort,2)
82 ADDC (ushort,3)
83 ADDC (ushort,4)
84 ADDC (ushort,6)
85 ADDC (ushort,8)
86 ADDNC (ushort,1)
87 ADDNC (ushort,2)
88 ADDNC (ushort,3)
89 ADDNC (ushort,4)
90 ADDNC (ushort,6)
91 ADDNC (ushort,8)
92
93 ADDC (long,1)
94 ADDC (long,2)
95 ADDC (long,3)
96 ADDC (long,4)
97 ADDC (long,6)
98 ADDC (long,8)
99 ADDNC (long,1)
100 ADDNC (long,2)
101 ADDNC (long,3)
102 ADDNC (long,4)
103 ADDNC (long,6)
104 ADDNC (long,8)
105
106 ADDC (ulong,1)
107 ADDC (ulong,2)
108 ADDC (ulong,3)
109 ADDC (ulong,4)
110 ADDC (ulong,6)
111 ADDC (ulong,8)
112 ADDNC (ulong,1)
113 ADDNC (ulong,2)
114 ADDNC (ulong,3)
115 ADDNC (ulong,4)
116 ADDNC (ulong,6)
117 ADDNC (ulong,8)
118