📄 ssincos.u
字号:
; tioe tisp halt; titoreg; rcssp ptr5; ; ; ; ptr5; ptr5!c_dssin2 ; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; dmul mulacreg enrb loaddp halt; regtoti; rcslsw ptr5; ; dmul mulacreg; ; ptr5; ptr5!c_dssin1 ; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; dadd aluamul enrb loaddp halt; regtoti; rcslsw ptr5; ; dmul mulaalu mulbcreg; ; ; ; dmul mulaalu mulbcreg; ; ptr5; ptr5!c_dssin0 ; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; dadd aluamul enrb loaddp halt; regtoti; rcslsw ptr5; ; dmul mulaalu mulbcreg; ; ; ; dmul mulaalu mulbcreg; ; ptr5; ptr5!done ; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; drsub aluamul enrb loaddp halt; regtoti; rcslsw ptr5; ; drsub aluamul; ; ptr5; ptr5!0x700+0xD1 ; dnop enrb srccalu clkcc loaddp halt;regtoti; rcsmsw ptr5; ; dmul mulacreg enrb loaddp halt; regtoti; rcslsw ptr5; ; dmul mulacreg; ; ; ; dcvts aluamul; ; ; ; ; ; ptr5; ptr5!0x700+0xD6 ; tioe tisp halt; titoreg; rcssp ptr5; ; ; ; ptr5; ptr5!0x700+0xD0 ; i2cmp enra halt; regtoti; rcssp ptr5; ; ; ; ptr5; ptr5!c_sithree ; i2land enrb halt; regtoti; rcssp ptr5; ; ; ; ptr5; ptr5!c_sizero ; i2cmp enrb tioe tisp halt; ; ; ; ; ; ptr5;|* Route output to input RA ; i2cmp enra halt; regtoti; rcssp ptr5; ; ; ; ptr5; ptr5!c_sione jeq squad0; i2cmp enra halt; regtoti; rcssp ptr5; ; ; ; ptr5; ptr5!c_sitwo jeq squad1; i2cmp enra halt; regtoti; rcssp ptr5; ; ; ; ptr5; ptr5!0x700+0xD5 jeq squad2; sneg enra halt; regtoti; rcssp ptr5;|* squad3 from here on: ; ; ; ptr1; ; tioe tisp halt; titoreg; rcssp ptr1; ptr5!0x700+0xD6 ; ; regtotmp; rcssp ptr5; ; ; ; ptr4; call idle1; ; tmptoreg; rcssp ptr4;squad2: ; sneg halt; ; ; ; ; ; ptr4; ; tioe tisp halt; titoreg; rcssp ptr4; ptr5!0x700+0xD6 ; sneg enra halt; regtoti; rcssp ptr5; ; ; ; ptr1; call idle1; tioe tisp halt; titoreg; rcssp ptr1;squad1: ; snop enra halt; regtoti; rcssp ptr5; ; ; ; ptr1; ; tioe tisp halt; titoreg; rcssp ptr1; ptr5!0x700+0xD6 ; sneg enra halt; regtoti; rcssp ptr5; ; ; ; ptr4; call idle1; tioe tisp halt; titoreg; rcssp ptr4;squad0: ; ; ; ptr5; ptr5!0x700+0xD5 ; ; regtotmp; rcssp ptr5; ; ; ; ptr4; ; ; tmptoreg; rcssp ptr4; ptr5!0x700+0xD6 ; ; regtotmp; rcssp ptr5; ; ; ; ptr1; call idle1; ; tmptoreg; rcssp ptr1;sinckmode:|* Make sure rounding mode is the default: 2.|* The current rounding mode is stored at 0x700+0xF3|* The correct rounding mode is stored at 0x700+0xF2|* Do a single precision compare of both values and if they're|* not equal, goto hang ; ; ; rcssp ptr5; ptr5!0x700+0xF2 ; i2cmp enrb halt; regtoti; rcssp ptr5; ; ; ; ptr2; jne hang cstat; sabs enra halt; regtitmp; rcssp ptr2; ; sabs; ; ; ; snop srccalu clkcc tioe tisp; ; ; rtn; i2cmp enrb tioe tisp halt; ; ptr5; ptr5!sinf|* Huge argument reductionr_argred: ; ; ; ptr5; ptr5!c_si20 ; i2sftrl enrb halt; regtoti; rcssp ptr5; ; ; ; ; ; i2cmp enra tioe tisp halt; ; ptr5; ptr5!c_sibias ; i2sub enrb halt; regtoti; rcssp ptr5; ; ; ; ptr5; ptr5!0x700+0xD0|* k1 = (n - 26) / 24, but since we're in round to nearest mode, (and the fact that if k1<0, k1=0|* subtract 12 from the numerator before the division: k1 = (n - 38) / 24 ; i2cmp enra tioe tisp halt; titoreg; rcssp ptr5; ; ; ; ptr5; ptr5!c_si38 ; i2sub enrb halt; regtoti; rcssp ptr5; ; ; ; ; ; i2cmp enra tioe tisp halt; ; ; ; ; ; ptr5; ptr5!c_si24 ; idiv enrb halt; regtoti; rcssp ptr5; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; halt; ; ptr5; ptr5!0x700+0xDA ; i2cmp enra tioe tisp halt; titoreg; rcssp ptr5; ; ; ; ptr5; ptr5!szero ; i2cmp enrb halt; regtoti; rcssp ptr5; ; ; ; ptr5; ptr5!0x700+0xD0 jlt setk1eq0; i2cmp enra halt; regtoti; rcssp ptr5;contdiv:|* Here we need to adjust the numerator again:|* k2 = (n +60) / 24 and since n is always positive:|* k2 = (n + 60 - 12) / 24 ; ; ; ptr5; ptr5!c_si48 ; i2add enrb halt; regtoti; rcssp ptr5; ; ; ; ; ; i2cmp enra tioe tisp halt; ; ; ; ; ; ptr5; ptr5!c_si24 ; idiv enrb halt; regtoti; rcssp ptr5; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; halt; ; ptr5; ptr5!0x700+0xDB ; i2cmp enra tioe tisp halt; titoreg; rcssp ptr5; ; ; ; ptr5; ptr5!0x700+0xDA ; i2sub enrb halt; regtoti; rcssp ptr5; ; ; ; ptr5; ptr5!0x700+0xDC ; tioe tisp halt; titoreg; rcssp ptr5;|* Now do for loop, unrolled 8 times! i.e. up to i = 7|* For i= 0, q[0] = fv[k1] * x ; ; ; ptr5; ptr5!0x700+0xDA call forfv; i2cmp enra halt; regtoti; rcssp ptr5; ; dnop; ; ptr5; ptr5!0x700+0xE0 ; dnop tioe timsw halt; titoreg; rcsmsw ptr5; ; dnop tioe tilsw halt; titoreg; rcslsw ptr5;|* If i > k, continue algorithm. i = 1 here: ; ; ; ptr5; ptr5!0x700+0xDC ; i2cmp enra halt; regtoti; rcssp ptr5; ; ; ; ptr5; ptr5!c_sione ; i2cmp enrb halt; regtoti; rcssp ptr5; ; ; ; ptr5; ptr5!0x700+0xDA jlt contalg; i2add enra halt; regtoti; rcssp ptr5; ; ; ; ; call forfv; i2cmp enra tioe tisp halt; ; ; ; dnop; ; ptr5; ptr5!0x700+0xE1 ; dnop tioe timsw halt; titoreg; rcsmsw ptr5; ; dnop tioe tilsw halt; titoreg; rcslsw ptr5;|* If i > k, continue algorithm. i = 2 here: ; ; ; ptr5; ptr5!0x700+0xDC ; i2cmp enra halt; regtoti; rcssp ptr5; ; ; ; ptr5; ptr5!c_sitwo ; i2cmp enrb halt; regtoti; rcssp ptr5; ; ; ; ptr5; ptr5!0x700+0xDA jlt contalg; i2add enra halt; regtoti; rcssp ptr5; ; ; ; ; call forfv; i2cmp enra tioe tisp halt; ; ; ; dnop; ; ptr5; ptr5!0x700+0xE2 ; dnop tioe timsw halt; titoreg; rcsmsw ptr5; ; dnop tioe tilsw halt; titoreg; rcslsw ptr5;|* If i > k, continue algorithm. i = 3 here: ; ; ; ptr5; ptr5!0x700+0xDC ; i2cmp enra halt; regtoti; rcssp ptr5; ; ; ; ptr5; ptr5!c_sithree ; i2cmp enrb halt; regtoti; rcssp ptr5; ; ; ; ptr5; ptr5!0x700+0xDA jlt contalg; i2add enra halt; regtoti; rcssp ptr5; ; ; ; ; call forfv; i2cmp enra tioe tisp halt; ; ; ; dnop; ; ptr5; ptr5!0x700+0xE3 ; dnop tioe timsw halt; titoreg; rcsmsw ptr5; ; dnop tioe tilsw halt; titoreg; rcslsw ptr5;|* If i > k, continue algorithm. i = 4 here: ; ; ; ptr5; ptr5!0x700+0xDC ; i2cmp enra halt; regtoti; rcssp ptr5; ; ; ; ptr5; ptr5!c_sifour ; i2cmp enrb halt; regtoti; rcssp ptr5; ; ; ; ptr5; ptr5!0x700+0xDA jlt contalg; i2add enra halt; regtoti; rcssp ptr5; ; ; ; ; call forfv; i2cmp enra tioe tisp halt; ; ; ; dnop; ; ptr5; ptr5!0x700+0xE4 ; dnop tioe timsw halt; titoreg; rcsmsw ptr5; ; dnop tioe tilsw halt; titoreg; rcslsw ptr5;|* If i > k, continue algorithm. i = 5 here: ; ; ; ptr5; ptr5!0x700+0xDC ; i2cmp enra halt; regtoti; rcssp ptr5; ; ; ; ptr5; ptr5!c_sifive ; i2cmp enrb halt; regtoti; rcssp ptr5; ; ; ; ptr5; ptr5!0x700+0xDA jlt contalg; i2add enra halt; regtoti; rcssp ptr5; ; ; ; ; call forfv; i2cmp enra tioe tisp halt; ; ; ; dnop; ; ptr5; ptr5!0x700+0xE5 ; dnop tioe timsw halt; titoreg; rcsmsw ptr5; ; dnop tioe tilsw halt; titoreg; rcslsw ptr5;|* If i > k, continue algorithm. i = 6 here: ; ; ; ptr5; ptr5!0x700+0xDC ; i2cmp enra halt; regtoti; rcssp ptr5; ; ; ; ptr5; ptr5!c_sisix ; i2cmp enrb halt; regtoti; rcssp ptr5; ; ; ; ptr5; ptr5!0x700+0xDA jlt contalg; i2add enra halt; regtoti; rcssp ptr5; ; ; ; ; call forfv; i2cmp enra tioe tisp halt; ; ; ; dnop; ; ptr5; ptr5!0x700+0xE6 ; dnop tioe timsw halt; titoreg; rcsmsw ptr5; ; dnop tioe tilsw halt; titoreg; rcslsw ptr5;|* If i > k, continue algorithm. i = 7 here: ; ; ; ptr5; ptr5!0x700+0xDC ; i2cmp enra halt; regtoti; rcssp ptr5; ; ; ; ptr5; ptr5!c_siseven ; i2cmp enrb halt; regtoti; rcssp ptr5; ; ; ; ptr5; ptr5!0x700+0xDA jlt contalg; i2add enra halt; regtoti; rcssp ptr5; ; ; ; ; call forfv; i2cmp enra tioe tisp halt; ; ; ; dnop; ; ptr5; ptr5!0x700+0xE7 ; dnop tioe timsw halt; titoreg; rcsmsw ptr5; ; dnop tioe tilsw halt; titoreg; rcslsw ptr5;|* It should never get here! call hang; ; ; ;contalg:|*|* Now get q[0]: ; ; ; ptr5; ptr5!0x700+0xE0 ; dnop enra loaddp halt; regtoti; rcsmsw ptr5; ; dnop enra loaddp halt; regtoti; rcslsw ptr5; ; ; ; ptr5; ptr5!d1o8 ; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; dmul enrb loaddp halt; regtoti; rcslsw ptr5; ; dmul; ; ; ; dnop; ; ; ; dnop enra tioe timsw loaddp halt;; ; ; dnop enra tioe tilsw loaddp halt;; ; ; dnop; ; ptr5; ptr5!c_dtwo52 ; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; dcpmam enrb loaddp halt; regtoti; rcslsw ptr5; ; dnop; ; ptr5; ptr5!dzero jgt nochange; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; dcmp enrb loaddp halt; regtoti; rcslsw ptr5;|* get AINT(RA) ; dnop; ; ptr5;ptr5!c_dtwo52 jlt q0minus; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; dadd enrb loaddp halt; regtoti; rcslsw ptr5; ; dnop; ; ; ; dnop enra tioe timsw loaddp halt;; ; ; dsub enra tioe tilsw loaddp halt;; ; ; dsub; ; ptr5; ptr5!done ; dnop enra loaddp halt; regtoti; rcsmsw ptr5; ; drsub alubalu enra loaddp halt; regtoti; rcslsw ptr5; ; dnop; ; ; ; dnop enra tioe timsw loaddp halt;; ; ; dnop enra tioe tilsw loaddp halt;; ; ptr5!deightnochange: ; 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; ; drsub aluamul enrb loaddp halt; regtoti; rcslsw ptr5; ; dnop; ; ptr5; ; dnop tioe timsw halt; titoreg; rcsmsw ptr5; ; dnop tioe tilsw halt; titoreg; rcslsw ptr5;|* Now get new q[1]: ; dnop; ; ptr5; ptr5!0x700+0xE1 ; dnop enra loaddp halt; regtoti; rcsmsw ptr5; ; dnop enra loaddp halt; regtoti; rcslsw ptr5; ; dnop; ; ptr5; ptr5!d1o8 ; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; dmul enrb loaddp halt; regtoti; rcslsw ptr5; ; dmul; ; ; ; dnop; ; ; ; dnop enra tioe timsw loaddp halt;; ; ; dnop enra tioe tilsw loaddp halt;; ; ; dnop; ; ptr5; ptr5!c_dtwo52 ; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; dcpmam enrb loaddp halt; regtoti; rcslsw ptr5; ; dnop; ; ptr5; ptr5!dzero jgt qnochange; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; dcmp enrb loaddp halt; regtoti; rcslsw ptr5;|* get AINT(RA) ; dnop; ; ptr5; ptr5!c_dtwo52 jlt q1minus; dnop enrb loaddp halt; regtoti; rcsmsw ptr5; ; dadd enrb loaddp halt; regtoti; rcslsw ptr5; ; dnop; ; ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -