4 * Defines which are only useful to 8 bit color frame buffers
6 * That doesn't seem to be true any more. Some of the macros in here
7 * are used for depths other than 8. Perhaps the file should be
13 Copyright (c) 1989 X Consortium
15 Permission is hereby granted, free of charge, to any person obtaining a copy
16 of this software and associated documentation files (the "Software"), to deal
17 in the Software without restriction, including without limitation the rights
18 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
19 copies of the Software, and to permit persons to whom the Software is
20 furnished to do so, subject to the following conditions:
22 The above copyright notice and this permission notice shall be included in
23 all copies or substantial portions of the Software.
25 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
26 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
27 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
28 X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
29 AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
30 CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
32 Except as contained in this notice, the name of the X Consortium shall not be
33 used in advertising or otherwise to promote the sale, use or other dealings
34 in this Software without prior written authorization from the X Consortium.
37 /* $XConsortium: cfb8bit.h,v 1.18 95/04/07 18:59:27 kaleb Exp $ */
38 /* $XFree86: xc/programs/Xserver/cfb/cfb8bit.h,v 3.2 1996/06/29 09:05:22 dawes Exp $ */
42 #if (BITMAP_BIT_ORDER == MSBFirst)
43 #define GetBitGroup(x) (((PixelGroup) (x)) >> (PGSZ - PGSZB))
44 #define NextBitGroup(x) ((x) <<= PGSZB)
45 #define NextSomeBits(x,n) ((x) <<= (n))
47 #define GetBitGroup(x) ((x) & PGSZBMSK)
48 #define NextBitGroup(x) ((x) >>= PGSZB)
49 #define NextSomeBits(x,n) ((x) >>= (n))
52 #define RotBitsLeft(x,k) ((x) = BitLeft (x,k) | \
53 BitRight (x, PGSZ-(k)))
55 #if defined(__GNUC__) && defined(mc68020)
57 #define RotBitsLeft(x,k) asm("rol%.l %2,%0" \
64 #define GetPixelGroup(x) (cfb8StippleXor[GetBitGroup(x)])
65 #define RRopPixels(dst,x) (DoRRop(dst,cfb8StippleAnd[x], cfb8StippleXor[x]))
66 #define RRopPixelGroup(dst,x) (RRopPixels(dst,GetBitGroup(x)))
67 #define MaskRRopPixels(dst,x,mask) (DoMaskRRop(dst,cfb8StippleAnd[x], cfb8StippleXor[x], mask))
69 #define NUM_MASKS (1<<PPW) /* XXX goes in cfbmskbits.h? */
70 extern int cfb8StippleMode, cfb8StippleAlu;
71 extern PixelGroup cfb8StippleFg, cfb8StippleBg, cfb8StipplePm;
72 extern PixelGroup cfb8StippleMasks[NUM_MASKS];
73 extern PixelGroup cfb8StippleAnd[NUM_MASKS], cfb8StippleXor[NUM_MASKS];
74 extern int cfb8StippleRRop;
76 #define cfb8PixelMasks cfb8StippleMasks
77 #define cfb8Pixels cfb8StippleXor
79 #define cfb8CheckPixels(fg, bg) \
80 (FillOpaqueStippled == cfb8StippleMode && \
81 GXcopy == cfb8StippleAlu && \
82 ((fg) & PMSK) == cfb8StippleFg && \
83 ((bg) & PMSK) == cfb8StippleBg && \
84 PMSK == cfb8StipplePm)
86 #define cfb8CheckOpaqueStipple(alu,fg,bg,pm) \
87 ((FillOpaqueStippled == cfb8StippleMode && \
88 (alu) == cfb8StippleAlu && \
89 ((fg) & PMSK) == cfb8StippleFg && \
90 ((bg) & PMSK) == cfb8StippleBg && \
91 ((pm) & PMSK) == cfb8StipplePm) ? 0 : cfb8SetOpaqueStipple(alu,fg,bg,pm))
93 #define cfb8CheckStipple(alu,fg,pm) \
94 ((FillStippled == cfb8StippleMode && \
95 (alu) == cfb8StippleAlu && \
96 ((fg) & PMSK) == cfb8StippleFg && \
97 ((pm) & PMSK) == cfb8StipplePm) ? 0 : cfb8SetStipple(alu,fg,pm))
99 #define cfb8SetPixels(fg,bg) cfb8SetOpaqueStipple(GXcopy,fg,bg,PMSK)
102 * These macros are shared between the unnatural spans code
103 * and the unnatural rectangle code. No reasonable person
104 * would attempt to use them anyplace else.
107 #define NextUnnaturalStippleWord \
108 if (bitsLeft >= MFB_PPW) \
110 inputBits = *srcTemp++; \
111 bitsLeft -= MFB_PPW; \
112 partBitsLeft = MFB_PPW; \
118 inputBits = *srcTemp & ~cfb8BitLenMasks[bitsLeft]; \
119 srcTemp = srcStart; \
120 partBitsLeft = bitsLeft; \
121 bitsLeft = bitsWhole; \
124 #define NextUnnaturalStippleBits \
125 if (partBitsLeft >= PPW) { \
126 bits = GetBitGroup (inputBits); \
127 NextBitGroup (inputBits); \
128 partBitsLeft -= PPW; \
130 bits = GetBitGroup (inputBits); \
131 nextPartBits = PPW - partBitsLeft; \
132 NextUnnaturalStippleWord \
133 if (partBitsLeft < nextPartBits) { \
135 bits |= BitRight (GetBitGroup (inputBits), \
136 PPW - nextPartBits) & PPWMSK;\
137 nextPartBits -= partBitsLeft; \
139 NextUnnaturalStippleWord \
141 bits |= BitRight (GetBitGroup (inputBits), \
142 PPW - nextPartBits) & PPWMSK; \
143 NextSomeBits (inputBits, nextPartBits); \
144 partBitsLeft -= nextPartBits; \
147 #define NextUnnaturalStippleBitsFast \
148 if (partBitsLeft >= PPW) { \
149 bits = GetBitGroup(inputBits); \
150 NextBitGroup(inputBits); \
151 partBitsLeft -= PPW; \
153 bits = GetBitGroup (inputBits); \
154 nextPartBits = PPW - partBitsLeft; \
155 inputBits = *srcTemp++; \
156 bits |= BitRight (GetBitGroup (inputBits), \
157 partBitsLeft) & PPWMSK; \
158 NextSomeBits (inputBits, nextPartBits); \
159 partBitsLeft = MFB_PPW - nextPartBits; \
163 * WriteBitGroup takes the destination address, a pixel
164 * value (which must be 8 bits duplicated 4 time with PFILL)
165 * and the PPW bits to write, which must be in the low order
166 * bits of the register (probably from GetBitGroup) and writes
167 * the appropriate locations in memory with the pixel value. This
168 * is a copy-mode only operation.
171 #define RRopBitGroup(dst,bits) \
173 register PixelGroup _bitsTmp = (bits); \
174 *(dst) = RRopPixels(*(dst),bits); \
177 #define MaskRRopBitGroup(dst,bits,mask) \
179 register PixelGroup _bitsTmp = (bits); \
180 *(dst) = MaskRRopPixels(*(dst),bits,mask); \
182 #endif /* PSZ == 8 */
184 #if !defined(AVOID_MEMORY_READ) && PSZ == 8
186 #define WriteBitGroup(dst,pixel,bits) \
188 register PixelGroup _maskTmp = cfb8PixelMasks[(bits)]; \
189 *(dst) = (*(dst) & ~_maskTmp) | ((pixel) & _maskTmp); \
192 #define SwitchBitGroup(dst,pixel,bits) \
194 register PixelGroup _maskTmp = cfb8PixelMasks[(bits)]; \
195 register PixelGroup _pixTmp = ((pixel) & _maskTmp); \
196 _maskTmp = ~_maskTmp; \
197 SwitchBitsLoop (*(dst) = (*(dst) & _maskTmp) | _pixTmp;) \
200 #else /* AVOID_MEMORY_READ */
203 #if (BITMAP_BIT_ORDER == MSBFirst)
204 #define SinglePixel0 3
205 #define SinglePixel1 2
206 #define SinglePixel2 1
207 #define SinglePixel3 0
208 #define SinglePixel4 7
209 #define SinglePixel5 6
210 #define SinglePixel6 5
211 #define SinglePixel7 4
212 #define SinglePixel8 0xB
213 #define SinglePixel9 0xA
214 #define DoublePixel0 1
215 #define DoublePixel1 0
216 #define DoublePixel2 3
217 #define DoublePixel3 2
218 #define DoublePixel4 5
219 #define DoublePixel5 4
221 #define SinglePixel0 0
222 #define SinglePixel1 1
223 #define SinglePixel2 2
224 #define SinglePixel3 3
225 #define SinglePixel4 4
226 #define SinglePixel5 5
227 #define SinglePixel6 6
228 #define SinglePixel7 7
229 #define SinglePixel8 8
230 #define SinglePixel9 9
231 #define DoublePixel0 0
232 #define DoublePixel1 1
233 #define DoublePixel2 2
234 #define DoublePixel3 3
235 #define DoublePixel4 4
236 #define DoublePixel5 5
241 #else /* PGSZ == 64 */
242 #if (BITMAP_BIT_ORDER == MSBFirst)
243 #define SinglePixel0 7
244 #define SinglePixel1 6
245 #define SinglePixel2 5
246 #define SinglePixel3 4
247 #define SinglePixel4 3
248 #define SinglePixel5 2
249 #define SinglePixel6 1
250 #define SinglePixel7 0
251 #define DoublePixel0 3
252 #define DoublePixel1 2
253 #define DoublePixel2 1
254 #define DoublePixel3 0
258 #define SinglePixel0 0
259 #define SinglePixel1 1
260 #define SinglePixel2 2
261 #define SinglePixel3 3
262 #define SinglePixel4 4
263 #define SinglePixel5 5
264 #define SinglePixel6 6
265 #define SinglePixel7 7
266 #define DoublePixel0 0
267 #define DoublePixel1 1
268 #define DoublePixel2 2
269 #define DoublePixel3 3
274 #endif /* PGSZ == 64 */
279 #define WriteBitGroup(dst,pixel,bits) \
284 ((CARD8 *) (dst))[SinglePixel0] = (pixel); \
287 ((CARD8 *) (dst))[SinglePixel1] = (pixel); \
290 ((CARD16 *) (dst))[DoublePixel0] = (pixel); \
293 ((CARD8 *) (dst))[SinglePixel2] = (pixel); \
296 ((CARD8 *) (dst))[SinglePixel0] = (pixel); \
297 ((CARD8 *) (dst))[SinglePixel2] = (pixel); \
300 ((CARD8 *) (dst))[SinglePixel1] = (pixel); \
301 ((CARD8 *) (dst))[SinglePixel2] = (pixel); \
304 ((CARD16 *) (dst))[DoublePixel0] = (pixel); \
305 ((CARD8 *) (dst))[SinglePixel2] = (pixel); \
308 ((CARD8 *) (dst))[SinglePixel3] = (pixel); \
311 ((CARD8 *) (dst))[SinglePixel0] = (pixel); \
312 ((CARD8 *) (dst))[SinglePixel3] = (pixel); \
315 ((CARD8 *) (dst))[SinglePixel1] = (pixel); \
316 ((CARD8 *) (dst))[SinglePixel3] = (pixel); \
319 ((CARD16 *) (dst))[DoublePixel0] = (pixel); \
320 ((CARD8 *) (dst))[SinglePixel3] = (pixel); \
323 ((CARD16 *) (dst))[DoublePixel1] = (pixel); \
326 ((CARD8 *) (dst))[SinglePixel0] = (pixel); \
327 ((CARD16 *) (dst))[DoublePixel1] = (pixel); \
330 ((CARD8 *) (dst))[SinglePixel1] = (pixel); \
331 ((CARD16 *) (dst))[DoublePixel1] = (pixel); \
334 ((CARD32 *) (dst))[0] = (pixel); \
337 #else /* PGSZ == 64 */
338 #define WriteBitGroup(dst,pixel,bits) \
339 if ( bits == 0xff ) \
340 ((PixelGroup *) (dst))[OctaPixel0] = (pixel); \
342 switch (bits & 0x0f) { \
346 ((CARD8 *) (dst))[SinglePixel0] = (pixel); \
349 ((CARD8 *) (dst))[SinglePixel1] = (pixel); \
352 ((CARD16 *) (dst))[DoublePixel0] = (pixel); \
355 ((CARD8 *) (dst))[SinglePixel2] = (pixel); \
358 ((CARD8 *) (dst))[SinglePixel0] = (pixel); \
359 ((CARD8 *) (dst))[SinglePixel2] = (pixel); \
362 ((CARD8 *) (dst))[SinglePixel1] = (pixel); \
363 ((CARD8 *) (dst))[SinglePixel2] = (pixel); \
366 ((CARD16 *) (dst))[DoublePixel0] = (pixel); \
367 ((CARD8 *) (dst))[SinglePixel2] = (pixel); \
370 ((CARD8 *) (dst))[SinglePixel3] = (pixel); \
373 ((CARD8 *) (dst))[SinglePixel0] = (pixel); \
374 ((CARD8 *) (dst))[SinglePixel3] = (pixel); \
377 ((CARD8 *) (dst))[SinglePixel1] = (pixel); \
378 ((CARD8 *) (dst))[SinglePixel3] = (pixel); \
381 ((CARD16 *) (dst))[DoublePixel0] = (pixel); \
382 ((CARD8 *) (dst))[SinglePixel3] = (pixel); \
385 ((CARD16 *) (dst))[DoublePixel1] = (pixel); \
388 ((CARD8 *) (dst))[SinglePixel0] = (pixel); \
389 ((CARD16 *) (dst))[DoublePixel1] = (pixel); \
392 ((CARD8 *) (dst))[SinglePixel1] = (pixel); \
393 ((CARD16 *) (dst))[DoublePixel1] = (pixel); \
396 ((CARD32 *) (dst))[QuadPixel0] = (pixel); \
399 switch ((bits & 0xf0) >> 4) { \
403 ((CARD8 *) (dst))[SinglePixel4] = (pixel); \
406 ((CARD8 *) (dst))[SinglePixel5] = (pixel); \
409 ((CARD16 *) (dst))[DoublePixel2] = (pixel); \
412 ((CARD8 *) (dst))[SinglePixel6] = (pixel); \
415 ((CARD8 *) (dst))[SinglePixel4] = (pixel); \
416 ((CARD8 *) (dst))[SinglePixel6] = (pixel); \
419 ((CARD8 *) (dst))[SinglePixel5] = (pixel); \
420 ((CARD8 *) (dst))[SinglePixel6] = (pixel); \
423 ((CARD16 *) (dst))[DoublePixel2] = (pixel); \
424 ((CARD8 *) (dst))[SinglePixel6] = (pixel); \
427 ((CARD8 *) (dst))[SinglePixel7] = (pixel); \
430 ((CARD8 *) (dst))[SinglePixel4] = (pixel); \
431 ((CARD8 *) (dst))[SinglePixel7] = (pixel); \
434 ((CARD8 *) (dst))[SinglePixel5] = (pixel); \
435 ((CARD8 *) (dst))[SinglePixel7] = (pixel); \
438 ((CARD16 *) (dst))[DoublePixel2] = (pixel); \
439 ((CARD8 *) (dst))[SinglePixel7] = (pixel); \
442 ((CARD16 *) (dst))[DoublePixel3] = (pixel); \
445 ((CARD8 *) (dst))[SinglePixel4] = (pixel); \
446 ((CARD16 *) (dst))[DoublePixel3] = (pixel); \
449 ((CARD8 *) (dst))[SinglePixel5] = (pixel); \
450 ((CARD16 *) (dst))[DoublePixel3] = (pixel); \
453 ((CARD32 *) (dst))[QuadPixel1] = (pixel); \
457 #endif /* PGSZ == 64 */
460 #define SwitchBitGroup(dst,pixel,bits) { \
465 SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel0] = (pixel);) \
468 SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel1] = (pixel);) \
471 SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel0] = (pixel);) \
474 SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel2] = (pixel);) \
477 SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel0] = (pixel); \
478 ((CARD8 *) (dst))[SinglePixel2] = (pixel);) \
481 SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel1] = (pixel); \
482 ((CARD8 *) (dst))[SinglePixel2] = (pixel);) \
485 SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel0] = (pixel); \
486 ((CARD8 *) (dst))[SinglePixel2] = (pixel);) \
489 SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel3] = (pixel);) \
492 SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel0] = (pixel); \
493 ((CARD8 *) (dst))[SinglePixel3] = (pixel);) \
496 SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel1] = (pixel); \
497 ((CARD8 *) (dst))[SinglePixel3] = (pixel);) \
500 SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel0] = (pixel); \
501 ((CARD8 *) (dst))[SinglePixel3] = (pixel);) \
504 SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel1] = (pixel);) \
507 SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel0] = (pixel); \
508 ((CARD16 *) (dst))[DoublePixel1] = (pixel);) \
511 SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel1] = (pixel); \
512 ((CARD16 *) (dst))[DoublePixel1] = (pixel);) \
515 SwitchBitsLoop (((CARD32 *) (dst))[0] = (pixel);) \
519 #else /* PGSZ == 64 */
520 #define SwitchBitGroup(dst,pixel,bits) { \
521 if ( bits == 0xff ) \
522 SwitchBitsLoop (((PixelGroup *) (dst))[OctaPixel0] = (pixel);) \
524 switch (bits & 0x0f) { \
528 SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel0] = (pixel);) \
531 SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel1] = (pixel);) \
534 SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel0] = (pixel);)\
537 SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel2] = (pixel);) \
540 SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel0] = (pixel); \
541 ((CARD8 *) (dst))[SinglePixel2] = (pixel);) \
544 SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel1] = (pixel); \
545 ((CARD8 *) (dst))[SinglePixel2] = (pixel);) \
548 SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel0] = (pixel); \
549 ((CARD8 *) (dst))[SinglePixel2] = (pixel);) \
552 SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel3] = (pixel);) \
555 SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel0] = (pixel); \
556 ((CARD8 *) (dst))[SinglePixel3] = (pixel);) \
559 SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel1] = (pixel); \
560 ((CARD8 *) (dst))[SinglePixel3] = (pixel);) \
563 SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel0] = (pixel); \
564 ((CARD8 *) (dst))[SinglePixel3] = (pixel);) \
567 SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel1] = (pixel);)\
570 SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel0] = (pixel); \
571 ((CARD16 *) (dst))[DoublePixel1] = (pixel);)\
574 SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel1] = (pixel); \
575 ((CARD16 *) (dst))[DoublePixel1] = (pixel);)\
578 SwitchBitsLoop (((CARD32 *) (dst))[QuadPixel0] = (pixel);) \
581 switch ((bits & 0xf0) >> 4) { \
585 SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel4] = (pixel);) \
588 SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel5] = (pixel);) \
591 SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel2] = (pixel);)\
594 SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel6] = (pixel);) \
597 SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel4] = (pixel); \
598 ((CARD8 *) (dst))[SinglePixel6] = (pixel);) \
601 SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel5] = (pixel); \
602 ((CARD8 *) (dst))[SinglePixel6] = (pixel);) \
605 SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel2] = (pixel); \
606 ((CARD8 *) (dst))[SinglePixel6] = (pixel);) \
609 SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel7] = (pixel);) \
612 SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel4] = (pixel); \
613 ((CARD8 *) (dst))[SinglePixel7] = (pixel);) \
616 SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel5] = (pixel); \
617 ((CARD8 *) (dst))[SinglePixel7] = (pixel);) \
620 SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel2] = (pixel); \
621 ((CARD8 *) (dst))[SinglePixel7] = (pixel);) \
624 SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel3] = (pixel);)\
627 SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel4] = (pixel); \
628 ((CARD16 *) (dst))[DoublePixel3] = (pixel);)\
631 SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel5] = (pixel); \
632 ((CARD16 *) (dst))[DoublePixel3] = (pixel);)\
635 SwitchBitsLoop (((CARD32 *) (dst))[QuadPixel1] = (pixel);) \
640 #endif /* PGSZ == 64 */
641 #endif /* PSZ == 8 */
646 #define WriteBitGroup(dst,pixel,bits) \
651 ((CARD16 *) (dst))[SinglePixel0] = (pixel); \
654 ((CARD16 *) (dst))[SinglePixel1] = (pixel); \
657 ((CARD32 *) (dst))[DoublePixel0] = (pixel); \
660 ((CARD16 *) (dst))[SinglePixel2] = (pixel); \
663 ((CARD16 *) (dst))[SinglePixel0] = (pixel); \
664 ((CARD16 *) (dst))[SinglePixel2] = (pixel); \
667 ((CARD16 *) (dst))[SinglePixel1] = (pixel); \
668 ((CARD16 *) (dst))[SinglePixel2] = (pixel); \
671 ((CARD32 *) (dst))[DoublePixel0] = (pixel); \
672 ((CARD16 *) (dst))[SinglePixel2] = (pixel); \
675 ((CARD16 *) (dst))[SinglePixel3] = (pixel); \
678 ((CARD16 *) (dst))[SinglePixel0] = (pixel); \
679 ((CARD16 *) (dst))[SinglePixel3] = (pixel); \
682 ((CARD16 *) (dst))[SinglePixel1] = (pixel); \
683 ((CARD16 *) (dst))[SinglePixel3] = (pixel); \
686 ((CARD32 *) (dst))[DoublePixel0] = (pixel); \
687 ((CARD16 *) (dst))[SinglePixel3] = (pixel); \
690 ((CARD32 *) (dst))[DoublePixel1] = (pixel); \
693 ((CARD16 *) (dst))[SinglePixel0] = (pixel); \
694 ((CARD32 *) (dst))[DoublePixel1] = (pixel); \
697 ((CARD16 *) (dst))[SinglePixel1] = (pixel); \
698 ((CARD32 *) (dst))[DoublePixel1] = (pixel); \
701 ((CARD32 *) (dst))[DoublePixel0] = (pixel); \
702 ((CARD32 *) (dst))[DoublePixel1] = (pixel); \
705 #else /* PGSZ == 64 */
706 #define WriteBitGroup(dst,pixel,bits) \
707 if ( bits == 0xff ) { \
708 ((PixelGroup *) (dst))[QuadPixel0] = (pixel); \
709 ((PixelGroup *) (dst))[QuadPixel1] = (pixel); \
712 switch (bits & 0x0f) { \
716 ((CARD16 *) (dst))[SinglePixel0] = (pixel); \
719 ((CARD16 *) (dst))[SinglePixel1] = (pixel); \
722 ((CARD32 *) (dst))[DoublePixel0] = (pixel); \
725 ((CARD16 *) (dst))[SinglePixel2] = (pixel); \
728 ((CARD16 *) (dst))[SinglePixel0] = (pixel); \
729 ((CARD16 *) (dst))[SinglePixel2] = (pixel); \
732 ((CARD16 *) (dst))[SinglePixel1] = (pixel); \
733 ((CARD16 *) (dst))[SinglePixel2] = (pixel); \
736 ((CARD32 *) (dst))[DoublePixel0] = (pixel); \
737 ((CARD16 *) (dst))[SinglePixel2] = (pixel); \
740 ((CARD16 *) (dst))[SinglePixel3] = (pixel); \
743 ((CARD16 *) (dst))[SinglePixel0] = (pixel); \
744 ((CARD16 *) (dst))[SinglePixel3] = (pixel); \
747 ((CARD16 *) (dst))[SinglePixel1] = (pixel); \
748 ((CARD16 *) (dst))[SinglePixel3] = (pixel); \
751 ((CARD32 *) (dst))[DoublePixel0] = (pixel); \
752 ((CARD16 *) (dst))[SinglePixel3] = (pixel); \
755 ((CARD32 *) (dst))[DoublePixel1] = (pixel); \
758 ((CARD16 *) (dst))[SinglePixel0] = (pixel); \
759 ((CARD32 *) (dst))[DoublePixel1] = (pixel); \
762 ((CARD16 *) (dst))[SinglePixel1] = (pixel); \
763 ((CARD32 *) (dst))[DoublePixel1] = (pixel); \
766 ((CARD32 *) (dst))[DoublePixel0] = (pixel); \
767 ((CARD32 *) (dst))[DoublePixel1] = (pixel); \
770 switch ((bits & 0xf0) >> 4) { \
774 ((CARD16 *) (dst))[SinglePixel4] = (pixel); \
777 ((CARD16 *) (dst))[SinglePixel5] = (pixel); \
780 ((CARD32 *) (dst))[DoublePixel2] = (pixel); \
783 ((CARD16 *) (dst))[SinglePixel6] = (pixel); \
786 ((CARD16 *) (dst))[SinglePixel4] = (pixel); \
787 ((CARD16 *) (dst))[SinglePixel6] = (pixel); \
790 ((CARD16 *) (dst))[SinglePixel5] = (pixel); \
791 ((CARD16 *) (dst))[SinglePixel6] = (pixel); \
794 ((CARD32 *) (dst))[DoublePixel2] = (pixel); \
795 ((CARD16 *) (dst))[SinglePixel6] = (pixel); \
798 ((CARD16 *) (dst))[SinglePixel7] = (pixel); \
801 ((CARD16 *) (dst))[SinglePixel4] = (pixel); \
802 ((CARD16 *) (dst))[SinglePixel7] = (pixel); \
805 ((CARD16 *) (dst))[SinglePixel5] = (pixel); \
806 ((CARD16 *) (dst))[SinglePixel7] = (pixel); \
809 ((CARD32 *) (dst))[DoublePixel2] = (pixel); \
810 ((CARD16 *) (dst))[SinglePixel7] = (pixel); \
813 ((CARD32 *) (dst))[DoublePixel3] = (pixel); \
816 ((CARD16 *) (dst))[SinglePixel4] = (pixel); \
817 ((CARD32 *) (dst))[DoublePixel3] = (pixel); \
820 ((CARD16 *) (dst))[SinglePixel5] = (pixel); \
821 ((CARD32 *) (dst))[DoublePixel3] = (pixel); \
824 ((CARD32 *) (dst))[DoublePixel2] = (pixel); \
825 ((CARD32 *) (dst))[DoublePixel3] = (pixel); \
832 #define SwitchBitGroup(dst,pixel,bits) { \
837 SwitchBitsLoop (((CARD16 *) (dst))[SinglePixel0] = (pixel);) \
840 SwitchBitsLoop (((CARD16 *) (dst))[SinglePixel1] = (pixel);) \
843 SwitchBitsLoop (((CARD32 *) (dst))[DoublePixel0] = (pixel);) \
846 SwitchBitsLoop (((CARD16 *) (dst))[SinglePixel2] = (pixel);) \
849 SwitchBitsLoop (((CARD16 *) (dst))[SinglePixel0] = (pixel); \
850 ((CARD16 *) (dst))[SinglePixel2] = (pixel);) \
853 SwitchBitsLoop (((CARD16 *) (dst))[SinglePixel1] = (pixel); \
854 ((CARD16 *) (dst))[SinglePixel2] = (pixel);) \
857 SwitchBitsLoop (((CARD32 *) (dst))[DoublePixel0] = (pixel); \
858 ((CARD16 *) (dst))[SinglePixel2] = (pixel);) \
861 SwitchBitsLoop (((CARD16 *) (dst))[SinglePixel3] = (pixel);) \
864 SwitchBitsLoop (((CARD16 *) (dst))[SinglePixel0] = (pixel); \
865 ((CARD16 *) (dst))[SinglePixel3] = (pixel);) \
868 SwitchBitsLoop (((CARD16 *) (dst))[SinglePixel1] = (pixel); \
869 ((CARD16 *) (dst))[SinglePixel3] = (pixel);) \
872 SwitchBitsLoop (((CARD32 *) (dst))[DoublePixel0] = (pixel); \
873 ((CARD16 *) (dst))[SinglePixel3] = (pixel);) \
876 SwitchBitsLoop (((CARD32 *) (dst))[DoublePixel1] = (pixel);) \
879 SwitchBitsLoop (((CARD16 *) (dst))[SinglePixel0] = (pixel); \
880 ((CARD32 *) (dst))[DoublePixel1] = (pixel);) \
883 SwitchBitsLoop (((CARD16 *) (dst))[SinglePixel1] = (pixel); \
884 ((CARD32 *) (dst))[DoublePixel1] = (pixel);) \
887 SwitchBitsLoop (((CARD32 *) (dst))[DoublePixel0] = (pixel); \
888 ((CARD32 *) (dst))[DoublePixel1] = (pixel);) \
892 #else /* PGSZ == 64 */
893 #define SwitchBitGroup(dst,pixel,bits) { \
894 cfb cannot hack 64-bit SwitchBitGroup psz=PSZ
897 #endif /* PSZ == 16 */
905 #define WriteBitGroup(dst,pixel,bits) \
907 register CARD32 reg_pixel = (pixel); \
912 ((CARD16 *) (dst))[DoublePixel0] = reg_pixel; \
913 ((CARD8 *) (dst))[SinglePixel2] = ((reg_pixel>>16)&0xFF); \
916 ((CARD8 *) (dst))[SinglePixel3] = reg_pixel&0xFF; \
917 ((CARD16 *) (dst))[DoublePixel2] = (reg_pixel>>8)&0xFFFF; \
920 ((CARD8 *) (dst))[SinglePixel3] = reg_pixel & 0xFF; \
921 ((CARD16 *) (dst))[DoublePixel0] = reg_pixel; \
922 ((CARD16 *) (dst))[DoublePixel2] = (reg_pixel>>8)&0xFFFF; \
923 ((CARD8 *) (dst))[SinglePixel2] = (reg_pixel>>16&0xFF); \
926 ((CARD16 *) (dst))[DoublePixel3] = reg_pixel; \
927 ((CARD8 *) (dst))[SinglePixel8] = (reg_pixel>>16)&0xFF; \
930 ((CARD16 *) (dst))[DoublePixel0] = \
931 ((CARD16 *) (dst))[DoublePixel3] = reg_pixel; \
933 ((CARD8 *) (dst))[SinglePixel2] = \
934 ((CARD8 *) (dst))[SinglePixel8] = reg_pixel&0xFF; \
937 ((CARD8 *) (dst))[SinglePixel3] = reg_pixel; \
938 ((CARD16 *) (dst))[DoublePixel3] = reg_pixel; \
940 ((CARD16 *) (dst))[DoublePixel2] = reg_pixel; \
942 ((CARD8 *) (dst))[SinglePixel8] = reg_pixel&0xFF; \
945 ((CARD16 *) (dst))[DoublePixel0] = \
946 ((CARD16 *) (dst))[DoublePixel3] = reg_pixel; \
947 ((CARD8 *) (dst))[SinglePixel3] = reg_pixel&0xFF; \
949 ((CARD16 *) (dst))[DoublePixel2] = reg_pixel; \
951 ((CARD8 *) (dst))[SinglePixel2] = \
952 ((CARD8 *) (dst))[SinglePixel8] = reg_pixel&0xFF; \
955 ((CARD8 *) (dst))[SinglePixel9] = reg_pixel&0xFF; \
956 ((CARD16 *) (dst))[DoublePixel5] = (reg_pixel>>8); \
959 ((CARD16 *) (dst))[DoublePixel0] = reg_pixel; \
960 ((CARD8 *) (dst))[SinglePixel9] = reg_pixel&0xFF; \
962 ((CARD16 *) (dst))[DoublePixel5] = reg_pixel; \
964 ((CARD8 *) (dst))[SinglePixel2] = reg_pixel&0xFF; \
967 ((CARD8 *) (dst))[SinglePixel3] = \
968 ((CARD8 *) (dst))[SinglePixel9] = reg_pixel&0xFF; \
970 ((CARD16 *) (dst))[DoublePixel2] = \
971 ((CARD16 *) (dst))[DoublePixel5] = reg_pixel; \
974 ((CARD8 *) (dst))[SinglePixel3] = \
975 ((CARD8 *) (dst))[SinglePixel9] = reg_pixel; \
976 ((CARD16 *) (dst))[DoublePixel0] = reg_pixel; \
978 ((CARD16 *) (dst))[DoublePixel2] = \
979 ((CARD16 *) (dst))[DoublePixel5] = reg_pixel; \
981 ((CARD8 *) (dst))[SinglePixel2] = reg_pixel; \
984 ((CARD16 *) (dst))[DoublePixel3] = reg_pixel; \
985 ((CARD8 *) (dst))[SinglePixel9] = reg_pixel; \
987 ((CARD16 *) (dst))[DoublePixel5] = reg_pixel; \
989 ((CARD8 *) (dst))[SinglePixel8] = reg_pixel; \
992 ((CARD16 *) (dst))[DoublePixel0] = \
993 ((CARD16 *) (dst))[DoublePixel3] = reg_pixel; \
994 ((CARD8 *) (dst))[SinglePixel9] = reg_pixel; \
996 ((CARD16 *) (dst))[DoublePixel5] = reg_pixel; \
998 ((CARD8 *) (dst))[SinglePixel2] = \
999 ((CARD8 *) (dst))[SinglePixel8] = reg_pixel; \
1002 ((CARD8 *) (dst))[SinglePixel3] = \
1003 ((CARD8 *) (dst))[SinglePixel9] = reg_pixel; \
1004 ((CARD16 *) (dst))[DoublePixel3] = reg_pixel; \
1006 ((CARD16 *) (dst))[DoublePixel2] = \
1007 ((CARD16 *) (dst))[DoublePixel5] = reg_pixel; \
1009 ((CARD8 *) (dst))[SinglePixel8] = reg_pixel; \
1012 ((CARD16 *) (dst))[DoublePixel0] = \
1013 ((CARD16 *) (dst))[DoublePixel3] = reg_pixel; \
1014 ((CARD8 *) (dst))[SinglePixel3] = \
1015 ((CARD8 *) (dst))[SinglePixel9] = reg_pixel; \
1017 ((CARD16 *) (dst))[DoublePixel2] = \
1018 ((CARD16 *) (dst))[DoublePixel5] = reg_pixel; \
1020 ((CARD8 *) (dst))[SinglePixel8] = \
1021 ((CARD8 *) (dst))[SinglePixel2] = reg_pixel; \
1025 #else /* PGSZ == 64 */
1026 #define WriteBitGroup(dst,pixel,bits) \
1027 if ( bits == 0xff ) { \
1028 ((PixelGroup *) (dst))[DoublePixel0] = (pixel); \
1029 ((PixelGroup *) (dst))[DoublePixel1] = (pixel); \
1030 ((PixelGroup *) (dst))[DoublePixel2] = (pixel); \
1031 ((PixelGroup *) (dst))[DoublePixel3] = (pixel); \
1034 switch (bits & 0x0f) { \
1038 ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
1041 ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
1044 ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
1045 ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
1048 ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
1051 ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
1052 ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
1055 ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
1056 ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
1059 ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
1060 ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
1061 ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
1064 ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
1067 ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
1068 ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
1071 ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
1072 ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
1075 ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
1076 ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
1077 ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
1080 ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
1081 ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
1084 ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
1085 ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
1086 ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
1089 ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
1090 ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
1091 ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
1094 ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
1095 ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
1096 ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
1097 ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
1100 switch ((bits & 0xf0) >> 4) { \
1104 ((CARD32 *) (dst))[SinglePixel4] = (pixel); \
1107 ((CARD32 *) (dst))[SinglePixel5] = (pixel); \
1110 ((CARD32 *) (dst))[SinglePixel4] = (pixel); \
1111 ((CARD32 *) (dst))[SinglePixel5] = (pixel); \
1114 ((CARD32 *) (dst))[SinglePixel6] = (pixel); \
1117 ((CARD32 *) (dst))[SinglePixel4] = (pixel); \
1118 ((CARD32 *) (dst))[SinglePixel6] = (pixel); \
1121 ((CARD32 *) (dst))[SinglePixel5] = (pixel); \
1122 ((CARD32 *) (dst))[SinglePixel6] = (pixel); \
1125 ((CARD32 *) (dst))[SinglePixel4] = (pixel); \
1126 ((CARD32 *) (dst))[SinglePixel5] = (pixel); \
1127 ((CARD32 *) (dst))[SinglePixel6] = (pixel); \
1130 ((CARD32 *) (dst))[SinglePixel7] = (pixel); \
1133 ((CARD32 *) (dst))[SinglePixel4] = (pixel); \
1134 ((CARD32 *) (dst))[SinglePixel7] = (pixel); \
1137 ((CARD32 *) (dst))[SinglePixel5] = (pixel); \
1138 ((CARD32 *) (dst))[SinglePixel7] = (pixel); \
1141 ((CARD32 *) (dst))[SinglePixel4] = (pixel); \
1142 ((CARD32 *) (dst))[SinglePixel5] = (pixel); \
1143 ((CARD32 *) (dst))[SinglePixel7] = (pixel); \
1146 ((CARD32 *) (dst))[SinglePixel6] = (pixel); \
1147 ((CARD32 *) (dst))[SinglePixel7] = (pixel); \
1150 ((CARD32 *) (dst))[SinglePixel4] = (pixel); \
1151 ((CARD32 *) (dst))[SinglePixel6] = (pixel); \
1152 ((CARD32 *) (dst))[SinglePixel7] = (pixel); \
1155 ((CARD32 *) (dst))[SinglePixel5] = (pixel); \
1156 ((CARD32 *) (dst))[SinglePixel6] = (pixel); \
1157 ((CARD32 *) (dst))[SinglePixel7] = (pixel); \
1160 ((CARD32 *) (dst))[SinglePixel4] = (pixel); \
1161 ((CARD32 *) (dst))[SinglePixel5] = (pixel); \
1162 ((CARD32 *) (dst))[SinglePixel6] = (pixel); \
1163 ((CARD32 *) (dst))[SinglePixel7] = (pixel); \
1170 #define SwitchBitGroup(dst,pixel,bits) { \
1175 SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel0] = (pixel); \
1176 ((CARD8 *) (dst))[SinglePixel2] = (pixel);) \
1179 SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel3] = (pixel); \
1180 ((CARD16 *) (dst))[DoublePixel2] = (pixel);) \
1183 SwitchBitsLoop (((CARD32 *) (dst))[QuadPixel0] = (pixel); \
1184 ((CARD16 *) (dst))[DoublePixel2] = (pixel);) \
1187 SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel3] = (pixel); \
1188 ((CARD8 *) (dst))[SinglePixel8] = (pixel);) \
1191 SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel0] = (pixel); \
1192 ((CARD8 *) (dst))[SinglePixel2] = (pixel); \
1193 ((CARD16 *) (dst))[DoublePixel3] = (pixel); \
1194 ((CARD8 *) (dst))[SinglePixel8] = (pixel);) \
1197 SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel3] = (pixel); \
1198 ((CARD32 *) (dst))[QuadPixel2] = (pixel); \
1199 ((CARD8 *) (dst))[SinglePixel8] = (pixel);) \
1202 SwitchBitsLoop (((CARD32 *) (dst))[QuadPixel0] = (pixel); \
1203 ((CARD32 *) (dst))[QuadPixel1] = (pixel); \
1204 ((CARD8 *) (dst))[SinglePixel8] = (pixel);) \
1207 SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel9] = (pixel); \
1208 ((CARD16 *) (dst))[DoublePixel5] = (pixel);) \
1211 SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel0] = (pixel); \
1212 ((CARD8 *) (dst))[SinglePixel2] = (pixel); \
1213 ((CARD8 *) (dst))[SinglePixel9] = (pixel); \
1214 ((CARD16 *) (dst))[DoublePixel5] = (pixel);) \
1217 SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel3] = (pixel); \
1218 ((CARD16 *) (dst))[DoublePixel2] = (pixel); \
1219 ((CARD8 *) (dst))[SinglePixel9] = (pixel); \
1220 ((CARD16 *) (dst))[DoublePixel5] = (pixel);) \
1223 SwitchBitsLoop (((CARD32 *) (dst))[QuadPixel0] = (pixel); \
1224 ((CARD16 *) (dst))[DoublePixel3] = (pixel);) \
1225 ((CARD8 *) (dst))[SinglePixel9] = (pixel); \
1226 ((CARD16 *) (dst))[DoublePixel5] = (pixel);) \
1229 SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel3] = (pixel); \
1230 ((CARD32 *) (dst))[QuadPixel2] = (pixel);) \
1233 SwitchBitsLoop (((CARD16 *) (dst))[SinglePixel0] = (pixel); \
1234 ((CARD8 *) (dst))[SinglePixel2] = (pixel); \
1235 ((CARD16 *) (dst))[DoublePixel3] = (pixel); \
1236 ((CARD32 *) (dst))[QuadPixel2] = (pixel);) \
1239 SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel3] = (pixel); \
1240 ((CARD32 *) (dst))[QuadPixel1] = (pixel); \
1241 ((CARD32 *) (dst))[QuadPixel2] = (pixel);) \
1244 SwitchBitsLoop (((CARD32 *) (dst))[QuadPixel0] = (pixel); \
1245 ((CARD32 *) (dst))[QuadPixel1] = (pixel); \
1246 ((CARD32 *) (dst))[QuadPixel2] = (pixel);) \
1250 #else /* PGSZ == 64 */
1251 #define SwitchBitGroup(dst,pixel,bits) { \
1252 cfb cannot hack 64-bit SwitchBitGroup psz=PSZ
1255 #endif /* PSZ == 24 */
1260 #define WriteBitGroup(dst,pixel,bits) \
1265 ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
1268 ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
1271 ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
1272 ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
1275 ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
1278 ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
1279 ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
1282 ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
1283 ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
1286 ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
1287 ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
1288 ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
1291 ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
1294 ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
1295 ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
1298 ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
1299 ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
1302 ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
1303 ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
1304 ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
1307 ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
1308 ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
1311 ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
1312 ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
1313 ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
1316 ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
1317 ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
1318 ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
1321 ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
1322 ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
1323 ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
1324 ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
1327 #else /* PGSZ == 64 */
1328 #define WriteBitGroup(dst,pixel,bits) \
1329 if ( bits == 0xff ) { \
1330 ((PixelGroup *) (dst))[DoublePixel0] = (pixel); \
1331 ((PixelGroup *) (dst))[DoublePixel1] = (pixel); \
1332 ((PixelGroup *) (dst))[DoublePixel2] = (pixel); \
1333 ((PixelGroup *) (dst))[DoublePixel3] = (pixel); \
1336 switch (bits & 0x0f) { \
1340 ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
1343 ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
1346 ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
1347 ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
1350 ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
1353 ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
1354 ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
1357 ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
1358 ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
1361 ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
1362 ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
1363 ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
1366 ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
1369 ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
1370 ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
1373 ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
1374 ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
1377 ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
1378 ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
1379 ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
1382 ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
1383 ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
1386 ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
1387 ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
1388 ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
1391 ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
1392 ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
1393 ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
1396 ((CARD32 *) (dst))[SinglePixel0] = (pixel); \
1397 ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
1398 ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
1399 ((CARD32 *) (dst))[SinglePixel3] = (pixel); \
1402 switch ((bits & 0xf0) >> 4) { \
1406 ((CARD32 *) (dst))[SinglePixel4] = (pixel); \
1409 ((CARD32 *) (dst))[SinglePixel5] = (pixel); \
1412 ((CARD32 *) (dst))[SinglePixel4] = (pixel); \
1413 ((CARD32 *) (dst))[SinglePixel5] = (pixel); \
1416 ((CARD32 *) (dst))[SinglePixel6] = (pixel); \
1419 ((CARD32 *) (dst))[SinglePixel4] = (pixel); \
1420 ((CARD32 *) (dst))[SinglePixel6] = (pixel); \
1423 ((CARD32 *) (dst))[SinglePixel5] = (pixel); \
1424 ((CARD32 *) (dst))[SinglePixel6] = (pixel); \
1427 ((CARD32 *) (dst))[SinglePixel4] = (pixel); \
1428 ((CARD32 *) (dst))[SinglePixel5] = (pixel); \
1429 ((CARD32 *) (dst))[SinglePixel6] = (pixel); \
1432 ((CARD32 *) (dst))[SinglePixel7] = (pixel); \
1435 ((CARD32 *) (dst))[SinglePixel4] = (pixel); \
1436 ((CARD32 *) (dst))[SinglePixel7] = (pixel); \
1439 ((CARD32 *) (dst))[SinglePixel5] = (pixel); \
1440 ((CARD32 *) (dst))[SinglePixel7] = (pixel); \
1443 ((CARD32 *) (dst))[SinglePixel4] = (pixel); \
1444 ((CARD32 *) (dst))[SinglePixel5] = (pixel); \
1445 ((CARD32 *) (dst))[SinglePixel7] = (pixel); \
1448 ((CARD32 *) (dst))[SinglePixel6] = (pixel); \
1449 ((CARD32 *) (dst))[SinglePixel7] = (pixel); \
1452 ((CARD32 *) (dst))[SinglePixel4] = (pixel); \
1453 ((CARD32 *) (dst))[SinglePixel6] = (pixel); \
1454 ((CARD32 *) (dst))[SinglePixel7] = (pixel); \
1457 ((CARD32 *) (dst))[SinglePixel5] = (pixel); \
1458 ((CARD32 *) (dst))[SinglePixel6] = (pixel); \
1459 ((CARD32 *) (dst))[SinglePixel7] = (pixel); \
1462 ((CARD32 *) (dst))[SinglePixel4] = (pixel); \
1463 ((CARD32 *) (dst))[SinglePixel5] = (pixel); \
1464 ((CARD32 *) (dst))[SinglePixel6] = (pixel); \
1465 ((CARD32 *) (dst))[SinglePixel7] = (pixel); \
1472 #define SwitchBitGroup(dst,pixel,bits) { \
1477 SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel0] = (pixel);) \
1480 SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel1] = (pixel);) \
1483 SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel0] = (pixel); \
1484 ((CARD32 *) (dst))[SinglePixel1] = (pixel);) \
1487 SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel2] = (pixel);) \
1490 SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel0] = (pixel); \
1491 ((CARD32 *) (dst))[SinglePixel2] = (pixel);) \
1494 SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel1] = (pixel); \
1495 ((CARD32 *) (dst))[SinglePixel2] = (pixel);) \
1498 SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel0] = (pixel); \
1499 ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
1500 ((CARD32 *) (dst))[SinglePixel2] = (pixel);) \
1503 SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel3] = (pixel);) \
1506 SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel0] = (pixel); \
1507 ((CARD32 *) (dst))[SinglePixel3] = (pixel);) \
1510 SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel1] = (pixel); \
1511 ((CARD32 *) (dst))[SinglePixel3] = (pixel);) \
1514 SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel0] = (pixel); \
1515 ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
1516 ((CARD32 *) (dst))[SinglePixel3] = (pixel);) \
1519 SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel2] = (pixel); \
1520 ((CARD32 *) (dst))[SinglePixel3] = (pixel);) \
1523 SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel0] = (pixel); \
1524 ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
1525 ((CARD32 *) (dst))[SinglePixel3] = (pixel);) \
1528 SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel1] = (pixel); \
1529 ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
1530 ((CARD32 *) (dst))[SinglePixel3] = (pixel);) \
1533 SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel0] = (pixel); \
1534 ((CARD32 *) (dst))[SinglePixel1] = (pixel); \
1535 ((CARD32 *) (dst))[SinglePixel2] = (pixel); \
1536 ((CARD32 *) (dst))[SinglePixel3] = (pixel);) \
1540 #else /* PGSZ == 64 */
1541 #define SwitchBitGroup(dst,pixel,bits) { \
1542 cfb cannot hack 64-bit SwitchBitGroup psz=PSZ
1545 #endif /* PSZ == 32 */
1546 #endif /* AVOID_MEMORY_READ */
1548 extern PixelGroup cfb8BitLenMasks[PGSZ];
1550 extern int cfb8SetStipple (
1551 #if NeedFunctionPrototypes
1553 unsigned long /*fg*/,
1554 unsigned long /*planemask*/
1558 extern int cfb8SetOpaqueStipple (
1559 #if NeedFunctionPrototypes
1561 unsigned long /*fg*/,
1562 unsigned long /*bg*/,
1563 unsigned long /*planemask*/
1567 extern int cfb8ComputeClipMasks32 (
1568 #if NeedFunctionPrototypes