/* * Machine dependent defines/includes for LAME. * * Copyright (c) 1999 A.L. Faber * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef LAME_MACHINE_H #define LAME_MACHINE_H #include "version.h" #include #include #ifdef STDC_HEADERS # include # include #else # ifndef HAVE_STRCHR # define strchr index # define strrchr rindex # endif char *strchr(), *strrchr(); # ifndef HAVE_MEMCPY # define memcpy(d, s, n) bcopy ((s), (d), (n)) # define memmove(d, s, n) bcopy ((s), (d), (n)) # endif #endif #if defined(__riscos__) && defined(FPA10) # include "ymath.h" #else # include #endif #include #include #ifdef HAVE_ERRNO_H # include #endif #ifdef HAVE_FCNTL_H # include #endif #if defined(macintosh) # include # include #else # include # include #endif #ifdef HAVE_INTTYPES_H # include #else # ifdef HAVE_STDINT_H # include # endif #endif #ifdef WITH_DMALLOC #include #endif /* * 3 different types of pow() functions: * - table lookup * - pow() * - exp() on some machines this is claimed to be faster than pow() */ #define POW20(x) (assert(0 <= (x+Q_MAX2) && x < Q_MAX), pow20[x+Q_MAX2]) /*#define POW20(x) pow(2.0,((double)(x)-210)*.25) */ /*#define POW20(x) exp( ((double)(x)-210)*(.25*LOG2) ) */ #define IPOW20(x) (assert(0 <= x && x < Q_MAX), ipow20[x]) /*#define IPOW20(x) exp( -((double)(x)-210)*.1875*LOG2 ) */ /*#define IPOW20(x) pow(2.0,-((double)(x)-210)*.1875) */ /* in case this is used without configure */ #ifndef inline # define inline #endif #if defined(_MSC_VER) # undef inline # define inline _inline #elif defined(__SASC) || defined(__GNUC__) || defined(__ICC) || defined(__ECC) /* if __GNUC__ we always want to inline, not only if the user requests it */ # undef inline # define inline __inline #endif #if defined(_MSC_VER) # pragma warning( disable : 4244 ) /*# pragma warning( disable : 4305 ) */ #endif /* * FLOAT for variables which require at least 32 bits * FLOAT8 for variables which require at least 64 bits * * On some machines, 64 bit will be faster than 32 bit. Also, some math * routines require 64 bit float, so setting FLOAT=float will result in a * lot of conversions. */ #if ( defined(_MSC_VER) || defined(__BORLANDC__) || defined(__MINGW32__) ) # define WIN32_LEAN_AND_MEAN # include # include # define FLOAT_MAX FLT_MAX #else # ifndef FLOAT typedef float FLOAT; # ifdef FLT_MAX # define FLOAT_MAX FLT_MAX # else # define FLOAT_MAX 1e37 /* approx */ # endif # endif #endif #ifndef FLOAT8 typedef double FLOAT8; # ifdef DBL_MAX # define FLOAT8_MAX DBL_MAX # else # define FLOAT8_MAX 1e99 /* approx */ # endif #else # ifdef FLT_MAX # define FLOAT8_MAX FLT_MAX # else # define FLOAT8_MAX 1e37 /* approx */ # endif #endif /* sample_t must be floating point, at least 32 bits */ typedef FLOAT sample_t; #define dimension_of(array) (sizeof(array)/sizeof(array[0])) #define beyond(array) (array+dimension_of(array)) #define compiletime_assert(expression) enum{static_assert_##FILE##_##LINE = 1/((expression)?1:0)} #define lame_calloc(TYPE, COUNT) ((TYPE*)calloc(COUNT, sizeof(TYPE))) #define multiple_of(CHUNK, COUNT) (\ ( (COUNT) < 1 || (CHUNK) < 1 || (COUNT) % (CHUNK) == 0 ) \ ? (COUNT) \ : ((COUNT) + (CHUNK) - (COUNT) % (CHUNK)) \ ) #if 1 #define EQ(a,b) (\ (fabs(a) > fabs(b)) \ ? (fabs((a)-(b)) <= (fabs(a) * 1e-6f)) \ : (fabs((a)-(b)) <= (fabs(b) * 1e-6f))) #else #define EQ(a,b) (fabs((a)-(b))<1E-37) #endif #define NEQ(a,b) (!EQ(a,b)) #ifdef _MSC_VER # if _MSC_VER < 1400 # define fabsf fabs # define powf pow # define log10f log10 # endif #endif #endif /* end of machine.h */