vcvt_fixed_float_VFP.c revision 663860b1408516d02ebfcb3a9999a134e6cfb223
1
2#include <stdio.h>
3
4__attribute__((noinline)) float s_to_f32_imm1(int x)
5{
6    float y;
7    __asm__ ("vcvt.f32.s32 %0, %1, #1" : "=w"(y) : "0"(x));
8    return y;
9}
10
11__attribute__((noinline)) float s_to_f32_imm32(int x)
12{
13    float y;
14    __asm__ ("vcvt.f32.s32 %0, %1, #32" : "=w"(y) : "0"(x));
15    return y;
16}
17
18void try_s_to_f32 ( int x )
19{
20  float f32 = s_to_f32_imm32(x);
21  printf("s_to_f32_imm32:  %11d  ->  %18.14e\n", x, (double)f32);
22  f32 = s_to_f32_imm1(x);
23  printf("s_to_f32_imm1:   %11d  ->  %18.14e\n", x, (double)f32);
24}
25
26
27
28__attribute__((noinline)) float u_to_f32_imm1(int x)
29{
30    float y;
31    __asm__ ("vcvt.f32.u32 %0, %1, #1" : "=w"(y) : "0"(x));
32    return y;
33}
34
35__attribute__((noinline)) float u_to_f32_imm32(int x)
36{
37    float y;
38    __asm__ ("vcvt.f32.u32 %0, %1, #32" : "=w"(y) : "0"(x));
39    return y;
40}
41
42void try_u_to_f32 ( unsigned int x )
43{
44  float f32 = u_to_f32_imm32(x);
45  printf("u_to_f32_imm32:  %11u  ->  %18.14e\n", x, (double)f32);
46  f32 = u_to_f32_imm1(x);
47  printf("u_to_f32_imm1:   %11u  ->  %18.14e\n", x, (double)f32);
48}
49
50
51//__attribute__((noinline)) double s_to_f64_imm1(int x)
52//{
53//    double y;
54//    __asm__ ("vcvt.f64.s32 %P0, %1, #4" : "=w"(y) : "0"((long long)x));
55//    return y;
56//}
57
58
59
60
61int main ( void  )
62{
63  int i;
64  //float f = foo(1);
65  //__asm__ __volatile__("" : : "r"(f) : "cc","memory");
66  try_s_to_f32(0);
67  try_s_to_f32(1);
68  for (i = 100; i < 200; i++) {
69     try_s_to_f32(i);
70  }
71  try_s_to_f32(0x7FFFFFFE);
72  try_s_to_f32(0x7FFFFFFF);
73  try_s_to_f32(0x80000000);
74  try_s_to_f32(0x80000001);
75  try_s_to_f32(0xFFFFFFFE);
76  try_s_to_f32(0xFFFFFFFF);
77  printf("\n");
78  try_u_to_f32(0);
79  try_u_to_f32(1);
80  for (i = 100; i < 200; i++) {
81     try_u_to_f32(i);
82  }
83  try_u_to_f32(0x7FFFFFFE);
84  try_u_to_f32(0x7FFFFFFF);
85  try_u_to_f32(0x80000000);
86  try_u_to_f32(0x80000001);
87  try_u_to_f32(0xFFFFFFFE);
88  try_u_to_f32(0xFFFFFFFF);
89  return 0;
90}
91