diff options
author | Ben Campbell <ben@scumways.com> | 2015-07-21 10:06:52 +1200 |
---|---|---|
committer | Ben Campbell <ben@scumways.com> | 2015-07-21 10:06:52 +1200 |
commit | 7decfcc089c363d43cf4829544a62a493740ac44 (patch) | |
tree | 1113681cf402663a4369af0f91ead46ccccfca52 | |
parent | 7d249a5de9f25dd32fd7337902dd2d82089ed18f (diff) | |
parent | 064fd14bcd01c722bfc524fe700e6b58356f928a (diff) | |
download | devil-7decfcc089c363d43cf4829544a62a493740ac44.tar.gz |
Merge branch 'static-inlines'
-rw-r--r-- | DevIL/CMakeLists.txt | 2 | ||||
-rw-r--r-- | DevIL/include/IL/devil_internal_exports.h | 33 | ||||
-rw-r--r-- | DevIL/src-IL/include/il_endian.h | 99 | ||||
-rw-r--r-- | DevIL/src-IL/include/il_manip.h | 9 | ||||
-rw-r--r-- | DevIL/src-IL/src/il_manip.c | 6 | ||||
-rw-r--r-- | DevIL/src-ILU/include/ilu_internal.h | 19 |
6 files changed, 55 insertions, 113 deletions
diff --git a/DevIL/CMakeLists.txt b/DevIL/CMakeLists.txt index 24df2b54..6cbb5f5d 100644 --- a/DevIL/CMakeLists.txt +++ b/DevIL/CMakeLists.txt @@ -10,6 +10,8 @@ set (CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") #include (CheckFunctionExists) include (TestBigEndian) +#set(CMAKE_C_FLAGS "-std=c99") + OPTION(BUILD_SHARED_LIBS "Build with shared (.DLL .SO) libraries." ON) # various compiler stuff diff --git a/DevIL/include/IL/devil_internal_exports.h b/DevIL/include/IL/devil_internal_exports.h index 30b7aaab..1b80c598 100644 --- a/DevIL/include/IL/devil_internal_exports.h +++ b/DevIL/include/IL/devil_internal_exports.h @@ -21,25 +21,22 @@ #define assert(x) #endif -//#ifndef NOINLINE -#ifndef INLINE -#if defined(__GNUC__) - #define INLINE extern inline -#elif defined(_MSC_VER) //@TODO: Get this working in MSVC++. - // http://www.greenend.org.uk/rjk/2003/03/inline.html - #define NOINLINE - //#define INLINE - /*#ifndef _WIN64 // Cannot use inline assembly in x64 target platform. - #define USE_WIN32_ASM - #endif//_WIN64*/ - #define INLINE __inline + +#ifdef NOINLINE + // No inlining. Treat all inline funcs as static. + // Functions will be replicated in all translation units + // use them. + #define STATIC_INLINE static #else - #define INLINE inline -#endif -#endif -//#else -//#define INLINE -//#endif //NOINLINE + #if defined(_MSC_VER) && !defined(__cplusplus) + // MSVC compiler uses __inline when compiling C (not C++) + #define STATIC_INLINE static __inline + #else + // Portable across C99, GNU89, C++... + #define STATIC_INLINE static inline + #endif +#endif // NOINLINE + #ifdef __cplusplus extern "C" { diff --git a/DevIL/src-IL/include/il_endian.h b/DevIL/src-IL/include/il_endian.h index 08189484..252dd8c9 100644 --- a/DevIL/src-IL/include/il_endian.h +++ b/DevIL/src-IL/include/il_endian.h @@ -56,45 +56,9 @@ #define BigDouble(d) iSwapDouble(d) #endif -void iSwapUShort(ILushort *s); -void iSwapShort(ILshort *s); -void iSwapUInt(ILuint *i); -void iSwapInt(ILint *i); -void iSwapFloat(ILfloat *f); -void iSwapDouble(ILdouble *d); -ILushort GetLittleUShort(); -ILshort GetLittleShort(); -ILuint GetLittleUInt(); -ILint GetLittleInt(); -ILfloat GetLittleFloat(); -ILdouble GetLittleDouble(); -ILushort GetBigUShort(); -ILshort GetBigShort(); -ILuint GetBigUInt(); -ILint GetBigInt(); -ILfloat GetBigFloat(); -ILdouble GetBigDouble(); -ILubyte SaveLittleUShort(ILushort s); -ILubyte SaveLittleShort(ILshort s); -ILubyte SaveLittleUInt(ILuint i); -ILubyte SaveLittleInt(ILint i); -ILubyte SaveLittleFloat(ILfloat f); -ILubyte SaveLittleDouble(ILdouble d); -ILubyte SaveBigUShort(ILushort s); -ILubyte SaveBigShort(ILshort s); -ILubyte SaveBigUInt(ILuint i); -ILubyte SaveBigInt(ILint i); -ILubyte SaveBigFloat(ILfloat f); -ILubyte SaveBigDouble(ILdouble d); - -#ifdef IL_ENDIAN_C -#undef NOINLINE -#undef INLINE -#define INLINE -#endif -#ifndef NOINLINE -INLINE void iSwapUShort(ILushort *s) { + +STATIC_INLINE void iSwapUShort(ILushort *s) { #ifdef USE_WIN32_ASM __asm { mov ebx, s @@ -113,11 +77,11 @@ INLINE void iSwapUShort(ILushort *s) { #endif //USE_WIN32_ASM } -INLINE void iSwapShort(ILshort *s) { +STATIC_INLINE void iSwapShort(ILshort *s) { iSwapUShort((ILushort*)s); } -INLINE void iSwapUInt(ILuint *i) { +STATIC_INLINE void iSwapUInt(ILuint *i) { #ifdef USE_WIN32_ASM __asm { mov ebx, i @@ -135,15 +99,15 @@ INLINE void iSwapUInt(ILuint *i) { #endif //USE_WIN32_ASM } -INLINE void iSwapInt(ILint *i) { +STATIC_INLINE void iSwapInt(ILint *i) { iSwapUInt((ILuint*)i); } -INLINE void iSwapFloat(ILfloat *f) { +STATIC_INLINE void iSwapFloat(ILfloat *f) { iSwapUInt((ILuint*)f); } -INLINE void iSwapDouble(ILdouble *d) { +STATIC_INLINE void iSwapDouble(ILdouble *d) { #ifdef GCC_X86_ASM int *t = (int*)d; asm("bswap %2 \n" @@ -164,7 +128,7 @@ INLINE void iSwapDouble(ILdouble *d) { } -INLINE ILushort GetLittleUShort() { +STATIC_INLINE ILushort GetLittleUShort() { ILushort s; iread(&s, sizeof(ILushort), 1); #ifdef __BIG_ENDIAN__ @@ -173,7 +137,7 @@ INLINE ILushort GetLittleUShort() { return s; } -INLINE ILshort GetLittleShort() { +STATIC_INLINE ILshort GetLittleShort() { ILshort s; iread(&s, sizeof(ILshort), 1); #ifdef __BIG_ENDIAN__ @@ -182,7 +146,7 @@ INLINE ILshort GetLittleShort() { return s; } -INLINE ILuint GetLittleUInt() { +STATIC_INLINE ILuint GetLittleUInt() { ILuint i; iread(&i, sizeof(ILuint), 1); #ifdef __BIG_ENDIAN__ @@ -191,7 +155,7 @@ INLINE ILuint GetLittleUInt() { return i; } -INLINE ILint GetLittleInt() { +STATIC_INLINE ILint GetLittleInt() { ILint i; iread(&i, sizeof(ILint), 1); #ifdef __BIG_ENDIAN__ @@ -200,7 +164,7 @@ INLINE ILint GetLittleInt() { return i; } -INLINE ILfloat GetLittleFloat() { +STATIC_INLINE ILfloat GetLittleFloat() { ILfloat f; iread(&f, sizeof(ILfloat), 1); #ifdef __BIG_ENDIAN__ @@ -209,7 +173,7 @@ INLINE ILfloat GetLittleFloat() { return f; } -INLINE ILdouble GetLittleDouble() { +STATIC_INLINE ILdouble GetLittleDouble() { ILdouble d; iread(&d, sizeof(ILdouble), 1); #ifdef __BIG_ENDIAN__ @@ -219,7 +183,7 @@ INLINE ILdouble GetLittleDouble() { } -INLINE ILushort GetBigUShort() { +STATIC_INLINE ILushort GetBigUShort() { ILushort s; iread(&s, sizeof(ILushort), 1); #ifdef __LITTLE_ENDIAN__ @@ -229,7 +193,7 @@ INLINE ILushort GetBigUShort() { } -INLINE ILshort GetBigShort() { +STATIC_INLINE ILshort GetBigShort() { ILshort s; iread(&s, sizeof(ILshort), 1); #ifdef __LITTLE_ENDIAN__ @@ -239,7 +203,7 @@ INLINE ILshort GetBigShort() { } -INLINE ILuint GetBigUInt() { +STATIC_INLINE ILuint GetBigUInt() { ILuint i; iread(&i, sizeof(ILuint), 1); #ifdef __LITTLE_ENDIAN__ @@ -249,7 +213,7 @@ INLINE ILuint GetBigUInt() { } -INLINE ILint GetBigInt() { +STATIC_INLINE ILint GetBigInt() { ILint i; iread(&i, sizeof(ILint), 1); #ifdef __LITTLE_ENDIAN__ @@ -259,7 +223,7 @@ INLINE ILint GetBigInt() { } -INLINE ILfloat GetBigFloat() { +STATIC_INLINE ILfloat GetBigFloat() { ILfloat f; iread(&f, sizeof(ILfloat), 1); #ifdef __LITTLE_ENDIAN__ @@ -269,7 +233,7 @@ INLINE ILfloat GetBigFloat() { } -INLINE ILdouble GetBigDouble() { +STATIC_INLINE ILdouble GetBigDouble() { ILdouble d; iread(&d, sizeof(ILdouble), 1); #ifdef __LITTLE_ENDIAN__ @@ -278,14 +242,14 @@ INLINE ILdouble GetBigDouble() { return d; } -INLINE ILubyte SaveLittleUShort(ILushort s) { +STATIC_INLINE ILubyte SaveLittleUShort(ILushort s) { #ifdef __BIG_ENDIAN__ iSwapUShort(&s); #endif return iwrite(&s, sizeof(ILushort), 1); } -INLINE ILubyte SaveLittleShort(ILshort s) { +STATIC_INLINE ILubyte SaveLittleShort(ILshort s) { #ifdef __BIG_ENDIAN__ iSwapShort(&s); #endif @@ -293,7 +257,7 @@ INLINE ILubyte SaveLittleShort(ILshort s) { } -INLINE ILubyte SaveLittleUInt(ILuint i) { +STATIC_INLINE ILubyte SaveLittleUInt(ILuint i) { #ifdef __BIG_ENDIAN__ iSwapUInt(&i); #endif @@ -301,14 +265,14 @@ INLINE ILubyte SaveLittleUInt(ILuint i) { } -INLINE ILubyte SaveLittleInt(ILint i) { +STATIC_INLINE ILubyte SaveLittleInt(ILint i) { #ifdef __BIG_ENDIAN__ iSwapInt(&i); #endif return iwrite(&i, sizeof(ILint), 1); } -INLINE ILubyte SaveLittleFloat(ILfloat f) { +STATIC_INLINE ILubyte SaveLittleFloat(ILfloat f) { #ifdef __BIG_ENDIAN__ iSwapFloat(&f); #endif @@ -316,7 +280,7 @@ INLINE ILubyte SaveLittleFloat(ILfloat f) { } -INLINE ILubyte SaveLittleDouble(ILdouble d) { +STATIC_INLINE ILubyte SaveLittleDouble(ILdouble d) { #ifdef __BIG_ENDIAN__ iSwapDouble(&d); #endif @@ -324,7 +288,7 @@ INLINE ILubyte SaveLittleDouble(ILdouble d) { } -INLINE ILubyte SaveBigUShort(ILushort s) { +STATIC_INLINE ILubyte SaveBigUShort(ILushort s) { #ifdef __LITTLE_ENDIAN__ iSwapUShort(&s); #endif @@ -332,7 +296,7 @@ INLINE ILubyte SaveBigUShort(ILushort s) { } -INLINE ILubyte SaveBigShort(ILshort s) { +STATIC_INLINE ILubyte SaveBigShort(ILshort s) { #ifdef __LITTLE_ENDIAN__ iSwapShort(&s); #endif @@ -340,7 +304,7 @@ INLINE ILubyte SaveBigShort(ILshort s) { } -INLINE ILubyte SaveBigUInt(ILuint i) { +STATIC_INLINE ILubyte SaveBigUInt(ILuint i) { #ifdef __LITTLE_ENDIAN__ iSwapUInt(&i); #endif @@ -348,7 +312,7 @@ INLINE ILubyte SaveBigUInt(ILuint i) { } -INLINE ILubyte SaveBigInt(ILint i) { +STATIC_INLINE ILubyte SaveBigInt(ILint i) { #ifdef __LITTLE_ENDIAN__ iSwapInt(&i); #endif @@ -356,7 +320,7 @@ INLINE ILubyte SaveBigInt(ILint i) { } -INLINE ILubyte SaveBigFloat(ILfloat f) { +STATIC_INLINE ILubyte SaveBigFloat(ILfloat f) { #ifdef __LITTLE_ENDIAN__ iSwapFloat(&f); #endif @@ -364,13 +328,12 @@ INLINE ILubyte SaveBigFloat(ILfloat f) { } -INLINE ILubyte SaveBigDouble(ILdouble d) { +STATIC_INLINE ILubyte SaveBigDouble(ILdouble d) { #ifdef __LITTLE_ENDIAN__ iSwapDouble(&d); #endif return iwrite(&d, sizeof(ILdouble), 1); } -#endif//NOINLINE void EndianSwapData(void *_Image); diff --git a/DevIL/src-IL/include/il_manip.h b/DevIL/src-IL/include/il_manip.h index d19f4589..84db1c21 100644 --- a/DevIL/src-IL/include/il_manip.h +++ b/DevIL/src-IL/include/il_manip.h @@ -20,18 +20,18 @@ extern "C" { ILboolean ilFlipImage(void); ILboolean ilMirrorImage(void); //@JASON New routine created 03/28/2001 + //----------------------------------------------- // Overflow handler for float-to-half conversion; // generates a hardware floating-point overflow, // which may be trapped by the operating system. //----------------------------------------------- -#ifndef NOINLINE #if defined(_MSC_VER) #pragma warning(push) #pragma warning(disable : 4756) // Disables 'named type definition in parentheses' warning #endif -INLINE ILfloat /*ILAPIENTRY*/ ilFloatToHalfOverflow() { +STATIC_INLINE ILfloat ilFloatToHalfOverflow() { ILfloat f = 1e10; ILint j; for (j = 0; j < 10; j++) @@ -47,7 +47,7 @@ INLINE ILfloat /*ILAPIENTRY*/ ilFloatToHalfOverflow() { // Float-to-half conversion -- general case, including // zeroes, denormalized numbers and exponent overflows. //----------------------------------------------------- -INLINE ILushort ILAPIENTRY ilFloatToHalf(ILuint i) { +STATIC_INLINE ILushort ilFloatToHalf(ILuint i) { // // Our floating point number, f, is represented by the bit // pattern in integer i. Disassemble that bit pattern into @@ -175,7 +175,7 @@ INLINE ILushort ILAPIENTRY ilFloatToHalf(ILuint i) { } // Taken from OpenEXR -INLINE ILuint ILAPIENTRY ilHalfToFloat (ILushort y) { +STATIC_INLINE ILuint ilHalfToFloat (ILushort y) { int s = (y >> 15) & 0x00000001; int e = (y >> 10) & 0x0000001f; @@ -240,7 +240,6 @@ INLINE ILuint ILAPIENTRY ilHalfToFloat (ILushort y) { return (s << 31) | (e << 23) | m; } -#endif //NOINLINE #ifdef _cplusplus } diff --git a/DevIL/src-IL/src/il_manip.c b/DevIL/src-IL/src/il_manip.c index c6cc1a4e..c173edc3 100644 --- a/DevIL/src-IL/src/il_manip.c +++ b/DevIL/src-IL/src/il_manip.c @@ -12,12 +12,6 @@ #include <IL/il.h> -// Awful inline shenanigans as per -// http://www.greenend.org.uk/rjk/tech/inline.html -#define INLINE -#include "il_manip.h" -#undef INLINE - #include "il_internal.h" diff --git a/DevIL/src-ILU/include/ilu_internal.h b/DevIL/src-ILU/include/ilu_internal.h index 61980e6e..32fc8368 100644 --- a/DevIL/src-ILU/include/ilu_internal.h +++ b/DevIL/src-ILU/include/ilu_internal.h @@ -65,31 +65,18 @@ extern const ILdouble IL_PI; extern const ILdouble IL_DEGCONV; -#ifdef ILU_INTERNAL_C -#undef NOINLINE -#undef INLINE -#define INLINE -#endif - -// Internal functions -ILfloat ilCos(ILfloat Angle); -ILfloat ilSin(ILfloat Angle); -ILint ilRound(ILfloat Num); - -#ifndef NOINLINE -INLINE ILfloat ilCos(ILfloat Angle) { +STATIC_INLINE ILfloat ilCos(ILfloat Angle) { return (ILfloat)(cos(Angle * IL_DEGCONV)); } -INLINE ILfloat ilSin(ILfloat Angle) { +STATIC_INLINE ILfloat ilSin(ILfloat Angle) { return (ILfloat)(sin(Angle * IL_DEGCONV)); } -INLINE ILint ilRound(ILfloat Num) { +STATIC_INLINE ILint ilRound(ILfloat Num) { return (ILint)(Num + 0.5); // this is truncating in away-from-0, not rounding } -#endif |