[BACK]Return to kerPPC.s CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / pari-2.2 / src / kernel / ppc

File: [local] / OpenXM_contrib / pari-2.2 / src / kernel / ppc / Attic / kerPPC.s (download)

Revision 1.1, Tue Oct 2 11:17:09 2001 UTC (22 years, 9 months ago) by noro
Branch: MAIN

Initial revision

; $Id: kerPPC.s,v 1.2 2000/11/03 21:00:26 karim Exp $
; 
; Copyright (C) 2000  The PARI group.
; 
; This file is part of the PARI/GP package.
; 
; PARI/GP is free software; you can redistribute it and/or modify it under the
; terms of the GNU General Public License as published by the Free Software
; Foundation. It is distributed in the hope that it will be useful, but WITHOUT
; ANY WARRANTY WHATSOEVER.
; 
; Check the License for details. You should have received a copy of it, along
; with the package; see the file 'COPYING'. If not, write to the Free Software
; Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */

	import hiremainder,overflow
	
	toc
		tc hiremainder[TC], hiremainder
		tc overflow[TC], overflow
	
	export addll[DS],.addll[PR],addllx[DS],.addllx[PR]
	export subll[DS],.subll[PR],subllx[DS],.subllx[PR]
	export mulll[DS],.mulll[PR],addmul[DS],.addmul[PR]
	export divll[DS],.divll[PR],bfffo[DS],.bfffo[PR]

	toc
		tc addll[TC], addll[DS]
		tc addllx[TC], addllx[DS]
		tc subll[TC], subll[DS]
		tc subllx[TC], subllx[DS]
		tc mulll[TC], mulll[DS]
		tc addmul[TC], addmul[DS]
		tc divll[TC], divll[DS]
		tc bfffo[TC], bfffo[DS]
	
	csect	addll[DS]
		dc.l	.addll[PR]
		dc.l	TOC[tc0]
		dc.l	0
		
	csect	.addll[PR]
		addc	r3,r3,r4
		subfe	r5,r5,r5
		addi	r5,r5,1
		lwz		r6,overflow{TC}(RTOC)
		stw		r5,0x0000(r6)
		blr

	csect	addllx[DS]
		dc.l	.addllx[PR]
		dc.l	TOC[tc0]
		dc.l	0

	csect	.addllx[PR]
		addc	r3,r3,r4
		subfe	r5,r5,r5
		lwz		r6,overflow{TC}(RTOC)
		lwz		r7,0x0000(r6)
		addc	r3,r7,r3
		subfe	r8,r8,r8
		addc	r5,r8,r5
		addi	r5,r5,2
		stw		r5,0x0000(r6)
		blr

	csect	subll[DS]
		dc.l	.subll[PR]
		dc.l	TOC[tc0]
		dc.l	0
		
	csect	.subll[PR]
		subfc	r3,r4,r3
		subfe	r5,r5,r5
		neg		r5,r5
		lwz		r6,overflow{TC}(RTOC)
		stw		r5,0x0000(r6)
		blr

	csect	subllx[DS]
		dc.l	.subllx[PR]
		dc.l	TOC[tc0]
		dc.l	0

	csect	.subllx[PR]
		subfc	r3,r4,r3
		subfe	r5,r5,r5
		lwz		r6,overflow{TC}(RTOC)
		lwz		r7,0x0000(r6)
		subfc	r3,r7,r3
		subfe	r8,r8,r8
		addc	r5,r8,r5
		neg		r5,r5
		stw		r5,0x0000(r6)
		blr

	csect	mulll[DS]
		dc.l	.mulll[PR]
		dc.l	TOC[tc0]
		dc.l	0
		
	csect	.mulll[PR]
	
; version PowerPC, plus lente
;		mulhwu	r5,r3,r4
;		lwz		r6,hiremainder{TC}(RTOC)
;		stw		r5,0x0000(r6)
;		mullw	r3,r3,r4
;		blr
; version POWER
		lwz		r6,hiremainder{TC}(RTOC)
		dialect	POWER
		mul		r5,r3,r4
		dialect	POWERPC
		cmpwi	r3,0
		bge		@1
		add		r5,r5,r4
@1		cmpwi	r4,0
		bge		@2
		add		r5,r5,r3
@2		stw		r5,0x0000(r6)
		mfspr	r3,mq
		blr

	csect	addmul[DS]
		dc.l	.addmul[PR]
		dc.l	TOC[tc0]
		dc.l	0
		
	csect	.addmul[PR]
; version PowerPC, plus lente
;		mulhwu	r5,r3,r4
;		mullw	r3,r3,r4
;		lwz		r6,hiremainder{TC}(RTOC)
;		lwz		r7,0x0000(r6)
;		addc	r3,r7,r3
;		addze	r5,r5
;		stw		r5,0x0000(r6)
;		blr
; version POWER
		lwz		r6,hiremainder{TC}(RTOC)
		dialect	POWER
		mul		r5,r3,r4
		dialect	POWERPC
		cmpwi	r3,0
		bge		@1
		add		r5,r5,r4
@1		cmpwi	r4,0
		bge		@2
		add		r5,r5,r3
@2		lwz		r7,0x0000(r6)
		mfspr	r3,mq
		addc	r3,r7,r3
		addze	r5,r5
		stw		r5,0x0000(r6)
		blr

	csect	divll[DS]
		dc.l	.divll[PR]
		dc.l	TOC[tc0]
		dc.l	0
		
	csect	.divll[PR]
	
; version POWER
; chargement de a puis a1 dans r5, b puis b1 dans r3 et c puis c1 dans r4
		lwz		r6,hiremainder{TC}(RTOC)
		lwz		r5,0x0000(r6)

; etape 1, f est code dans cr5, eb dans r7 et ec dans cr6
; si f = 1, on garde une copie de c dans r10
		cmpwi	5,r4,0
		bge		5,@1
		andi.	r7,r4,1
		mcrf	6,0
		mr		r10,r4
		srwi	r4,r4,1
		andi.	r7,r3,1
		srwi	r3,r3,1
		rlwimi	r3,r5,31,0,0
		srwi	r5,r5,1

; modif
		cmplw	r5,r4
		bne		@1
		slwi	r3,r3,1
		add		r3,r3,r7
		addc	r4,r3,r10
		subfe.	r5,r5,r5
		li		r3,-1
		beq		@5
		subi	r3,r3,1
		add		r4,r10,r4
		b		@5
		
; etape 2 r3 recoit q et mq recoit r
@1		add		r8,r5,r5
		addi	r8,r8,1
		cmplw	r4,r8
		bgt		@2
		bne		@3
		cmpwi	r3,0
		bge		@2
@3		slwi	r9,r4,31
		srwi	r8,r4,1
		subfc	r3,r9,r3
		subfe	r5,r8,r5
		mtspr	mq,r3
		dialect	POWER
		div		r3,r5,r4
		dialect	POWERPC
		mfspr	r4,mq
		oris	r3,r3,0x8000
		b		@4
@2		mtspr	mq,r3
		dialect	POWER
		div		r3,r5,r4
		dialect	POWERPC
		mfspr	r4,mq

; etape 3 r4 recoit r
@4		bge		5,@5
		slwi	r4,r4,1
		add		r4,r4,r7
		beq		6,@5

; etape 4 modifiee
		subfc	r4,r3,r4
		subfe.	r5,r5,r5
		beq		@5
		subi	r3,r3,1
		addc	r4,r4,r10
		subfe.	r5,r5,r5
		beq		@5
		subi	r3,r3,1
		addc	r4,r4,r10

; retour
@5		stw		r4,0x0000(r6)
		blr
		
	csect	bfffo[DS]
		dc.l	.bfffo[PR]
		dc.l	TOC[tc0]
		dc.l	0
		
	csect	.bfffo[PR]
		cntlzw	r3,r3
		blr