1309 lines
40 KiB
Plaintext
1309 lines
40 KiB
Plaintext
|*
|
|
|* Weitek Single Precision ALU Instructions
|
|
|*
|
|
|* Operations with two operands and one result
|
|
routine c.ssub w01010000000 lnop ssub
|
|
routine c.sdiff w01010000100 lnop sdiff
|
|
routine c.ssubm w01010001000 lnop ssubm
|
|
routine c.sadd w01010100000 lnop sadd
|
|
routine c.ssum w01010100100 lnop ssum
|
|
routine c.saddm w01010101000 lnop saddm
|
|
; las csla; reg; ; rcssp ptr3;
|
|
call wait3; lbsf fmap csla; reg; recclk; rcssp ptr1;
|
|
; csuxa usp; ; ; ;
|
|
; ; ; ; ptr1;
|
|
jwerr ser1 cstat;woea; dtor; ; ramwe rcssp ptr1;
|
|
call idle1; ; dtor; ; ramwe ptr1;
|
|
|* Operations with one operand and one result
|
|
routine c.sneg w01010010000 lnop sneg
|
|
routine c.sident w01010110000 lnop sident
|
|
routine c.sabs w01010111000 lnop sabs
|
|
routine c.sexct w01011100000 lnop sexct
|
|
routine c.swdnrm w01011100100 lnop swdnrm
|
|
routine c.sinxct w01011101000 lnop sinxct
|
|
routine c.sfloat w01011110100 lnop sfloat
|
|
; lasf fmap csla; reg; ; ;
|
|
call wait2; ; ; recclk; rcssp ptr1;
|
|
; csuxa usp; ; ; ;
|
|
; ; ; ; ptr1;
|
|
jwerr ser1 cstat;woea; dtor; ; ramwe rcssp ptr1;
|
|
call idle1; ; dtor; ; ramwe ptr1;
|
|
|* Operations with two operands and no result
|
|
routine c.scmp w01011000000 lnop scmp
|
|
routine c.scmpm w01011001000 lnop scmpm
|
|
; las csla; reg; ; rcssp ptr3;
|
|
call wait3; lbsf fmap csla; reg; ; ;
|
|
call wait1; csuxa usp; ; ; ;
|
|
jwerr werr cstat;woea; ; ; ;
|
|
call idle1; ; ; ; ;
|
|
|* Operations with one operand and no result
|
|
routine c.scmp0 w01011010000 lnop scmp0
|
|
call wait3; lasf fmap csla; reg; ; rcssp ptr3;
|
|
call wait1; csuxa usp; ; ; ;
|
|
jwerr werr cstat;woea; ; ; ;
|
|
call idle1; ; ; ; ;
|
|
|* Operations with one operand and one integer result (i.e. from l.s.
|
|
|* portion of Weitek chip)
|
|
routine c.scvtint w01011110000 lnop scvtint
|
|
; lasf fmap csla; reg; ; rcssp ptr3;
|
|
call wait2; ; ; recclk; rcssp ptr1;
|
|
; csuxa ulsw; ; ; ;
|
|
; ; ; ; ptr1;
|
|
jwerr ser1 cstat;woea; dtor; ; ramwe rcssp ptr1;
|
|
call idle1; ; dtor; ; ramwe ptr1;
|
|
|*
|
|
|* Weitek Double Precision ALU Instructions
|
|
|*
|
|
|* Operations with two operands and one result
|
|
routine c.dsub w01010000001 lnop dsub
|
|
routine c.ddiff w01010000101 lnop ddiff
|
|
routine c.dsubm w01010001001 lnop dsubm
|
|
routine c.dadd w01010100001 lnop dadd
|
|
routine c.dsum w01010100101 lnop dsum
|
|
routine c.daddm w01010101001 lnop daddm
|
|
; lam csla; reg; ; rcslsw ptr2;
|
|
; lal csla; reg; ; rcsmsw ptr3;
|
|
; lbm csla; reg; ; rcslsw ptr3;
|
|
; lblf fmap csla; reg; recclk; rcsmsw ptr1;
|
|
call wait2; ; ; recclk; rcslsw ptr1;
|
|
; csuxa umsw; ; ; ;
|
|
; csuxa ulsw; ; ; ptr1;
|
|
jwerr der1 cstat;woea; dtor; ; ramwe rcsmsw ptr1;
|
|
; woea; dtor; ; ramwe rcslsw ptr1;
|
|
call idle1; ; dtor; ; ramwe ptr1;
|
|
|* Operations with one operand and one result
|
|
routine c.dneg w01010010001 lnop dneg
|
|
routine c.dident w01010110001 lnop dident
|
|
routine c.dabs w01010111001 lnop dabs
|
|
routine c.dexct w01011100001 lnop dexct
|
|
routine c.dwdnrm w01011100101 lnop dwdnrm
|
|
routine c.dinxct w01011101001 lnop dinxct
|
|
routine c.dfloat w01011110101 lnop dfloat
|
|
; lam csla; reg; ; rcslsw ptr2;
|
|
; lalf fmap csla; reg; ; ;
|
|
; ; ; recclk; rcsmsw ptr1;
|
|
call wait1; ; ; recclk; rcslsw ptr1;
|
|
; csuxa umsw; ; ; ;
|
|
; csuxa ulsw; ; ; ptr1;
|
|
jwerr der1 cstat;woea; dtor; ; ramwe rcsmsw ptr1;
|
|
; woea; dtor; ; ramwe rcslsw ptr1;
|
|
call idle1; ; dtor; ; ramwe ptr1;
|
|
|* Operations with two operands and no result
|
|
routine c.dcmp w01011000001 lnop dcmp
|
|
routine c.dcmpm w01011001001 lnop dcmpm
|
|
; lam csla; reg; ; rcslsw ptr2;
|
|
; lal csla; reg; ; rcsmsw ptr3;
|
|
; lbm csla; reg; ; rcslsw ptr3;
|
|
call wait3; lblf fmap csla; reg; ; ;
|
|
call wait1; csuxa umsw; ; ; ;
|
|
jwerr werr cstat;woea; ; ; ;
|
|
call idle1; ; ; ; ;
|
|
|* Operations with one operand and no result
|
|
routine c.dcmp0 w01011010001 lnop dcmp0
|
|
; lam csla; reg; ; rcslsw ptr2;
|
|
call wait3; lalf fmap csla; reg; ; ;
|
|
call wait1; csuxa umsw; ; ; ;
|
|
jwerr werr cstat;woea; ; ; ;
|
|
call idle1; ; ; ; ;
|
|
|* Operations with one operand and one integer result (i.e. from l.s.
|
|
|* portion of Weitek chip)
|
|
routine c.dcvtint w01011110001 lnop dcvtint
|
|
; lam csla; reg; ; rcslsw ptr2;
|
|
; lalf fmap csla; reg; ; ;
|
|
; ; ; recclk; rcsmsw ptr1;
|
|
call wait1; ; ; ; rcslsw ptr1;
|
|
; csuxa ulsw; ; ; ;
|
|
; ; ; ; ptr1;
|
|
jwerr ser1 cstat;woea; dtor; ; ramwe rcssp ptr1;
|
|
call idle1; ; dtor; ; ramwe ptr1;
|
|
|*
|
|
|* Weitek Single Precision ALU Convert Instructions
|
|
|*
|
|
routine c.dcvts w01011111000 lnop dcvts
|
|
; lam csla; reg; ; rcslsw ptr2;
|
|
; lalf fmap csla; reg; ; ;
|
|
call wait2; ; ; recclk; rcsmsw ptr1;
|
|
; csuxa usp; ; ; ;
|
|
; ; ; ; ptr1;
|
|
jwerr ser1 cstat;woea; dtor; ; ramwe rcssp ptr1;
|
|
call idle1; ; dtor; ; ramwe ptr1;
|
|
routine c.scvtd w01011111001 lnop scvtd
|
|
; lasf fmap csla; reg; ; rcssp ptr3;
|
|
; ; ; recclk; rcsmsw ptr1;
|
|
call wait1; ; ; recclk; rcslsw ptr1;
|
|
; csuxa umsw; ; ; ;
|
|
; csuxa ulsw; ; ; ptr1;
|
|
jwerr der1 cstat;woea; dtor; ; ramwe rcsmsw ptr1;
|
|
; woea; dtor; ; ramwe rcslsw ptr1;
|
|
call idle1; ; dtor; ; ramwe ptr1;
|
|
|*
|
|
|* Weitek Single Precision ALU Divide Instructions
|
|
|*
|
|
routine c.sdiv w01010001100 lnop sdiv
|
|
routine c.sdiva w01010011100 lnop sdiva
|
|
routine c.sdivb w01010101100 lnop sdivb
|
|
routine c.sdivab w01010111100 lnop sdivab
|
|
; las csla; reg; ; rcssp ptr3; lpreg!13
|
|
|# (Note: 13 will cause a delay of 28)
|
|
call wait; lbsf fmap csla; reg; recclk; rcssp ptr1;
|
|
; csuxa usp; ; ; ;
|
|
; ; ; ; ptr1;
|
|
jwerr ser1 cstat;woea; dtor; ; ramwe rcssp ptr1;
|
|
call idle1; ; dtor; ; ramwe ptr1;
|
|
|*
|
|
|* Weitek Double Precision ALU Divide Instructions
|
|
|*
|
|
routine c.ddiv w01010001101 lnop ddiv
|
|
routine c.ddiva w01010011101 lnop ddiva
|
|
routine c.ddivb w01010101101 lnop ddivb
|
|
routine c.ddivab w01010111101 lnop ddivab
|
|
; lam csla; reg; ; rcslsw ptr2;
|
|
; lal csla; reg; ; rcsmsw ptr3;
|
|
; lbm csla; reg; ; rcslsw ptr3;
|
|
; lblf fmap csla; reg; recclk; rcsmsw ptr1; lpreg!27
|
|
|# (Note: 27 will cause a delay of 56)
|
|
call wait; ; ; recclk; rcslsw ptr1;
|
|
; csuxa umsw; ; ; ;
|
|
; csuxa ulsw; ; ; ptr1;
|
|
jwerr der1 cstat;woea; dtor; ; ramwe rcsmsw ptr1;
|
|
; woea; dtor; ; ramwe rcslsw ptr1;
|
|
call idle1; ; dtor; ; ramwe ptr1;
|
|
|*
|
|
|* Weitek Single Precision Multiply Instructions
|
|
|*
|
|
routine c.smul w01010000010 lnop smul
|
|
routine c.smwa w01010000110 lnop smwa
|
|
routine c.smwb w01010001010 lnop smwb
|
|
routine c.smwab w01010001110 lnop smwab
|
|
routine c.smma w01010010010 lnop smma
|
|
routine c.smmb w01010010110 lnop smmb
|
|
routine c.smmab w01010011010 lnop smmab
|
|
routine c.smn w01010011110 lnop smn
|
|
routine c.smwan w01010100010 lnop smwan
|
|
routine c.smwbn w01010100110 lnop smwbn
|
|
routine c.smwabn w01010101010 lnop smwabn
|
|
routine c.smman w01010101110 lnop smman
|
|
routine c.smmbn w01010110010 lnop smmbn
|
|
routine c.smmabn w01010110110 lnop smmabn
|
|
routine c.smwama w01010111010 lnop smwama
|
|
routine c.smwamb w01010111110 lnop smwamb
|
|
routine c.smwamab w01011000010 lnop smwamab
|
|
routine c.smwbma w01011000110 lnop smwbma
|
|
routine c.smwbmb w01011001010 lnop smwbmb
|
|
routine c.smwbmab w01011001110 lnop smwbmab
|
|
routine c.smwabma w01011010010 lnop smwabma
|
|
routine c.smwabmb w01011010110 lnop smwabmb
|
|
routine c.smwabmab w01011011010 lnop smwabmab
|
|
routine c.smwaman w01011011110 lnop smwaman
|
|
routine c.smwambn w01011100010 lnop smwambn
|
|
routine c.smwamabn w01011100110 lnop smwamabn
|
|
routine c.smwbman w01011101010 lnop smwbman
|
|
routine c.smwbmbn w01011101110 lnop smwbmbn
|
|
routine c.smwbmabn w01011110010 lnop smwbmabn
|
|
routine c.smwabman w01011110110 lnop smwabman
|
|
routine c.smwabmbn w01011111010 lnop smwabmbn
|
|
routine c.smwabmabn w01011111110 lnop smwabmabn
|
|
; las cslm; reg; ; rcssp ptr3;
|
|
call wait3; lbsf fmap cslm; reg; recclk; rcssp ptr1;
|
|
; csuxm usp; ; ; ;
|
|
; ; ; ; ptr1;
|
|
jwerr ser1 cstat;woem; dtor; ; ramwe rcssp ptr1;
|
|
call idle1; ; dtor; ; ramwe ptr1;
|
|
|*
|
|
|* Weitek Double Precision Multiply Instructions
|
|
|*
|
|
routine c.dmul w01010000011 lnop dmul
|
|
routine c.dmwa w01010000111 lnop dmwa
|
|
routine c.dmwb w01010001011 lnop dmwb
|
|
routine c.dmwab w01010001111 lnop dmwab
|
|
routine c.dmma w01010010011 lnop dmma
|
|
routine c.dmmb w01010010111 lnop dmmb
|
|
routine c.dmmab w01010011011 lnop dmmab
|
|
routine c.dmn w01010011111 lnop dmn
|
|
routine c.dmwan w01010100011 lnop dmwan
|
|
routine c.dmwbn w01010100111 lnop dmwbn
|
|
routine c.dmwabn w01010101011 lnop dmwabn
|
|
routine c.dmman w01010101111 lnop dmman
|
|
routine c.dmmbn w01010110011 lnop dmmbn
|
|
routine c.dmmabn w01010110111 lnop dmmabn
|
|
routine c.dmwama w01010111011 lnop dmwama
|
|
routine c.dmwamb w01010111111 lnop dmwamb
|
|
routine c.dmwamab w01011000011 lnop dmwamab
|
|
routine c.dmwbma w01011000111 lnop dmwbma
|
|
routine c.dmwbmb w01011001011 lnop dmwbmb
|
|
routine c.dmwbmab w01011001111 lnop dmwbmab
|
|
routine c.dmwabma w01011010011 lnop dmwabma
|
|
routine c.dmwabmb w01011010111 lnop dmwabmb
|
|
routine c.dmwabmab w01011011011 lnop dmwabmab
|
|
routine c.dmwaman w01011011111 lnop dmwaman
|
|
routine c.dmwambn w01011100011 lnop dmwambn
|
|
routine c.dmwamabn w01011100111 lnop dmwamabn
|
|
routine c.dmwbman w01011101011 lnop dmwbman
|
|
routine c.dmwbmbn w01011101111 lnop dmwbmbn
|
|
routine c.dmwbmabn w01011110011 lnop dmwbmabn
|
|
routine c.dmwabman w01011110111 lnop dmwabman
|
|
routine c.dmwabmbn w01011111011 lnop dmwabmbn
|
|
routine c.dmwabmabn w01011111111 lnop dmwabmabn
|
|
; lam cslm; reg; ; rcslsw ptr2;
|
|
; lal cslm; reg; ; rcslsw ptr3;
|
|
; lblf fmap cslm; reg; ; rcsmsw ptr3;
|
|
; lbm cslm; reg; recclk; rcsmsw ptr1;
|
|
call wait3; ; ; recclk; rcslsw ptr1;
|
|
; csuxm umsw; ; ; ;
|
|
; csuxm ulsw; ; ; ptr1;
|
|
jwerr der1 cstat;woem; dtor; ; ramwe rcsmsw ptr1;
|
|
; woem; dtor; ; ramwe rcslsw ptr1;
|
|
call idle1; ; dtor; ; ramwe ptr1;
|
|
|*
|
|
|* Single Precision Copy Register Instruction
|
|
|*
|
|
routine cs.cpreg w01000100000 lnop ssub
|
|
; ; ; recclk; ptr1;
|
|
; ; ; recoe; ramwe rcssp ptr1;
|
|
call idle1; ; ; recoe; ramwe ptr1;
|
|
|*
|
|
|* Double Precision Copy Register Instruction
|
|
|*
|
|
routine cd.cpreg w01000100001 lnop ssub
|
|
; ; ; recclk; rcslsw ptr2;
|
|
; ; ; ; ptr1;
|
|
; ; ; recoe; ramwe rcsmsw ptr1;
|
|
; ; ; recoe recclk;ramwe ptr1;
|
|
; ; ; recoe; ramwe rcslsw ptr1;
|
|
call idle1; ; ; recoe; ramwe ptr1;
|
|
|*
|
|
|* Reg 1 <- Reg 3 +/- (Reg 2 * Reg 4)
|
|
|* Single Precision Instruction
|
|
|*
|
|
routine cs.r3Ar2Mr4 w01000100010 lnop sadd
|
|
routine cs.r3Sr2Mr4 w01000100100 lnop ssub
|
|
; las cslm; reg; ; rcssp ptr4;
|
|
; lbsf smul cslm; reg; ; rcssp ptr3;
|
|
; las csla; reg; recclk; rcssp ptr1;
|
|
call wait1; ; reg; ; ;
|
|
call wait1; csuxm usp; ; ; ;
|
|
jwerr werr cstat;lbsf fmap csla woem; ; ; ;
|
|
call wait2; ; ; ; ;
|
|
; csuxa usp; ; ; ;
|
|
; ; ; ; ptr1;
|
|
jwerr ser1 cstat;woea; dtor; ; ramwe rcssp ptr1;
|
|
call idle1; ; dtor; ; ramwe ptr1;
|
|
|*
|
|
|* Reg 1 <- Reg 3 +/- (Reg 2 * Reg 4)
|
|
|* Double Precision Instruction
|
|
|*
|
|
routine cd.r3Ar2Mr4 w01000100011 lnop dadd
|
|
routine cd.r3Sr2Mr4 w01000100101 lnop dsub
|
|
; lam cslm; reg; ; rcslsw ptr2;
|
|
; lal cslm; reg; ; rcslsw ptr4;
|
|
; lblf dmul cslm; reg; ; rcsmsw ptr4;
|
|
; lbm cslm; reg; ; rcsmsw ptr3;
|
|
; lam csla; reg; ; rcslsw ptr3;
|
|
; lal csla; reg; recclk; rcsmsw ptr1;
|
|
call wait1; ; ; recclk; rcslsw ptr1;
|
|
; csuxm umsw; ; ; ;
|
|
; csuxm ulsw; ; ; ;
|
|
jwerr werr cstat;lbm csla woem; ; ; ;
|
|
; lblf fmap csla woem; ; ; ;
|
|
; ; ; ; ;
|
|
call xdfin.alu; ; ; ; ;
|
|
| ; ; ; ; ;
|
|
| ; csuxa umsw; ; ; ;
|
|
| ; csuxa ulsw; ; ; ptr1;
|
|
| jwerr der1 cstat;woea; dtor; ; ramwe rcsmsw ptr1;
|
|
| ; woea; dtor; ; ramwe rcslsw ptr1;
|
|
| call idle1; ; ; ; ramwe ptr1;
|
|
|*
|
|
|* Reg 1 <- - Reg 3 + (Reg 2 * Reg 4)
|
|
|* Single Precision Instruction
|
|
|*
|
|
routine cs.Nr3Ar2Mr4 w01000100110 lnop ssub
|
|
; las cslm; reg; ; rcssp ptr4;
|
|
; lbsf smul cslm; reg; ; rcssp ptr3;
|
|
; lbs csla; reg; recclk; rcssp ptr1;
|
|
call wait1; ; reg; ; ;
|
|
call wait1; csuxm usp; ; ; ;
|
|
jwerr werr cstat;lasf fmap csla woem; ; ; ;
|
|
call wait2; ; ; ; ;
|
|
; csuxa usp; ; ; ;
|
|
; ; ; ; ptr1;
|
|
jwerr ser1 cstat;woea; dtor; ; ramwe rcssp ptr1;
|
|
call idle1; ; dtor; ; ramwe ptr1;
|
|
|*
|
|
|* Reg 1 <- - Reg 3 + (Reg 2 * Reg 4)
|
|
|* Double Precision Instruction
|
|
|*
|
|
routine cd.Nr3Ar2Mr4 w01000100111 lnop dsub
|
|
; lam cslm; reg; ; rcslsw ptr2;
|
|
; lal cslm; reg; ; rcslsw ptr4;
|
|
; lblf dmul cslm; reg; ; rcsmsw ptr4;
|
|
; lbm cslm; reg; ; rcsmsw ptr3;
|
|
; lbm csla; reg; ; rcslsw ptr3;
|
|
; lbl csla; reg; recclk; rcsmsw ptr1;
|
|
call wait1; ; ; recclk; rcslsw ptr1;
|
|
; csuxm umsw; ; ; ;
|
|
; csuxm ulsw; ; ; ;
|
|
jwerr werr cstat;lam csla woem; ; ; ;
|
|
; lalf fmap csla woem; ; ; ;
|
|
; ; ; ; ;
|
|
call xdfin.alu; ; ; ; ;
|
|
| ; ; ; ; ;
|
|
| ; csuxa umsw; ; ; ;
|
|
| ; csuxa ulsw; ; ; ptr1;
|
|
| jwerr der1 cstat;woea; dtor; ; ramwe rcsmsw ptr1;
|
|
| ; woea; dtor; ; ramwe rcslsw ptr1;
|
|
| call idle1; ; ; ; ramwe ptr1;
|
|
|*
|
|
|* Reg 1 <- Reg 3 * (Reg 2 +/- Reg 4)
|
|
|* Single Precision Instruction
|
|
|*
|
|
routine cs.r3Mr2Ar4 w01000101000 lnop sadd
|
|
routine cs.r3Mr2Sr4 w01000101010 lnop ssub
|
|
; las csla; reg; ; rcssp ptr4;
|
|
; lbsf fmap csla; reg; ; rcssp ptr3;
|
|
call wait2; las cslm; reg; recclk; rcssp ptr1;
|
|
call wait1; csuxa usp; ; ; ;
|
|
jwerr werr cstat;lbsf smul cslm woea; ; ; ;
|
|
call wait2; ; ; ; ;
|
|
; csuxm usp; ; ; ;
|
|
; ; ; ; ptr1;
|
|
jwerr ser1 cstat;woem; dtor; ; ramwe rcssp ptr1;
|
|
call idle1; ; dtor; ; ramwe ptr1;
|
|
|*
|
|
|* Reg 1 <- Reg 3 * (Reg 2 +/- Reg 4)
|
|
|* Double Precision Instruction
|
|
|*
|
|
routine cd.r3Mr2Ar4 w01000101001 lnop dadd
|
|
routine cd.r3Mr2Sr4 w01000101011 lnop dsub
|
|
; lam csla; reg; ; rcslsw ptr2;
|
|
; lal csla; reg; ; rcsmsw ptr4;
|
|
; lbm csla; reg; ; rcslsw ptr4;
|
|
; lblf fmap csla; reg; ; rcsmsw ptr3;
|
|
; lam cslm; reg; ; rcslsw ptr3;
|
|
; lal cslm; reg; recclk; rcsmsw ptr1;
|
|
; ; ; ; ;
|
|
; csuxa ulsw; ; recclk; rcslsw ptr1;
|
|
; csuxa umsw; ; ; ;
|
|
jwerr werr cstat;lblf dmul cslm woea; ; ; ;
|
|
; lbm cslm woea; ; ; ;
|
|
call xdfin.mul; ; ; ; ;
|
|
| ; ; ; ; ;
|
|
| ; ; ; ; ;
|
|
| ; ; ; ; ;
|
|
| ; csuxm umsw; ; ; ;
|
|
| ; csuxm ulsw; ; ; ptr1;
|
|
| jwerr der1 cstat;woem; dtor; ; ramwe rcsmsw ptr1;
|
|
| ; woem; dtor; ; ramwe rcslsw ptr1;
|
|
| call idle1; ; ; ; ramwe ptr1;
|
|
|*
|
|
|* Reg 1 <- Reg 3 * (-Reg 2 + Reg 4)
|
|
|* Single Precision Instruction
|
|
|*
|
|
routine cs.r3MNr2Ar4 w01000101100 lnop ssub
|
|
; lbs csla; reg; ; rcssp ptr4;
|
|
; lasf fmap csla; reg; ; rcssp ptr3;
|
|
call wait2; las cslm; reg; recclk; rcssp ptr1;
|
|
call wait1; csuxa usp; ; ; ;
|
|
jwerr werr cstat;lbsf smul cslm woea; ; ; ;
|
|
call wait2; ; ; ; ;
|
|
; csuxm usp; ; ; ;
|
|
; ; ; ; ptr1;
|
|
jwerr ser1 cstat;woem; dtor; ; ramwe rcssp ptr1;
|
|
call idle1; ; dtor; ; ramwe ptr1;
|
|
|*
|
|
|* Reg 1 <- Reg 3 * (-Reg 2 + Reg 4)
|
|
|* Double Precision Instruction
|
|
|*
|
|
routine cd.r3MNr2Ar4 w01000101101 lnop dsub
|
|
; lbm csla; reg; ; rcslsw ptr2;
|
|
; lbl csla; reg; ; rcsmsw ptr4;
|
|
; lam csla; reg; ; rcslsw ptr4;
|
|
; lalf fmap csla; reg; ; rcsmsw ptr3;
|
|
; lam cslm; reg; ; rcslsw ptr3;
|
|
call wait1; lal cslm; reg; recclk; rcsmsw ptr1;
|
|
; csuxa ulsw; ; recclk; rcslsw ptr1;
|
|
; csuxa umsw; ; ; ;
|
|
jwerr werr cstat;lblf dmul cslm woea; ; ; ;
|
|
; lbm cslm woea; ; ; ;
|
|
call xdfin.mul; ; ; ; ;
|
|
| ; ; ; ; ;
|
|
| ; ; ; ; ;
|
|
| ; ; ; ; ;
|
|
| ; csuxm umsw; ; ; ;
|
|
| ; csuxm ulsw; ; ; ptr1;
|
|
| jwerr der1 cstat;woem; dtor; ; ramwe rcsmsw ptr1;
|
|
| ; woem; dtor; ; ramwe rcslsw ptr1;
|
|
| call idle1; ; ; ; ramwe ptr1;
|
|
|*
|
|
|* Reg 1 <- (Reg 2 * Reg 3) + (Reg 2 + 1 * Reg 3 + 1)
|
|
|* Single Precision Instruction
|
|
|*
|
|
routine cs.X2 w01000101110 lnop smul
|
|
; las cslm; reg; ; rcssp ptr3;
|
|
; lbsf smul cslm; reg; recclk; rcssp ptr1; ptr2+
|
|
; ; ; ; ; ptr3+
|
|
; ; ; ; ;
|
|
; ; ; ; rcssp ptr2;
|
|
; las cslm; reg; ; rcssp ptr3;
|
|
; lbsf smul cslm; reg; ; ;
|
|
call wait1; csuxm usp; ; ; ;
|
|
jwerr werr cstat;las csla woem; ; ; ;
|
|
; csuxm usp; ; ; ;
|
|
; ; ; ; ;
|
|
jwerr werr cstat;lbsf sadd csla woem; ; ; ;
|
|
call wait2; ; ; ; ;
|
|
; csuxa usp; ; ; ;
|
|
; ; ; ; ptr1;
|
|
jwerr ser1 cstat;woea; dtor; ; ramwe rcssp ptr1;
|
|
call idle1; ; dtor; ; ramwe ptr1;
|
|
|*
|
|
|* Reg 1 <- (Reg 2 * Reg 3) + (Reg 2 + 1 * Reg 3 + 1)
|
|
|* Double Precision Instruction
|
|
|*
|
|
routine cd.X2 w01000101111 lnop dmul
|
|
; lam cslm; reg; ; rcslsw ptr2;
|
|
; lal cslm; reg; ; rcslsw ptr3;
|
|
; lblf dmul cslm; reg; ; rcsmsw ptr3;
|
|
; lbm cslm; reg; recclk; rcsmsw ptr1; ptr2+
|
|
; ; ; recclk; rcslsw ptr1; ptr3+
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; rcsmsw ptr2;
|
|
; lam cslm; reg; ; rcslsw ptr2;
|
|
; lal cslm; reg; ; rcslsw ptr3;
|
|
; lbl cslm; reg; ; rcsmsw ptr3;
|
|
; lbmf dmul cslm; reg; ; ;
|
|
; csuxm umsw; ; ; ;
|
|
; csuxm ulsw; ; ; ;
|
|
jwerr werr cstat;lam csla woem; ; ; ;
|
|
; lal csla woem; ; ; ;
|
|
; ; ; ; ;
|
|
; csuxm umsw; ; ; ;
|
|
; csuxm ulsw; ; ; ;
|
|
jwerr werr cstat;lbm csla woem; ; ; ;
|
|
; lblf dadd csla woem; ; ; ;
|
|
; ; ; ; ;
|
|
call xdfin.alu; ; ; ; ;
|
|
| ; ; ; ; ;
|
|
| ; csuxa umsw; ; ; ;
|
|
| ; csuxa ulsw; ; ; ptr1;
|
|
| jwerr der1 cstat;woea; dtor; ; ramwe rcsmsw ptr1;
|
|
| ; woea; dtor; ; ramwe rcslsw ptr1;
|
|
| call idle1; ; dtor; ; ramwe ptr1;
|
|
|*
|
|
|* Reg 1 <- (Reg 2 * Reg 3) + (Reg 2 + 1 * Reg 3 + 1) +
|
|
|* (Reg 2 + 2 * Reg 3 + 2)
|
|
|* Single Precision Instruction
|
|
|*
|
|
routine cs.X3 w01000110000 lnop smul
|
|
; las cslm; reg; ; rcssp ptr3;
|
|
; lbsf smul cslm; reg; recclk; rcssp ptr1; ptr2+
|
|
call wait1; ; ; ; ; ptr3+
|
|
; ; ; ; rcssp ptr2;
|
|
; las cslm; reg; ; rcssp ptr3;
|
|
; lbsf smul cslm; reg; ; ; ptr2+
|
|
; csuxm usp; ; ; ; ptr3+
|
|
; ; ; ; ;
|
|
jwerr werr cstat;las csla woem; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; rcssp ptr2;
|
|
; las cslm; reg; ; rcssp ptr3;
|
|
; lbsf smul cslm; reg; ; ;
|
|
; csuxm usp; ; ; ;
|
|
; ; ; ; ;
|
|
jwerr werr cstat;lbsf sadd csla woem; ; ; ;
|
|
; ; ; ; ;
|
|
call wait1; csuxm usp; ; ; ;
|
|
; lbs csla woem; ; ; ;
|
|
call wait1; lasf sadd csla csuxa usp;; ; ;
|
|
jwerr werr cstat;woea; ; ; ;
|
|
; ; ; ; ;
|
|
; csuxa usp; ; ; ;
|
|
; ; ; ; ptr1;
|
|
jwerr ser1 cstat;woea; dtor; ; ramwe rcssp ptr1;
|
|
call idle1; ; dtor; ; ramwe ptr1;
|
|
|*
|
|
|* Reg 1 <- (Reg 2 * Reg 3) + (Reg 2 + 1 * Reg 3 + 1) +
|
|
|* (Reg 2 + 2 * Reg 3 + 2)
|
|
|* Double Precision Instruction
|
|
|*
|
|
routine cd.X3 w01000110001 lnop smul
|
|
; lam cslm; reg; ; rcslsw ptr2;
|
|
; lal cslm; reg; ; rcslsw ptr3;
|
|
; lblf dmul cslm; reg; ; rcsmsw ptr3;
|
|
; lbm cslm; reg; recclk; rcsmsw ptr1; ptr2+
|
|
; ; reg; recclk; rcslsw ptr1; ptr3+
|
|
call wait1; ; reg; ; ;
|
|
; ; ; ; rcsmsw ptr2;
|
|
; lam cslm; reg; ; rcslsw ptr2;
|
|
; lal cslm; reg; ; rcsmsw ptr3;
|
|
; lbm cslm; reg; ; rcslsw ptr3;
|
|
; lblf dmul cslm; reg; ; ; ptr2+
|
|
; csuxm umsw; ; ; ; ptr3+
|
|
; csuxm ulsw; ; ; ;
|
|
jwerr werr cstat;lam csla woem; ; ; ;
|
|
; lal csla woem; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; rcsmsw ptr2;
|
|
; lam cslm; reg; ; rcslsw ptr2;
|
|
; lal cslm; reg; ; rcsmsw ptr3;
|
|
; lbm cslm; reg; ; rcslsw ptr3;
|
|
; lblf dmul cslm; reg; ; ;
|
|
; csuxm umsw; ; ; ;
|
|
; csuxm ulsw; ; ; ;
|
|
jwerr werr cstat;lbm csla woem; ; ; ;
|
|
; lblf dadd csla woem; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; csuxm umsw; ; ; ;
|
|
; csuxm ulsw; ; ; ;
|
|
jwerr werr cstat;lam csla woem; ; ; ;
|
|
; lal csla woem; ; ; ;
|
|
; lbm csla csuxa umsw; ; ; ;
|
|
; lblf dadd csla csuxa ulsw;; ; ;
|
|
jwerr werr cstat;woea; ; ; ;
|
|
call xdfin.alu; ; ; ; ;
|
|
| ; ; ; ; ;
|
|
| ; csuxa umsw; ; ; ;
|
|
| ; csuxa ulsw; ; ; ptr1;
|
|
| jwerr der1 cstat;woea; dtor; ; ramwe rcsmsw ptr1;
|
|
| ; woea; dtor; ; ramwe rcslsw ptr1;
|
|
| call idle1; ; dtor; ; ramwe ptr1;
|
|
|*
|
|
|* Reg 1 <- (Reg 2 * Reg 3) + (Reg 2 + 1 * Reg 3 + 1) +
|
|
|* (Reg 2 + 2 * Reg 3 + 2) + (Reg 2 + 3 * Reg 2 + 3)
|
|
|* Single Precision Instruction
|
|
|*
|
|
routine cs.X4 w01000110010 lnop smul
|
|
; las cslm; reg; ; rcssp ptr3;
|
|
; lbsf smul cslm; reg; recclk; rcssp ptr1; ptr2+
|
|
call wait2; ; reg; ; ; ptr3+
|
|
; ; ; ; rcssp ptr2;
|
|
; las cslm; reg; ; rcssp ptr3;
|
|
; lbsf smul cslm; reg; ; ; ptr2+
|
|
; csuxm usp; ; ; ; ptr3+
|
|
; ; ; ; ;
|
|
jwerr werr cstat;las csla woem; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; rcssp ptr2;
|
|
; las cslm; reg; ; rcssp ptr3;
|
|
; lbsf smul cslm; reg; ; ; ptr2+
|
|
; csuxm usp; ; ; ; ptr3+
|
|
; ; ; ; ;
|
|
jwerr werr cstat;lbsf sadd csla woem; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; rcssp ptr2;
|
|
; las cslm; reg; ; rcssp ptr3;
|
|
; lbsf smul cslm; reg; ; ;
|
|
call wait1; csuxm usp; ; ; ;
|
|
jwerr werr cstat;lbs csla woem; ; ; ;
|
|
; lasf sadd csla csuxa usp;; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
jwerr werr cstat;csuxm usp woea; ; ; ;
|
|
; ; ; ; ;
|
|
jwerr werr cstat;lbs csla woem; ; ; ;
|
|
; lasf sadd csla csuxa usp;; ; ;
|
|
; ; ; ; ;
|
|
jwerr werr cstat;woea; ; ; ;
|
|
; ; ; ; ;
|
|
; csuxa usp; ; ; ;
|
|
; ; ; ; ptr1;
|
|
jwerr ser1 cstat;woea; dtor; ; ramwe rcssp ptr1;
|
|
call idle1; ; dtor; ; ramwe ptr1;
|
|
|*
|
|
|* Reg 1 <- (Reg 2 * Reg 3) + (Reg 2 + 1 * Reg 3 + 1) +
|
|
|* (Reg 2 + 2 * Reg 3 + 2) + (Reg 2 + 3 * Reg 2 + 3)
|
|
|* Double Precision Instruction
|
|
|*
|
|
routine cd.X4 w01000110011 lnop dmul
|
|
; lam cslm; reg; ; rcslsw ptr2;
|
|
; lal cslm; reg; ; rcslsw ptr3;
|
|
; lblf dmul cslm; reg; ; rcsmsw ptr3;
|
|
; lbm cslm; reg; recclk; rcsmsw ptr1; ptr2+
|
|
; ; reg; recclk; rcslsw ptr1; ptr3+
|
|
; ; reg; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; rcsmsw ptr2;
|
|
; lam cslm; reg; ; rcslsw ptr2;
|
|
; lal cslm; reg; ; rcsmsw ptr3;
|
|
; lbm cslm; reg; ; rcslsw ptr3;
|
|
; lblf dmul cslm; reg; ; ; ptr2+
|
|
; csuxm umsw; ; ; ; ptr3+
|
|
; csuxm ulsw; ; ; ;
|
|
jwerr werr cstat;lam csla woem; ; ; ;
|
|
; lal csla woem; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; rcsmsw ptr2;
|
|
; lam cslm; reg; ; rcslsw ptr2;
|
|
; lal cslm; reg; ; rcsmsw ptr3;
|
|
; lbm cslm; reg; ; rcslsw ptr3;
|
|
; lblf dmul cslm; reg; ; ; ptr2+
|
|
; csuxm umsw; ; ; ; ptr3+
|
|
; csuxm ulsw; ; ; ;
|
|
jwerr werr cstat;lbm csla woem; ; ; ;
|
|
; lblf dadd csla woem; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; rcsmsw ptr2;
|
|
; lam cslm; reg; ; rcslsw ptr2;
|
|
; lal cslm; reg; ; rcsmsw ptr3;
|
|
; lbm cslm; reg; ; rcslsw ptr3;
|
|
; lblf dmul cslm; reg; ; ;
|
|
; csuxm umsw; ; ; ; ptr2+
|
|
; csuxm ulsw; ; ; ; ptr3+
|
|
jwerr werr cstat;lam csla woem; ; ; ;
|
|
; lal csla woem; ; ; ;
|
|
; lbm csla csuxa umsw; ; ; ;
|
|
; lblf dadd csla csuxa ulsw;; ; ;
|
|
jwerr werr cstat;woea; ; ; ;
|
|
; csuxm umsw; ; ; ;
|
|
; csuxm ulsw; ; ; ;
|
|
jwerr werr cstat;lam csla woem; ; ; ;
|
|
; lal csla woem; ; ; ;
|
|
; ; ; ; ;
|
|
; lbm csla csuxa umsw; ; ; ;
|
|
; lblf dadd csla csuxa ulsw;; ; ;
|
|
jwerr werr cstat;woea; ; ; ;
|
|
call xdfin.alu; ; ; ; ;
|
|
| ; ; ; ; ;
|
|
| ; csuxa umsw; ; ; ;
|
|
| ; csuxa ulsw; ; ; ptr1;
|
|
| jwerr der1 cstat;woea; dtor; ; ramwe rcsmsw ptr1;
|
|
| ; woea; dtor; ; ramwe rcslsw ptr1;
|
|
| call idle1; ; dtor; ; ramwe ptr1;
|
|
|*
|
|
|* 2 x 2, 3 x 3, 4 x 4 Matrix Move
|
|
|* Single Precision
|
|
|*
|
|
routine cs.MV2 w01001100010 lnop ssub
|
|
; ; ; ; ; lpreg!4
|
|
call msmovelp; ; ; recclk; rcssp ptr2;
|
|
routine cs.MV3 w01001100100 lnop ssub
|
|
; ; ; ; ; lpreg!9
|
|
call msmovelp; ; ; recclk; rcssp ptr2;
|
|
routine cs.MV4 w01001100110 lnop ssub
|
|
; ; ; ; ; lpreg!16
|
|
call msmovelp; ; ; recclk; rcssp ptr2;
|
|
msmovelp:
|
|
; ; ; recclk; ptr1; ptr2+
|
|
; ; ; recoe; ramwe rcssp ptr1; lpreg-
|
|
jloop msmovelp; ; ; recoe; ramwe ptr1; ptr1+
|
|
; ; ; recclk; rcssp ptr2;
|
|
call idle1; ; ; ; ;
|
|
|
|
|*
|
|
|* 2 x 2, 3 x 3, 4 x 4 Matrix Move
|
|
|* Double Precision
|
|
|*
|
|
routine cd.MV2 w01001100011 lnop ssub
|
|
; ; ; ; ; lpreg!4
|
|
call mdmovelp; ; ; recclk; rcsmsw ptr2;
|
|
routine cd.MV3 w01001100101 lnop ssub
|
|
; ; ; ; ; lpreg!9
|
|
call mdmovelp; ; ; recclk; rcsmsw ptr2;
|
|
routine cd.MV4 w01001100111 lnop ssub
|
|
; ; ; ; ; lpreg!16
|
|
call mdmovelp; ; ; recclk; rcsmsw ptr2;
|
|
|* move matrix at ptr2 to ptr1
|
|
mdmovelp:
|
|
; ; ; recclk; rcslsw ptr2;
|
|
; ; ; ; ptr1; ptr2+
|
|
; ; ; recoe; ramwe rcsmsw ptr1; lpreg-
|
|
; ; ; recoe recclk;ramwe ptr1;
|
|
; ; ; recoe; ramwe rcslsw ptr1;
|
|
jloop mdmovelp; ; ; recoe; ramwe ptr1;
|
|
; ; ; recclk; rcsmsw ptr2; ptr1+
|
|
call idle1; ; ; ; ;
|
|
|*
|
|
|* 2 x 2 Matrix Transpose
|
|
|* Single Precision
|
|
|*
|
|
routine cs.TR2 w01001101000 lnop ssub
|
|
; ; ; ; ; ptr5!c_dSCRATCH_0
|
|
; ; ; ; ; lpreg!2
|
|
call tsmovelp; ; ; ; ; ptr1+
|
|
; ; ; ; ; ptr5!c_dSCRATCH_0
|
|
call tsmove; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_1
|
|
call tsmove; ; ; ; ;
|
|
call idle1; ; ; ; ;
|
|
|*
|
|
|* 3 x 3 Matrix Transpose
|
|
|* Single Precision
|
|
|*
|
|
routine cs.TR2 w01001101010 lnop ssub
|
|
; ; ; ; ; ptr5!c_dSCRATCH_0
|
|
; ; ; ; ; lpreg!7
|
|
call tsmovelp; ; ; ; ; ptr1+
|
|
; ; ; ; ; ptr5!c_dSCRATCH_4
|
|
call tsmove; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_1
|
|
call tsmove; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_6
|
|
call tsmove; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_3
|
|
call tsmove; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_0
|
|
call tsmove; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_5
|
|
call tsmove; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_2
|
|
call tsmove; ; ; ; ;
|
|
call idle1; ; ; ; ;
|
|
|*
|
|
|* 4 x 4 Matrix Transpose
|
|
|* Single Precision
|
|
|*
|
|
routine cs.TR2 w01001101100 lnop ssub
|
|
; ; ; ; ; ptr5!c_dSCRATCH_0
|
|
; ; ; ; ; lpreg!14
|
|
call tsmovelp; ; ; ; ; ptr1+
|
|
; ; ; ; ; ptr5!c_dSCRATCH_10
|
|
call tsmove; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_6
|
|
call tsmove; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_2
|
|
call tsmove; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_13
|
|
call tsmove; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_9
|
|
call tsmove; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_5
|
|
call tsmove; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_1
|
|
call tsmove; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_12
|
|
call tsmove; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_8
|
|
call tsmove; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_4
|
|
call tsmove; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_0
|
|
call tsmove; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_11
|
|
call tsmove; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_7
|
|
call tsmove; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_3
|
|
call tsmove; ; ; ; ;
|
|
call idle1; ; ; ; ;
|
|
|* move matrix at ptr1 to ptr5
|
|
|* ptr5 is incremented before the loop
|
|
|* ptr1 is incremented after the loop
|
|
tsmovelp:
|
|
; ; ; ; ; ptr5-
|
|
tsmovelp2:
|
|
; ; ; recclk; rcssp ptr1; ptr5+
|
|
; ; ; recclk; ptr5; lpreg-
|
|
jloop tsmovelp2;; ; recoe; ramwe rcssp ptr5; ptr1+
|
|
rtn; ; ; recoe; ramwe ptr5;
|
|
|* move data at ptr5 to ptr1
|
|
|* ptr1 is decremented before the loop
|
|
|* ptr5 is decremented after the loop
|
|
tsmove:
|
|
; ; ; recclk; rcssp ptr5; ptr1-
|
|
; ; ; recclk; ptr1;
|
|
; ; ; recoe; ramwe rcssp ptr1; ptr5-
|
|
rtn; ; ; recoe; ramwe ptr1;
|
|
|*
|
|
|* 2 x 2 Matrix Transpose
|
|
|* Double Precision
|
|
|*
|
|
routine cd.TR2 w01001101001 lnop ssub
|
|
; ; ; ; ; ptr5!c_dSCRATCH_0
|
|
; ; ; ; ; lpreg!2
|
|
call tdmovelp; ; ; ; ; ptr1+
|
|
; ; ; ; ; ptr5!c_dSCRATCH_0
|
|
call tdmove; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_1
|
|
call tdmove; ; ; ; ;
|
|
call idle1; ; ; ; ;
|
|
|*
|
|
|* 3 x 3 Matrix Transpose
|
|
|* Double Precision
|
|
|*
|
|
routine cd.TR2 w01001101011 lnop ssub
|
|
; ; ; ; ; ptr5!c_dSCRATCH_0
|
|
; ; ; ; ; lpreg!7
|
|
call tdmovelp; ; ; ; ; ptr1+
|
|
; ; ; ; ; ptr5!c_dSCRATCH_4
|
|
call tdmove; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_1
|
|
call tdmove; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_6
|
|
call tdmove; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_3
|
|
call tdmove; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_0
|
|
call tdmove; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_5
|
|
call tdmove; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_2
|
|
call tdmove; ; ; ; ;
|
|
call idle1; ; ; ; ;
|
|
|*
|
|
|* 4 x 4 Matrix Transpose
|
|
|* Double Precision
|
|
|*
|
|
routine cd.TR2 w01001101101 lnop ssub
|
|
; ; ; ; ; ptr5!c_dSCRATCH_0
|
|
; ; ; ; ; lpreg!14
|
|
call tdmovelp; ; ; ; ; ptr1+
|
|
; ; ; ; ; ptr5!c_dSCRATCH_10
|
|
call tdmove; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_6
|
|
call tdmove; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_2
|
|
call tdmove; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_13
|
|
call tdmove; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_9
|
|
call tdmove; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_5
|
|
call tdmove; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_1
|
|
call tdmove; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_12
|
|
call tdmove; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_8
|
|
call tdmove; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_4
|
|
call tdmove; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_0
|
|
call tdmove; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_11
|
|
call tdmove; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_7
|
|
call tdmove; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_3
|
|
call tdmove; ; ; ; ;
|
|
call idle1; ; ; ; ;
|
|
|* move matrix at ptr1 to ptr5
|
|
tdmovelp:
|
|
; ; ; ; ; ptr5-
|
|
tdmovelp2:
|
|
; ; ; recclk; rcsmsw ptr1; ptr5+
|
|
; ; ; recclk; rcslsw ptr1;
|
|
; ; ; ; ptr5; lpreg-
|
|
; ; ; recoe; ramwe rcsmsw ptr5; ptr1+
|
|
; ; ; recoe recclk;ramwe ptr5;
|
|
jloop tdmovelp2;; ; recoe; ramwe rcslsw ptr5;
|
|
rtn; ; ; recoe; ramwe ptr5;
|
|
|* move data at ptr5 to ptr1
|
|
tdmove:
|
|
; ; ; recclk; rcsmsw ptr5; ptr1-
|
|
; ; ; recclk; rcslsw ptr5;
|
|
; ; ; ; ptr1;
|
|
; ; ; recoe; ramwe rcsmsw ptr1;
|
|
; ; ; recoe recclk;ramwe ptr5;
|
|
; ; ; recoe; ramwe rcslsw ptr1;
|
|
rtn; ; ; recoe; ramwe ptr1; ptr5-
|
|
|*
|
|
|* Update Shadow Registers
|
|
|*
|
|
routine c.update w01001110001 lnop ssub
|
|
; ; ; ; ; lpreg!8
|
|
|
|
usr.loop:
|
|
; ; ; recclk; rcsmsw ptr1;
|
|
; ; ; recclk; rcslsw ptr1;
|
|
; ; ; ; ptr1;
|
|
; ; ; recoe; ramwe rcsmsw ptr1; lpreg-
|
|
; ; ; recoe recclk;ramwe ptr1;
|
|
jloop usr.loop; ; ; recoe; ramwe rcslsw ptr1;
|
|
; ; ; recoe; ramwe ptr1; ptr1+
|
|
call idle1; ; ; ; ;
|
|
|*
|
|
|* Load Weitek Mode Control Bits 3-0
|
|
|*
|
|
routine c.ld3.0 w0100011010x las ssub
|
|
| *save the value (checked in transcendentals)
|
|
; ; ; ; ; ptr5!szero
|
|
; ; ; ; rcssp ptr5;
|
|
call wait3; lbsf scmp csla; reg; ; ;
|
|
; csuxa usp; ; ; ;
|
|
; ; ; ; ;
|
|
jlt werr; woea; ; ; ;
|
|
; ; ; ; ; ptr5!c_smaxmode
|
|
; ; ; ; rcssp ptr5;
|
|
call wait3; lbsf scmp csla; reg; ; ;
|
|
; csuxa usp; ; ; ;
|
|
; ; ; ; ;
|
|
jgt werr; woea; ; ; ;
|
|
; ; ; ; ; ptr5!c_dmode
|
|
; ; ; ; ptr5;
|
|
; ; opdsp dtor; ; ramwe rcssp ptr5;
|
|
; ; opdsp dtor; ; ramwe ptr5;
|
|
call idle1; lmodeusr cslmac; ; ; ; mreg!
|
|
|*
|
|
|* Load LED Register With 0x1555 And Hang
|
|
|*
|
|
|routine c.led155 w01001011100 lnop ssub
|
|
| ; ; ; ; ; ptr5!0x1555
|
|
| call hang; ; ; ; ;
|
|
|*
|
|
|* Load LED Register With 0x2AAA And Hang
|
|
|*
|
|
|routine c.led2AA w01001011101 lnop ssub
|
|
| ; ; ; ; ; ptr5!0x2AAA
|
|
| call hang; ; ; ; ;
|
|
|*
|
|
|* Load LED Register With 0x777
|
|
|* Set the Register Ram Select to X
|
|
|* Set the Wdata Select to X & 3
|
|
|* And Hang
|
|
|*
|
|
routine l.diag0 w01110010000 lnop ssub
|
|
call .; ; ; ; ;
|
|
routine c.regsel0 w01001000001 lnop ssub
|
|
; ; ; ; ;
|
|
; ; ; ; ; ptr5!0x777
|
|
hng; ; reg; ; ldptr;
|
|
call idle1; ; ; ; ;
|
|
routine l.diag1 w01110010001 lnop ssub
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
jclr clp idl2; ; ; ; ;
|
|
routine c.regsel1 w01001000011 lnop ssub
|
|
; ; ; ; ;
|
|
; ; ; ; ; ptr5!0x777
|
|
hng; ; reg; ; ptr1;
|
|
call idle1; ; ; ; ;
|
|
routine l.diag2 w01110010010 lnop ssub
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
jclr clp idl2; ; ; ; ;
|
|
routine c.regsel2 w01001000101 lnop ssub
|
|
; ; ; ; ;
|
|
; ; ; ; ; ptr5!0x777
|
|
hng; ; opdmsw; ; ptr2;
|
|
call idle1; ; ; ; ;
|
|
routine l.diag3 w01110010011 lnop ssub
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
jclr clp idl2; ; ; ; ;
|
|
routine c.regsel3 w01001000111 lnop ssub
|
|
; ; ; ; ;
|
|
; ; ; ; ; ptr5!0x777
|
|
hng; ; opdlsw; ; ptr3;
|
|
call idle1; ; ; ; ;
|
|
|* double precision unimplemented instruction
|
|
routine l.diag4 w01110010100 lnop ssub
|
|
call invalid2; ; ; ; ;
|
|
routine c.regsel4 w01001001001 lnop ssub
|
|
; ; ; ; ;
|
|
; ; ; ; ; ptr5!0x777
|
|
hng; ; reg; ; ptr4;
|
|
call idle1; ; ; ; ;
|
|
routine c.regsel5 w01001001011 lnop ssub
|
|
; ; ; ; ;
|
|
; ; ; ; ; ptr5!0x777
|
|
hng; ; reg; ; ptr5;
|
|
call idle1; ; ; ; ;
|
|
routine c.regsel6 w01001001101 lnop ssub
|
|
; ; ; ; ;
|
|
; ; ; ; ; ptr5!0x777
|
|
hng; ; opdmsw; ; imm2;
|
|
call idle1; ; ; ; ;
|
|
routine c.regsel7 w01001001111 lnop ssub
|
|
; ; ; ; ;
|
|
; ; ; ; ; ptr5!0x777
|
|
hng; ; opdlsw; ; imm3;
|
|
call idle1; ; ; ; ;
|
|
|*
|
|
|* Read D21 and D22 into read latch
|
|
|*
|
|
routine l.diag8 w01110011000 lnop ssub
|
|
; ; opdmsw dtor; ; ;
|
|
; ; opdmsw dtor; recclk; ;
|
|
cdata; ; ; ; ;
|
|
jclr clp idl2; ; ; ; ;
|
|
; ; opdlsw dtor; ; ;
|
|
; ; opdlsw dtor; recclk; ;
|
|
cdata; ; ; ; ;
|
|
call hang; ; ; ; ;
|
|
|*
|
|
|* Initialize Instruction --
|
|
|* load bits 4 through 11 on Weitek chips.
|
|
|*
|
|
routine c.init w01001011110 lnop ssub
|
|
; lmode7.4 0x6 cslmac; ; ; ;
|
|
; lmodef.c 0x0 cslmac; ; ; ;
|
|
; lmodeb.8 0x4 cslm; ; ; ;
|
|
call idle1; lmodeb.8 0x0 csla; ; ; ;
|
|
|*
|
|
|* Restore Wstatus Register
|
|
|* This instruction will: 1) set the valid bit, 2) reset the unimplimented
|
|
|* instruction bit, and 3) set all other bits according to bits 11:8 in
|
|
|* the operand.
|
|
|*
|
|
routine c.rest.wstat w01001010110 lnop ssub
|
|
; ; opdmsw dtor; recclk; ;
|
|
; ; dtor; ; ;
|
|
call idle1 cstat restore;; ; ; ;
|
|
|*
|
|
|* Test Current User's Registers
|
|
|* This test is designed to test the data registers for the current
|
|
|* context. The intent is to optimize speed while catching:
|
|
|* All hard data line errors.
|
|
|* All hard address line errors.
|
|
|* Any two registers in error and most other ram errors.
|
|
|*
|
|
|* To catch ram bits in error two test values are used which are
|
|
|* complimentary. The registers are filled with the two values
|
|
|* such that the hamming distance between two addresses of
|
|
|* registers with the same data is 2: this should check all
|
|
|* address problems. The registers are checked twice using
|
|
|* complementary data and performing the second check in reverse sequence
|
|
|* for sequence dependent errors. The check is performed in different
|
|
|* ways on the different checks to catch more data errors (so
|
|
|* that we will catch errors in adjoining addresses even though the
|
|
|* address hamming distance is greater than one). The check is
|
|
|* performed with a cumulative addition for speed's sake.
|
|
|*
|
|
|* The data values are:
|
|
|* A: 0 100000...00 0000000....00000
|
|
|* B: 1 011111...11 1111111....11111
|
|
|* They are stored in the following order:
|
|
|* A, B, B, A, B, A, A, B, B, A, A, B, A, B, B, A
|
|
|*
|
|
|* The checking summations are:
|
|
|* 0 + 1 + 2 + 3 - 6 - 7 - 8 - 9 + A + B + 4 + 5 - C - D - E - F
|
|
|* and
|
|
|* F + E - D - C + 5 + 4 - B - A + 9 + 8 - 7 - 6 - 3 - 2 + 1 + 0
|
|
|* (Notice that you can add A, B, B, A, but if you add
|
|
|* B, A, A, B, an inexact will result)
|
|
|*
|
|
|
|
|*
|
|
|* Test Current User's Registers - DESTRUCTIVE
|
|
|*
|
|
|* Enter with:
|
|
|* ptr1 pointing at element 0 (i.e. reg_1 = 0)
|
|
|*
|
|
routine c.tstreg.d w01001110010 lnop ssub
|
|
; ; ; ; ; lpreg!32
|
|
; ; ; ; ; ptr5!c_dtest
|
|
call rdmovelp51;; ; recclk; rcsmsw ptr5;
|
|
call ctest; ; ; ; ;
|
|
call idle1; ; ; ; ;
|
|
|
|
ctest:
|
|
; ; ; ; rcsmsw ptr1;
|
|
; lam csla; reg; ; rcslsw ptr1; ptr1+
|
|
; lal csla; reg; ; rcsmsw ptr1;
|
|
; lbm csla; reg; ; rcslsw ptr1; ptr1+
|
|
; lblf dadd csla; reg; ; ; lpreg!4
|
|
; ; ; ; ;
|
|
ctest.1:
|
|
| *error if we get inexact, NaN, etc.
|
|
; ; ; ; ;
|
|
; ; ; ; rcsmsw ptr1;
|
|
; lbm csla; reg; ; rcslsw ptr1; lpreg-
|
|
; lbl csla; reg; ; ;
|
|
; lam csla csuxa umsw; ; ; ; ptr1+
|
|
jloop ctest.1; lalf dsub csla csuxa ulsw;; ; ;
|
|
jwerr werr cstat;woea; ; ; ;
|
|
; ; ; ; ; lpreg!4
|
|
ctest.2:
|
|
| *error if we get inexact, NaN, etc.
|
|
; ; ; ; ;
|
|
; ; ; ; rcsmsw ptr1;
|
|
; lbm csla; reg; ; rcslsw ptr1; lpreg-
|
|
; lbl csla; reg; ; ;
|
|
; lam csla csuxa umsw; ; ; ; ptr1+
|
|
jloop ctest.2; lalf dadd csla csuxa ulsw;; ; ;
|
|
jwerr werr cstat;woea; ; ; ;
|
|
; ; ; ; ; lpreg!4
|
|
ctest.3:
|
|
| *error if we get inexact, NaN, etc.
|
|
; ; ; ; ;
|
|
; ; ; ; rcsmsw ptr1;
|
|
; lbm csla; reg; ; rcslsw ptr1; lpreg-
|
|
; lbl csla; reg; ; ;
|
|
; lam csla csuxa umsw; ; ; ; ptr1+
|
|
jloop ctest.3; lalf dsub csla csuxa ulsw;; ; ;
|
|
jwerr werr cstat;woea; ; ; ;
|
|
; ; ; ; ; lpreg!4
|
|
ctest.4:
|
|
| *error if we get inexact, NaN, etc.
|
|
; ; ; ; ;
|
|
; ; ; ; rcsmsw ptr1;
|
|
; lbm csla; reg; ; rcslsw ptr1; lpreg-
|
|
; lbl csla; reg; ; ;
|
|
; lam csla csuxa umsw; ; ; ; ptr1+
|
|
jloop ctest.4; lalf dadd csla csuxa ulsw;; ; ;
|
|
jwerr werr cstat;woea; ; ; ;
|
|
; ; ; ; ; lpreg!4
|
|
ctest.5:
|
|
| *error if we get inexact, NaN, etc.
|
|
; ; ; ; ;
|
|
; ; ; ; rcsmsw ptr1;
|
|
; lbm csla; reg; ; rcslsw ptr1; lpreg-
|
|
; lbl csla; reg; ; ;
|
|
; lam csla csuxa umsw; ; ; ; ptr1+
|
|
jloop ctest.5; lalf dsub csla csuxa ulsw;; ; ;
|
|
jwerr werr cstat;woea; ; ; ;
|
|
; ; ; ; ; lpreg!4
|
|
ctest.6:
|
|
| *error if we get inexact, NaN, etc.
|
|
; ; ; ; ;
|
|
; ; ; ; rcsmsw ptr1;
|
|
; lbm csla; reg; ; rcslsw ptr1; lpreg-
|
|
; lbl csla; reg; ; ;
|
|
; lam csla csuxa umsw; ; ; ; ptr1+
|
|
jloop ctest.6; lalf dadd csla csuxa ulsw;; ; ;
|
|
jwerr werr cstat;woea; ; ; ;
|
|
; ; ; ; ; lpreg!6
|
|
ctest.7:
|
|
; ; ; ; ;
|
|
; ; ; ; rcsmsw ptr1;
|
|
; lbm csla; reg; ; rcslsw ptr1; lpreg-
|
|
; lbl csla; reg; ; ;
|
|
; lam csla csuxa umsw; ; ; ; ptr1+
|
|
jloop ctest.7; lalf dsub csla csuxa ulsw;; ; ;
|
|
| * NO error if we get inexact
|
|
; ; ; ; ; ptr5!c_dtestsolution1
|
|
; ; ; ; ; ptr1-
|
|
; ; ; ; rcsmsw ptr5;
|
|
; lbm csla; reg; ; rcslsw ptr5;
|
|
; lbl csla; reg; ; ;
|
|
; lam csla csuxa umsw; ; ; ;
|
|
; lalf dcmp csla csuxa ulsw;; ; ;
|
|
jwerr werr cstat;woea; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; csuxa umsw; ; ; ;
|
|
; ; ; ; ;
|
|
jne werr cstat; woea; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; rcsmsw ptr1;
|
|
; lam csla; reg; ; rcslsw ptr1; ptr1-
|
|
; lal csla; reg; ; rcsmsw ptr1;
|
|
; lbm csla; reg; ; rcslsw ptr1; ptr1-
|
|
; lblf dadd csla; reg; ; ; lpreg!4
|
|
; ; ; ; ;
|
|
ctest.8:
|
|
; ; ; ; ;
|
|
; ; ; ; rcsmsw ptr1;
|
|
; lbm csla; reg; ; rcslsw ptr1; lpreg-
|
|
; lbl csla; reg; ; ;
|
|
; lam csla csuxa umsw; ; ; ; ptr1-
|
|
jloop ctest.8; lalf dsub csla csuxa ulsw;; ; ;
|
|
jwerr werr cstat;woea; ; ; ;
|
|
; ; ; ; ; lpreg!4
|
|
ctest.9:
|
|
; ; ; ; ;
|
|
; ; ; ; rcsmsw ptr1;
|
|
; lbm csla; reg; ; rcslsw ptr1; lpreg-
|
|
; lbl csla; reg; ; ;
|
|
; lam csla csuxa umsw; ; ; ; ptr1-
|
|
jloop ctest.9; lalf dadd csla csuxa ulsw;; ; ;
|
|
jwerr werr cstat;woea; ; ; ;
|
|
; ; ; ; ; lpreg!4
|
|
ctest.A:
|
|
; ; ; ; ;
|
|
; ; ; ; rcsmsw ptr1;
|
|
; lbm csla; reg; ; rcslsw ptr1; lpreg-
|
|
; lbl csla; reg; ; ;
|
|
; lam csla csuxa umsw; ; ; ; ptr1-
|
|
jloop ctest.A; lalf dsub csla csuxa ulsw;; ; ;
|
|
jwerr werr cstat;woea; ; ; ;
|
|
; ; ; ; ; lpreg!4
|
|
ctest.B:
|
|
; ; ; ; ;
|
|
; ; ; ; rcsmsw ptr1;
|
|
; lbm csla; reg; ; rcslsw ptr1; lpreg-
|
|
; lbl csla; reg; ; ;
|
|
; lam csla csuxa umsw; ; ; ; ptr1-
|
|
jloop ctest.B; lalf dadd csla csuxa ulsw;; ; ;
|
|
jwerr werr cstat;woea; ; ; ;
|
|
; ; ; ; ; lpreg!4
|
|
ctest.C:
|
|
; ; ; ; ;
|
|
; ; ; ; rcsmsw ptr1;
|
|
; lbm csla; reg; ; rcslsw ptr1; lpreg-
|
|
; lbl csla; reg; ; ;
|
|
; lam csla csuxa umsw; ; ; ; ptr1-
|
|
jloop ctest.C; lalf dsub csla csuxa ulsw;; ; ;
|
|
jwerr werr cstat;woea; ; ; ;
|
|
; ; ; ; ; lpreg!4
|
|
ctest.D:
|
|
; ; ; ; ;
|
|
; ; ; ; rcsmsw ptr1;
|
|
; lbm csla; reg; ; rcslsw ptr1; lpreg-
|
|
; lbl csla; reg; ; ;
|
|
; lam csla csuxa umsw; ; ; ; ptr1-
|
|
jloop ctest.D; lalf dadd csla csuxa ulsw;; ; ;
|
|
jwerr werr cstat;woea; ; ; ;
|
|
; ; ; ; ; lpreg!6
|
|
ctest.E:
|
|
; ; ; ; ;
|
|
; ; ; ; rcsmsw ptr1;
|
|
; lbm csla; reg; ; rcslsw ptr1; lpreg-
|
|
; lbl csla; reg; ; ; ptr5!c_dtestsolution2
|
|
; lam csla csuxa umsw; ; ; ; ptr1-
|
|
jloop ctest.E; lalf dsub csla csuxa ulsw;; ; ;
|
|
jwerr werr cstat;woea; ; ; ;
|
|
; ; ; ; ; ptr1+
|
|
; ; ; ; rcsmsw ptr5;
|
|
; lbm csla; reg; ; rcslsw ptr5;
|
|
; lbl csla; reg; ; ;
|
|
; lam csla csuxa umsw; ; ; ;
|
|
; lalf dcmp csla csuxa ulsw;; ; ;
|
|
jwerr werr cstat;woea; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; csuxa umsw; ; ; ;
|
|
; ; ; ; ;
|
|
jne werr cstat; woea; ; ; ;
|
|
rtn; ; ; ; ;
|
|
|*
|
|
|* Test Current User's Registers - NON-DESTRUCTIVE
|
|
|*
|
|
routine c.tstreg.n w01001110011 lnop ssub
|
|
; ; ; ; ; lpreg!32
|
|
; ; ; ; ; ptr5!c_dSCRATCH_0
|
|
call rdmovelp15;; ; recclk; rcsmsw ptr1;
|
|
; ; ; ; ; lpreg!32
|
|
; ; ; ; ; ptr5!c_dtest
|
|
call rdmovelp51;; ; recclk; rcsmsw ptr5;
|
|
call ctest; ; ; ; ;
|
|
; ; ; ; ; lpreg!32
|
|
; ; ; ; ; ptr5!c_dSCRATCH_0
|
|
call rdmovelp51;; ; recclk; rcsmsw ptr5;
|
|
call idle1; ; ; ; ;
|
|
|* move registers at ptr5 to ptr1
|
|
rdmovelp51:
|
|
; ; ; recclk; rcslsw ptr5;
|
|
; ; ; ; ptr1; ptr5+
|
|
; ; ; recoe; ramwe rcsmsw ptr1; lpreg-
|
|
; ; ; recoe recclk;ramwe ptr1;
|
|
; ; ; recoe; ramwe rcslsw ptr1;
|
|
jloop rdmovelp51;; ; recoe; ramwe ptr1;
|
|
rtn; ; ; recclk; rcsmsw ptr5; ptr1+
|
|
|* move registers at ptr1 to ptr5
|
|
rdmovelp15:
|
|
; ; ; recclk; rcslsw ptr1;
|
|
; ; ; ; ptr5; ptr1+
|
|
; ; ; recoe; ramwe rcsmsw ptr5; lpreg-
|
|
; ; ; recoe recclk;ramwe ptr5;
|
|
; ; ; recoe; ramwe rcslsw ptr5;
|
|
jloop rdmovelp15;; ; recoe; ramwe ptr5;
|
|
rtn; ; ; recclk; rcsmsw ptr1; ptr5+
|
|
|*
|
|
|* Test the loop counter
|
|
|*
|
|
routine c.tstlpreg w01001011010 lnop ssub
|
|
; ; ; ; ; lpreg!0
|
|
test.pt.a:
|
|
hng; ; ; ; ;
|
|
; ; ; ; ; lpreg-
|
|
jloop test.pt.a;; ; ; ;
|
|
jloop0 test.pt.b;; ; ; ;
|
|
; ; ; ; ;
|
|
hng; ; ; ; ;
|
|
test.pt.b:
|
|
hng; ; ; ; ;
|
|
call idle1; ; ; ; ;
|