OSDN Git Service

gcc/
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.target / mips / fixed-scalar-type.c
1 /* Test scalar fixed-point instructions */
2 /* { dg-do compile { target {fixed_point} } } */
3 /* { dg-mips-options "-march=mips32r2 -mdspr2 -O2" } */
4 /* { dg-final { scan-assembler-times "\taddu\t" 10 } } */
5 /* { dg-final { scan-assembler-times "\tsubu\t" 10 } } */
6 /* { dg-final { scan-assembler "\taddu_s.qb\t" } } */
7 /* { dg-final { scan-assembler-times "\taddu_s.ph\t" 2 } } */
8 /* { dg-final { scan-assembler-times "\taddq_s.ph\t" 2 } } */
9 /* { dg-final { scan-assembler-times "\taddq_s.w\t" 2 } } */
10 /* { dg-final { scan-assembler "\tsubu_s.qb\t" } } */
11 /* { dg-final { scan-assembler-times "\tsubu_s.ph\t" 2 } } */
12 /* { dg-final { scan-assembler-times "\tsubq_s.ph\t" 2 } } */
13 /* { dg-final { scan-assembler-times "\tsubq_s.w\t" 2 } } */
14 /* { dg-final { scan-assembler-times "\tmulq_rs.ph\t" 1 } } */
15 /* { dg-final { scan-assembler-times "\tmulq_rs.w\t" 1 } } */
16
17 short _Fract non_sat_test1 (short _Fract a, short _Fract b)
18 {
19   return a + b;
20 }
21
22 _Fract non_sat_test2 (_Fract a, _Fract b)
23 {
24   return a + b;
25 }
26
27 long _Fract non_sat_test3 (long _Fract a, long _Fract b)
28 {
29   return a + b;
30 }
31
32 unsigned short _Fract non_sat_test4 (unsigned short _Fract a,
33                                      unsigned short _Fract b)
34 {
35   return a + b;
36 }
37
38 unsigned _Fract non_sat_test5 (unsigned _Fract a, unsigned _Fract b)
39 {
40   return a + b;
41 }
42
43 unsigned long _Fract non_sat_test6 (unsigned long _Fract a,
44                                     unsigned long _Fract b)
45 {
46   return a + b;
47 }
48
49 short _Accum non_sat_test7 (short _Accum a, short _Accum b)
50 {
51   return a + b;
52 }
53
54 _Accum non_sat_test8 (_Accum a, _Accum b)
55 {
56   return a + b;
57 }
58
59 unsigned short _Accum non_sat_test9 (unsigned short _Accum a,
60                                      unsigned short _Accum b)
61 {
62   return a + b;
63 }
64
65 unsigned _Accum non_sat_test10 (unsigned _Accum a, unsigned _Accum b)
66 {
67   return a + b;
68 }
69
70 short _Fract non_sat_test11 (short _Fract a, short _Fract b)
71 {
72   return a - b;
73 }
74
75 _Fract non_sat_test12 (_Fract a, _Fract b)
76 {
77   return a - b;
78 }
79
80 long _Fract non_sat_test13 (long _Fract a, long _Fract b)
81 {
82   return a - b;
83 }
84
85 unsigned short _Fract non_sat_test14 (unsigned short _Fract a,
86                                       unsigned short _Fract b)
87 {
88   return a - b;
89 }
90
91 unsigned _Fract non_sat_test15 (unsigned _Fract a, unsigned _Fract b)
92 {
93   return a - b;
94 }
95
96 unsigned long _Fract non_sat_test16 (unsigned long _Fract a,
97                                      unsigned long _Fract b)
98 {
99   return a - b;
100 }
101
102 short _Accum non_sat_test17 (short _Accum a, short _Accum b)
103 {
104   return a - b;
105 }
106
107 _Accum non_sat_test18 (_Accum a, _Accum b)
108 {
109   return a - b;
110 }
111
112 unsigned short _Accum non_sat_test19 (unsigned short _Accum a,
113                                       unsigned short _Accum b)
114 {
115   return a - b;
116 }
117
118 unsigned _Accum non_sat_test20 (unsigned _Accum a, unsigned _Accum b)
119 {
120   return a - b;
121 }
122
123 NOMIPS16 _Sat unsigned short _Fract test1 (_Sat unsigned short _Fract a,
124                                            _Sat unsigned short _Fract b)
125 {
126   return a + b;
127 }
128
129 NOMIPS16 _Sat unsigned _Fract test2 (_Sat unsigned  _Fract a,
130                                      _Sat unsigned _Fract b)
131 {
132   return a + b;
133 }
134
135 NOMIPS16 _Sat unsigned short _Accum test3 (_Sat unsigned short _Accum a,
136                                            _Sat unsigned short _Accum b)
137 {
138   return a + b;
139 }
140
141 NOMIPS16 _Sat _Fract test4 (_Sat _Fract a, _Sat _Fract b)
142 {
143   return a + b;
144 }
145
146 NOMIPS16 _Sat long _Fract test5 (_Sat long _Fract a, _Sat long _Fract b)
147 {
148   return a + b;
149 }
150
151 NOMIPS16 _Sat short _Accum test6 (_Sat short _Accum a, _Sat short _Accum b)
152 {
153   return a + b;
154 }
155
156 NOMIPS16 _Sat _Accum test7 (_Sat _Accum a, _Sat _Accum b)
157 {
158   return a + b;
159 }
160
161 NOMIPS16 _Sat unsigned short _Fract test8 (_Sat unsigned short _Fract a,
162                                            _Sat unsigned short _Fract b)
163 {
164   return a - b;
165 }
166
167 NOMIPS16 _Sat unsigned _Fract test9 (_Sat unsigned  _Fract a,
168                                      _Sat unsigned _Fract b)
169 {
170   return a - b;
171 }
172
173 NOMIPS16 _Sat unsigned short _Accum test10 (_Sat unsigned short _Accum a,
174                                             _Sat unsigned short _Accum b)
175 {
176   return a - b;
177 }
178
179 NOMIPS16 _Sat _Fract test11 (_Sat _Fract a, _Sat _Fract b)
180 {
181   return a - b;
182 }
183
184 NOMIPS16 _Sat long _Fract test12 (_Sat long _Fract a, _Sat long _Fract b)
185 {
186   return a - b;
187 }
188
189 NOMIPS16 _Sat short _Accum test13 (_Sat short _Accum a, _Sat short _Accum b)
190 {
191   return a - b;
192 }
193
194 NOMIPS16 _Sat _Accum test14 (_Sat _Accum a, _Sat _Accum b)
195 {
196   return a - b;
197 }
198
199 NOMIPS16 _Sat _Fract test15 (_Sat _Fract a, _Sat _Fract b)
200 {
201   return a * b;
202 }
203
204 NOMIPS16 _Sat long _Fract test16 (_Sat long _Fract a, _Sat long _Fract b)
205 {
206   return a * b;
207 }
208
209 NOMIPS16 _Fract test17 (_Fract a, _Fract b)
210 {
211   return a * b;
212 }
213
214 NOMIPS16 long _Fract test18 (long _Fract a, long _Fract b)
215 {
216   return a * b;
217 }