bcopy.s: defines bcopy() and cpyn().
chris at umcp-cs.UUCP
chris at umcp-cs.UUCP
Mon Oct 10 09:16:50 AEST 1983
# Block copy routines for VAXen.
# For non-vax people:
# bcopy (from, to, count) register char *from, *to; register int count; {
# while (--count >= 0) *to++ = *from++;
# }
# cpyn (to, from, count) register char *to, *from; register int count; {
# while (--count >= 0) *to++ = *from++;
# }
#
# 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.
#
# cpyn (to, from, count) char *to, *from; int count;
.align 2
.globl _cpyn
_cpyn:
.word 0
movl 4(ap),r3 # r3 = to
movl 8(ap),r1 # r1 = from
brb 2f
.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
--
In-Real-Life: Chris Torek, Univ of MD Comp Sci
UUCP: {seismo,allegra,brl-bmd}!umcp-cs!chris
CSNet: chris at umcp-cs ARPA: chris.umcp-cs at UDel-Relay
More information about the Comp.sources.unix
mailing list