-- RTMicrocode.Mesa
-- Definitions for the intertface between the Cedar runtime software and
-- its microcode support
-- last edited 2-Feb-82 11:38:48 by Willie-Sue
-- last edited May 20, 1982 10:16 am by Paul Rovner
DIRECTORY
Mopcodes USING[zMISC, op],
MiscAlpha USING[alpha],
RTRefCounts USING[ProbeIndex, rcoState, uCodeDirection],
RTZones USING[PQuantizedZone, PZone],
RTBasic USING[Type];
RTMicrocode: DEFINITIONS
= BEGIN
-- microcode version number which corresponds to this CedarRunTime system
microcodeVersion: CARDINAL = 13B;
-- stuff that will(?) be in MiscAlpha
aRECLAIMEDREF: MiscAlpha.alpha = 60B;
aALTERCOUNT: MiscAlpha.alpha = 61B;
aRSTKBits: MiscAlpha.alpha = 62B;
aRTMOVESTATUS: MiscAlpha.alpha = 63B;
aRCFINALIZECOUNT: MiscAlpha.alpha = 64B;
aISPIRECLAIMABLE: MiscAlpha.alpha = 65B;
-- aRCERECLAIM: MiscAlpha.alpha = 66B;
-- NOTE see RTRefCounts aCREATEREF: MiscAlpha.alpha = 67B;
aGetReferentType: MiscAlpha.alpha = 71B;
aGetCanonicalReferentType: MiscAlpha.alpha = 72B;
aAllocateQuantizedNode: MiscAlpha.alpha = 73B;
aAllocateHeapNode: MiscAlpha.alpha = 74B;
aFreeObject: MiscAlpha.alpha = 75B;
aFreeQuantizedNode: MiscAlpha.alpha = 76B;
aFreePrefixedNode: MiscAlpha.alpha = 77B;
aLocalBlkZ: MiscAlpha.alpha = 100B;
aLongBlkZ: MiscAlpha.alpha = 102B;
opASSIGNREF: Mopcodes.op = 76B;
opASSIGNREFNEW: Mopcodes.op = 77B;
-- MACHINE CODE Procedures
LONGZERO: PROC[ptr: LONG POINTER, size: CARDINAL] RETURNS[LONG POINTER] =
MACHINE CODE { Mopcodes.zMISC, aLongBlkZ };
RECLAIMEDREF: PROC[ref: REF] RETURNS[REF] =
MACHINE CODE { Mopcodes.zMISC, aRECLAIMEDREF };
RTMOVESTATUS: PROC[direction: RTRefCounts.uCodeDirection, gcStateBank: CARDINAL]
RETURNS[CARDINAL]=
MACHINE CODE { Mopcodes.zMISC, aRTMOVESTATUS };
ALTERCOUNT: PROC[rcv: RTRefCounts.rcoState, ref: REF] =
MACHINE CODE { Mopcodes.zMISC, aALTERCOUNT };
PPALTERCOUNT: PROC[rcv: RTRefCounts.rcoState, ref: REF] =
MACHINE CODE { Mopcodes.zMISC, aALTERCOUNT};
RESETSTKBITS: PROC[pi: RTRefCounts.ProbeIndex] =
MACHINE CODE { Mopcodes.zMISC, aRSTKBits };
ASSIGNREF: PROC[refNew: REF, refPtr: LONG POINTER TO REF] =
MACHINE CODE { opASSIGNREF, 0 };
ASSIGNREFNEW: PROC[refNew: REF, refPtr: LONG POINTER TO REF] =
MACHINE CODE { opASSIGNREFNEW, 0 };
RCFINALIZECOUNT: PROC RETURNS [CARDINAL] =
MACHINE CODE { Mopcodes.zMISC, aRCFINALIZECOUNT };
ISPIRECLAIMABLE: PROC[pi: RTRefCounts.ProbeIndex]
RETURNS[fpi: RTRefCounts.ProbeIndex, npi: CARDINAL] =
MACHINE CODE { Mopcodes.zMISC, aISPIRECLAIMABLE };
GETCANONICALREFERENTTYPE: PROC[ref: REF] RETURNS[RTBasic.Type] =
MACHINE CODE { Mopcodes.zMISC, aGetCanonicalReferentType };
GETREFERENTTYPE: PROC[ref: REF] RETURNS[RTBasic.Type] =
MACHINE CODE { Mopcodes.zMISC, aGetReferentType };
ALLOCATEQUANTIZEDNODE:
PROC[zn: RTZones.PQuantizedZone, size: CARDINAL, type: RTBasic.Type]
RETURNS[LONG POINTER] =
MACHINE CODE { Mopcodes.zMISC, aAllocateQuantizedNode };
ALLOCATEHEAPNODE:
PROC[zn: RTZones.PZone, size: CARDINAL, type: RTBasic.Type] RETURNS[LONG POINTER] =
MACHINE CODE { Mopcodes.zMISC, aAllocateHeapNode };
FREEOBJECT:
PROC[ptr: LONG POINTER] = MACHINE CODE { Mopcodes.zMISC, aFreeObject };
FREEQUANTIZEDNODE:
PROC[ptr: LONG POINTER, zn: RTZones.PZone] =
MACHINE CODE { Mopcodes.zMISC, aFreeQuantizedNode };
FREEPREFIXEDNODE:
PROC[ptr: LONG POINTER, zn: RTZones.PZone] =
MACHINE CODE { Mopcodes.zMISC, aFreePrefixedNode };
END.