|* @(#)sp.u 1.1 94/10/31 Copyright Sun Microsystems, Inc. 1988 |* |* Single Precison Add Instruction |* routine sp.add 0000111xxxx0 snop enrb halt; adtoti; imm2; ; sadd enra halt; regtitmp; rcssp imm2; ; ; ; imm2; safin: sa1fin: jtierr ser2 cstat; tioe tisp halt; titoreg; rcssp imm2; pipe idl1; snop halt; ; imm2; |* |* Single Precision NOP Instruction |* routine sp.nop 0000000xxxx0 ; ; ; ; ; ; ptr5; ptr5!c_ssin ; i2cmp enra halt; regtoti; rcssp ptr5; ; ; ; ptr5; ptr5!c_si20 ; i2sftrl enrb halt; regtoti; rcssp ptr5; ; ; ; ; ; tioe tisp halt; ; ; call idle1; ; ; ; |* |* Single Precision Negate Instruction |* routine sp.neg 0000001xxxx0 ; regtotmp; rcssp imm2; ; ; ; ; ; sneg enra halt; adtoti; ; call sa1fin; ; ; imm2; |* |* Single Precision Absolute Instruction |* routine sp.abs 0000010xxxx0 ; regtotmp; rcssp imm2; ; ; ; ; ; sabs enra halt; adtoti; ; call sa1fin; tioe tisp; ; imm2; |* |* Single Precision Float Instruction (Integer to SP) |* routine sp.float 0000011xxxx0 ; regtotmp; rcssp imm2; ; ; ; ; ; sfloat enra halt; adtoti; ; call sa1fin; ; ; imm2; |* |* Single Precision Fix Instruction (SP to Integer) |* routine sp.fix 0000100xxxx0 scvtint enra halt; adtoti; ; ; halt; regtotmp; rcssp ptr2; ; halt; ; ptr2; jtierr ckres cstat; snop enra tioe tisp halt; titoreg; rcssp ptr2; pipe idl1; snop halt; ; imm2; ptr5!szero |* |* Single Precision Convert Instruction (SP to DP) |* routine sp.conv 0000101xxxx0 ; regtotmp; rcslsw imm2; ; ; ; ; ; scvtd enra loaddp halt; adtoti; ; ; scvtd enra loaddp halt; adtoti; ; ; dnop tioe timsw; ; imm2; jtierr ser2 cstat; dnop tioe tilsw halt; titoreg; rcslsw imm2; call idle1; dnop tioe timsw halt; titoreg; rcsmsw imm2; |* |* Single Precision Square Instruction |* routine sp.sqar 0000110xxxx0 ; regtotmp; rcssp imm2; ; ; ; ; ; smul enra enrb halt; adtoti; ; call sa1fin; ; ; imm2; |* |* Single Precision Subtract Instruction |* routine sp.sub 0001000xxxx0 snop enrb halt; adtoti; imm2; ; ssub enra halt; regtitmp; rcssp imm2; call safin; ; ; imm2; |* |* Single Precision Multiply Instruction |* routine sp.mul 0001001xxxx0 snop enra halt; adtoti; imm2; ; smul enrb halt; regtitmp; rcssp imm2; call safin; ; ; imm2; |* |* Single Precision Divide Instruction |* routine sp.div 0001010xxxx0 snop enra halt; regtitmp; rcssp imm2; ; snop; ; ; ; sdiv enrb halt; adtoti; ; ; halt; ; ; ; halt; ; ; ; ; ; ; ; ; ; ; ; halt; ; imm2; jtierr ser2 cstat; snop tioe tisp halt; titoreg; rcssp imm2; ; tioe tisp halt; ; ; pipe idl1; halt; ; imm2; |* |* Single Precision Backwards Subtract Instruction |* routine sp.b.sub 0001011xxxx0 snop enra halt; adtoti; imm2; ; ssub enrb halt; regtitmp; rcssp imm2; call safin; ; ; imm2; |* |* Single Precision Backwards Divide Instruction |* routine sp.b.div 0001100xxxx0 enra halt; adtoti; imm2; ; sdiv enrb halt; regtitmp; rcssp imm2; ; halt; ; ; ; halt; ; ; ; ; ; ; ; ; ; ; ; halt; ; imm2; jtierr ser2 cstat; snop tioe tisp halt; titoreg; rcssp imm2; ; tioe tisp halt; ; ; pipe idl1; halt; ; imm2; |* |* Single Precision Compare with Zero Instruction |* routine sp.eqlzero 0001101xxxx0 enra halt; adtoti; ; ; ; ; ptr5; ptr5!0x400+0x0 |# |# Load A register with single precision zero and execute a compare instruction. |# ; scmp enrb halt; regtoti; rcssp ptr5; ; ; ; ; spstat: jtierr hang cstat; halt; ; ; pipe idl1; halt; ; imm2; |* |* Single Precision Compare Register 1 with operand |* routine sp.eqlreg1 0001110xxxx0 snop enrb halt; adtoti; imm2; |# |# Load RA with register 1 contents and execute a compare instruction. |# ; scmp enra halt; regtoti; rcssp imm2; call spstat; ; ; ; |* |* Single Precision Magnitude Compare Register 1 with operand |* routine sp.cmpreg1 0001111xxxx0 snop enrb halt; adtoti; imm2; |# |# Load A register with register 1 contents and execute a magnitude compare instruction. |# ; scmpm enra halt; regtoti; rcssp imm2; call spstat; ; ; ;