• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *      Machine dependent defines/includes for LAME.
3  *
4  *      Copyright (c) 1999 A.L. Faber
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Library General Public
8  * License as published by the Free Software Foundation; either
9  * version 2 of the License, or (at your option) any later version.
10  *
11  * This library 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  * Library General Public License for more details.
15  *
16  * You should have received a copy of the GNU Library General Public
17  * License along with this library; if not, write to the
18  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19  * Boston, MA 02111-1307, USA.
20  */
21 
22 #ifndef LAME_MACHINE_H
23 #define LAME_MACHINE_H
24 
25 #include "version.h"
26 
27 #include <stdio.h>
28 #include <assert.h>
29 
30 #ifdef STDC_HEADERS
31 # include <stdlib.h>
32 # include <string.h>
33 #else
34 # ifndef HAVE_STRCHR
35 #  define strchr index
36 #  define strrchr rindex
37 # endif
38 char   *strchr(), *strrchr();
39 # ifndef HAVE_MEMCPY
40 #  define memcpy(d, s, n) bcopy ((s), (d), (n))
41 #  define memmove(d, s, n) bcopy ((s), (d), (n))
42 # endif
43 #endif
44 
45 #if  defined(__riscos__)  &&  defined(FPA10)
46 # include "ymath.h"
47 #else
48 # include <math.h>
49 #endif
50 #include <limits.h>
51 
52 #include <ctype.h>
53 
54 #ifdef HAVE_ERRNO_H
55 # include <errno.h>
56 #endif
57 #ifdef HAVE_FCNTL_H
58 # include <fcntl.h>
59 #endif
60 
61 #if defined(macintosh)
62 # include <types.h>
63 # include <stat.h>
64 #else
65 # include <sys/types.h>
66 # include <sys/stat.h>
67 #endif
68 
69 #ifdef HAVE_INTTYPES_H
70 # include <inttypes.h>
71 #else
72 # ifdef HAVE_STDINT_H
73 #  include <stdint.h>
74 # endif
75 #endif
76 
77 #ifdef WITH_DMALLOC
78 #include <dmalloc.h>
79 #endif
80 
81 /*
82  * 3 different types of pow() functions:
83  *   - table lookup
84  *   - pow()
85  *   - exp()   on some machines this is claimed to be faster than pow()
86  */
87 
88 #define POW20(x) (assert(0 <= (x+Q_MAX2) && x < Q_MAX), pow20[x+Q_MAX2])
89 /*#define POW20(x)  pow(2.0,((double)(x)-210)*.25) */
90 /*#define POW20(x)  exp( ((double)(x)-210)*(.25*LOG2) ) */
91 
92 #define IPOW20(x)  (assert(0 <= x && x < Q_MAX), ipow20[x])
93 /*#define IPOW20(x)  exp( -((double)(x)-210)*.1875*LOG2 ) */
94 /*#define IPOW20(x)  pow(2.0,-((double)(x)-210)*.1875) */
95 
96 /* in case this is used without configure */
97 #ifndef inline
98 # define inline
99 #endif
100 
101 #if defined(_MSC_VER)
102 # undef inline
103 # define inline _inline
104 #elif defined(__SASC) || defined(__GNUC__) || defined(__ICC) || defined(__ECC)
105 /* if __GNUC__ we always want to inline, not only if the user requests it */
106 # undef inline
107 # define inline __inline
108 #endif
109 
110 #if    defined(_MSC_VER)
111 # pragma warning( disable : 4244 )
112 /*# pragma warning( disable : 4305 ) */
113 #endif
114 
115 /*
116  * FLOAT    for variables which require at least 32 bits
117  * FLOAT8   for variables which require at least 64 bits
118  *
119  * On some machines, 64 bit will be faster than 32 bit.  Also, some math
120  * routines require 64 bit float, so setting FLOAT=float will result in a
121  * lot of conversions.
122  */
123 
124 #if ( defined(_MSC_VER) || defined(__BORLANDC__) || defined(__MINGW32__) )
125 # define WIN32_LEAN_AND_MEAN
126 # include <windows.h>
127 # include <float.h>
128 # define FLOAT_MAX FLT_MAX
129 #else
130 # ifndef FLOAT
131 typedef float FLOAT;
132 #  ifdef FLT_MAX
133 #   define FLOAT_MAX FLT_MAX
134 #  else
135 #   define FLOAT_MAX 1e37 /* approx */
136 #  endif
137 # endif
138 #endif
139 
140 #ifndef FLOAT8
141 typedef double FLOAT8;
142 # ifdef DBL_MAX
143 #  define FLOAT8_MAX DBL_MAX
144 # else
145 #  define FLOAT8_MAX 1e99 /* approx */
146 # endif
147 #else
148 # ifdef FLT_MAX
149 #  define FLOAT8_MAX FLT_MAX
150 # else
151 #  define FLOAT8_MAX 1e37 /* approx */
152 # endif
153 #endif
154 
155 /* sample_t must be floating point, at least 32 bits */
156 typedef FLOAT sample_t;
157 
158 #define dimension_of(array) (sizeof(array)/sizeof(array[0]))
159 #define beyond(array) (array+dimension_of(array))
160 #define compiletime_assert(expression) enum{static_assert_##FILE##_##LINE = 1/((expression)?1:0)}
161 #define lame_calloc(TYPE, COUNT) ((TYPE*)calloc(COUNT, sizeof(TYPE)))
162 #define multiple_of(CHUNK, COUNT) (\
163   ( (COUNT) < 1 || (CHUNK) < 1 || (COUNT) % (CHUNK) == 0 ) \
164   ? (COUNT) \
165   : ((COUNT) + (CHUNK) - (COUNT) % (CHUNK)) \
166   )
167 
168 #if 1
169 #define EQ(a,b) (\
170 (fabs(a) > fabs(b)) \
171  ? (fabs((a)-(b)) <= (fabs(a) * 1e-6f)) \
172  : (fabs((a)-(b)) <= (fabs(b) * 1e-6f)))
173 #else
174 #define EQ(a,b) (fabs((a)-(b))<1E-37)
175 #endif
176 
177 #define NEQ(a,b) (!EQ(a,b))
178 
179 #ifdef _MSC_VER
180 #  if _MSC_VER < 1400
181 #  define fabsf fabs
182 #  define powf pow
183 #  define log10f log10
184 #  endif
185 #endif
186 
187 #endif
188 
189 /* end of machine.h */
190