1706f2543Smrg 2706f2543Smrg 3706f2543Smrg#ifdef HAVE_XORG_CONFIG_H 4706f2543Smrg#include <xorg-config.h> 5706f2543Smrg#endif 6706f2543Smrg 7706f2543Smrg#include <X11/Xarch.h> 8706f2543Smrg 9706f2543Smrg#ifndef FIXEDBASE 10706f2543Smrg#define CHECKRETURN(b) if(width <= ((b) * 32)) return(base + (b)) 11706f2543Smrg#else 12706f2543Smrg#define CHECKRETURN(b) if(width <= ((b) * 32)) return(base) 13706f2543Smrg#endif 14706f2543Smrg 15706f2543Smrg#if X_BYTE_ORDER == X_BIG_ENDIAN 16706f2543Smrg# define SHIFT_L(value, shift) ((value) >> (shift)) 17706f2543Smrg# define SHIFT_R(value, shift) ((value) << (shift)) 18706f2543Smrg#else 19706f2543Smrg# define SHIFT_L(value, shift) ((value) << (shift)) 20706f2543Smrg# define SHIFT_R(value, shift) ((value) >> (shift)) 21706f2543Smrg#endif 22706f2543Smrg 23706f2543Smrg#ifndef MSBFIRST 24706f2543Smrg# ifdef FIXEDBASE 25706f2543Smrg# define WRITE_IN_BITORDER(dest, offset, data) *(dest) = data; 26706f2543Smrg# else 27706f2543Smrg# define WRITE_IN_BITORDER(dest, offset, data) *(dest + offset) = data; 28706f2543Smrg# endif 29706f2543Smrg#else 30706f2543Smrg# ifdef FIXEDBASE 31706f2543Smrg# define WRITE_IN_BITORDER(dest, offset, data) *(dest) = SWAP_BITS_IN_BYTES(data); 32706f2543Smrg# else 33706f2543Smrg# define WRITE_IN_BITORDER(dest, offset, data) *(dest + offset) = SWAP_BITS_IN_BYTES(data) 34706f2543Smrg# endif 35706f2543Smrg#endif 36706f2543Smrg 37706f2543Smrg#ifdef FIXEDBASE 38706f2543Smrg# ifdef MSBFIRST 39706f2543Smrg# define WRITE_BITS(b) *base = SWAP_BITS_IN_BYTES(b) 40706f2543Smrg# define WRITE_BITS1(b) { \ 41706f2543Smrg *base = byte_reversed_expand3[(b) & 0xFF] | \ 42706f2543Smrg byte_reversed_expand3[((b) & 0xFF00) >> 8] << 24; } 43706f2543Smrg# define WRITE_BITS2(b) { \ 44706f2543Smrg *base = byte_reversed_expand3[(b) & 0xFF] | \ 45706f2543Smrg byte_reversed_expand3[((b) & 0xFF00) >> 8] << 24; \ 46706f2543Smrg *base = byte_reversed_expand3[((b) & 0xFF00) >> 8] >> 8 | \ 47706f2543Smrg byte_reversed_expand3[((b) & 0xFF0000) >> 16] << 16; } 48706f2543Smrg# define WRITE_BITS3(b) { \ 49706f2543Smrg *base = byte_reversed_expand3[(b) & 0xFF] | \ 50706f2543Smrg byte_reversed_expand3[((b) & 0xFF00) >> 8] << 24; \ 51706f2543Smrg *base = byte_reversed_expand3[((b) & 0xFF00) >> 8] >> 8 | \ 52706f2543Smrg byte_reversed_expand3[((b) & 0xFF0000) >> 16] << 16; \ 53706f2543Smrg *base = byte_reversed_expand3[((b) & 0xFF0000) >> 16] >> 16 | \ 54706f2543Smrg byte_reversed_expand3[((b) & 0xFF000000) >> 24] << 8; } 55706f2543Smrg# else 56706f2543Smrg# define WRITE_BITS(b) *base = (b) 57706f2543Smrg# define WRITE_BITS1(b) { \ 58706f2543Smrg *base = byte_expand3[(b) & 0xFF] | \ 59706f2543Smrg byte_expand3[((b) & 0xFF00) >> 8] << 24; } 60706f2543Smrg# define WRITE_BITS2(b) { \ 61706f2543Smrg *base = byte_expand3[(b) & 0xFF] | \ 62706f2543Smrg byte_expand3[((b) & 0xFF00) >> 8] << 24; \ 63706f2543Smrg *base = byte_expand3[((b) & 0xFF00) >> 8] >> 8 | \ 64706f2543Smrg byte_expand3[((b) & 0xFF0000) >> 16] << 16; } 65706f2543Smrg# define WRITE_BITS3(b) { \ 66706f2543Smrg *base = byte_expand3[(b) & 0xFF] | \ 67706f2543Smrg byte_expand3[((b) & 0xFF00) >> 8] << 24; \ 68706f2543Smrg *base = byte_expand3[((b) & 0xFF00) >> 8] >> 8 | \ 69706f2543Smrg byte_expand3[((b) & 0xFF0000) >> 16] << 16; \ 70706f2543Smrg *base = byte_expand3[((b) & 0xFF0000) >> 16] >> 16 | \ 71706f2543Smrg byte_expand3[((b) & 0xFF000000) >> 24] << 8; } 72706f2543Smrg# endif 73706f2543Smrg#else 74706f2543Smrg# ifdef MSBFIRST 75706f2543Smrg# define WRITE_BITS(b) *(base++) = SWAP_BITS_IN_BYTES(b) 76706f2543Smrg# define WRITE_BITS1(b) { \ 77706f2543Smrg *(base++) = byte_reversed_expand3[(b) & 0xFF] | \ 78706f2543Smrg byte_reversed_expand3[((b) & 0xFF00) >> 8] << 24; } 79706f2543Smrg# define WRITE_BITS2(b) { \ 80706f2543Smrg *(base) = byte_reversed_expand3[(b) & 0xFF] | \ 81706f2543Smrg byte_reversed_expand3[((b) & 0xFF00) >> 8] << 24; \ 82706f2543Smrg *(base + 1) = byte_reversed_expand3[((b) & 0xFF00) >> 8] >> 8 | \ 83706f2543Smrg byte_reversed_expand3[((b) & 0xFF0000) >> 16] << 16; \ 84706f2543Smrg base += 2; } 85706f2543Smrg# define WRITE_BITS3(b) { \ 86706f2543Smrg *(base) = byte_reversed_expand3[(b) & 0xFF] | \ 87706f2543Smrg byte_reversed_expand3[((b) & 0xFF00) >> 8] << 24; \ 88706f2543Smrg *(base + 1) = byte_reversed_expand3[((b) & 0xFF00) >> 8] >> 8 | \ 89706f2543Smrg byte_reversed_expand3[((b) & 0xFF0000) >> 16] << 16; \ 90706f2543Smrg *(base + 2) = byte_reversed_expand3[((b) & 0xFF0000) >> 16] >> 16 | \ 91706f2543Smrg byte_reversed_expand3[((b) & 0xFF000000) >> 24] << 8; \ 92706f2543Smrg base += 3; } 93706f2543Smrg# else 94706f2543Smrg# define WRITE_BITS(b) *(base++) = (b) 95706f2543Smrg# define WRITE_BITS1(b) { \ 96706f2543Smrg *(base++) = byte_expand3[(b) & 0xFF] | \ 97706f2543Smrg byte_expand3[((b) & 0xFF00) >> 8] << 24; } 98706f2543Smrg# define WRITE_BITS2(b) { \ 99706f2543Smrg *(base) = byte_expand3[(b) & 0xFF] | \ 100706f2543Smrg byte_expand3[((b) & 0xFF00) >> 8] << 24; \ 101706f2543Smrg *(base + 1) = byte_expand3[((b) & 0xFF00) >> 8] >> 8 | \ 102706f2543Smrg byte_expand3[((b) & 0xFF0000) >> 16] << 16; \ 103706f2543Smrg base += 2; } 104706f2543Smrg# define WRITE_BITS3(b) { \ 105706f2543Smrg *(base) = byte_expand3[(b) & 0xFF] | \ 106706f2543Smrg byte_expand3[((b) & 0xFF00) >> 8] << 24; \ 107706f2543Smrg *(base + 1) = byte_expand3[((b) & 0xFF00) >> 8] >> 8 | \ 108706f2543Smrg byte_expand3[((b) & 0xFF0000) >> 16] << 16; \ 109706f2543Smrg *(base + 2) = byte_expand3[((b) & 0xFF0000) >> 16] >> 16 | \ 110706f2543Smrg byte_expand3[((b) & 0xFF000000) >> 24] << 8; \ 111706f2543Smrg base += 3; } 112706f2543Smrg# endif 113706f2543Smrg#endif 114706f2543Smrg 115706f2543Smrg#ifdef FIXEDBASE 116706f2543Smrg# ifdef MSBFIRST 117706f2543Smrg# define EXPNAME(x) x##MSBFirstFixedBase 118706f2543Smrg# else 119706f2543Smrg# define EXPNAME(x) x##LSBFirstFixedBase 120706f2543Smrg# endif 121706f2543Smrg#else 122706f2543Smrg# ifdef MSBFIRST 123706f2543Smrg# define EXPNAME(x) x##MSBFirst 124706f2543Smrg# else 125706f2543Smrg# define EXPNAME(x) x##LSBFirst 126706f2543Smrg# endif 127706f2543Smrg#endif 128