summaryrefslogtreecommitdiff
path: root/dviware/umddvi/lib/bcopy.s
blob: 1577615969ece5fc1d30c5b21f5d14488a39c622 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#
# Copyright (c) 1987 University of Maryland Department of Computer Science.
# All rights reserved.  Permission to copy for any purpose is hereby granted
# so long as this copyright notice remains intact.
#

rcsid:	.asciz	"$Header: bcopy.s,v 1.2 87/06/16 18:27:33 chris Exp $"

# bcopy (from, to, count) char *from, *to; int count;
#
# Copy "count" bytes from "from" to "to"; not guaranteed to
# work if "from" and "to" overlap.

	.align	2
	.globl	_bcopy
_bcopy:
	.word	0
	movl	4(ap),r1		# r1 = from
	movl	8(ap),r3		# r3 = to
	brb	2f
1:
	subl2	r0,12(ap)		# count-=65535 (bytes moved this time)
	movc3	r0,(r1),(r3)		# r1, r3 magically point to next 65K
2:
	movzwl	$65535,r0
	cmpl	12(ap),r0		# <= 65535 bytes to move?
	jgtr	1b			# brif not, move 65535 and try again
	movc3	12(ap),(r1),(r3)	# move up to 65535 bytes
	ret