1 // Some convenient things to return:
2 static char *g_first_pointer = "I am the first";
3 static char *g_second_pointer = "I am the second";
5 // First we have some simple functions that return standard types, ints, floats and doubles.
6 // We have a function calling a function in a few cases to test that if you stop in the
7 // inner function then do "up/fin" you get the return value from the outer-most frame.
10 inner_sint (int value)
16 outer_sint (int value)
18 int outer_value = 2 * inner_sint (value);
23 inner_float (float value)
29 outer_float (float value)
31 float outer_value = 2 * inner_float(value);
36 return_double (double value)
42 return_long_double (long double value)
48 return_pointer (char *value)
59 return_one_int (struct one_int value)
71 return_two_int (struct two_int value)
84 return_three_int (struct three_int value)
98 return_four_int (struct four_int value)
113 return_five_int (struct five_int value)
118 struct one_int_one_double
124 struct one_int_one_double
125 return_one_int_one_double (struct one_int_one_double value)
130 struct one_int_one_double_one_int
137 struct one_int_one_double_one_int
138 return_one_int_one_double_one_int (struct one_int_one_double_one_int value)
143 struct one_short_one_double_one_short
150 struct one_short_one_double_one_short
151 return_one_short_one_double_one_short (struct one_short_one_double_one_short value)
156 struct three_short_one_float
164 struct three_short_one_float
165 return_three_short_one_float (struct three_short_one_float value)
170 struct one_int_one_float_one_int
177 struct one_int_one_float_one_int
178 return_one_int_one_float_one_int (struct one_int_one_float_one_int value)
183 struct one_float_one_int_one_float
190 struct one_float_one_int_one_float
191 return_one_float_one_int_one_float (struct one_float_one_int_one_float value)
196 struct one_double_two_float
203 struct one_double_two_float
204 return_one_double_two_float (struct one_double_two_float value)
216 return_two_double (struct two_double value)
228 return_two_float (struct two_float value)
233 struct one_int_one_double_packed
237 } __attribute__((__packed__));
239 struct one_int_one_double_packed
240 return_one_int_one_double_packed (struct one_int_one_double_packed value)
245 struct one_int_one_long
251 struct one_int_one_long
252 return_one_int_one_long (struct one_int_one_long value)
263 return_one_pointer (struct one_pointer value)
275 return_two_pointer (struct two_pointer value)
280 struct one_float_one_pointer
286 struct one_float_one_pointer
287 return_one_float_one_pointer (struct one_float_one_pointer value)
292 struct one_int_one_pointer
298 struct one_int_one_pointer
299 return_one_int_one_pointer (struct one_int_one_pointer value)
304 typedef float vector_size_float32_8 __attribute__((__vector_size__(8)));
305 typedef float vector_size_float32_16 __attribute__((__vector_size__(16)));
306 typedef float vector_size_float32_32 __attribute__((__vector_size__(32)));
308 typedef float ext_vector_size_float32_2 __attribute__((ext_vector_type(2)));
309 typedef float ext_vector_size_float32_4 __attribute__((ext_vector_type(4)));
310 typedef float ext_vector_size_float32_8 __attribute__((ext_vector_type(8)));
312 vector_size_float32_8
313 return_vector_size_float32_8 (vector_size_float32_8 value)
318 vector_size_float32_16
319 return_vector_size_float32_16 (vector_size_float32_16 value)
324 vector_size_float32_32
325 return_vector_size_float32_32 (vector_size_float32_32 value)
330 ext_vector_size_float32_2
331 return_ext_vector_size_float32_2 (ext_vector_size_float32_2 value)
336 ext_vector_size_float32_4
337 return_ext_vector_size_float32_4 (ext_vector_size_float32_4 value)
342 ext_vector_size_float32_8
343 return_ext_vector_size_float32_8 (ext_vector_size_float32_8 value)
351 int first_int = 123456;
352 int second_int = 234567;
354 outer_sint (first_int);
355 outer_sint (second_int);
357 float first_float_value = 12.34;
358 float second_float_value = 23.45;
360 outer_float (first_float_value);
361 outer_float (second_float_value);
363 double double_value = -23.45;
365 return_double (double_value);
367 return_pointer(g_first_pointer);
369 long double long_double_value = -3456789.987654321;
371 return_long_double (long_double_value);
373 // Okay, now the structures:
374 return_one_int ((struct one_int) {10});
375 return_two_int ((struct two_int) {10, 20});
376 return_three_int ((struct three_int) {10, 20, 30});
377 return_four_int ((struct four_int) {10, 20, 30, 40});
378 return_five_int ((struct five_int) {10, 20, 30, 40, 50});
380 return_two_double ((struct two_double) {10.0, 20.0});
381 return_one_double_two_float ((struct one_double_two_float) {10.0, 20.0, 30.0});
382 return_one_int_one_float_one_int ((struct one_int_one_float_one_int) {10, 20.0, 30});
384 return_one_pointer ((struct one_pointer) {g_first_pointer});
385 return_two_pointer ((struct two_pointer) {g_first_pointer, g_second_pointer});
386 return_one_float_one_pointer ((struct one_float_one_pointer) {10.0, g_first_pointer});
387 return_one_int_one_pointer ((struct one_int_one_pointer) {10, g_first_pointer});
388 return_three_short_one_float ((struct three_short_one_float) {10, 20, 30, 40.0});
390 return_one_int_one_double ((struct one_int_one_double) {10, 20.0});
391 return_one_int_one_double_one_int ((struct one_int_one_double_one_int) {10, 20.0, 30});
392 return_one_short_one_double_one_short ((struct one_short_one_double_one_short) {10, 20.0, 30});
393 return_one_float_one_int_one_float ((struct one_float_one_int_one_float) {10.0, 20, 30.0});
394 return_two_float ((struct two_float) { 10.0, 20.0});
395 return_one_int_one_double_packed ((struct one_int_one_double_packed) {10, 20.0});
396 return_one_int_one_long ((struct one_int_one_long) {10, 20});
398 return_vector_size_float32_8 (( vector_size_float32_8 ){1.5, 2.25});
399 return_vector_size_float32_16 (( vector_size_float32_16 ){1.5, 2.25, 4.125, 8.0625});
400 return_vector_size_float32_32 (( vector_size_float32_32 ){1.5, 2.25, 4.125, 8.0625, 7.89, 8.52, 6.31, 9.12});
402 return_ext_vector_size_float32_2 ((ext_vector_size_float32_2){ 16.5, 32.25});
403 return_ext_vector_size_float32_4 ((ext_vector_size_float32_4){ 16.5, 32.25, 64.125, 128.0625});
404 return_ext_vector_size_float32_8 ((ext_vector_size_float32_8){ 16.5, 32.25, 64.125, 128.0625, 1.59, 3.57, 8.63, 9.12 });