github.com/prattmic/llgo-embedded@v0.0.0-20150820070356-41cfecea0e1e/third_party/gofrontend/libffi/testsuite/libffi.call/huge_struct.c (about)

     1  /*	Area:			ffi_call, closure_call
     2  	Purpose:		Check large structure returns.
     3  	Limitations:	none.
     4  	PR:				none.
     5  	Originator:		Blake Chaffin	6/18/2007
     6  */
     7  
     8  /* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */
     9  /* { dg-options -mlong-double-128 { target powerpc64*-*-linux* } } */
    10  /* { dg-options -Wformat=0 { target moxie*-*-elf } } */
    11  
    12  #include "ffitest.h"
    13  
    14  typedef	struct BigStruct{
    15  	uint8_t		a;
    16  	int8_t		b;
    17  	uint16_t	c;
    18  	int16_t		d;
    19  	uint32_t	e;
    20  	int32_t		f;
    21  	uint64_t	g;
    22  	int64_t		h;
    23  	float		i;
    24  	double		j;
    25  	long double	k;
    26  	char*		l;
    27  	uint8_t		m;
    28  	int8_t		n;
    29  	uint16_t	o;
    30  	int16_t		p;
    31  	uint32_t	q;
    32  	int32_t		r;
    33  	uint64_t	s;
    34  	int64_t		t;
    35  	float		u;
    36  	double		v;
    37  	long double	w;
    38  	char*		x;
    39  	uint8_t		y;
    40  	int8_t		z;
    41  	uint16_t	aa;
    42  	int16_t		bb;
    43  	uint32_t	cc;
    44  	int32_t		dd;
    45  	uint64_t	ee;
    46  	int64_t		ff;
    47  	float		gg;
    48  	double		hh;
    49  	long double	ii;
    50  	char*		jj;
    51  	uint8_t		kk;
    52  	int8_t		ll;
    53  	uint16_t	mm;
    54  	int16_t		nn;
    55  	uint32_t	oo;
    56  	int32_t		pp;
    57  	uint64_t	qq;
    58  	int64_t		rr;
    59  	float		ss;
    60  	double		tt;
    61  	long double	uu;
    62  	char*		vv;
    63  	uint8_t		ww;
    64  	int8_t		xx;
    65  } BigStruct;
    66  
    67  BigStruct
    68  test_large_fn(
    69  	uint8_t		ui8_1,
    70  	int8_t		si8_1,
    71  	uint16_t	ui16_1,
    72  	int16_t		si16_1,
    73  	uint32_t	ui32_1,
    74  	int32_t		si32_1,
    75  	uint64_t	ui64_1,
    76  	int64_t		si64_1,
    77  	float		f_1,
    78  	double		d_1,
    79  	long double	ld_1,
    80  	char*		p_1,
    81  	uint8_t		ui8_2,
    82  	int8_t		si8_2,
    83  	uint16_t	ui16_2,
    84  	int16_t		si16_2,
    85  	uint32_t	ui32_2,
    86  	int32_t		si32_2,
    87  	uint64_t	ui64_2,
    88  	int64_t		si64_2,
    89  	float		f_2,
    90  	double		d_2,
    91  	long double	ld_2,
    92  	char*		p_2,
    93  	uint8_t		ui8_3,
    94  	int8_t		si8_3,
    95  	uint16_t	ui16_3,
    96  	int16_t		si16_3,
    97  	uint32_t	ui32_3,
    98  	int32_t		si32_3,
    99  	uint64_t	ui64_3,
   100  	int64_t		si64_3,
   101  	float		f_3,
   102  	double		d_3,
   103  	long double	ld_3,
   104  	char*		p_3,
   105  	uint8_t		ui8_4,
   106  	int8_t		si8_4,
   107  	uint16_t	ui16_4,
   108  	int16_t		si16_4,
   109  	uint32_t	ui32_4,
   110  	int32_t		si32_4,
   111  	uint64_t	ui64_4,
   112  	int64_t		si64_4,
   113  	float		f_4,
   114  	double		d_4,
   115  	long double	ld_4,
   116  	char*		p_4,
   117  	uint8_t		ui8_5,
   118  	int8_t		si8_5)
   119  {
   120  	BigStruct	retVal	= {
   121  		ui8_1 + 1, si8_1 + 1, ui16_1 + 1, si16_1 + 1, ui32_1 + 1, si32_1 + 1,
   122  			ui64_1 + 1, si64_1 + 1, f_1 + 1, d_1 + 1, ld_1 + 1, (char*)((intptr_t)p_1 + 1), 
   123  		ui8_2 + 2, si8_2 + 2, ui16_2 + 2, si16_2 + 2, ui32_2 + 2, si32_2 + 2,
   124  			ui64_2 + 2, si64_2 + 2, f_2 + 2, d_2 + 2, ld_2 + 2, (char*)((intptr_t)p_2 + 2), 
   125  		ui8_3 + 3, si8_3 + 3, ui16_3 + 3, si16_3 + 3, ui32_3 + 3, si32_3 + 3,
   126  			ui64_3 + 3, si64_3 + 3, f_3 + 3, d_3 + 3, ld_3 + 3, (char*)((intptr_t)p_3 + 3), 
   127  		ui8_4 + 4, si8_4 + 4, ui16_4 + 4, si16_4 + 4, ui32_4 + 4, si32_4 + 4,
   128  			ui64_4 + 4, si64_4 + 4, f_4 + 4, d_4 + 4, ld_4 + 4, (char*)((intptr_t)p_4 + 4), 
   129  		ui8_5 + 5, si8_5 + 5};
   130  
   131  	printf("%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
   132  		"%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
   133  		"%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
   134  		"%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx %" PRIu8 " %" PRId8 ": "
   135  		"%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
   136  		"%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
   137  		"%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
   138  		"%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx %" PRIu8 " %" PRId8 "\n",
   139  	       ui8_1, si8_1, ui16_1, si16_1, ui32_1, si32_1, ui64_1, si64_1, f_1, d_1, ld_1, (unsigned long)p_1,
   140  		ui8_2, si8_2, ui16_2, si16_2, ui32_2, si32_2, ui64_2, si64_2, f_2, d_2, ld_2, (unsigned long)p_2,
   141  		ui8_3, si8_3, ui16_3, si16_3, ui32_3, si32_3, ui64_3, si64_3, f_3, d_3, ld_3, (unsigned long)p_3,
   142  		ui8_4, si8_4, ui16_4, si16_4, ui32_4, si32_4, ui64_4, si64_4, f_4, d_4, ld_4, (unsigned long)p_4, ui8_5, si8_5,
   143  		retVal.a, retVal.b, retVal.c, retVal.d, retVal.e, retVal.f,
   144  	       retVal.g, retVal.h, retVal.i, retVal.j, retVal.k, (unsigned long)retVal.l,
   145  		retVal.m, retVal.n, retVal.o, retVal.p, retVal.q, retVal.r,
   146  	       retVal.s, retVal.t, retVal.u, retVal.v, retVal.w, (unsigned long)retVal.x,
   147  		retVal.y, retVal.z, retVal.aa, retVal.bb, retVal.cc, retVal.dd,
   148  	       retVal.ee, retVal.ff, retVal.gg, retVal.hh, retVal.ii, (unsigned long)retVal.jj,
   149  		retVal.kk, retVal.ll, retVal.mm, retVal.nn, retVal.oo, retVal.pp,
   150  	       retVal.qq, retVal.rr, retVal.ss, retVal.tt, retVal.uu, (unsigned long)retVal.vv, retVal.ww, retVal.xx);
   151  
   152  	return	retVal;
   153  }
   154  
   155  static void
   156  cls_large_fn(ffi_cif* cif __UNUSED__, void* resp, void** args, void* userdata __UNUSED__)
   157  {
   158  	uint8_t		ui8_1	= *(uint8_t*)args[0];
   159  	int8_t		si8_1	= *(int8_t*)args[1];
   160  	uint16_t	ui16_1	= *(uint16_t*)args[2];
   161  	int16_t		si16_1	= *(int16_t*)args[3];
   162  	uint32_t	ui32_1	= *(uint32_t*)args[4];
   163  	int32_t		si32_1	= *(int32_t*)args[5];
   164  	uint64_t	ui64_1	= *(uint64_t*)args[6];
   165  	int64_t		si64_1	= *(int64_t*)args[7];
   166  	float		f_1		= *(float*)args[8];
   167  	double		d_1		= *(double*)args[9];
   168  	long double	ld_1	= *(long double*)args[10];
   169  	char*		p_1		= *(char**)args[11];
   170  	uint8_t		ui8_2	= *(uint8_t*)args[12];
   171  	int8_t		si8_2	= *(int8_t*)args[13];
   172  	uint16_t	ui16_2	= *(uint16_t*)args[14];
   173  	int16_t		si16_2	= *(int16_t*)args[15];
   174  	uint32_t	ui32_2	= *(uint32_t*)args[16];
   175  	int32_t		si32_2	= *(int32_t*)args[17];
   176  	uint64_t	ui64_2	= *(uint64_t*)args[18];
   177  	int64_t		si64_2	= *(int64_t*)args[19];
   178  	float		f_2		= *(float*)args[20];
   179  	double		d_2		= *(double*)args[21];
   180  	long double	ld_2	= *(long double*)args[22];
   181  	char*		p_2		= *(char**)args[23];
   182  	uint8_t		ui8_3	= *(uint8_t*)args[24];
   183  	int8_t		si8_3	= *(int8_t*)args[25];
   184  	uint16_t	ui16_3	= *(uint16_t*)args[26];
   185  	int16_t		si16_3	= *(int16_t*)args[27];
   186  	uint32_t	ui32_3	= *(uint32_t*)args[28];
   187  	int32_t		si32_3	= *(int32_t*)args[29];
   188  	uint64_t	ui64_3	= *(uint64_t*)args[30];
   189  	int64_t		si64_3	= *(int64_t*)args[31];
   190  	float		f_3		= *(float*)args[32];
   191  	double		d_3		= *(double*)args[33];
   192  	long double	ld_3	= *(long double*)args[34];
   193  	char*		p_3		= *(char**)args[35];
   194  	uint8_t		ui8_4	= *(uint8_t*)args[36];
   195  	int8_t		si8_4	= *(int8_t*)args[37];
   196  	uint16_t	ui16_4	= *(uint16_t*)args[38];
   197  	int16_t		si16_4	= *(int16_t*)args[39];
   198  	uint32_t	ui32_4	= *(uint32_t*)args[40];
   199  	int32_t		si32_4	= *(int32_t*)args[41];
   200  	uint64_t	ui64_4	= *(uint64_t*)args[42];
   201  	int64_t		si64_4	= *(int64_t*)args[43];
   202  	float		f_4		= *(float*)args[44];
   203  	double		d_4		= *(double*)args[45];
   204  	long double	ld_4	= *(long double*)args[46];
   205  	char*		p_4		= *(char**)args[47];
   206  	uint8_t		ui8_5	= *(uint8_t*)args[48];
   207  	int8_t		si8_5	= *(int8_t*)args[49];
   208  
   209  	*(BigStruct*)resp = test_large_fn(
   210  		ui8_1, si8_1, ui16_1, si16_1, ui32_1, si32_1, ui64_1, si64_1, f_1, d_1, ld_1, p_1,
   211  		ui8_2, si8_2, ui16_2, si16_2, ui32_2, si32_2, ui64_2, si64_2, f_2, d_2, ld_2, p_2,
   212  		ui8_3, si8_3, ui16_3, si16_3, ui32_3, si32_3, ui64_3, si64_3, f_3, d_3, ld_3, p_3,
   213  		ui8_4, si8_4, ui16_4, si16_4, ui32_4, si32_4, ui64_4, si64_4, f_4, d_4, ld_4, p_4,
   214  		ui8_5, si8_5);
   215  }
   216  
   217  int
   218  main(int argc __UNUSED__, const char** argv __UNUSED__)
   219  {
   220          void *code;
   221  	ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
   222  
   223  	ffi_cif		cif;
   224  	ffi_type*	argTypes[51];
   225  	void*		argValues[51];
   226  
   227  	ffi_type	ret_struct_type;
   228  	ffi_type*	st_fields[51];
   229  	BigStruct	retVal;
   230  
   231  	uint8_t		ui8		= 1;
   232  	int8_t		si8		= 2;
   233  	uint16_t	ui16	= 3;
   234  	int16_t		si16	= 4;
   235  	uint32_t	ui32	= 5;
   236  	int32_t		si32	= 6;
   237  	uint64_t	ui64	= 7;
   238  	int64_t		si64	= 8;
   239  	float		f		= 9;
   240  	double		d		= 10;
   241  	long double	ld		= 11;
   242  	char*		p		= (char*)0x12345678;
   243  
   244  	memset (&retVal, 0, sizeof(retVal));
   245  
   246  	ret_struct_type.size = 0;
   247  	ret_struct_type.alignment = 0;
   248  	ret_struct_type.type = FFI_TYPE_STRUCT;
   249  	ret_struct_type.elements = st_fields;
   250  
   251  	st_fields[0]	= st_fields[12]	= st_fields[24]	= st_fields[36]	= st_fields[48]	= &ffi_type_uint8;
   252  	st_fields[1]	= st_fields[13]	= st_fields[25]	= st_fields[37]	= st_fields[49]	= &ffi_type_sint8;
   253  	st_fields[2]	= st_fields[14]	= st_fields[26]	= st_fields[38]	= &ffi_type_uint16;
   254  	st_fields[3]	= st_fields[15]	= st_fields[27]	= st_fields[39]	= &ffi_type_sint16;
   255  	st_fields[4]	= st_fields[16]	= st_fields[28]	= st_fields[40]	= &ffi_type_uint32;
   256  	st_fields[5]	= st_fields[17]	= st_fields[29]	= st_fields[41]	= &ffi_type_sint32;
   257  	st_fields[6]	= st_fields[18]	= st_fields[30]	= st_fields[42]	= &ffi_type_uint64;
   258  	st_fields[7]	= st_fields[19]	= st_fields[31]	= st_fields[43]	= &ffi_type_sint64;
   259  	st_fields[8]	= st_fields[20]	= st_fields[32]	= st_fields[44]	= &ffi_type_float;
   260  	st_fields[9]	= st_fields[21]	= st_fields[33]	= st_fields[45]	= &ffi_type_double;
   261  	st_fields[10]	= st_fields[22]	= st_fields[34]	= st_fields[46]	= &ffi_type_longdouble;
   262  	st_fields[11]	= st_fields[23]	= st_fields[35]	= st_fields[47]	= &ffi_type_pointer;
   263  
   264  	st_fields[50] = NULL;
   265  
   266  	argTypes[0]		= argTypes[12]	= argTypes[24]	= argTypes[36]	= argTypes[48]	= &ffi_type_uint8;
   267  	argValues[0]	= argValues[12]	= argValues[24]	= argValues[36]	= argValues[48]	= &ui8;
   268  	argTypes[1]		= argTypes[13]	= argTypes[25]	= argTypes[37]	= argTypes[49]	= &ffi_type_sint8;
   269  	argValues[1]	= argValues[13]	= argValues[25]	= argValues[37]	= argValues[49]	= &si8;
   270  	argTypes[2]		= argTypes[14]	= argTypes[26]	= argTypes[38]	= &ffi_type_uint16;
   271  	argValues[2]	= argValues[14]	= argValues[26]	= argValues[38]	= &ui16;
   272  	argTypes[3]		= argTypes[15]	= argTypes[27]	= argTypes[39]	= &ffi_type_sint16;
   273  	argValues[3]	= argValues[15]	= argValues[27]	= argValues[39]	= &si16;
   274  	argTypes[4]		= argTypes[16]	= argTypes[28]	= argTypes[40]	= &ffi_type_uint32;
   275  	argValues[4]	= argValues[16]	= argValues[28]	= argValues[40]	= &ui32;
   276  	argTypes[5]		= argTypes[17]	= argTypes[29]	= argTypes[41]	= &ffi_type_sint32;
   277  	argValues[5]	= argValues[17]	= argValues[29]	= argValues[41]	= &si32;
   278  	argTypes[6]		= argTypes[18]	= argTypes[30]	= argTypes[42]	= &ffi_type_uint64;
   279  	argValues[6]	= argValues[18]	= argValues[30]	= argValues[42]	= &ui64;
   280  	argTypes[7]		= argTypes[19]	= argTypes[31]	= argTypes[43]	= &ffi_type_sint64;
   281  	argValues[7]	= argValues[19]	= argValues[31]	= argValues[43]	= &si64;
   282  	argTypes[8]		= argTypes[20]	= argTypes[32]	= argTypes[44]	= &ffi_type_float;
   283  	argValues[8]	= argValues[20]	= argValues[32]	= argValues[44]	= &f;
   284  	argTypes[9]		= argTypes[21]	= argTypes[33]	= argTypes[45]	= &ffi_type_double;
   285  	argValues[9]	= argValues[21]	= argValues[33]	= argValues[45]	= &d;
   286  	argTypes[10]	= argTypes[22]	= argTypes[34]	= argTypes[46]	= &ffi_type_longdouble;
   287  	argValues[10]	= argValues[22]	= argValues[34]	= argValues[46]	= &ld;
   288  	argTypes[11]	= argTypes[23]	= argTypes[35]	= argTypes[47]	= &ffi_type_pointer;
   289  	argValues[11]	= argValues[23]	= argValues[35]	= argValues[47]	= &p;
   290  
   291  	argTypes[50]	= NULL;
   292  	argValues[50]	= NULL;
   293  
   294  	CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 50, &ret_struct_type, argTypes) == FFI_OK);
   295  
   296  	ffi_call(&cif, FFI_FN(test_large_fn), &retVal, argValues);
   297  	/* { dg-output "1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2: 2 3 4 5 6 7 8 9 10 11 12 0x12345679 3 4 5 6 7 8 9 10 11 12 13 0x1234567a 4 5 6 7 8 9 10 11 12 13 14 0x1234567b 5 6 7 8 9 10 11 12 13 14 15 0x1234567c 6 7" } */
   298  	printf("res: %" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
   299  		"%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
   300  		"%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
   301  		"%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx %" PRIu8 " %" PRId8 "\n",
   302  		retVal.a, retVal.b, retVal.c, retVal.d, retVal.e, retVal.f,
   303  	       retVal.g, retVal.h, retVal.i, retVal.j, retVal.k, (unsigned long)retVal.l,
   304  		retVal.m, retVal.n, retVal.o, retVal.p, retVal.q, retVal.r,
   305  	       retVal.s, retVal.t, retVal.u, retVal.v, retVal.w, (unsigned long)retVal.x,
   306  		retVal.y, retVal.z, retVal.aa, retVal.bb, retVal.cc, retVal.dd,
   307  	       retVal.ee, retVal.ff, retVal.gg, retVal.hh, retVal.ii, (unsigned long)retVal.jj,
   308  		retVal.kk, retVal.ll, retVal.mm, retVal.nn, retVal.oo, retVal.pp,
   309  	       retVal.qq, retVal.rr, retVal.ss, retVal.tt, retVal.uu, (unsigned long)retVal.vv, retVal.ww, retVal.xx);
   310  	/* { dg-output "\nres: 2 3 4 5 6 7 8 9 10 11 12 0x12345679 3 4 5 6 7 8 9 10 11 12 13 0x1234567a 4 5 6 7 8 9 10 11 12 13 14 0x1234567b 5 6 7 8 9 10 11 12 13 14 15 0x1234567c 6 7" } */
   311  
   312  	CHECK(ffi_prep_closure_loc(pcl, &cif, cls_large_fn, NULL, code) == FFI_OK);
   313  
   314  	retVal	= ((BigStruct(*)(
   315  		uint8_t, int8_t, uint16_t, int16_t, uint32_t, int32_t, uint64_t, int64_t, float, double, long double, char*,
   316  		uint8_t, int8_t, uint16_t, int16_t, uint32_t, int32_t, uint64_t, int64_t, float, double, long double, char*,
   317  		uint8_t, int8_t, uint16_t, int16_t, uint32_t, int32_t, uint64_t, int64_t, float, double, long double, char*,
   318  		uint8_t, int8_t, uint16_t, int16_t, uint32_t, int32_t, uint64_t, int64_t, float, double, long double, char*,
   319  		uint8_t, int8_t))(code))(
   320  		ui8, si8, ui16, si16, ui32, si32, ui64, si64, f, d, ld, p,
   321  		ui8, si8, ui16, si16, ui32, si32, ui64, si64, f, d, ld, p,
   322  		ui8, si8, ui16, si16, ui32, si32, ui64, si64, f, d, ld, p,
   323  		ui8, si8, ui16, si16, ui32, si32, ui64, si64, f, d, ld, p,
   324  		ui8, si8);
   325  	/* { dg-output "\n1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2: 2 3 4 5 6 7 8 9 10 11 12 0x12345679 3 4 5 6 7 8 9 10 11 12 13 0x1234567a 4 5 6 7 8 9 10 11 12 13 14 0x1234567b 5 6 7 8 9 10 11 12 13 14 15 0x1234567c 6 7" } */
   326  	printf("res: %" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
   327  		"%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
   328  		"%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
   329  		"%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx %" PRIu8 " %" PRId8 "\n",
   330  		retVal.a, retVal.b, retVal.c, retVal.d, retVal.e, retVal.f,
   331  	       retVal.g, retVal.h, retVal.i, retVal.j, retVal.k, (unsigned long)retVal.l,
   332  		retVal.m, retVal.n, retVal.o, retVal.p, retVal.q, retVal.r,
   333  	       retVal.s, retVal.t, retVal.u, retVal.v, retVal.w, (unsigned long)retVal.x,
   334  		retVal.y, retVal.z, retVal.aa, retVal.bb, retVal.cc, retVal.dd,
   335  	       retVal.ee, retVal.ff, retVal.gg, retVal.hh, retVal.ii, (unsigned long)retVal.jj,
   336  		retVal.kk, retVal.ll, retVal.mm, retVal.nn, retVal.oo, retVal.pp,
   337  	       retVal.qq, retVal.rr, retVal.ss, retVal.tt, retVal.uu, (unsigned long)retVal.vv, retVal.ww, retVal.xx);
   338  	/* { dg-output "\nres: 2 3 4 5 6 7 8 9 10 11 12 0x12345679 3 4 5 6 7 8 9 10 11 12 13 0x1234567a 4 5 6 7 8 9 10 11 12 13 14 0x1234567b 5 6 7 8 9 10 11 12 13 14 15 0x1234567c 6 7" } */
   339  
   340      return 0;
   341  }