154 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
			
		
		
	
	
			154 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/misc/BUSmemcpy.s,v 1.2 1998/07/25 16:56:49 dawes Exp $ */
 | 
						|
/******************************************************************************
 | 
						|
                        Copyright 1993 by Glenn G. Lai
 | 
						|
 | 
						|
                        All Rights Reserved
 | 
						|
 | 
						|
Permission to use, copy, modify, and distribute this software and its
 | 
						|
documentation for any purpose and without fee is hereby granted,
 | 
						|
provided that the above copyright notice appear in all copies and that
 | 
						|
both that copyright notice and this permission notice appear in
 | 
						|
supporting documentation, and that the name of Glenn G. Lai not be
 | 
						|
used in advertising or publicity pertaining to distribution of the
 | 
						|
software without specific, written prior permission.
 | 
						|
 | 
						|
Glenn G. Lai DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
 | 
						|
ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
 | 
						|
DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
 | 
						|
ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 | 
						|
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
 | 
						|
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
 | 
						|
SOFTWARE.
 | 
						|
 | 
						|
Glenn G. Lai
 | 
						|
P.O. Box 4314
 | 
						|
Austin, Tx 78765
 | 
						|
(glenn@cs.utexas.edu)
 | 
						|
8/9/93
 | 
						|
******************************************************************************/
 | 
						|
/* $XConsortium: BUSmemcpy.s /main/4 1996/02/21 17:39:34 kaleb $ */
 | 
						|
 | 
						|
/*
 | 
						|
 * Modified to use long-alignment of video memory rather than word-alignment
 | 
						|
 * to improve performance for LocalBus video cards.  Function names changed
 | 
						|
 * from ISAToMem and MemToISA to BusToMem and MemToBus.
 | 
						|
 *
 | 
						|
 * David Dawes <dawes@XFree86.org>, 25 August 1993.
 | 
						|
 */
 | 
						|
 | 
						|
 | 
						|
#include "assyntax.h"
 | 
						|
 | 
						|
	FILE("BUSmemcpy.s")
 | 
						|
 | 
						|
	AS_BEGIN
 | 
						|
 | 
						|
/* BusToMem copies from video memory to main memory
 | 
						|
   MemToBus copies from main memory to video memory
 | 
						|
 | 
						|
	void xf86BusToMem(unsigned char *dst, unsigned char *src, int len);
 | 
						|
	void xf86MemToBus(unsigned char *dst, unsigned char *src, int len);
 | 
						|
*/
 | 
						|
 | 
						|
#define dst     REGOFF(4,ESP)
 | 
						|
#define src     REGOFF(8,ESP)
 | 
						|
#define len     REGOFF(12,ESP)
 | 
						|
 | 
						|
	GLOBL	GLNAME(xf86BusToMem)
 | 
						|
	GLOBL	GLNAME(xf86MemToBus)
 | 
						|
 | 
						|
	SEG_DATA
 | 
						|
copyright:
 | 
						|
	STRING("Copyright 8/9/1993 by Glenn G. Lai")
 | 
						|
 | 
						|
	SEG_TEXT
 | 
						|
	ALIGNTEXT4
 | 
						|
GLNAME(xf86BusToMem):
 | 
						|
	CLD
 | 
						|
	PUSH_L	(ESI)
 | 
						|
	MOV_L	(EDI, EDX)
 | 
						|
	
 | 
						|
	MOV_L	(src, ESI)
 | 
						|
	MOV_L	(dst, EDI)
 | 
						|
	MOV_L	(len, ECX)
 | 
						|
	
 | 
						|
	CMP_L	(CONST(7), ECX)
 | 
						|
	JC	(quickBM)
 | 
						|
 | 
						|
	TEST_L	(CONST(1), ESI)
 | 
						|
	JZ	(BwM)
 | 
						|
 | 
						|
	MOVS_B
 | 
						|
	DEC_L	(ECX)
 | 
						|
 | 
						|
BwM:	
 | 
						|
	TEST_L	(CONST(2), ESI)
 | 
						|
	JZ	(BlM)
 | 
						|
 | 
						|
	MOVS_W
 | 
						|
	DEC_L	(ECX)
 | 
						|
	DEC_L	(ECX)
 | 
						|
 | 
						|
BlM:
 | 
						|
	MOV_L	(ECX, EAX)
 | 
						|
	AND_L	(CONST(3), EAX)
 | 
						|
	SHR_L	(CONST(2), ECX)
 | 
						|
	REP
 | 
						|
	MOVS_L
 | 
						|
	MOV_L	(EAX, ECX)
 | 
						|
quickBM:
 | 
						|
	OR_L	(ECX, ECX)
 | 
						|
	JZ	(return)
 | 
						|
	REP
 | 
						|
	MOVS_B
 | 
						|
return:
 | 
						|
	POP_L	(ESI)
 | 
						|
	MOV_L	(EDX, EDI)
 | 
						|
	RET
 | 
						|
/************************/
 | 
						|
 | 
						|
	ALIGNTEXT4
 | 
						|
GLNAME(xf86MemToBus):
 | 
						|
	CLD
 | 
						|
	PUSH_L	(ESI)
 | 
						|
	MOV_L	(EDI, EDX)
 | 
						|
	
 | 
						|
	MOV_L	(src, ESI)
 | 
						|
	MOV_L	(dst, EDI)
 | 
						|
	MOV_L	(len, ECX)
 | 
						|
	
 | 
						|
	CMP_L	(CONST(7), ECX)
 | 
						|
	JC	(quickMB)
 | 
						|
 | 
						|
	TEST_L	(CONST(1), EDI)
 | 
						|
	JZ	(MwB)
 | 
						|
 | 
						|
	MOVS_B
 | 
						|
	DEC_L	(ECX)
 | 
						|
 | 
						|
MwB:	
 | 
						|
	TEST_L	(CONST(2), EDI)
 | 
						|
	JZ	(MlB)
 | 
						|
 | 
						|
	MOVS_W
 | 
						|
	DEC_L	(ECX)
 | 
						|
	DEC_L	(ECX)
 | 
						|
 | 
						|
MlB:
 | 
						|
	MOV_L	(ECX, EAX)
 | 
						|
	AND_L	(CONST(3), EAX)
 | 
						|
	SHR_L	(CONST(2), ECX)
 | 
						|
	REP
 | 
						|
	MOVS_L
 | 
						|
	MOV_L	(EAX, ECX)
 | 
						|
quickMB:
 | 
						|
	OR_L	(ECX, ECX)
 | 
						|
	JZ	(return)
 | 
						|
	REP
 | 
						|
	MOVS_B
 | 
						|
 | 
						|
	POP_L	(ESI)
 | 
						|
	MOV_L	(EDX, EDI)
 | 
						|
	RET
 | 
						|
 |