 *
 * 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_SWFS.c (Sam Jordan)

		include "GL/Amigamesa.i"


		XDEF    _SWFSD_write_color_span_LUT8
		XDEF    _SWFSD_write_color_span_RGB15
		XDEF    _SWFSD_write_color_span_RGB15PC
		XDEF    _SWFSD_write_color_span_RGB16
		XDEF    _SWFSD_write_color_span_RGB16PC
		XDEF    _SWFSD_write_color_span_ARGB
		XDEF    _SWFSD_write_color_span_BGRA
		XDEF    _SWFSD_write_color_span3_LUT8
		XDEF    _SWFSD_write_color_span3_RGB15
		XDEF    _SWFSD_write_color_span3_RGB15PC
		XDEF    _SWFSD_write_color_span3_RGB16
		XDEF    _SWFSD_write_color_span3_RGB16PC
		XDEF    _SWFSD_write_color_span3_ARGB
		XDEF    _SWFSD_write_color_span3_BGRA
		XDEF    _SWFSD_write_monorgba_span_LUT8
		XDEF    _SWFSD_write_monoci_span_LUT8
		XDEF    _SWFSD_write_mono_span_RGB16
		XDEF    _SWFSD_write_mono_span_ARGB
		XDEF    _SWFSD_write_color_pixels_LUT8
		XDEF    _SWFSD_write_color_pixels_RGB15
		XDEF    _SWFSD_write_color_pixels_RGB15PC
		XDEF    _SWFSD_write_color_pixels_RGB16
		XDEF    _SWFSD_write_color_pixels_RGB16PC
		XDEF    _SWFSD_write_color_pixels_ARGB
		XDEF    _SWFSD_write_color_pixels_BGRA
		XDEF    _SWFSD_write_monorgba_pixels_LUT8
		XDEF    _SWFSD_write_monoci_pixels_LUT8
		XDEF    _SWFSD_write_mono_pixels_RGB16
		XDEF    _SWFSD_write_mono_pixels_ARGB
		XDEF    _SWFSD_write_index_span32_LUT8
		XDEF    _SWFSD_write_index_span32_RGB16
		XDEF    _SWFSD_write_index_span32_ARGB
		XDEF    _SWFSD_write_index_span_LUT8
		XDEF    _SWFSD_write_index_span_RGB16
		XDEF    _SWFSD_write_index_span_ARGB
		XDEF    _SWFSD_write_index_pixels_LUT8
		XDEF    _SWFSD_write_index_pixels_RGB16
		XDEF    _SWFSD_write_index_pixels_ARGB
		XDEF    _SWFSD_read_color_span_LUT8
		XDEF    _SWFSD_read_color_span_RGB15
		XDEF    _SWFSD_read_color_span_RGB15PC
		XDEF    _SWFSD_read_color_span_RGB16
		XDEF    _SWFSD_read_color_span_RGB16PC
		XDEF    _SWFSD_read_color_span_ARGB
		XDEF    _SWFSD_read_color_span_BGRA
		XDEF    _SWFSD_read_index_span_LUT8
		XDEF    _SWFSD_read_color_pixels_LUT8
		XDEF    _SWFSD_read_color_pixels_RGB15
		XDEF    _SWFSD_read_color_pixels_RGB15PC
		XDEF    _SWFSD_read_color_pixels_RGB16
		XDEF    _SWFSD_read_color_pixels_RGB16PC
		XDEF    _SWFSD_read_color_pixels_ARGB
		XDEF    _SWFSD_read_color_pixels_BGRA
		XDEF    _SWFSD_read_index_pixels_LUT8

;// EVALPTRN_D_SPAN (macro)
*
*       EVALPTRN_D_SPAN x,y,scratch
*
*       parameters must be passed in registers
*       x gets the starting index (unsigned word)
*

EVALPTRN_D_SPAN MACRO
		rlwinm  \3,\2,4,25,27
		rlwimi  \3,\1,0,29,31
		mr      \1,\3
		ENDM
;;/
;// EVALPEN_D_SPAN (macro)
*
*       EVALPEN_D_SPAN dest,dmatrix,dtable,colortable,rgba,index
*                      scratch,scratch2,scratch3
*                      scratch4,scratch5,scratch6
*
*       parameters must be passed in registers
*       index must be unsigned word
*       all parameters except scratch registers are preserved
*       dest is returned as unsigned long
*

EVALPEN_D_SPAN  MACRO
		rlwinm  \8,\5,25,23,30
		rlwinm  \10,\5,17,23,30
		rlwinm  \12,\5,9,23,30
		lbzx    \1,\2,\6
		addi    \6,\6,1
		ori     \6,\6,$8
		xori    \6,\6,$8
		lhzx    \8,\3,\8
		lhzx    \10,\3,\10
		lhzx    \12,\3,\12
		andi.   \7,\8,$ff
		andi.   \9,\10,$ff
		andi.   \11,\12,$ff
		subf    \7,\7,\1
		subf    \9,\9,\1
		subf    \11,\11,\1
		rlwinm  \7,\7,9,23,23
		rlwinm  \9,\9,9,23,23
		rlwinm  \11,\11,9,23,23
		add     \8,\8,\7
		add     \10,\10,\9
		add     \12,\12,\11
		srwi    \8,\8,8
		srwi    \10,\10,8
		srwi    \12,\12,8
		mulli   \10,\10,6
		mulli   \12,\12,36
		add     \8,\8,\10
		add     \8,\8,\12
		slwi    \8,\8,2
		lwzx    \1,\4,\8
		ENDM
;;/
;// EVALPEN_D_PIX (macro)
*
*       EVALPEN_D_PIX dest,dmatrix,dtable,colortable,rgba,x
*                      y,scratch,scratch2,scratch3
*                      scratch4,scratch5,scratch6
*
*       parameters must be passed in registers
*       all parameters except scratch registers are preserved
*       dest is returned as unsigned long
*

EVALPEN_D_PIX   MACRO
		rlwinm  \8,\5,25,23,30
		rlwinm  \10,\5,17,23,30
		rlwinm  \12,\5,9,23,30
		rlwinm  \9,\7,4,25,27
		rlwimi  \9,\6,0,29,31
		lbzx    \1,\2,\9
		lhzx    \8,\3,\8
		lhzx    \10,\3,\10
		lhzx    \12,\3,\12
		andi.   \13,\8,$ff
		andi.   \9,\10,$ff
		andi.   \11,\12,$ff
		subf    \13,\13,\1
		subf    \9,\9,\1
		subf    \11,\11,\1
		rlwinm  \13,\13,9,23,23
		rlwinm  \9,\9,9,23,23
		rlwinm  \11,\11,9,23,23
		add     \8,\8,\13
		add     \10,\10,\9
		add     \12,\12,\11
		srwi    \8,\8,8
		srwi    \10,\10,8
		srwi    \12,\12,8
		mulli   \10,\10,6
		mulli   \12,\12,36
		add     \8,\8,\10
		add     \8,\8,\12
		slwi    \8,\8,2
		lwzx    \1,\4,\8
		ENDM
;;/
;// EVALMPEN_D_SPAN (macro)
*
*       EVALMPEN_D_SPAN dest,dmatrix,dtable,colortable,rgba,x,y
*                       scratch1,scratch2,scratch3,scratch4,scratch5,scratch6,scratch7
*
*       parameters must be passed in registers
*       all parameters except scratch registers are preserved
*       result is stored into dest
*

EVALMPEN_D_SPAN MACRO
		rlwinm  \8,\7,4,25,27
		rlwimi  \8,\6,0,29,31
		add     \8,\2,\8
		subi    \8,\8,1
		li      \9,8
		mtctr   \9
		rlwinm  \9,\5,25,23,30
		lhzx    \9,\3,\9
		rlwinm  \10,\5,17,23,30
		lhzx    \10,\3,\10
		rlwinm  \11,\5,9,23,30
		lhzx    \11,\3,\11
		subi    \1,\1,1
.loop\@
		lbzu    \12,1(\8)
		andi.   \13,\9,$ff
		subf    \13,\13,\12
		rlwinm  \13,\13,9,23,23
		add     \13,\9,\13
		srwi    \13,\13,8
		andi.   \14,\10,$ff
		subf    \14,\14,\12
		rlwinm  \14,\14,9,23,23
		add     \14,\10,\14
		srwi    \14,\14,8
		mulli   \14,\14,6
		add     \13,\13,\14
		andi.   \14,\11,$ff
		subf    \14,\14,\12
		rlwinm  \14,\14,9,23,23
		add     \14,\11,\14
		srwi    \14,\14,8
		mulli   \14,\14,36
		add     \13,\13,\14
		slwi    \13,\13,2
		lwzx    \14,\4,\13
		stbu    \14,1(\1)
		bdnz    .loop\@
		subi    \1,\1,7
		ENDM
;;/
;// EVALVAL_D_PIX (macro)
*
*       EVALVAL_D_PIX dtable,rgba,g,b
*
*       parameters must be passed in registers
*       the results are returned in rgba,g,b
*

EVALVAL_D_PIX   MACRO
		rlwinm  \4,\2,25,23,30
		lhzx    \4,\1,\4
		rlwinm  \3,\2,17,23,30
		lhzx    \3,\1,\3
		rlwinm  \2,\2,9,23,30
		lhzx    \2,\1,\2
		ENDM
;;/
;// EVALMPEN_D_PIX (macro)
*
*       EVALMPEN_D_PIX dest,dmatrix,colortable,x,y,r,g,b,scratch,scratch2
*
*       parameters must be passed in registers
*       r,g,b contain the divmod51 values for rgb
*

EVALMPEN_D_PIX  MACRO
		rlwinm  \9,\5,4,25,27
		rlwimi  \9,\4,0,29,31
		lbzx    \9,\2,\9
		andi.   \10,\8,$ff
		subf    \10,\10,\9
		rlwinm  \10,\10,9,23,23
		add     \10,\8,\10
		srwi    \10,\10,8
		andi.   \1,\7,$ff
		subf    \1,\1,\9
		rlwinm  \1,\1,9,23,23
		add     \1,\7,\1
		srwi    \1,\1,8
		mulli   \1,\1,6
		add     \10,\10,\1
		andi.   \1,\6,$ff
		subf    \1,\1,\9
		rlwinm  \1,\1,9,23,23
		add     \1,\6,\1
		srwi    \1,\1,8
		mulli   \1,\1,36
		add     \10,\10,\1
		slwi    \10,\10,2
		lwzx    \1,\3,\10
		ENDM
;;/

;// SWFSD_write_color_span_LUT8
*
* void SWFSD_write_color_span_LUT8(const GLcontext *ctx, GLuint n, GLint x, GLint y,
*                                         const GLubyte rgba[][4], const GLubyte mask[])
*

_SWFSD_write_color_span_LUT8

		prolog
		pushgpr r24-r31
		tstw    r4
		beq     .end
		lwz     r3,GL_DRIVERCTX(r3)
		lwz     r12,AMC_DRAWBUFFER(r3)
		lwz     r11,AMC_HEIGHT(r3)
		subf    r11,r6,r11
		subi    r11,r11,1
		lwz     r0,AMC_BPROW(r3)
		mullw   r11,r11,r0
		add     r11,r11,r5
		add     r12,r12,r11
		lwz     r10,AMC_COLORTABLE(r3)
		EVALPTRN_D_SPAN r5,r6,r11
		la      r24,AMC_DMATRIX(r3)
		la      r3,AMC_DTABLE(r3)
		tstw    r8
		beq     .fullwrite
		subi    r8,r8,1
		mtctr   r4
.partial_write
		lbzu    r0,1(r8)
		tstw    r0
		beq     .next
		lwz     r31,0(r7)
		EVALPEN_D_SPAN  r31,r24,r3,r10,r31,r5,r30,r29,r28,r27,r26,r25
		stb     r31,0(r12)
		b       .skip
.next
		addi    r5,r5,1
		ori     r5,r5,$8
		xori    r5,r5,$8
.skip
		addi    r7,r7,4
		addi    r12,r12,1
		bdnz    .partial_write
		b       .end
.fullwrite
		subi    r7,r7,4
		neg     r0,r12
		subi    r12,r12,4
		andi.   r0,r0,$3
		beq     .main
		cmpw    r4,r0
		blt     .main
		subf    r4,r0,r4
		mtctr   r0
.first
		lwzu    r31,4(r7)
		EVALPEN_D_SPAN  r31,r24,r3,r10,r31,r5,r30,r29,r28,r27,r26,r25
		stb     r31,4(r12)
		addi    r12,r12,1
		bdnz    .first
.main
		mr.     r11,r4
		beq     .end
		srawi.  r4,r4,2
		beq     .cont
		mtctr   r4
.loop
		lwzu    r31,4(r7)
		EVALPEN_D_SPAN  r31,r24,r3,r10,r31,r5,r30,r29,r28,r27,r26,r25
		extlwi  r0,r31,8,24
		lwzu    r31,4(r7)
		EVALPEN_D_SPAN  r31,r24,r3,r10,r31,r5,r30,r29,r28,r27,r26,r25
		insrwi  r0,r31,8,8
		lwzu    r31,4(r7)
		EVALPEN_D_SPAN  r31,r24,r3,r10,r31,r5,r30,r29,r28,r27,r26,r25
		insrwi  r0,r31,8,16
		lwzu    r31,4(r7)
		EVALPEN_D_SPAN  r31,r24,r3,r10,r31,r5,r30,r29,r28,r27,r26,r25
		insrwi  r0,r31,8,24
		stwu    r0,4(r12)
		bdnz    .loop
.cont
		andi.   r11,r11,$3
		beq     .end
		mtctr   r11
.loop2
		lwzu    r31,4(r7)
		EVALPEN_D_SPAN  r31,r24,r3,r10,r31,r5,r30,r29,r28,r27,r26,r25
		stb     r31,4(r12)
		addi    r12,r12,1
		bdnz    .loop2
.end
		popgpr
		epilog

;;/
;// SWFSD_write_color_span_RGB15
*
*
* void SWFSD_write_color_span_RGB15(const GLcontext *ctx, GLuint n, GLint x, GLint y,
*                                         const GLubyte rgba[][4], const GLubyte mask[])
*
*

_SWFSD_write_color_span_RGB15
		prolog
		tstw    r4
		beq     .end
		lwz     r3,GL_DRIVERCTX(r3)
		lwz     r12,AMC_DRAWBUFFER(r3)
		lwz     r11,AMC_HEIGHT(r3)
		subf    r11,r6,r11
		subi    r11,r11,1
		lwz     r0,AMC_BPROW(r3)
		mullw   r11,r11,r0
		add     r11,r11,r5
		add     r11,r11,r5
		add     r12,r12,r11
		lwz     r10,AMC_COLORTABLE(r3)
		la      r3,AMC_DTABLE(r3)
		tstw    r8
		beq     .fullwrite
		subi    r8,r8,1
		mtctr   r4
.partial_write
		lbzu    r0,1(r8)
		tstw    r0
		beq     .next
		lwz     r5,0(r7)
		rlwinm  r6,r5,15,17,21
		rlwimi  r6,r5,18,22,26
		rlwimi  r6,r5,21,27,31
		sth     r6,0(r12)
.next
		addi    r7,r7,4
		addi    r12,r12,2
		bdnz    .partial_write
		b       .end
.fullwrite
		subi    r7,r7,4
		andi.   r0,r12,$1
		subi    r12,r12,4
		beq     .main
		subi    r4,r4,1
		mtctr   r0
.first
		lwzu    r5,4(r7)
		rlwinm  r6,r5,15,17,21
		rlwimi  r6,r5,18,22,26
		rlwimi  r6,r5,21,27,31
		sth     r6,4(r12)
		addi    r12,r12,2
		bdnz    .first
.main
		mr.     r11,r4
		beq     .end
		srawi.  r4,r4,1
		beq     .cont
		mtctr   r4
.loop
		lwzu    r5,4(r7)
		rlwinm  r6,r5,15,17,21
		rlwimi  r6,r5,18,22,26
		rlwimi  r6,r5,21,27,31
		rotrwi  r5,r6,16
		lwzu    r6,4(r7)
		rlwimi  r5,r6,15,17,21
		rlwimi  r5,r6,18,22,26
		rlwimi  r5,r6,21,27,31
		stwu    r5,4(r12)
		bdnz    .loop
.cont
		andi.   r11,r11,$1
		beq     .end
		mtctr   r11
.loop2
		lwzu    r5,4(r7)
		rlwinm  r6,r5,15,17,21
		rlwimi  r6,r5,18,22,26
		rlwimi  r6,r5,21,27,31
		sth     r6,4(r12)
		addi    r12,r12,2
		bdnz    .loop2
.end
		epilog
;;/
;// SWFSD_write_color_span_RGB15PC
*
*
* void SWFSD_write_color_span_RGB15PC(const GLcontext *ctx, GLuint n, GLint x, GLint y,
*                                         const GLubyte rgba[][4], const GLubyte mask[])
*
*

_SWFSD_write_color_span_RGB15PC
		prolog
		tstw    r4
		beq     .end
		lwz     r3,GL_DRIVERCTX(r3)
		lwz     r12,AMC_DRAWBUFFER(r3)
		lwz     r11,AMC_HEIGHT(r3)
		subf    r11,r6,r11
		subi    r11,r11,1
		lwz     r0,AMC_BPROW(r3)
		mullw   r11,r11,r0
		add     r11,r11,r5
		add     r11,r11,r5
		add     r12,r12,r11
		lwz     r10,AMC_COLORTABLE(r3)
		la      r3,AMC_DTABLE(r3)
		tstw    r8
		beq     .fullwrite
		subi    r8,r8,1
		mtctr   r4
.partial_write
		lbzu    r0,1(r8)
		tstw    r0
		beq     .next
		lwz     r5,0(r7)
		rlwinm  r6,r5,15,17,21
		rlwimi  r6,r5,18,22,26
		rlwimi  r6,r5,21,27,31
		sthbrx  r6,0,r12
.next
		addi    r7,r7,4
		addi    r12,r12,2
		bdnz    .partial_write
		b       .end
.fullwrite
		subi    r7,r7,4
		andi.   r0,r12,$1
		subi    r12,r12,4
		beq     .main
		subi    r4,r4,1
		mtctr   r0
.first
		lwzu    r5,4(r7)
		rlwinm  r6,r5,15,17,21
		rlwimi  r6,r5,18,22,26
		rlwimi  r6,r5,21,27,31
		addi    r12,r12,4
		sthbrx  r6,0,r12
		subi    r12,r12,2
		bdnz    .first
.main
		mr.     r11,r4
		beq     .end
		srawi.  r4,r4,1
		beq     .cont
		mtctr   r4
.loop
		lwzu    r5,4(r7)
		rlwinm  r6,r5,15,17,21
		rlwimi  r6,r5,18,22,26
		rlwimi  r6,r5,21,27,31
		rotrwi  r5,r6,16
		lwzu    r6,4(r7)
		rlwimi  r5,r6,15,17,21
		rlwimi  r5,r6,18,22,26
		rlwimi  r5,r6,21,27,31
		rotrwi  r5,r5,16
		addi    r12,r12,4
		stwbrx  r5,0,r12
		bdnz    .loop
.cont
		andi.   r11,r11,$1
		beq     .end
		mtctr   r11
.loop2
		lwzu    r5,4(r7)
		rlwinm  r6,r5,15,17,21
		rlwimi  r6,r5,18,22,26
		rlwimi  r6,r5,21,27,31
		addi    r12,r12,4
		sthbrx  r6,0,r12
		subi    r12,r12,2
		bdnz    .loop2
.end
		epilog
;;/
;// SWFSD_write_color_span_RGB16
*
*
* void SWFSD_write_color_span_RGB16(const GLcontext *ctx, GLuint n, GLint x, GLint y,
*                                         const GLubyte rgba[][4], const GLubyte mask[])
*
*

_SWFSD_write_color_span_RGB16
		prolog
		tstw    r4
		beq     .end
		lwz     r3,GL_DRIVERCTX(r3)
		lwz     r12,AMC_DRAWBUFFER(r3)
		lwz     r11,AMC_HEIGHT(r3)
		subf    r11,r6,r11
		subi    r11,r11,1
		lwz     r0,AMC_BPROW(r3)
		mullw   r11,r11,r0
		add     r11,r11,r5
		add     r11,r11,r5
		add     r12,r12,r11
		lwz     r10,AMC_COLORTABLE(r3)
		la      r3,AMC_DTABLE(r3)
		tstw    r8
		beq     .fullwrite
		subi    r8,r8,1
		mtctr   r4
.partial_write
		lbzu    r0,1(r8)
		tstw    r0
		beq     .next
		lwz     r5,0(r7)
		rlwinm  r6,r5,16,16,20
		rlwimi  r6,r5,19,21,26
		rlwimi  r6,r5,21,27,31
		sth     r6,0(r12)
.next
		addi    r7,r7,4
		addi    r12,r12,2
		bdnz    .partial_write
		b       .end
.fullwrite
		subi    r7,r7,4
		andi.   r0,r12,$1
		subi    r12,r12,4
		beq     .main
		subi    r4,r4,1
		mtctr   r0
.first
		lwzu    r5,4(r7)
		rlwinm  r6,r5,16,16,20
		rlwimi  r6,r5,19,21,26
		rlwimi  r6,r5,21,27,31
		sth     r6,4(r12)
		addi    r12,r12,2
		bdnz    .first
.main
		mr.     r11,r4
		beq     .end
		srawi.  r4,r4,1
		beq     .cont
		mtctr   r4
.loop
		lwzu    r5,4(r7)
		rlwinm  r6,r5,16,16,20
		rlwimi  r6,r5,19,21,26
		rlwimi  r6,r5,21,27,31
		rotrwi  r5,r6,16
		lwzu    r6,4(r7)
		rlwimi  r5,r6,16,16,20
		rlwimi  r5,r6,19,21,26
		rlwimi  r5,r6,21,27,31
		stwu    r5,4(r12)
		bdnz    .loop
.cont
		andi.   r11,r11,$1
		beq     .end
		mtctr   r11
.loop2
		lwzu    r5,4(r7)
		rlwinm  r6,r5,16,16,20
		rlwimi  r6,r5,19,21,26
		rlwimi  r6,r5,21,27,31
		sth     r6,4(r12)
		addi    r12,r12,2
		bdnz    .loop2
.end
		epilog
;;/
;// SWFSD_write_color_span_RGB16PC
*
*
* void SWFSD_write_color_span_RGB16PC(const GLcontext *ctx, GLuint n, GLint x, GLint y,
*                                         const GLubyte rgba[][4], const GLubyte mask[])
*
*

_SWFSD_write_color_span_RGB16PC
		prolog
		tstw    r4
		beq     .end
		lwz     r3,GL_DRIVERCTX(r3)
		lwz     r12,AMC_DRAWBUFFER(r3)
		lwz     r11,AMC_HEIGHT(r3)
		subf    r11,r6,r11
		subi    r11,r11,1
		lwz     r0,AMC_BPROW(r3)
		mullw   r11,r11,r0
		add     r11,r11,r5
		add     r11,r11,r5
		add     r12,r12,r11
		lwz     r10,AMC_COLORTABLE(r3)
		la      r3,AMC_DTABLE(r3)
		tstw    r8
		beq     .fullwrite
		subi    r8,r8,1
		mtctr   r4
.partial_write
		lbzu    r0,1(r8)
		tstw    r0
		beq     .next
		lwz     r5,0(r7)
		rlwinm  r6,r5,16,16,20
		rlwimi  r6,r5,19,21,26
		rlwimi  r6,r5,21,27,31
		sthbrx  r6,0,r12
.next
		addi    r7,r7,4
		addi    r12,r12,2
		bdnz    .partial_write
		b       .end
.fullwrite
		subi    r7,r7,4
		andi.   r0,r12,$1
		subi    r12,r12,4
		beq     .main
		subi    r4,r4,1
		mtctr   r0
.first
		lwzu    r5,4(r7)
		rlwinm  r6,r5,16,16,20
		rlwimi  r6,r5,19,21,26
		rlwimi  r6,r5,21,27,31
		addi    r12,r12,4
		sthbrx  r6,0,r12
		subi    r12,r12,2
		bdnz    .first
.main
		mr.     r11,r4
		beq     .end
		srawi.  r4,r4,1
		beq     .cont
		mtctr   r4
.loop
		lwzu    r5,4(r7)
		rlwinm  r6,r5,16,16,20
		rlwimi  r6,r5,19,21,26
		rlwimi  r6,r5,21,27,31
		rotrwi  r5,r6,16
		lwzu    r6,4(r7)
		rlwimi  r5,r6,16,16,20
		rlwimi  r5,r6,19,21,26
		rlwimi  r5,r6,21,27,31
		rotrwi  r5,r5,16
		addi    r12,r12,4
		stwbrx  r5,0,r12
		bdnz    .loop
.cont
		andi.   r11,r11,$1
		beq     .end
		mtctr   r11
.loop2
		lwzu    r5,4(r7)
		rlwinm  r6,r5,16,16,20
		rlwimi  r6,r5,19,21,26
		rlwimi  r6,r5,21,27,31
		addi    r12,r12,4
		sthbrx  r6,0,r12
		subi    r12,r12,2
		bdnz    .loop2
.end
		epilog
;;/
;// SWFSD_write_color_span_ARGB
*
* void SWFSD_write_color_span_ARGB(const GLcontext *ctx, GLuint n, GLint x, GLint y,
*                                         const GLubyte rgba[][4], const GLubyte mask[])
*

_SWFSD_write_color_span_ARGB
		prolog
		tstw    r4
		beq     .end
		lwz     r3,GL_DRIVERCTX(r3)
		lwz     r12,AMC_DRAWBUFFER(r3)
		lwz     r11,AMC_HEIGHT(r3)
		subf    r11,r6,r11
		subi    r11,r11,1
		lwz     r0,AMC_BPROW(r3)
		mullw   r11,r11,r0
		slwi    r5,r5,2
		add     r11,r11,r5
		add     r12,r12,r11
		tstw    r8
		beq     .fullwrite
		subi    r8,r8,1
		mtctr   r4
.partial_write
		lbzu    r0,1(r8)
		tstw    r0
		beq     .next
		lwz     r5,0(r7)
		rotrwi  r5,r5,8
		stw     r5,0(r12)
.next
		addi    r7,r7,4
		addi    r12,r12,4
		bdnz    .partial_write
		b       .end
.fullwrite
		subi    r7,r7,4
		subi    r12,r12,4
		mtctr   r4
.loop
		lwzu    r5,4(r7)
		rotrwi  r5,r5,8
		stwu    r5,4(r12)
		bdnz    .loop
.end
		epilog
;;/
;// SWFSD_write_color_span_BGRA
*
* void SWFSD_write_color_span_BGRA(const GLcontext *ctx, GLuint n, GLint x, GLint y,
*                                         const GLubyte rgba[][4], const GLubyte mask[])
*

_SWFSD_write_color_span_BGRA
		prolog
		tstw    r4
		beq     .end
		lwz     r3,GL_DRIVERCTX(r3)
		lwz     r12,AMC_DRAWBUFFER(r3)
		lwz     r11,AMC_HEIGHT(r3)
		subf    r11,r6,r11
		subi    r11,r11,1
		lwz     r0,AMC_BPROW(r3)
		mullw   r11,r11,r0
		slwi    r5,r5,2
		add     r11,r11,r5
		add     r12,r12,r11
		tstw    r8
		beq     .fullwrite
		subi    r8,r8,1
		mtctr   r4
.partial_write
		lbzu    r0,1(r8)
		tstw    r0
		beq     .next
		lwz     r5,0(r7)
		rotrwi  r5,r5,8
		stwbrx  r5,0,r12
.next
		addi    r7,r7,4
		addi    r12,r12,4
		bdnz    .partial_write
		b       .end
.fullwrite
		subi    r7,r7,4
		mtctr   r4
.loop
		lwzu    r5,4(r7)
		rotrwi  r5,r5,8
		stwbrx  r5,0,r12
		addi    r12,r12,4
		bdnz    .loop
.end
		epilog
;;/
;// SWFSD_write_color_span3_LUT8
*
* void SWFSD_write_color_span3_LUT8(const GLcontext *ctx, GLuint n, GLint x, GLint y,
*                                         const GLubyte rgba[][3], const GLubyte mask[])
*

_SWFSD_write_color_span3_LUT8

		prolog
		pushgpr r24-r31
		tstw    r4
		beq     .end
		lwz     r3,GL_DRIVERCTX(r3)
		lwz     r12,AMC_DRAWBUFFER(r3)
		lwz     r11,AMC_HEIGHT(r3)
		subf    r11,r6,r11
		subi    r11,r11,1
		lwz     r0,AMC_BPROW(r3)
		mullw   r11,r11,r0
		add     r11,r11,r5
		add     r12,r12,r11
		lwz     r10,AMC_COLORTABLE(r3)
		EVALPTRN_D_SPAN r5,r6,r11
		la      r24,AMC_DMATRIX(r3)
		la      r3,AMC_DTABLE(r3)
		tstw    r8
		beq     .fullwrite
		subi    r8,r8,1
		mtctr   r4
.partial_write
		lbzu    r0,1(r8)
		tstw    r0
		beq     .next
		lwz     r31,0(r7)
		EVALPEN_D_SPAN  r31,r24,r3,r10,r31,r5,r30,r29,r28,r27,r26,r25
		stb     r31,0(r12)
		b       .skip
.next
		addi    r5,r5,1
		ori     r5,r5,$8
		xori    r5,r5,$8
.skip
		addi    r7,r7,3
		addi    r12,r12,1
		bdnz    .partial_write
		b       .end
.fullwrite
		subi    r7,r7,4
		neg     r0,r12
		subi    r12,r12,4
		andi.   r0,r0,$3
		beq     .main
		cmpw    r4,r0
		blt     .main
		subf    r4,r0,r4
		mtctr   r0
.first
		lwzu    r31,4(r7)
		EVALPEN_D_SPAN  r31,r24,r3,r10,r31,r5,r30,r29,r28,r27,r26,r25
		subi    r7,r7,1
		stb     r31,4(r12)
		addi    r12,r12,1
		bdnz    .first
.main
		mr.     r11,r4
		beq     .end
		srawi.  r4,r4,2
		beq     .cont
		mtctr   r4
.loop
		lwzu    r31,4(r7)
		EVALPEN_D_SPAN  r31,r24,r3,r10,r31,r5,r30,r29,r28,r27,r26,r25
		subi    r7,r7,1
		extlwi  r0,r31,8,24
		lwzu    r31,4(r7)
		EVALPEN_D_SPAN  r31,r24,r3,r10,r31,r5,r30,r29,r28,r27,r26,r25
		subi    r7,r7,1
		insrwi  r0,r31,8,8
		lwzu    r31,4(r7)
		EVALPEN_D_SPAN  r31,r24,r3,r10,r31,r5,r30,r29,r28,r27,r26,r25
		subi    r7,r7,1
		insrwi  r0,r31,8,16
		lwzu    r31,4(r7)
		EVALPEN_D_SPAN  r31,r24,r3,r10,r31,r5,r30,r29,r28,r27,r26,r25
		subi    r7,r7,1
		insrwi  r0,r31,8,24
		stwu    r0,4(r12)
		bdnz    .loop
.cont
		andi.   r11,r11,$3
		beq     .end
		mtctr   r11
.loop2
		lwzu    r31,4(r7)
		EVALPEN_D_SPAN  r31,r24,r3,r10,r31,r5,r30,r29,r28,r27,r26,r25
		subi    r7,r7,1
		stb     r31,4(r12)
		addi    r12,r12,1
		bdnz    .loop2
.end
		popgpr
		epilog

;;/
;// SWFSD_write_color_span3_RGB15
*
*
* void SWFSD_write_color_span3_RGB15(const GLcontext *ctx, GLuint n, GLint x, GLint y,
*                                         const GLubyte rgba[][3], const GLubyte mask[])
*
*

_SWFSD_write_color_span3_RGB15
		prolog
		tstw    r4
		beq     .end
		lwz     r3,GL_DRIVERCTX(r3)
		lwz     r12,AMC_DRAWBUFFER(r3)
		lwz     r11,AMC_HEIGHT(r3)
		subf    r11,r6,r11
		subi    r11,r11,1
		lwz     r0,AMC_BPROW(r3)
		mullw   r11,r11,r0
		add     r11,r11,r5
		add     r11,r11,r5
		add     r12,r12,r11
		lwz     r10,AMC_COLORTABLE(r3)
		la      r3,AMC_DTABLE(r3)
		tstw    r8
		beq     .fullwrite
		subi    r8,r8,1
		mtctr   r4
.partial_write
		lbzu    r0,1(r8)
		tstw    r0
		beq     .next
		lwz     r5,0(r7)
		rlwinm  r6,r5,15,17,21
		rlwimi  r6,r5,18,22,26
		rlwimi  r6,r5,21,27,31
		sth     r6,0(r12)
.next
		addi    r7,r7,3
		addi    r12,r12,2
		bdnz    .partial_write
		b       .end
.fullwrite
		subi    r7,r7,4
		andi.   r0,r12,$1
		subi    r12,r12,4
		beq     .main
		subi    r4,r4,1
		mtctr   r0
.first
		lwzu    r5,4(r7)
		rlwinm  r6,r5,15,17,21
		rlwimi  r6,r5,18,22,26
		rlwimi  r6,r5,21,27,31
		subi    r7,r7,1
		sth     r6,4(r12)
		addi    r12,r12,2
		bdnz    .first
.main
		mr.     r11,r4
		beq     .end
		srawi.  r4,r4,1
		beq     .cont
		mtctr   r4
.loop
		lwzu    r5,4(r7)
		rlwinm  r6,r5,15,17,21
		rlwimi  r6,r5,18,22,26
		subi    r7,r7,1
		rlwimi  r6,r5,21,27,31
		rotrwi  r5,r6,16
		lwzu    r6,4(r7)
		rlwimi  r5,r6,15,17,21
		rlwimi  r5,r6,18,22,26
		subi    r7,r7,1
		rlwimi  r5,r6,21,27,31
		stwu    r5,4(r12)
		bdnz    .loop
.cont
		andi.   r11,r11,$1
		beq     .end
		mtctr   r11
.loop2
		lwzu    r5,4(r7)
		rlwinm  r6,r5,15,17,21
		rlwimi  r6,r5,18,22,26
		subi    r7,r7,1
		rlwimi  r6,r5,21,27,31
		sth     r6,4(r12)
		addi    r12,r12,2
		bdnz    .loop2
.end
		epilog
;;/
;// SWFSD_write_color_span3_RGB15PC
*
*
* void SWFSD_write_color_span3_RGB15PC(const GLcontext *ctx, GLuint n, GLint x, GLint y,
*                                         const GLubyte rgba[][3], const GLubyte mask[])
*
*

_SWFSD_write_color_span3_RGB15PC
		prolog
		tstw    r4
		beq     .end
		lwz     r3,GL_DRIVERCTX(r3)
		lwz     r12,AMC_DRAWBUFFER(r3)
		lwz     r11,AMC_HEIGHT(r3)
		subf    r11,r6,r11
		subi    r11,r11,1
		lwz     r0,AMC_BPROW(r3)
		mullw   r11,r11,r0
		add     r11,r11,r5
		add     r11,r11,r5
		add     r12,r12,r11
		lwz     r10,AMC_COLORTABLE(r3)
		la      r3,AMC_DTABLE(r3)
		tstw    r8
		beq     .fullwrite
		subi    r8,r8,1
		mtctr   r4
.partial_write
		lbzu    r0,1(r8)
		tstw    r0
		beq     .next
		lwz     r5,0(r7)
		rlwinm  r6,r5,15,17,21
		rlwimi  r6,r5,18,22,26
		rlwimi  r6,r5,21,27,31
		sthbrx  r6,0,r12
.next
		addi    r7,r7,3
		addi    r12,r12,2
		bdnz    .partial_write
		b       .end
.fullwrite
		subi    r7,r7,4
		andi.   r0,r12,$1
		subi    r12,r12,4
		beq     .main
		subi    r4,r4,1
		mtctr   r0
.first
		lwzu    r5,4(r7)
		rlwinm  r6,r5,15,17,21
		rlwimi  r6,r5,18,22,26
		subi    r7,r7,1
		rlwimi  r6,r5,21,27,31
		addi    r12,r12,4
		sthbrx  r6,0,r12
		subi    r12,r12,2
		bdnz    .first
.main
		mr.     r11,r4
		beq     .end
		srawi.  r4,r4,1
		beq     .cont
		mtctr   r4
.loop
		lwzu    r5,4(r7)
		rlwinm  r6,r5,15,17,21
		rlwimi  r6,r5,18,22,26
		subi    r7,r7,1
		rlwimi  r6,r5,21,27,31
		rotrwi  r5,r6,16
		lwzu    r6,4(r7)
		rlwimi  r5,r6,15,17,21
		rlwimi  r5,r6,18,22,26
		subi    r7,r7,1
		rlwimi  r5,r6,21,27,31
		rotrwi  r5,r5,16
		addi    r12,r12,4
		stwbrx  r5,0,r12
		bdnz    .loop
.cont
		andi.   r11,r11,$1
		beq     .end
		mtctr   r11
.loop2
		lwzu    r5,4(r7)
		rlwinm  r6,r5,15,17,21
		rlwimi  r6,r5,18,22,26
		subi    r7,r7,1
		rlwimi  r6,r5,21,27,31
		addi    r12,r12,4
		sthbrx  r6,0,r12
		subi    r12,r12,2
		bdnz    .loop2
.end
		epilog
;;/
;// SWFSD_write_color_span3_RGB16
*
*
* void SWFSD_write_color_span3_RGB16(const GLcontext *ctx, GLuint n, GLint x, GLint y,
*                                         const GLubyte rgba[][3], const GLubyte mask[])
*
*

_SWFSD_write_color_span3_RGB16
		prolog
		tstw    r4
		beq     .end
		lwz     r3,GL_DRIVERCTX(r3)
		lwz     r12,AMC_DRAWBUFFER(r3)
		lwz     r11,AMC_HEIGHT(r3)
		subf    r11,r6,r11
		subi    r11,r11,1
		lwz     r0,AMC_BPROW(r3)
		mullw   r11,r11,r0
		add     r11,r11,r5
		add     r11,r11,r5
		add     r12,r12,r11
		lwz     r10,AMC_COLORTABLE(r3)
		la      r3,AMC_DTABLE(r3)
		tstw    r8
		beq     .fullwrite
		subi    r8,r8,1
		mtctr   r4
.partial_write
		lbzu    r0,1(r8)
		tstw    r0
		beq     .next
		lwz     r5,0(r7)
		rlwinm  r6,r5,16,16,20
		rlwimi  r6,r5,19,21,26
		rlwimi  r6,r5,21,27,31
		sth     r6,0(r12)
.next
		addi    r7,r7,3
		addi    r12,r12,2
		bdnz    .partial_write
		b       .end
.fullwrite
		subi    r7,r7,4
		andi.   r0,r12,$1
		subi    r12,r12,4
		beq     .main
		subi    r4,r4,1
		mtctr   r0
.first
		lwzu    r5,4(r7)
		rlwinm  r6,r5,16,16,20
		subi    r7,r7,1
		rlwimi  r6,r5,19,21,26
		rlwimi  r6,r5,21,27,31
		sth     r6,4(r12)
		addi    r12,r12,2
		bdnz    .first
.main
		mr.     r11,r4
		beq     .end
		srawi.  r4,r4,1
		beq     .cont
		mtctr   r4
.loop
		lwzu    r5,4(r7)
		rlwinm  r6,r5,16,16,20
		rlwimi  r6,r5,19,21,26
		subi    r7,r7,1
		rlwimi  r6,r5,21,27,31
		rotrwi  r5,r6,16
		lwzu    r6,4(r7)
		rlwimi  r5,r6,16,16,20
		rlwimi  r5,r6,19,21,26
		subi    r7,r7,1
		rlwimi  r5,r6,21,27,31
		stwu    r5,4(r12)
		bdnz    .loop
.cont
		andi.   r11,r11,$1
		beq     .end
		mtctr   r11
.loop2
		lwzu    r5,4(r7)
		rlwinm  r6,r5,16,16,20
		rlwimi  r6,r5,19,21,26
		subi    r7,r7,1
		rlwimi  r6,r5,21,27,31
		sth     r6,4(r12)
		addi    r12,r12,2
		bdnz    .loop2
.end
		epilog
;;/
;// SWFSD_write_color_span3_RGB16PC
*
*
* void SWFSD_write_color_span3_RGB16PC(const GLcontext *ctx, GLuint n, GLint x, GLint y,
*                                         const GLubyte rgba[][3], const GLubyte mask[])
*
*

_SWFSD_write_color_span3_RGB16PC
		prolog
		tstw    r4
		beq     .end
		lwz     r3,GL_DRIVERCTX(r3)
		lwz     r12,AMC_DRAWBUFFER(r3)
		lwz     r11,AMC_HEIGHT(r3)
		subf    r11,r6,r11
		subi    r11,r11,1
		lwz     r0,AMC_BPROW(r3)
		mullw   r11,r11,r0
		add     r11,r11,r5
		add     r11,r11,r5
		add     r12,r12,r11
		lwz     r10,AMC_COLORTABLE(r3)
		la      r3,AMC_DTABLE(r3)
		tstw    r8
		beq     .fullwrite
		subi    r8,r8,1
		mtctr   r4
.partial_write
		lbzu    r0,1(r8)
		tstw    r0
		beq     .next
		lwz     r5,0(r7)
		rlwinm  r6,r5,16,16,20
		rlwimi  r6,r5,19,21,26
		rlwimi  r6,r5,21,27,31
		sthbrx  r6,0,r12
.next
		addi    r7,r7,3
		addi    r12,r12,2
		bdnz    .partial_write
		b       .end
.fullwrite
		subi    r7,r7,4
		andi.   r0,r12,$1
		subi    r12,r12,4
		beq     .main
		subi    r4,r4,1
		mtctr   r0
.first
		lwzu    r5,4(r7)
		rlwinm  r6,r5,16,16,20
		rlwimi  r6,r5,19,21,26
		subi    r7,r7,1
		rlwimi  r6,r5,21,27,31
		addi    r12,r12,4
		sthbrx  r6,0,r12
		subi    r12,r12,2
		bdnz    .first
.main
		mr.     r11,r4
		beq     .end
		srawi.  r4,r4,1
		beq     .cont
		mtctr   r4
.loop
		lwzu    r5,4(r7)
		rlwinm  r6,r5,16,16,20
		rlwimi  r6,r5,19,21,26
		subi    r7,r7,1
		rlwimi  r6,r5,21,27,31
		rotrwi  r5,r6,16
		lwzu    r6,4(r7)
		rlwimi  r5,r6,16,16,20
		rlwimi  r5,r6,19,21,26
		subi    r7,r7,1
		rlwimi  r5,r6,21,27,31
		rotrwi  r5,r5,16
		addi    r12,r12,4
		stwbrx  r5,0,r12
		bdnz    .loop
.cont
		andi.   r11,r11,$1
		beq     .end
		mtctr   r11
.loop2
		lwzu    r5,4(r7)
		rlwinm  r6,r5,16,16,20
		rlwimi  r6,r5,19,21,26
		subi    r7,r7,1
		rlwimi  r6,r5,21,27,31
		addi    r12,r12,4
		sthbrx  r6,0,r12
		subi    r12,r12,2
		bdnz    .loop2
.end
		epilog
;;/
;// SWFSD_write_color_span3_ARGB
*
* void SWFSD_write_color_span3_ARGB(const GLcontext *ctx, GLuint n, GLint x, GLint y,
*                                         const GLubyte rgba[][3], const GLubyte mask[])
*

_SWFSD_write_color_span3_ARGB
		prolog
		tstw    r4
		beq     .end
		lwz     r3,GL_DRIVERCTX(r3)
		lwz     r12,AMC_DRAWBUFFER(r3)
		lwz     r11,AMC_HEIGHT(r3)
		subf    r11,r6,r11
		subi    r11,r11,1
		lwz     r0,AMC_BPROW(r3)
		mullw   r11,r11,r0
		slwi    r5,r5,2
		add     r11,r11,r5
		add     r12,r12,r11
		tstw    r8
		beq     .fullwrite
		subi    r8,r8,1
		mtctr   r4
.partial_write
		lbzu    r0,1(r8)
		tstw    r0
		beq     .next
		lwz     r5,0(r7)
		rotrwi  r5,r5,8
		stw     r5,0(r12)
.next
		addi    r7,r7,3
		addi    r12,r12,4
		bdnz    .partial_write
		b       .end
.fullwrite
		subi    r7,r7,4
		subi    r12,r12,4
		mtctr   r4
.loop
		lwzu    r5,4(r7)
		rotrwi  r5,r5,8
		subi    r7,r7,1
		stwu    r5,4(r12)
		bdnz    .loop
.end
		epilog
;;/
;// SWFSD_write_color_span3_BGRA
*
* void SWFSD_write_color_span3_BGRA(const GLcontext *ctx, GLuint n, GLint x, GLint y,
*                                         const GLubyte rgba[][3], const GLubyte mask[])
*

_SWFSD_write_color_span3_BGRA
		prolog
		tstw    r4
		beq     .end
		lwz     r3,GL_DRIVERCTX(r3)
		lwz     r12,AMC_DRAWBUFFER(r3)
		lwz     r11,AMC_HEIGHT(r3)
		subf    r11,r6,r11
		subi    r11,r11,1
		lwz     r0,AMC_BPROW(r3)
		mullw   r11,r11,r0
		slwi    r5,r5,2
		add     r11,r11,r5
		add     r12,r12,r11
		tstw    r8
		beq     .fullwrite
		subi    r8,r8,1
		mtctr   r4
.partial_write
		lbzu    r0,1(r8)
		tstw    r0
		beq     .next
		lwz     r5,0(r7)
		rotrwi  r5,r5,8
		stwbrx  r5,0,r12
.next
		addi    r7,r7,3
		addi    r12,r12,4
		bdnz    .partial_write
		b       .end
.fullwrite
		subi    r7,r7,4
		mtctr   r4
.loop
		lwzu    r5,4(r7)
		rotrwi  r5,r5,8
		subi    r7,r7,1
		stwbrx  r5,0,r12
		addi    r12,r12,4
		bdnz    .loop
.end
		epilog
;;/

;// SWFSD_write_monorgba_span_LUT8
*
* void SWFSD_write_monorgba_span_LUT8(GLcontext *ctx, GLuint n, GLint x, GLint y,
*                                       const GLubyte mask[])
*

_SWFSD_write_monorgba_span_LUT8

		prolog
		pushgpr r24-r31
		tstw    r4
		beq     .end
		lwz     r3,GL_DRIVERCTX(r3)
		lwz     r12,AMC_DRAWBUFFER(r3)
		lwz     r11,AMC_HEIGHT(r3)
		subf    r11,r6,r11
		subi    r11,r11,1
		lwz     r0,AMC_BPROW(r3)
		mullw   r11,r11,r0
		add     r11,r11,r5
		add     r12,r12,r11
		la      r8,AMC_DMATRIX(r3)
		la      r9,AMC_DTABLE(r3)
		lwz     r10,AMC_COLORTABLE(r3)
		lwz     r11,AMC_PIXELARGB(r3)
		la      r3,AMC_DMATRIX+128(r3)
		EVALMPEN_D_SPAN r3,r8,r9,r10,r11,r5,r6,r31,r30,r29,r28,r27,r26,r25,r24
		tstw    r7
		beq     .fullwrite
		subi    r7,r7,1
		mtctr   r4
		li      r31,0
.partial_write
		lbzu    r0,1(r7)
		tstw    r0
		beq     .next
		lbzx    r0,r3,r31
		stb     r0,0(r12)
.next
		addi    r31,r31,1
		andi.   r31,r31,$7
		addi    r12,r12,1
		bdnz    .partial_write
		b       .end
.fullwrite
		andi.   r31,r4,$7
		srawi.  r4,r4,3
		beq     .cont
		mtctr   r4
		subi    r12,r12,4
.loop2
		lwz     r0,0(r3)
		stwu    r0,4(r12)
		lwz     r0,4(r3)
		stwu    r0,4(r12)
		bdnz    .loop2
		addi    r12,r12,4
.cont
		tstw    r31
		beq     .end
		subi    r3,r3,1
		subi    r12,r12,1
		mtctr   r31
.loop3
		lbzu    r0,1(r3)
		stbu    r0,1(r12)
		bdnz    .loop3
.end
		popgpr
		epilog
;;/
;// SWFSD_write_monoci_span_LUT8
*
* void SWFSD_write_monoci_span_LUT8(GLcontext *ctx, GLuint n, GLint x, GLint y,
*                                       const GLubyte mask[])
*

_SWFSD_write_monoci_span_LUT8
		prolog
		tstw    r4
		beq     .end
		lwz     r3,GL_DRIVERCTX(r3)
		lwz     r8,AMC_PIXEL(r3)
		tstw    r7
		beq     .fullwrite
		mtctr   r4
.partial_write
		lwz     r9,AMC_DRAWBUFFER(r3)
		lwz     r10,AMC_HEIGHT(r3)
		subf    r10,r6,r10
		subi    r10,r10,1
		lwz     r11,AMC_BPROW(r3)
		mullw   r10,r10,r11
		add     r10,r10,r5
		add     r9,r9,r10
		subi    r7,r7,1
		mtctr   r4
.loop
		lbzu    r0,1(r7)
		tstw    r0
		beq     .next
		stb     r8,0(r9)
.next
		addi    r9,r9,1
		bdnz    .loop
		b       .end
.fullwrite
		lwz     r9,AMC_DRAWBUFFER(r3)
		subi    r9,r9,4
		lwz     r10,AMC_HEIGHT(r3)
		subf    r10,r6,r10
		subi    r10,r10,1
		lwz     r11,AMC_BPROW(r3)
		mullw   r10,r10,r11
		add     r10,r10,r5
		add     r9,r9,r10
		insrwi  r8,r8,8,16
		insrwi  r8,r8,16,0
		srawi   r5,r4,4
		andi.   r6,r4,$f
.loop2
		tstw    r5
		beq     .cont
		mtctr   r5
.loop3
		stwu    r8,4(r9)
		stwu    r8,4(r9)
		stwu    r8,4(r9)
		stwu    r8,4(r9)
		bdnz    .loop3
.cont
		tstw    r6
		beq     .end
		mtctr   r6
		addi    r9,r9,3
.loop4
		stbu    r8,1(r9)
		bdnz    .loop4
.end
		epilog
;;/
;// SWFSD_write_mono_span_RGB16
*
* void SWFSD_write_mono_span_RGB16(GLcontext *ctx, GLuint n, GLint x, GLint y,
*                                       const GLubyte mask[])
*

_SWFSD_write_mono_span_RGB16
		prolog
		tstw    r4
		beq     .end
		lwz     r3,GL_DRIVERCTX(r3)
		lwz     r9,AMC_DRAWBUFFER(r3)
		lwz     r10,AMC_HEIGHT(r3)
		subf    r10,r6,r10
		subi    r10,r10,1
		lwz     r11,AMC_BPROW(r3)
		mullw   r10,r10,r11
		add     r10,r10,r5
		add     r10,r10,r5
		add     r9,r9,r10
		lwz     r8,AMC_PIXEL(r3)
		tstw    r7
		beq     .fullwrite
.partial_write
		subi    r7,r7,1
		mtctr   r4
.loop
		lbzu    r0,1(r7)
		tstw    r0
		beq     .next
		sth     r8,0(r9)
.next
		addi    r9,r9,2
		bdnz    .loop
		b       .end
.fullwrite
		srawi   r5,r4,3
		andi.   r6,r4,$7
		subi    r9,r9,4
.loop2
		tstw    r5
		beq     .cont
		mtctr   r5
.loop3
		stwu    r8,4(r9)
		stwu    r8,4(r9)
		stwu    r8,4(r9)
		stwu    r8,4(r9)
		bdnz    .loop3
.cont
		tstw    r6
		beq     .end
		addi    r9,r9,2
		mtctr   r6
.loop4
		sthu    r8,2(r9)
		bdnz    .loop4
.end
		epilog
;;/
;// SWFSD_write_mono_span_ARGB
*
* void SWFSD_write_mono_span_ARGB(GLcontext *ctx, GLuint n, GLint x, GLint y,
*                                       const GLubyte mask[])
*

_SWFSD_write_mono_span_ARGB
		prolog
		tstw    r4
		beq     .end
		lwz     r3,GL_DRIVERCTX(r3)
		lwz     r9,AMC_DRAWBUFFER(r3)
		lwz     r10,AMC_HEIGHT(r3)
		subf    r10,r6,r10
		subi    r10,r10,1
		lwz     r11,AMC_BPROW(r3)
		mullw   r10,r10,r11
		slwi    r5,r5,2
		add     r10,r10,r5
		add     r9,r9,r10
		lwz     r8,AMC_PIXEL(r3)
		tstw    r7
		beq     .fullwrite
.partial_write
		subi    r7,r7,1
		mtctr   r4
.loop
		lbzu    r0,1(r7)
		tstw    r0
		beq     .next
		stw     r8,0(r9)
.next
		addi    r9,r9,4
		bdnz    .loop
		b       .end
.fullwrite
		srawi   r5,r4,2
		andi.   r6,r4,$3
		subi    r9,r9,4
.loop2
		tstw    r5
		beq     .cont
		mtctr   r5
.loop3
		stwu    r8,4(r9)
		stwu    r8,4(r9)
		stwu    r8,4(r9)
		stwu    r8,4(r9)
		bdnz    .loop3
.cont
		tstw    r6
		beq     .end
		mtctr   r6
.loop4
		stwu    r8,4(r9)
		bdnz    .loop4
.end
		epilog
;;/

;// SWFSD_write_color_pixels_LUT8
*
* void SWFSD_write_color_pixels_LUT8(const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[],
*                                               const GLubyte rgba[][4], const GLubyte mask[] )
*

_SWFSD_write_color_pixels_LUT8
		prolog
		pushgpr r21-r31
		tstw    r4
		beq     .end
		lwz     r3,GL_DRIVERCTX(r3)
		lwz     r11,AMC_DRAWBUFFER(r3)
		lwz     r12,AMC_HEIGHT(r3)
		subi    r12,r12,1
		lwz     r10,AMC_BPROW(r3)
		mtctr   r4
		lwz     r30,AMC_COLORTABLE(r3)
		la      r29,AMC_DTABLE(r3)
		la      r28,AMC_DMATRIX(r3)
		subi    r8,r8,1
.loop
		lbzu    r0,1(r8)
		tstw    r0
		beq     .next
		lwz     r9,0(r7)
		lwz     r27,0(r5)
		lwz     r26,0(r6)
		EVALPEN_D_PIX   r3,r28,r29,r30,r9,r27,r26,r25,r24,r23,r22,r31,r21
		subf    r0,r26,r12
		mullw   r0,r0,r10
		add     r0,r0,r27
		stbx    r3,r11,r0
.next
		addi    r7,r7,4
		addi    r5,r5,4
		addi    r6,r6,4
		bdnz    .loop
.end
		popgpr
		epilog
;;/
;// SWFSD_write_color_pixels_RGB15
*
* void SWFSD_write_color_pixels_RGB15(const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[],
*                                               const GLubyte rgba[][4], const GLubyte mask[] )
*

_SWFSD_write_color_pixels_RGB15
		prolog
		tstw    r4
		beq     .end
		lwz     r3,GL_DRIVERCTX(r3)
		lwz     r11,AMC_DRAWBUFFER(r3)
		lwz     r12,AMC_HEIGHT(r3)
		subi    r12,r12,1
		lwz     r3,AMC_BPROW(r3)
		srawi   r3,r3,1
		mtctr   r4
		subi    r8,r8,1
.loop
		lbzu    r0,1(r8)
		tstw    r0
		beq     .next
		lwz     r9,0(r7)
		rlwinm  r10,r9,15,17,21
		rlwimi  r10,r9,18,22,26
		rlwimi  r10,r9,21,27,31
		lwz     r0,0(r6)
		subf    r0,r0,r12
		mullw   r0,r0,r3
		lwz     r9,0(r5)
		add     r0,r0,r9
		add     r0,r0,r0
		sthx    r10,r11,r0
.next
		addi    r7,r7,4
		addi    r5,r5,4
		addi    r6,r6,4
		bdnz    .loop
.end
		epilog
;;/
;// SWFSD_write_color_pixels_RGB15PC
*
* void SWFSD_write_color_pixels_RGB15PC(const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[],
*                                               const GLubyte rgba[][4], const GLubyte mask[] )
*

_SWFSD_write_color_pixels_RGB15PC
		prolog
		tstw    r4
		beq     .end
		lwz     r3,GL_DRIVERCTX(r3)
		lwz     r11,AMC_DRAWBUFFER(r3)
		lwz     r12,AMC_HEIGHT(r3)
		subi    r12,r12,1
		lwz     r3,AMC_BPROW(r3)
		srawi   r3,r3,1
		mtctr   r4
		subi    r8,r8,1
.loop
		lbzu    r0,1(r8)
		tstw    r0
		beq     .next
		lwz     r9,0(r7)
		rlwinm  r10,r9,15,17,21
		rlwimi  r10,r9,18,22,26
		rlwimi  r10,r9,21,27,31
		lwz     r0,0(r6)
		subf    r0,r0,r12
		mullw   r0,r0,r3
		lwz     r9,0(r5)
		add     r0,r0,r9
		add     r0,r0,r0
		sthbrx  r10,r11,r0
.next
		addi    r7,r7,4
		addi    r5,r5,4
		addi    r6,r6,4
		bdnz    .loop
.end
		epilog
;;/
;// SWFSD_write_color_pixels_RGB16
*
* void SWFSD_write_color_pixels_RGB16(const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[],
*                                               const GLubyte rgba[][4], const GLubyte mask[] )
*

_SWFSD_write_color_pixels_RGB16
		prolog
		tstw    r4
		beq     .end
		lwz     r3,GL_DRIVERCTX(r3)
		lwz     r11,AMC_DRAWBUFFER(r3)
		lwz     r12,AMC_HEIGHT(r3)
		subi    r12,r12,1
		lwz     r3,AMC_BPROW(r3)
		srawi   r3,r3,1
		mtctr   r4
		subi    r8,r8,1
.loop
		lbzu    r0,1(r8)
		tstw    r0
		beq     .next
		lwz     r9,0(r7)
		rlwinm  r10,r9,16,16,20
		rlwimi  r10,r9,19,21,26
		rlwimi  r10,r9,21,27,31
		lwz     r0,0(r6)
		subf    r0,r0,r12
		mullw   r0,r0,r3
		lwz     r9,0(r5)
		add     r0,r0,r9
		add     r0,r0,r0
		sthx    r10,r11,r0
.next
		addi    r7,r7,4
		addi    r5,r5,4
		addi    r6,r6,4
		bdnz    .loop
.end
		epilog
;;/
;// SWFSD_write_color_pixels_RGB16PC
*
* void SWFSD_write_color_pixels_RGB16PC(const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[],
*                                               const GLubyte rgba[][4], const GLubyte mask[] )
*

_SWFSD_write_color_pixels_RGB16PC
		prolog
		tstw    r4
		beq     .end
		lwz     r3,GL_DRIVERCTX(r3)
		lwz     r11,AMC_DRAWBUFFER(r3)
		lwz     r12,AMC_HEIGHT(r3)
		subi    r12,r12,1
		lwz     r3,AMC_BPROW(r3)
		srawi   r3,r3,1
		mtctr   r4
		subi    r8,r8,1
.loop
		lbzu    r0,1(r8)
		tstw    r0
		beq     .next
		lwz     r9,0(r7)
		rlwinm  r10,r9,16,16,20
		rlwimi  r10,r9,19,21,26
		rlwimi  r10,r9,21,27,31
		lwz     r0,0(r6)
		subf    r0,r0,r12
		mullw   r0,r0,r3
		lwz     r9,0(r5)
		add     r0,r0,r9
		add     r0,r0,r0
		sthbrx  r10,r11,r0
.next
		addi    r7,r7,4
		addi    r5,r5,4
		addi    r6,r6,4
		bdnz    .loop
.end
		epilog
;;/
;// SWFSD_write_color_pixels_ARGB
*
* void SWFSD_write_color_pixels_ARGB(const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[],
*                                               const GLubyte rgba[][4], const GLubyte mask[] )
*

_SWFSD_write_color_pixels_ARGB
		prolog
		tstw    r4
		beq     .end
		lwz     r3,GL_DRIVERCTX(r3)
		lwz     r11,AMC_DRAWBUFFER(r3)
		lwz     r12,AMC_HEIGHT(r3)
		subi    r12,r12,1
		lwz     r3,AMC_BPROW(r3)
		srawi   r3,r3,2
		mtctr   r4
		subi    r8,r8,1
.loop
		lbzu    r0,1(r8)
		tstw    r0
		beq     .next
		lwz     r9,0(r7)
		rotrwi  r9,r9,8
		lwz     r0,0(r6)
		subf    r0,r0,r12
		mullw   r0,r0,r3
		lwz     r4,0(r5)
		add     r0,r0,r4
		slwi    r0,r0,2
		stwx    r9,r11,r0
.next
		addi    r7,r7,4
		addi    r5,r5,4
		addi    r6,r6,4
		bdnz    .loop
.end
		epilog
;;/
;// SWFSD_write_color_pixels_BGRA
*
* void SWFSD_write_color_pixels_BGRA(const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[],
*                                               const GLubyte rgba[][4], const GLubyte mask[] )
*

_SWFSD_write_color_pixels_BGRA
		prolog
		tstw    r4
		beq     .end
		lwz     r3,GL_DRIVERCTX(r3)
		lwz     r11,AMC_DRAWBUFFER(r3)
		lwz     r12,AMC_HEIGHT(r3)
		subi    r12,r12,1
		lwz     r3,AMC_BPROW(r3)
		srawi   r3,r3,2
		mtctr   r4
		subi    r8,r8,1
.loop
		lbzu    r0,1(r8)
		tstw    r0
		beq     .next
		lwz     r9,0(r7)
		rotrwi  r9,r9,8
		lwz     r0,0(r6)
		subf    r0,r0,r12
		mullw   r0,r0,r3
		lwz     r4,0(r5)
		add     r0,r0,r4
		slwi    r0,r0,2
		stwbrx  r9,r11,r0
.next
		addi    r7,r7,4
		addi    r5,r5,4
		addi    r6,r6,4
		bdnz    .loop
.end
		epilog
;;/

;// SWFSD_write_monorgba_pixels_LUT8
*
* void SWFSD_write_monorgba_pixels_LUT8(GLcontext *ctx, GLuint n,
*                                 const GLint x[], const GLint y[],
*                                 const GLubyte mask[] )
*

_SWFSD_write_monorgba_pixels_LUT8

		prolog
		pushgpr r25-r31
		tstw    r4
		beq     .end
		lwz     r3,GL_DRIVERCTX(r3)
		lwz     r8,AMC_PIXELARGB(r3)
		la      r9,AMC_DTABLE(r3)
		lwz     r28,AMC_COLORTABLE(r3)
		la      r29,AMC_DMATRIX(r3)
		EVALVAL_D_PIX   r9,r8,r31,r30
		lwz     r9,AMC_HEIGHT(r3)
		subi    r9,r9,1
		lwz     r10,AMC_BPROW(r3)
		lwz     r11,AMC_DRAWBUFFER(r3)
		mtctr   r4
		subi    r7,r7,1
.loop
		lbzu    r0,1(r7)
		tstw    r0
		beq     .next
		lwz     r12,0(r6)
		subf    r27,r12,r9
		mullw   r27,r27,r10
		lwz     r3,0(r5)
		add     r27,r27,r3
		EVALMPEN_D_PIX  r4,r29,r28,r3,r12,r8,r31,r30,r26,r25
		stbx    r4,r11,r27
.next
		addi    r5,r5,4
		addi    r6,r6,4
		bdnz    .loop
.end
		popgpr
		epilog
;;/
;// SWFSD_write_monoci_pixels_LUT8
*
* void SWFSD_write_monoci_pixels_LUT8(GLcontext *ctx, GLuint n,
*                                 const GLint x[], const GLint y[],
*                                 const GLubyte mask[] )
*

_SWFSD_write_monoci_pixels_LUT8
		prolog
		tstw    r4
		beq     .end
		lwz     r3,GL_DRIVERCTX(r3)
		lwz     r8,AMC_PIXEL(r3)
		lwz     r9,AMC_HEIGHT(r3)
		subi    r9,r9,1
		lwz     r10,AMC_BPROW(r3)
		lwz     r11,AMC_DRAWBUFFER(r3)
		mtctr   r4
		subi    r7,r7,1
.loop
		lbzu    r0,1(r7)
		tstw    r0
		beq     .next
		lwz     r12,0(r6)
		subf    r12,r12,r9
		mullw   r12,r12,r10
		lwz     r3,0(r5)
		add     r12,r12,r3
		stbx    r8,r11,r12
.next
		addi    r5,r5,4
		addi    r6,r6,4
		bdnz    .loop
.end
		epilog
;;/
;// SWFSD_write_mono_pixels_RGB16
*
* void SWFSD_write_mono_pixels_RGB16(GLcontext *ctx, GLuint n,
*                                 const GLint x[], const GLint y[],
*                                 const GLubyte mask[] )
*

_SWFSD_write_mono_pixels_RGB16
		prolog
		tstw    r4
		beq     .end
		lwz     r3,GL_DRIVERCTX(r3)
		lwz     r8,AMC_PIXEL(r3)
		lwz     r9,AMC_HEIGHT(r3)
		subi    r9,r9,1
		lwz     r10,AMC_BPROW(r3)
		srawi   r10,r10,1
		lwz     r11,AMC_DRAWBUFFER(r3)
		mtctr   r4
		subi    r7,r7,1
.loop
		lbzu    r0,1(r7)
		tstw    r0
		beq     .next
		lwz     r12,0(r6)
		subf    r12,r12,r9
		mullw   r12,r12,r10
		lwz     r3,0(r5)
		add     r12,r12,r3
		add     r12,r12,r12
		sthx    r8,r11,r12
.next
		addi    r5,r5,4
		addi    r6,r6,4
		bdnz    .loop
.end
		epilog
;;/
;// SWFSD_write_mono_pixels_ARGB
*
* void SWFSD_write_mono_pixels_ARGB(GLcontext *ctx, GLuint n,
*                                 const GLint x[], const GLint y[],
*                                 const GLubyte mask[] )
*

_SWFSD_write_mono_pixels_ARGB
		prolog
		tstw    r4
		beq     .end
		lwz     r3,GL_DRIVERCTX(r3)
		lwz     r8,AMC_PIXEL(r3)
		lwz     r9,AMC_HEIGHT(r3)
		subi    r9,r9,1
		lwz     r10,AMC_BPROW(r3)
		srawi   r10,r10,2
		lwz     r11,AMC_DRAWBUFFER(r3)
		mtctr   r4
		subi    r7,r7,1
.loop
		lbzu    r0,1(r7)
		tstw    r0
		beq     .next
		lwz     r12,0(r6)
		subf    r12,r12,r9
		mullw   r12,r12,r10
		lwz     r3,0(r5)
		add     r12,r12,r3
		slwi    r12,r12,2
		stwx    r8,r11,r12
.next
		addi    r5,r5,4
		addi    r6,r6,4
		bdnz    .loop
.end
		epilog
;;/

;// SWFSD_write_index_span32_LUT8
*
* void SWFSD_write_index_span32_LUT8(GLcontext *ctx, GLuint n,
*                                GLint x, GLint y,
*                                const GLuint index[],
*                                const GLubyte mask[])
*

_SWFSD_write_index_span32_LUT8
		prolog
		tstw    r4
		beq     .end
		lwz     r3,GL_DRIVERCTX(r3)
		lwz     r9,AMC_DRAWBUFFER(r3)
		lwz     r10,AMC_HEIGHT(r3)
		subf    r10,r6,r10
		subi    r10,r10,1
		lwz     r11,AMC_BPROW(r3)
		mullw   r10,r10,r11
		add     r10,r10,r5
		add     r9,r9,r10
		la      r10,AMC_PENCONV(r3)
		tstw    r8
		beq     .fullwrite
		subi    r8,r8,1
		mtctr   r4
.partial_write
		lbzu    r0,1(r8)
		tstw    r0
		beq     .next
		lwz     r11,0(r7)
		lbzx    r0,r10,r11
		stb     r0,0(r9)
.next
		addi    r7,r7,4
		addi    r9,r9,1
		bdnz    .partial_write
		b       .end
.fullwrite
		subi    r7,r7,4
		neg     r0,r9
		subi    r9,r9,4
		andi.   r0,r0,$3
		beq     .main
		cmpw    r4,r0
		blt     .main
		subf    r4,r0,r4
		mtctr   r0
.first
		lwzu    r11,4(r7)
		lbzx    r0,r10,r11
		stb     r0,4(r9)
		addi    r9,r9,1
		bdnz    .first
.main
		mr.     r11,r4
		beq     .end
		srawi.  r4,r4,2
		beq     .cont
		mtctr   r4
.loop
		lwzu    r11,4(r7)
		lbzx    r0,r10,r11
		extlwi  r12,r0,8,24
		lwzu    r11,4(r7)
		lbzx    r0,r10,r11
		insrwi  r12,r0,8,8
		lwzu    r11,4(r7)
		lbzx    r0,r10,r11
		insrwi  r12,r0,8,16
		lwzu    r11,4(r7)
		lbzx    r0,r10,r11
		insrwi  r12,r0,8,24
		stwu    r12,4(r9)
		bdnz    .loop
.cont
		andi.   r11,r11,$3
		beq     .end
		mtctr   r11
.loop2
		lwzu    r11,4(r7)
		lbzx    r0,r10,r11
		stb     r0,4(r9)
		addi    r9,r9,1
		bdnz    .loop2
.end
		epilog
;;/
;// SWFSD_write_index_span32_RGB16
*
* void SWFSD_write_index_span32_RGB16(GLcontext *ctx, GLuint n,
*                                GLint x, GLint y,
*                                const GLuint index[],
*                                const GLubyte mask[])
*

_SWFSD_write_index_span32_RGB16
		prolog
		tstw    r4
		beq     .end
		lwz     r3,GL_DRIVERCTX(r3)
		lwz     r9,AMC_DRAWBUFFER(r3)
		lwz     r10,AMC_HEIGHT(r3)
		subf    r10,r6,r10
		subi    r10,r10,1
		lwz     r11,AMC_BPROW(r3)
		mullw   r10,r10,r11
		add     r10,r10,r5
		add     r10,r10,r5
		add     r9,r9,r10
		lwz     r10,AMC_COLORTABLE2(r3)
		tstw    r8
		beq     .fullwrite
		subi    r8,r8,1
		mtctr   r4
.partial_write
		lbzu    r0,1(r8)
		tstw    r0
		beq     .next
		lwz     r11,0(r7)
		slwi    r11,r11,2
		addi    r11,r11,2
		lhzx    r0,r10,r11
		sth     r0,0(r9)
.next
		addi    r7,r7,4
		addi    r9,r9,2
		bdnz    .partial_write
		b       .end
.fullwrite
		subi    r7,r7,4
		subi    r9,r9,4
		andi.   r0,r0,$1
		beq     .main
		subi    r4,r4,1
		mtctr   r0
.first
		lwzu    r11,4(r7)
		slwi    r11,r11,2
		addi    r11,r11,2
		lhzx    r0,r10,r11
		sth     r0,4(r9)
		addi    r9,r9,2
		bdnz    .first
.main
		mr.     r11,r4
		beq     .end
		srawi.  r4,r4,1
		beq     .cont
		mtctr   r4
.loop
		lwzu    r11,4(r7)
		slwi    r11,r11,2
		addi    r11,r11,2
		lhzx    r0,r10,r11
		slwi    r12,r0,16
		lwzu    r11,4(r7)
		slwi    r11,r11,2
		addi    r11,r11,2
		lhzx    r0,r10,r11
		insrwi  r12,r0,16,16
		stwu    r12,4(r9)
		bdnz    .loop
.cont
		andi.   r11,r11,$1
		beq     .end
		mtctr   r11
.loop2
		lwzu    r11,4(r7)
		slwi    r11,r11,2
		addi    r11,r11,2
		lhzx    r0,r10,r11
		sth     r0,4(r9)
		addi    r9,r9,2
		bdnz    .loop2
.end
		epilog
;;/
;// SWFSD_write_index_span32_ARGB
*
* void SWFSD_write_index_span32_ARGB(GLcontext *ctx, GLuint n,
*                                GLint x, GLint y,
*                                const GLuint index[],
*                                const GLubyte mask[])
*

_SWFSD_write_index_span32_ARGB
		prolog
		tstw    r4
		beq     .end
		lwz     r3,GL_DRIVERCTX(r3)
		lwz     r9,AMC_DRAWBUFFER(r3)
		lwz     r10,AMC_HEIGHT(r3)
		subf    r10,r6,r10
		subi    r10,r10,1
		lwz     r11,AMC_BPROW(r3)
		mullw   r10,r10,r11
		slwi    r5,r5,2
		add     r10,r10,r5
		add     r9,r9,r10
		lwz     r10,AMC_COLORTABLE2(r3)
		tstw    r8
		beq     .fullwrite
		subi    r8,r8,1
		mtctr   r4
.partial_write
		lbzu    r0,1(r8)
		tstw    r0
		beq     .next
		lwz     r11,0(r7)
		slwi    r11,r11,2
		lwzx    r0,r10,r11
		stw     r0,0(r9)
.next
		addi    r7,r7,4
		addi    r9,r9,4
		bdnz    .partial_write
		b       .end
.fullwrite
		mtctr   r4
		subi    r7,r7,4
		subi    r9,r9,4
.loop
		lwzu    r11,4(r7)
		slwi    r11,r11,2
		lwzx    r0,r10,r11
		stwu    r0,4(r9)
		bdnz    .loop
.end
		epilog
;;/
;// SWFSD_write_index_span_LUT8
*
* void SWFSD_write_index_span_LUT8(GLcontext *ctx, GLuint n,
*                                GLint x, GLint y,
*                                const GLubyte index[],
*                                const GLubyte mask[])
*

_SWFSD_write_index_span_LUT8
		prolog
		tstw    r4
		beq     .end
		lwz     r3,GL_DRIVERCTX(r3)
		lwz     r9,AMC_DRAWBUFFER(r3)
		lwz     r10,AMC_HEIGHT(r3)
		subf    r10,r6,r10
		subi    r10,r10,1
		lwz     r11,AMC_BPROW(r3)
		mullw   r10,r10,r11
		add     r10,r10,r5
		add     r9,r9,r10
		la      r10,AMC_PENCONV(r3)
		tstw    r8
		beq     .fullwrite
		subi    r8,r8,1
		mtctr   r4
.partial_write
		lbzu    r0,1(r8)
		tstw    r0
		beq     .next
		lbz     r11,0(r7)
		lbzx    r0,r10,r11
		stb     r0,0(r9)
.next
		addi    r7,r7,1
		addi    r9,r9,1
		bdnz    .partial_write
		b       .end
.fullwrite
		subi    r7,r7,1
		neg     r0,r9
		subi    r9,r9,4
		andi.   r0,r0,$3
		beq     .main
		cmpw    r4,r0
		blt     .main
		subf    r4,r0,r4
		mtctr   r0
.first
		lbzu    r11,1(r7)
		lbzx    r0,r10,r11
		stb     r0,4(r9)
		addi    r9,r9,1
		bdnz    .first
.main
		mr.     r11,r4
		beq     .end
		srawi.  r4,r4,2
		beq     .cont
		mtctr   r4
.loop
		lbzu    r11,1(r7)
		lbzx    r0,r10,r11
		extlwi  r12,r0,8,24
		lbzu    r11,1(r7)
		lbzx    r0,r10,r11
		insrwi  r12,r0,8,8
		lbzu    r11,1(r7)
		lbzx    r0,r10,r11
		insrwi  r12,r0,8,16
		lbzu    r11,1(r7)
		lbzx    r0,r10,r11
		insrwi  r12,r0,8,24
		stwu    r12,4(r9)
		bdnz    .loop
.cont
		andi.   r11,r11,$3
		beq     .end
		mtctr   r11
.loop2
		lbzu    r11,1(r7)
		lbzx    r0,r10,r11
		stb     r0,4(r9)
		addi    r9,r9,1
		bdnz    .loop2
.end
		epilog
;;/
;// SWFSD_write_index_span_RGB16
*
* void SWFSD_write_index_span_RGB16(GLcontext *ctx, GLuint n,
*                                GLint x, GLint y,
*                                const GLubyte index[],
*                                const GLubyte mask[])
*

_SWFSD_write_index_span_RGB16
		prolog
		tstw    r4
		beq     .end
		lwz     r3,GL_DRIVERCTX(r3)
		lwz     r9,AMC_DRAWBUFFER(r3)
		lwz     r10,AMC_HEIGHT(r3)
		subf    r10,r6,r10
		subi    r10,r10,1
		lwz     r11,AMC_BPROW(r3)
		mullw   r10,r10,r11
		add     r10,r10,r5
		add     r10,r10,r5
		add     r9,r9,r10
		lwz     r10,AMC_COLORTABLE2(r3)
		tstw    r8
		beq     .fullwrite
		subi    r8,r8,1
		mtctr   r4
.partial_write
		lbzu    r0,1(r8)
		tstw    r0
		beq     .next
		lwz     r11,0(r7)
		slwi    r11,r11,2
		addi    r11,r11,2
		lhzx    r0,r10,r11
		sth     r0,0(r9)
.next
		addi    r7,r7,1
		addi    r9,r9,2
		bdnz    .partial_write
		b       .end
.fullwrite
		subi    r7,r7,1
		subi    r9,r9,4
		andi.   r0,r0,$1
		beq     .main
		subi    r4,r4,1
		mtctr   r0
.first
		lbzu    r11,1(r7)
		slwi    r11,r11,2
		addi    r11,r11,2
		lhzx    r0,r10,r11
		sth     r0,4(r9)
		addi    r9,r9,2
		bdnz    .first
.main
		mr.     r11,r4
		beq     .end
		srawi.  r4,r4,1
		beq     .cont
		mtctr   r4
.loop
		lbzu    r11,1(r7)
		slwi    r11,r11,2
		addi    r11,r11,2
		lhzx    r0,r10,r11
		slwi    r12,r0,16
		lbzu    r11,1(r7)
		slwi    r11,r11,2
		addi    r11,r11,2
		lhzx    r0,r10,r11
		insrwi  r12,r0,16,16
		stwu    r12,4(r9)
		bdnz    .loop
.cont
		andi.   r11,r11,$1
		beq     .end
		mtctr   r11
.loop2
		lbzu    r11,1(r7)
		slwi    r11,r11,2
		addi    r11,r11,2
		lhzx    r0,r10,r11
		sth     r0,4(r9)
		addi    r9,r9,2
		bdnz    .loop2
.end
		epilog
;;/
;// SWFSD_write_index_span_ARGB
*
* void SWFSD_write_index_span_ARGB(GLcontext *ctx, GLuint n,
*                                GLint x, GLint y,
*                                const GLubyte index[],
*                                const GLubyte mask[])
*

_SWFSD_write_index_span_ARGB
		prolog
		tstw    r4
		beq     .end
		lwz     r3,GL_DRIVERCTX(r3)
		lwz     r9,AMC_DRAWBUFFER(r3)
		lwz     r10,AMC_HEIGHT(r3)
		subf    r10,r6,r10
		subi    r10,r10,1
		lwz     r11,AMC_BPROW(r3)
		mullw   r10,r10,r11
		slwi    r5,r5,2
		add     r10,r10,r5
		add     r9,r9,r10
		lwz     r10,AMC_COLORTABLE2(r3)
		tstw    r8
		beq     .fullwrite
		subi    r8,r8,1
		mtctr   r4
.partial_write
		lbzu    r0,1(r8)
		tstw    r0
		beq     .next
		lwz     r11,0(r7)
		slwi    r11,r11,2
		lwzx    r0,r10,r11
		stw     r0,0(r9)
.next
		addi    r7,r7,1
		addi    r9,r9,4
		bdnz    .partial_write
		b       .end
.fullwrite
		mtctr   r4
		subi    r7,r7,1
		subi    r9,r9,4
.loop
		lbzu    r11,1(r7)
		slwi    r11,r11,2
		lwzx    r0,r10,r11
		stwu    r0,4(r9)
		bdnz    .loop
.end
		epilog
;;/

;// SWFSD_write_index_pixels_LUT8
*
* void SWFSD_write_index_pixels_LUT8(GLcontext *ctx, GLuint n,
*                                  const GLint x[], const GLint y[],
*                                  const GLuint index[],
*                                  const GLubyte mask[] )
*

_SWFSD_write_index_pixels_LUT8
		prolog
		tstw    r4
		beq     .end
		lwz     r3,GL_DRIVERCTX(r3)
		lwz     r9,AMC_DRAWBUFFER(r3)
		lwz     r10,AMC_HEIGHT(r3)
		subi    r10,r10,1
		lwz     r11,AMC_BPROW(r3)
		la      r12,AMC_PENCONV(r3)
		subi    r8,r8,1
		mtctr   r4
.loop
		lbzu    r0,1(r8)
		tstw    r0
		beq     .next
		lwz     r3,0(r6)
		subf    r3,r3,r10
		mullw   r3,r3,r11
		lwz     r0,0(r5)
		add     r3,r3,r0
		lwz     r0,0(r7)
		lbzx    r0,r12,r0
		stbx    r0,r9,r3
.next
		addi    r5,r5,4
		addi    r6,r6,4
		addi    r7,r7,4
		bdnz    .loop
.end
		epilog
;;/
;// SWFSD_write_index_pixels_RGB16
*
* void SWFSD_write_index_pixels_RGB16(GLcontext *ctx, GLuint n,
*                                  const GLint x[], const GLint y[],
*                                  const GLuint index[],
*                                  const GLubyte mask[] )
*

_SWFSD_write_index_pixels_RGB16
		prolog
		tstw    r4
		beq     .end
		lwz     r3,GL_DRIVERCTX(r3)
		lwz     r9,AMC_DRAWBUFFER(r3)
		lwz     r10,AMC_HEIGHT(r3)
		subi    r10,r10,1
		lwz     r11,AMC_BPROW(r3)
		srawi   r11,r11,1
		lwz     r12,AMC_COLORTABLE2(r3)
		subi    r8,r8,1
		mtctr   r4
.loop
		lbzu    r0,1(r8)
		tstw    r0
		beq     .next
		lwz     r3,0(r6)
		subf    r3,r3,r10
		mullw   r3,r3,r11
		lwz     r0,0(r5)
		add     r3,r3,r0
		lwz     r0,0(r7)
		add     r0,r0,r0
		addic.  r0,r0,2
		lhzx    r0,r12,r0
		add     r3,r3,r3
		sthx    r0,r9,r3
.next
		addi    r5,r5,4
		addi    r6,r6,4
		addi    r7,r7,4
		bdnz    .loop
.end
		epilog
;;/
;// SWFSD_write_index_pixels_ARGB
*
* void SWFSD_write_index_pixels_ARGB(GLcontext *ctx, GLuint n,
*                                  const GLint x[], const GLint y[],
*                                  const GLuint index[],
*                                  const GLubyte mask[] )
*

_SWFSD_write_index_pixels_ARGB
		prolog
		tstw    r4
		beq     .end
		lwz     r3,GL_DRIVERCTX(r3)
		lwz     r9,AMC_DRAWBUFFER(r3)
		lwz     r10,AMC_HEIGHT(r3)
		subi    r10,r10,1
		lwz     r11,AMC_BPROW(r3)
		srawi   r11,r11,2
		lwz     r12,AMC_COLORTABLE2(r3)
		subi    r8,r8,1
		mtctr   r4
.loop
		lbzu    r0,1(r8)
		tstw    r0
		beq     .next
		lwz     r3,0(r6)
		subf    r3,r3,r10
		mullw   r3,r3,r11
		lwz     r0,0(r5)
		add     r3,r3,r0
		lwz     r0,0(r7)
		slwi    r0,r0,2
		lwzx    r0,r12,r0
		slwi    r3,r3,2
		stwx    r0,r9,r3
.next
		addi    r5,r5,4
		addi    r6,r6,4
		addi    r7,r7,4
		bdnz    .loop
.end
		epilog
;;/

;// SWFSD_read_color_span_LUT8
*
* void SWFSD_read_color_span_LUT8(const GLcontext *ctx, GLuint n, GLint x, GLint y,
*                                         GLubyte rgba[][4])
*

_SWFSD_read_color_span_LUT8
		prolog
		tstw    r4
		beq     .end
		lwz     r3,GL_DRIVERCTX(r3)
		lwz     r11,AMC_COLORTABLE2(r3)
		lwz     r12,AMC_HEIGHT(r3)
		subf    r12,r6,r12
		subi    r12,r12,1
		lwz     r0,AMC_BPROW(r3)
		mullw   r12,r12,r0
		add     r12,r12,r5
		lwz     r5,AMC_DRAWBUFFER(r3)
		add     r5,r5,r12
		mtctr   r4

		subi    r7,r7,4
		neg     r0,r5
		subi    r5,r5,4
		andi.   r0,r0,$3
		beq     .main
		cmpw    r4,r0
		blt     .main
		subf    r4,r0,r4
		mtctr   r0
		li      r0,$ff
.first
		lbz     r6,4(r5)
		slwi    r6,r6,2
		lwzx    r12,r11,r6
		slwi    r12,r12,8
		ori     r12,r12,$ff
		stwu    r12,4(r7)
		addi    r5,r5,1
		bdnz    .first
.main
		mr.     r31,r4
		beq     .end
		srawi.  r4,r4,2
		beq     .cont
		mtctr   r4
.loop
		lwzu    r0,4(r5)
		rlwinm  r6,r0,10,22,29
		lwzx    r6,r11,r6
		slwi    r6,r6,8
		ori     r6,r6,$ff
		stwu    r6,4(r7)
		rlwinm  r6,r0,18,22,29
		lwzx    r6,r11,r6
		slwi    r6,r6,8
		ori     r6,r6,$ff
		stwu    r6,4(r7)
		rlwinm  r6,r0,26,22,29
		lwzx    r6,r11,r6
		slwi    r6,r6,8
		ori     r6,r6,$ff
		stwu    r6,4(r7)
		rlwinm  r6,r0,2,22,29
		lwzx    r6,r11,r6
		slwi    r6,r6,8
		ori     r6,r6,$ff
		stwu    r6,4(r7)
		bdnz    .loop
.cont
		andi.   r31,r31,$3
		beq     .end
		mtctr   r31
		li      r0,$ff
.loop2
		lbz     r6,4(r5)
		slwi    r6,r6,2
		lwzx    r12,r11,r6
		slwi    r12,r12,8
		ori     r12,r12,$ff
		stwu    r12,4(r7)
		addi    r5,r5,1
		bdnz    .loop2
.end
		epilog
;;/
;// SWFSD_read_color_span_RGB15
*
* void SWFSD_read_color_span_RGB15(const GLcontext *ctx, GLuint n, GLint x, GLint y,
*                                         GLubyte rgba[][4])
*

_SWFSD_read_color_span_RGB15
		prolog
		tstw    r4
		beq     .end
		lwz     r3,GL_DRIVERCTX(r3)
		lwz     r12,AMC_HEIGHT(r3)
		subf    r12,r6,r12
		subi    r12,r12,1
		lwz     r0,AMC_BPROW(r3)
		mullw   r12,r12,r0
		add     r12,r12,r5
		add     r12,r12,r5
		lwz     r5,AMC_DRAWBUFFER(r3)
		add     r5,r5,r12
		mtctr   r4

		subi    r7,r7,4
		andi.   r0,r5,$1
		subi    r5,r5,4
		beq     .main
		subi    r4,r4,1
		mtctr   r0
		li      r0,$ff
.first
		lhz     r6,4(r5)
		rlwinm  r12,r6,17,0,4
		rlwimi  r12,r6,14,8,12
		rlwimi  r12,r6,11,16,20
		ori     r12,r12,$ff
		stwu    r12,4(r7)
		addi    r5,r5,2
		bdnz    .first
.main
		mr.     r3,r4
		beq     .end
		srawi.  r4,r4,1
		beq     .cont
		mtctr   r4
		li      r0,$ffff
.loop
		lwzu    r6,4(r5)
		rlwinm  r12,r6,1,0,4
		rlwimi  r12,r6,30,8,12
		rlwimi  r12,r6,27,16,20
		stwu    r12,4(r7)
		rlwinm  r12,r6,17,0,4
		rlwimi  r12,r6,14,8,12
		rlwimi  r12,r6,11,16,20
		stwu    r12,4(r7)
		bdnz    .loop
.cont
		andi.   r3,r3,$1
		beq     .end
		mtctr   r3
		li      r0,$ff
.loop2
		lhz     r6,4(r5)
		rlwinm  r12,r6,17,0,4
		rlwimi  r12,r6,14,8,12
		rlwimi  r12,r6,11,16,20
		ori     r12,r12,$ff
		stwu    r12,4(r7)
		addi    r5,r5,2
		bdnz    .loop2
.end
		epilog
;;/
;// SWFSD_read_color_span_RGB15PC
*
* void SWFSD_read_color_span_RGB15PC(const GLcontext *ctx, GLuint n, GLint x, GLint y,
*                                         GLubyte rgba[][4])
*

_SWFSD_read_color_span_RGB15PC
		prolog
		tstw    r4
		beq     .end
		lwz     r3,GL_DRIVERCTX(r3)
		lwz     r12,AMC_HEIGHT(r3)
		subf    r12,r6,r12
		subi    r12,r12,1
		lwz     r0,AMC_BPROW(r3)
		mullw   r12,r12,r0
		add     r12,r12,r5
		add     r12,r12,r5
		lwz     r5,AMC_DRAWBUFFER(r3)
		add     r5,r5,r12
		mtctr   r4

		subi    r7,r7,4
		andi.   r0,r5,$1
		subi    r5,r5,4
		beq     .main
		subi    r4,r4,1
		mtctr   r0
		li      r0,$ff
.first
		addi    r5,r5,4
		lhbrx   r6,0,r5
		rlwinm  r12,r6,17,0,4
		rlwimi  r12,r6,14,8,12
		rlwimi  r12,r6,11,16,20
		ori     r12,r12,$ff
		stwu    r12,4(r7)
		subi    r5,r5,2
		bdnz    .first
.main
		mr.     r3,r4
		beq     .end
		srawi.  r4,r4,1
		beq     .cont
		mtctr   r4
		li      r0,$ffff
.loop
		addi    r5,r5,4
		lwbrx   r6,0,r5
		rotrwi  r6,r6,16
		rlwinm  r12,r6,1,0,4
		rlwimi  r12,r6,30,8,12
		rlwimi  r12,r6,27,16,20
		stwu    r12,4(r7)
		rlwinm  r12,r6,17,0,4
		rlwimi  r12,r6,14,8,12
		rlwimi  r12,r6,11,16,20
		stwu    r12,4(r7)
		bdnz    .loop
.cont
		andi.   r3,r3,$1
		beq     .end
		mtctr   r3
		li      r0,$ff
.loop2
		addi    r5,r5,4
		lhbrx   r6,0,r5
		rlwinm  r12,r6,17,0,4
		rlwimi  r12,r6,14,8,12
		rlwimi  r12,r6,11,16,20
		ori     r12,r12,$ff
		stwu    r12,4(r7)
		subi    r5,r5,2
		bdnz    .loop2
.end
		epilog
;;/
;// SWFSD_read_color_span_RGB16
*
* void SWFSD_read_color_span_RGB16(const GLcontext *ctx, GLuint n, GLint x, GLint y,
*                                         GLubyte rgba[][4])
*

_SWFSD_read_color_span_RGB16
		prolog
		tstw    r4
		beq     .end
		lwz     r3,GL_DRIVERCTX(r3)
		lwz     r12,AMC_HEIGHT(r3)
		subf    r12,r6,r12
		subi    r12,r12,1
		lwz     r0,AMC_BPROW(r3)
		mullw   r12,r12,r0
		add     r12,r12,r5
		add     r12,r12,r5
		lwz     r5,AMC_DRAWBUFFER(r3)
		add     r5,r5,r12
		mtctr   r4

		subi    r7,r7,4
		andi.   r0,r5,$1
		subi    r5,r5,4
		beq     .main
		subi    r4,r4,1
		mtctr   r0
		li      r0,$ff
.first
		lhz     r6,4(r5)
		rlwinm  r12,r6,16,0,4
		rlwimi  r12,r6,13,8,13
		rlwimi  r12,r6,11,16,20
		ori     r12,r12,$ff
		stwu    r12,4(r7)
		addi    r5,r5,2
		bdnz    .first
.main
		mr.     r3,r4
		beq     .end
		srawi.  r4,r4,1
		beq     .cont
		mtctr   r4
		li      r0,$ffff
.loop
		lwzu    r6,4(r5)
		rlwinm  r12,r6,0,0,4
		rlwimi  r12,r6,29,8,13
		rlwimi  r12,r6,27,16,20
		stwu    r12,4(r7)
		rlwinm  r12,r6,16,0,4
		rlwimi  r12,r6,13,8,13
		rlwimi  r12,r6,11,16,20
		stwu    r12,4(r7)
		bdnz    .loop
.cont
		andi.   r3,r3,$1
		beq     .end
		mtctr   r3
		li      r0,$ff
.loop2
		lhz     r6,4(r5)
		rlwinm  r12,r6,16,0,4
		rlwimi  r12,r6,13,8,13
		rlwimi  r12,r6,11,16,20
		ori     r12,r12,$ff
		stwu    r12,4(r7)
		addi    r5,r5,2
		bdnz    .loop2
.end
		epilog
;;/
;// SWFSD_read_color_span_RGB16PC
*
* void SWFSD_read_color_span_RGB16PC(const GLcontext *ctx, GLuint n, GLint x, GLint y,
*                                         GLubyte rgba[][4])
*

_SWFSD_read_color_span_RGB16PC
		prolog
		tstw    r4
		beq     .end
		lwz     r3,GL_DRIVERCTX(r3)
		lwz     r12,AMC_HEIGHT(r3)
		subf    r12,r6,r12
		subi    r12,r12,1
		lwz     r0,AMC_BPROW(r3)
		mullw   r12,r12,r0
		add     r12,r12,r5
		add     r12,r12,r5
		lwz     r5,AMC_DRAWBUFFER(r3)
		add     r5,r5,r12
		mtctr   r4

		subi    r7,r7,4
		andi.   r0,r5,$1
		subi    r5,r5,4
		beq     .main
		subi    r4,r4,1
		mtctr   r0
		li      r0,$ff
.first
		addi    r5,r5,4
		lhbrx   r6,0,r5
		rlwinm  r12,r6,16,0,4
		rlwimi  r12,r6,13,8,13
		rlwimi  r12,r6,11,16,20
		ori     r12,r12,$ff
		stwu    r12,4(r7)
		subi    r5,r5,2
		bdnz    .first
.main
		mr.     r3,r4
		beq     .end
		srawi.  r4,r4,1
		beq     .cont
		mtctr   r4
		li      r0,$ffff
.loop
		addi    r5,r5,4
		lwbrx   r6,0,r5
		rotrwi  r6,r6,16
		rlwinm  r12,r6,0,0,4
		rlwimi  r12,r6,29,8,13
		rlwimi  r12,r6,27,16,20
		stwu    r12,4(r7)
		rlwinm  r12,r6,16,0,4
		rlwimi  r12,r6,13,8,13
		rlwimi  r12,r6,11,16,20
		stwu    r12,4(r7)
		bdnz    .loop
.cont
		andi.   r3,r3,$1
		beq     .end
		mtctr   r3
		li      r0,$ff
.loop2
		addi    r5,r5,4
		lhbrx   r6,0,r5
		rlwinm  r12,r6,16,0,4
		rlwimi  r12,r6,13,8,13
		rlwimi  r12,r6,11,16,20
		ori     r12,r12,$ff
		stwu    r12,4(r7)
		subi    r5,r5,2
		bdnz    .loop2
.end
		epilog
;;/
;// SWFSD_read_color_span_ARGB
*
* void SWFSD_read_color_span_ARGB(const GLcontext *ctx, GLuint n, GLint x, GLint y,
*                                         GLubyte rgba[][4])
*

_SWFSD_read_color_span_ARGB
		prolog
		tstw    r4
		beq     .end
		lwz     r3,GL_DRIVERCTX(r3)
		lwz     r12,AMC_HEIGHT(r3)
		subf    r12,r6,r12
		subi    r12,r12,1
		lwz     r0,AMC_BPROW(r3)
		mullw   r12,r12,r0
		slwi    r5,r5,2
		add     r12,r12,r5
		lwz     r5,AMC_DRAWBUFFER(r3)
		add     r5,r5,r12
		mtctr   r4
		subi    r5,r5,4
		subi    r7,r7,4
.loop
		lwzu    r12,4(r5)
		rotlwi  r12,r12,8
		stwu    r12,4(r7)
		bdnz    .loop
.end
		epilog
;;/
;// SWFSD_read_color_span_BGRA
*
* void SWFSD_read_color_span_BGRA(const GLcontext *ctx, GLuint n, GLint x, GLint y,
*                                         GLubyte rgba[][4])
*

_SWFSD_read_color_span_BGRA
		prolog
		tstw    r4
		beq     .end
		lwz     r3,GL_DRIVERCTX(r3)
		lwz     r12,AMC_HEIGHT(r3)
		subf    r12,r6,r12
		subi    r12,r12,1
		lwz     r0,AMC_BPROW(r3)
		mullw   r12,r12,r0
		slwi    r5,r5,2
		add     r12,r12,r5
		lwz     r5,AMC_DRAWBUFFER(r3)
		add     r5,r5,r12
		mtctr   r4
		subi    r7,r7,4
.loop
		lwbrx   r12,0,r5
		addi    r5,r5,4
		rotlwi  r12,r12,8
		stwu    r12,4(r7)
		bdnz    .loop
.end
		epilog
;;/

;// SWFSD_read_index_span_LUT8
*
* void SWFSD_read_index_span_LUT8(GLcontext *ctx, GLuint n,
*                               GLint x, GLint y,
*                               GLuint index[])
*

_SWFSD_read_index_span_LUT8
		prolog
		tstw    r4
		beq     .end
		lwz     r3,GL_DRIVERCTX(r3)
		la      r11,AMC_PENCONVINV(r3)
		lwz     r12,AMC_HEIGHT(r3)
		subf    r12,r6,r12
		subi    r12,r12,1
		lwz     r0,AMC_BPROW(r3)
		mullw   r12,r12,r0
		add     r12,r12,r5
		lwz     r5,AMC_DRAWBUFFER(r3)
		add     r5,r5,r12
		mtctr   r4
		subi    r7,r7,4
		neg     r0,r9
		subi    r5,r5,4
		andi.   r0,r0,$3
		beq     .main
		cmpw    r4,r0
		blt     .main
		subf    r4,r0,r4
		mtctr   r0
.first
		lbz     r6,4(r5)
		lbzx    r6,r11,r6
		stwu    r6,4(r7)
		addi    r5,r5,4
		bdnz    .first
.main
		mr.     r12,r4
		beq     .end
		srawi.  r4,r4,2
		beq     .cont
		mtctr   r4
.loop
		lwzu    r0,4(r5)
		extrwi  r6,r0,8,0
		lbzx    r6,r11,r6
		stwu    r6,4(r7)
		rlwinm  r6,r0,16,24,31
		lbzx    r6,r11,r6
		stwu    r6,4(r7)
		rlwinm  r6,r0,24,24,31
		lbzx    r6,r11,r6
		stwu    r6,4(r7)
		andi.   r6,r0,$ff
		lbzx    r6,r11,r6
		stwu    r6,4(r7)
		bdnz    .loop
.cont
		andi.   r12,r12,$3
		beq     .end
		mtctr   r12
.loop2
		lbz     r6,4(r5)
		lbzx    r6,r11,r6
		stwu    r6,4(r7)
		addi    r5,r5,4
		bdnz    .first
.end
		epilog
;;/

;// SWFSD_read_color_pixels_LUT8
*
* void SWFSD_read_color_pixels_LUT8(const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[],
*                                         GLubyte rgba[][4], const GLubyte mask[])
*

_SWFSD_read_color_pixels_LUT8
		prolog
		tstw    r4
		beq     .end
		lwz     r3,GL_DRIVERCTX(r3)
		lwz     r11,AMC_DRAWBUFFER(r3)
		lwz     r12,AMC_HEIGHT(r3)
		subi    r12,r12,1
		lwz     r10,AMC_BPROW(r3)
		mtctr   r4
		lwz     r9,AMC_COLORTABLE2(r3)
		subi    r8,r8,1
.loop
		lbzu    r0,1(r8)
		tstw    r0
		beq     .next
		lwz     r3,0(r6)
		subf    r3,r3,r12
		mullw   r3,r3,r10
		lwz     r0,0(r5)
		add     r3,r3,r0
		lbzx    r0,r11,r3
		slwi    r0,r0,2
		lwzx    r0,r9,r0
		slwi    r0,r0,8
		ori     r0,r0,$ff
		stw     r0,0(r7)
.next
		addi    r5,r5,4
		addi    r6,r6,4
		addi    r7,r7,4
		bdnz    .loop
.end
		epilog
;;/
;// SWFSD_read_color_pixels_RGB15
*
* void SWFSD_read_color_pixels_RGB15(const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[],
*                                         GLubyte rgba[][4], const GLubyte mask[])
*

_SWFSD_read_color_pixels_RGB15
		prolog
		tstw    r4
		beq     .end
		lwz     r3,GL_DRIVERCTX(r3)
		lwz     r11,AMC_DRAWBUFFER(r3)
		lwz     r12,AMC_HEIGHT(r3)
		subi    r12,r12,1
		lwz     r3,AMC_BPROW(r3)
		srawi   r3,r3,1
		mtctr   r4
		subi    r8,r8,1
.loop
		lbzu    r0,1(r8)
		tstw    r0
		beq     .next
		lwz     r10,0(r6)
		subf    r10,r10,r12
		mullw   r10,r10,r3
		lwz     r0,0(r5)
		add     r10,r10,r0
		add     r10,r10,r10
		lhzx    r0,r11,r10
		rlwinm  r9,r0,17,0,4
		rlwimi  r9,r0,14,8,12
		rlwimi  r9,r0,11,16,20
		ori     r9,r9,$ff
		stw     r9,0(r7)
.next
		addi    r5,r5,4
		addi    r6,r6,4
		addi    r7,r7,4
		bdnz    .loop
.end
		epilog
;;/
;// SWFSD_read_color_pixels_RGB15PC
*
* void SWFSD_read_color_pixels_RGB15PC(const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[],
*                                         GLubyte rgba[][4], const GLubyte mask[])
*

_SWFSD_read_color_pixels_RGB15PC
		prolog
		tstw    r4
		beq     .end
		lwz     r3,GL_DRIVERCTX(r3)
		lwz     r11,AMC_DRAWBUFFER(r3)
		lwz     r12,AMC_HEIGHT(r3)
		subi    r12,r12,1
		lwz     r3,AMC_BPROW(r3)
		srawi   r3,r3,1
		mtctr   r4
		subi    r8,r8,1
.loop
		lbzu    r0,1(r8)
		tstw    r0
		beq     .next
		lwz     r10,0(r6)
		subf    r10,r10,r12
		mullw   r10,r10,r3
		lwz     r0,0(r5)
		add     r10,r10,r0
		add     r10,r10,r10
		lhbrx   r0,r11,r10
		rlwinm  r9,r0,17,0,4
		rlwimi  r9,r0,14,8,12
		rlwimi  r9,r0,11,16,20
		ori     r9,r9,$ff
		stw     r9,0(r7)
.next
		addi    r5,r5,4
		addi    r6,r6,4
		addi    r7,r7,4
		bdnz    .loop
.end
		epilog
;;/
;// SWFSD_read_color_pixels_RGB16
*
* void SWFSD_read_color_pixels_RGB16(const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[],
*                                         GLubyte rgba[][4], const GLubyte mask[])
*

_SWFSD_read_color_pixels_RGB16
		prolog
		tstw    r4
		beq     .end
		lwz     r3,GL_DRIVERCTX(r3)
		lwz     r11,AMC_DRAWBUFFER(r3)
		lwz     r12,AMC_HEIGHT(r3)
		subi    r12,r12,1
		lwz     r3,AMC_BPROW(r3)
		srawi   r3,r3,1
		mtctr   r4
		subi    r8,r8,1
.loop
		lbzu    r0,1(r8)
		tstw    r0
		beq     .next
		lwz     r10,0(r6)
		subf    r10,r10,r12
		mullw   r10,r10,r3
		lwz     r0,0(r5)
		add     r10,r10,r0
		add     r10,r10,r10
		lhzx    r0,r11,r10
		rlwinm  r9,r0,16,0,4
		rlwimi  r9,r0,13,8,13
		rlwimi  r9,r0,11,16,20
		ori     r9,r9,$ff
		stw     r9,0(r7)
.next
		addi    r5,r5,4
		addi    r6,r6,4
		addi    r7,r7,4
		bdnz    .loop
.end
		epilog
;;/
;// SWFSD_read_color_pixels_RGB16PC
*
* void SWFSD_read_color_pixels_RGB16PC(const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[],
*                                         GLubyte rgba[][4], const GLubyte mask[])
*

_SWFSD_read_color_pixels_RGB16PC
		prolog
		tstw    r4
		beq     .end
		lwz     r3,GL_DRIVERCTX(r3)
		lwz     r11,AMC_DRAWBUFFER(r3)
		lwz     r12,AMC_HEIGHT(r3)
		subi    r12,r12,1
		lwz     r3,AMC_BPROW(r3)
		srawi   r3,r3,1
		mtctr   r4
		subi    r8,r8,1
.loop
		lbzu    r0,1(r8)
		tstw    r0
		beq     .next
		lwz     r10,0(r6)
		subf    r10,r10,r12
		mullw   r10,r10,r3
		lwz     r0,0(r5)
		add     r10,r10,r0
		add     r10,r10,r10
		lhbrx   r0,r11,r10
		rlwinm  r9,r0,16,0,4
		rlwimi  r9,r0,13,8,13
		rlwimi  r9,r0,11,16,20
		ori     r9,r9,$ff
		stw     r9,0(r7)
.next
		addi    r5,r5,4
		addi    r6,r6,4
		addi    r7,r7,4
		bdnz    .loop
.end
		epilog
;;/
;// SWFSD_read_color_pixels_ARGB
*
* void SWFSD_read_color_pixels_ARGB(const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[],
*                                         GLubyte rgba[][4], const GLubyte mask[])
*

_SWFSD_read_color_pixels_ARGB
		prolog
		tstw    r4
		beq     .end
		lwz     r3,GL_DRIVERCTX(r3)
		lwz     r11,AMC_DRAWBUFFER(r3)
		lwz     r12,AMC_HEIGHT(r3)
		subi    r12,r12,1
		lwz     r3,AMC_BPROW(r3)
		srawi   r3,r3,2
		mtctr   r4
		subi    r8,r8,1
.loop
		lbzu    r0,1(r8)
		tstw    r0
		beq     .next
		lwz     r10,0(r6)
		subf    r10,r10,r12
		mullw   r10,r10,r3
		lwz     r0,0(r5)
		add     r10,r10,r0
		slwi    r10,r10,2
		lwzx    r0,r11,r10
		rotlwi  r0,r0,8
		stw     r0,0(r7)
.next
		addi    r5,r5,4
		addi    r6,r6,4
		addi    r7,r7,4
		bdnz    .loop
.end
		epilog
;;/
;// SWFSD_read_color_pixels_BGRA
*
* void SWFSD_read_color_pixels_BGRA(const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[],
*                                         GLubyte rgba[][4], const GLubyte mask[])
*

_SWFSD_read_color_pixels_BGRA
		prolog
		tstw    r4
		beq     .end
		lwz     r3,GL_DRIVERCTX(r3)
		lwz     r11,AMC_DRAWBUFFER(r3)
		lwz     r12,AMC_HEIGHT(r3)
		subi    r12,r12,1
		lwz     r3,AMC_BPROW(r3)
		srawi   r3,r3,2
		mtctr   r4
		subi    r8,r8,1
.loop
		lbzu    r0,1(r8)
		tstw    r0
		beq     .next
		lwz     r10,0(r6)
		subf    r10,r10,r12
		mullw   r10,r10,r3
		lwz     r0,0(r5)
		add     r10,r10,r0
		slwi    r10,r10,2
		lwbrx   r0,r11,r10
		rotlwi  r0,r0,8
		stw     r0,0(r7)
.next
		addi    r5,r5,4
		addi    r6,r6,4
		addi    r7,r7,4
		bdnz    .loop
.end
		epilog
;;/

;// SWFSD_read_index_pixels_LUT8
*
* void SWFSD_read_index_pixels_LUT8( GLcontext *ctx,GLuint n,
*                                  const GLint x[], const GLint y[],
*                                  GLuint index[], const GLubyte mask[] )
*

_SWFSD_read_index_pixels_LUT8
		prolog
		tstw    r4
		beq     .end
		lwz     r3,GL_DRIVERCTX(r3)
		lwz     r11,AMC_DRAWBUFFER(r3)
		lwz     r12,AMC_HEIGHT(r3)
		subi    r12,r12,1
		lwz     r9,AMC_BPROW(r3)
		mtctr   r4
		la      r3,AMC_PENCONVINV(r3)
		subi    r8,r8,1
.loop
		lbzu    r0,1(r8)
		tstw    r0
		beq     .next
		lwz     r4,0(r6)
		subf    r4,r4,r12
		mullw   r4,r4,r9
		lwz     r0,0(r5)
		add     r4,r4,r0
		lbzx    r0,r11,r4
		lbzx    r0,r3,r0
		stw     r0,0(r7)
.next
		addi    r5,r5,4
		addi    r6,r6,4
		addi    r7,r7,4
		bdnz    .loop
.end
		epilog
;;/

