Files
Arquivotheca.SunOS-4.1.4/usr.etc/fpa/microcode/dps.u
seta75D ff309bfe1c Init
2021-10-11 18:37:13 -03:00

194 lines
5.4 KiB
Plaintext

|*
|* Nop Instruction
|*
routine dp.nop w000000xxxx1 lnop sneg
; ; ; ; ;
jclr clp idl2; ; ; ; ;
call idle1; ; ; ; ;
|*
|* Double Precision Negate Instruction
|* Double Precision Absolut Value Instruction
|*
routine dp.neg w000001xxxx1 lam dneg
routine dp.abs w000010xxxx1 lam dabs
jclr clp1 idl2; lalf fmap csla; opdlsw; ; ;
; ; ; recclk; rcsmsw ptr2;
; ; ; recclk; rcslsw ptr2;
dfin.alu:
; ; ; ; ;
dfin.alu2:
; csuxa umsw; ; ; ;
; csuxa ulsw; ; ; ptr2;
jwerr der2 cstat;woea; dtor; ; ramwe rcsmsw ptr2;
; woea; dtor; ; ramwe rcslsw ptr2;
call idle1; ; dtor; ; ramwe ptr2;
|*
|* Double Precision Fix Instruction (convert to integer)
|*
routine dp.fix w000100xxxx1 lam dcvtint
jclr clp1 idl2; lalf dcvtint csla; opdlsw; ; ;
; ; ; ; ;
; ; ; ; ;
; ; ; ; ;
; csuxa ulsw; ; ; ;
; ; ; ; ptr2;
jwerr ser2 cstat;woea; dtor; ; ramwe rcssp ptr2;
call idle1; ; dtor; ; ramwe ptr2;
|*
|* Double Precision Float Instruction
|*
routine dp.float w000011xxxx1 lal dfloat
; lalf fmap csla; opdmsw; ; ;
; ; ; recclk; rcsmsw ptr2;
; ; ; recclk; rcslsw ptr2;
; ; ; ; ;
jclr clp idl2; csuxa umsw; ; ; ;
; csuxa ulsw; ; ; ptr2;
jwerr der2 cstat;woea; dtor; ; ramwe rcsmsw ptr2;
; woea; dtor; ; ramwe rcslsw ptr2;
call idle1; ; dtor; ; ramwe ptr2;
|*
|* Double Precision Convert Instruction
|*
routine dp.conv w000101xxxx1 lam dcvts
jclr clp1 idl2; lalf fmap csla; opdlsw; ; ;
; ; ; ; ;
; ; ; ; ;
; ; ; ; ;
; csuxa usp; ; ; ;
; ; ; ; ptr2;
jwerr ser2 cstat;woea; dtor; ; ramwe rcssp ptr2;
call idle1; ; dtor; ; ramwe ptr2;
|*
|* Double Precision Square Instruction
|*
routine dp.sqar w000110xxxx1 lam dmul
; lbm cslm; opdmsw; ; ;
jclr clp3 idl2; lal cslm; opdlsw; ; ;
; lblf fmap cslm; opdlsw; ; ;
; ; ; recclk; rcsmsw ptr2;
; ; ; recclk; rcslsw ptr2;
dfin.mul:
; ; ; ; ;
; ; ; ; ;
; ; ; ; ;
; csuxm umsw; ; ; ;
; csuxm ulsw; ; ; ptr2;
jwerr der2 cstat;woem; dtor; ; ramwe rcsmsw ptr2;
; woem; dtor; ; ramwe rcslsw ptr2;
call idle1; ; dtor; ; ramwe ptr2;
|*
|* Double Precision Add Instruction
|* Double Precision Subtract Instruction
|*
routine dp.add w000111xxxx1 lbm dadd
routine dp.sub w001000xxxx1 lbm dsub
; lam csla; reg; recclk; rcslsw ptr2;
; lal csla; reg; ; ;
jclr clp1 idl2; lblf fmap csla; opdlsw; ; ;
; ; ; ; ;
call dfin.alu; ; ; ; ;
| ; ; ; ; ;
| ; csuxa umsw; ; ; ;
| ; csuxa ulsw; ; ; ptr2;
| jwerr der2 cstat;woea; dtor; ; ramwe rcsmsw ptr2;
| ; woea; dtor; ; ramwe rcslsw ptr2;
| call idle1; ; dtor; ; ramwe ptr2;
|*
|* Double Precision Multiply Instruction
|*
routine dp.mul w001001xxxx1 lbm dmul
; lam cslm; reg; recclk; rcslsw ptr2;
; lal cslm; reg; ; ;
| Note: the reason we don't do a minimum latency multiply,
| is so we can delay idle2 as long as possible
jclr clp3 idl2; lblf fmap cslm; opdlsw; ; ;
; ; ; ; ;
call dfin.mul; ; ; ; ;
| ; ; ; ; ;
| ; ; ; ; ;
| ; ; ; ; ;
| ; csuxm umsw; ; ; ;
| ; csuxm ulsw; ; ; ptr2;
| jwerr der2 cstat;woem; dtor; ; ramwe rcsmsw ptr2;
| ; woem; dtor; ; ramwe rcslsw ptr2;
| call idle1; ; dtor; ; ramwe ptr2;
|*
|* Double Precision Divide Instruction
|*
routine dp.div w001010xxxx1 lbm ddiv
; lam csla; reg; recclk; rcslsw ptr2;
; lal csla; reg; ; ;
jclr clp56 idl2;lblf fmap csla; opdlsw; ; ;
|# (Note: 26 will cause a delay of 54)
; ; ; ; ; lpreg!26
call wait; ; ; ; ;
call dfin.alu2; ; ; ; ;
| ; ; ; ; ;
| ; csuxa umsw; ; ; ;
| ; csuxa ulsw; ; ; ptr2;
| jwerr der2 cstat;woea; dtor; ; ramwe rcsmsw ptr2;
| ; woea; dtor; ; ramwe rcslsw ptr2;
| call idle1; ; dtor; ; ramwe ptr2;
|*
|* Double Precision Backwards Subtract Instruction
|*
routine dp.b.sub w001011xxxx1 lam dsub
; lbm csla; reg; recclk; rcslsw ptr2;
; lbl csla; reg; ; ;
jclr clp1 idl2; lalf fmap csla; opdlsw; ; ;
; ; ; ; ;
call dfin.alu; ; ; ; ;
| ; ; ; ; ;
| ; csuxa umsw; ; ; ;
| ; csuxa ulsw; ; ; ptr2;
| jwerr der2 cstat;woea; dtor; ; ramwe rcsmsw ptr2;
| ; woea; dtor; ; ramwe rcslsw ptr2;
| call idle1; ; dtor; ; ramwe ptr2;
|*
|* Double Precision Backwards Divide Instruction
|*
routine dp.div w001100xxxx1 lam ddiv
; lbm csla; reg; recclk; rcslsw ptr2;
; lbl csla; reg; ; ;
jclr clp56 idl2;lalf fmap csla; opdlsw; ; ;
|# (Note: 26 will cause a delay of 54)
; ; ; ; ; lpreg!26
call wait; ; ; ; ;
call dfin.alu2; ; ; ; ;
| ; ; ; ; ;
| ; csuxa umsw; ; ; ;
| ; csuxa ulsw; ; ; ptr2;
| jwerr der2 cstat;woea; dtor; ; ramwe rcsmsw ptr2;
| ; woea; dtor; ; ramwe rcslsw ptr2;
| call idle1; ; dtor; ; ramwe ptr2;
|*
|* Double Precision Compare With Zero
|*
routine dp.eqlzero w001101xxxx1 lam dcmp0
jclr clp1 idl2; lalf fmap csla; opdlsw; ; ;
call dfin.cmp; ; ; ; ;
| ; ; ; ; ;
| ; ; ; ; ;
| ; csuxa umsw; ; ; ;
| ; ; ; ; ;
| jwerr werr cstat;woea; ; ; ;
| call idle1; ; ; ; ;
|*
|* Double Precision Compare With Reg 1
|* Double Precision Compare Magnitude With Reg 1
|*
routine dp.eqlreg1 w001110xxxx1 lbm dcmp
routine dp.cmpreg1 w001111xxxx1 lbm dcmpm
; lam csla; reg; ; rcslsw ptr2;
; lal csla; reg; ; ;
jclr clp1 idl2; lblf fmap csla; opdlsw; ; ;
; ; ; ; ;
dfin.cmp:
; ; ; ; ;
; ; ; ; ;
; csuxa umsw; ; ; ;
; ; ; ; ;
jwerr werr cstat;woea; ; ; ;
call idle1; ; ; ; ;