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