⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 idigitdiv.s

📁 Arithmetic for integers of almost unlimited size for C and C++. Developed and copyrighted by Ra
💻 S
字号:
! Modified by Ralf Dentzer, Heidelberg, 11.2.93 to use it as DigitDiv! Modified by Ralf Dentzer, Heidelberg, 4.8.92 to use it as PLACEdiv! DigitType  DigitDiv (quot, h, l, d)! 	DigitType *quot, h, l, d;! 	/* Suppose:	d>0 and h<d! 	   *quot=QUOT;! 	   return REM;! 	   where QUOT, REM are defined by: ! 	   h*2^BitsPerDigit + l == d*QUOT + REM,! 	   2^BitsPerDigit > REM >= 0! 	*/! substitute:!	(o0, o1, o2, o3) by (o1, o2, o3, o0)!! changes at the end:!	e -> [%o4]!	d -> %o0! Now the original.! This division routine is the result of the joint effort of Henri Cohen! (Talence) and Dik Winter (Amsterdam). Note that if you are interested! only in 63 bit/ 31 bit division, a lot of the code can be suppressed! (keep only the Lsmalldiv part). In any case the result gives a 32 bit! quotient and remainder.! It is not difficult to modify the code so as to obey a different! C-calling sequence than the one given below.!!	routine to compute (a*2^32 + b) mod c (d)!			   (a*2^32 + b) / c (e)!	Note: a < c!!	Assemble with:	as -o longdiv.o -P longdiv.s!	or some such; note the -P flag to invoke the c preprocessor.!!	C call sequence:!	longdiv(a,b,c,d,e) int a,b,c,*d,*e;!!	a, b and c are assumed to be in %o1, %o2 and %o3 resp.!	the addresses of d and e are assumed to be in %o0 and %o4.!	this routine uses %o1,%o2,%o3,%o0,%o4 and %o5!!	The macros below define the addition steps and subtraction steps!	performed.#include <config.h>#define	SS0(label) \	addx	%o1,%o1,%o1; \	subcc	%o1,%o3,%o5; \	bcc	label; \	addxcc	%o2,%o2,%o2#define	SS1(label) \	addx	%o5,%o5,%o5; \	subcc	%o5,%o3,%o1; \	bcc	label; \	addxcc	%o2,%o2,%o2	.globl DigitDivDigitDiv:	mov	%o0,%o4	addcc	%o3,%o3,%g0	bcc	Lsmalldiv	andcc	%o3,1,%g0	be	Levendiv	srl	%o3,1,%o3	add	%o3,1,%o3	subcc	%o1,%o3,%o5	bcc	Lb01	addxcc	%o2,%o2,%o2La01:	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	%o1,%o1,%o1Lcommon:	xor	%o2,-1,%o2	add	%o3,%o3,%o3	sub	%o3,1,%o3	addcc	%o2,%o1,%o0	bcc	1f	subcc	%o0,%o3,%o5	subcc	%o5,%o3,%o0	bcs	2f	add	%o2,1,%o2	add	%o2,1,%o23:	retl	st	%o2,[%o4]1:	bcs	3b	nop	add	%o2,1,%o22:	mov	%o5, %o0	retl	st	%o2,[%o4]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:	ba	Lcommon	addx	%o5,%o5,%o1Lsmalldiv:	addcc	%o2,%o2,%o2Lc00:	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	%o2,-1,%o2	mov	%o1, %o0	retl	st	%o2,[%o4]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	%o2,-1,%o2	mov	%o5, %o0	retl	st	%o2,[%o4]Levendiv:	subcc	%o1,%o3,%o5	bcc	Lf01	addxcc	%o2,%o2,%o2Le01:	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	%o1,%o1,%o0	xor	%o2,-1,%o2	retl	st	%o2,[%o4]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	%o5,%o5,%o5	xor	%o2,-1,%o2	mov	%o5,%o0	retl	st	%o2,[%o4]

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -