Blame sysdeps/powerpc/powerpc32/rshift.S

Packit 6c4009
/* Shift a limb right, low level routine.
Packit 6c4009
   Copyright (C) 1995-2018 Free Software Foundation, Inc.
Packit 6c4009
   This file is part of the GNU C Library.
Packit 6c4009
Packit 6c4009
   The GNU C Library is free software; you can redistribute it and/or
Packit 6c4009
   modify it under the terms of the GNU Lesser General Public
Packit 6c4009
   License as published by the Free Software Foundation; either
Packit 6c4009
   version 2.1 of the License, or (at your option) any later version.
Packit 6c4009
Packit 6c4009
   The GNU C Library is distributed in the hope that it will be useful,
Packit 6c4009
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 6c4009
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit 6c4009
   Lesser General Public License for more details.
Packit 6c4009
Packit 6c4009
   You should have received a copy of the GNU Lesser General Public
Packit 6c4009
   License along with the GNU C Library; if not, see
Packit 6c4009
   <http://www.gnu.org/licenses/>.  */
Packit 6c4009
Packit 6c4009
#include <sysdep.h>
Packit 6c4009
Packit 6c4009
/* INPUT PARAMETERS
Packit 6c4009
   res_ptr	r3
Packit 6c4009
   s1_ptr	r4
Packit 6c4009
   size		r5
Packit 6c4009
   cnt		r6  */
Packit 6c4009
Packit 6c4009
ENTRY (__mpn_rshift)
Packit 6c4009
	mtctr	r5		# copy size into CTR
Packit 6c4009
	addi	r7,r3,-4	# move adjusted res_ptr to free return reg
Packit 6c4009
	subfic	r8,r6,32
Packit 6c4009
	lwz	r11,0(r4)	# load first s1 limb
Packit 6c4009
	slw	r3,r11,r8	# compute function return value
Packit 6c4009
	bdz	L(1)
Packit 6c4009
Packit 6c4009
L(0):	lwzu	r10,4(r4)
Packit 6c4009
	srw	r9,r11,r6
Packit 6c4009
	slw	r12,r10,r8
Packit 6c4009
	or	r9,r9,r12
Packit 6c4009
	stwu	r9,4(r7)
Packit 6c4009
	bdz	L(2)
Packit 6c4009
	lwzu	r11,4(r4)
Packit 6c4009
	srw	r9,r10,r6
Packit 6c4009
	slw	r12,r11,r8
Packit 6c4009
	or	r9,r9,r12
Packit 6c4009
	stwu	r9,4(r7)
Packit 6c4009
	bdnz	L(0)
Packit 6c4009
Packit 6c4009
L(1):	srw	r0,r11,r6
Packit 6c4009
	stw	r0,4(r7)
Packit 6c4009
	blr
Packit 6c4009
Packit 6c4009
L(2):	srw	r0,r10,r6
Packit 6c4009
	stw	r0,4(r7)
Packit 6c4009
	blr
Packit 6c4009
END (__mpn_rshift)