@@ -86,6 +86,12 @@ typedef int bool;
8686#define UNDERSCORE_NAME "false"
8787#endif
8888
89+ #ifdef HAVE_FLOAT16_DEF
90+ #define HAVE_FLOAT16 "true"
91+ #else
92+ #define HAVE_FLOAT16 "false"
93+ #endif
94+
8995#endif
9096
9197
@@ -106,8 +112,8 @@ int main(int argc, char **argv)
106112{
107113 int env = argc == 2 && !strcmp (argv [1 ], "--env" );
108114 int alignof_short , alignof_int , alignof_long , alignof_ptr , alignof_enum ,
109- alignof_float , alignof_float32x , alignof_float64x , alignof_double , alignof_longdouble , alignof_float128 ,
110- alignof_floatcomplex , alignof_doublecomplex , alignof_longdoublecomplex , alignof_float128complex ,
115+ alignof_float , alignof_float32x , alignof_float64x , alignof_double , alignof_longdouble , alignof_float128 , alignof_float16 ,
116+ alignof_floatcomplex , alignof_doublecomplex , alignof_longdoublecomplex , alignof_float128complex , alignof_float16complex ,
111117 sizeof_fun ,
112118 alignof_fun , alignof_str , alignof_aligned , alignof_longlong ,
113119 little_endian , char_is_unsigned , alignof_bool ;
@@ -231,6 +237,19 @@ int main(int argc, char **argv)
231237 alignof_float128 = (intptr_t )(& ((struct s1 * )0 )-> ld );
232238 }
233239
240+ #ifdef HAVE_FLOAT16_DEF
241+ // The alignment of float16
242+ {
243+ struct s1 {
244+ char c ;
245+ _Float16 ld ;
246+ };
247+ alignof_float16 = (intptr_t )(& ((struct s1 * )0 )-> ld );
248+ }
249+ #else
250+ alignof_float16 = 0 ;
251+ #endif
252+
234253 // The alignment of a float complex
235254 {
236255 struct floatstruct {
@@ -267,6 +286,19 @@ int main(int argc, char **argv)
267286 alignof_float128complex = (intptr_t )(& ((struct s1 * )0 )-> ld );
268287 }
269288
289+ #ifdef HAVE_FLOAT16_DEF
290+ // The alignment of float16 complex
291+ {
292+ struct s1 {
293+ char c ;
294+ _Float16 _Complex ld ;
295+ };
296+ alignof_float16complex = (intptr_t )(& ((struct s1 * )0 )-> ld );
297+ }
298+ #else
299+ alignof_float16complex = 0 ;
300+ #endif
301+
270302
271303 alignof_str = __alignof("a string" );
272304 alignof_fun = __alignof(main );
@@ -304,11 +336,11 @@ int main(int argc, char **argv)
304336 {
305337 fprintf (stderr , "Generating CIL_MACHINE machine dependency information string (for CIL)\n" );
306338 printf ("short=%d,%d int=%d,%d long=%d,%d long_long=%d,%d pointer=%d,%d "
307- "alignof_enum=%d float=%d,%d float32x=%d,%d float64x=%d,%d double=%d,%d long_double=%d,%d float128=%d,%d float_complex=%d,%d double_complex=%d,%d long_double_complex=%d,%d float128_complex=%d,%d void=%d "
339+ "alignof_enum=%d float=%d,%d float32x=%d,%d float64x=%d,%d double=%d,%d long_double=%d,%d float128=%d,%d float16=%d,%d float_complex=%d,%d double_complex=%d,%d long_double_complex=%d,%d float128_complex=%d,%d float16_complex =%d,%d void=%d "
308340 "bool=%d,%d fun=%d,%d alignof_string=%d max_alignment=%d size_t=%s "
309341 "wchar_t=%s char16_t=%s char32_t=%s char_signed=%s "
310342 "big_endian=%s __thread_is_keyword=%s __builtin_va_list=%s "
311- "underscore_name=%s\n" ,
343+ "underscore_name=%s have_float16=%s \n" ,
312344 (int )sizeof (short ), alignof_short , (int )sizeof (int ), alignof_int ,
313345 (int )sizeof (long ), alignof_long , (int )sizeof (long long ), alignof_longlong ,
314346 (int )sizeof (int * ), alignof_ptr ,
@@ -322,16 +354,26 @@ int main(int argc, char **argv)
322354 (int )sizeof (float ), alignof_float , (int )sizeof (double ), alignof_double ,
323355 (int )sizeof (long double ), alignof_longdouble ,
324356 (int )sizeof (_Float128 ), alignof_float128 ,
357+ #ifdef HAVE_FLOAT16_DEF
358+ (int )sizeof (_Float16 ), alignof_float16 ,
359+ #else
360+ 0 , 0 ,
361+ #endif
325362 (int )sizeof (float _Complex ), alignof_floatcomplex , (int )sizeof (double _Complex ), alignof_doublecomplex ,
326363 (int )sizeof (long double _Complex ), alignof_longdoublecomplex ,
327364 (int )sizeof (_Float128 _Complex ), alignof_float128complex ,
365+ #ifdef HAVE_FLOAT16_DEF
366+ (int )sizeof (_Float16 _Complex ), alignof_float16complex ,
367+ #else
368+ 0 , 0 ,
369+ #endif
328370 (int )sizeof (void ),
329371 (int )sizeof (bool ), alignof_bool ,
330372 sizeof_fun , alignof_fun , alignof_str , alignof_aligned ,
331373 underscore (TYPE_SIZE_T ), underscore (TYPE_WCHAR_T ), underscore (TYPE_CHAR16_T ), underscore (TYPE_CHAR32_T ),
332374 char_is_unsigned ? "false" : "true" ,
333375 little_endian ? "false" : "true" ,
334- THREAD_IS_KEYWORD , HAVE_BUILTIN_VA_LIST , UNDERSCORE_NAME );
376+ THREAD_IS_KEYWORD , HAVE_BUILTIN_VA_LIST , UNDERSCORE_NAME , HAVE_FLOAT16 );
335377 }
336378 else
337379 {
@@ -359,10 +401,20 @@ int main(int argc, char **argv)
359401 printf ("\t sizeof_double = %d;\n" , (int )sizeof (double ));
360402 printf ("\t sizeof_longdouble = %d;\n" , (int )sizeof (long double ));
361403 printf ("\t sizeof_float128 = %d;\n" , (int )sizeof (_Float128 ));
404+ #ifdef HAVE_FLOAT16_DEF
405+ printf ("\t sizeof_float16 = %d;\n" , (int )sizeof (_Float16 ));
406+ #else
407+ printf ("\t sizeof_float16 = %d;\n" , 0 );
408+ #endif
362409 printf ("\t sizeof_floatcomplex = %d;\n" , (int )sizeof (float _Complex ));
363410 printf ("\t sizeof_doublecomplex = %d;\n" , (int )sizeof (double _Complex ));
364411 printf ("\t sizeof_longdoublecomplex = %d;\n" , (int )sizeof (long double _Complex ));
365412 printf ("\t sizeof_float128complex = %d;\n" , (int )sizeof (_Float128 _Complex ));
413+ #ifdef HAVE_FLOAT16_DEF
414+ printf ("\t sizeof_float16complex = %d;\n" , (int )sizeof (_Float16 _Complex ));
415+ #else
416+ printf ("\t sizeof_float16complex = %d;\n" , 0 );
417+ #endif
366418 printf ("\t sizeof_void = %d;\n" , (int )sizeof (void ));
367419 printf ("\t sizeof_fun = %d;\n" , (int )sizeof_fun );
368420 printf ("\t size_t = \"%s\";\n" , TYPE_SIZE_T );
@@ -386,10 +438,20 @@ int main(int argc, char **argv)
386438 printf ("\t alignof_double = %d;\n" , alignof_double );
387439 printf ("\t alignof_longdouble = %d;\n" , alignof_longdouble );
388440 printf ("\t alignof_float128 = %d;\n" , alignof_float128 );
441+ #ifdef HAVE_FLOAT16_DEF
442+ printf ("\t alignof_float16 = %d;\n" , alignof_float16 );
443+ #else
444+ printf ("\t alignof_float16 = %d;\n" , 0 );
445+ #endif
389446 printf ("\t alignof_floatcomplex = %d;\n" , alignof_floatcomplex );
390447 printf ("\t alignof_doublecomplex = %d;\n" , alignof_doublecomplex );
391448 printf ("\t alignof_longdoublecomplex = %d;\n" , alignof_longdoublecomplex );
392449 printf ("\t alignof_float128complex = %d;\n" , alignof_float128complex );
450+ #ifdef HAVE_FLOAT16_DEF
451+ printf ("\t alignof_float16complex = %d;\n" , alignof_float16complex );
452+ #else
453+ printf ("\t alignof_float16complex = %d;\n" , alignof_float16complex );
454+ #endif
393455 printf ("\t alignof_str = %d;\n" , alignof_str );
394456 printf ("\t alignof_fun = %d;\n" , alignof_fun );
395457 printf ("\t alignof_aligned = %d;\n" , alignof_aligned );
@@ -398,6 +460,7 @@ int main(int argc, char **argv)
398460 printf ("\t __builtin_va_list = %s;\n" , HAVE_BUILTIN_VA_LIST );
399461 printf ("\t __thread_is_keyword = %s;\n" , THREAD_IS_KEYWORD );
400462 printf ("\t little_endian = %s;\n" , little_endian ? "true" : "false" );
463+ printf ("\t have_float16 = %s;\n" , HAVE_FLOAT16 );
401464 }
402465 return 0 ;
403466}
0 commit comments