1 /*
2 * Copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>
3 *
4 * This file is part of FFmpeg.
5 *
6 * FFmpeg is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * FFmpeg is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with FFmpeg; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 */
20
21 #ifndef AVUTIL_SOFTFLOAT_H
22 #define AVUTIL_SOFTFLOAT_H
23
24 #include <stdint.h>
26
30
35
38 #if 1
39 while((a.
mant + 0x20000000U)<0x40000000U){
42 }
43 #else
47 #endif
51 }
52 }else{
54 }
56 }
57
59 #if 1
60 if(a.
mant + 0x40000000 < 0){
63 }
65 #elif 1
66 int t= a.
mant + 0x40000000 < 0;
68 #else
69 int t= (a.
mant + 0x40000000
U)>>31;
71 #endif
72 }
73
74 /**
75 * @return Will not be more denormalized than a+b. So if either input is
76 * normalized, then the output will not be worse then the other input.
77 * If both are normalized, then the output will be normalized.
78 */
83 }
84
85 /**
86 * b has to be normalized and not zero.
87 * @return Will not be more denormalized than a.
88 */
93 }
94
97 if(t<0)
return (a.
mant >> (-t)) - b.
mant ;
99 }
100
105 }
106
109 }
110
111 //FIXME sqrt, log, exp, pow, sin, cos
112
115 }
116
117 /**
118 * Rounding is to -inf.
119 */
124 }
125
126 #endif /* AVUTIL_SOFTFLOAT_H */