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

📄 wgend.s

📁 操作系统SunOS 4.1.3版本的源码
💻 S
字号:
        .data|        .asciz  "@(#)Wgend.s 1.1 92/07/30 Copyr 1986 Sun Micro"        .even        .text|       Copyright (c) 1986 by Sun Microsystems, Inc.#include "fpcrtdefs.h"#include "Wdefs.h"RTENTRY(Wmodd)        moveml	d0/d1,sp@-        fmoved	sp@,fp0        fmodd   a0@,fp0	fmoved	fp0,sp@	moveml	sp@+,d0/d1        RETRTENTRY(Wremd)        moveml	d0/d1,sp@-        fmoved	sp@,fp0        fremd   a0@,fp0	fmoved	fp0,sp@	moveml	sp@+,d0/d1        RETRTENTRY(Wsqrtd)        moveml	d0/d1,sp@-	fmovel	fpcr,d0			| Fetch old mode.	movel	d0,d1			| d1 saves old fp mode.	andb	#0x3f,d0		| Clear rounding precision.	orb	#0x80,d0		| Set double precision.	fmovel	d0,fpcr			| Set new mode.	fsqrtd	sp@,fp0	fmoved	fp0,sp@	fmovel	d1,fpcr			| Restore old mode.	moveml	sp@+,d0/d1        RETRTENTRY(Wlength2d)        moveml	d0/d1,sp@-        fmoved	sp@,fp0        fmulx   fp0,fp0        fmoved  a0@,fp1        fmulx   fp1,fp1        faddx   fp1,fp0        fsqrtx  fp0,fp0	fmoved	fp0,sp@	moveml	sp@+,d0/d1        RETRTENTRY(Waintd)	moveml	d0/d1,sp@-	fintrzd	sp@,fp0	fmoved	fp0,sp@	moveml	sp@+,d0/d1	RET#define PREAINTS \	movel	d0,a0 ; \	andl	#0x7fffffff,d0 ; \	cmpl	threshold,d0 ; \	blts	7f 		/* Branch if possibly nonintegral. */ ; \	cmpl	inf,d0 ; \	jlt	8f 		/* Branch if not NaN. */ ; \	bgt	7f 		/* Branch if NaN. */ ; \	tstl	d1 ; \	jeq	8f 		/* Branch if infinity. */ ; \7: ; \	LOADFPABASE ; \	fpmove@1 fpamode,d0	/* a0 save old fpa mode */ ; \	andl	#0xf,d0		/* Clear garbage bits. */ ; \	exg	a0,d0		/* a0 gets old mode, d0 gets argument. */#define MIDAINTS \	fpmoved@1	threshold,fpa1 ; \	movel		d1,a1@(0xc04) ; \	movel		d0,a1@(0xc00) ; \	bmis	1f ; \	fpaddd@1	fpa1,fpa0 ; \	fpsubd@1	fpa1,fpa0 ; \	movel	a1@(0xc00),d0 ; \	cmpl	#0x80000000,d0 ; \	bnes	2f ; \	clrl	d0 ; \	clrl	d1 ; \	bras	3f ; \1: ; \	fpsubd@1	fpa1,fpa0 ; \	fpaddd@1	fpa1,fpa0 ; \	movel	a1@(0xc00),d0 ; \	bnes	2f ; \	movel	#0x80000000,d0 ; \	clrl	d1 ; \	bras	3f ; \2: ; \	movel	a1@(0xc04),d1 ; \3: ; \	fpmove@1 a0,fpamode	/* restore old fpa mode */#define POSTAINTS \	bras	9f ; \8: ; \	movel	a0,d0 ; \9: ; \	RET#define AINTS(RMODE) \	PREAINTS ; \	fpmove@1	#RMODE,fpamode ; \	MIDAINTS ; \	POSTAINTSthreshold: .double 0r4.503599627370496000E+15half:	.double	0r0.5one:	.double	0r1inf:	.long	0x7ff00000		| Smallest NaN.RTENTRY(Wceild)	AINTS(WRP)RTENTRY(Wfloord)	AINTS(WRM)RTENTRY(Warintd)	PREAINTS	MIDAINTS	POSTAINTSRTENTRY(Wanintd)	PREAINTS	fpmove@1	#WRZ,fpamode	fpmoved@1	threshold,fpa1|	fpmoved@1	d0:d1,fpa0	movel		d1,a1@(0xc04)	movel		d0,a1@(0xc00)	bmis	1f	fpaddd@1	half,fpa0	fpaddd@1	fpa1,fpa0	fpsubd@1	fpa1,fpa0	movel	a1@(0xc00),d0	cmpl	#0x80000000,d0	bnes	2f	clrl	d0	clrl	d1	bras	3f1:	fpsubd@1	half,fpa0	fpsubd@1	fpa1,fpa0	fpaddd@1	fpa1,fpa0	movel	a1@(0xc00),d0	bnes	2f	movel	#0x80000000,d0	clrl	d1	bras	3f2:	movel	a1@(0xc04),d13:	fpmove@1	a0,fpamode	| Restore FPA mode.	POSTAINTS

⌨️ 快捷键说明

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