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

📄 sexpm.u

📁 操作系统SunOS 4.1.3版本的源码
💻 U
📖 第 1 页 / 共 2 页
字号:
	;			i2cmp enra halt;		regtoti;	rcssp ptr5;	;			;				;		ptr5;	ptr5!c_sitwo20	;			imul enrb halt;			regtoti;	rcssp ptr5;	;			tioe tisp;			;		;	;			i2cmp enrb tioe tisp halt;	;		;	;			;				;		ptr5;   ptr5!0x700+0xE0	;			i2add enra halt;		regtoti;	rcsmsw ptr5;	;			tioe tisp;			;		ptr5;   ptr5!0x700+0xE0	call midle1;		tioe tisp halt;			titoreg;	rcsmsw ptr5;kkgtprec:	call exp_x;		dnop;				;		;	;			dnop enrb loaddp halt;		tmptoti;	rcsmsw;	;			dsub enrb loaddp halt;		tmptoti;	rcslsw;	;			dnop;				;		ptr5;		ptr5!0x700+0xD8	;			dnop enra loaddp halt;		regtoti;	rcsmsw ptr5;	;			dadd alubalu enra loaddp halt;	regtoti;	rcslsw ptr5;	;			dnop tioe timsw;		;		;	;			dnop enra tioe timsw loaddp halt;;		;	;			dnop enra tioe tilsw loaddp halt;;		;	;			dnop;				;		ptr5;	ptr5!done	;			dnop enrb loaddp halt;		regtoti;	rcsmsw ptr5;	call eendexpm1;		dadd enrb loaddp halt;		regtoti;	rcslsw ptr5;eexpxm1:|*  This should call exp(x) and subtract 1 from the result and return.|* abs(x) is greater than ln2/2:|* Now check whether abs(x) <= ln2 * 3/2	;			dnop;				;		ptr5;   ptr5!0x700+0xE0	;			dnop enra loaddp halt;		regtoti;	rcsmsw ptr5;	;			dnop enra loaddp halt;		regtoti;	rcslsw ptr5;	;			dnop;				;		ptr5;	ptr5!c_dinvln2	;			dnop enrb loaddp halt;		regtoti;	rcsmsw ptr5;		;			dmul enrb loaddp halt;		regtoti;	rcslsw ptr5;	;			dmul;				;		;			;			dnop srccmul clkcc;		;		;|* Convert double to integer: k in c register. Save in SCRATCH 13 register.	;			dcvtint aluacreg;		;		;			;			dnop;				;		ptr5;		ptr5!0x700+0xDD|* Calculate t= double k	;			dfloat enra tioe tisp loaddp halt;titoreg;	rcssp ptr5;	;			dfloat enra tioe tisp loaddp halt;;		;	;			dnop tioe timsw;		;		;	;			dnop enra tioe timsw loaddp halt;;		;	;			dnop enra tioe tilsw loaddp halt;;		;	;			dnop;				;		ptr5;		ptr5!c_dln2hi	;			dnop enrb loaddp halt;		regtoti;	rcsmsw ptr5;	;			dmul enrb loaddp halt; 		regtoti; 	rcslsw ptr5;	;			dmul;				;		ptr5;   ptr5!0x700+0xE0	;			dnop enrb loaddp halt;		regtoti;	rcsmsw ptr5;|* Store x - (result) in SCRATCH_10.	;			drsub aluamul enrb loaddp halt;	regtoti;	rcslsw ptr5;	;			dnop tioe tilsw;		;		ptr5;		ptr5!0x700+0xDA	;			dnop tioe tilsw halt;		titoreg;	rcslsw ptr5;	;			dnop tioe timsw halt;		titoreg;	rcsmsw ptr5;|* get lo = t*ln2lo.  Store in SCRATCH_11 and input to RB.	;			dnop;				;		ptr5;		ptr5!c_dln2lo	;			dnop enrb loaddp halt;		regtoti;	rcsmsw ptr5;	;			dmul enrb loaddp halt;		regtoti;	rcslsw ptr5;	;			dmul;				;		;	;			dnop tioe timsw;		;		ptr5;		ptr5!0x700+0x0DB|* load 'lo' in RB and call calcz = hi - lo.	;			dnop enrb tioe timsw loaddp halt;titoreg;	rcsmsw ptr5;	;			dnop enrb tioe tilsw loaddp halt;titoreg;	rcslsw ptr5;	;			dnop;				;		ptr5;		ptr5!0x700+0xDA	;			dnop enra loaddp halt;		regtoti;	rcsmsw ptr5;	;			dsub enra loaddp halt;		regtoti;	rcslsw ptr5;	;			dnop tioe tilsw;		;		ptr5;		ptr5!0x700+0xDC	;			dnop tioe tilsw halt;		titoreg;	rcslsw ptr5;	;			dnop tioe timsw halt;		titoreg;	rcsmsw ptr5;	|* 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 tioe timsw;		;		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 rrresult.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 tioe timsw;		;		;	;			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 tioe timsw;		;		;	;			dnop enra tioe timsw loaddp halt;;		;	;			dnop enra tioe tilsw loaddp halt;;		;	;			dnop;				;		;	;			ddiv enrb loaddp halt;		tmptoti;	rcsmsw;	;			ddiv enrb loaddp halt;		tmptoti;	rcslsw;			;			dnop;				;		;	;			dnop halt;			;		;	;			dnop;				;		;	;			dnop;				;		;	;			dnop;				;		;	;			dmul;				;		;	;			dmul tioe timsw 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 tioe tilsw;		;		ptr5;   ptr5!0x700+0xE0	;			dnop tioe tilsw halt;		titoreg;	rcslsw ptr5;	call mmidle1m1;		dnop tioe timsw halt;		titoreg;	rcsmsw ptr5;rrresult.zero:|* compute y = one -((lo-(z*c)/(2.0-c))-hi).  z in RB, c in C.  Ptr 5 with dtwo.	;			dsub alubcreg;			;		;	;			dnop tioe timsw;		;		;	;			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 tioe timsw;		;		;	;			dnop enra tioe timsw loaddp halt;;		;	;			dnop enra tioe tilsw loaddp halt;;		;	;			dnop;				;		;	;			ddiv enrb loaddp halt;		tmptoti;	rcsmsw;	;			ddiv enrb loaddp halt;		tmptoti;	rcslsw;			;			dnop;				;		;	;			dnop halt;			;		;	;			dnop;				;		;	;			dnop;				;		;	;			dnop;				;		;	;			dmul;				;		;	;			dmul tioe timsw 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 tioe tilsw;		;		ptr5;   ptr5!0x700+0xE0	;			dnop tioe tilsw halt;		titoreg;	rcslsw ptr5;	call scalbn1;		dnop tioe timsw halt;		titoreg;	rcsmsw ptr5;|* Do scalbn(y,k)  Add k to the exponent of y.  Y is in ptr1 register.  K is in SCRATCH_13mmidle1m1:	;			dnop;				;		ptr5;   ptr5!0x700+0xE0	;			dnop enra loaddp halt;		regtoti;	rcsmsw ptr5;	;			dnop enra loaddp halt;		regtoti;	rcslsw ptr5;	;			dnop;				;		ptr5;	ptr5!dmone	;			dnop enrb loaddp halt;		regtoti;	rcsmsw ptr5;	;			dadd enrb loaddp halt;		regtoti;	rcslsw ptr5;	;			dnop tioe timsw;		;		ptr5;   ptr5!0x700+0xE0	;			dnop tioe timsw halt;		titoreg;	rcsmsw ptr5;	call midle1;		dnop tioe tilsw halt;		titoreg;	rcslsw ptr5;ddnotfinx1:|* 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.	;			dnop tioe timsw;		;		;	;			i2cmp enra srccalu clkcc tioe timsw halt;;	;	;			;				;		ptr5;	ptr5!dinf	;			i2land enrb loadsp halt;	regtoti;	ptr5;	;			tioe tisp;			;		;	;			i2cmp enra tioe tisp loadsp halt;;		;	;			;				;		ptr5;	ptr5!c_dln2_2	jeq aabsx1in;		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).|* aabsx1in: |* 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;	;			halt;				;		ptr5;   ptr5!0x700+0xE0	;			dnop enrb loaddp halt;		regtoti;	rcsmsw ptr5;	;			dcmp enrb loaddp halt;		regtoti;	rcslsw ptr5;	;			dcmp;				;		;		jtierr bail.out cstat;	dcmp;				;		;	;			dcmp;				;		ptr5;	ptr5!dmone	jeq rretexp11;		dnop halt;			regtotmp;	rcsmsw ptr5;	;			;				regtotmp;	rcslsw ptr5;	;			;				;		ptr5;   ptr5!0x700+0xE0	;			;				tmptoreg;	rcsmsw ptr5;	call midle1;		;				tmptoreg;	rcslsw ptr5;rretexp11:	;			;				;		ptr2;   	;			;				regtotmp; 	rcssp ptr2;	;			;				;		ptr1;	call idle1;		;				tmptoreg;	rcssp ptr1;scalbn1:|* Y (DP) in SCRATCH E0|* 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;	;			tioe tisp;			;		;	;			i2cmp enra tioe tisp halt;	;		;	;			;				;		ptr5;   ptr5!0x700+0xE0	;			i2add enrb halt;		regtoti;	rcsmsw ptr5;	;			tioe tisp;			;		ptr5;	rtn;			tioe tisp halt;			titoreg;	rcsmsw ptr5;

⌨️ 快捷键说明

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