📄 dexpm.u
字号:
; dnop tioe tilsw halt; titoreg; rcslsw ptr5; ; dnop halt; ; ptr5; ptr5!dhalf ; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; dmul enrb loaddp halt; regtoti; rcslsw ptr5; ; dmul; ; ; ; dmul; ; ptr5; ptr5!0x700+0xDD ; dnop tioe timsw halt; titoreg; rcsmsw ptr5; ; dnop tioe tilsw halt; titoreg; rcslsw ptr5; ; dnop; ; ptr5; ptr5!0x700+0xDC ; dnop enra loaddp halt; regtoti; rcsmsw ptr5; ; dnop enra loaddp halt; regtoti; rcslsw ptr5; ; dnop; ; ptr5; ptr5!0x700+0xDB ; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; drsub enrb loaddp halt; regtoti; rcslsw ptr5; ; drsub; ; ptr5; ptr5!0x700+0xDD ; dnop enra loaddp halt; regtoti; rcsmsw ptr5; ; dsub alubalu enra loaddp halt; regtoti; rcslsw ptr5; ; dnop; ; ptr5; ptr5!0x700+0xDE ; dnop tioe timsw halt; titoreg; rcsmsw ptr5; ; dnop tioe tilsw halt; titoreg; rcslsw ptr5; ; dnop; ; ptr5; ptr5!0x700+0xDA ; dnop enra enrb loaddp halt; regtoti; rcsmsw ptr5; ; dadd enra enrb loaddp halt; regtoti; rcslsw ptr5; ; dadd; ; ptr5; ptr5!0x700+0xDC ; dnop enra loaddp halt; regtoti; rcsmsw ptr5; ; dadd alubalu enra loaddp halt; regtoti; rcslsw ptr5; ; dnop; ; ; ; dnop enrb tioe timsw loaddp halt;; ; ; dnop enrb tioe tilsw loaddp halt;; ; ; dnop; ; ptr5; ptr5!0x700+0xDB ; dnop enra loaddp halt; regtoti; rcsmsw ptr5; ; dsub enra loaddp halt; regtoti; rcslsw ptr5; ; dnop; ; ptr5; ptr5!0x700+0xDF ; dnop tioe timsw halt; titoreg; rcsmsw ptr5; ; dnop tioe tilsw halt; titoreg; rcslsw ptr5; ; dnop; ; ptr5; ptr5!0x700+0xDE ; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; dnop enrb loaddp halt; regtoti; rcslsw ptr5; ; dnop; ; ptr5; ptr5!done ; dnop enra loaddp halt; regtoti; rcsmsw ptr5; ; dsub enra loaddp halt; regtoti; rcslsw ptr5; ; dnop; ; ptr5; ptr5!0x700+0xD0 ; dnop tioe timsw halt; titoreg; rcsmsw ptr5; ; dnop tioe tilsw halt; titoreg; rcslsw ptr5; ; dnop; ; ptr5; ptr5!0x700+0xDD ; dnop enra loaddp halt; regtoti; rcsmsw ptr5; ; dmul enra loaddp halt; regtoti; rcslsw ptr5; ; dmul; ; ptr5; ptr5!0x700+0xDF ; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; dsub aluamul enrb loaddp halt; regtoti; rcslsw ptr5; ; dnop; ; ; ; dnop enra tioe timsw loaddp halt;; ; ; dnop enra tioe tilsw loaddp halt;; ; ; dnop; ; ptr5; ptr5!0x700+0xD0 ; ddiv enrb loaddp halt; regtoti; rcsmsw ptr5; ; ddiv enrb loaddp halt; regtoti; rcslsw ptr5; ; dnop; ; ; ; dnop halt; ; ; ; dnop; ; ; ; dnop; ; ; ; dnop; ; ; ; dmul; ; ; ; dmul halt; ; ptr5; ptr5!0x700+0xD0 ; dmul tioe timsw halt; titoreg; rcsmsw ptr5; ; dmul tioe tilsw halt; titoreg; rcslsw ptr5; ; dnop halt; ; ptr5; ptr5!0x700+0xD9 ; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; dnop enrb loaddp halt; regtoti; rcslsw ptr5; ; dnop; ; ptr5; ptr5!0x700+0xD0 ; dnop enra loaddp halt; regtoti; rcsmsw ptr5; ; dadd enra loaddp halt; regtoti; rcslsw ptr5; ; dadd; ; ptr5; ptr5!0x700+0xD8 ; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; dmul mulaalu enrb loaddp halt; regtoti; rcslsw ptr5; ; dmul mulaalu; ; ptr5; ptr5!0x700+0xD9 ; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; dadd aluamul enrb loaddp halt; regtoti; rcslsw ptr5; ; dnop; ; ; ; dnop enrb tioe timsw loaddp halt;; ; ; dnop enrb tioe tilsw loaddp halt;; ptr5; ptr5!dhalf ; dnop enra loaddp halt; regtoti; rcsmsw ptr5; ; dmul mulbcreg enra loaddp halt; regtoti; rcslsw ptr5; ; dmul mulbcreg; ; ; ; dadd aluamul halt; ; ; ; dadd aluamul halt; ; ; ; dadd aluamul; ; ptr5; ptr5!0x700+0xD9 ; dnop enra tioe timsw loaddp halt;titoreg; rcsmsw ptr5; rtn; dnop enra tioe tilsw loaddp halt;titoreg; rcslsw ptr5;expxm1:|* 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 enra loaddp halt; regtoti; rcsmsw ptr2; ; dnop enra loaddp halt; regtoti; rcslsw ptr2; 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; ; ; ; 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; ; ptr2; ; dnop enrb loaddp halt; regtoti; rcsmsw ptr2;|* Store x - (result) in SCRATCH_10. ; drsub aluamul enrb loaddp halt; regtoti; rcslsw ptr2; ; dnop; ; 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; ; 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; ; 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; ; 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 rresult.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 idle1m1; dnop tioe timsw halt; titoreg; rcsmsw ptr1;rresult.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; 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_13idle1m1: ; dnop enra loaddp halt; regtoti; rcsmsw ptr1; ; dnop enra loaddp halt; regtoti; rcslsw ptr1; ptr5!dmone ; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; dadd enrb loaddp halt; regtoti; rcslsw ptr5; ; dnop; ; ptr1; ; dnop tioe timsw halt; titoreg; rcsmsw ptr1; call idle1; dnop tioe tilsw halt; titoreg; rcslsw ptr1;dnotfinx1:|* 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; ; ; ; i2cmp enra srccalu clkcc tioe timsw halt;; ; ; ; ; ptr5; ptr5!dinf ; i2land enrb loadsp halt; regtoti; ptr5; ; ; ; ; ; i2cmp enra tioe tisp loadsp halt;; ; ; ; ; ptr5; ptr5!c_dln2_2 jeq absx1in; 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).|* absx1in: |* 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; ; ptr2; ; dnop enrb loaddp halt; regtoti; rcsmsw ptr2; ; dcmp enrb loaddp halt; regtoti; rcslsw ptr2; ; dcmp; ; ; jtierr bail.out cstat; dcmp; ; ;|* If result is not equal, x = (-inf) so load ptr1 with -1.0; Else, return x. ; dcmp; ; ptr5; ptr5!dmone jeq retexp11; dnop halt; regtotmp; rcsmsw ptr5; ; ; regtotmp; rcslsw ptr5; ; ; ; ptr1; ; ; tmptoreg; rcsmsw ptr1; call idle1; ; tmptoreg; rcslsw ptr1;retexp11: ; ; regtotmp; rcsmsw ptr2; ; ; regtotmp; rcslsw ptr2; ; ; ; ptr1; ; ; tmptoreg; rcsmsw ptr1; call idle1; ; tmptoreg; rcslsw ptr1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -