diff options
| author | Francois-Olivier Devaux <fodevaux@users.noreply.github.com> | 2007-10-10 06:17:28 +0000 |
|---|---|---|
| committer | Francois-Olivier Devaux <fodevaux@users.noreply.github.com> | 2007-10-10 06:17:28 +0000 |
| commit | ab0473aa42c3a069a0101f9dbbef1557635dca2b (patch) | |
| tree | 1691f3bc785c0fc254cc75a3b3a4fdfaa2ce4c47 /libopenjpeg/j2k_lib.h | |
| parent | 4b60f17bba1f1201738ca5f3c760f68ffd301bf2 (diff) | |
*Patch from Callum Lewick. Clean up of j2klib.h for the aligned malloc stuff.
*convert.c: Changed some error comments for TIFF images
Diffstat (limited to 'libopenjpeg/j2k_lib.h')
| -rw-r--r-- | libopenjpeg/j2k_lib.h | 74 |
1 files changed, 44 insertions, 30 deletions
diff --git a/libopenjpeg/j2k_lib.h b/libopenjpeg/j2k_lib.h index bb936c8b..99f06196 100644 --- a/libopenjpeg/j2k_lib.h +++ b/libopenjpeg/j2k_lib.h @@ -61,43 +61,57 @@ Allocate memory aligned to a 16 byte boundry @param size Bytes to allocate @return Returns a void pointer to the allocated space, or NULL if there is insufficient memory available */ +/* FIXME: These should be set with cmake tests, but we're currently not requiring use of cmake */ #ifdef WIN32 - -#ifdef __GNUC__ -#include <mm_malloc.h> -#else /* MSVC, Intel C++ */ -#include <malloc.h> -#endif - -#ifdef _mm_malloc - #define opj_aligned_malloc(size) _mm_malloc(size, 16) - #else - #define opj_aligned_malloc(size) malloc(size) - #endif - - #ifdef _mm_free - #define opj_aligned_free(m) _mm_free(m) - #else - #define opj_aligned_free(m) free(m) - #endif - + /* Someone should tell the mingw people that their malloc.h ought to provide _mm_malloc() */ + #ifdef __GNUC__ + #include <mm_malloc.h> + #define HAVE_MM_MALLOC + #else /* MSVC, Intel C++ */ + #include <malloc.h> + #ifdef _mm_malloc + #define HAVE_MM_MALLOC + #endif + #endif #else /* Not WIN32 */ + #if defined(__sun) + #define HAVE_MEMALIGN + /* Linux x86_64 and OSX always align allocations to 16 bytes */ + #elif !defined(__amd64__) && !defined(__APPLE__) + /* FIXME: Yes, this is a big assumption */ + #define HAVE_POSIX_MEMALIGN + #endif +#endif -/* Linux x86_64 and OSX always align allocations to 16 bytes */ -#if defined(__amd64__) || defined(__APPLE__) #define opj_aligned_malloc(size) malloc(size) -#else -extern int posix_memalign (void **, size_t, size_t); - -static INLINE void* __attribute__ ((malloc)) opj_aligned_malloc(size_t size){ - void* mem = NULL; - posix_memalign(&mem, 16, size); - return mem; -} +#define opj_aligned_free(m) free(m) + +#ifdef HAVE_MM_MALLOC + #undef opj_aligned_malloc + #define opj_aligned_malloc(size) _mm_malloc(size, 16) + #undef opj_aligned_free + #define opj_aligned_free(m) _mm_free(m) #endif -#define opj_aligned_free(m) free(m) +#ifdef HAVE_MEMALIGN + extern void* memalign(size_t, size_t); + #undef opj_aligned_malloc + #define opj_aligned_malloc(size) memalign(16, (size)) + #undef opj_aligned_free + #define opj_aligned_free(m) free(m) +#endif +#ifdef HAVE_POSIX_MEMALIGN + #undef opj_aligned_malloc + extern int posix_memalign(void**, size_t, size_t); + + static INLINE void* __attribute__ ((malloc)) opj_aligned_malloc(size_t size){ + void* mem = NULL; + posix_memalign(&mem, 16, size); + return mem; + } + #undef opj_aligned_free + #define opj_aligned_free(m) free(m) #endif /** |
