{File name: LispFPTDefs.dfn
Last edited by cal 14-Nov-83 14:28:09
Last edited by Sturgis 15-Sep-83 16:40:30
Descrition: Floating point code for Lisp {modified from Cedar fpt code}
Created by H. Sturgis
}
RegDef[divisorHigh, R, 2]; {TT}
RegDef[divCount, R, 3]; {PV} {must be saved and restored}
RegDef[divResult, R, 4]; {S} {must be saved and restored}
RegDef[divisorLow, R, 6]; {Rx}
RegDef[uFix ,U, 03]; {goes with FLFixA - temp}
RegDef[uHighHalf1 ,U, 07]; {FPT temp}
RegDef[uExp1 ,U, 08]; {FPT temp}
RegDef[uLowHalf1 ,U, 09]; {FPT temp}
RegDef[uExp2 ,U, 0A]; {FPT temp}
RegDef[uHighHalf2 ,U, 0B]; {FPT temp}
RegDef[uLowHalf2 ,U, 0C]; {FPT temp}
RegDef[uSign1 ,U, 26]; {FPT temp}
RegDef[uSign2 ,U, 27]; {FPT temp}
RegDef[uDivCount, U, 30]; {FPT temp}
RegDef[uStickyBit ,U, 31]; {FPT temp}
RegDef[uDivResult, U, 42]; {FPT temp}
RegDef[uib ,U, 6E]; {FPT temp}
RegDef[ufloatplus ,U, 04]; {FPT temp}
RegDef[ufloatdiff ,U, 05]; {FPT temp}
RegDef[ufloattimes ,U, 030]; {FPT temp}
RegDef[ufloatidiff ,U, 06]; {FPT temp}
RegDef[ufloat ,U, 042]; {FPT temp}
RegDef[uArg2Hi ,U, 057]; {FPT temp}
RegDef[uArg2Lo ,U, 058]; {FPT temp}
RegDef[uStickyReg ,U, 24];
{** rA = TT} {part of processor state, [0] is non zero if fpt micro code should trap on inexact result, and [15] is non zero if there has been a non trapped inexact result} {must match corresponding in StartMesa}
RegDef[uFLmode, U, 65],{low 4 bits are the Floating Point Mode -- 16 bit is set to one if an inexact result occurs -- sign bit is set to one if inexact trap is desired}
RegDef[uPPsave, U, 4C],{contains the last output to the PPort exclusive of setting it to read}
{return points for unpack routines}
Set[L0.mult2, 1];
Set[L0.mult3, 2];
Set[L0.mult4, 3];
Set[L0.mult5, 4];
Set[L0.add1, 5];
Set[L0.sub1, 6];
{return points for denorm routine, DeNormRets}
Set[L0.rePack1, 2];
{Set[L0.add1, 5]; def'd above}
{used to distinguish CreateCell opcodes from subr calls}
{Set[L3.FptArg1, 04];}
{return points for rounding routine, RoundRets}
Set[L0.rePack2, 1]; {must be 1 mod 2}
{divide loop return points}
Set[L0.div2, 1];
Set[L0.div3, 2];
{returns from FptPrep and used for FLop}
Set[L2.Fplus, 10'b];{must be same as L2.plus}
Set[L2.Fdiff, 11'b];{must be same as L2.diff}
Set[L2.Ftimes, 13'b];
Set[L2.Fquot, 14'b];
Set[L2.Fgreat, 12'b];{must be same as L2.greaterp}
Set[L2.Fidiff, 15'b];
Set[L2.Fmax, 16'b];
Set[L2.Fmin, 17'b];
{ returns relative to FloatItRet}
Set[L3.FunSecond, 04];
Set[L3.FunUSecond, 05];
Set[L3.FunFirst, 06];
Set[L3.FunUFirst, 07];
Set[L3.btou, 08];
{ returns relative to fptQ2ret and fptQdone}
Set[L3.UB2Q2, 03];{must be different from L3.FunUSecond and L3.FunUFirst}
{ used to distinguish FPT callers at FLExit }
Set[L0.Boxed, 01];
Set[L0.UnBoxed, 02];
{ ib values for LispUnboxed2 }
Set[ib.UF2.add, 0],
Set[ib.UF2.sub, 1],
Set[ib.UF2.isub, 2],
Set[ib.UF2.mult, 3],
Set[ib.UF2.div, 4],
Set[ib.UF2.great, 5],
Set[ib.UF2.max, 6],
Set[ib.UF2.min, 7],
{ ib values for LispUnboxed1 }
Set[ib.UF1.utob, 0],
Set[ib.UF1.btou, 1],
Set[ib.UF1.abs, 2],
Set[ib.UF1.neg, 3];
Set[ib.UF1.fix, 4];
{ E N D }