aboutsummaryrefslogtreecommitdiff
path: root/nx-X11/programs/Xserver/cfb/stipple68k.s
diff options
context:
space:
mode:
authorReinhard Tartler <siretart@tauware.de>2011-10-10 17:43:39 +0200
committerReinhard Tartler <siretart@tauware.de>2011-10-10 17:43:39 +0200
commitf4092abdf94af6a99aff944d6264bc1284e8bdd4 (patch)
tree2ac1c9cc16ceb93edb2c4382c088dac5aeafdf0f /nx-X11/programs/Xserver/cfb/stipple68k.s
parenta840692edc9c6d19cd7c057f68e39c7d95eb767d (diff)
downloadnx-libs-f4092abdf94af6a99aff944d6264bc1284e8bdd4.tar.gz
nx-libs-f4092abdf94af6a99aff944d6264bc1284e8bdd4.tar.bz2
nx-libs-f4092abdf94af6a99aff944d6264bc1284e8bdd4.zip
Imported nx-X11-3.1.0-1.tar.gznx-X11/3.1.0-1
Summary: Imported nx-X11-3.1.0-1.tar.gz Keywords: Imported nx-X11-3.1.0-1.tar.gz into Git repository
Diffstat (limited to 'nx-X11/programs/Xserver/cfb/stipple68k.s')
-rw-r--r--nx-X11/programs/Xserver/cfb/stipple68k.s231
1 files changed, 231 insertions, 0 deletions
diff --git a/nx-X11/programs/Xserver/cfb/stipple68k.s b/nx-X11/programs/Xserver/cfb/stipple68k.s
new file mode 100644
index 000000000..2f892b386
--- /dev/null
+++ b/nx-X11/programs/Xserver/cfb/stipple68k.s
@@ -0,0 +1,231 @@
+/*
+ * $Xorg: stipple68k.s,v 1.4 2001/02/09 02:04:39 xorgcvs Exp $
+ *
+Copyright 1990, 1998 The Open Group
+
+Permission to use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided that
+the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation.
+
+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
+OPEN GROUP 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 Open Group 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 Open Group.
+ *
+ * Author: Keith Packard, MIT X Consortium
+ */
+/* $XFree86: xc/programs/Xserver/cfb/stipple68k.s,v 3.2 2001/01/17 22:36:38 dawes Exp $ */
+
+/*
+ * 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