fbbits.c revision 35c4bbdf
1/*
2 * Copyright © 1998 Keith Packard
3 *
4 * Permission to use, copy, modify, distribute, and sell this software and its
5 * documentation for any purpose is hereby granted without fee, provided that
6 * the above copyright notice appear in all copies and that both that
7 * copyright notice and this permission notice appear in supporting
8 * documentation, and that the name of Keith Packard not be used in
9 * advertising or publicity pertaining to distribution of the software without
10 * specific, written prior permission.  Keith Packard makes no
11 * representations about the suitability of this software for any purpose.  It
12 * is provided "as is" without express or implied warranty.
13 *
14 * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
15 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
16 * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
17 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
18 * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
19 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
20 * PERFORMANCE OF THIS SOFTWARE.
21 */
22
23#ifdef HAVE_DIX_CONFIG_H
24#include <dix-config.h>
25#endif
26
27#include "fb.h"
28#include "miline.h"
29#include "mizerarc.h"
30
31#undef BRESSOLID
32#undef BRESDASH
33#undef DOTS
34#undef ARC
35#undef GLYPH
36#undef BITS
37#undef BITS2
38#undef BITS4
39
40#define BRESSOLID   fbBresSolid8
41#define BRESDASH    fbBresDash8
42#define DOTS	    fbDots8
43#define ARC	    fbArc8
44#define GLYPH	    fbGlyph8
45#define POLYLINE    fbPolyline8
46#define POLYSEGMENT fbPolySegment8
47#define BITS	    BYTE
48#define BITS2	    CARD16
49#define BITS4	    CARD32
50
51#include "fbbits.h"
52
53#undef BRESSOLID
54#undef BRESDASH
55#undef DOTS
56#undef ARC
57#undef GLYPH
58#undef POLYLINE
59#undef POLYSEGMENT
60#undef BITS
61#undef BITS2
62#undef BITS4
63
64#define BRESSOLID   fbBresSolid16
65#define BRESDASH    fbBresDash16
66#define DOTS	    fbDots16
67#define ARC	    fbArc16
68#define GLYPH	    fbGlyph16
69#define POLYLINE    fbPolyline16
70#define POLYSEGMENT fbPolySegment16
71#define BITS	    CARD16
72#define BITS2	    CARD32
73
74#include "fbbits.h"
75
76#undef BRESSOLID
77#undef BRESDASH
78#undef DOTS
79#undef ARC
80#undef GLYPH
81#undef POLYLINE
82#undef POLYSEGMENT
83#undef BITS
84#undef BITS2
85
86#define BRESSOLID   fbBresSolid24
87#define BRESDASH    fbBresDash24
88#define DOTS        fbDots24
89#define ARC         fbArc24
90#define POLYLINE    fbPolyline24
91#define POLYSEGMENT fbPolySegment24
92
93#define BITS        CARD32
94#define BITSUNIT    BYTE
95#define BITSMUL	    3
96
97#define FbDoTypeStore(b,t,x,s)	WRITE(((t *) (b)), (x) >> (s))
98#define FbDoTypeRRop(b,t,a,x,s) WRITE((t *) (b), FbDoRRop(READ((t *) (b)),\
99							  (a) >> (s), \
100							  (x) >> (s)))
101#define FbDoTypeMaskRRop(b,t,a,x,m,s) WRITE((t *) (b), FbDoMaskRRop(READ((t *) (b)),\
102								    (a) >> (s), \
103								    (x) >> (s), \
104								    (m) >> (s)))
105#if BITMAP_BIT_ORDER == LSBFirst
106#define BITSSTORE(b,x)	((unsigned long) (b) & 1 ? \
107			 (FbDoTypeStore (b, CARD8, x, 0), \
108			  FbDoTypeStore ((b) + 1, CARD16, x, 8)) : \
109			 (FbDoTypeStore (b, CARD16, x, 0), \
110			  FbDoTypeStore ((b) + 2, CARD8, x, 16)))
111#define BITSRROP(b,a,x)	((unsigned long) (b) & 1 ? \
112			 (FbDoTypeRRop(b,CARD8,a,x,0), \
113			  FbDoTypeRRop((b)+1,CARD16,a,x,8)) : \
114			 (FbDoTypeRRop(b,CARD16,a,x,0), \
115			  FbDoTypeRRop((b)+2,CARD8,a,x,16)))
116#else
117#define BITSSTORE(b,x)  ((unsigned long) (b) & 1 ? \
118			 (FbDoTypeStore (b, CARD8, x, 16), \
119			  FbDoTypeStore ((b) + 1, CARD16, x, 0)) : \
120			 (FbDoTypeStore (b, CARD16, x, 8), \
121			  FbDoTypeStore ((b) + 2, CARD8, x, 0)))
122#define BITSRROP(b,a,x)	((unsigned long) (b) & 1 ? \
123			 (FbDoTypeRRop (b, CARD8, a, x, 16), \
124			  FbDoTypeRRop ((b) + 1, CARD16, a, x, 0)) : \
125			 (FbDoTypeRRop (b, CARD16, a, x, 8), \
126			  FbDoTypeRRop ((b) + 2, CARD8, a, x, 0)))
127#endif
128
129#include "fbbits.h"
130
131#undef BITSSTORE
132#undef BITSRROP
133#undef BITSMUL
134#undef BITSUNIT
135#undef BITS
136
137#undef BRESSOLID
138#undef BRESDASH
139#undef DOTS
140#undef ARC
141#undef POLYLINE
142#undef POLYSEGMENT
143
144#define BRESSOLID   fbBresSolid32
145#define BRESDASH    fbBresDash32
146#define DOTS	    fbDots32
147#define ARC	    fbArc32
148#define GLYPH	    fbGlyph32
149#define POLYLINE    fbPolyline32
150#define POLYSEGMENT fbPolySegment32
151#define BITS	    CARD32
152
153#include "fbbits.h"
154
155#undef BRESSOLID
156#undef BRESDASH
157#undef DOTS
158#undef ARC
159#undef GLYPH
160#undef POLYLINE
161#undef POLYSEGMENT
162#undef BITS
163