109 lines
2.6 KiB
ArmAsm
109 lines
2.6 KiB
ArmAsm
/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/misc/SlowBcopy.S,v 1.1 1999/07/10 07:24:51 dawes Exp $ */
|
|
/*******************************************************************************
|
|
Copyright 1994 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 copyr notice appear in all copies and that
|
|
both that copyr 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)
|
|
7/21/94
|
|
*******************************************************************************/
|
|
/* $XConsortium: SlowBcopy.s /main/4 1996/02/21 17:40:52 kaleb $ */
|
|
|
|
/*
|
|
* Modified from the output generated by GCC
|
|
*
|
|
* Create a dependency that should be immune from the effect of register
|
|
* renaming as is commonly seen in superscalar processors. This should
|
|
* insert a minimum of 100-ns delays between reads/writes at clock rates
|
|
* up to 100 MHz---GGL
|
|
*
|
|
* Slowbcopy(char *src, char *dst, int count)
|
|
*
|
|
*/
|
|
|
|
#include "assyntax.h"
|
|
|
|
FILE("SlowBcopy.s")
|
|
|
|
AS_BEGIN
|
|
|
|
gcc2_compiled.:
|
|
___gnu_compiled_c:
|
|
|
|
GLOBL GLNAME(xf86SlowBcopy)
|
|
|
|
SEG_TEXT
|
|
ALIGNTEXT4
|
|
GLNAME(xf86SlowBcopy):
|
|
PUSH_L (EBP)
|
|
MOV_L (ESP,EBP)
|
|
PUSH_L (ESI)
|
|
PUSH_L (EBX)
|
|
MOV_L (REGOFF(8,EBP),ECX)
|
|
MOV_L (REGOFF(12,EBP),EDX)
|
|
MOV_L (REGOFF(16,EBP),ESI)
|
|
XOR_L (EAX,EAX)
|
|
CMP_L (ESI,EAX)
|
|
JGE (L3)
|
|
|
|
ALIGNTEXT4
|
|
L5:
|
|
MOV_B (REGIND(ECX),BL)
|
|
|
|
MOV_B (BL, BH)
|
|
MOV_B (BH, BL)
|
|
MOV_B (BL, BH)
|
|
MOV_B (BH, BL)
|
|
MOV_B (BL, BH)
|
|
MOV_B (BH, BL)
|
|
MOV_B (BL, BH)
|
|
MOV_B (BH, BL)
|
|
MOV_B (BL, BH)
|
|
MOV_B (BH, BL)
|
|
|
|
MOV_B (BL,REGIND(EDX))
|
|
|
|
INC_L (ECX)
|
|
DEC_L (ECX)
|
|
INC_L (ECX)
|
|
DEC_L (ECX)
|
|
INC_L (ECX)
|
|
DEC_L (ECX)
|
|
INC_L (ECX)
|
|
DEC_L (ECX)
|
|
INC_L (ECX)
|
|
DEC_L (ECX)
|
|
|
|
INC_L (ECX)
|
|
INC_L (EDX)
|
|
INC_L (EAX)
|
|
CMP_L (ESI,EAX)
|
|
JL (L5)
|
|
L3:
|
|
LEA_L (REGOFF(-8,EBP),ESP)
|
|
POP_L (EBX)
|
|
POP_L (ESI)
|
|
MOV_L (EBP,ESP)
|
|
POP_L (EBP)
|
|
RET
|
|
|