📄 tran.u
字号:
; ; ; ; rcssp ptr5; ptr5!s19o16|* abs(operand) <= 7/16 ; lbs csla; reg; ; ; call wait3; lf dcmpm csla; ; ; ; call wait1; csuxa umsw; ; ; ; jlt dreturnx; woea; ; ; ;|* small < abs(operand) <= 7/16| put ptr2 into "t" ; ; ; recclk; rcsmsw ptr2; ; ; ; recclk; rcslsw ptr2; ptr5!c_dSCRATCH_5 ; ; ; ; ptr5; ; ; ; recoe; ramwe rcsmsw ptr5; ; ; ; recoe recclk;ramwe ptr5; ; ; ; recoe; ramwe rcslsw ptr5; ; ; ; recoe; ramwe ptr5; ptr5!c_datan_00| jump to compute atan with hi = 0, lo = 0 call xda.getz; ; ; ; ;xda.e2:|* 7/16 < abs(operand) <= 39/16 ; ; ; ; rcssp ptr5; ptr5!s11o16 ; lbs csla; reg; ; ; call wait3; lf dcmpm csla; ; ; ; call wait1; csuxa umsw; ; ; ; jgt xda.e3; woea; ; ; ; ; ; ; ; rcssp ptr5; ptr5!stwo|* 7/16 < abs(operand) <= 19/16 ; lbs csla; reg; ; ; call wait3; lf dcmpm csla; ; ; ; call wait1; csuxa umsw; ; ; ; jgt xda.e4; woea; ; ; ;|* 7/16 < abs(operand) <= 11/16 ; ; ; ; rcssp ptr5;| start y+2 ; lbs csla; reg; ; ; call wait3; lf daddm csla; ; ; ; ; csuxa umsw; ; ; ; ptr5!c_dSCRATCH_5 ; csuxa ulsw; ; ; ptr5;| write y+2 to temp ; woea; dtor; ; ramwe rcsmsw ptr5; ; woea; dtor; ; ramwe rcslsw ptr5; ; ; dtor; ; ramwe ptr5; ; ; ; ; rcsmsw ptr2; ; lbm csla; reg; ; rcslsw ptr2; ptr5!sone call wait3; lblf daddm csla; reg; ; ; ; lam csla csuxa umsw; ; ; rcssp ptr5; ; lbs csla; reg; ; ;| start (y+y) - 1 call wait3; lalf dsub csla csuxa ulsw;; ; ; ; lam csla csuxa umsw; ; ; ; ptr5!c_dSCRATCH_5 ; lal csla csuxa ulsw; ; ; rcsmsw ptr5; ; lbm csla; reg; ; rcslsw ptr5; lpreg!28 call wait; lblf ddiv csla; reg; ; ; ; csuxa umsw; ; ; ; ptr5!c_dSCRATCH_5 ; csuxa ulsw; ; ; ptr5;| pass value of "t" ; woea; dtor; ; ramwe rcsmsw ptr5; ; woea; dtor; ; ramwe rcslsw ptr5; ; ; dtor; ; ramwe ptr5;| note: we check the msw as a sp! ; ; ; ; rcsmsw ptr2; call wait3; lasf scmp0 csla; reg; ; ; call wait1; csuxa usp; ; ; ; jgt xda.getz; woea; ; ; ; ; ; ; ; ; ptr5!c_datan_hhilo ; ; ; ; ; ptr5!c_dSCRATCH_5 ; ; ; ; rcsmsw ptr5; ; lam csla; reg; ; rcslsw ptr5; call wait3; lalf dneg csla; reg; ; ; ; csuxa umsw; ; ; ; ptr5!c_dSCRATCH_5 ; csuxa ulsw; ; ; ptr5;| pass value of -"t" and -hi, -lo ; woea; dtor; ; ramwe rcsmsw ptr5; ; woea; dtor; ; ramwe rcslsw ptr5; ; ; dtor; ; ramwe ptr5; ptr5!c_datan_mhhilo call xda.getz; ; ; ; ;xda.e4:|* 11/16 < abs(operand) <= 19/16 ; ; ; ; ; ptr5!sone ; ; ; ; rcssp ptr5;| start y+1 ; lbs csla; reg; ; ; call wait3; lf daddm csla; ; ; ; ; lf dsubm csla csuxa umsw;; ; ; ptr5!c_dSCRATCH_5 ; csuxa ulsw; ; ; ptr5;| write y+1 to temp ; woea; dtor; ; ramwe rcsmsw ptr5; ; woea; dtor; ; ramwe rcslsw ptr5; ; lam csla csuxa umsw; dtor; ; ramwe ptr5; ; lal csla csuxa ulsw; ; ; rcsmsw ptr5; ; lbm csla; reg; ; rcslsw ptr5; lpreg!28 call wait; lblf ddiv csla; reg; ; ; ; csuxa umsw; ; ; ; ptr5!c_dSCRATCH_5 ; csuxa ulsw; ; ; ptr5;| pass value of "t" ; woea; dtor; ; ramwe rcsmsw ptr5; ; woea; dtor; ; ramwe rcslsw ptr5; ; ; dtor; ; ramwe ptr5;| note: we check the msw as a sp! ; ; ; ; rcsmsw ptr2; call wait3; lasf scmp0 csla; reg; ; ; call wait1; csuxa usp; ; ; ; jgt xda.getz; woea; ; ; ; ; ; ; ; ; ptr5!c_datan_40 ; ; ; ; ; ptr5!c_dSCRATCH_5 ; ; ; ; rcsmsw ptr5; ; lam csla; reg; ; rcslsw ptr5; call wait3; lalf dneg csla; reg; ; ; ; csuxa umsw; ; ; ; ptr5!c_dSCRATCH_5 ; csuxa ulsw; ; ; ptr5;| pass value of -"t" and -hi, -lo ; woea; dtor; ; ramwe rcsmsw ptr5; ; woea; dtor; ; ramwe rcslsw ptr5; ; ; dtor; ; ramwe ptr5; ptr5!c_datan_m40 call xda.getz; ; ; ; ;xda.e3:|* 19/16 < abs(operand) <= 39/16 ; ; ; ; rcsmsw ptr2; ; lbm csla; reg; ; rcslsw ptr2; ptr5!stwo call wait3; lblf daddm csla; reg; ; ; ; lbm csla csuxa umsw; ; ; ; call wait3; lblf daddm csla csuxa ulsw;; ; ; ; lam csla csuxa umsw; ; ; rcssp ptr5; ; lbs csla; reg; ; ;| start (y+y+y) + 2 call wait3; lalf dadd csla csuxa ulsw;; ; ; ; csuxa umsw; ; ; ; ptr5!c_dSCRATCH_5 ; csuxa ulsw; ; ; ptr5;| write (y+y+y) + 2 to temp ; woea; dtor; ; ramwe rcsmsw ptr5; ; woea; dtor; ; ramwe rcslsw ptr5; ; ; dtor; ; ramwe ptr5; ; ; ; ; rcsmsw ptr2; ptr5!sone ; lam csla; reg; ; rcssp ptr5; ; lbs csla; reg; ; rcslsw ptr2;| start y - 1 call wait3; lalf dsubm csla; reg; ; ; ; lam csla csuxa umsw; ; ; ; ; lal csla csuxa ulsw; ; ; ; ; lbm csla csuxa umsw; ; ; ; ptr5!sone| start z+z call wait3; lblf dadd csla csuxa ulsw;; ; ; ; lam csla csuxa umsw; ; ; rcssp ptr5; ; lbs csla; reg; ; ; call wait3; lalf dsub csla csuxa ulsw;; ; ; ; lam csla csuxa umsw; ; ; ; ptr5!c_dSCRATCH_5 ; lal csla csuxa ulsw; ; ; rcsmsw ptr5; ; lbm csla; reg; ; rcslsw ptr5; lpreg!28 call wait; lblf ddiv csla; reg; ; ; ; csuxa umsw; ; ; ; ptr5!c_dSCRATCH_5 ; csuxa ulsw; ; ; ptr5;| pass value of "t" ; woea; dtor; ; ramwe rcsmsw ptr5; ; woea; dtor; ; ramwe rcslsw ptr5; ; ; dtor; ; ramwe ptr5;| note: we check the msw as a sp! ; ; ; ; rcsmsw ptr2; call wait3; lasf scmp0 csla; reg; ; ; call wait1; csuxa usp; ; ; ; jgt xda.getz; woea; ; ; ; ; ; ; ; ; ptr5!c_datan_lhilo ; ; ; ; ; ptr5!c_dSCRATCH_5 ; ; ; ; rcsmsw ptr5; ; lam csla; reg; ; rcslsw ptr5; call wait3; lalf dneg csla; reg; ; ; ; csuxa umsw; ; ; ; ptr5!c_dSCRATCH_5 ; csuxa ulsw; ; ; ptr5;| pass value of -"t" and -hi, -lo ; woea; dtor; ; ramwe rcsmsw ptr5; ; woea; dtor; ; ramwe rcslsw ptr5; ; ; dtor; ; ramwe ptr5; ptr5!c_datan_mlhilo call xda.getz; ; ; ; ;xda.e1:|* abs(operand) > 39/16 ; ; ; ; rcssp ptr5; ptr5!dzero ; lbs csla; reg; ; ; call wait3; lf dcmpm csla; ; ; ; call wait1; csuxa umsw; ; ; ; jgt xda.e5; woea; ; ; ;|* 39/16 < abs(operand) <= big ; ; ; ; ; ; ; ; ; rcsmsw ptr2; ptr5!smone ; lbm csla; reg; ; rcssp ptr5; ; las csla; reg; ; rcslsw ptr2; lpreg!28 call wait; lblf ddiv csla; reg; ; ; ; csuxa umsw; ; ; ; ptr5!c_dSCRATCH_5 ; csuxa ulsw; ; ; ptr5;| pass value of "t" ; woea; dtor; ; ramwe rcsmsw ptr5; ; woea; dtor; ; ramwe rcslsw ptr5; ; ; dtor; ; ramwe ptr5;xda.e6: ; ; ; ; rcsmsw ptr2; ; lam csla; reg; ; rcslsw ptr2; call wait3; lalf dcmp0 csla; reg; ; ; call wait1; csuxa usp; ; ; ; jgt xda.getz; woea; ; ; ; ; ; ; ; ; ptr5!c_datan_20 ; ; ; ; ; ptr5!c_datan_m20 call xda.getz; ; ; ; ;xda.e5:|* abs(operand) > big| (we already checked for NaN's) ; ; ; recclk; rcsmsw ptr5; ; ; ; recclk; rcslsw ptr5; ptr5!c_dSCRATCH_5 ; ; ; ; ptr5; ; ; ; recoe; ramwe rcsmsw ptr5; ; ; ; recoe recclk;ramwe ptr5; ; ; ; recoe; ramwe rcslsw ptr5; call xda.e6; ; ; recoe; ramwe ptr5;|* finished with argument reduction; compute z nowxda.getz:| We need to get at (ptr5) and (ptr5-) so we copy (ptr5)| to ptr1, and (ptr5-) to 3 ; ; ; recclk; rcsmsw ptr5; ; ; ; recclk; rcslsw ptr5; ptr5- ; ; ; ; ptr1; ; ; ; recoe; ramwe rcsmsw ptr1; ; ; ; recoe recclk;ramwe ptr1; ; ; ; recoe; ramwe rcslsw ptr1; ; ; ; recoe; ramwe ptr1; ; ; ; recclk; rcsmsw ptr5; ; ; ; recclk; rcslsw ptr5; ptr5!c_dSCRATCH_3 ; ; ; ; ptr5; ; ; ; recoe; ramwe rcsmsw ptr5; ; ; ; recoe recclk;ramwe ptr5; ; ; ; recoe; ramwe rcslsw ptr5; ; ; ; recoe; ramwe ptr5; ptr5!c_dSCRATCH_5 ; ; ; ; rcsmsw ptr5; ; lam cslm; reg; ; rcslsw ptr5; ; lal cslm; reg; ; rcslsw ptr5; lpreg!11 ; lbl cslm; reg; ; rcsmsw ptr5; ptr5!c_datan_c11 call wait4; lbmf dmul cslm; reg; ; ; call dexpansion2;; ; ; ; call wait4; ; ; ; ; ; lam cslm csuxm umsw; ; ; ; ptr5!c_dSCRATCH_5 ; lal cslm csuxm ulsw; ; ; rcslsw ptr5; ; lbl cslm; reg; ; rcsmsw ptr5; ptr5!c_dSCRATCH_3| start t*z call wait3; lbmf dmul cslm; reg; ; ; ; ; ; ; rcsmsw ptr5; ; lam csla; reg; ; rcslsw ptr5; ; lal csla csuxm umsw; reg; ; ; ; csuxm ulsw; ; ; ; ; lbm csla woem; ; ; ;| start z = lo - z call wait3; lblf dsub csla woem; ; ; ; ; lam csla csuxa umsw; ; ; ; ptr5!c_dSCRATCH_5 ; lal csla csuxa ulsw; ; ; rcsmsw ptr5; ; lbm csla; reg; ; rcslsw ptr5;| start z = z + t call wait3; lblf dadd csla; reg; ; ; ; lbm csla csuxa umsw; ; ; ; ; lbl csla csuxa ulsw; ; ; rcsmsw ptr1; ; lam csla; reg; ; rcslsw ptr1;| start z = hi + z call drtn.inx.soon;lalf dadd csla; reg; ; ;|*|* Single Precision e**x-1 Instruction|*routine xs.ex1 w01000001000 las ssub call stran.start;; ; ; ; ; ; ; ; ; ptr5!c_s87 ; ; ; ; rcssp ptr5; call wait3; lbsf scmpm csla; reg; ; ; ; csuxa usp; ; ; ; lpreg!9 ; csuxa usp; ; ; ; ptr5!c_stwopm26|* if the operand was a NaN, then branch jwerr soberr; woea; ; ; ;|* if abs(operand) > 87 then branch jgt soberr; woea; ; ; ;|* abs(operand) <= 87 ; ; ; ; rcssp ptr5; call wait3; lbsf scmpm csla; reg; ; ; call wait1; csuxa usp; ; ; ; jgt xsx1.e1; woea; ; ; ; call sreturnx; ; ; ; ;xsx1.e1:| * 2**-26 < abs(x) < 87| if the mode register is not set up with the correct data| then punt ; ; ; ; ; ptr5!c_dmode ; ; ; ; rcssp ptr5; ptr5!c_dmode_cor ; las csla; reg; ; rcssp ptr5; call wait3; lbsf scmp csla; reg; ; ; call wait1; csuxa usp; ; ; ; jne soberr; woea; ; ; ;| proceed with expansion call sexpn; ; ; ; ; call sexps; ; ; ; ; ; ; ; ; ; ptr5!c_dSCRATCH_0 ; ; ; ; rcssp ptr5; ptr5!c_dSCRATCH_1 call wait3; lasf scmp0 csla; reg; ; ; call wait1; csuxa usp; ; ; ; jne xsx1.e2; woea; ; ; ; ; ; ; ; rcsmsw ptr5;|* n == 0, return real(e) ; lam csla; reg; ; rcslsw ptr5; call salu.inx1; lalf dcvts csla; reg; ; ;xsx1.e2: call stwoton; ; ; ; ;|stwoton leaves ptr5 at c_dSCRATCH_1 (e) ; ; ; ; rcsmsw ptr5; ; lam cslm; reg; ; rcslsw ptr5; ; lal cslm; reg; ; ; ptr5!sone| *start dble(p) ; lasf scvtd csla csuxa ulsw;; ; rcssp ptr5; call wait2; lbs csla; reg; ; ;| *start dble(p) - 1(double) ; lf dsub csla csuxa ulsw;; ; ; ; csuxa umsw; ; ; ;| *start dble(p) * e ; lblf dmul cslm woea; ; ; ; ; lbm cslm woea; ; ; ; ; lam csla csuxa umsw; ; ; ; call wait2; lal csla csuxa ulsw; ; ; ; ; csuxm umsw; ; ; ; ; csuxm ulsw; ; ; ; ; lbm csla woem; ; ; ; call wait3; lblf dadd csla woem; ; ; ; ; lam csla csuxa umsw; ; ; ; call salu.inx1; lalf dcvts csla csuxa ulsw;; ; ;|*|* subroutine twoton|* Enter with:|* n in c_dSCRATCH_0|*|* Exit with:|* twoton starting calculation in ALU (MUST unload with ulsw!)|* ptr5 pointing at c_dSCRATCH_1|*stwoton: ; ; ; ; ; ptr5!c_dSCRATCH_0 ; ; ; ; rcssp ptr5; ptr5!c_s127 ; las csla; reg; ; rcssp ptr5;| *start (n + 127) ; lbsf sadd csla; reg; ; ; ; ; ; ; ; ptr5!c_stwop23 ; ; ; ; rcssp ptr5; ; las cslm; reg; ; ; ; csuxa usp; ; ; ; ; ; ; ; ;| *start ((2**23) * (n + 127)) ; lbsf smul cslm woea; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; csuxm usp; ; ; ; ; ; ; ; ; ptr5!c_dSCRATCH_1 rtn; lasf scvtint csla woem; ; ; ;|*|* subroutine expn|* Enter with:|* x in recovery register|*|* Exit with:|* expn in c_dSCRATCH_0|*sexpn:| *round to nearest int ; lmode3.0 0x0 cslmac; ; recoe; ; ptr5!slog2e ; las cslm; reg; recoe; ; ; ; ; ; rcssp ptr5; ; lbsf smul cslm; reg; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; csuxm usp; ; ; ; ; ; ; ; ; ; lasf scvtint csla woem; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; lalf sfloat csla csuxa ulsw;; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; csuxa usp; ; ; ; ptr5!c_dSCRATCH_0 ; ; ; ; ptr5; ; woea; dtor; ; ramwe rcssp ptr5;| *reset the default rounding mode (to 0 for fix operations) rtn; lmode3.0 0x2 cslmac; dtor; ; ramwe ptr5;|*|* subroutine exps|* Enter with:|* x in recovery register|* expn in c_dSCRATCH_0|*|* Exit with:|* exps in c_dSCRATCH_1|*sexps: ; ; ; ; ; ptr5!c_dSCRATCH_0 ; ; ; ; rcssp ptr5; ptr5!c_dloge2a| *start dble(n) ; lasf scvtd csla; reg; ; rcsmsw ptr5; ; lam cslm; reg; ; rcslsw ptr5; ; lal cslm; reg; ; ; ; ; ; recoe; ;| *start dble(x) ; lasf scvtd csla; reg; recoe; ; ; csuxa umsw; ; ; ; ; csuxa ulsw; ; ; ; ; lbm cslm woea; ; ; ;| *start dble(n) * loge2a ; lblf dmul cslm woea; ; ; ; ; lam csla csuxa umsw; ; ; ; ; lal csla csuxa ulsw; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; csuxm umsw; ; ; ; ; csuxm ulsw; ; ; ; ; lbm csla woem; ; ; ;| *start dble(x) - (dble(n) * loge2a) ; lblf dsub csla woem; ; ; ; ptr5!c_dloge2b ; ; ; ; rcslsw ptr5; ; lal cslm; reg; ; rcsmsw ptr5; ; lam cslm; reg; ; ; ; lf dmul cslm; ; ; ; ; lam csla csuxa umsw; ; ; ; ; lal csla csuxa ulsw; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; csuxm umsw; ; ; ; ; csuxm ulsw; ; ; ; ; lbm csla woem; ; ; ; ; lblf dsub csla woem; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; lam csla csuxa umsw; ; ; ; ptr5!c_dSCRATCH_15| *start y = read(dy) ; lalf dcvts csla csuxa ulsw;; ; ptr5;| *save dy for later use ; woea; dtor; ; ramwe rcsmsw ptr5; ; woea; dtor; ; ramwe rcslsw ptr5; ; ; dtor; ; ramwe ptr5; ; lbs csla csuxa usp; ; ; ; ptr5!c_dSCRATCH_14 ; ; ; ; ptr5;| *save y for later use ; las cslm woea; dtor; ; ramwe rcssp ptr5; ; ; dtor; ; ramwe ptr5; ptr5!c_sexpt3 ; ; ; ; rcssp ptr5;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -