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

📄 dexp.u

📁 操作系统SunOS 4.1.3版本的源码
💻 U
📖 第 1 页 / 共 2 页
字号:
	;			dnop tioe timsw halt;		titoreg;	rcsmsw ptr5;	z.inrange:|* First, check to see whether K<-1021.  If not, then UNDERFLOW.|* Load K in RA, -1021 in RB and Integer compare:	;			;				;		ptr5;		ptr5!c_sim1021	;			i2cmp enrb halt;		regtoti;	rcssp ptr5;	;			dnop;				;		ptr5;		ptr5!0x700+0xDD	;			i2cmp enra halt;		regtoti;	rcssp ptr5;	;			;				;		ptr5;		ptr5!0x700+0xDC	jlt bail.under;		dnop enra enrb loaddp halt;	regtoti;	rcsmsw ptr5;|* compute t = z*z and store in C register:	;			dmul enra enrb loaddp halt;	regtoti;	rcslsw ptr5;	;			dmul;				;		;	;			dnop srccmul clkcc;		;		ptr5;	ptr5!c_dp5	;			dnop enrb loaddp halt;		regtoti;	rcsmsw ptr5;	;			dmul mulacreg enrb loaddp halt;	regtoti;	rcslsw ptr5;	;			dmul mulacreg;			;		ptr5;	ptr5!c_dp4	;			dnop enrb loaddp halt;		regtoti;	rcsmsw ptr5;	;			dadd aluamul enrb loaddp halt;	regtoti;	rcslsw ptr5;	;			dmul mulaalu mulbcreg;		;		;	;			dmul mulaalu mulbcreg;		;		ptr5;	ptr5!c_dp3	;			dnop enrb loaddp halt;		regtoti;	rcsmsw ptr5;	;			dadd aluamul enrb loaddp halt;	regtoti;	rcslsw ptr5;	;			dmul mulaalu mulbcreg;		;		;	;			dmul mulaalu mulbcreg;		;		ptr5;	ptr5!c_dp2	;			dnop enrb loaddp halt;		regtoti;	rcsmsw ptr5;	;			dadd aluamul enrb loaddp halt;	regtoti;	rcslsw ptr5;	;			dmul mulaalu mulbcreg;		;		;	;			dmul mulaalu mulbcreg;		;		ptr5;	ptr5!c_dp1	;			dnop enrb loaddp halt;		regtoti;	rcsmsw ptr5;	;			dadd aluamul enrb loaddp halt;	regtoti;	rcslsw ptr5;	;			dmul mulaalu mulbcreg;		;		;	;			dmul mulaalu mulbcreg;		;		ptr5;	ptr5!0x700+0xDC	;			dnop enrb loaddp halt;		regtoti;	rcsmsw ptr5;	;			drsub aluamul enrb loaddp halt;	regtoti;	rcslsw ptr5;	;			dnop;				;		ptr5;	ptr5!0x700+0xDE	;			dnop srccalu clkcc tioe timsw halt;titoreg;	rcsmsw ptr5;	;			dnop tioe tilsw halt;		titoreg;	rcslsw ptr5;| Check to see if k = 0	;			dnop;				;		ptr5;	ptr5!c_sizero	;			i2cmp enrb halt;		regtoti;	rcssp ptr5;	;			;				;		ptr5;	ptr5!0x700+0xDD	;			i2cmp enra halt;		regtoti;	rcssp ptr5;	;			;				;		ptr5;	ptr5!dtwo	jne result.zero;	dnop enra loaddp halt;		regtoti;	rcsmsw ptr5;| If zero, compute one - ((z*c)/(c-2.0)-z);   c in C register as well as in DE	;			drsub alubcreg enra loaddp halt;regtoti;	rcslsw ptr5;	;			dnop;				;		;	;			dnop tioe timsw halt;		titotmp;	rcsmsw;	;			dnop tioe tilsw halt;		titotmp;	rcslsw;	;			dnop;				;		ptr5;	ptr5!0x700+0xDC	;			dnop enrb loaddp halt;		regtoti;	rcsmsw ptr5;	;			dmul mulacreg enrb loaddp halt;	regtoti;	rcslsw ptr5;	;			dmul mulacreg;			;		;	;			dnop;				;		;	;			dnop enra tioe timsw loaddp halt;;		;	;			dnop enra tioe tilsw loaddp halt;;		;	;			ddiv enrb loaddp halt;		tmptoti;	rcsmsw;	;			ddiv enrb loaddp halt;		tmptoti;	rcslsw;			;			dnop;				;		;	;			dnop halt;			;		;	;			dnop;				;		;	;			dnop;				;		;	;			dnop;				;		;	;			dmul;				;		;	;			dmul halt;			;		;	;			dmul tioe timsw halt;		titotmp;	rcsmsw;	;			dmul tioe tilsw halt;		titotmp;	rcslsw;	;			dnop halt;			;		ptr5;	ptr5!0x700+0xDC	;			dnop enrb loaddp halt;		regtoti;	rcsmsw ptr5;	;			dnop enrb loaddp halt;		regtoti;	rcslsw ptr5;	;			dnop;				;		;	;			dnop enra loaddp halt;		tmptoti;	rcsmsw;	;			dsub enra loaddp halt;		tmptoti;	rcslsw;	;			dsub;				;		ptr5;	ptr5!done	;			dnop enra loaddp halt;		regtoti;	rcsmsw ptr5;	;			dsub alubalu enra loaddp halt;	regtoti;	rcslsw ptr5;	;			dnop;				;		ptr1;	;			dnop tioe tilsw halt;		titoreg;	rcslsw ptr1;	call idle1;		dnop tioe timsw halt;		titoreg;	rcsmsw ptr1;result.zero:|* compute y = one -((lo-(z*c)/(2.0-c))-hi).  z in RB, c in C.  Ptr 5 with dtwo.	;			dsub alubcreg;			;		;	;			dnop;				;		;	;			dnop tioe timsw halt;		titotmp;	rcsmsw;	;			dnop tioe tilsw halt;		titotmp;	rcslsw;	;			dnop;				;		ptr5;	ptr5!0x700+0xDC	;			dnop enrb loaddp halt;		regtoti;	rcsmsw ptr5;	;			dmul mulacreg enrb loaddp halt;	regtoti;	rcslsw ptr5;	;			dmul mulacreg;			;		;	;			dnop;				;		;	;			dnop enra tioe timsw loaddp halt;;		;	;			dnop enra tioe tilsw loaddp halt;;		;	;			ddiv enrb loaddp halt;		tmptoti;	rcsmsw;	;			ddiv enrb loaddp halt;		tmptoti;	rcslsw;			;			dnop;				;		;	;			dnop halt;			;		;	;			dnop;				;		;	;			dnop;				;		;	;			dnop;				;		;	;			dmul;				;		;	;			dmul halt;			;		;	;			dmul tioe timsw halt;		titotmp;	rcsmsw;	;			dmul tioe tilsw halt;		titotmp;	rcslsw;	;			dnop halt;			;		ptr5;	ptr5!0x700+0xDB	;			dnop enra loaddp halt;		regtoti;	rcsmsw ptr5;	;			dnop enra loaddp halt;		regtoti;	rcslsw ptr5;	;			dnop;				;		;	;			dnop enrb loaddp halt;		tmptoti;	rcsmsw;	;			dsub enrb loaddp halt;		tmptoti;	rcslsw;	;			dnop;				;		ptr5;	ptr5!0x700+0xDA	;			dnop enra srccalu clkcc loaddp halt;regtoti;	rcsmsw ptr5;	;			drsub alubcreg enra loaddp halt;regtoti;	rcslsw ptr5;	;			drsub alubcreg;			;		ptr5;	ptr5!done	;			dnop enra loaddp halt;		regtoti;	rcsmsw ptr5;	;			dsub alubalu enra loaddp halt;	regtoti;	rcslsw ptr5;	;			dnop;				;		ptr1;	;			dnop tioe tilsw halt;		titoreg;	rcslsw ptr1;	call scalbn;		dnop tioe timsw halt;		titoreg;	rcsmsw ptr1;|* Do scalbn(y,k)  Add k to the exponent of y.  Y is in ptr2 register.  K is in SCRATCH_13	pipe idl1;		snop halt;			;		imm2;scalbn:|* Y (DP) in ptr2|* K (integer) in SCRATCH_13, 0x700+0xDD	;			;				;		ptr5;		ptr5!0x700+0xDD	;			i2cmp enra halt;		regtoti;	rcssp ptr5;	;			;				;		ptr5;		ptr5!c_sitwo20       	;			imul enrb halt;			regtoti;	rcssp ptr5;	;			;				;		;	;			i2cmp enra tioe tisp halt;	;		;	;			i2add enrb halt;		regtoti;	rcsmsw ptr1;	;			;				;		ptr1;	rtn;			tioe tisp halt;			titoreg;	rcsmsw ptr1;dnotfinx:|* In order to check for infinity or NAN, we need to look at msw[abs(x)] ANDed with 0x7FF00000,|* which is the msw(infinity) and then compare with msw(infinity).  If it's equal, then we have|* NAN or infinity.|* Get msw[abs(x)] and store it in RA.  This is done by routing the output to the input.	;			dabs tioe timsw;		;		;	;			i2cmp enra srccalu clkcc tioe timsw halt;;	;	;			;				;		ptr5;	ptr5!dinf	;			i2land enrb loadsp halt;	regtoti;	ptr5;	;			tioe tisp;			;		;|* Unload MASKED msw[abs(x)] and store in RA, compare with lsw(infinity), already in RB.	;			i2cmp enra tioe tisp loadsp halt;;		;	;			;				;		ptr5;	ptr5!c_dln2_2	jeq absx.in;		dnop enrb loaddp halt;		regtoti;	rcsmsw ptr5;	;			dcmp aluacreg enrb loaddp halt;	regtoti;	rcslsw ptr5;	rtn;			dnop;				;		ptr5;	ptr5!c_dln2_onehalf|* If equal, then x is (NAN or Infinity), else, continue w/ algorithm.|* If there was an error, it is due to underflow or overflow.  We will|* deal with this later.  (i.e.  ignore error here).|* absx.in: |* Result was a NAN or infinity.  |* Need to check whether it was  (-infinity) as exp(-infinity)=0. |* Compare with x with (+inf).  If error, then x=NAN.  If eq, x=+inf.|* If (-inf), then store 0 in reg2 and call idle.  Else, call idle. (reg 2 already|* contains the result: exp(NAN) is NAN, exp(+inf)=+inf, exp(-inf)=0.	;			;				;		ptr5;		ptr5!dinf	;			dnop enra loaddp halt;		regtoti;	rcsmsw ptr5;	;			dnop enra loaddp halt;		regtoti;	rcslsw ptr5;	;			dnop enrb loaddp halt;		regtoti;	rcsmsw ptr2;	;			dcmp enrb loaddp halt;		regtoti;	rcslsw ptr2;	;			dcmp;				;		;	|* If tierr, result was NAN. Bailout.	jtierr bail.out cstat;	dcmp;				;		;|* If result is not equal, x =  (-inf) so load ptr2 with 0.0; Else, return x.	;			dcmp;				;		ptr5;		ptr5!dzero	jeq retexp1;		dnop halt;			regtotmp;	rcsmsw ptr5;	;			;				regtotmp;	rcslsw ptr5;	;			;				;		ptr1;	;			;				tmptoreg;	rcsmsw ptr1;	call idle1;		;				tmptoreg;	rcslsw ptr1;retexp1:	;			;				regtotmp;	rcsmsw ptr2;	;			;				regtotmp; 	rcslsw ptr2;	;			;				;		ptr1;	;			;				tmptoreg;	rcsmsw ptr1;	call idle1;		;				tmptoreg;	rcslsw ptr1;bail.out:|* Signal an error to the cpu so it can recompute:  Replace ptr1 into ptr2.        hng;                    halt;                           ;      		;        call idle1;             halt;                           ;		;

⌨️ 快捷键说明

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