blob: f965637836aaa0e6648114154935dec43ed268ee [file] [log] [blame]
Weiming Zhao9b7bbec2017-03-21 05:32:51 +00001// RUN: %clang_builtins %s %librt -o %t && %run %t
Dan Liew5be7eb32019-10-17 18:12:49 +00002// REQUIRES: librt_has_floatunssisfvfp
Nick Kledzikad160c02009-09-14 23:26:56 +00003
4#include <stdio.h>
5#include <stdlib.h>
6#include <math.h>
Derek Schuffeb0ebc32015-04-24 15:45:57 +00007#include "int_lib.h"
Nick Kledzikad160c02009-09-14 23:26:56 +00008
Derek Schuffeb0ebc32015-04-24 15:45:57 +00009extern COMPILER_RT_ABI float __floatunssisfvfp(unsigned int a);
Nick Kledzikad160c02009-09-14 23:26:56 +000010
Weiming Zhaod77a6732017-02-15 23:59:09 +000011#if __arm__ && __VFP_FP__
Nick Kledzikad160c02009-09-14 23:26:56 +000012int test__floatunssisfvfp(unsigned int a)
13{
14 float actual = __floatunssisfvfp(a);
15 float expected = a;
16 if (actual != expected)
17 printf("error in test__floatunssisfvfp(%u) = %f, expected %f\n",
18 a, actual, expected);
19 return actual != expected;
20}
21#endif
22
23int main()
24{
Weiming Zhaod77a6732017-02-15 23:59:09 +000025#if __arm__ && __VFP_FP__
Nick Kledzikad160c02009-09-14 23:26:56 +000026 if (test__floatunssisfvfp(0))
27 return 1;
28 if (test__floatunssisfvfp(1))
29 return 1;
30 if (test__floatunssisfvfp(0x7FFFFFFF))
31 return 1;
32 if (test__floatunssisfvfp(0x80000000))
33 return 1;
34 if (test__floatunssisfvfp(0xFFFFFFFF))
35 return 1;
Joerg Sonnenbergerd9bcddd2011-05-29 21:43:29 +000036#else
37 printf("skipped\n");
Nick Kledzikad160c02009-09-14 23:26:56 +000038#endif
39 return 0;
40}