summaryrefslogtreecommitdiff
path: root/libopenjpeg
diff options
context:
space:
mode:
authorFrancois-Olivier Devaux <fodevaux@users.noreply.github.com>2007-08-24 13:46:44 +0000
committerFrancois-Olivier Devaux <fodevaux@users.noreply.github.com>2007-08-24 13:46:44 +0000
commitbd0b6ec2fdf6e27be9ecf811eede2a49241fa081 (patch)
treeebb836d78496a23dd10e59af6cff18e3c075d052 /libopenjpeg
parent1d02a8b59505e2faace66ad5cbb607e994cc46eb (diff)
Fixed problem with _mm_malloc under OSX. Thanks to Callum Lerwick for solving that issue.
Diffstat (limited to 'libopenjpeg')
-rw-r--r--libopenjpeg/j2k_lib.h30
1 files changed, 26 insertions, 4 deletions
diff --git a/libopenjpeg/j2k_lib.h b/libopenjpeg/j2k_lib.h
index d13ac5fe..a8fc8f20 100644
--- a/libopenjpeg/j2k_lib.h
+++ b/libopenjpeg/j2k_lib.h
@@ -32,7 +32,7 @@
The functions in J2K_LIB.C are internal utilities mainly used for memory management.
*/
-#ifndef __GCC__
+#ifndef __GNUC__
#define __attribute__(x) /* */
#endif
@@ -62,13 +62,35 @@ Allocate memory aligned to a 16 byte boundry
@return Returns a void pointer to the allocated space, or NULL if there is insufficient memory available
*/
#ifdef WIN32
-#include <xmmintrin.h>
-#else
+
+#ifdef __GNUC__
#include <mm_malloc.h>
+#else /* MSVC, Intel C++ */
+#include <malloc.h>
#endif
-#define opj_aligned_malloc(size) _mm_malloc(size, 16)
+
+#define opj_aligned_malloc(size) _mm_malloc(size, 16)
#define opj_aligned_free(m) _mm_free(m)
+#else /* Not WIN32 */
+
+/* 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;
+}
+#endif
+
+#define opj_aligned_free(m) free(m)
+
+#endif
+
/**
Reallocate memory blocks.
@param memblock Pointer to previously allocated memory block