X-Git-Url: https://git.sesse.net/?p=rdpsrv;a=blobdiff_plain;f=Xserver%2Fprograms%2FXserver%2Fcfb%2Fstipple68k.s;fp=Xserver%2Fprograms%2FXserver%2Fcfb%2Fstipple68k.s;h=d2e2eea8a735246d2322c03444a2271026c830f5;hp=0000000000000000000000000000000000000000;hb=b6e6afccf37f4ad0515ef2a698f714fdf1bf23b3;hpb=e3340a110a3b01756b8e67531395a33b40a17d37 diff --git a/Xserver/programs/Xserver/cfb/stipple68k.s b/Xserver/programs/Xserver/cfb/stipple68k.s new file mode 100644 index 0000000..d2e2eea --- /dev/null +++ b/Xserver/programs/Xserver/cfb/stipple68k.s @@ -0,0 +1,232 @@ +/* + * $XConsortium: stipple68k.s,v 1.3 94/04/17 20:29:09 keith Exp $ + * $XFree86: xc/programs/Xserver/cfb/stipple68k.s,v 3.0 1996/08/13 11:27:37 dawes Exp $ + * +Copyright (c) 1990 X Consortium + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of the X Consortium shall not be +used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization from the X Consortium. + * + * Author: Keith Packard, MIT X Consortium + */ + +/* + * Stipple code for 68k processors + */ + +#ifdef __ELF__ +#ifdef TETEXT +#define _cfbStippleStack cfbStippleStackTE +#else +#define _cfbStippleStack cfbStippleStack +#endif +#else +#ifdef TETEXT +#define _cfbStippleStack _cfbStippleStackTE +#endif +#endif + + +#define atemp a0 +#define addr a1 +#define stipple a2 +#define stride a3 +#define case a4 + +#define ctemp d0 +#define value d1 +#define count d2 +#define shift d3 +#define c d4 +#define lshift d5 +#define rshift d6 + +#define PushMask #0x3e38 +#define PopMask #0x1c7c +#define NumReg 8 +#define arg0 36 +#define arg1 40 +#define arg2 44 +#define arg3 48 +#define arg4 52 +#define arg5 56 +#define arg6 60 + +#ifdef __ELF__ +#define ForEachLine .L2 +#define ForEachBits .L5 +#define a0 %A0 +#define a1 %A1 +#define a2 %A2 +#define a3 %A3 +#define a4 %A4 +#define a5 %A5 +#define a6 %A6 +#define sp %SP +#define d0 %D0 +#define d1 %D1 +#define d2 %D2 +#define d3 %D3 +#define d4 %D4 +#define d5 %D5 +#define d6 %D6 +#define d7 %D7 +#else +#define ForEachLine L2 +#define ForEachBits L5 +#endif +#define CASE_SIZE 5 + +.text + .even + .globl _cfbStippleStack +_cfbStippleStack: + moveml PushMask,sp@- + movel sp@(arg0),addr + movel sp@(arg1),stipple + movel sp@(arg2),value + movel sp@(arg3),stride + movew sp@(arg4+2),count + movel sp@(arg5),shift + subqw #1,count /* predecrement count */ + lea CaseBegin,case + movew #28,lshift + addl shift,lshift + movew #28,rshift + subql #4,shift + negl shift +ForEachLine: + movel addr,atemp + addl stride,addr + movel stipple@+,c +#ifdef TETEXT + jeq NextLine +#endif + /* Get first few bits */ + movel c,ctemp + lsrl lshift,ctemp + lsll #CASE_SIZE,ctemp + lsll shift,c /* set up for next bits */ + jmp case@(ctemp:l) + +ForEachBits: + addl #4,atemp + movel c,ctemp + lsrl rshift,ctemp /* better than lsrl, andi */ + lsll #CASE_SIZE,ctemp + lsll #4,c /* set up for next bits */ + jmp case@(ctemp:l) + +#define Break \ + andl c,c ; \ + jne ForEachBits ; \ + dbra count,ForEachLine ; \ + moveml sp@+,PopMask ; \ + rts ; + +CaseBegin: + jne ForEachBits /* 0 */ +NextLine: + dbra count,ForEachLine + moveml sp@+,PopMask + rts + + . = CaseBegin + 0x20 + + moveb value,atemp@(3) /* 1 */ + Break + + . = CaseBegin + 0x40 + + moveb value,atemp@(2) /* 2 */ + Break + + . = CaseBegin + 0x60 + + movew value,atemp@(2) /* 3 */ + Break + + . = CaseBegin + 0x80 + + moveb value,atemp@(1) /* 4 */ + Break + + . = CaseBegin + 0xa0 + + moveb value,atemp@(3) /* 5 */ + moveb value,atemp@(1) + Break + + . = CaseBegin + 0xc0 + + movew value,atemp@(1) /* 6 */ + Break + + . = CaseBegin + 0xe0 + + movew value,atemp@(2) /* 7 */ + moveb value,atemp@(1) + Break + + . = CaseBegin + 0x100 + + moveb value,atemp@ /* 8 */ + Break + + . = CaseBegin + 0x120 + + moveb value,atemp@(3) /* 9 */ + moveb value,atemp@ + Break + + . = CaseBegin + 0x140 + + moveb value,atemp@(2) /* a */ + moveb value,atemp@ + Break + + . = CaseBegin + 0x160 + + movew value,atemp@(2) /* b */ + moveb value,atemp@ + Break + + . = CaseBegin + 0x180 + + movew value,atemp@ /* c */ + Break + + . = CaseBegin + 0x1a0 + + moveb value,atemp@(3) /* d */ + movew value,atemp@ + Break + + . = CaseBegin + 0x1c0 + + moveb value,atemp@(2) /* e */ + movew value,atemp@ + Break + + . = CaseBegin + 0x1e0 + + movel value,atemp@ /* f */ + Break