summaryrefslogtreecommitdiff
path: root/libopenjpeg/j2k_lib.h
diff options
context:
space:
mode:
authorFrancois-Olivier Devaux <fodevaux@users.noreply.github.com>2007-10-10 06:17:28 +0000
committerFrancois-Olivier Devaux <fodevaux@users.noreply.github.com>2007-10-10 06:17:28 +0000
commitab0473aa42c3a069a0101f9dbbef1557635dca2b (patch)
tree1691f3bc785c0fc254cc75a3b3a4fdfaa2ce4c47 /libopenjpeg/j2k_lib.h
parent4b60f17bba1f1201738ca5f3c760f68ffd301bf2 (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.h74
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
/**