|
|
@ -584,12 +584,14 @@ typedef unsigned char validate_uint32[sizeof(stbi__uint32)==4 ? 1 : -1]; |
|
|
|
#define STBI__X86_TARGET |
|
|
|
#define STBI__X86_TARGET |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
#if defined(__GNUC__) && (defined(STBI__X86_TARGET) || defined(STBI__X64_TARGET)) && !defined(__SSE2__) && !defined(STBI_NO_SIMD) |
|
|
|
#if defined(__GNUC__) && defined(STBI__X86_TARGET) && !defined(__SSE2__) && !defined(STBI_NO_SIMD) |
|
|
|
// NOTE: not clear do we actually need this for the 64-bit path?
|
|
|
|
|
|
|
|
// gcc doesn't support sse2 intrinsics unless you compile with -msse2,
|
|
|
|
// gcc doesn't support sse2 intrinsics unless you compile with -msse2,
|
|
|
|
// (but compiling with -msse2 allows the compiler to use SSE2 everywhere;
|
|
|
|
// which in turn means it gets to use SSE2 everywhere. This is unfortunate,
|
|
|
|
// this is just broken and gcc are jerks for not fixing it properly
|
|
|
|
// but previous attempts to provide the SSE2 functions with runtime
|
|
|
|
// http://www.virtualdub.org/blog/pivot/entry.php?id=363 )
|
|
|
|
// detection caused numerous issues. The way architecture extensions are
|
|
|
|
|
|
|
|
// exposed in GCC/Clang is, sadly, not really suited for one-file libs.
|
|
|
|
|
|
|
|
// New behavior: if compiled with -msse2, we use SSE2 without any
|
|
|
|
|
|
|
|
// detection; if not, we don't use it at all.
|
|
|
|
#define STBI_NO_SIMD |
|
|
|
#define STBI_NO_SIMD |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
@ -647,14 +649,10 @@ static int stbi__sse2_available() |
|
|
|
|
|
|
|
|
|
|
|
static int stbi__sse2_available() |
|
|
|
static int stbi__sse2_available() |
|
|
|
{ |
|
|
|
{ |
|
|
|
#if defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 // GCC 4.8 or later
|
|
|
|
// If we're even attempting to compile this on GCC/Clang, that means
|
|
|
|
// GCC 4.8+ has a nice way to do this
|
|
|
|
// -msse2 is on, which means the compiler is allowed to use SSE2
|
|
|
|
return __builtin_cpu_supports("sse2"); |
|
|
|
// instructions at will, and so are we.
|
|
|
|
#else |
|
|
|
return 1; |
|
|
|
// portable way to do this, preferably without using GCC inline ASM?
|
|
|
|
|
|
|
|
// just bail for now.
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
#endif |
|
|
|