1 /* Verify that mips16 and nomips16 attributes work, checking all combinations
2    of calling a nomips16/mips16/default function from a nomips16/mips16/default
3    function.  */
4 /* { dg-do run } */
5 /* { dg-options "(-mips16)" } */
6 
7 #include <stdlib.h>
8 
9 #define ATTR1 __attribute__ ((nomips16))
10 #define ATTR2 __attribute__ ((mips16))
11 #define ATTR3
12 
13 double ATTR1
f1(int i,float f,double d)14 f1 (int i, float f, double d)
15 {
16   return i + f + d;
17 }
18 
19 double ATTR2
f2(int i,float f,double d)20 f2 (int i, float f, double d)
21 {
22   return i + f + d;
23 }
24 
25 double ATTR3
f3(int i,float f,double d)26 f3 (int i, float f, double d)
27 {
28   return i + f + d;
29 }
30 
31 void ATTR1
g1(int i,float f,double d)32 g1 (int i, float f, double d)
33 {
34   double r = i + f + d;
35 
36   if (f1 (i, f, d) != r)
37     abort ();
38   if (f2 (i+1, f+1, d+1) != r + 3)
39     abort ();
40   if (f3 (i+2, f+2, d+2) != r + 6)
41     abort ();
42 }
43 
44 void ATTR2
g2(int i,float f,double d)45 g2 (int i, float f, double d)
46 {
47   double r = i + f + d;
48 
49   if (f1 (i, f, d) != r)
50     abort ();
51   if (f2 (i+1, f+1, d+1) != r + 3)
52     abort ();
53   if (f3 (i+2, f+2, d+2) != r + 6)
54     abort ();
55 }
56 
57 void ATTR3
g3(int i,float f,double d)58 g3 (int i, float f, double d)
59 {
60   double r = i + f + d;
61 
62   if (f1 (i, f, d) != r)
63     abort ();
64   if (f2 (i+1, f+1, d+1) != r + 3)
65     abort ();
66   if (f3 (i+2, f+2, d+2) != r + 6)
67     abort ();
68 }
69 
70 int ATTR3
main(void)71 main (void)
72 {
73   int i = 1;
74   float f = -2.0;
75   double d = 3.0;
76 
77   g1 (i, f, d);
78   g2 (i, f, d);
79   g3 (i, f, d);
80 
81   exit (0);
82 }
83 
84