iplmskbits.h revision b8e299dddd091ae24e0c08c45d91b8f937bd14d2
/* $XFree86$ */
/* Modified nov 94 by Martin Schaller (Martin_Schaller@maus.r.de) for use with
interleaved planes */
#define INTER_PIXGRP unsigned short
#define INTER_PGSZ 16
#define INTER_PGSZB 2
#define INTER_PPG 16
#define INTER_PPGMSK 0xffff
#define INTER_PLST 15
#define INTER_PIM 15
#define INTER_PGSH 4
extern INTER_PIXGRP iplmask[];
extern INTER_PIXGRP iplstarttab[];
extern INTER_PIXGRP iplendtab[];
extern INTER_PIXGRP iplstartpartial[];
extern INTER_PIXGRP iplendpartial[];
#define MFB_PSZ 1
#define INTER_NEXT(x) ((x) + INTER_PLANES)
#define INTER_NEXT_GROUP(x) (x) += INTER_PLANES
#define INTER_PREV_GROUP(x) (x) -= INTER_PLANES
#define INTER_DECLAREG(x) INTER_PIXGRP x
#define INTER_DECLARERRAX(x) INTER_PIXGRP *(x)
/* and |= PLANE_FILL(~fg), or &= PLANE_FILL(fg) */
PLANE_TIMESG( \
})
#ifdef HAVE_DIX_CONFIG_H
#include <dix-config.h>
#endif
#if INTER_PLANES == 2
#define PLANE_TIMESCONDG(x) \
({ int _INDEX; \
int _ret; \
(_INDEX=1, (x)) && \
_ret; \
})
#define PLANE_TIMESCOND(x) \
({ int _INDEX; \
(_INDEX=0, x) \
})
#define PLANE_TIMESG(x) \
{ int _INDEX; \
_INDEX=0; x; \
_INDEX=1; x; \
}
#define PLANE_TIMES(x) \
{ int _INDEX; \
_INDEX=0; x; \
}
#define PLANE_TIMESCONDG(x) \
({ int _INDEX; \
int _ret; \
(_INDEX=1, (x)) && \
(_INDEX=2, (x)) && \
(_INDEX=3, (x)); \
_ret; \
})
#define PLANE_TIMESCOND(x) \
({ int _INDEX; \
((_INDEX=0, x) && \
(_INDEX=1, x)) \
})
#define PLANE_TIMESG(x) \
{ int _INDEX; \
_INDEX=0; x; \
_INDEX=1; x; \
_INDEX=2; x; \
_INDEX=3; x; \
}
#define PLANE_TIMES(x) \
{ int _INDEX; \
_INDEX=0; x; \
_INDEX=1; x; \
}
#define PLANE_TIMESCONDG(x) \
({ int _INDEX; \
int _ret; \
(_INDEX=1, (x)) && \
(_INDEX=2, (x)) && \
(_INDEX=3, (x)) && \
(_INDEX=4, (x)) && \
(_INDEX=5, (x)) && \
(_INDEX=6, (x)) && \
(_INDEX=7, (x))); \
_ret; \
})
#define PLANE_TIMESCOND(x) \
({ int _INDEX; \
((_INDEX=0, x) && \
(_INDEX=1, x) && \
(_INDEX=2, x) && \
(_INDEX=3, x)) \
})
#define PLANE_TIMESG(x) \
{ int _INDEX; \
_INDEX=0; x; \
_INDEX=1; x; \
_INDEX=2; x; \
_INDEX=3; x; \
_INDEX=4; x; \
_INDEX=5; x; \
_INDEX=6; x; \
_INDEX=7; x; \
}
#define PLANE_TIMES(x) \
{ int _INDEX; \
_INDEX=0; x; \
_INDEX=1; x; \
_INDEX=2; x; \
_INDEX=3; x; \
}
#endif
/* src = 0 */
#define INTER_IS_CLR(src) \
/* src = PPGMSK ? */
#define INTER_IS_SET(src) \
/* (src1 ^ scr2) = PPGMSK ? */
/* dst = ~src */
/* dst = 0 */
/* dst = PPGMSK */
/* dst = src */
/* dst2 = (dst & ~mask) | (src & mask) */
PLANE_TIMESG( \
)
/* dst2 = dst ^ src */
/* dst2 = dst ^ (src & mask) */
/* dst2 = dst & src */
/* dst2 = dst & (src | ~mask) */
/* dst2 = dst | src */
/* dst2 = dst | (src & mask) */
/* dst = src | msk */
/* dst = src & msk */
/* dst = (src1 & msk1) | (src2 & msk2) */
#define INTER_PLANE(x) (1<<(x))
/* dst = src >> cnt */
/* dst = src << cnt */
/* bits1=(bits >> right) | (bits=psrc) << left) */
/* bits1=(bits << left) | (bits=psrc) >> right) */
/* dst=src2 & (src1 & a1 ^ x1) ^ (src1 & a2 ^ x2) */
/* dst=src2 & ((src1 & a1 ^ x1) | ~mask) ^ ((src1 & a2 ^ x2) & mask) */
/* dst = (src & ~(bitmask | planemask)) | (insert | (bitmask | planemask)) */
PLANE_TIMESG( \
)
/* dst = (src & ~bitmask) | ((insert >> shift) & bitmask) */
PLANE_TIMESG( \
)
/* dst = (src & ~bitmask) | ((insert << shift) & bitmask) */
PLANE_TIMESG( \
)
/* dst = ((src1 << sl1) & bitmask1) | ((src2 >> sr2) & bitmask2) */
PLANE_TIMESG( \
)
/* dst = src & and ^ xor */
PLANE_TIMESG( \
{ \
PLANE_TIMES( \
PLANE_TIMES( \
} \
else { \
switch (alu) \
{ \
case GXclear: \
PLANE_TIMES( \
break; \
case GXand: \
PLANE_TIMES( \
break; \
case GXandReverse: \
PLANE_TIMES( \
break; \
case GXandInverted: \
PLANE_TIMES( \
break; \
case GXnoop: \
PLANE_TIMES( \
break; \
case GXor: \
PLANE_TIMES( \
break; \
case GXnor: \
PLANE_TIMES( \
break; \
case GXequiv: \
PLANE_TIMES( \
break; \
case GXinvert: \
PLANE_TIMES( \
break; \
case GXorReverse: \
PLANE_TIMES( \
break; \
case GXcopyInverted: \
PLANE_TIMES( \
break; \
case GXorInverted: \
PLANE_TIMES( \
break; \
case GXnand: \
PLANE_TIMES( \
break; \
case GXset: \
PLANE_TIMES( \
break; \
} \
} \
}
{ \
unsigned long q; \
int m; \
if (ones) { \
q = (*(psrcstip)) << m; \
} \
else \
q = (*(psrcstip)) >> -m; \
} \
else { \
q = (~ *(psrcstip)) << m; \
} \
else \
q = (~ *(psrcstip)) >> -m; \
} \
q >>=16; \
}
{ \
unsigned long q,qn; \
int m; \
q = (*(psrcstip)) << m; \
} \
} \
else { \
q = (*(psrcstip)) >> -m; \
} \
q >>=16; \
qn >>=16; \
}
if (startmask) \
else \
nlg = (w) >> INTER_PGSH;
#define INTER_maskpartialbits(x, w, mask) \
iplendpartial[((x) + (w)) & INTER_PIM];
if ( ((x) + (w)) <= INTER_PPG) \
{ \
} \
else \
{ \
int m; \
m = INTER_PPG-(x); \
}
if ( ((x)+(w)) <= INTER_PPG) \
{ \
INTER_maskpartialbits((x), (w), tmpmask); \
} \
else \
{ \
unsigned long m; \
unsigned long n; \
m = INTER_PPG-(x); \
n = (w) - m; \
}
if ( ((x)+(w)) <= INTER_PPG) \
{ \
INTER_maskpartialbits((x), (w), tmpmask); \
} \
else \
{ \
unsigned long m; \
unsigned long n; \
m = INTER_PPG-(x); \
n = (w) - m; \
}
INTER_DECLAREGP(_t1); \
INTER_maskpartialbits((x), (w), _tmpmask); \
}