📄 dexpm.u
字号:
|* @(#)dexpm.u 1.1 92/07/30 Copyright Sun Microsystems, Inc. 1988|*|* int k: stored in SCRATCH_2 --> D2|* DP k: stored in SCRATCH_3 --> D3|* lo: stored in SCRATCH_4 --> D4|* hi: stored in SCRATCH_5 --> D5|* lo: stored in SCRATCH_6 --> D6|* k: stored in SCRATCH_7 --> D7|* z: stored in SCRATCH_8 --> D8|* c: stored in SCRATCH_9 --> D9|*routine xd.ex1 001000001001 dnop enra loaddp halt; regtitmp; rcsmsw imm2;|* First get abs(x) and store it in the 'C' register in the TI8847. call dnotfinx1; dabs enra loaddp halt; regtitmp; rcslsw imm2;|* Check if we have to bail out due to inexact ; halt; ; ptr5; ptr5!c_ssin ; smul enra enrb halt; regtoti; rcssp ptr5;|* Compare abs(x) with ln2/2 ; smul; ; ptr5; ptr5!c_dln2_2 jtierr hang cstat; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; dcmp aluacreg enrb loaddp halt; regtoti; rcslsw ptr5; ; dnop; ; ptr5; ptr5!c_d1em17 jge xgtln2_2m; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; dcmp aluacreg enrb loaddp halt; regtoti; rcslsw ptr5; ; dnop; ; ptr5; ptr5!0x700+0xD8 jle retlnx; dnop halt; tmptoreg; rcsmsw ptr5; ; dnop halt; tmptoreg; rcslsw ptr5; ; dnop; ; ptr5; ptr5!dzero ; dnop ; regtotmp; rcsmsw ptr5; ; dnop; regtotmp; rcslsw ptr5; ; dnop; ; ptr5; ptr5!0x700+0xD9 ; dnop; tmptoreg; rcsmsw ptr5; call exp_x; dnop; tmptoreg; rcslsw ptr5;|* Result is returned in D9 register and in RA ; dnop enrb loaddp halt; regtoti; rcsmsw ptr2; ; dadd enrb loaddp halt; regtoti; rcslsw ptr2; ; dnop; ; ptr1; ; dnop tioe tilsw halt; titoreg; rcslsw ptr1; call idle1; dnop tioe timsw halt; titoreg; rcsmsw ptr1;xgtln2_2m: ; dnop enra loaddp halt; regtoti; rcsmsw ptr2; ; dnop enra loaddp halt; regtoti; rcslsw ptr2; ; dnop; ; ptr5; ptr5!dzero ; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; dcmp enrb loaddp halt; regtoti; rcslsw ptr5; ; dnop; ; ptr5; ptr5!c_dmln2 jge x_pos; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; dcmp enrb loaddp halt; regtoti; rcslsw ptr5; ; dnop; ; ptr5; ptr5!c_dln2hi jle x_negl; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; dadd enrb loaddp halt; regtoti; rcslsw ptr5; ; dnop; ; ptr5; ptr5!0x700+0xD5 ; dnop enra tioe timsw loaddp halt;titoreg; rcsmsw ptr5; ; dnop enra tioe tilsw loaddp halt;titoreg; rcslsw ptr5; ; dnop; ; ptr5; ptr5!c_dln2lo ; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; dadd enrb loaddp halt; regtoti; rcslsw ptr5; ; dnop; ; ptr5; ptr5!0x700+0xD8 ; dnop enrb tioe timsw loaddp halt;titoreg; rcsmsw ptr5; ; dsub enrb tioe tilsw loaddp halt;titoreg; rcslsw ptr5; ; dsub; ; ptr5; ptr5!c_dln2lo ; dnop enra loaddp halt; regtoti; rcsmsw ptr5; ; dadd alubalu enra loaddp halt; regtoti; rcslsw ptr5; ; dnop; ; ptr5; ptr5!0x700+0xD9 ; dnop tioe timsw halt; titoreg; rcsmsw ptr5; call exp_x; dnop tioe tilsw halt; titoreg; rcslsw ptr5; ; ; ; ptr5; ptr5!0x700+0xD8 ; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; dadd enrb loaddp halt; regtoti; rcslsw ptr5; ; dadd; ; ptr5; ptr5!dhalf ; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; dmul mulaalu enrb loaddp halt; regtoti; rcslsw ptr5; ; dmul mulaalu; ; ; ; dsub aluamul halt; ; ; ; dsub aluamul halt; ; ; ; dsub aluamul; ; ptr1; ; dnop tioe tilsw halt; titoreg; rcslsw ptr1; call idle1; dnop tioe timsw halt; titoreg; rcsmsw ptr1;x_negl: ; dnop; ; ptr5; ptr5!c_dm40 ; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; dcmp enrb loaddp halt; regtoti; rcslsw ptr5; ; dnop; ; ptr5; ptr5!c_dfmin jgt expxm1; dnop enra loaddp halt; regtoti; rcsmsw ptr5; ; dnop enra loaddp halt; regtoti; rcslsw ptr5; ; dnop; ; ptr5; ptr5!done ; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; dsub enrb loaddp halt; regtoti; rcslsw ptr5; ; dnop; ; ptr1; ; dnop tioe timsw halt; titoreg; rcsmsw ptr1; call idle1; dnop tioe tilsw halt; titoreg; rcslsw ptr1;x_pos: ; ; ; ptr5; ptr5!c_dln2_onehalf ; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; dcmp enrb loaddp halt; regtoti; rcslsw ptr5; ; dnop; ; ptr5; ptr5!c_d70 jlt xltdln2.5; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; dcmp enrb loaddp halt; regtoti; rcslsw ptr5; ; dnop; ; ptr5; ptr5!c_dlnovft jlt xlt70; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; dcmp enrb loaddp halt; regtoti; rcslsw ptr5; ; dnop; ; ; jgt bail.ov; dnop halt; ; ; ; dnop halt; ; ; call expxm1; ; ; ;xltdln2.5: ; dnop; ; ; ptr5!c_dln2hi ; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; dsub enrb loaddp halt; regtoti; rcslsw ptr5; ; dnop; ; ptr5; ptr5!0x700+0xD5 ; dnop enra tioe timsw loaddp halt;titoreg; rcsmsw ptr5; ; dnop enra tioe tilsw loaddp halt;titoreg; rcslsw ptr5; ; dnop; ; ptr5; ptr5!c_dln2lo ; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; dsub enrb loaddp halt; regtoti; rcslsw ptr5; ; dnop; ; ptr5; ptr5!0x700+0xD8 ; dnop enrb tioe timsw loaddp halt;titoreg; rcsmsw ptr5; ; dsub enrb tioe tilsw loaddp halt;titoreg; rcslsw ptr5; ; dsub; ; ptr5; ptr5!c_dln2lo ; dnop enra loaddp halt; regtoti; rcsmsw ptr5; ; drsub alubalu enra loaddp halt; regtoti; rcslsw ptr5; ; dnop; ; ptr5; ptr5!0x700+0xD9 ; dnop tioe tilsw halt; titoreg; rcslsw ptr5; ; dnop tioe timsw halt; titoreg; rcsmsw ptr5; ; dnop enra loaddp halt; regtoti; rcsmsw ptr2; ; dnop enra loaddp halt; regtoti; rcslsw ptr2; ; dnop; ; ptr5; ptr5!c_dexp_con1 ; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; dcmp enrb loaddp halt; regtoti; rcslsw ptr5; ; dnop; ; ptr5; ptr5!0x700+0xD8 jlt xltcons1; dnop enra loaddp halt; regtoti; rcsmsw ptr5; ; dnop enra loaddp halt; regtoti; rcslsw ptr5; ; dnop; ; ptr5; ptr5!0x700+0xD8 call exp_x2; dnop enra enrb loaddp halt; regtoti; rcsmsw ptr5; ; ; ; ptr5; ptr5!0x700+0xD8 ; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; dadd enrb loaddp halt; regtoti; rcslsw ptr5; ; dadd; ; ptr5; ptr5!dhalf ; dnop enra loaddp halt; regtoti; rcsmsw ptr5; ; dadd alubalu enra loaddp halt; regtoti; rcslsw ptr5; ; dnop; ; ; ; dnop enra enrb tioe timsw loaddp halt;; ; ; dadd enra enrb tioe tilsw loaddp halt;; ; ; dnop; ; ptr1; ; dnop tioe tilsw halt; titoreg; rcslsw ptr1; call idle1; dnop tioe timsw halt; titoreg; rcsmsw ptr1;xltcons1: ; dnop; ; ptr5; ptr5!dhalf ; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; dadd enrb loaddp halt; regtoti; rcslsw ptr5; ; dnop; ; ptr1; ; dnop tioe tilsw halt; titoreg; rcslsw ptr1; ; dnop tioe timsw halt; titoreg; rcsmsw ptr1; ; dnop; ; ptr5; ptr5!0x700+0xD8 call exp_x2; dnop enra enrb loaddp halt; regtoti; rcsmsw ptr5; ; dnop enrb loaddp halt; regtoti; rcsmsw ptr1; ; dadd enrb loaddp halt; regtoti; rcslsw ptr1; ; dnop; ; ; ; dnop enra enrb tioe timsw loaddp halt;; ; ; dadd enra enrb tioe tilsw loaddp halt;; ; ; dnop; ; ptr1; ; dnop tioe tilsw halt; titoreg; rcslsw ptr1; call idle1; dnop tioe timsw halt; titoreg; rcsmsw ptr1;xlt70: ; dnop; ; ptr5; ptr5!c_dinvln2 ; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; dmul enrb loaddp halt; regtoti; rcslsw ptr5; ; dmul; ; ptr5; ptr5!c_dln2hi|* load ln2hi in RB for later use. Convert k to int, store in D2, and then convert int k to double|* (in order to get the correct fractions) and store in DD ; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; dcvtint aluamul enrb loaddp halt;regtoti; rcslsw ptr5; ; dnop; ; ptr5; ptr5!0x700+0xD2 ; dfloat enra tioe tisp loaddp halt;titoreg; rcssp ptr5; ; dfloat enra tioe tisp loaddp halt;; rcssp ptr5; ; dnop; ; ptr5; ptr5!0x700+0xD3 ; dnop enra tioe timsw loaddp halt;titoreg; rcsmsw ptr5;|* RB has dln2hi already|* RA has double k ; dmul enra tioe tilsw loaddp halt;titoreg; rcslsw ptr5; ; dmul; ; ptr2; ; dnop enrb loaddp halt; regtoti; rcsmsw ptr2; ; drsub aluamul enrb loaddp halt; regtoti; rcslsw ptr2; ; dnop; ; ptr5; ptr5!0x700+0xD5 ; dnop tioe timsw halt; titoreg; rcsmsw ptr5; ; dnop tioe tilsw halt; titoreg; rcslsw ptr5; ; dnop; ; ptr5; ptr5!c_dln2lo ; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; dmul enrb loaddp halt; regtoti; rcslsw ptr5;|* Get hi ; lo will be stored in the C reg. ; dmul; ; ptr5; ptr5!0x700+0xD5 ; dnop srccmul clkcc; ; ptr5; ; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; drsub aluacreg enrb loaddp halt;regtoti; rcslsw ptr5; ; dnop; ; ptr5; ptr5!0x700+0xD8 ; dnop enra tioe timsw loaddp halt;titoreg; rcsmsw ptr5;|* get (hi -z) ; drsub enra tioe tilsw loaddp halt;titoreg; rcslsw ptr5;|* c = (hi-z_-lo ; drsub aluacreg alubalu; ; ; ; dnop; ; ptr5; ptr5!0x700+0xD9|* store c in D9 ; dnop tioe timsw halt; titoreg; rcsmsw ptr5; ; dnop tioe tilsw halt; titoreg; rcslsw ptr5; ; dnop; ; ptr5; ptr5!0x700+0xD2|* Do a SCALB(one, -k): ; i2cmp enra halt; regtoti; rcssp ptr5; ; ; ; ptr5; ptr5!c_sitwo20 ; imul enrb halt; regtoti; rcssp ptr5; ; ; ; ; ; i2cmp enrb tioe tisp halt; ; ptr5; ptr5!done ; i2sub enra halt; regtoti; rcssp ptr5; ; ; ; ; ; tioe tisp halt; titotmp; rcsmsw ptr5;|* Need to set the lsw to all 0's ; halt; regtotmp; rcslsw ptr5; ; dnop; ; ptr5; ptr5!0x700+0xD2|* Compare k to prec = 53 ; i2cmp enra halt; regtoti; rcssp ptr5; ; ; ; ptr5; ptr5!c_siprec ; i2cmp enrb halt; regtoti; rcssp ptr5; ; ; ; ptr5; ptr5!done jgt kgtprec; 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; ; ptr1; ; dnop tioe timsw halt; titoreg; rcsmsw ptr1; call exp_x; dnop tioe tilsw halt; titoreg; rcslsw ptr1; ; dnop; ; ptr5; ptr5!0x700+0xD8 ; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; dadd enrb loaddp halt; regtoti; rcslsw ptr5; ; dnop enra loaddp halt; regtoti; rcsmsw ptr1; ; dadd alubalu enra loaddp halt; regtoti; rcslsw ptr1;endexpm1: ; dnop; ; ptr1; ; dnop tioe tilsw halt; titoreg; rcslsw ptr1; ; dnop tioe timsw halt; titoreg; rcsmsw ptr1; ; ; ; ptr5; ptr5!0x700+0xD2 ; i2cmp enra halt; regtoti; rcssp ptr5; ; ; ; ptr5; ptr5!c_sitwo20 ; imul enrb halt; regtoti; rcssp ptr5; ; ; ; ; ; i2cmp enrb tioe tisp halt; ; ; ; i2add enra halt; regtoti; rcsmsw ptr1; ; ; ; ptr1; call idle1; tioe tisp halt; titoreg; rcsmsw ptr1;kgtprec: ; dnop; ; ptr5; ptr5!0x700+0xD8 call exp_x2; dnop enra enrb loaddp halt; regtoti; rcsmsw ptr5; ; 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; ; ; ; dnop enra tioe timsw loaddp halt;; ; ; dnop enra tioe tilsw loaddp halt;; ; ; dnop; ; ptr5; ptr5!done ; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; call endexpm1; dadd enrb loaddp halt; regtoti; rcslsw ptr5;exp_x:|* D8: contains x|* D9: contains c and the result|* DA: p|* DB: q|* DC: xp|* DD: xh|* DE: w|* DF and D0: Scratch ; dnop; ; ptr5; ptr5!0x700+0xD8 ; dnop enra enrb loaddp halt; regtoti; rcsmsw ptr5;exp_x2: ; dmul enra enrb loaddp halt; regtoti; rcslsw ptr5; ; dmul; ; ; ; dnop srccmul clkcc; ; ptr5; ptr5!c_dexpmp2 ; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; dmul mulacreg enrb loaddp halt; regtoti; rcslsw ptr5; ; dmul mulacreg; ; ptr5; ptr5!c_dexpmp1 ; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; dadd aluamul enrb loaddp halt; regtoti; rcslsw ptr5; ; dmul mulaalu mulbcreg; ; ; ; dmul mulaalu mulbcreg; ; ptr5; ptr5!0x700+0xDA ; dnop halt; ; ptr5; ; dnop tioe timsw halt; titoreg; rcsmsw ptr5; ; dnop tioe tilsw halt; titoreg; rcslsw ptr5; ; dnop halt; ; ptr5; ; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; dmul enrb loaddp halt; regtoti; rcslsw ptr5; ; dmul; ; ; ; dnop; ; ptr5; ptr5!0x700+0xDC ; dnop tioe timsw halt; titoreg; rcsmsw ptr5; ; dnop tioe tilsw halt; titoreg; rcslsw ptr5; ; dnop; ; ptr5; ptr5!c_dexpmq2 ; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; dmul mulacreg enrb loaddp halt; regtoti; rcslsw ptr5; ; dmul mulacreg; ; ptr5; ptr5!c_dexpmq1 ; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; dadd aluamul enrb loaddp halt; regtoti; rcslsw ptr5; ; dmul mulaalu mulbcreg; ; ; ; dmul mulaalu mulbcreg; ; ptr5; ptr5!0x700+0xDB ; dnop halt; ; ; ; dnop tioe timsw halt; titoreg; rcsmsw ptr5;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -