From jmorecfg.h:
#define PACK_TWO_PIXELS(l,r) ((r<<16) | l)
#define PACK_NEED_ALIGNMENT(ptr) (((int)(ptr))&3)
#define WRITE_TWO_PIXELS(addr, pixels) do { \
((INT16*)(addr))[0] = (pixels); \
((INT16*)(addr))[1] = (pixels)>>16; \
} while(0)
#define WRITE_TWO_ALIGNED_PIXELS(addr, pixels) ((*(INT32*)(addr)) = pixels
Can someone explain the difference between WRITE_TWO_PIXELS and WRITE_TWO_ALIGNED_PIXELS? If pixels is a stack allocated uint32_t and addr & 3 == 0, shouldn’t they be equivalent?
Thanks.
WRITE_TWO_PIXELSandWRITE_TWO_ALIGNED_PIXELSare equivalent for little endian machines but not for big endian architecture.[Example edited: thanks to Steve Jessop]
Let, pixels = 0x0A0B0C0D
For big endian machines,
WRITE_TWO_PIXELSwork as follows:where
WRITE_TWO_ALIGNED_PIXELSwill write as follows: