/* bcopy -- copy a block from source to destination.  S/390 version.
   This file is part of the GNU C Library.
   Copyright (C) 2000, 2001 Free Software Foundation, Inc.
   Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).

   The GNU C Library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Lesser General Public
   License as published by the Free Software Foundation; either
   version 2.1 of the License, or (at your option) any later version.

   The GNU C 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
   Lesser General Public License for more details.

   You should have received a copy of the GNU Lesser General Public
   License along with the GNU C Library; if not, write to the Free
   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
   02111-1307 USA.  */

/* INPUT PARAMETERS
     %r2 = address of source
     %r3 = address of destination
     %r4 = number of bytes to copy.  */

#include "sysdep.h"
#include "asm-syntax.h"

        .text
ENTRY(__bcopy)
	ltr     %r1,%r4             # zero bcopy ?
	jz      .L4
        clr     %r2,%r3             # check against destructive overlap
        jnl     .L0
        alr     %r1,%r2
        clr     %r1,%r3
        jh      .L7
.L0:	ahi     %r4,-1              # length - 1
	lr      %r1,%r4
	srl     %r1,8
	ltr     %r1,%r1             # < 256 bytes to move ?
	jz      .L2
	chi     %r1,255             # > 1MB to move ?
	jh      .L5
.L1:	mvc     0(256,%r3),0(%r2)   # move in 256 byte chunks
	la      %r2,256(%r2)
	la      %r3,256(%r3)
	brct    %r1,.L1
.L2:	bras    %r1,.L3             # setup base pointer for execute
	mvc     0(1,%r3),0(%r2)     # instruction for execute
.L3:	ex      %r4,0(%r1)          # execute mvc with length ((%r4)&255)+1
.L4:	br      %r14

	# data copies > 1MB are faster with mvcle.
.L5:	ahi     %r4,1               # length + 1
	lr      %r5,%r4	            # source length
	lr	%r4,%r2             # source address
	lr	%r2,%r3             # set destination
	lr	%r3,%r5             # destination length = source length
.L6:	mvcle	%r2,%r4,0           # thats it, MVCLE is your friend
	jo	.L6
	br	%r14
.L7:                                # destructive overlay, can not use mvcle
        lr     %r1,%r2              # bcopy is called with source,dest
        lr     %r2,%r3              # memmove with dest,source! Oh, well...
        lr     %r3,%r1
        basr   %r1,0
.L8:
#ifdef PIC
        al     %r1,.L9-.L8(%r1)     # get address of global offset table
                                    # load address of memmove
        l      %r1,memmove@GOT12(%r1)
        br     %r1
.L9:    .long  _GLOBAL_OFFSET_TABLE_-.L8
#else
        al     %r1,.L9-.L8(%r1)     # load address of memmove
        br     %r1                  # jump to memmove
.L9:    .long  memmove-.L8
#endif

END(__bcopy)

#ifndef NO_WEAK_ALIAS
weak_alias (__bcopy, bcopy)
#endif

