]> git.sesse.net Git - rdpsrv/blobdiff - Xserver/programs/Xserver/cfb/stipple68k.s
Import X server from vnc-3.3.7.
[rdpsrv] / Xserver / programs / Xserver / cfb / stipple68k.s
diff --git a/Xserver/programs/Xserver/cfb/stipple68k.s b/Xserver/programs/Xserver/cfb/stipple68k.s
new file mode 100644 (file)
index 0000000..d2e2eea
--- /dev/null
@@ -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