DIRECTORY IeeeInternal USING [InitIeee], PrincOps USING [StateVector, UnboundLink, aFADD, aFSUB, aFMUL, aFDIV, aFCOMP, aFIX, aFLOAT, aFIXI, aFIXC, aFSTICKY, aFREM, aROUND, aROUNDI, aROUNDC, aFSQRT, aFSC, SD, sFADD, sFSUB, sFMUL, sFDIV, sFCOMP, sFIX, sFLOAT], PrincOpsUtils USING [MyLocalFrame], Real, RealOps, TrapSupport USING [BumpPC, opTrapTable]; RealControl: PROGRAM IMPORTS PrincOpsUtils, IeeeInternal, RealOps, TrapSupport EXPORTS Real, RealOps = BEGIN microSticky: CARDINAL _ 0; InitReals: PUBLIC SAFE PROC = TRUSTED { OPEN PrincOps, TrapSupport; SD[sFADD] _ SD[sFSUB] _ SD[sFMUL] _ SD[sFDIV] _ SD[sFCOMP] _ SD[sFIX] _ SD[sFLOAT] _ UnboundLink; opTrapTable.misc[aFADD] _ LOOPHOLE[TFAdd]; opTrapTable.misc[aFSUB] _ LOOPHOLE[TFSub]; opTrapTable.misc[aFMUL] _ LOOPHOLE[TFMul]; opTrapTable.misc[aFDIV] _ LOOPHOLE[TFDiv]; opTrapTable.misc[aFCOMP] _ LOOPHOLE[TFComp]; opTrapTable.misc[aFIX] _ LOOPHOLE[TFix]; opTrapTable.misc[aFLOAT] _ LOOPHOLE[TFloat]; opTrapTable.misc[aFIXI] _ LOOPHOLE[TFixI]; opTrapTable.misc[aFIXC] _ LOOPHOLE[TFixC]; opTrapTable.misc[aFSTICKY] _ LOOPHOLE[TFSticky]; opTrapTable.misc[aFREM] _ LOOPHOLE[TFRem]; opTrapTable.misc[aROUND] _ LOOPHOLE[TRound]; opTrapTable.misc[aROUNDI] _ LOOPHOLE[TRoundI]; opTrapTable.misc[aROUNDC] _ LOOPHOLE[TRoundC]; opTrapTable.misc[aFSQRT] _ LOOPHOLE[TSqRt]; opTrapTable.misc[aFSC] _ LOOPHOLE[TFSc]; IeeeInternal.InitIeee[]; }; TFAdd: PROC [a, b: REAL] RETURNS [c: REAL] = { state: PrincOps.StateVector; state _ STATE; c _ RealOps.FAdd[a, b]; TrapSupport.BumpPC[2]; state.dest _ [frame[PrincOpsUtils.MyLocalFrame[]]]; TRANSFER WITH state; }; TFSub: PROC [a, b: REAL] RETURNS [c: REAL] = { state: PrincOps.StateVector; state _ STATE; c _ RealOps.FSub[a, b]; TrapSupport.BumpPC[2]; state.dest _ [frame[PrincOpsUtils.MyLocalFrame[]]]; TRANSFER WITH state; }; TFMul: PROC [a, b: REAL] RETURNS [c: REAL] = { state: PrincOps.StateVector; state _ STATE; c _ RealOps.FMul[a, b]; TrapSupport.BumpPC[2]; state.dest _ [frame[PrincOpsUtils.MyLocalFrame[]]]; TRANSFER WITH state; }; TFDiv: PROC [a, b: REAL] RETURNS [c: REAL] = { state: PrincOps.StateVector; state _ STATE; c _ RealOps.FDiv[a, b]; TrapSupport.BumpPC[2]; state.dest _ [frame[PrincOpsUtils.MyLocalFrame[]]]; TRANSFER WITH state; }; TFComp: PROC [a, b: REAL] RETURNS [i: INTEGER] = { state: PrincOps.StateVector; state _ STATE; i _ RealOps.FComp[a, b]; TrapSupport.BumpPC[2]; state.dest _ [frame[PrincOpsUtils.MyLocalFrame[]]]; TRANSFER WITH state; }; TFix: PROC [a: REAL] RETURNS [li: LONG INTEGER] = { state: PrincOps.StateVector; state _ STATE; li _ RealOps.RoundLI[a, RealOps.FixMode]; TrapSupport.BumpPC[2]; state.dest _ [frame[PrincOpsUtils.MyLocalFrame[]]]; TRANSFER WITH state; }; TFloat: PROC [a: LONG INTEGER] RETURNS [c: REAL] = { state: PrincOps.StateVector; state _ STATE; c _ RealOps.Float[a]; TrapSupport.BumpPC[2]; state.dest _ [frame[PrincOpsUtils.MyLocalFrame[]]]; TRANSFER WITH state; }; TFixI: PROC [a: REAL] RETURNS [i: INTEGER] = { state: PrincOps.StateVector; state_ STATE; i _ RealOps.RoundI[a, RealOps.FixMode]; TrapSupport.BumpPC[2]; state.dest _ [frame[PrincOpsUtils.MyLocalFrame[]]]; TRANSFER WITH state; }; TFixC: PROC [a: REAL] RETURNS [c: CARDINAL] = { state: PrincOps.StateVector; state _ STATE; c _ RealOps.RoundC[a, RealOps.FixMode]; TrapSupport.BumpPC[2]; state.dest _ [frame[PrincOpsUtils.MyLocalFrame[]]]; TRANSFER WITH state; }; TFSticky: PROC [c: CARDINAL] RETURNS [cr: CARDINAL] = { state: PrincOps.StateVector; state _ STATE; cr _ microSticky; microSticky _ c; TrapSupport.BumpPC[2]; state.dest _ [frame[PrincOpsUtils.MyLocalFrame[]]]; TRANSFER WITH state; }; TFRem: PROC [a, b: REAL] RETURNS [c: REAL] = { state: PrincOps.StateVector; state _ STATE; c _ RealOps.FRem[a, b]; TrapSupport.BumpPC[2]; state.dest _ [frame[PrincOpsUtils.MyLocalFrame[]]]; TRANSFER WITH state; }; TRound: PROC [a: REAL] RETURNS [li: LONG INTEGER] = { state: PrincOps.StateVector; state _ STATE; li _ RealOps.RoundLI[a]; TrapSupport.BumpPC[2]; state.dest _ [frame[PrincOpsUtils.MyLocalFrame[]]]; TRANSFER WITH state; }; TRoundI: PROC [a: REAL] RETURNS [i: INTEGER] = { state: PrincOps.StateVector; state _ STATE; i _ RealOps.RoundI[a]; TrapSupport.BumpPC[2]; state.dest _ [frame[PrincOpsUtils.MyLocalFrame[]]]; TRANSFER WITH state; }; TRoundC: PROC [a: REAL] RETURNS [c: CARDINAL] = { state: PrincOps.StateVector; state _ STATE; c _ RealOps.RoundC[a]; TrapSupport.BumpPC[2]; state.dest _ [frame[PrincOpsUtils.MyLocalFrame[]]]; TRANSFER WITH state; }; TSqRt: PROC [a: REAL] RETURNS [b: REAL] = { state: PrincOps.StateVector; state _ STATE; b _ RealOps.SqRt[a]; TrapSupport.BumpPC[2]; state.dest _ [frame[PrincOpsUtils.MyLocalFrame[]]]; TRANSFER WITH state; }; TFSc: PROC [a: REAL, scale: INTEGER] RETURNS [b: REAL] = { state: PrincOps.StateVector; state _ STATE; b _ RealOps.FScale[a, scale]; TrapSupport.BumpPC[2]; state.dest _ [frame[PrincOpsUtils.MyLocalFrame[]]]; TRANSFER WITH state; }; InitReals[]; END. L. Stewart, December 11, 1980 11:37 AM, modify for Pilot from RealControl.mesa L. Stewart, 4-Feb-81 18:31:04, change to new trap handling L. Stewart, 6-Feb-81 10:40:32, update trap procedure style R. Atkinson, 23-Mar-81 16:10:36, replaced Frame.MyLocalFrame[] with [frame[Frame.MyLocalFrame[]]] L. Stewart, June 3, 1982 11:11 am, added FScale and SqRt, removed SETS L. Stewart, August 27, 1982 1:15 pm, SAFE L. Stewart, January 14, 1984 4:58 pm, change to IeeeInternal ¶RealControl.mesa Last Modified, Stewart, January 14, 1984 4:58 pm Last Modified By Paul Rovner, May 4, 1983 10:27 am Microcode to Mesa floating point translater Mainline code Êc˜Jšœ™Jšœ0™0Jšœ2™2Jšœ+™+J˜šÏk ˜ Jšœ œ ˜Jšœ œ•œ4˜ÙJšœœ˜#J˜J˜Jšœ œ˜(J˜—šœ œœ3œ˜dJ˜Jš˜Jšœ œ˜J˜š Ïn œœœœœ˜'Jšœ˜Jšœ œ œ œ œ œ œ˜aJšœœ˜*Jšœœ˜*Jšœœ˜*Jšœœ˜*Jšœœ ˜,Jšœœ˜(Jšœœ ˜,Jšœœ˜*Jšœœ˜*Jšœœ ˜0Jšœœ˜*Jšœœ ˜,Jšœœ ˜.Jšœœ ˜.Jšœœ˜+Jšœœ˜(J˜J˜J˜—š žœœœœœ˜.J˜Jšœœ˜J˜J˜J˜3Jšœœ˜J˜J˜—š žœœœœœ˜.J˜Jšœœ˜J˜J˜J˜3Jšœœ˜J˜J˜—š žœœœœœ˜.J˜Jšœœ˜J˜J˜J˜3Jšœœ˜J˜J˜—š žœœœœœ˜.J˜Jšœœ˜J˜J˜J˜3Jšœœ˜J˜J˜—š žœœœœœ˜2J˜Jšœœ˜J˜J˜J˜3Jšœœ˜J˜J˜—š žœœœœœœ˜3J˜Jšœœ˜J˜)J˜J˜3Jšœœ˜J˜J˜—š žœœœœœœ˜4J˜Jšœœ˜J˜J˜J˜3Jšœœ˜J˜J˜—š žœœœœœ˜.J˜Jšœœ˜ J˜'J˜J˜3Jšœœ˜J˜J˜—š žœœœœœ˜/J˜Jšœœ˜J˜'J˜J˜3Jšœœ˜J˜J˜—š žœœœœœ˜7J˜Jšœœ˜J˜J˜J˜J˜3Jšœœ˜J˜J˜—š žœœœœœ˜.J˜Jšœœ˜J˜J˜J˜3Jšœœ˜J˜J˜—š žœœœœœœ˜5J˜Jšœœ˜J˜J˜J˜3Jšœœ˜J˜J˜—š žœœœœœ˜0J˜Jšœœ˜J˜J˜J˜3Jšœœ˜J˜J˜—š žœœœœœ˜1J˜Jšœœ˜J˜J˜J˜3Jšœœ˜J˜J˜—š žœœœœœ˜+J˜Jšœœ˜J˜J˜J˜3Jšœœ˜J˜J˜—š žœœœ œœœ˜:J˜Jšœœ˜J˜J˜J˜3Jšœœ˜J˜J˜—Jšœ ™ J˜J˜ J˜Jšœ˜—Jšœ$œ(˜OJšœ9˜:Jšœ9˜:šœ˜ J˜@—JšœA˜FJšœ$˜)Jšœ;˜