summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Campbell <ben@scumways.com>2015-07-21 10:06:52 +1200
committerBen Campbell <ben@scumways.com>2015-07-21 10:06:52 +1200
commit7decfcc089c363d43cf4829544a62a493740ac44 (patch)
tree1113681cf402663a4369af0f91ead46ccccfca52
parent7d249a5de9f25dd32fd7337902dd2d82089ed18f (diff)
parent064fd14bcd01c722bfc524fe700e6b58356f928a (diff)
downloaddevil-7decfcc089c363d43cf4829544a62a493740ac44.tar.gz
Merge branch 'static-inlines'
-rw-r--r--DevIL/CMakeLists.txt2
-rw-r--r--DevIL/include/IL/devil_internal_exports.h33
-rw-r--r--DevIL/src-IL/include/il_endian.h99
-rw-r--r--DevIL/src-IL/include/il_manip.h9
-rw-r--r--DevIL/src-IL/src/il_manip.c6
-rw-r--r--DevIL/src-ILU/include/ilu_internal.h19
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