X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fglx%2Fpackrender.h;h=461180cd7b1de219873f30e83b0821424ba4b5f2;hb=396b41095944ea3675d30c0d47ca8c01db2b4c8f;hp=f8f38ca2ec55d60ff0ce6ca06456985c225a5c44;hpb=fc2a66cfcddea34af0e93dd2221ae1fd3fdd9e87;p=mesa.git diff --git a/src/glx/packrender.h b/src/glx/packrender.h index f8f38ca2ec5..461180cd7b1 100644 --- a/src/glx/packrender.h +++ b/src/glx/packrender.h @@ -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)