OSDN Git Service

Commit for Jiangning.
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.target / mips / dpaq_sa_l_w.c
1 /* { dg-do compile { target { fixed_point } } } */
2 /* { dg-options "-O2 -mgp32 -mdsp" } */
3 /* { dg-final { scan-assembler-times "\tdpaq_sa.l.w\t\\\$ac" 3 } } */
4
5 NOMIPS16 _Sat long long _Fract
6 f1 (_Sat long _Fract x, _Sat long _Fract y, _Sat long long _Fract z)
7 {
8   return (_Sat long long _Fract) x * y + z;
9 }
10
11 NOMIPS16 _Sat long long _Fract
12 f2 (_Sat long _Fract x, _Sat long _Fract y, _Sat long long _Fract z)
13 {
14   return z + (_Sat long long _Fract) y * x;
15 }
16
17 NOMIPS16 _Sat long long _Fract
18 f3 (_Sat long _Fract x, _Sat long _Fract y, _Sat long long _Fract z)
19 {
20   _Sat long long _Fract t = (_Sat long long _Fract) x * y;
21   int temp = 5;
22   if (temp == 5)
23     z = t + z; /* Need to put z at the end.  GCC does not swap operands to
24                   match the ssmadd pattern, because types are saturating.  */
25   return z;
26 }
27
28 long long _Fract
29 f4 (long _Fract x, long _Fract y, long long _Fract z)
30 {
31   return (long long _Fract) x * y + z;
32 }
33
34 long long _Fract
35 f5 (long _Fract x, long _Fract y, long long _Fract z)
36 {
37   return z + (long long _Fract) y * x;
38 }
39
40 long long _Fract
41 f6 (long _Fract x, long _Fract y, long long _Fract z)
42 {
43   long long _Fract t = (long long _Fract) x * y;
44   int temp = 5;
45   if (temp == 5)
46     z = t + z; /* Need to put z at the end.  GCC does not swap operands to
47                   match the ssmadd pattern, because types are saturating.  */
48   return z;
49 }