(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
x86_64/
abi/
test_passing_floats.c
       1  /* This is an autogenerated file. Do not edit.  */
       2  
       3  #include "defines.h"
       4  #include "macros.h"
       5  #include "args.h"
       6  
       7  struct IntegerRegisters iregs;
       8  struct FloatRegisters fregs;
       9  unsigned int num_iregs, num_fregs;
      10  
      11  /* This struct holds values for argument checking.  */
      12  struct 
      13  {
      14    float f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23;
      15  } values_float;
      16  
      17  struct 
      18  {
      19    double f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23;
      20  } values_double;
      21  
      22  struct 
      23  {
      24    ldouble f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23;
      25  } values_ldouble;
      26  
      27  void
      28  fun_check_float_passing_float8_values (float f0 ATTRIBUTE_UNUSED, float f1 ATTRIBUTE_UNUSED, float f2 ATTRIBUTE_UNUSED, float f3 ATTRIBUTE_UNUSED, float f4 ATTRIBUTE_UNUSED, float f5 ATTRIBUTE_UNUSED, float f6 ATTRIBUTE_UNUSED, float f7 ATTRIBUTE_UNUSED)
      29  {
      30    /* Check argument values.  */
      31    assert (values_float.f0 == f0);
      32    assert (values_float.f1 == f1);
      33    assert (values_float.f2 == f2);
      34    assert (values_float.f3 == f3);
      35    assert (values_float.f4 == f4);
      36    assert (values_float.f5 == f5);
      37    assert (values_float.f6 == f6);
      38    assert (values_float.f7 == f7);
      39  
      40  }
      41  
      42  void
      43  fun_check_float_passing_float8_regs (float f0 ATTRIBUTE_UNUSED, float f1 ATTRIBUTE_UNUSED, float f2 ATTRIBUTE_UNUSED, float f3 ATTRIBUTE_UNUSED, float f4 ATTRIBUTE_UNUSED, float f5 ATTRIBUTE_UNUSED, float f6 ATTRIBUTE_UNUSED, float f7 ATTRIBUTE_UNUSED)
      44  {
      45    /* Check register contents.  */
      46    check_float_arguments;
      47  }
      48  
      49  void
      50  fun_check_float_passing_float16_values (float f0 ATTRIBUTE_UNUSED, float f1 ATTRIBUTE_UNUSED, float f2 ATTRIBUTE_UNUSED, float f3 ATTRIBUTE_UNUSED, float f4 ATTRIBUTE_UNUSED, float f5 ATTRIBUTE_UNUSED, float f6 ATTRIBUTE_UNUSED, float f7 ATTRIBUTE_UNUSED, float f8 ATTRIBUTE_UNUSED, float f9 ATTRIBUTE_UNUSED, float f10 ATTRIBUTE_UNUSED, float f11 ATTRIBUTE_UNUSED, float f12 ATTRIBUTE_UNUSED, float f13 ATTRIBUTE_UNUSED, float f14 ATTRIBUTE_UNUSED, float f15 ATTRIBUTE_UNUSED)
      51  {
      52    /* Check argument values.  */
      53    assert (values_float.f0 == f0);
      54    assert (values_float.f1 == f1);
      55    assert (values_float.f2 == f2);
      56    assert (values_float.f3 == f3);
      57    assert (values_float.f4 == f4);
      58    assert (values_float.f5 == f5);
      59    assert (values_float.f6 == f6);
      60    assert (values_float.f7 == f7);
      61    assert (values_float.f8 == f8);
      62    assert (values_float.f9 == f9);
      63    assert (values_float.f10 == f10);
      64    assert (values_float.f11 == f11);
      65    assert (values_float.f12 == f12);
      66    assert (values_float.f13 == f13);
      67    assert (values_float.f14 == f14);
      68    assert (values_float.f15 == f15);
      69  
      70  }
      71  
      72  void
      73  fun_check_float_passing_float16_regs (float f0 ATTRIBUTE_UNUSED, float f1 ATTRIBUTE_UNUSED, float f2 ATTRIBUTE_UNUSED, float f3 ATTRIBUTE_UNUSED, float f4 ATTRIBUTE_UNUSED, float f5 ATTRIBUTE_UNUSED, float f6 ATTRIBUTE_UNUSED, float f7 ATTRIBUTE_UNUSED, float f8 ATTRIBUTE_UNUSED, float f9 ATTRIBUTE_UNUSED, float f10 ATTRIBUTE_UNUSED, float f11 ATTRIBUTE_UNUSED, float f12 ATTRIBUTE_UNUSED, float f13 ATTRIBUTE_UNUSED, float f14 ATTRIBUTE_UNUSED, float f15 ATTRIBUTE_UNUSED)
      74  {
      75    /* Check register contents.  */
      76    check_float_arguments;
      77  }
      78  
      79  void
      80  fun_check_float_passing_float20_values (float f0 ATTRIBUTE_UNUSED, float f1 ATTRIBUTE_UNUSED, float f2 ATTRIBUTE_UNUSED, float f3 ATTRIBUTE_UNUSED, float f4 ATTRIBUTE_UNUSED, float f5 ATTRIBUTE_UNUSED, float f6 ATTRIBUTE_UNUSED, float f7 ATTRIBUTE_UNUSED, float f8 ATTRIBUTE_UNUSED, float f9 ATTRIBUTE_UNUSED, float f10 ATTRIBUTE_UNUSED, float f11 ATTRIBUTE_UNUSED, float f12 ATTRIBUTE_UNUSED, float f13 ATTRIBUTE_UNUSED, float f14 ATTRIBUTE_UNUSED, float f15 ATTRIBUTE_UNUSED, float f16 ATTRIBUTE_UNUSED, float f17 ATTRIBUTE_UNUSED, float f18 ATTRIBUTE_UNUSED, float f19 ATTRIBUTE_UNUSED)
      81  {
      82    /* Check argument values.  */
      83    assert (values_float.f0 == f0);
      84    assert (values_float.f1 == f1);
      85    assert (values_float.f2 == f2);
      86    assert (values_float.f3 == f3);
      87    assert (values_float.f4 == f4);
      88    assert (values_float.f5 == f5);
      89    assert (values_float.f6 == f6);
      90    assert (values_float.f7 == f7);
      91    assert (values_float.f8 == f8);
      92    assert (values_float.f9 == f9);
      93    assert (values_float.f10 == f10);
      94    assert (values_float.f11 == f11);
      95    assert (values_float.f12 == f12);
      96    assert (values_float.f13 == f13);
      97    assert (values_float.f14 == f14);
      98    assert (values_float.f15 == f15);
      99    assert (values_float.f16 == f16);
     100    assert (values_float.f17 == f17);
     101    assert (values_float.f18 == f18);
     102    assert (values_float.f19 == f19);
     103  
     104  }
     105  
     106  void
     107  fun_check_float_passing_float20_regs (float f0 ATTRIBUTE_UNUSED, float f1 ATTRIBUTE_UNUSED, float f2 ATTRIBUTE_UNUSED, float f3 ATTRIBUTE_UNUSED, float f4 ATTRIBUTE_UNUSED, float f5 ATTRIBUTE_UNUSED, float f6 ATTRIBUTE_UNUSED, float f7 ATTRIBUTE_UNUSED, float f8 ATTRIBUTE_UNUSED, float f9 ATTRIBUTE_UNUSED, float f10 ATTRIBUTE_UNUSED, float f11 ATTRIBUTE_UNUSED, float f12 ATTRIBUTE_UNUSED, float f13 ATTRIBUTE_UNUSED, float f14 ATTRIBUTE_UNUSED, float f15 ATTRIBUTE_UNUSED, float f16 ATTRIBUTE_UNUSED, float f17 ATTRIBUTE_UNUSED, float f18 ATTRIBUTE_UNUSED, float f19 ATTRIBUTE_UNUSED)
     108  {
     109    /* Check register contents.  */
     110    check_float_arguments;
     111  }
     112  
     113  void
     114  fun_check_float_passing_double8_values (double f0 ATTRIBUTE_UNUSED, double f1 ATTRIBUTE_UNUSED, double f2 ATTRIBUTE_UNUSED, double f3 ATTRIBUTE_UNUSED, double f4 ATTRIBUTE_UNUSED, double f5 ATTRIBUTE_UNUSED, double f6 ATTRIBUTE_UNUSED, double f7 ATTRIBUTE_UNUSED)
     115  {
     116    /* Check argument values.  */
     117    assert (values_double.f0 == f0);
     118    assert (values_double.f1 == f1);
     119    assert (values_double.f2 == f2);
     120    assert (values_double.f3 == f3);
     121    assert (values_double.f4 == f4);
     122    assert (values_double.f5 == f5);
     123    assert (values_double.f6 == f6);
     124    assert (values_double.f7 == f7);
     125  
     126  }
     127  
     128  void
     129  fun_check_float_passing_double8_regs (double f0 ATTRIBUTE_UNUSED, double f1 ATTRIBUTE_UNUSED, double f2 ATTRIBUTE_UNUSED, double f3 ATTRIBUTE_UNUSED, double f4 ATTRIBUTE_UNUSED, double f5 ATTRIBUTE_UNUSED, double f6 ATTRIBUTE_UNUSED, double f7 ATTRIBUTE_UNUSED)
     130  {
     131    /* Check register contents.  */
     132    check_double_arguments;
     133  }
     134  
     135  void
     136  fun_check_float_passing_double16_values (double f0 ATTRIBUTE_UNUSED, double f1 ATTRIBUTE_UNUSED, double f2 ATTRIBUTE_UNUSED, double f3 ATTRIBUTE_UNUSED, double f4 ATTRIBUTE_UNUSED, double f5 ATTRIBUTE_UNUSED, double f6 ATTRIBUTE_UNUSED, double f7 ATTRIBUTE_UNUSED, double f8 ATTRIBUTE_UNUSED, double f9 ATTRIBUTE_UNUSED, double f10 ATTRIBUTE_UNUSED, double f11 ATTRIBUTE_UNUSED, double f12 ATTRIBUTE_UNUSED, double f13 ATTRIBUTE_UNUSED, double f14 ATTRIBUTE_UNUSED, double f15 ATTRIBUTE_UNUSED)
     137  {
     138    /* Check argument values.  */
     139    assert (values_double.f0 == f0);
     140    assert (values_double.f1 == f1);
     141    assert (values_double.f2 == f2);
     142    assert (values_double.f3 == f3);
     143    assert (values_double.f4 == f4);
     144    assert (values_double.f5 == f5);
     145    assert (values_double.f6 == f6);
     146    assert (values_double.f7 == f7);
     147    assert (values_double.f8 == f8);
     148    assert (values_double.f9 == f9);
     149    assert (values_double.f10 == f10);
     150    assert (values_double.f11 == f11);
     151    assert (values_double.f12 == f12);
     152    assert (values_double.f13 == f13);
     153    assert (values_double.f14 == f14);
     154    assert (values_double.f15 == f15);
     155  
     156  }
     157  
     158  void
     159  fun_check_float_passing_double16_regs (double f0 ATTRIBUTE_UNUSED, double f1 ATTRIBUTE_UNUSED, double f2 ATTRIBUTE_UNUSED, double f3 ATTRIBUTE_UNUSED, double f4 ATTRIBUTE_UNUSED, double f5 ATTRIBUTE_UNUSED, double f6 ATTRIBUTE_UNUSED, double f7 ATTRIBUTE_UNUSED, double f8 ATTRIBUTE_UNUSED, double f9 ATTRIBUTE_UNUSED, double f10 ATTRIBUTE_UNUSED, double f11 ATTRIBUTE_UNUSED, double f12 ATTRIBUTE_UNUSED, double f13 ATTRIBUTE_UNUSED, double f14 ATTRIBUTE_UNUSED, double f15 ATTRIBUTE_UNUSED)
     160  {
     161    /* Check register contents.  */
     162    check_double_arguments;
     163  }
     164  
     165  void
     166  fun_check_float_passing_double20_values (double f0 ATTRIBUTE_UNUSED, double f1 ATTRIBUTE_UNUSED, double f2 ATTRIBUTE_UNUSED, double f3 ATTRIBUTE_UNUSED, double f4 ATTRIBUTE_UNUSED, double f5 ATTRIBUTE_UNUSED, double f6 ATTRIBUTE_UNUSED, double f7 ATTRIBUTE_UNUSED, double f8 ATTRIBUTE_UNUSED, double f9 ATTRIBUTE_UNUSED, double f10 ATTRIBUTE_UNUSED, double f11 ATTRIBUTE_UNUSED, double f12 ATTRIBUTE_UNUSED, double f13 ATTRIBUTE_UNUSED, double f14 ATTRIBUTE_UNUSED, double f15 ATTRIBUTE_UNUSED, double f16 ATTRIBUTE_UNUSED, double f17 ATTRIBUTE_UNUSED, double f18 ATTRIBUTE_UNUSED, double f19 ATTRIBUTE_UNUSED)
     167  {
     168    /* Check argument values.  */
     169    assert (values_double.f0 == f0);
     170    assert (values_double.f1 == f1);
     171    assert (values_double.f2 == f2);
     172    assert (values_double.f3 == f3);
     173    assert (values_double.f4 == f4);
     174    assert (values_double.f5 == f5);
     175    assert (values_double.f6 == f6);
     176    assert (values_double.f7 == f7);
     177    assert (values_double.f8 == f8);
     178    assert (values_double.f9 == f9);
     179    assert (values_double.f10 == f10);
     180    assert (values_double.f11 == f11);
     181    assert (values_double.f12 == f12);
     182    assert (values_double.f13 == f13);
     183    assert (values_double.f14 == f14);
     184    assert (values_double.f15 == f15);
     185    assert (values_double.f16 == f16);
     186    assert (values_double.f17 == f17);
     187    assert (values_double.f18 == f18);
     188    assert (values_double.f19 == f19);
     189  
     190  }
     191  
     192  void
     193  fun_check_float_passing_double20_regs (double f0 ATTRIBUTE_UNUSED, double f1 ATTRIBUTE_UNUSED, double f2 ATTRIBUTE_UNUSED, double f3 ATTRIBUTE_UNUSED, double f4 ATTRIBUTE_UNUSED, double f5 ATTRIBUTE_UNUSED, double f6 ATTRIBUTE_UNUSED, double f7 ATTRIBUTE_UNUSED, double f8 ATTRIBUTE_UNUSED, double f9 ATTRIBUTE_UNUSED, double f10 ATTRIBUTE_UNUSED, double f11 ATTRIBUTE_UNUSED, double f12 ATTRIBUTE_UNUSED, double f13 ATTRIBUTE_UNUSED, double f14 ATTRIBUTE_UNUSED, double f15 ATTRIBUTE_UNUSED, double f16 ATTRIBUTE_UNUSED, double f17 ATTRIBUTE_UNUSED, double f18 ATTRIBUTE_UNUSED, double f19 ATTRIBUTE_UNUSED)
     194  {
     195    /* Check register contents.  */
     196    check_double_arguments;
     197  }
     198  
     199  void
     200  fun_check_x87_passing_ldouble8_values (ldouble f0 ATTRIBUTE_UNUSED, ldouble f1 ATTRIBUTE_UNUSED, ldouble f2 ATTRIBUTE_UNUSED, ldouble f3 ATTRIBUTE_UNUSED, ldouble f4 ATTRIBUTE_UNUSED, ldouble f5 ATTRIBUTE_UNUSED, ldouble f6 ATTRIBUTE_UNUSED, ldouble f7 ATTRIBUTE_UNUSED)
     201  {
     202    /* Check argument values.  */
     203    assert (values_ldouble.f0 == f0);
     204    assert (values_ldouble.f1 == f1);
     205    assert (values_ldouble.f2 == f2);
     206    assert (values_ldouble.f3 == f3);
     207    assert (values_ldouble.f4 == f4);
     208    assert (values_ldouble.f5 == f5);
     209    assert (values_ldouble.f6 == f6);
     210    assert (values_ldouble.f7 == f7);
     211  
     212  }
     213  
     214  void
     215  fun_check_x87_passing_ldouble8_regs (ldouble f0 ATTRIBUTE_UNUSED, ldouble f1 ATTRIBUTE_UNUSED, ldouble f2 ATTRIBUTE_UNUSED, ldouble f3 ATTRIBUTE_UNUSED, ldouble f4 ATTRIBUTE_UNUSED, ldouble f5 ATTRIBUTE_UNUSED, ldouble f6 ATTRIBUTE_UNUSED, ldouble f7 ATTRIBUTE_UNUSED)
     216  {
     217    /* Check register contents.  */
     218    check_ldouble_arguments;
     219  }
     220  
     221  void
     222  fun_check_x87_passing_ldouble16_values (ldouble f0 ATTRIBUTE_UNUSED, ldouble f1 ATTRIBUTE_UNUSED, ldouble f2 ATTRIBUTE_UNUSED, ldouble f3 ATTRIBUTE_UNUSED, ldouble f4 ATTRIBUTE_UNUSED, ldouble f5 ATTRIBUTE_UNUSED, ldouble f6 ATTRIBUTE_UNUSED, ldouble f7 ATTRIBUTE_UNUSED, ldouble f8 ATTRIBUTE_UNUSED, ldouble f9 ATTRIBUTE_UNUSED, ldouble f10 ATTRIBUTE_UNUSED, ldouble f11 ATTRIBUTE_UNUSED, ldouble f12 ATTRIBUTE_UNUSED, ldouble f13 ATTRIBUTE_UNUSED, ldouble f14 ATTRIBUTE_UNUSED, ldouble f15 ATTRIBUTE_UNUSED)
     223  {
     224    /* Check argument values.  */
     225    assert (values_ldouble.f0 == f0);
     226    assert (values_ldouble.f1 == f1);
     227    assert (values_ldouble.f2 == f2);
     228    assert (values_ldouble.f3 == f3);
     229    assert (values_ldouble.f4 == f4);
     230    assert (values_ldouble.f5 == f5);
     231    assert (values_ldouble.f6 == f6);
     232    assert (values_ldouble.f7 == f7);
     233    assert (values_ldouble.f8 == f8);
     234    assert (values_ldouble.f9 == f9);
     235    assert (values_ldouble.f10 == f10);
     236    assert (values_ldouble.f11 == f11);
     237    assert (values_ldouble.f12 == f12);
     238    assert (values_ldouble.f13 == f13);
     239    assert (values_ldouble.f14 == f14);
     240    assert (values_ldouble.f15 == f15);
     241  
     242  }
     243  
     244  void
     245  fun_check_x87_passing_ldouble16_regs (ldouble f0 ATTRIBUTE_UNUSED, ldouble f1 ATTRIBUTE_UNUSED, ldouble f2 ATTRIBUTE_UNUSED, ldouble f3 ATTRIBUTE_UNUSED, ldouble f4 ATTRIBUTE_UNUSED, ldouble f5 ATTRIBUTE_UNUSED, ldouble f6 ATTRIBUTE_UNUSED, ldouble f7 ATTRIBUTE_UNUSED, ldouble f8 ATTRIBUTE_UNUSED, ldouble f9 ATTRIBUTE_UNUSED, ldouble f10 ATTRIBUTE_UNUSED, ldouble f11 ATTRIBUTE_UNUSED, ldouble f12 ATTRIBUTE_UNUSED, ldouble f13 ATTRIBUTE_UNUSED, ldouble f14 ATTRIBUTE_UNUSED, ldouble f15 ATTRIBUTE_UNUSED)
     246  {
     247    /* Check register contents.  */
     248    check_ldouble_arguments;
     249  }
     250  
     251  void
     252  fun_check_x87_passing_ldouble20_values (ldouble f0 ATTRIBUTE_UNUSED, ldouble f1 ATTRIBUTE_UNUSED, ldouble f2 ATTRIBUTE_UNUSED, ldouble f3 ATTRIBUTE_UNUSED, ldouble f4 ATTRIBUTE_UNUSED, ldouble f5 ATTRIBUTE_UNUSED, ldouble f6 ATTRIBUTE_UNUSED, ldouble f7 ATTRIBUTE_UNUSED, ldouble f8 ATTRIBUTE_UNUSED, ldouble f9 ATTRIBUTE_UNUSED, ldouble f10 ATTRIBUTE_UNUSED, ldouble f11 ATTRIBUTE_UNUSED, ldouble f12 ATTRIBUTE_UNUSED, ldouble f13 ATTRIBUTE_UNUSED, ldouble f14 ATTRIBUTE_UNUSED, ldouble f15 ATTRIBUTE_UNUSED, ldouble f16 ATTRIBUTE_UNUSED, ldouble f17 ATTRIBUTE_UNUSED, ldouble f18 ATTRIBUTE_UNUSED, ldouble f19 ATTRIBUTE_UNUSED)
     253  {
     254    /* Check argument values.  */
     255    assert (values_ldouble.f0 == f0);
     256    assert (values_ldouble.f1 == f1);
     257    assert (values_ldouble.f2 == f2);
     258    assert (values_ldouble.f3 == f3);
     259    assert (values_ldouble.f4 == f4);
     260    assert (values_ldouble.f5 == f5);
     261    assert (values_ldouble.f6 == f6);
     262    assert (values_ldouble.f7 == f7);
     263    assert (values_ldouble.f8 == f8);
     264    assert (values_ldouble.f9 == f9);
     265    assert (values_ldouble.f10 == f10);
     266    assert (values_ldouble.f11 == f11);
     267    assert (values_ldouble.f12 == f12);
     268    assert (values_ldouble.f13 == f13);
     269    assert (values_ldouble.f14 == f14);
     270    assert (values_ldouble.f15 == f15);
     271    assert (values_ldouble.f16 == f16);
     272    assert (values_ldouble.f17 == f17);
     273    assert (values_ldouble.f18 == f18);
     274    assert (values_ldouble.f19 == f19);
     275  
     276  }
     277  
     278  void
     279  fun_check_x87_passing_ldouble20_regs (ldouble f0 ATTRIBUTE_UNUSED, ldouble f1 ATTRIBUTE_UNUSED, ldouble f2 ATTRIBUTE_UNUSED, ldouble f3 ATTRIBUTE_UNUSED, ldouble f4 ATTRIBUTE_UNUSED, ldouble f5 ATTRIBUTE_UNUSED, ldouble f6 ATTRIBUTE_UNUSED, ldouble f7 ATTRIBUTE_UNUSED, ldouble f8 ATTRIBUTE_UNUSED, ldouble f9 ATTRIBUTE_UNUSED, ldouble f10 ATTRIBUTE_UNUSED, ldouble f11 ATTRIBUTE_UNUSED, ldouble f12 ATTRIBUTE_UNUSED, ldouble f13 ATTRIBUTE_UNUSED, ldouble f14 ATTRIBUTE_UNUSED, ldouble f15 ATTRIBUTE_UNUSED, ldouble f16 ATTRIBUTE_UNUSED, ldouble f17 ATTRIBUTE_UNUSED, ldouble f18 ATTRIBUTE_UNUSED, ldouble f19 ATTRIBUTE_UNUSED)
     280  {
     281    /* Check register contents.  */
     282    check_ldouble_arguments;
     283  }
     284  
     285  #define def_check_float_passing8(_f0, _f1, _f2, _f3, _f4, _f5, _f6, _f7, _func1, _func2, TYPE) \
     286    values_ ## TYPE .f0 = _f0; \
     287    values_ ## TYPE .f1 = _f1; \
     288    values_ ## TYPE .f2 = _f2; \
     289    values_ ## TYPE .f3 = _f3; \
     290    values_ ## TYPE .f4 = _f4; \
     291    values_ ## TYPE .f5 = _f5; \
     292    values_ ## TYPE .f6 = _f6; \
     293    values_ ## TYPE .f7 = _f7; \
     294    WRAP_CALL(_func1) (_f0, _f1, _f2, _f3, _f4, _f5, _f6, _f7); \
     295    \
     296    clear_float_registers; \
     297    fregs.F0._ ## TYPE [0] = _f0; \
     298    fregs.F1._ ## TYPE [0] = _f1; \
     299    fregs.F2._ ## TYPE [0] = _f2; \
     300    fregs.F3._ ## TYPE [0] = _f3; \
     301    fregs.F4._ ## TYPE [0] = _f4; \
     302    fregs.F5._ ## TYPE [0] = _f5; \
     303    fregs.F6._ ## TYPE [0] = _f6; \
     304    fregs.F7._ ## TYPE [0] = _f7; \
     305    num_fregs = 8; \
     306    WRAP_CALL(_func2) (_f0, _f1, _f2, _f3, _f4, _f5, _f6, _f7);
     307  
     308  #define def_check_float_passing16(_f0, _f1, _f2, _f3, _f4, _f5, _f6, _f7, _f8, _f9, _f10, _f11, _f12, _f13, _f14, _f15, _func1, _func2, TYPE) \
     309    values_ ## TYPE .f0 = _f0; \
     310    values_ ## TYPE .f1 = _f1; \
     311    values_ ## TYPE .f2 = _f2; \
     312    values_ ## TYPE .f3 = _f3; \
     313    values_ ## TYPE .f4 = _f4; \
     314    values_ ## TYPE .f5 = _f5; \
     315    values_ ## TYPE .f6 = _f6; \
     316    values_ ## TYPE .f7 = _f7; \
     317    values_ ## TYPE .f8 = _f8; \
     318    values_ ## TYPE .f9 = _f9; \
     319    values_ ## TYPE .f10 = _f10; \
     320    values_ ## TYPE .f11 = _f11; \
     321    values_ ## TYPE .f12 = _f12; \
     322    values_ ## TYPE .f13 = _f13; \
     323    values_ ## TYPE .f14 = _f14; \
     324    values_ ## TYPE .f15 = _f15; \
     325    WRAP_CALL(_func1) (_f0, _f1, _f2, _f3, _f4, _f5, _f6, _f7, _f8, _f9, _f10, _f11, _f12, _f13, _f14, _f15); \
     326    \
     327    clear_float_registers; \
     328    fregs.F0._ ## TYPE [0] = _f0; \
     329    fregs.F1._ ## TYPE [0] = _f1; \
     330    fregs.F2._ ## TYPE [0] = _f2; \
     331    fregs.F3._ ## TYPE [0] = _f3; \
     332    fregs.F4._ ## TYPE [0] = _f4; \
     333    fregs.F5._ ## TYPE [0] = _f5; \
     334    fregs.F6._ ## TYPE [0] = _f6; \
     335    fregs.F7._ ## TYPE [0] = _f7; \
     336    num_fregs = 8; \
     337    WRAP_CALL(_func2) (_f0, _f1, _f2, _f3, _f4, _f5, _f6, _f7, _f8, _f9, _f10, _f11, _f12, _f13, _f14, _f15);
     338  
     339  #define def_check_float_passing20(_f0, _f1, _f2, _f3, _f4, _f5, _f6, _f7, _f8, _f9, _f10, _f11, _f12, _f13, _f14, _f15, _f16, _f17, _f18, _f19, _func1, _func2, TYPE) \
     340    values_ ## TYPE .f0 = _f0; \
     341    values_ ## TYPE .f1 = _f1; \
     342    values_ ## TYPE .f2 = _f2; \
     343    values_ ## TYPE .f3 = _f3; \
     344    values_ ## TYPE .f4 = _f4; \
     345    values_ ## TYPE .f5 = _f5; \
     346    values_ ## TYPE .f6 = _f6; \
     347    values_ ## TYPE .f7 = _f7; \
     348    values_ ## TYPE .f8 = _f8; \
     349    values_ ## TYPE .f9 = _f9; \
     350    values_ ## TYPE .f10 = _f10; \
     351    values_ ## TYPE .f11 = _f11; \
     352    values_ ## TYPE .f12 = _f12; \
     353    values_ ## TYPE .f13 = _f13; \
     354    values_ ## TYPE .f14 = _f14; \
     355    values_ ## TYPE .f15 = _f15; \
     356    values_ ## TYPE .f16 = _f16; \
     357    values_ ## TYPE .f17 = _f17; \
     358    values_ ## TYPE .f18 = _f18; \
     359    values_ ## TYPE .f19 = _f19; \
     360    WRAP_CALL(_func1) (_f0, _f1, _f2, _f3, _f4, _f5, _f6, _f7, _f8, _f9, _f10, _f11, _f12, _f13, _f14, _f15, _f16, _f17, _f18, _f19); \
     361    \
     362    clear_float_registers; \
     363    fregs.F0._ ## TYPE [0] = _f0; \
     364    fregs.F1._ ## TYPE [0] = _f1; \
     365    fregs.F2._ ## TYPE [0] = _f2; \
     366    fregs.F3._ ## TYPE [0] = _f3; \
     367    fregs.F4._ ## TYPE [0] = _f4; \
     368    fregs.F5._ ## TYPE [0] = _f5; \
     369    fregs.F6._ ## TYPE [0] = _f6; \
     370    fregs.F7._ ## TYPE [0] = _f7; \
     371    num_fregs = 8; \
     372    WRAP_CALL(_func2) (_f0, _f1, _f2, _f3, _f4, _f5, _f6, _f7, _f8, _f9, _f10, _f11, _f12, _f13, _f14, _f15, _f16, _f17, _f18, _f19);
     373  
     374  #define def_check_x87_passing8(_f0, _f1, _f2, _f3, _f4, _f5, _f6, _f7, _func1, _func2, TYPE) \
     375    values_ ## TYPE .f0 = _f0; \
     376    values_ ## TYPE .f1 = _f1; \
     377    values_ ## TYPE .f2 = _f2; \
     378    values_ ## TYPE .f3 = _f3; \
     379    values_ ## TYPE .f4 = _f4; \
     380    values_ ## TYPE .f5 = _f5; \
     381    values_ ## TYPE .f6 = _f6; \
     382    values_ ## TYPE .f7 = _f7; \
     383    WRAP_CALL(_func1) (_f0, _f1, _f2, _f3, _f4, _f5, _f6, _f7); \
     384    \
     385    clear_x87_registers; \
     386    num_fregs = 0; \
     387    WRAP_CALL(_func2) (_f0, _f1, _f2, _f3, _f4, _f5, _f6, _f7);
     388  
     389  #define def_check_x87_passing16(_f0, _f1, _f2, _f3, _f4, _f5, _f6, _f7, _f8, _f9, _f10, _f11, _f12, _f13, _f14, _f15, _func1, _func2, TYPE) \
     390    values_ ## TYPE .f0 = _f0; \
     391    values_ ## TYPE .f1 = _f1; \
     392    values_ ## TYPE .f2 = _f2; \
     393    values_ ## TYPE .f3 = _f3; \
     394    values_ ## TYPE .f4 = _f4; \
     395    values_ ## TYPE .f5 = _f5; \
     396    values_ ## TYPE .f6 = _f6; \
     397    values_ ## TYPE .f7 = _f7; \
     398    values_ ## TYPE .f8 = _f8; \
     399    values_ ## TYPE .f9 = _f9; \
     400    values_ ## TYPE .f10 = _f10; \
     401    values_ ## TYPE .f11 = _f11; \
     402    values_ ## TYPE .f12 = _f12; \
     403    values_ ## TYPE .f13 = _f13; \
     404    values_ ## TYPE .f14 = _f14; \
     405    values_ ## TYPE .f15 = _f15; \
     406    WRAP_CALL(_func1) (_f0, _f1, _f2, _f3, _f4, _f5, _f6, _f7, _f8, _f9, _f10, _f11, _f12, _f13, _f14, _f15); \
     407    \
     408    clear_x87_registers; \
     409    num_fregs = 0; \
     410    WRAP_CALL(_func2) (_f0, _f1, _f2, _f3, _f4, _f5, _f6, _f7, _f8, _f9, _f10, _f11, _f12, _f13, _f14, _f15);
     411  
     412  #define def_check_x87_passing20(_f0, _f1, _f2, _f3, _f4, _f5, _f6, _f7, _f8, _f9, _f10, _f11, _f12, _f13, _f14, _f15, _f16, _f17, _f18, _f19, _func1, _func2, TYPE) \
     413    values_ ## TYPE .f0 = _f0; \
     414    values_ ## TYPE .f1 = _f1; \
     415    values_ ## TYPE .f2 = _f2; \
     416    values_ ## TYPE .f3 = _f3; \
     417    values_ ## TYPE .f4 = _f4; \
     418    values_ ## TYPE .f5 = _f5; \
     419    values_ ## TYPE .f6 = _f6; \
     420    values_ ## TYPE .f7 = _f7; \
     421    values_ ## TYPE .f8 = _f8; \
     422    values_ ## TYPE .f9 = _f9; \
     423    values_ ## TYPE .f10 = _f10; \
     424    values_ ## TYPE .f11 = _f11; \
     425    values_ ## TYPE .f12 = _f12; \
     426    values_ ## TYPE .f13 = _f13; \
     427    values_ ## TYPE .f14 = _f14; \
     428    values_ ## TYPE .f15 = _f15; \
     429    values_ ## TYPE .f16 = _f16; \
     430    values_ ## TYPE .f17 = _f17; \
     431    values_ ## TYPE .f18 = _f18; \
     432    values_ ## TYPE .f19 = _f19; \
     433    WRAP_CALL(_func1) (_f0, _f1, _f2, _f3, _f4, _f5, _f6, _f7, _f8, _f9, _f10, _f11, _f12, _f13, _f14, _f15, _f16, _f17, _f18, _f19); \
     434    \
     435    clear_x87_registers; \
     436    num_fregs = 0; \
     437    WRAP_CALL(_func2) (_f0, _f1, _f2, _f3, _f4, _f5, _f6, _f7, _f8, _f9, _f10, _f11, _f12, _f13, _f14, _f15, _f16, _f17, _f18, _f19);
     438  
     439  void
     440  test_floats_on_stack ()
     441  {
     442    def_check_float_passing8(32, 33, 34, 35, 36, 37, 38, 39, fun_check_float_passing_float8_values, fun_check_float_passing_float8_regs, float);
     443  
     444    def_check_float_passing16(32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, fun_check_float_passing_float16_values, fun_check_float_passing_float16_regs, float);
     445  }
     446  
     447  void
     448  test_too_many_floats ()
     449  {
     450    def_check_float_passing20(32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, fun_check_float_passing_float20_values, fun_check_float_passing_float20_regs, float);
     451  }
     452  
     453  void
     454  test_doubles_on_stack ()
     455  {
     456    def_check_float_passing8(32, 33, 34, 35, 36, 37, 38, 39, fun_check_float_passing_double8_values, fun_check_float_passing_double8_regs, double);
     457  
     458    def_check_float_passing16(32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, fun_check_float_passing_double16_values, fun_check_float_passing_double16_regs, double);
     459  }
     460  
     461  void
     462  test_too_many_doubles ()
     463  {
     464    def_check_float_passing20(32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, fun_check_float_passing_double20_values, fun_check_float_passing_double20_regs, double);
     465  }
     466  
     467  void
     468  test_long_doubles_on_stack ()
     469  {
     470    def_check_x87_passing8(32, 33, 34, 35, 36, 37, 38, 39, fun_check_x87_passing_ldouble8_values, fun_check_x87_passing_ldouble8_regs, ldouble);
     471  }
     472  
     473  void
     474  test_too_many_long_doubles ()
     475  {
     476    def_check_x87_passing20(32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, fun_check_x87_passing_ldouble20_values, fun_check_x87_passing_ldouble20_regs, ldouble);
     477  }
     478  
     479  void
     480  test_float128s_on_stack ()
     481  {
     482  }
     483  
     484  void
     485  test_too_many_float128s ()
     486  {
     487  }
     488  
     489  
     490  int
     491  main (void)
     492  {
     493    test_floats_on_stack ();
     494    test_too_many_floats ();
     495    test_doubles_on_stack ();
     496    test_too_many_doubles ();
     497    test_long_doubles_on_stack ();
     498    test_too_many_long_doubles ();
     499    test_float128s_on_stack ();
     500    test_too_many_float128s ();
     501    return 0;
     502  }