OpenCores
URL https://opencores.org/ocsvn/wf3d/wf3d/trunk

Subversion Repositories wf3d

[/] [wf3d/] [trunk/] [bin/] [f22.c] - Blame information for rev 9

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 specular
//=======================================================================
2
// Project Monophony
3
//   Wire-Frame 3D Graphics Accelerator IP Core
4
//
5
// File:
6
//   f22.c
7
//
8
// Abstract:
9
//   22-bit floating point number utility
10
//
11
// Author:
12 9 specular
//   Kenji Ishimaru (info.info.wf3d@gmail.com)
13 2 specular
//
14
//======================================================================
15
//
16
// Copyright (c) 2015, Kenji Ishimaru
17
// All rights reserved.
18
//
19
// Redistribution and use in source and binary forms, with or without
20
// modification, are permitted provided that the following conditions are met:
21
//
22
//  -Redistributions of source code must retain the above copyright notice,
23
//   this list of conditions and the following disclaimer.
24
//  -Redistributions in binary form must reproduce the above copyright notice,
25
//   this list of conditions and the following disclaimer in the documentation
26
//   and/or other materials provided with the distribution.
27
//
28
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
29
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
30
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
31
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
32
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
33
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
34
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
35
// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
36
// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
37
// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
38
// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
39
//
40
// Revision History
41
 
42
#include <stdio.h>
43
 
44
 
45
union {
46
  unsigned int ui;
47
  float f;
48
} uif;
49
 
50
float cnv_f22_to_f32(unsigned int a) {
51
  // extract sign
52
  unsigned int tmp_s = (a >> 21) & 1;
53
  // extract exp
54
  unsigned int tmp_e = (a >> 16) & 0x1f;
55
  unsigned int tmp_oe = (a >> 16) & 0x1f;
56
  // extract fraction(with integer bit)
57
  unsigned int tmp_m = a  & 0xffff;
58
  if ((tmp_oe != 0)||(tmp_m != 0)) {
59
    tmp_e -= 15;
60
    tmp_e += 127;
61
  }
62
  // denormal
63
  if ((tmp_oe == 0)&&(tmp_m != 0)) {
64
    while (((tmp_m >> 15)&1) != 1) {
65
        tmp_m = tmp_m << 1;
66
        tmp_e--;
67
    }
68
  }
69
  tmp_m = (tmp_m << 1) & 0xfff; // remove integer bit
70
  unsigned int t =   (tmp_s << 31) | (tmp_e << 23) | (tmp_m << 7);
71
  uif.ui = t;
72
  return uif.f;
73
}
74
 
75
int main() {
76
  unsigned int x;
77
  while (1) {
78
    printf("f22 = ");
79
    scanf("%x", &x);
80
    printf("float value = %f\n",cnv_f22_to_f32(x));
81
  }
82
 
83
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.