File:  [DVB] / dietlibc / alpha / divl.S
Revision 1.1: download - view: text, annotated - select for diffs
Thu Mar 8 14:58:41 2001 UTC (23 years, 3 months ago) by olaf
Branches: MAIN
CVS tags: finnland_test_200301, branch_rc14_fieldtest_finnland, branch_rc13_fieldtest_finnland, branch_rc12_fieldtest_finnland, branch_rc10_fieldtest_finnland, RELEASE_finnland_200301_1, RC12_FIELDTEST_FINNLAND, RC10_FIELDTEST_FINNLAND, HEAD
added missing alpha functions for devision and remainder

/* taken from glibc 2.2 */

	.set noreorder
	.set noat

	.ent __divlu
	.globl __divlu

	.align 3
__divlu :
	lda	$30 , - 48 ($30 )
	.frame	$30 , 48 , $23  , 0
	.prologue 0
.Ludiv:
	stq	$1 , 0($30 )
	zapnot  $25   ,15,  $1
	stq	$2 , 8($30 )
	zapnot  $24   ,15,  $2
	stq	$0 , 16($30 )
	clr	$27
	stq	$3  , 24($30 )
	ldiq	$0  , 1
	 stq $4   ,32($30 )
	beq	$1  , .Ldivbyzero

	.align 3


1:	cmpult	$1  , $2  , $at
	s8addq	$1  , $31 , $1
	s8addq	$0  , $31 , $0
	bne	$at  , 1b



3:	 addq $27    ,$0  , $4
	srl	$0  , 1, $0
	cmpule	$1  , $2  , $at
	subq	$2  , $1  , $3
	 cmovne $at   ,$4  , $27
	srl	$1  , 1, $1
	cmovne	$at  , $3  , $2
	bne	$0  , 3b

.Ldone:	ldq	$1 , 0($30 )
	ldq	$2 , 8($30 )
	ldq	$0 , 16($30 )
	ldq	$3  , 24($30 )
	 ldq $4   ,32($30 )
	lda	$30 , 48 ($30 )
	ret	$31 , ($23  ), 1

.Ldivbyzero:
	mov	$16 , $3
	ldiq	$16 , -2
	call_pal 170
	mov	$3  , $16
	clr	$27
	br	.Ldone

	.end __divlu

	.ent __divl
	.globl __divl

	.align 3
__divl :
	lda	$30 , - 48 ($30 )
	.frame	$30 , 48 , $23  , 0
	.prologue 0
	or	$24  , $25  , $at
	sextl  $at  , $at
	bge	$at , .Ludiv


	stq	$24  , 0($30 )
	negl  $24   ,  $at
	stq	$25  , 8($30 )
	cmovge	$at , $at , $24
	stq	$23  , 16($30 )
	negl  $25   ,  $at
	stq	$3  , 24($30 )
	cmovge	$at , $at , $25


	bsr	$23  , __divlu


	ldq	$24  , 0($30 )
	ldq	$25  , 8($30 )
	xor $24  , $25  ,  $at
	negl  $27   ,  $3
	sextl  $at  , $at
	ldq	$23  , 16($30 )
	cmovlt	$at , $3  , $27
	ldq	$3  , 24($30 )

	lda	$30 , 48 ($30 )
	ret	$31 , ($23  ), 1

	.end	__divl

LinuxTV legacy CVS <linuxtv.org/cvs>