Blame sysdeps/alpha/udiv_qrnnd.S

Packit Service 82fcde
 # Alpha 21064 __udiv_qrnnd
Packit Service 82fcde
Packit Service 82fcde
 # Copyright (C) 1992-2018 Free Software Foundation, Inc.
Packit Service 82fcde
Packit Service 82fcde
 # This file is part of the GNU MP Library.
Packit Service 82fcde
Packit Service 82fcde
 # The GNU MP Library is free software; you can redistribute it and/or modify
Packit Service 82fcde
 # it under the terms of the GNU Lesser General Public License as published by
Packit Service 82fcde
 # the Free Software Foundation; either version 2.1 of the License, or (at your
Packit Service 82fcde
 # option) any later version.
Packit Service 82fcde
Packit Service 82fcde
 # The GNU MP Library is distributed in the hope that it will be useful, but
Packit Service 82fcde
 # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
Packit Service 82fcde
 # or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
Packit Service 82fcde
 # License for more details.
Packit Service 82fcde
Packit Service 82fcde
 # You should have received a copy of the GNU Lesser General Public License
Packit Service 82fcde
 # along with the GNU MP Library.  If not, see <http://www.gnu.org/licenses/>.
Packit Service 82fcde
Packit Service 82fcde
#include <sysdep.h>
Packit Service 82fcde
Packit Service 82fcde
        .set noreorder
Packit Service 82fcde
        .set noat
Packit Service 82fcde
Packit Service 82fcde
	.text
Packit Service 82fcde
Packit Service 82fcde
LEAF(__udiv_qrnnd, 0)
Packit Service 82fcde
#ifdef PROF
Packit Service 82fcde
	ldgp	gp, 0(pv)
Packit Service 82fcde
	lda	AT, _mcount
Packit Service 82fcde
	jsr	AT, (AT), _mcount
Packit Service 82fcde
	.prologue 1
Packit Service 82fcde
#else
Packit Service 82fcde
        .prologue 0
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
#define cnt	$2
Packit Service 82fcde
#define tmp	$3
Packit Service 82fcde
#define rem_ptr	$16
Packit Service 82fcde
#define n1	$17
Packit Service 82fcde
#define n0	$18
Packit Service 82fcde
#define d	$19
Packit Service 82fcde
#define qb	$20
Packit Service 82fcde
Packit Service 82fcde
	ldiq	cnt,16
Packit Service 82fcde
	blt	d,$largedivisor
Packit Service 82fcde
Packit Service 82fcde
$loop1:	cmplt	n0,0,tmp
Packit Service 82fcde
	addq	n1,n1,n1
Packit Service 82fcde
	bis	n1,tmp,n1
Packit Service 82fcde
	addq	n0,n0,n0
Packit Service 82fcde
	cmpule	d,n1,qb
Packit Service 82fcde
	subq	n1,d,tmp
Packit Service 82fcde
	cmovne	qb,tmp,n1
Packit Service 82fcde
	bis	n0,qb,n0
Packit Service 82fcde
	cmplt	n0,0,tmp
Packit Service 82fcde
	addq	n1,n1,n1
Packit Service 82fcde
	bis	n1,tmp,n1
Packit Service 82fcde
	addq	n0,n0,n0
Packit Service 82fcde
	cmpule	d,n1,qb
Packit Service 82fcde
	subq	n1,d,tmp
Packit Service 82fcde
	cmovne	qb,tmp,n1
Packit Service 82fcde
	bis	n0,qb,n0
Packit Service 82fcde
	cmplt	n0,0,tmp
Packit Service 82fcde
	addq	n1,n1,n1
Packit Service 82fcde
	bis	n1,tmp,n1
Packit Service 82fcde
	addq	n0,n0,n0
Packit Service 82fcde
	cmpule	d,n1,qb
Packit Service 82fcde
	subq	n1,d,tmp
Packit Service 82fcde
	cmovne	qb,tmp,n1
Packit Service 82fcde
	bis	n0,qb,n0
Packit Service 82fcde
	cmplt	n0,0,tmp
Packit Service 82fcde
	addq	n1,n1,n1
Packit Service 82fcde
	bis	n1,tmp,n1
Packit Service 82fcde
	addq	n0,n0,n0
Packit Service 82fcde
	cmpule	d,n1,qb
Packit Service 82fcde
	subq	n1,d,tmp
Packit Service 82fcde
	cmovne	qb,tmp,n1
Packit Service 82fcde
	bis	n0,qb,n0
Packit Service 82fcde
	subq	cnt,1,cnt
Packit Service 82fcde
	bgt	cnt,$loop1
Packit Service 82fcde
	stq	n1,0(rem_ptr)
Packit Service 82fcde
	bis	$31,n0,$0
Packit Service 82fcde
	ret	$31,($26),1
Packit Service 82fcde
Packit Service 82fcde
$largedivisor:
Packit Service 82fcde
	and	n0,1,$4
Packit Service 82fcde
Packit Service 82fcde
	srl	n0,1,n0
Packit Service 82fcde
	sll	n1,63,tmp
Packit Service 82fcde
	or	tmp,n0,n0
Packit Service 82fcde
	srl	n1,1,n1
Packit Service 82fcde
Packit Service 82fcde
	and	d,1,$6
Packit Service 82fcde
	srl	d,1,$5
Packit Service 82fcde
	addq	$5,$6,$5
Packit Service 82fcde
Packit Service 82fcde
$loop2:	cmplt	n0,0,tmp
Packit Service 82fcde
	addq	n1,n1,n1
Packit Service 82fcde
	bis	n1,tmp,n1
Packit Service 82fcde
	addq	n0,n0,n0
Packit Service 82fcde
	cmpule	$5,n1,qb
Packit Service 82fcde
	subq	n1,$5,tmp
Packit Service 82fcde
	cmovne	qb,tmp,n1
Packit Service 82fcde
	bis	n0,qb,n0
Packit Service 82fcde
	cmplt	n0,0,tmp
Packit Service 82fcde
	addq	n1,n1,n1
Packit Service 82fcde
	bis	n1,tmp,n1
Packit Service 82fcde
	addq	n0,n0,n0
Packit Service 82fcde
	cmpule	$5,n1,qb
Packit Service 82fcde
	subq	n1,$5,tmp
Packit Service 82fcde
	cmovne	qb,tmp,n1
Packit Service 82fcde
	bis	n0,qb,n0
Packit Service 82fcde
	cmplt	n0,0,tmp
Packit Service 82fcde
	addq	n1,n1,n1
Packit Service 82fcde
	bis	n1,tmp,n1
Packit Service 82fcde
	addq	n0,n0,n0
Packit Service 82fcde
	cmpule	$5,n1,qb
Packit Service 82fcde
	subq	n1,$5,tmp
Packit Service 82fcde
	cmovne	qb,tmp,n1
Packit Service 82fcde
	bis	n0,qb,n0
Packit Service 82fcde
	cmplt	n0,0,tmp
Packit Service 82fcde
	addq	n1,n1,n1
Packit Service 82fcde
	bis	n1,tmp,n1
Packit Service 82fcde
	addq	n0,n0,n0
Packit Service 82fcde
	cmpule	$5,n1,qb
Packit Service 82fcde
	subq	n1,$5,tmp
Packit Service 82fcde
	cmovne	qb,tmp,n1
Packit Service 82fcde
	bis	n0,qb,n0
Packit Service 82fcde
	subq	cnt,1,cnt
Packit Service 82fcde
	bgt	cnt,$loop2
Packit Service 82fcde
Packit Service 82fcde
	addq	n1,n1,n1
Packit Service 82fcde
	addq	$4,n1,n1
Packit Service 82fcde
	bne	$6,$Odd
Packit Service 82fcde
	stq	n1,0(rem_ptr)
Packit Service 82fcde
	bis	$31,n0,$0
Packit Service 82fcde
	ret	$31,($26),1
Packit Service 82fcde
Packit Service 82fcde
$Odd:
Packit Service 82fcde
	/* q' in n0. r' in n1 */
Packit Service 82fcde
	addq	n1,n0,n1
Packit Service 82fcde
Packit Service 82fcde
	cmpult	n1,n0,tmp	# tmp := carry from addq
Packit Service 82fcde
	subq	n1,d,AT
Packit Service 82fcde
	addq	n0,tmp,n0
Packit Service 82fcde
	cmovne	tmp,AT,n1
Packit Service 82fcde
Packit Service 82fcde
	cmpult	n1,d,tmp
Packit Service 82fcde
	addq	n0,1,AT
Packit Service 82fcde
	cmoveq	tmp,AT,n0
Packit Service 82fcde
	subq	n1,d,AT
Packit Service 82fcde
	cmoveq	tmp,AT,n1
Packit Service 82fcde
Packit Service 82fcde
	stq	n1,0(rem_ptr)
Packit Service 82fcde
	bis	$31,n0,$0
Packit Service 82fcde
	ret	$31,($26),1
Packit Service 82fcde
Packit Service 82fcde
	.end	__udiv_qrnnd