X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fmain%2Fimports.h;h=7cf5f247be47b43ad05faa32e58dbf450630e67f;hb=b68ff2b8731427b3b68c9c81902f7ba93606caaf;hp=bcbcd0f3e27bf2aaf015c6295d71edc427bd1f4b;hpb=b2c13534f7b38eed1c5b15d73e8171d3038765c7;p=mesa.git diff --git a/src/mesa/main/imports.h b/src/mesa/main/imports.h index bcbcd0f3e27..7cf5f247be4 100644 --- a/src/mesa/main/imports.h +++ b/src/mesa/main/imports.h @@ -36,9 +36,12 @@ #define IMPORTS_H +#include +#include +#include #include "compiler.h" #include "glheader.h" -#include "errors.h" +#include "util/bitscan.h" #ifdef __cplusplus extern "C" { @@ -69,7 +72,7 @@ extern "C" { /** * Sometimes we treat GLfloats as GLints. On x86 systems, moving a float - * as a int (thereby using integer registers instead of FP registers) is + * as an int (thereby using integer registers instead of FP registers) is * a performance win. Typically, this can be done with ordinary casts. * But with gcc's -fstrict-aliasing flag (which defaults to on in gcc 3.0) * these casts generate warnings. @@ -79,86 +82,9 @@ typedef union { GLfloat f; GLint i; GLuint u; } fi_type; -/********************************************************************** - * Math macros - */ - -#define MAX_GLUSHORT 0xffff -#define MAX_GLUINT 0xffffffff - -/* Degrees to radians conversion: */ -#define DEG2RAD (M_PI/180.0) - - -/** - * \name Work-arounds for platforms that lack C99 math functions - */ -/*@{*/ -#if (!defined(_XOPEN_SOURCE) || (_XOPEN_SOURCE < 600)) && !defined(_ISOC99_SOURCE) \ - && (!defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L)) \ - && (!defined(_MSC_VER) || (_MSC_VER < 1400)) -#define acosf(f) ((float) acos(f)) -#define asinf(f) ((float) asin(f)) -#define atan2f(x,y) ((float) atan2(x,y)) -#define atanf(f) ((float) atan(f)) -#define ceilf(f) ((float) ceil(f)) -#define cosf(f) ((float) cos(f)) -#define coshf(f) ((float) cosh(f)) -#define expf(f) ((float) exp(f)) -#define exp2f(f) ((float) exp2(f)) -#define floorf(f) ((float) floor(f)) -#define logf(f) ((float) log(f)) - -#ifdef ANDROID -#define log2f(f) (logf(f) * (float) (1.0 / M_LN2)) -#else -#define log2f(f) ((float) log2(f)) -#endif - -#define powf(x,y) ((float) pow(x,y)) -#define sinf(f) ((float) sin(f)) -#define sinhf(f) ((float) sinh(f)) -#define sqrtf(f) ((float) sqrt(f)) -#define tanf(f) ((float) tan(f)) -#define tanhf(f) ((float) tanh(f)) -#define acoshf(f) ((float) acosh(f)) -#define asinhf(f) ((float) asinh(f)) -#define atanhf(f) ((float) atanh(f)) -#endif - -#if defined(_MSC_VER) -#if _MSC_VER < 1800 /* Not req'd on VS2013 and above */ -static inline float truncf(float x) { return x < 0.0f ? ceilf(x) : floorf(x); } -static inline float exp2f(float x) { return powf(2.0f, x); } -static inline float log2f(float x) { return logf(x) * 1.442695041f; } -static inline float asinhf(float x) { return logf(x + sqrtf(x * x + 1.0f)); } -static inline float acoshf(float x) { return logf(x + sqrtf(x * x - 1.0f)); } -static inline float atanhf(float x) { return (logf(1.0f + x) - logf(1.0f - x)) / 2.0f; } -static inline int isblank(int ch) { return ch == ' ' || ch == '\t'; } -#define strtoll(p, e, b) _strtoi64(p, e, b) -#endif /* _MSC_VER < 1800 */ -#define strcasecmp(s1, s2) _stricmp(s1, s2) -#endif /*@}*/ -/* - * signbit() is a macro on Linux. Not available on Windows. - */ -#ifndef signbit -#define signbit(x) ((x) < 0.0f) -#endif - - -/** single-precision inverse square root */ -static inline float -INV_SQRTF(float x) -{ - /* XXX we could try Quake's fast inverse square root function here */ - return 1.0F / sqrtf(x); -} - - /*** *** LOG2: Log base 2 of float ***/ @@ -189,6 +115,14 @@ static inline GLfloat LOG2(GLfloat x) +/** + * finite macro. + */ +#if defined(_MSC_VER) +# define finite _finite +#endif + + /*** *** IS_INF_OR_NAN: test if float is infinite or NaN ***/ @@ -203,20 +137,6 @@ static inline GLfloat LOG2(GLfloat x) #endif -/*** - *** FLOORF: floor of float - *** FABSF: absolute value of float - ***/ -#if defined(__gnu_linux__) -/* C99 functions */ -#define FLOORF(x) floorf(x) -#define FABSF(x) fabsf(x) -#else -#define FLOORF(x) ((GLfloat) floor(x)) -#define FABSF(x) ((GLfloat) fabs(x)) -#endif - - /** * Convert float to int by rounding to nearest integer, away from zero. */ @@ -225,6 +145,13 @@ static inline int IROUND(float f) return (int) ((f >= 0.0F) ? (f + 0.5F) : (f - 0.5F)); } +/** + * Convert double to int by rounding to nearest integer, away from zero. + */ +static inline int IROUNDD(double d) +{ + return (int) ((d >= 0.0) ? (d + 0.5) : (d - 0.5)); +} /** * Convert float to int64 by rounding to nearest integer. @@ -244,34 +171,6 @@ static inline int IROUND_POS(float f) return (int) (f + 0.5F); } -#ifdef __x86_64__ -# include -#endif - -/** - * Convert float to int using a fast method. The rounding mode may vary. - */ -static inline int F_TO_I(float f) -{ -#if defined(USE_X86_ASM) && defined(__GNUC__) && defined(__i386__) - int r; - __asm__ ("fistpl %0" : "=m" (r) : "t" (f) : "st"); - return r; -#elif defined(USE_X86_ASM) && defined(_MSC_VER) - int r; - _asm { - fld f - fistp r - } - return r; -#elif defined(__x86_64__) - return _mm_cvt_ss2si(_mm_load_ss(&f)); -#else - return IROUND(f); -#endif -} - - /** Return (as an integer) floor of float */ static inline int IFLOOR(float f) { @@ -304,38 +203,6 @@ static inline int IFLOOR(float f) } -/** Return (as an integer) ceiling of float */ -static inline int ICEIL(float f) -{ -#if defined(USE_X86_ASM) && defined(__GNUC__) && defined(__i386__) - /* - * IEEE ceil for computers that round to nearest or even. - * 'f' must be between -4194304 and 4194303. - * This ceil operation is done by "(iround(f + .5) + iround(f - .5) + 1) >> 1", - * but uses some IEEE specific tricks for better speed. - * Contributed by Josh Vanderhoof - */ - int ai, bi; - double af, bf; - af = (3 << 22) + 0.5 + (double)f; - bf = (3 << 22) + 0.5 - (double)f; - /* GCC generates an extra fstp/fld without this. */ - __asm__ ("fstps %0" : "=m" (ai) : "t" (af) : "st"); - __asm__ ("fstps %0" : "=m" (bi) : "t" (bf) : "st"); - return (ai - bi + 1) >> 1; -#else - int ai, bi; - double af, bf; - fi_type u; - af = (3 << 22) + 0.5 + (double)f; - bf = (3 << 22) + 0.5 - (double)f; - u.f = (float) af; ai = u.i; - u.f = (float) bf; bi = u.i; - return (ai - bi + 1) >> 1; -#endif -} - - /** * Is x a power of two? */ @@ -418,18 +285,6 @@ _mesa_logbase2(GLuint n) } -/** - * Return 1 if this is a little endian machine, 0 if big endian. - */ -static inline GLboolean -_mesa_little_endian(void) -{ - const GLuint ui = 1; /* intentionally not static */ - return *((const GLubyte *) &ui); -} - - - /********************************************************************** * Functions */ @@ -447,87 +302,6 @@ extern void * _mesa_align_realloc(void *oldBuffer, size_t oldSize, size_t newSize, unsigned long alignment); -extern void * -_mesa_exec_malloc( GLuint size ); - -extern void -_mesa_exec_free( void *addr ); - - -#ifndef FFS_DEFINED -#define FFS_DEFINED 1 -#ifdef HAVE___BUILTIN_FFS -#define ffs __builtin_ffs -#else -extern int ffs(int i); -#endif - -#ifdef HAVE___BUILTIN_FFSLL -#define ffsll __builtin_ffsll -#else -extern int ffsll(long long int i); -#endif -#endif /* FFS_DEFINED */ - - -#ifdef HAVE___BUILTIN_POPCOUNT -#define _mesa_bitcount(i) __builtin_popcount(i) -#else -extern unsigned int -_mesa_bitcount(unsigned int n); -#endif - -#ifdef HAVE___BUILTIN_POPCOUNTLL -#define _mesa_bitcount_64(i) __builtin_popcountll(i) -#else -extern unsigned int -_mesa_bitcount_64(uint64_t n); -#endif - -/** - * Find the last (most significant) bit set in a word. - * - * Essentially ffs() in the reverse direction. - */ -static inline unsigned int -_mesa_fls(unsigned int n) -{ -#ifdef HAVE___BUILTIN_CLZ - return n == 0 ? 0 : 32 - __builtin_clz(n); -#else - unsigned int v = 1; - - if (n == 0) - return 0; - - while (n >>= 1) - v++; - - return v; -#endif -} - -extern int -_mesa_round_to_even(float val); - -extern GLhalfARB -_mesa_float_to_half(float f); - -extern float -_mesa_half_to_float(GLhalfARB h); - -static inline bool -_mesa_half_is_negative(GLhalfARB h) -{ - return h & 0x8000; -} - -extern char * -_mesa_strdup( const char *s ); - -extern unsigned int -_mesa_str_checksum(const char *str); - extern int _mesa_snprintf( char *str, size_t size, const char *fmt, ... ) PRINTFLIKE(3, 4); @@ -535,11 +309,10 @@ extern int _mesa_vsnprintf(char *str, size_t size, const char *fmt, va_list arg); -#if defined(_MSC_VER) && !defined(snprintf) -#define snprintf _snprintf +#if defined(_WIN32) && !defined(HAVE_STRTOK_R) +#define strtok_r strtok_s #endif - #ifdef __cplusplus } #endif