[BACK]Return to level0.S CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / pari / src / kernel / sparcv7

File: [local] / OpenXM_contrib / pari / src / kernel / sparcv7 / Attic / level0.S (download)

Revision 1.1.1.1 (vendor branch), Sun Jan 9 17:35:33 2000 UTC (24 years, 5 months ago) by maekawa
Branch: PARI_GP
CVS Tags: maekawa-ipv6, VERSION_2_0_17_BETA, RELEASE_20000124, RELEASE_1_2_3, RELEASE_1_2_2_KNOPPIX_b, RELEASE_1_2_2_KNOPPIX, RELEASE_1_2_2, RELEASE_1_2_1, RELEASE_1_1_3, RELEASE_1_1_2
Changes since 1.1: +0 -0 lines

Import PARI/GP 2.0.17 beta.

/* $Id: level0.S,v 1.1.1.1 1999/09/16 13:47:58 karim Exp $ */
#if defined(NO_UNDERSCORE) || defined(linux)
#  define C(entrypoint) entrypoint
#elif defined(sun) || defined(NeXT)
#  ifdef __STDC__
#    define C(entrypoint) _##entrypoint
#  else
#    define C(entrypoint) _/**/entrypoint
#  endif
#endif
#if defined(sun) || defined(linux)
#  define GLOBL .global
#elif defined(NeXT)
#  define GLOBL .globl
#endif

#if   defined(sun) || defined(linux)
        .seg "text"
#elif defined(NeXT)
.text
        .align 2
#endif
        GLOBL C(addll),C(subll),C(addllx),C(subllx),C(shiftl),C(shiftlr),C(bfffo)
        GLOBL C(mulll),C(overflow),C(hiremainder),C(addmul),C(divll)

C(addll): sethi   %hi(C(overflow)),%o3
        addcc   %o0,%o1,%o0
        addx    %g0,%g0,%o2
        retl
        st      %o2,[%o3+%lo(C(overflow))]
C(subll): sethi   %hi(C(overflow)),%o3
        subcc   %o0,%o1,%o0
        addx    %g0,%g0,%o2
        retl
        st      %o2,[%o3+%lo(C(overflow))]
C(addllx): sethi  %hi(C(overflow)),%o3
        ld      [%o3+%lo(C(overflow))],%o2
        subcc   %g0,%o2,%g0
        addxcc  %o0,%o1,%o0
        addx    %g0,%g0,%o2
        retl
        st      %o2,[%o3+%lo(C(overflow))]
C(subllx): sethi  %hi(C(overflow)),%o3
        ld      [%o3+%lo(C(overflow))],%o2
        subcc   %g0,%o2,%g0
        subxcc  %o0,%o1,%o0
        addx    %g0,%g0,%o2
        retl
        st      %o2,[%o3+%lo(C(overflow))]
C(shiftl): sethi  %hi(C(hiremainder)),%o3
        neg     %o1,%o4
        srl     %o0,%o4,%o2
        st      %o2,[%o3+%lo(C(hiremainder))]
        retl
        sll     %o0,%o1,%o0
C(shiftlr): sethi %hi(C(hiremainder)),%o3
        neg     %o1,%o4
        sll     %o0,%o4,%o2
        st      %o2,[%o3+%lo(C(hiremainder))]
        retl
        srl     %o0,%o1,%o0
C(bfffo): sethi   %hi(0xffff0000),%o1
        andcc   %o1,%o0,%g0
        bnz,a   1f
        clr     %o2
        sll     %o0,16,%o0
        mov     16,%o2
1:      sethi   %hi(0xff000000),%o1
        andcc   %o1,%o0,%g0
        bnz     2f
        sethi   %hi(0xf0000000),%o1
        sll     %o0,8,%o0
        add     %o2,8,%o2
2:      andcc   %o1,%o0,%g0
        bnz,a   3f
        srl     %o0,28,%o0
        add     %o2,4,%o2
        srl     %o0,24,%o0
3:      set     C(tabshi),%o3
	sll	%o0,2,%o0
        ld      [%o3+%o0],%o1
        retl
        add     %o2,%o1,%o0
C(mulll): sethi   %hi(C(hiremainder)),%o3
        or      %o0,%o1,%o4
        mov     %o0,%y
        andncc  %o4,0xfff,%g0
        be      2f
        andcc   %g0,%g0,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%g0,%o4
        tst     %o1
        bl,a    1f
        add     %o4,%o0,%o4
1:      st      %o4,[%o3+%lo(C(hiremainder))]
        retl
        rd      %y,%o0
2:      clr     [%o3+%lo(C(hiremainder))]
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%g0,%o4
        rd      %y,%o5
        sll     %o4,12,%o4
        srl     %o5,20,%o5
        retl
        or      %o5,%o4,%o0

C(addmul): sethi  %hi(C(hiremainder)),%o3
	ld	[%o3+%lo(C(hiremainder))],%o2
        or      %o0,%o1,%o4
        mov     %o0,%y
        andncc  %o4,0xfff,%g0
        be      2f
        andcc   %g0,%g0,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%g0,%o4
        tst     %o1
        bl,a    1f
        add     %o4,%o0,%o4
1:	rd	%y,%o0
        addcc   %o0,%o2,%o0
        addx    %g0,%o4,%o4
        retl
	st      %o4,[%o3+%lo(C(hiremainder))]
2:      mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%o1,%o4
        mulscc  %o4,%g0,%o4
        rd      %y,%o5
        sll     %o4,12,%o4
        srl     %o5,20,%o5
        or      %o5,%o4,%o0
        addcc   %o0,%o2,%o0
        addx    %g0,%g0,%o4
	retl
	st      %o4,[%o3+%lo(C(hiremainder))]

#define	SS0(label) \
	addx	%o2,%o2,%o2;\
	subcc	%o2,%o1,%o3;\
	bcc	label;\
	addxcc	%o0,%o0,%o0

#define	SS1(label) \
	addx	%o3,%o3,%o3;\
	subcc	%o3,%o1,%o2;\
	bcc	label;\
	addxcc	%o0,%o0,%o0

C(divll): sethi  %hi(C(hiremainder)),%o4
	ld	[%o4+%lo(C(hiremainder))],%o2
	subcc	%o2,%o1,%g0
	blu	1f
	addcc	%o1,%o1,%g0
	mov	0x2f,%o0
	call	C(err),1
	nop
1:	bcc	Lsmalldiv
	andcc	%o1,1,%g0
	be	Levendiv
	srl	%o1,1,%o1
	add	%o1,1,%o1
	subcc	%o2,%o1,%o3
	bcc	Lb01
	addxcc	%o0,%o0,%o0
La01:	SS0(Lb02)
La02:	SS0(Lb03)
La03:	SS0(Lb04)
La04:	SS0(Lb05)
La05:	SS0(Lb06)
La06:	SS0(Lb07)
La07:	SS0(Lb08)
La08:	SS0(Lb09)
La09:	SS0(Lb10)
La10:	SS0(Lb11)
La11:	SS0(Lb12)
La12:	SS0(Lb13)
La13:	SS0(Lb14)
La14:	SS0(Lb15)
La15:	SS0(Lb16)
La16:	SS0(Lb17)
La17:	SS0(Lb18)
La18:	SS0(Lb19)
La19:	SS0(Lb20)
La20:	SS0(Lb21)
La21:	SS0(Lb22)
La22:	SS0(Lb23)
La23:	SS0(Lb24)
La24:	SS0(Lb25)
La25:	SS0(Lb26)
La26:	SS0(Lb27)
La27:	SS0(Lb28)
La28:	SS0(Lb29)
La29:	SS0(Lb30)
La30:	SS0(Lb31)
La31:	SS0(Lb32)
La32:	addx	%o2,%o2,%o2
	xor	%o0,-1,%o0
	add	%o1,%o1,%o1
	sub	%o1,1,%o1
	addcc	%o0,%o2,%o2
	bcc	1f
	subcc	%o2,%o1,%o3
	subcc	%o3,%o1,%o2
	bcs	2f
	add	%o0,1,%o0
	add	%o0,1,%o0
3:	retl
	st	%o2,[%o4+%lo(C(hiremainder))]
1:	bcs	3b
	nop
	add	%o0,1,%o0
2:	retl
	st	%o3,[%o4+%lo(C(hiremainder))]

Lb01:	SS1(La02)
Lb02:	SS1(La03)
Lb03:	SS1(La04)
Lb04:	SS1(La05)
Lb05:	SS1(La06)
Lb06:	SS1(La07)
Lb07:	SS1(La08)
Lb08:	SS1(La09)
Lb09:	SS1(La10)
Lb10:	SS1(La11)
Lb11:	SS1(La12)
Lb12:	SS1(La13)
Lb13:	SS1(La14)
Lb14:	SS1(La15)
Lb15:	SS1(La16)
Lb16:	SS1(La17)
Lb17:	SS1(La18)
Lb18:	SS1(La19)
Lb19:	SS1(La20)
Lb20:	SS1(La21)
Lb21:	SS1(La22)
Lb22:	SS1(La23)
Lb23:	SS1(La24)
Lb24:	SS1(La25)
Lb25:	SS1(La26)
Lb26:	SS1(La27)
Lb27:	SS1(La28)
Lb28:	SS1(La29)
Lb29:	SS1(La30)
Lb30:	SS1(La31)
Lb31:	SS1(La32)
Lb32:	addx	%o3,%o3,%o2
	xor	%o0,-1,%o0
	add	%o1,%o1,%o1
	sub	%o1,1,%o1
	addcc	%o0,%o2,%o2
	bcc	1f
	subcc	%o2,%o1,%o3
	subcc	%o3,%o1,%o2
	bcs	2f
	add	%o0,1,%o0
	add	%o0,1,%o0
3:	retl
	st	%o2,[%o4+%lo(C(hiremainder))]
1:	bcs	3b
	nop
	add	%o0,1,%o0
2:	retl
	st	%o3,[%o4+%lo(C(hiremainder))]

Lsmalldiv:
	addcc	%o0,%o0,%o0
Lc00:	SS0(Ld01)
Lc01:	SS0(Ld02)
Lc02:	SS0(Ld03)
Lc03:	SS0(Ld04)
Lc04:	SS0(Ld05)
Lc05:	SS0(Ld06)
Lc06:	SS0(Ld07)
Lc07:	SS0(Ld08)
Lc08:	SS0(Ld09)
Lc09:	SS0(Ld10)
Lc10:	SS0(Ld11)
Lc11:	SS0(Ld12)
Lc12:	SS0(Ld13)
Lc13:	SS0(Ld14)
Lc14:	SS0(Ld15)
Lc15:	SS0(Ld16)
Lc16:	SS0(Ld17)
Lc17:	SS0(Ld18)
Lc18:	SS0(Ld19)
Lc19:	SS0(Ld20)
Lc20:	SS0(Ld21)
Lc21:	SS0(Ld22)
Lc22:	SS0(Ld23)
Lc23:	SS0(Ld24)
Lc24:	SS0(Ld25)
Lc25:	SS0(Ld26)
Lc26:	SS0(Ld27)
Lc27:	SS0(Ld28)
Lc28:	SS0(Ld29)
Lc29:	SS0(Ld30)
Lc30:	SS0(Ld31)
Lc31:	SS0(Ld32)
Lc32:	xor	%o0,-1,%o0
	retl
	st	%o2,[%o4+%lo(C(hiremainder))]

Ld01:	SS1(Lc02)
Ld02:	SS1(Lc03)
Ld03:	SS1(Lc04)
Ld04:	SS1(Lc05)
Ld05:	SS1(Lc06)
Ld06:	SS1(Lc07)
Ld07:	SS1(Lc08)
Ld08:	SS1(Lc09)
Ld09:	SS1(Lc10)
Ld10:	SS1(Lc11)
Ld11:	SS1(Lc12)
Ld12:	SS1(Lc13)
Ld13:	SS1(Lc14)
Ld14:	SS1(Lc15)
Ld15:	SS1(Lc16)
Ld16:	SS1(Lc17)
Ld17:	SS1(Lc18)
Ld18:	SS1(Lc19)
Ld19:	SS1(Lc20)
Ld20:	SS1(Lc21)
Ld21:	SS1(Lc22)
Ld22:	SS1(Lc23)
Ld23:	SS1(Lc24)
Ld24:	SS1(Lc25)
Ld25:	SS1(Lc26)
Ld26:	SS1(Lc27)
Ld27:	SS1(Lc28)
Ld28:	SS1(Lc29)
Ld29:	SS1(Lc30)
Ld30:	SS1(Lc31)
Ld31:	SS1(Lc32)
Ld32:	xor	%o0,-1,%o0
	retl
	st	%o3,[%o4+%lo(C(hiremainder))]


Levendiv:
	subcc	%o2,%o1,%o3
	bcc	Lf01
	addxcc	%o0,%o0,%o0
Le01:	SS0(Lf02)
Le02:	SS0(Lf03)
Le03:	SS0(Lf04)
Le04:	SS0(Lf05)
Le05:	SS0(Lf06)
Le06:	SS0(Lf07)
Le07:	SS0(Lf08)
Le08:	SS0(Lf09)
Le09:	SS0(Lf10)
Le10:	SS0(Lf11)
Le11:	SS0(Lf12)
Le12:	SS0(Lf13)
Le13:	SS0(Lf14)
Le14:	SS0(Lf15)
Le15:	SS0(Lf16)
Le16:	SS0(Lf17)
Le17:	SS0(Lf18)
Le18:	SS0(Lf19)
Le19:	SS0(Lf20)
Le20:	SS0(Lf21)
Le21:	SS0(Lf22)
Le22:	SS0(Lf23)
Le23:	SS0(Lf24)
Le24:	SS0(Lf25)
Le25:	SS0(Lf26)
Le26:	SS0(Lf27)
Le27:	SS0(Lf28)
Le28:	SS0(Lf29)
Le29:	SS0(Lf30)
Le30:	SS0(Lf31)
Le31:	SS0(Lf32)
Le32:	addx	%o2,%o2,%o2
	xor	%o0,-1,%o0
	retl
	st	%o2,[%o4+%lo(C(hiremainder))]

Lf01:	SS1(Le02)
Lf02:	SS1(Le03)
Lf03:	SS1(Le04)
Lf04:	SS1(Le05)
Lf05:	SS1(Le06)
Lf06:	SS1(Le07)
Lf07:	SS1(Le08)
Lf08:	SS1(Le09)
Lf09:	SS1(Le10)
Lf10:	SS1(Le11)
Lf11:	SS1(Le12)
Lf12:	SS1(Le13)
Lf13:	SS1(Le14)
Lf14:	SS1(Le15)
Lf15:	SS1(Le16)
Lf16:	SS1(Le17)
Lf17:	SS1(Le18)
Lf18:	SS1(Le19)
Lf19:	SS1(Le20)
Lf20:	SS1(Le21)
Lf21:	SS1(Le22)
Lf22:	SS1(Le23)
Lf23:	SS1(Le24)
Lf24:	SS1(Le25)
Lf25:	SS1(Le26)
Lf26:	SS1(Le27)
Lf27:	SS1(Le28)
Lf28:	SS1(Le29)
Lf29:	SS1(Le30)
Lf30:	SS1(Le31)
Lf31:	SS1(Le32)
Lf32:	addx	%o3,%o3,%o3
	xor	%o0,-1,%o0
	retl
	st	%o3,[%o4+%lo(C(hiremainder))]

        .seg    "data"
        .align  4
C(tabshi): .word  4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0

	.seg    "bss"
	.align  4
C(hiremainder): .skip  4
C(overflow): .skip  4