mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 21:50:12 +01:00
glx: Avoid aliasing violations.
Compilers are perfectly capable of generating efficient code for calls like these to memcpy(). Reviewed-by: Brian Paul <brianp@vmware.com> Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
This commit is contained in:
parent
2a1d2874f1
commit
5ed3299822
2 changed files with 25 additions and 24 deletions
|
|
@ -155,28 +155,34 @@
|
|||
|
||||
/* Single item copy macros */
|
||||
#define __GLX_PUT_CHAR(offset,a) \
|
||||
*((INT8 *) (pc + offset)) = a
|
||||
do { \
|
||||
int8_t __tmp = (a); \
|
||||
memcpy((pc + (offset)), &__tmp, 1); \
|
||||
} while (0)
|
||||
|
||||
#define __GLX_PUT_SHORT(offset,a) \
|
||||
*((INT16 *) (pc + offset)) = a
|
||||
do { \
|
||||
int16_t __tmp = (a); \
|
||||
memcpy((pc + (offset)), &__tmp, 2); \
|
||||
} while (0)
|
||||
|
||||
#define __GLX_PUT_LONG(offset,a) \
|
||||
*((INT32 *) (pc + offset)) = a
|
||||
do { \
|
||||
int32_t __tmp = (a); \
|
||||
memcpy((pc + (offset)), &__tmp, 4); \
|
||||
} while (0)
|
||||
|
||||
#define __GLX_PUT_FLOAT(offset,a) \
|
||||
*((FLOAT32 *) (pc + offset)) = a
|
||||
do { \
|
||||
float __tmp = (a); \
|
||||
memcpy((pc + (offset)), &__tmp, 4); \
|
||||
} while (0)
|
||||
|
||||
#ifdef __GLX_ALIGN64
|
||||
/*
|
||||
** This can certainly be done better for a particular machine
|
||||
** architecture!
|
||||
*/
|
||||
#define __GLX_PUT_DOUBLE(offset,a) \
|
||||
__GLX_MEM_COPY(pc + offset, &a, 8)
|
||||
#else
|
||||
#define __GLX_PUT_DOUBLE(offset,a) \
|
||||
*((FLOAT64 *) (pc + offset)) = a
|
||||
#endif
|
||||
do { \
|
||||
double __tmp = (a); \
|
||||
memcpy((pc + (offset)), &__tmp, 8); \
|
||||
} while (0)
|
||||
|
||||
#define __GLX_PUT_CHAR_ARRAY(offset,a,alen) \
|
||||
__GLX_MEM_COPY(pc + offset, a, alen * __GLX_SIZE_INT8)
|
||||
|
|
|
|||
|
|
@ -103,24 +103,19 @@
|
|||
a = (GLint) reply.size
|
||||
|
||||
#define __GLX_SINGLE_GET_CHAR(p) \
|
||||
*p = *(GLbyte *)&reply.pad3;
|
||||
memcpy((p), &reply.pad3, 1);
|
||||
|
||||
#define __GLX_SINGLE_GET_SHORT(p) \
|
||||
*p = *(GLshort *)&reply.pad3;
|
||||
memcpy((p), &reply.pad3, 2);
|
||||
|
||||
#define __GLX_SINGLE_GET_LONG(p) \
|
||||
*p = *(GLint *)&reply.pad3;
|
||||
memcpy((p), &reply.pad3, 4);
|
||||
|
||||
#define __GLX_SINGLE_GET_FLOAT(p) \
|
||||
*p = *(GLfloat *)&reply.pad3;
|
||||
memcpy((p), &reply.pad3, 4);
|
||||
|
||||
#ifdef __GLX_ALIGN64
|
||||
#define __GLX_SINGLE_GET_DOUBLE(p) \
|
||||
__GLX_MEM_COPY(p, &reply.pad3, 8)
|
||||
#else
|
||||
#define __GLX_SINGLE_GET_DOUBLE(p) \
|
||||
*p = *(GLdouble *)&reply.pad3
|
||||
#endif
|
||||
memcpy((p), &reply.pad3, 8);
|
||||
|
||||
/* Get an array of typed data */
|
||||
#define __GLX_SINGLE_GET_VOID_ARRAY(a,alen) \
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue