📄 sexpm.u
字号:
|* @(#)sexpm.u 1.1 92/07/30 Copyright Sun Microsystems, Inc. 1988|* |* Single Precision ==> exp(x) - 1 Instruction|* |* This routine is the Double precision exp(x) - 1, with a call of dfloat at the beginning of the |* actual routine. The check for NaN or x less than -1 is done in single precision, before the|* converting of the SP #.routine xs.ex1 001000001000 scvtd enra loaddp halt; regtoti; rcssp imm2; ; scvtd enra loaddp halt; regtoti; rcssp imm2; ; dnop tioe timsw; ; ptr5; ptr5!0x700+0xE0 jtierr hang cstat; dnop tioe timsw halt; titoreg; rcsmsw ptr5; ; dnop tioe tilsw halt; titoreg; rcslsw ptr5; ; dnop; ; ptr5; ; dnop; regtotmp; rcsmsw ptr5;|*|* 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|* ; ; regtotmp; rcslsw ptr5;|* First get abs(x) and store it in the 'C' register in the TI8847. ; ; ; ptr5; ptr5!0x700+0xE0 ; dnop enra loaddp halt; regtoti; rcsmsw ptr5; call ddnotfinx1; dabs enra loaddp halt; regtoti; rcslsw ptr5;|* 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 ; ; ; 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 xxgtln2_2m; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; dcmp aluacreg enrb loaddp halt; regtoti; rcslsw ptr5; ; dnop; ; ptr5; ptr5!0x700+0xD8 jle rretlnx; 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; ; ptr5; ptr5!0x700+0xE0 ; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; dadd enrb loaddp halt; regtoti; rcslsw ptr5; ; dnop tioe tilsw; ; ptr5; ptr5!0x700+0xE0 ; dnop tioe tilsw halt; titoreg; rcslsw ptr5; call midle1; dnop tioe timsw halt; titoreg; rcsmsw ptr5;xxgtln2_2m: ; ; ; ptr5; ptr5!0x700+0xE0 ; dnop enra loaddp halt; regtoti; rcsmsw ptr5; ; dnop enra loaddp halt; regtoti; rcslsw ptr5; ; dnop; ; ptr5; ptr5!dzero ; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; dcmp enrb loaddp halt; regtoti; rcslsw ptr5; ; dnop; ; ptr5; ptr5!c_dmln2 jge xx_pos; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; dcmp enrb loaddp halt; regtoti; rcslsw ptr5; ; dnop; ; ptr5; ptr5!c_dln2hi jle xx_negl; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; dadd enrb loaddp halt; regtoti; rcslsw ptr5; ; dnop tioe timsw; ; 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 tioe timsw; ; 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 tioe timsw; ; 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 tioe tilsw; ; ptr5; ptr5!0x700+0xE0 ; dnop tioe tilsw halt; titoreg; rcslsw ptr5; call midle1; dnop tioe timsw halt; titoreg; rcsmsw ptr5;xx_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 eexpxm1; 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 tioe timsw; ; ptr5; ptr5!0x700+0xE0 ; dnop tioe timsw halt; titoreg; rcsmsw ptr5; call midle1; dnop tioe tilsw halt; titoreg; rcslsw ptr5;xx_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 xxltdln2.5; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; dcmp enrb loaddp halt; regtoti; rcslsw ptr5; ; dnop; ; ptr5; ptr5!c_dlnovft jlt xxlt70; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; dcmp enrb loaddp halt; regtoti; rcslsw ptr5; ; dnop; ; ; jgt bail.ov; dnop halt; ; ; ; dnop halt; ; ; call eexpxm1; ; ; ;xxltdln2.5: ; dnop; ; ; ptr5!c_dln2hi ; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; dsub enrb loaddp halt; regtoti; rcslsw ptr5; ; dnop tioe timsw; ; 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 tioe timsw; ; 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 tioe tilsw; ; ptr5; ptr5!0x700+0xD9 ; dnop tioe tilsw halt; titoreg; rcslsw ptr5; ; dnop tioe timsw halt; titoreg; rcsmsw ptr5; ; dnop; ; ptr5; ptr5!0x700+0xE0 ; dnop enra loaddp halt; regtoti; rcsmsw ptr5; ; dnop enra loaddp halt; regtoti; rcslsw ptr5; ; 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 xxltcons1; dnop enra loaddp halt; regtoti; rcsmsw ptr5; ; dnop enra loaddp halt; regtoti; rcslsw ptr5; call exp_x; ; ; ; ; ; ; 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 tioe timsw; ; ; ; dnop enra enrb tioe timsw loaddp halt;; ; ; dadd enra enrb tioe tilsw loaddp halt;; ; ; dnop tioe tilsw; ; ptr5; ptr5!0x700+0xE0 ; dnop tioe tilsw halt; titoreg; rcslsw ptr5; call midle1; dnop tioe timsw halt; titoreg; rcsmsw ptr5;xxltcons1: ; dnop; ; ptr5; ptr5!dhalf ; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; dadd enrb loaddp halt; regtoti; rcslsw ptr5; ; dnop tioe tilsw; ; ptr5; ptr5!0x700+0xE0 ; dnop tioe tilsw halt; titoreg; rcslsw ptr5; ; dnop tioe timsw halt; titoreg; rcsmsw ptr5; call exp_x; ; ; ; ; ; ; ptr5; ptr5!0x700+0xE0 ; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; dadd enrb loaddp halt; regtoti; rcslsw ptr5; ; dnop tioe timsw; ; ; ; dnop enra enrb tioe timsw loaddp halt;; ; ; dadd enra enrb tioe tilsw loaddp halt;; ; ; dnop; ; ptr5; ptr5!0x700+0xE0 ; dnop tioe tilsw halt; titoreg; rcslsw ptr5; call midle1; dnop tioe timsw halt; titoreg; rcsmsw ptr5;xxlt70: ; 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 tioe timsw; ; 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; ; ptr5; ptr5!0x700+0xE0 ; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; drsub aluamul enrb loaddp halt; regtoti; rcslsw ptr5; ; dnop tioe timsw; ; 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 tioe timsw; ; 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 tioe timsw; ; 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; ; tioe tisp; ; ; ; i2cmp enrb tioe tisp halt; ; ; ; ; ; ptr5; ptr5!done ; i2sub enra halt; regtoti; rcssp ptr5; ; tioe tisp; ; ; ; 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 kkgtprec; 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 tioe timsw; ; ptr5; ptr5!0x700+0xE0 ; dnop tioe timsw halt; titoreg; rcsmsw ptr5; call exp_x; dnop tioe tilsw halt; titoreg; rcslsw ptr5; ; dnop; ; ptr5; ptr5!0x700+0xD8 ; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; dadd enrb loaddp halt; regtoti; rcslsw ptr5; ; dadd; ; ptr5; ptr5!0x700+0xE0 ; dnop enra loaddp halt; regtoti; rcsmsw ptr5; ; dadd alubalu enra loaddp halt; regtoti; rcslsw ptr5;eendexpm1: ; dnop tioe tilsw; ; ptr5; ptr5!0x700+0xE0 ; dnop tioe tilsw halt; titoreg; rcslsw ptr5; ; dnop tioe timsw halt; titoreg; rcsmsw ptr5; ; ; ; ptr5; ptr5!0x700+0xD2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -