(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
mips/
inter/
mips16_stubs_1_x.c
       1  #include <stdlib.h>
       2  
       3  /* All the function pointers are declared and initialized in
       4     mips16-stubs-2.c.  */
       5  
       6  extern double the_result;
       7  
       8  extern void v0 (void);
       9  extern void v1 (float);
      10  extern void v5 (float, float);
      11  extern void v9 (float, double);
      12  extern void v2 (double);
      13  extern void v6 (double, float);
      14  extern void v10 (double, double);
      15  
      16  extern float f0 (void);
      17  extern float f1 (float);
      18  extern float f5 (float, float);
      19  extern float f9 (float, double);
      20  extern float f2 (double);
      21  extern float f6 (double, float);
      22  extern float f10 (double, double);
      23  
      24  extern double d0 (void);
      25  extern double d1 (float);
      26  extern double d5 (float, float);
      27  extern double d9 (float, double);
      28  extern double d2 (double);
      29  extern double d6 (double, float);
      30  extern double d10 (double, double);
      31  
      32  extern _Complex float cf0 (void);
      33  extern _Complex float cf1 (float);
      34  extern _Complex float cf5 (float, float);
      35  extern _Complex float cf9 (float, double);
      36  extern _Complex float cf2 (double);
      37  extern _Complex float cf6 (double, float);
      38  extern _Complex float cf10 (double, double);
      39  
      40  extern _Complex double cd0 (void);
      41  extern _Complex double cd1 (float);
      42  extern _Complex double cd5 (float, float);
      43  extern _Complex double cd9 (float, double);
      44  extern _Complex double cd2 (double);
      45  extern _Complex double cd6 (double, float);
      46  extern _Complex double cd10 (double, double);
      47  
      48  extern void (*pv0) (void);
      49  extern void (*pv1) (float);
      50  extern void (*pv5) (float, float);
      51  extern void (*pv9) (float, double);
      52  extern void (*pv2) (double);
      53  extern void (*pv6) (double, float);
      54  extern void (*pv10) (double, double);
      55  
      56  extern float (*pf0) (void);
      57  extern float (*pf1) (float);
      58  extern float (*pf5) (float, float);
      59  extern float (*pf9) (float, double);
      60  extern float (*pf2) (double);
      61  extern float (*pf6) (double, float);
      62  extern float (*pf10) (double, double);
      63  
      64  extern double (*pd0) (void);
      65  extern double (*pd1) (float);
      66  extern double (*pd5) (float, float);
      67  extern double (*pd9) (float, double);
      68  extern double (*pd2) (double);
      69  extern double (*pd6) (double, float);
      70  extern double (*pd10) (double, double);
      71  
      72  extern _Complex float (*pcf0) (void);
      73  extern _Complex float (*pcf1) (float);
      74  extern _Complex float (*pcf5) (float, float);
      75  extern _Complex float (*pcf9) (float, double);
      76  extern _Complex float (*pcf2) (double);
      77  extern _Complex float (*pcf6) (double, float);
      78  extern _Complex float (*pcf10) (double, double);
      79  
      80  extern _Complex double (*pcd0) (void);
      81  extern _Complex double (*pcd1) (float);
      82  extern _Complex double (*pcd5) (float, float);
      83  extern _Complex double (*pcd9) (float, double);
      84  extern _Complex double (*pcd2) (double);
      85  extern _Complex double (*pcd6) (double, float);
      86  extern _Complex double (*pcd10) (double, double);
      87  
      88  /* Macros for results checking.  */
      89  #define CHECK_RESULT(x, y) if ((x) != (y)) abort ()
      90  #define CHECK_VOID_RESULT(x, y)  CHECK_RESULT (((x), the_result), y)
      91  
      92  /* Call functions through pointers and check against expected results.  */
      93  void
      94  test (void)
      95  {
      96  
      97    CHECK_VOID_RESULT (v0 (), 1.0);
      98    CHECK_VOID_RESULT (v1 (1.0), 2.0);
      99    CHECK_VOID_RESULT (v5 (5.0, 6.0), 12.0);
     100    CHECK_VOID_RESULT (v9 (9.0, 10.0), 20.0);
     101    CHECK_VOID_RESULT (v2 (2.0), 3.0);
     102    CHECK_VOID_RESULT (v6 (6.0, 7.0), 14.0);
     103    CHECK_VOID_RESULT (v10 (10.0, 11.0), 22.0);
     104  
     105    CHECK_RESULT (f0 (), 1.0);
     106    CHECK_RESULT (f1 (1.0), 2.0);
     107    CHECK_RESULT (f5 (5.0, 6.0), 12.0);
     108    CHECK_RESULT (f9 (9.0, 10.0), 20.0);
     109    CHECK_RESULT (f2 (2.0), 3.0);
     110    CHECK_RESULT (f6 (6.0, 7.0), 14.0);
     111    CHECK_RESULT (f10 (10.0, 11.0), 22.0);
     112  
     113    CHECK_RESULT (d0 (), 1.0);
     114    CHECK_RESULT (d1 (1.0), 2.0);
     115    CHECK_RESULT (d5 (5.0, 6.0), 12.0);
     116    CHECK_RESULT (d9 (9.0, 10.0), 20.0);
     117    CHECK_RESULT (d2 (2.0), 3.0);
     118    CHECK_RESULT (d6 (6.0, 7.0), 14.0);
     119    CHECK_RESULT (d10 (10.0, 11.0), 22.0);
     120  
     121    CHECK_RESULT (cf0 (), 1.0 + 0.0i);
     122    CHECK_RESULT (cf1 (1.0), 2.0 + 1.0i);
     123    CHECK_RESULT (cf5 (5.0, 6.0), 12.0 + 5.0i);
     124    CHECK_RESULT (cf9 (9.0, 10.0), 20.0 + 9.0i);
     125    CHECK_RESULT (cf2 (2.0), 3.0 + 2.0i);
     126    CHECK_RESULT (cf6 (6.0, 7.0), 14.0 + 6.0i);
     127    CHECK_RESULT (cf10 (10.0, 11.0), 22.0 + 10.0i);
     128  
     129    CHECK_RESULT (cd0 (), 1.0 + 0.0i);
     130    CHECK_RESULT (cd1 (1.0), 2.0 + 1.0i);
     131    CHECK_RESULT (cd5 (5.0, 6.0), 12.0 + 5.0i);
     132    CHECK_RESULT (cd9 (9.0, 10.0), 20.0 + 9.0i);
     133    CHECK_RESULT (cd2 (2.0), 3.0 + 2.0i);
     134    CHECK_RESULT (cd6 (6.0, 7.0), 14.0 + 6.0i);
     135    CHECK_RESULT (cd10 (10.0, 11.0), 22.0 + 10.0i);
     136  
     137    CHECK_VOID_RESULT ((*pv0) (), 1.0);
     138    CHECK_VOID_RESULT ((*pv1) (1.0), 2.0);
     139    CHECK_VOID_RESULT ((*pv5) (5.0, 6.0), 12.0);
     140    CHECK_VOID_RESULT ((*pv9) (9.0, 10.0), 20.0);
     141    CHECK_VOID_RESULT ((*pv2) (2.0), 3.0);
     142    CHECK_VOID_RESULT ((*pv6) (6.0, 7.0), 14.0);
     143    CHECK_VOID_RESULT ((*pv10) (10.0, 11.0), 22.0);
     144  
     145    CHECK_RESULT ((*pf0) (), 1.0);
     146    CHECK_RESULT ((*pf1) (1.0), 2.0);
     147    CHECK_RESULT ((*pf5) (5.0, 6.0), 12.0);
     148    CHECK_RESULT ((*pf9) (9.0, 10.0), 20.0);
     149    CHECK_RESULT ((*pf2) (2.0), 3.0);
     150    CHECK_RESULT ((*pf6) (6.0, 7.0), 14.0);
     151    CHECK_RESULT ((*pf10) (10.0, 11.0), 22.0);
     152  
     153    CHECK_RESULT ((*pd0) (), 1.0);
     154    CHECK_RESULT ((*pd1) (1.0), 2.0);
     155    CHECK_RESULT ((*pd5) (5.0, 6.0), 12.0);
     156    CHECK_RESULT ((*pd9) (9.0, 10.0), 20.0);
     157    CHECK_RESULT ((*pd2) (2.0), 3.0);
     158    CHECK_RESULT ((*pd6) (6.0, 7.0), 14.0);
     159    CHECK_RESULT ((*pd10) (10.0, 11.0), 22.0);
     160  
     161    CHECK_RESULT ((*pcf0) (), 1.0 + 0.0i);
     162    CHECK_RESULT ((*pcf1) (1.0), 2.0 + 1.0i);
     163    CHECK_RESULT ((*pcf5) (5.0, 6.0), 12.0 + 5.0i);
     164    CHECK_RESULT ((*pcf9) (9.0, 10.0), 20.0 + 9.0i);
     165    CHECK_RESULT ((*pcf2) (2.0), 3.0 + 2.0i);
     166    CHECK_RESULT ((*pcf6) (6.0, 7.0), 14.0 + 6.0i);
     167    CHECK_RESULT ((*pcf10) (10.0, 11.0), 22.0 + 10.0i);
     168  
     169    CHECK_RESULT ((*pcd0) (), 1.0 + 0.0i);
     170    CHECK_RESULT ((*pcd1) (1.0), 2.0 + 1.0i);
     171    CHECK_RESULT ((*pcd5) (5.0, 6.0), 12.0 + 5.0i);
     172    CHECK_RESULT ((*pcd9) (9.0, 10.0), 20.0 + 9.0i);
     173    CHECK_RESULT ((*pcd2) (2.0), 3.0 + 2.0i);
     174    CHECK_RESULT ((*pcd6) (6.0, 7.0), 14.0 + 6.0i);
     175    CHECK_RESULT ((*pcd10) (10.0, 11.0), 22.0 + 10.0i);
     176  }