Move align_malloc(), align_free() to p_util.h

This commit is contained in:
Brian 2007-12-11 08:58:39 -07:00
parent 9f0e5642d8
commit 5b8b542cb2
2 changed files with 51 additions and 44 deletions

View file

@ -30,6 +30,8 @@
#include "p_compiler.h"
#include <math.h>
#include <stdint.h>
#ifdef WIN32
@ -93,7 +95,7 @@ REALLOC( void *old_ptr, unsigned old_size, unsigned new_size )
#define GETENV( X ) NULL
#else // WIN32
#else /* WIN32 */
#define MALLOC( SIZE ) malloc( SIZE )
@ -105,10 +107,56 @@ REALLOC( void *old_ptr, unsigned old_size, unsigned new_size )
#define GETENV( X ) getenv( X )
#endif // WIN32
#endif /* WIN32 */
#define CALLOC_STRUCT(T) (struct T *) CALLOC(1, sizeof(struct T))
/**
* Return memory on given byte alignment
*/
static INLINE void *
align_malloc(size_t bytes, unsigned long alignment)
{
#if defined(HAVE_POSIX_MEMALIGN)
void *mem;
(void) posix_memalign(& mem, alignment, bytes);
return mem;
#else
uintptr_t ptr, buf;
assert( alignment > 0 );
ptr = (uintptr_t) MALLOC(bytes + alignment + sizeof(void *));
if (!ptr)
return NULL;
buf = (ptr + alignment + sizeof(void *)) & ~(uintptr_t)(alignment - 1);
*(uintptr_t *)(buf - sizeof(void *)) = ptr;
return (void *) buf;
#endif /* defined(HAVE_POSIX_MEMALIGN) */
}
/**
* Free memory returned by align_malloc().
*/
static INLINE void
align_free(void *ptr)
{
#if defined(HAVE_POSIX_MEMALIGN)
FREE(ptr);
#else
void **cubbyHole = (void **) ((char *) ptr - sizeof(void *));
void *realAddr = *cubbyHole;
FREE(realAddr);
#endif /* defined(HAVE_POSIX_MEMALIGN) */
}
#define CLAMP( X, MIN, MAX ) ( (X)<(MIN) ? (MIN) : ((X)>(MAX) ? (MAX) : (X)) )
#define MIN2( A, B ) ( (A)<(B) ? (A) : (B) )
#define MAX2( A, B ) ( (A)>(B) ? (A) : (B) )

View file

@ -35,11 +35,11 @@
#include "glxheader.h"
#include "xmesaP.h"
#include "main/macros.h"
#include "pipe/p_winsys.h"
#include "pipe/p_format.h"
#include "pipe/p_context.h"
#include "pipe/p_util.h"
#include "pipe/softpipe/sp_winsys.h"
#ifdef GALLIUM_CELL
@ -49,47 +49,6 @@
#include "xm_winsys_aub.h"
/** XXX from Mesa core */
static void *
align_malloc(size_t bytes, unsigned long alignment)
{
#if defined(HAVE_POSIX_MEMALIGN)
void *mem;
(void) posix_memalign(& mem, alignment, bytes);
return mem;
#else
uintptr_t ptr, buf;
assert( alignment > 0 );
ptr = (uintptr_t) malloc(bytes + alignment + sizeof(void *));
if (!ptr)
return NULL;
buf = (ptr + alignment + sizeof(void *)) & ~(uintptr_t)(alignment - 1);
*(uintptr_t *)(buf - sizeof(void *)) = ptr;
return (void *) buf;
#endif /* defined(HAVE_POSIX_MEMALIGN) */
}
/** XXX from Mesa core */
static void
align_free(void *ptr)
{
#if defined(HAVE_POSIX_MEMALIGN)
free(ptr);
#else
void **cubbyHole = (void **) ((char *) ptr - sizeof(void *));
void *realAddr = *cubbyHole;
free(realAddr);
#endif /* defined(HAVE_POSIX_MEMALIGN) */
}
/**
* Low-level OS/window system memory buffer
*/