*Patch from Callum Lewick. Clean up of j2klib.h for the aligned malloc stuff.

*convert.c: Changed some error comments for TIFF images
This commit is contained in:
Francois-Olivier Devaux
2007-10-10 06:17:28 +00:00
parent 4b60f17bba
commit ab0473aa42
3 changed files with 55 additions and 36 deletions

View File

@@ -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 */
/* 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;
}
#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
#define opj_aligned_malloc(size) malloc(size)
#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
#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
/**