 *
 * Mesa 3-D graphics library
 * Copyright (C) 1995  Brian Paul  (brianp@ssec.wisc.edu)
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Library General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Library General Public License for more details.
 *
 * You should have received a copy of the GNU Library General Public
 * License along with this library; if not, write to the Free
 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 *

* Assembler implementations of functions in ADisp_SW.c (Sam Jordan)

		include "GL/Amigamesa.i"

		XDEF    _SWD_clear_LUT8
		XDEF    _SWD_clear_ARGB

;// SWD_clear_LUT8
*
* void SWD_clear_LUT8(GLcontext *ctx,GLboolean all,
*                     GLint x, GLint y,GLint width, GLint height )
*
*
_SWD_clear_LUT8
		prolog
		lwz     r9,GL_DRIVERCTX(r3)
		lwz     r10,AMC_CLEARPIXEL(r9)
		tstb    r4
		beq     .partial_clear
.full_clear
		lwz     r4,AMC_BACKARRAY(r9)
		subi    r4,r4,4
		insrwi  r10,r10,8,16
		insrwi  r10,r10,16,0
		mullw   r7,r7,r8
		srawi.  r0,r7,4
		beq     .clearslow
		mtctr   r0
.clearfast
		stwu    r10,4(r4)
		stwu    r10,4(r4)
		stwu    r10,4(r4)
		stwu    r10,4(r4)
		bdnz    .clearfast
.clearslow
		andi.   r0,r7,$f
		beq     .end
		addi    r4,r4,3
		mtctr   r0
.loop
		stbu    r10,1(r4)
		bdnz    .loop
		b       .end
.partial_clear
		tstw    r8
		beq     .end
		lwz     r4,AMC_BACKARRAY(r9)
		subi    r4,r4,4
		lwz     r11,AMC_HEIGHT(r9)
		subf    r12,r6,r11
		subf    r12,r8,r12
		mullw   r12,r12,r7
		add     r12,r12,r5
		add     r4,r4,r12
		insrwi  r10,r10,8,16
		insrwi  r10,r10,16,0
		lwz     r12,AMC_WIDTH(r9)
		subf    r12,r7,r12
		srawi   r5,r7,4
		andi.   r6,r7,$f
.loop2
		tstw    r5
		beq     .cont
		mtctr   r5
.loop3
		stwu    r10,4(r4)
		stwu    r10,4(r4)
		stwu    r10,4(r4)
		stwu    r10,4(r4)
		bdnz    .loop3
.cont
		tstw    r6
		beq     .cont2
		mtctr   r6
.loop4
		stb     r10,4(r4)
		addi    r4,r4,1
		bdnz    .loop4
.cont2
		add     r4,r4,r12
		subic.  r8,r8,1
		bne     .loop2
.end
		epilog
;;/
;// SWD_clear_ARGB
*
* void SWD_clear_ARGB(GLcontext *ctx,GLboolean all,
*                     GLint x, GLint y,GLint width, GLint height )
*
*
_SWD_clear_ARGB
		prolog
		lwz     r9,GL_DRIVERCTX(r3)
		lwz     r10,AMC_CLEARPIXEL(r9)
		tstb    r4
		beq     .partial_clear
.full_clear
		lwz     r4,AMC_BACKARRAY(r9)
		subi    r4,r4,4
		mullw   r7,r7,r8
		srawi.  r0,r7,2
		beq     .clearslow
		mtctr   r0
.clearfast
		stwu    r10,4(r4)
		stwu    r10,4(r4)
		stwu    r10,4(r4)
		stwu    r10,4(r4)
		bdnz    .clearfast
.clearslow
		andi.   r0,r7,$3
		beq     .end
		mtctr   r0
.loop
		stwu    r10,4(r4)
		bdnz    .loop
		b       .end
.partial_clear
		tstw    r8
		beq     .end
		lwz     r4,AMC_BACKARRAY(r9)
		subi    r4,r4,4
		lwz     r11,AMC_HEIGHT(r9)
		subf    r12,r6,r11
		subf    r12,r8,r12
		mullw   r12,r12,r7
		add     r12,r12,r5
		slwi    r12,r12,2
		add     r4,r4,r12
		lwz     r12,AMC_WIDTH(r9)
		subf    r12,r7,r12
		slwi    r12,r12,2
		srawi   r5,r7,2
		andi.   r6,r7,$3
.loop2
		tstw    r5
		beq     .cont
		mtctr   r5
.loop3
		stwu    r10,4(r4)
		stwu    r10,4(r4)
		stwu    r10,4(r4)
		stwu    r10,4(r4)
		bdnz    .loop3
.cont
		tstw    r6
		beq     .cont2
		mtctr   r6
.loop4
		stwu    r10,4(r4)
		bdnz    .loop4
.cont2
		add     r4,r4,r12
		subic.  r8,r8,1
		bne     .loop2
.end
		epilog
;;/


