1  /* This is an autogenerated file. Do not edit.  */
       2  
       3  #include "avx512fp16-xmm-check.h"
       4  #include "defines.h"
       5  #include "macros.h"
       6  #include "args.h"
       7  
       8  struct IntegerRegisters iregs;
       9  struct FloatRegisters fregs;
      10  unsigned int num_iregs, num_fregs;
      11  
      12  /* This struct holds values for argument checking.  */
      13  struct
      14  {
      15    _Float16 f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14,
      16      f15, f16, f17, f18, f19, f20, f21, f22, f23;
      17  } values__Float16;
      18  
      19  struct
      20  {
      21    float f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15,
      22      f16, f17, f18, f19, f20, f21, f22, f23;
      23  } values_float;
      24  
      25  struct
      26  {
      27    double f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15,
      28      f16, f17, f18, f19, f20, f21, f22, f23;
      29  } values_double;
      30  
      31  struct
      32  {
      33    ldouble f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14,
      34      f15, f16, f17, f18, f19, f20, f21, f22, f23;
      35  } values_ldouble;
      36  
      37  void
      38  fun_check_float16_passing_8_values (_Float16 f0 ATTRIBUTE_UNUSED,
      39  				    _Float16 f1 ATTRIBUTE_UNUSED,
      40  				    _Float16 f2 ATTRIBUTE_UNUSED,
      41  				    _Float16 f3 ATTRIBUTE_UNUSED,
      42  				    _Float16 f4 ATTRIBUTE_UNUSED,
      43  				    _Float16 f5 ATTRIBUTE_UNUSED,
      44  				    _Float16 f6 ATTRIBUTE_UNUSED,
      45  				    _Float16 f7 ATTRIBUTE_UNUSED)
      46  {
      47    /* Check argument values.  */
      48    assert (values__Float16.f0 == f0);
      49    assert (values__Float16.f1 == f1);
      50    assert (values__Float16.f2 == f2);
      51    assert (values__Float16.f3 == f3);
      52    assert (values__Float16.f4 == f4);
      53    assert (values__Float16.f5 == f5);
      54    assert (values__Float16.f6 == f6);
      55    assert (values__Float16.f7 == f7);
      56  }
      57  
      58  void
      59  fun_check_float16_passing_8_regs (_Float16 f0 ATTRIBUTE_UNUSED,
      60  				  _Float16 f1 ATTRIBUTE_UNUSED,
      61  				  _Float16 f2 ATTRIBUTE_UNUSED,
      62  				  _Float16 f3 ATTRIBUTE_UNUSED,
      63  				  _Float16 f4 ATTRIBUTE_UNUSED,
      64  				  _Float16 f5 ATTRIBUTE_UNUSED,
      65  				  _Float16 f6 ATTRIBUTE_UNUSED,
      66  				  _Float16 f7 ATTRIBUTE_UNUSED)
      67  {
      68    /* Check register contents.  */
      69    check_float16_arguments;
      70  }
      71  
      72  void
      73  fun_check_float16_passing_16_values (_Float16 f0 ATTRIBUTE_UNUSED,
      74  				     _Float16 f1 ATTRIBUTE_UNUSED,
      75  				     _Float16 f2 ATTRIBUTE_UNUSED,
      76  				     _Float16 f3 ATTRIBUTE_UNUSED,
      77  				     _Float16 f4 ATTRIBUTE_UNUSED,
      78  				     _Float16 f5 ATTRIBUTE_UNUSED,
      79  				     _Float16 f6 ATTRIBUTE_UNUSED,
      80  				     _Float16 f7 ATTRIBUTE_UNUSED,
      81  				     _Float16 f8 ATTRIBUTE_UNUSED,
      82  				     _Float16 f9 ATTRIBUTE_UNUSED,
      83  				     _Float16 f10 ATTRIBUTE_UNUSED,
      84  				     _Float16 f11 ATTRIBUTE_UNUSED,
      85  				     _Float16 f12 ATTRIBUTE_UNUSED,
      86  				     _Float16 f13 ATTRIBUTE_UNUSED,
      87  				     _Float16 f14 ATTRIBUTE_UNUSED,
      88  				     _Float16 f15 ATTRIBUTE_UNUSED)
      89  {
      90    /* Check argument values.  */
      91    assert (values__Float16.f0 == f0);
      92    assert (values__Float16.f1 == f1);
      93    assert (values__Float16.f2 == f2);
      94    assert (values__Float16.f3 == f3);
      95    assert (values__Float16.f4 == f4);
      96    assert (values__Float16.f5 == f5);
      97    assert (values__Float16.f6 == f6);
      98    assert (values__Float16.f7 == f7);
      99    assert (values__Float16.f8 == f8);
     100    assert (values__Float16.f9 == f9);
     101    assert (values__Float16.f10 == f10);
     102    assert (values__Float16.f11 == f11);
     103    assert (values__Float16.f12 == f12);
     104    assert (values__Float16.f13 == f13);
     105    assert (values__Float16.f14 == f14);
     106    assert (values__Float16.f15 == f15);
     107  }
     108  
     109  void
     110  fun_check_float16_passing_16_regs (_Float16 f0 ATTRIBUTE_UNUSED,
     111  				   _Float16 f1 ATTRIBUTE_UNUSED,
     112  				   _Float16 f2 ATTRIBUTE_UNUSED,
     113  				   _Float16 f3 ATTRIBUTE_UNUSED,
     114  				   _Float16 f4 ATTRIBUTE_UNUSED,
     115  				   _Float16 f5 ATTRIBUTE_UNUSED,
     116  				   _Float16 f6 ATTRIBUTE_UNUSED,
     117  				   _Float16 f7 ATTRIBUTE_UNUSED,
     118  				   _Float16 f8 ATTRIBUTE_UNUSED,
     119  				   _Float16 f9 ATTRIBUTE_UNUSED,
     120  				   _Float16 f10 ATTRIBUTE_UNUSED,
     121  				   _Float16 f11 ATTRIBUTE_UNUSED,
     122  				   _Float16 f12 ATTRIBUTE_UNUSED,
     123  				   _Float16 f13 ATTRIBUTE_UNUSED,
     124  				   _Float16 f14 ATTRIBUTE_UNUSED,
     125  				   _Float16 f15 ATTRIBUTE_UNUSED)
     126  {
     127    /* Check register contents.  */
     128    check_float16_arguments;
     129  }
     130  
     131  void
     132  fun_check_float16_passing_20_values (_Float16 f0 ATTRIBUTE_UNUSED,
     133  				     _Float16 f1 ATTRIBUTE_UNUSED,
     134  				     _Float16 f2 ATTRIBUTE_UNUSED,
     135  				     _Float16 f3 ATTRIBUTE_UNUSED,
     136  				     _Float16 f4 ATTRIBUTE_UNUSED,
     137  				     _Float16 f5 ATTRIBUTE_UNUSED,
     138  				     _Float16 f6 ATTRIBUTE_UNUSED,
     139  				     _Float16 f7 ATTRIBUTE_UNUSED,
     140  				     _Float16 f8 ATTRIBUTE_UNUSED,
     141  				     _Float16 f9 ATTRIBUTE_UNUSED,
     142  				     _Float16 f10 ATTRIBUTE_UNUSED,
     143  				     _Float16 f11 ATTRIBUTE_UNUSED,
     144  				     _Float16 f12 ATTRIBUTE_UNUSED,
     145  				     _Float16 f13 ATTRIBUTE_UNUSED,
     146  				     _Float16 f14 ATTRIBUTE_UNUSED,
     147  				     _Float16 f15 ATTRIBUTE_UNUSED,
     148  				     _Float16 f16 ATTRIBUTE_UNUSED,
     149  				     _Float16 f17 ATTRIBUTE_UNUSED,
     150  				     _Float16 f18 ATTRIBUTE_UNUSED,
     151  				     _Float16 f19 ATTRIBUTE_UNUSED)
     152  {
     153    /* Check argument values.  */
     154    assert (values__Float16.f0 == f0);
     155    assert (values__Float16.f1 == f1);
     156    assert (values__Float16.f2 == f2);
     157    assert (values__Float16.f3 == f3);
     158    assert (values__Float16.f4 == f4);
     159    assert (values__Float16.f5 == f5);
     160    assert (values__Float16.f6 == f6);
     161    assert (values__Float16.f7 == f7);
     162    assert (values__Float16.f8 == f8);
     163    assert (values__Float16.f9 == f9);
     164    assert (values__Float16.f10 == f10);
     165    assert (values__Float16.f11 == f11);
     166    assert (values__Float16.f12 == f12);
     167    assert (values__Float16.f13 == f13);
     168    assert (values__Float16.f14 == f14);
     169    assert (values__Float16.f15 == f15);
     170    assert (values__Float16.f16 == f16);
     171    assert (values__Float16.f17 == f17);
     172    assert (values__Float16.f18 == f18);
     173    assert (values__Float16.f19 == f19);
     174  }
     175  
     176  void
     177  fun_check_float16_passing_20_regs (_Float16 f0 ATTRIBUTE_UNUSED,
     178  				   _Float16 f1 ATTRIBUTE_UNUSED,
     179  				   _Float16 f2 ATTRIBUTE_UNUSED,
     180  				   _Float16 f3 ATTRIBUTE_UNUSED,
     181  				   _Float16 f4 ATTRIBUTE_UNUSED,
     182  				   _Float16 f5 ATTRIBUTE_UNUSED,
     183  				   _Float16 f6 ATTRIBUTE_UNUSED,
     184  				   _Float16 f7 ATTRIBUTE_UNUSED,
     185  				   _Float16 f8 ATTRIBUTE_UNUSED,
     186  				   _Float16 f9 ATTRIBUTE_UNUSED,
     187  				   _Float16 f10 ATTRIBUTE_UNUSED,
     188  				   _Float16 f11 ATTRIBUTE_UNUSED,
     189  				   _Float16 f12 ATTRIBUTE_UNUSED,
     190  				   _Float16 f13 ATTRIBUTE_UNUSED,
     191  				   _Float16 f14 ATTRIBUTE_UNUSED,
     192  				   _Float16 f15 ATTRIBUTE_UNUSED,
     193  				   _Float16 f16 ATTRIBUTE_UNUSED,
     194  				   _Float16 f17 ATTRIBUTE_UNUSED,
     195  				   _Float16 f18 ATTRIBUTE_UNUSED,
     196  				   _Float16 f19 ATTRIBUTE_UNUSED)
     197  {
     198    /* Check register contents.  */
     199    check_float16_arguments;
     200  }
     201  
     202  void
     203  fun_check_float_passing_float8_values (float f0 ATTRIBUTE_UNUSED,
     204  				       float f1 ATTRIBUTE_UNUSED,
     205  				       float f2 ATTRIBUTE_UNUSED,
     206  				       float f3 ATTRIBUTE_UNUSED,
     207  				       float f4 ATTRIBUTE_UNUSED,
     208  				       float f5 ATTRIBUTE_UNUSED,
     209  				       float f6 ATTRIBUTE_UNUSED,
     210  				       float f7 ATTRIBUTE_UNUSED)
     211  {
     212    /* Check argument values.  */
     213    assert (values_float.f0 == f0);
     214    assert (values_float.f1 == f1);
     215    assert (values_float.f2 == f2);
     216    assert (values_float.f3 == f3);
     217    assert (values_float.f4 == f4);
     218    assert (values_float.f5 == f5);
     219    assert (values_float.f6 == f6);
     220    assert (values_float.f7 == f7);
     221  
     222  }
     223  
     224  void
     225  fun_check_float_passing_float8_regs (float f0 ATTRIBUTE_UNUSED,
     226  				     float f1 ATTRIBUTE_UNUSED,
     227  				     float f2 ATTRIBUTE_UNUSED,
     228  				     float f3 ATTRIBUTE_UNUSED,
     229  				     float f4 ATTRIBUTE_UNUSED,
     230  				     float f5 ATTRIBUTE_UNUSED,
     231  				     float f6 ATTRIBUTE_UNUSED,
     232  				     float f7 ATTRIBUTE_UNUSED)
     233  {
     234    /* Check register contents.  */
     235    check_float_arguments;
     236  }
     237  
     238  void
     239  fun_check_float_passing_float16_values (float f0 ATTRIBUTE_UNUSED,
     240  					float f1 ATTRIBUTE_UNUSED,
     241  					float f2 ATTRIBUTE_UNUSED,
     242  					float f3 ATTRIBUTE_UNUSED,
     243  					float f4 ATTRIBUTE_UNUSED,
     244  					float f5 ATTRIBUTE_UNUSED,
     245  					float f6 ATTRIBUTE_UNUSED,
     246  					float f7 ATTRIBUTE_UNUSED,
     247  					float f8 ATTRIBUTE_UNUSED,
     248  					float f9 ATTRIBUTE_UNUSED,
     249  					float f10 ATTRIBUTE_UNUSED,
     250  					float f11 ATTRIBUTE_UNUSED,
     251  					float f12 ATTRIBUTE_UNUSED,
     252  					float f13 ATTRIBUTE_UNUSED,
     253  					float f14 ATTRIBUTE_UNUSED,
     254  					float f15 ATTRIBUTE_UNUSED)
     255  {
     256    /* Check argument values.  */
     257    assert (values_float.f0 == f0);
     258    assert (values_float.f1 == f1);
     259    assert (values_float.f2 == f2);
     260    assert (values_float.f3 == f3);
     261    assert (values_float.f4 == f4);
     262    assert (values_float.f5 == f5);
     263    assert (values_float.f6 == f6);
     264    assert (values_float.f7 == f7);
     265    assert (values_float.f8 == f8);
     266    assert (values_float.f9 == f9);
     267    assert (values_float.f10 == f10);
     268    assert (values_float.f11 == f11);
     269    assert (values_float.f12 == f12);
     270    assert (values_float.f13 == f13);
     271    assert (values_float.f14 == f14);
     272    assert (values_float.f15 == f15);
     273  
     274  }
     275  
     276  void
     277  fun_check_float_passing_float16_regs (float f0 ATTRIBUTE_UNUSED,
     278  				      float f1 ATTRIBUTE_UNUSED,
     279  				      float f2 ATTRIBUTE_UNUSED,
     280  				      float f3 ATTRIBUTE_UNUSED,
     281  				      float f4 ATTRIBUTE_UNUSED,
     282  				      float f5 ATTRIBUTE_UNUSED,
     283  				      float f6 ATTRIBUTE_UNUSED,
     284  				      float f7 ATTRIBUTE_UNUSED,
     285  				      float f8 ATTRIBUTE_UNUSED,
     286  				      float f9 ATTRIBUTE_UNUSED,
     287  				      float f10 ATTRIBUTE_UNUSED,
     288  				      float f11 ATTRIBUTE_UNUSED,
     289  				      float f12 ATTRIBUTE_UNUSED,
     290  				      float f13 ATTRIBUTE_UNUSED,
     291  				      float f14 ATTRIBUTE_UNUSED,
     292  				      float f15 ATTRIBUTE_UNUSED)
     293  {
     294    /* Check register contents.  */
     295    check_float_arguments;
     296  }
     297  
     298  void
     299  fun_check_float_passing_float20_values (float f0 ATTRIBUTE_UNUSED,
     300  					float f1 ATTRIBUTE_UNUSED,
     301  					float f2 ATTRIBUTE_UNUSED,
     302  					float f3 ATTRIBUTE_UNUSED,
     303  					float f4 ATTRIBUTE_UNUSED,
     304  					float f5 ATTRIBUTE_UNUSED,
     305  					float f6 ATTRIBUTE_UNUSED,
     306  					float f7 ATTRIBUTE_UNUSED,
     307  					float f8 ATTRIBUTE_UNUSED,
     308  					float f9 ATTRIBUTE_UNUSED,
     309  					float f10 ATTRIBUTE_UNUSED,
     310  					float f11 ATTRIBUTE_UNUSED,
     311  					float f12 ATTRIBUTE_UNUSED,
     312  					float f13 ATTRIBUTE_UNUSED,
     313  					float f14 ATTRIBUTE_UNUSED,
     314  					float f15 ATTRIBUTE_UNUSED,
     315  					float f16 ATTRIBUTE_UNUSED,
     316  					float f17 ATTRIBUTE_UNUSED,
     317  					float f18 ATTRIBUTE_UNUSED,
     318  					float f19 ATTRIBUTE_UNUSED)
     319  {
     320    /* Check argument values.  */
     321    assert (values_float.f0 == f0);
     322    assert (values_float.f1 == f1);
     323    assert (values_float.f2 == f2);
     324    assert (values_float.f3 == f3);
     325    assert (values_float.f4 == f4);
     326    assert (values_float.f5 == f5);
     327    assert (values_float.f6 == f6);
     328    assert (values_float.f7 == f7);
     329    assert (values_float.f8 == f8);
     330    assert (values_float.f9 == f9);
     331    assert (values_float.f10 == f10);
     332    assert (values_float.f11 == f11);
     333    assert (values_float.f12 == f12);
     334    assert (values_float.f13 == f13);
     335    assert (values_float.f14 == f14);
     336    assert (values_float.f15 == f15);
     337    assert (values_float.f16 == f16);
     338    assert (values_float.f17 == f17);
     339    assert (values_float.f18 == f18);
     340    assert (values_float.f19 == f19);
     341  
     342  }
     343  
     344  void
     345  fun_check_float_passing_float20_regs (float f0 ATTRIBUTE_UNUSED,
     346  				      float f1 ATTRIBUTE_UNUSED,
     347  				      float f2 ATTRIBUTE_UNUSED,
     348  				      float f3 ATTRIBUTE_UNUSED,
     349  				      float f4 ATTRIBUTE_UNUSED,
     350  				      float f5 ATTRIBUTE_UNUSED,
     351  				      float f6 ATTRIBUTE_UNUSED,
     352  				      float f7 ATTRIBUTE_UNUSED,
     353  				      float f8 ATTRIBUTE_UNUSED,
     354  				      float f9 ATTRIBUTE_UNUSED,
     355  				      float f10 ATTRIBUTE_UNUSED,
     356  				      float f11 ATTRIBUTE_UNUSED,
     357  				      float f12 ATTRIBUTE_UNUSED,
     358  				      float f13 ATTRIBUTE_UNUSED,
     359  				      float f14 ATTRIBUTE_UNUSED,
     360  				      float f15 ATTRIBUTE_UNUSED,
     361  				      float f16 ATTRIBUTE_UNUSED,
     362  				      float f17 ATTRIBUTE_UNUSED,
     363  				      float f18 ATTRIBUTE_UNUSED,
     364  				      float f19 ATTRIBUTE_UNUSED)
     365  {
     366    /* Check register contents.  */
     367    check_float_arguments;
     368  }
     369  
     370  void
     371  fun_check_float_passing_double8_values (double f0 ATTRIBUTE_UNUSED,
     372  					double f1 ATTRIBUTE_UNUSED,
     373  					double f2 ATTRIBUTE_UNUSED,
     374  					double f3 ATTRIBUTE_UNUSED,
     375  					double f4 ATTRIBUTE_UNUSED,
     376  					double f5 ATTRIBUTE_UNUSED,
     377  					double f6 ATTRIBUTE_UNUSED,
     378  					double f7 ATTRIBUTE_UNUSED)
     379  {
     380    /* Check argument values.  */
     381    assert (values_double.f0 == f0);
     382    assert (values_double.f1 == f1);
     383    assert (values_double.f2 == f2);
     384    assert (values_double.f3 == f3);
     385    assert (values_double.f4 == f4);
     386    assert (values_double.f5 == f5);
     387    assert (values_double.f6 == f6);
     388    assert (values_double.f7 == f7);
     389  
     390  }
     391  
     392  void
     393  fun_check_float_passing_double8_regs (double f0 ATTRIBUTE_UNUSED,
     394  				      double f1 ATTRIBUTE_UNUSED,
     395  				      double f2 ATTRIBUTE_UNUSED,
     396  				      double f3 ATTRIBUTE_UNUSED,
     397  				      double f4 ATTRIBUTE_UNUSED,
     398  				      double f5 ATTRIBUTE_UNUSED,
     399  				      double f6 ATTRIBUTE_UNUSED,
     400  				      double f7 ATTRIBUTE_UNUSED)
     401  {
     402    /* Check register contents.  */
     403    check_double_arguments;
     404  }
     405  
     406  void
     407  fun_check_float_passing_double16_values (double f0 ATTRIBUTE_UNUSED,
     408  					 double f1 ATTRIBUTE_UNUSED,
     409  					 double f2 ATTRIBUTE_UNUSED,
     410  					 double f3 ATTRIBUTE_UNUSED,
     411  					 double f4 ATTRIBUTE_UNUSED,
     412  					 double f5 ATTRIBUTE_UNUSED,
     413  					 double f6 ATTRIBUTE_UNUSED,
     414  					 double f7 ATTRIBUTE_UNUSED,
     415  					 double f8 ATTRIBUTE_UNUSED,
     416  					 double f9 ATTRIBUTE_UNUSED,
     417  					 double f10 ATTRIBUTE_UNUSED,
     418  					 double f11 ATTRIBUTE_UNUSED,
     419  					 double f12 ATTRIBUTE_UNUSED,
     420  					 double f13 ATTRIBUTE_UNUSED,
     421  					 double f14 ATTRIBUTE_UNUSED,
     422  					 double f15 ATTRIBUTE_UNUSED)
     423  {
     424    /* Check argument values.  */
     425    assert (values_double.f0 == f0);
     426    assert (values_double.f1 == f1);
     427    assert (values_double.f2 == f2);
     428    assert (values_double.f3 == f3);
     429    assert (values_double.f4 == f4);
     430    assert (values_double.f5 == f5);
     431    assert (values_double.f6 == f6);
     432    assert (values_double.f7 == f7);
     433    assert (values_double.f8 == f8);
     434    assert (values_double.f9 == f9);
     435    assert (values_double.f10 == f10);
     436    assert (values_double.f11 == f11);
     437    assert (values_double.f12 == f12);
     438    assert (values_double.f13 == f13);
     439    assert (values_double.f14 == f14);
     440    assert (values_double.f15 == f15);
     441  
     442  }
     443  
     444  void
     445  fun_check_float_passing_double16_regs (double f0 ATTRIBUTE_UNUSED,
     446  				       double f1 ATTRIBUTE_UNUSED,
     447  				       double f2 ATTRIBUTE_UNUSED,
     448  				       double f3 ATTRIBUTE_UNUSED,
     449  				       double f4 ATTRIBUTE_UNUSED,
     450  				       double f5 ATTRIBUTE_UNUSED,
     451  				       double f6 ATTRIBUTE_UNUSED,
     452  				       double f7 ATTRIBUTE_UNUSED,
     453  				       double f8 ATTRIBUTE_UNUSED,
     454  				       double f9 ATTRIBUTE_UNUSED,
     455  				       double f10 ATTRIBUTE_UNUSED,
     456  				       double f11 ATTRIBUTE_UNUSED,
     457  				       double f12 ATTRIBUTE_UNUSED,
     458  				       double f13 ATTRIBUTE_UNUSED,
     459  				       double f14 ATTRIBUTE_UNUSED,
     460  				       double f15 ATTRIBUTE_UNUSED)
     461  {
     462    /* Check register contents.  */
     463    check_double_arguments;
     464  }
     465  
     466  void
     467  fun_check_float_passing_double20_values (double f0 ATTRIBUTE_UNUSED,
     468  					 double f1 ATTRIBUTE_UNUSED,
     469  					 double f2 ATTRIBUTE_UNUSED,
     470  					 double f3 ATTRIBUTE_UNUSED,
     471  					 double f4 ATTRIBUTE_UNUSED,
     472  					 double f5 ATTRIBUTE_UNUSED,
     473  					 double f6 ATTRIBUTE_UNUSED,
     474  					 double f7 ATTRIBUTE_UNUSED,
     475  					 double f8 ATTRIBUTE_UNUSED,
     476  					 double f9 ATTRIBUTE_UNUSED,
     477  					 double f10 ATTRIBUTE_UNUSED,
     478  					 double f11 ATTRIBUTE_UNUSED,
     479  					 double f12 ATTRIBUTE_UNUSED,
     480  					 double f13 ATTRIBUTE_UNUSED,
     481  					 double f14 ATTRIBUTE_UNUSED,
     482  					 double f15 ATTRIBUTE_UNUSED,
     483  					 double f16 ATTRIBUTE_UNUSED,
     484  					 double f17 ATTRIBUTE_UNUSED,
     485  					 double f18 ATTRIBUTE_UNUSED,
     486  					 double f19 ATTRIBUTE_UNUSED)
     487  {
     488    /* Check argument values.  */
     489    assert (values_double.f0 == f0);
     490    assert (values_double.f1 == f1);
     491    assert (values_double.f2 == f2);
     492    assert (values_double.f3 == f3);
     493    assert (values_double.f4 == f4);
     494    assert (values_double.f5 == f5);
     495    assert (values_double.f6 == f6);
     496    assert (values_double.f7 == f7);
     497    assert (values_double.f8 == f8);
     498    assert (values_double.f9 == f9);
     499    assert (values_double.f10 == f10);
     500    assert (values_double.f11 == f11);
     501    assert (values_double.f12 == f12);
     502    assert (values_double.f13 == f13);
     503    assert (values_double.f14 == f14);
     504    assert (values_double.f15 == f15);
     505    assert (values_double.f16 == f16);
     506    assert (values_double.f17 == f17);
     507    assert (values_double.f18 == f18);
     508    assert (values_double.f19 == f19);
     509  
     510  }
     511  
     512  void
     513  fun_check_float_passing_double20_regs (double f0 ATTRIBUTE_UNUSED,
     514  				       double f1 ATTRIBUTE_UNUSED,
     515  				       double f2 ATTRIBUTE_UNUSED,
     516  				       double f3 ATTRIBUTE_UNUSED,
     517  				       double f4 ATTRIBUTE_UNUSED,
     518  				       double f5 ATTRIBUTE_UNUSED,
     519  				       double f6 ATTRIBUTE_UNUSED,
     520  				       double f7 ATTRIBUTE_UNUSED,
     521  				       double f8 ATTRIBUTE_UNUSED,
     522  				       double f9 ATTRIBUTE_UNUSED,
     523  				       double f10 ATTRIBUTE_UNUSED,
     524  				       double f11 ATTRIBUTE_UNUSED,
     525  				       double f12 ATTRIBUTE_UNUSED,
     526  				       double f13 ATTRIBUTE_UNUSED,
     527  				       double f14 ATTRIBUTE_UNUSED,
     528  				       double f15 ATTRIBUTE_UNUSED,
     529  				       double f16 ATTRIBUTE_UNUSED,
     530  				       double f17 ATTRIBUTE_UNUSED,
     531  				       double f18 ATTRIBUTE_UNUSED,
     532  				       double f19 ATTRIBUTE_UNUSED)
     533  {
     534    /* Check register contents.  */
     535    check_double_arguments;
     536  }
     537  
     538  void
     539  fun_check_x87_passing_ldouble8_values (ldouble f0 ATTRIBUTE_UNUSED,
     540  				       ldouble f1 ATTRIBUTE_UNUSED,
     541  				       ldouble f2 ATTRIBUTE_UNUSED,
     542  				       ldouble f3 ATTRIBUTE_UNUSED,
     543  				       ldouble f4 ATTRIBUTE_UNUSED,
     544  				       ldouble f5 ATTRIBUTE_UNUSED,
     545  				       ldouble f6 ATTRIBUTE_UNUSED,
     546  				       ldouble f7 ATTRIBUTE_UNUSED)
     547  {
     548    /* Check argument values.  */
     549    assert (values_ldouble.f0 == f0);
     550    assert (values_ldouble.f1 == f1);
     551    assert (values_ldouble.f2 == f2);
     552    assert (values_ldouble.f3 == f3);
     553    assert (values_ldouble.f4 == f4);
     554    assert (values_ldouble.f5 == f5);
     555    assert (values_ldouble.f6 == f6);
     556    assert (values_ldouble.f7 == f7);
     557  
     558  }
     559  
     560  void
     561  fun_check_x87_passing_ldouble8_regs (ldouble f0 ATTRIBUTE_UNUSED,
     562  				     ldouble f1 ATTRIBUTE_UNUSED,
     563  				     ldouble f2 ATTRIBUTE_UNUSED,
     564  				     ldouble f3 ATTRIBUTE_UNUSED,
     565  				     ldouble f4 ATTRIBUTE_UNUSED,
     566  				     ldouble f5 ATTRIBUTE_UNUSED,
     567  				     ldouble f6 ATTRIBUTE_UNUSED,
     568  				     ldouble f7 ATTRIBUTE_UNUSED)
     569  {
     570    /* Check register contents.  */
     571    check_ldouble_arguments;
     572  }
     573  
     574  void
     575  fun_check_x87_passing_ldouble16_values (ldouble f0 ATTRIBUTE_UNUSED,
     576  					ldouble f1 ATTRIBUTE_UNUSED,
     577  					ldouble f2 ATTRIBUTE_UNUSED,
     578  					ldouble f3 ATTRIBUTE_UNUSED,
     579  					ldouble f4 ATTRIBUTE_UNUSED,
     580  					ldouble f5 ATTRIBUTE_UNUSED,
     581  					ldouble f6 ATTRIBUTE_UNUSED,
     582  					ldouble f7 ATTRIBUTE_UNUSED,
     583  					ldouble f8 ATTRIBUTE_UNUSED,
     584  					ldouble f9 ATTRIBUTE_UNUSED,
     585  					ldouble f10 ATTRIBUTE_UNUSED,
     586  					ldouble f11 ATTRIBUTE_UNUSED,
     587  					ldouble f12 ATTRIBUTE_UNUSED,
     588  					ldouble f13 ATTRIBUTE_UNUSED,
     589  					ldouble f14 ATTRIBUTE_UNUSED,
     590  					ldouble f15 ATTRIBUTE_UNUSED)
     591  {
     592    /* Check argument values.  */
     593    assert (values_ldouble.f0 == f0);
     594    assert (values_ldouble.f1 == f1);
     595    assert (values_ldouble.f2 == f2);
     596    assert (values_ldouble.f3 == f3);
     597    assert (values_ldouble.f4 == f4);
     598    assert (values_ldouble.f5 == f5);
     599    assert (values_ldouble.f6 == f6);
     600    assert (values_ldouble.f7 == f7);
     601    assert (values_ldouble.f8 == f8);
     602    assert (values_ldouble.f9 == f9);
     603    assert (values_ldouble.f10 == f10);
     604    assert (values_ldouble.f11 == f11);
     605    assert (values_ldouble.f12 == f12);
     606    assert (values_ldouble.f13 == f13);
     607    assert (values_ldouble.f14 == f14);
     608    assert (values_ldouble.f15 == f15);
     609  
     610  }
     611  
     612  void
     613  fun_check_x87_passing_ldouble16_regs (ldouble f0 ATTRIBUTE_UNUSED,
     614  				      ldouble f1 ATTRIBUTE_UNUSED,
     615  				      ldouble f2 ATTRIBUTE_UNUSED,
     616  				      ldouble f3 ATTRIBUTE_UNUSED,
     617  				      ldouble f4 ATTRIBUTE_UNUSED,
     618  				      ldouble f5 ATTRIBUTE_UNUSED,
     619  				      ldouble f6 ATTRIBUTE_UNUSED,
     620  				      ldouble f7 ATTRIBUTE_UNUSED,
     621  				      ldouble f8 ATTRIBUTE_UNUSED,
     622  				      ldouble f9 ATTRIBUTE_UNUSED,
     623  				      ldouble f10 ATTRIBUTE_UNUSED,
     624  				      ldouble f11 ATTRIBUTE_UNUSED,
     625  				      ldouble f12 ATTRIBUTE_UNUSED,
     626  				      ldouble f13 ATTRIBUTE_UNUSED,
     627  				      ldouble f14 ATTRIBUTE_UNUSED,
     628  				      ldouble f15 ATTRIBUTE_UNUSED)
     629  {
     630    /* Check register contents.  */
     631    check_ldouble_arguments;
     632  }
     633  
     634  void
     635  fun_check_x87_passing_ldouble20_values (ldouble f0 ATTRIBUTE_UNUSED,
     636  					ldouble f1 ATTRIBUTE_UNUSED,
     637  					ldouble f2 ATTRIBUTE_UNUSED,
     638  					ldouble f3 ATTRIBUTE_UNUSED,
     639  					ldouble f4 ATTRIBUTE_UNUSED,
     640  					ldouble f5 ATTRIBUTE_UNUSED,
     641  					ldouble f6 ATTRIBUTE_UNUSED,
     642  					ldouble f7 ATTRIBUTE_UNUSED,
     643  					ldouble f8 ATTRIBUTE_UNUSED,
     644  					ldouble f9 ATTRIBUTE_UNUSED,
     645  					ldouble f10 ATTRIBUTE_UNUSED,
     646  					ldouble f11 ATTRIBUTE_UNUSED,
     647  					ldouble f12 ATTRIBUTE_UNUSED,
     648  					ldouble f13 ATTRIBUTE_UNUSED,
     649  					ldouble f14 ATTRIBUTE_UNUSED,
     650  					ldouble f15 ATTRIBUTE_UNUSED,
     651  					ldouble f16 ATTRIBUTE_UNUSED,
     652  					ldouble f17 ATTRIBUTE_UNUSED,
     653  					ldouble f18 ATTRIBUTE_UNUSED,
     654  					ldouble f19 ATTRIBUTE_UNUSED)
     655  {
     656    /* Check argument values.  */
     657    assert (values_ldouble.f0 == f0);
     658    assert (values_ldouble.f1 == f1);
     659    assert (values_ldouble.f2 == f2);
     660    assert (values_ldouble.f3 == f3);
     661    assert (values_ldouble.f4 == f4);
     662    assert (values_ldouble.f5 == f5);
     663    assert (values_ldouble.f6 == f6);
     664    assert (values_ldouble.f7 == f7);
     665    assert (values_ldouble.f8 == f8);
     666    assert (values_ldouble.f9 == f9);
     667    assert (values_ldouble.f10 == f10);
     668    assert (values_ldouble.f11 == f11);
     669    assert (values_ldouble.f12 == f12);
     670    assert (values_ldouble.f13 == f13);
     671    assert (values_ldouble.f14 == f14);
     672    assert (values_ldouble.f15 == f15);
     673    assert (values_ldouble.f16 == f16);
     674    assert (values_ldouble.f17 == f17);
     675    assert (values_ldouble.f18 == f18);
     676    assert (values_ldouble.f19 == f19);
     677  
     678  }
     679  
     680  void
     681  fun_check_x87_passing_ldouble20_regs (ldouble f0 ATTRIBUTE_UNUSED,
     682  				      ldouble f1 ATTRIBUTE_UNUSED,
     683  				      ldouble f2 ATTRIBUTE_UNUSED,
     684  				      ldouble f3 ATTRIBUTE_UNUSED,
     685  				      ldouble f4 ATTRIBUTE_UNUSED,
     686  				      ldouble f5 ATTRIBUTE_UNUSED,
     687  				      ldouble f6 ATTRIBUTE_UNUSED,
     688  				      ldouble f7 ATTRIBUTE_UNUSED,
     689  				      ldouble f8 ATTRIBUTE_UNUSED,
     690  				      ldouble f9 ATTRIBUTE_UNUSED,
     691  				      ldouble f10 ATTRIBUTE_UNUSED,
     692  				      ldouble f11 ATTRIBUTE_UNUSED,
     693  				      ldouble f12 ATTRIBUTE_UNUSED,
     694  				      ldouble f13 ATTRIBUTE_UNUSED,
     695  				      ldouble f14 ATTRIBUTE_UNUSED,
     696  				      ldouble f15 ATTRIBUTE_UNUSED,
     697  				      ldouble f16 ATTRIBUTE_UNUSED,
     698  				      ldouble f17 ATTRIBUTE_UNUSED,
     699  				      ldouble f18 ATTRIBUTE_UNUSED,
     700  				      ldouble f19 ATTRIBUTE_UNUSED)
     701  {
     702    /* Check register contents.  */
     703    check_ldouble_arguments;
     704  }
     705  
     706  #define def_check_float16_passing8(_f0, _f1, _f2, _f3, _f4, _f5, _f6,\
     707  				   _f7, _func1, _func2, TYPE) \
     708    values_ ## TYPE .f0 = _f0; \
     709    values_ ## TYPE .f1 = _f1; \
     710    values_ ## TYPE .f2 = _f2; \
     711    values_ ## TYPE .f3 = _f3; \
     712    values_ ## TYPE .f4 = _f4; \
     713    values_ ## TYPE .f5 = _f5; \
     714    values_ ## TYPE .f6 = _f6; \
     715    values_ ## TYPE .f7 = _f7; \
     716    WRAP_CALL(_func1) (_f0, _f1, _f2, _f3, _f4, _f5, _f6, _f7); \
     717    clear_float_registers; \
     718    fregs.F0._ ## TYPE [0] = _f0; \
     719    fregs.F1._ ## TYPE [0] = _f1; \
     720    fregs.F2._ ## TYPE [0] = _f2; \
     721    fregs.F3._ ## TYPE [0] = _f3; \
     722    fregs.F4._ ## TYPE [0] = _f4; \
     723    fregs.F5._ ## TYPE [0] = _f5; \
     724    fregs.F6._ ## TYPE [0] = _f6; \
     725    fregs.F7._ ## TYPE [0] = _f7; \
     726    num_fregs = 8; \
     727    WRAP_CALL(_func2) (_f0, _f1, _f2, _f3, _f4, _f5, _f6, _f7);
     728  
     729  #define def_check_float16_passing16(_f0, _f1, _f2, _f3, _f4, _f5, _f6, \
     730  				    _f7, _f8, _f9, _f10, _f11, _f12, _f13, \
     731  				    _f14, _f15, _func1, _func2, TYPE) \
     732    values_ ## TYPE .f0 = _f0; \
     733    values_ ## TYPE .f1 = _f1; \
     734    values_ ## TYPE .f2 = _f2; \
     735    values_ ## TYPE .f3 = _f3; \
     736    values_ ## TYPE .f4 = _f4; \
     737    values_ ## TYPE .f5 = _f5; \
     738    values_ ## TYPE .f6 = _f6; \
     739    values_ ## TYPE .f7 = _f7; \
     740    values_ ## TYPE .f8 = _f8; \
     741    values_ ## TYPE .f9 = _f9; \
     742    values_ ## TYPE .f10 = _f10; \
     743    values_ ## TYPE .f11 = _f11; \
     744    values_ ## TYPE .f12 = _f12; \
     745    values_ ## TYPE .f13 = _f13; \
     746    values_ ## TYPE .f14 = _f14; \
     747    values_ ## TYPE .f15 = _f15; \
     748    WRAP_CALL(_func1) (_f0, _f1, _f2, _f3, _f4, _f5, _f6, _f7, _f8, _f9, \
     749  		     _f10, _f11, _f12, _f13, _f14, _f15); \
     750    clear_float_registers; \
     751    fregs.F0._ ## TYPE [0] = _f0; \
     752    fregs.F1._ ## TYPE [0] = _f1; \
     753    fregs.F2._ ## TYPE [0] = _f2; \
     754    fregs.F3._ ## TYPE [0] = _f3; \
     755    fregs.F4._ ## TYPE [0] = _f4; \
     756    fregs.F5._ ## TYPE [0] = _f5; \
     757    fregs.F6._ ## TYPE [0] = _f6; \
     758    fregs.F7._ ## TYPE [0] = _f7; \
     759    num_fregs = 8; \
     760    WRAP_CALL(_func2) (_f0, _f1, _f2, _f3, _f4, _f5, _f6, _f7, _f8, _f9, \
     761  		     _f10, _f11, _f12, _f13, _f14, _f15);
     762  
     763  #define def_check_float16_passing20(_f0, _f1, _f2, _f3, _f4, _f5, _f6, \
     764  				    _f7, _f8, _f9, _f10, _f11, _f12, \
     765  				    _f13, _f14, _f15, _f16, _f17, \
     766  				    _f18, _f19, _func1, _func2, TYPE) \
     767    values_ ## TYPE .f0 = _f0; \
     768    values_ ## TYPE .f1 = _f1; \
     769    values_ ## TYPE .f2 = _f2; \
     770    values_ ## TYPE .f3 = _f3; \
     771    values_ ## TYPE .f4 = _f4; \
     772    values_ ## TYPE .f5 = _f5; \
     773    values_ ## TYPE .f6 = _f6; \
     774    values_ ## TYPE .f7 = _f7; \
     775    values_ ## TYPE .f8 = _f8; \
     776    values_ ## TYPE .f9 = _f9; \
     777    values_ ## TYPE .f10 = _f10; \
     778    values_ ## TYPE .f11 = _f11; \
     779    values_ ## TYPE .f12 = _f12; \
     780    values_ ## TYPE .f13 = _f13; \
     781    values_ ## TYPE .f14 = _f14; \
     782    values_ ## TYPE .f15 = _f15; \
     783    values_ ## TYPE .f16 = _f16; \
     784    values_ ## TYPE .f17 = _f17; \
     785    values_ ## TYPE .f18 = _f18; \
     786    values_ ## TYPE .f19 = _f19; \
     787    WRAP_CALL(_func1) (_f0, _f1, _f2, _f3, _f4, _f5, _f6, _f7, _f8, \
     788  		     _f9, _f10, _f11, _f12, _f13, _f14, _f15, _f16, \
     789  		     _f17, _f18, _f19); \
     790    clear_float_registers; \
     791    fregs.F0._ ## TYPE [0] = _f0; \
     792    fregs.F1._ ## TYPE [0] = _f1; \
     793    fregs.F2._ ## TYPE [0] = _f2; \
     794    fregs.F3._ ## TYPE [0] = _f3; \
     795    fregs.F4._ ## TYPE [0] = _f4; \
     796    fregs.F5._ ## TYPE [0] = _f5; \
     797    fregs.F6._ ## TYPE [0] = _f6; \
     798    fregs.F7._ ## TYPE [0] = _f7; \
     799    num_fregs = 8; \
     800    WRAP_CALL(_func2) (_f0, _f1, _f2, _f3, _f4, _f5, _f6, _f7, _f8, _f9, \
     801  		     _f10, _f11, _f12, _f13, _f14, _f15, _f16, _f17, \
     802  		     _f18, _f19);
     803  
     804  
     805  #define def_check_float_passing8(_f0, _f1, _f2, _f3, _f4, _f5, _f6, _f7, _func1, _func2, TYPE) \
     806    values_ ## TYPE .f0 = _f0; \
     807    values_ ## TYPE .f1 = _f1; \
     808    values_ ## TYPE .f2 = _f2; \
     809    values_ ## TYPE .f3 = _f3; \
     810    values_ ## TYPE .f4 = _f4; \
     811    values_ ## TYPE .f5 = _f5; \
     812    values_ ## TYPE .f6 = _f6; \
     813    values_ ## TYPE .f7 = _f7; \
     814    WRAP_CALL(_func1) (_f0, _f1, _f2, _f3, _f4, _f5, _f6, _f7); \
     815    \
     816    clear_float_registers; \
     817    fregs.F0._ ## TYPE [0] = _f0; \
     818    fregs.F1._ ## TYPE [0] = _f1; \
     819    fregs.F2._ ## TYPE [0] = _f2; \
     820    fregs.F3._ ## TYPE [0] = _f3; \
     821    fregs.F4._ ## TYPE [0] = _f4; \
     822    fregs.F5._ ## TYPE [0] = _f5; \
     823    fregs.F6._ ## TYPE [0] = _f6; \
     824    fregs.F7._ ## TYPE [0] = _f7; \
     825    num_fregs = 8; \
     826    WRAP_CALL(_func2) (_f0, _f1, _f2, _f3, _f4, _f5, _f6, _f7);
     827  
     828  #define def_check_float_passing16(_f0, _f1, _f2, _f3, _f4, _f5, _f6, _f7, _f8, _f9, _f10, _f11, _f12, _f13, _f14, _f15, _func1, _func2, TYPE) \
     829    values_ ## TYPE .f0 = _f0; \
     830    values_ ## TYPE .f1 = _f1; \
     831    values_ ## TYPE .f2 = _f2; \
     832    values_ ## TYPE .f3 = _f3; \
     833    values_ ## TYPE .f4 = _f4; \
     834    values_ ## TYPE .f5 = _f5; \
     835    values_ ## TYPE .f6 = _f6; \
     836    values_ ## TYPE .f7 = _f7; \
     837    values_ ## TYPE .f8 = _f8; \
     838    values_ ## TYPE .f9 = _f9; \
     839    values_ ## TYPE .f10 = _f10; \
     840    values_ ## TYPE .f11 = _f11; \
     841    values_ ## TYPE .f12 = _f12; \
     842    values_ ## TYPE .f13 = _f13; \
     843    values_ ## TYPE .f14 = _f14; \
     844    values_ ## TYPE .f15 = _f15; \
     845    WRAP_CALL(_func1) (_f0, _f1, _f2, _f3, _f4, _f5, _f6, _f7, _f8, _f9, _f10, _f11, _f12, _f13, _f14, _f15); \
     846    \
     847    clear_float_registers; \
     848    fregs.F0._ ## TYPE [0] = _f0; \
     849    fregs.F1._ ## TYPE [0] = _f1; \
     850    fregs.F2._ ## TYPE [0] = _f2; \
     851    fregs.F3._ ## TYPE [0] = _f3; \
     852    fregs.F4._ ## TYPE [0] = _f4; \
     853    fregs.F5._ ## TYPE [0] = _f5; \
     854    fregs.F6._ ## TYPE [0] = _f6; \
     855    fregs.F7._ ## TYPE [0] = _f7; \
     856    num_fregs = 8; \
     857    WRAP_CALL(_func2) (_f0, _f1, _f2, _f3, _f4, _f5, _f6, _f7, _f8, _f9, _f10, _f11, _f12, _f13, _f14, _f15);
     858  
     859  #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) \
     860    values_ ## TYPE .f0 = _f0; \
     861    values_ ## TYPE .f1 = _f1; \
     862    values_ ## TYPE .f2 = _f2; \
     863    values_ ## TYPE .f3 = _f3; \
     864    values_ ## TYPE .f4 = _f4; \
     865    values_ ## TYPE .f5 = _f5; \
     866    values_ ## TYPE .f6 = _f6; \
     867    values_ ## TYPE .f7 = _f7; \
     868    values_ ## TYPE .f8 = _f8; \
     869    values_ ## TYPE .f9 = _f9; \
     870    values_ ## TYPE .f10 = _f10; \
     871    values_ ## TYPE .f11 = _f11; \
     872    values_ ## TYPE .f12 = _f12; \
     873    values_ ## TYPE .f13 = _f13; \
     874    values_ ## TYPE .f14 = _f14; \
     875    values_ ## TYPE .f15 = _f15; \
     876    values_ ## TYPE .f16 = _f16; \
     877    values_ ## TYPE .f17 = _f17; \
     878    values_ ## TYPE .f18 = _f18; \
     879    values_ ## TYPE .f19 = _f19; \
     880    WRAP_CALL(_func1) (_f0, _f1, _f2, _f3, _f4, _f5, _f6, _f7, _f8, _f9, _f10, _f11, _f12, _f13, _f14, _f15, _f16, _f17, _f18, _f19); \
     881    \
     882    clear_float_registers; \
     883    fregs.F0._ ## TYPE [0] = _f0; \
     884    fregs.F1._ ## TYPE [0] = _f1; \
     885    fregs.F2._ ## TYPE [0] = _f2; \
     886    fregs.F3._ ## TYPE [0] = _f3; \
     887    fregs.F4._ ## TYPE [0] = _f4; \
     888    fregs.F5._ ## TYPE [0] = _f5; \
     889    fregs.F6._ ## TYPE [0] = _f6; \
     890    fregs.F7._ ## TYPE [0] = _f7; \
     891    num_fregs = 8; \
     892    WRAP_CALL(_func2) (_f0, _f1, _f2, _f3, _f4, _f5, _f6, _f7, _f8, _f9, _f10, _f11, _f12, _f13, _f14, _f15, _f16, _f17, _f18, _f19);
     893  
     894  #define def_check_x87_passing8(_f0, _f1, _f2, _f3, _f4, _f5, _f6, _f7, _func1, _func2, TYPE) \
     895    values_ ## TYPE .f0 = _f0; \
     896    values_ ## TYPE .f1 = _f1; \
     897    values_ ## TYPE .f2 = _f2; \
     898    values_ ## TYPE .f3 = _f3; \
     899    values_ ## TYPE .f4 = _f4; \
     900    values_ ## TYPE .f5 = _f5; \
     901    values_ ## TYPE .f6 = _f6; \
     902    values_ ## TYPE .f7 = _f7; \
     903    WRAP_CALL(_func1) (_f0, _f1, _f2, _f3, _f4, _f5, _f6, _f7); \
     904    \
     905    clear_x87_registers; \
     906    num_fregs = 0; \
     907    WRAP_CALL(_func2) (_f0, _f1, _f2, _f3, _f4, _f5, _f6, _f7);
     908  
     909  #define def_check_x87_passing16(_f0, _f1, _f2, _f3, _f4, _f5, _f6, _f7, _f8, _f9, _f10, _f11, _f12, _f13, _f14, _f15, _func1, _func2, TYPE) \
     910    values_ ## TYPE .f0 = _f0; \
     911    values_ ## TYPE .f1 = _f1; \
     912    values_ ## TYPE .f2 = _f2; \
     913    values_ ## TYPE .f3 = _f3; \
     914    values_ ## TYPE .f4 = _f4; \
     915    values_ ## TYPE .f5 = _f5; \
     916    values_ ## TYPE .f6 = _f6; \
     917    values_ ## TYPE .f7 = _f7; \
     918    values_ ## TYPE .f8 = _f8; \
     919    values_ ## TYPE .f9 = _f9; \
     920    values_ ## TYPE .f10 = _f10; \
     921    values_ ## TYPE .f11 = _f11; \
     922    values_ ## TYPE .f12 = _f12; \
     923    values_ ## TYPE .f13 = _f13; \
     924    values_ ## TYPE .f14 = _f14; \
     925    values_ ## TYPE .f15 = _f15; \
     926    WRAP_CALL(_func1) (_f0, _f1, _f2, _f3, _f4, _f5, _f6, _f7, _f8, _f9, _f10, _f11, _f12, _f13, _f14, _f15); \
     927    \
     928    clear_x87_registers; \
     929    num_fregs = 0; \
     930    WRAP_CALL(_func2) (_f0, _f1, _f2, _f3, _f4, _f5, _f6, _f7, _f8, _f9, _f10, _f11, _f12, _f13, _f14, _f15);
     931  
     932  #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) \
     933    values_ ## TYPE .f0 = _f0; \
     934    values_ ## TYPE .f1 = _f1; \
     935    values_ ## TYPE .f2 = _f2; \
     936    values_ ## TYPE .f3 = _f3; \
     937    values_ ## TYPE .f4 = _f4; \
     938    values_ ## TYPE .f5 = _f5; \
     939    values_ ## TYPE .f6 = _f6; \
     940    values_ ## TYPE .f7 = _f7; \
     941    values_ ## TYPE .f8 = _f8; \
     942    values_ ## TYPE .f9 = _f9; \
     943    values_ ## TYPE .f10 = _f10; \
     944    values_ ## TYPE .f11 = _f11; \
     945    values_ ## TYPE .f12 = _f12; \
     946    values_ ## TYPE .f13 = _f13; \
     947    values_ ## TYPE .f14 = _f14; \
     948    values_ ## TYPE .f15 = _f15; \
     949    values_ ## TYPE .f16 = _f16; \
     950    values_ ## TYPE .f17 = _f17; \
     951    values_ ## TYPE .f18 = _f18; \
     952    values_ ## TYPE .f19 = _f19; \
     953    WRAP_CALL(_func1) (_f0, _f1, _f2, _f3, _f4, _f5, _f6, _f7, _f8, _f9, _f10, _f11, _f12, _f13, _f14, _f15, _f16, _f17, _f18, _f19); \
     954    \
     955    clear_x87_registers; \
     956    num_fregs = 0; \
     957    WRAP_CALL(_func2) (_f0, _f1, _f2, _f3, _f4, _f5, _f6, _f7, _f8, _f9, _f10, _f11, _f12, _f13, _f14, _f15, _f16, _f17, _f18, _f19);
     958  
     959  void
     960  test_float16_on_stack ()
     961  {
     962    def_check_float16_passing8 (32, 33, 34, 35, 36, 37, 38, 39,
     963  			      fun_check_float16_passing_8_values,
     964  			      fun_check_float16_passing_8_regs, _Float16);
     965  
     966    def_check_float16_passing16 (32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
     967  			       44, 45, 46, 47,
     968  			       fun_check_float16_passing_16_values,
     969  			       fun_check_float16_passing_16_regs, _Float16);
     970  }
     971  
     972  void
     973  test_too_many_float16 ()
     974  {
     975    def_check_float16_passing20 (32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
     976  			       44, 45, 46, 47, 48, 49, 50, 51,
     977  			       fun_check_float16_passing_20_values,
     978  			       fun_check_float16_passing_20_regs, _Float16);
     979  }
     980  
     981  void
     982  test_floats_on_stack ()
     983  {
     984    def_check_float_passing8 (32, 33, 34, 35, 36, 37, 38, 39,
     985  			    fun_check_float_passing_float8_values,
     986  			    fun_check_float_passing_float8_regs, float);
     987  
     988    def_check_float_passing16 (32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
     989  			     44, 45, 46, 47,
     990  			     fun_check_float_passing_float16_values,
     991  			     fun_check_float_passing_float16_regs, float);
     992  }
     993  
     994  void
     995  test_too_many_floats ()
     996  {
     997    def_check_float_passing20 (32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
     998  			     44, 45, 46, 47, 48, 49, 50, 51,
     999  			     fun_check_float_passing_float20_values,
    1000  			     fun_check_float_passing_float20_regs, float);
    1001  }
    1002  
    1003  void
    1004  test_doubles_on_stack ()
    1005  {
    1006    def_check_float_passing8 (32, 33, 34, 35, 36, 37, 38, 39,
    1007  			    fun_check_float_passing_double8_values,
    1008  			    fun_check_float_passing_double8_regs, double);
    1009  
    1010    def_check_float_passing16 (32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
    1011  			     44, 45, 46, 47,
    1012  			     fun_check_float_passing_double16_values,
    1013  			     fun_check_float_passing_double16_regs, double);
    1014  }
    1015  
    1016  void
    1017  test_too_many_doubles ()
    1018  {
    1019    def_check_float_passing20 (32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
    1020  			     44, 45, 46, 47, 48, 49, 50, 51,
    1021  			     fun_check_float_passing_double20_values,
    1022  			     fun_check_float_passing_double20_regs, double);
    1023  }
    1024  
    1025  void
    1026  test_long_doubles_on_stack ()
    1027  {
    1028    def_check_x87_passing8 (32, 33, 34, 35, 36, 37, 38, 39,
    1029  			  fun_check_x87_passing_ldouble8_values,
    1030  			  fun_check_x87_passing_ldouble8_regs, ldouble);
    1031  }
    1032  
    1033  void
    1034  test_too_many_long_doubles ()
    1035  {
    1036    def_check_x87_passing20 (32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
    1037  			   45, 46, 47, 48, 49, 50, 51,
    1038  			   fun_check_x87_passing_ldouble20_values,
    1039  			   fun_check_x87_passing_ldouble20_regs, ldouble);
    1040  }
    1041  
    1042  void
    1043  test_float128s_on_stack ()
    1044  {
    1045  }
    1046  
    1047  void
    1048  test_too_many_float128s ()
    1049  {
    1050  }
    1051  
    1052  
    1053  static void
    1054  do_test (void)
    1055  {
    1056    test_float16_on_stack ();
    1057    test_too_many_float16 ();
    1058    test_floats_on_stack ();
    1059    test_too_many_floats ();
    1060    test_doubles_on_stack ();
    1061    test_too_many_doubles ();
    1062    test_long_doubles_on_stack ();
    1063    test_too_many_long_doubles ();
    1064    test_float128s_on_stack ();
    1065    test_too_many_float128s ();
    1066  }