171SN/A#if __INT_MAX__ != 2147483647 || (__LONG_LONG_MAX__ != 9223372036854775807ll && __LONG_MAX__ != 9223372036854775807ll)
2157SN/Aint main(void) { exit (0); }
371SN/A#else
471SN/A#if __LONG_MAX__ != 9223372036854775807ll
571SN/Atypedef unsigned long long ull;
671SN/A#else
7157SN/Atypedef unsigned long ull;
871SN/A#endif
9157SN/Atypedef unsigned ul;
1071SN/A
1171SN/Aunion fl {
1271SN/A  float	f;
1371SN/A  ul l;
1471SN/A} uf;
1571SN/Aunion dl {
1671SN/A  double d;
1771SN/A  ull ll;
1871SN/A} ud;
1971SN/A
2071SN/Aint failed = 0;
21157SN/A
22157SN/Avoid c(ull d, ul f)
23157SN/A{
2471SN/A  ud.ll = d;
2571SN/A  uf.f = (float) ud.d;
260SN/A  if (uf.l != f)
270SN/A    {
2871SN/A      failed++;
290SN/A    }
300SN/A}
310SN/A
3271SN/Aint main()
330SN/A{
340SN/A  if (sizeof (float) != sizeof (ul)
350SN/A      || sizeof (double) != sizeof (ull))
360SN/A    exit (0);
370SN/A
380SN/A  c(0x3690000000000000ULL, 0x00000000U);
390SN/A#if (defined __arm__ || defined __thumb__) && ! (defined __ARMEB__ || defined __VFP_FP__)
400SN/A  /* The ARM always stores FP numbers in big-wordian format,
410SN/A     even when running in little-byteian mode.  */
420SN/A  c(0x0000000136900000ULL, 0x00000001U);
430SN/A  c(0xffffffff369fffffULL, 0x00000001U);
440SN/A  c(0x0000000036A00000ULL, 0x00000001U);
450SN/A  c(0xffffffff36A7ffffULL, 0x00000001U);
460SN/A  c(0x0000000036A80000ULL, 0x00000002U);
470SN/A  c(0xffffffff36AfffffULL, 0x00000002U);
480SN/A  c(0x0000000036b00000ULL, 0x00000002U);
490SN/A  c(0x0000000136b00000ULL, 0x00000002U);
500SN/A
510SN/A  c(0xdfffffff380fffffULL, 0x007fffffU);
520SN/A  c(0xe0000000380fffffULL, 0x00800000U);
530SN/A  c(0xe0000001380fffffULL, 0x00800000U);
540SN/A  c(0xffffffff380fffffULL, 0x00800000U);
550SN/A  c(0x0000000038100000ULL, 0x00800000U);
560SN/A  c(0x0000000138100000ULL, 0x00800000U);
570SN/A  c(0x1000000038100000ULL, 0x00800000U);
580SN/A  c(0x1000000138100000ULL, 0x00800001U);
590SN/A  c(0x2fffffff38100000ULL, 0x00800001U);
600SN/A  c(0x3000000038100000ULL, 0x00800002U);
610SN/A  c(0x5000000038100000ULL, 0x00800002U);
620SN/A  c(0x5000000138100000ULL, 0x00800003U);
630SN/A#else
640SN/A  c(0x3690000000000001ULL, 0x00000001U);
650SN/A  c(0x369fffffffffffffULL, 0x00000001U);
660SN/A  c(0x36A0000000000000ULL, 0x00000001U);
670SN/A  c(0x36A7ffffffffffffULL, 0x00000001U);
680SN/A  c(0x36A8000000000000ULL, 0x00000002U);
690SN/A  c(0x36AfffffffffffffULL, 0x00000002U);
700SN/A  c(0x36b0000000000000ULL, 0x00000002U);
710SN/A  c(0x36b0000000000001ULL, 0x00000002U);
720SN/A
730SN/A  c(0x380fffffdfffffffULL, 0x007fffffU);
740SN/A  c(0x380fffffe0000000ULL, 0x00800000U);
750SN/A  c(0x380fffffe0000001ULL, 0x00800000U);
760SN/A  c(0x380fffffffffffffULL, 0x00800000U);
770SN/A  c(0x3810000000000000ULL, 0x00800000U);
780SN/A  c(0x3810000000000001ULL, 0x00800000U);
790SN/A  c(0x3810000010000000ULL, 0x00800000U);
800SN/A  c(0x3810000010000001ULL, 0x00800001U);
810SN/A  c(0x381000002fffffffULL, 0x00800001U);
820SN/A  c(0x3810000030000000ULL, 0x00800002U);
830SN/A  c(0x3810000050000000ULL, 0x00800002U);
840SN/A  c(0x3810000050000001ULL, 0x00800003U);
850SN/A#endif
860SN/A
870SN/A  if (failed)
880SN/A    abort ();
890SN/A  else
900SN/A    exit (0);
910SN/A}
920SN/A#endif
930SN/A