mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-04-14 01:57:57 -07:00
Merging mmdevel_bitset
Copied from Perforce Change: 16806 ServerID: perforce.ravenbrook.com
This commit is contained in:
parent
cdfe6913d4
commit
92c70c8458
8 changed files with 81 additions and 57 deletions
12
mps/src/ld.c
12
mps/src/ld.c
|
|
@ -1,6 +1,6 @@
|
|||
/* impl.c.ld: LOCATION DEPENDENCY IMPLEMENTATION
|
||||
*
|
||||
* $HopeName: MMsrc!ld.c(trunk.3) $
|
||||
* $HopeName: MMsrc!ld.c(trunk.4) $
|
||||
* Copyright (C) 1996 Harlequin Group, all rights reserved.
|
||||
*
|
||||
* .def: A location dependency records the fact that the bit-patterns
|
||||
|
|
@ -48,7 +48,7 @@
|
|||
|
||||
#include "mpm.h"
|
||||
|
||||
SRCID(ld, "$HopeName: MMsrc!ld.c(trunk.3) $");
|
||||
SRCID(ld, "$HopeName: MMsrc!ld.c(trunk.4) $");
|
||||
|
||||
|
||||
/* LDReset -- reset a dependency to empty
|
||||
|
|
@ -71,7 +71,7 @@ void LDReset(LD ld, Space space)
|
|||
ShieldExpose(space, seg); /* .ld.access */
|
||||
}
|
||||
ld->epoch = space->epoch;
|
||||
ld->rs = RefSetEmpty;
|
||||
ld->rs = RefSetEMPTY;
|
||||
if(b) {
|
||||
ShieldCover(space, seg);
|
||||
}
|
||||
|
|
@ -151,7 +151,7 @@ Bool LDIsStale(LD ld, Space space, Addr addr)
|
|||
rs = space->prehistory; /* .stale.old */
|
||||
}
|
||||
|
||||
return RefSetInter(ld->rs, rs) != RefSetEmpty;
|
||||
return RefSetInter(ld->rs, rs) != RefSetEMPTY;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -166,12 +166,12 @@ void LDAge(Space space, RefSet rs)
|
|||
Size i;
|
||||
|
||||
AVERT(Space, space);
|
||||
AVER(rs != RefSetEmpty);
|
||||
AVER(rs != RefSetEMPTY);
|
||||
|
||||
/* Replace the entry for epoch - SPACE_LD_LENGTH by an empty */
|
||||
/* set which will become the set which has moved since the */
|
||||
/* current epoch. */
|
||||
space->history[space->epoch % SPACE_LD_LENGTH] = RefSetEmpty;
|
||||
space->history[space->epoch % SPACE_LD_LENGTH] = RefSetEMPTY;
|
||||
|
||||
/* Record the fact that the moved set has moved, by adding it */
|
||||
/* to all the sets in the history, including the set for the */
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
/* impl.h.misc: MISCELLANEOUS DEFINITIONS
|
||||
*
|
||||
* $HopeName: MMsrc!misc.h(trunk.6) $
|
||||
* $HopeName: MMsrc!misc.h(trunk.7) $
|
||||
* Copyright (C) 1994,1995,1996 Harlequin Group, all rights reserved
|
||||
*
|
||||
* Small general things which are useful for C but aren't part of the
|
||||
|
|
@ -66,11 +66,13 @@ typedef const struct SrcIdStruct {
|
|||
/* UNUSED -- declare parameter unused
|
||||
*
|
||||
* This macro supresses warnings about unused parameters. It should be
|
||||
* applied to the parameter at the beginning of the body of the procedure.
|
||||
* applied to the parameter at the beginning of the body of the
|
||||
* procedure.
|
||||
*
|
||||
* The cast to void appears to work for GCC, MSVC, and CodeWarrior.
|
||||
* It's a shame there's no way to ensure that the parameter won't be used.
|
||||
* We could scramble it, but that's undesirable in release versions.
|
||||
* It's a shame there's no way to ensure that the parameter won't be
|
||||
* used. We could scramble it, but that's undesirable in release
|
||||
* versions.
|
||||
*/
|
||||
|
||||
#define UNUSED(param) ((void)param)
|
||||
|
|
@ -88,4 +90,26 @@ typedef const struct SrcIdStruct {
|
|||
((type *)((char *)(p) - offsetof(type, field)))
|
||||
|
||||
|
||||
/* Bit Sets -- sets of integers in [0,N-1].
|
||||
*
|
||||
* Can be used on any unsigned integral type, ty. These defintions
|
||||
* are _syntactic_, hence macroid, hence upper case
|
||||
* (guide.c.naming.macro.special).
|
||||
*/
|
||||
|
||||
#define BS_EMPTY(ty) ((ty)0)
|
||||
#define BS_COMP(s) (~(s))
|
||||
#define BS_UNIV(ty) BS_COMP(BS_EMPTY(ty))
|
||||
#define BS_SINGLE(ty, i) ((ty)1 << (i))
|
||||
#define BS_IS_MEMBER(s, i) (((s) >> (i)) & 1)
|
||||
#define BS_UNION(s1, s2) ((s1) | (s2))
|
||||
#define BS_ADD(ty, s, i) BS_UNION(s, BS_SINGLE(ty, i))
|
||||
#define BS_INTER(s1, s2) ((s1) & (s2))
|
||||
#define BS_DIFF(s1, s2) BS_INTER(s1, BS_COMP(s2))
|
||||
#define BS_DEL(ty, s, i) BS_DIFF(s, BS_SINGLE(ty, i))
|
||||
#define BS_SUPER(s1, s2) (BS_INTER(s1, s2) == s2)
|
||||
#define BS_SUB(s1, s2) BS_SUPER(s2, s1)
|
||||
#define BS_IS_SINGLE(i) (((i) & (i)-1) == 0)
|
||||
|
||||
|
||||
#endif /* misc_h */
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
/* impl.h.mpm: MEMORY POOL MANAGER DEFINITIONS
|
||||
*
|
||||
* $HopeName: MMsrc!mpm.h(trunk.15) $
|
||||
* $HopeName: MMsrc!mpm.h(trunk.16) $
|
||||
* Copyright (C) 1996 Harlequin Group, all rights reserved.
|
||||
*/
|
||||
|
||||
|
|
@ -45,7 +45,7 @@ extern Bool BoolCheck(Bool b);
|
|||
extern Bool FunCheck(Fun f);
|
||||
extern Bool AttrCheck(Attr attr);
|
||||
extern Bool RootVarCheck(RootVar rootVar);
|
||||
#define FUNCHECK(f) (FunCheck((Fun)f))
|
||||
#define FUNCHECK(f) (FunCheck((Fun)f))
|
||||
|
||||
|
||||
/* Address/Size Interface -- see impl.c.mpm */
|
||||
|
|
@ -183,7 +183,7 @@ extern Align (PoolAlignment)(Pool pool);
|
|||
#define PoolAlignment(pool) ((pool)->alignment)
|
||||
|
||||
extern Ring (PoolSegRing)(Pool pool);
|
||||
#define PoolSegRing(pool) (&(pool)->segRing)
|
||||
#define PoolSegRing(pool) (&(pool)->segRing)
|
||||
|
||||
extern Res PoolSegAlloc(Seg *segReturn, Pool pool, Size size);
|
||||
extern void PoolSegFree(Pool pool, Seg seg);
|
||||
|
|
@ -232,17 +232,15 @@ extern void PoolNoAccess(Pool pool, Seg seg, AccessSet mode);
|
|||
|
||||
/* Trace Interface -- see impl.c.trace */
|
||||
|
||||
extern TraceSet (TraceSetAdd)(TraceSet set, TraceId id);
|
||||
#define TraceSetAdd(set, id) ((set) | ((TraceSet)1 << (id)))
|
||||
#define TraceSetIsMember(ts, ti)BS_IS_MEMBER(ts, ti)
|
||||
#define TraceSetAdd(ts, ti) BS_ADD(TraceSet, ts, ti)
|
||||
#define TraceSetDel(ts, ti) BS_DEL(TraceSet, ts, ti)
|
||||
#define TraceSetUnion(ts1, ts2) BS_UNION(ts1, ts2)
|
||||
|
||||
extern TraceSet (TraceSetDelete)(TraceSet set, TraceId id);
|
||||
#define TraceSetDelete(set, id) ((set) & ~((TraceSet)1 << (id)))
|
||||
|
||||
extern Bool (TraceSetIsMember)(TraceSet set, TraceId id);
|
||||
#define TraceSetIsMember(set, id) (((set) >> (id)) & 1)
|
||||
|
||||
extern TraceSet (TraceSetUnion)(TraceSet set1, TraceSet set2);
|
||||
#define TraceSetUnion(set1, set2) ((set1) | (set2))
|
||||
extern TraceSet (TraceSetAdd)(TraceSet ts, TraceId id);
|
||||
extern TraceSet (TraceSetDel)(TraceSet ts, TraceId id);
|
||||
extern TraceSet (TraceSetUnion)(TraceSet ts1, TraceSet ts2);
|
||||
extern Bool (TraceSetIsMember)(TraceSet ts, TraceId id);
|
||||
|
||||
extern Res TraceCreate(TraceId *tiReturn, Space space);
|
||||
extern void TraceDestroy(Space space, TraceId ti);
|
||||
|
|
@ -354,23 +352,23 @@ extern void BufferReset(Buffer buffer);
|
|||
extern Bool BufferIsReset(Buffer buffer);
|
||||
extern Bool BufferIsReady(Buffer buffer);
|
||||
extern AP (BufferAP)(Buffer buffer);
|
||||
#define BufferAP(buffer) (&(buffer)->apStruct)
|
||||
#define BufferAP(buffer) (&(buffer)->apStruct)
|
||||
extern Buffer BufferOfAP(AP ap);
|
||||
extern Space BufferSpace(Buffer buffer);
|
||||
extern Pool (BufferPool)(Buffer buffer);
|
||||
#define BufferPool(buffer) ((buffer)->pool)
|
||||
#define BufferPool(buffer) ((buffer)->pool)
|
||||
extern Seg (BufferSeg)(Buffer buffer);
|
||||
#define BufferSeg(buffer) ((buffer)->seg)
|
||||
#define BufferSeg(buffer) ((buffer)->seg)
|
||||
extern Rank (BufferRank)(Buffer buffer);
|
||||
#define BufferRank(buffer) ((buffer)->rank)
|
||||
#define BufferRank(buffer) ((buffer)->rank)
|
||||
extern Addr (BufferBase)(Buffer buffer);
|
||||
#define BufferBase(buffer) ((buffer)->base)
|
||||
#define BufferBase(buffer) ((buffer)->base)
|
||||
extern Addr (BufferGetInit)(Buffer buffer);
|
||||
#define BufferGetInit(buffer) (BufferAP(buffer)->init)
|
||||
#define BufferGetInit(buffer) (BufferAP(buffer)->init)
|
||||
extern Addr (BufferAlloc)(Buffer buffer);
|
||||
#define BufferAlloc(buffer) (BufferAP(buffer)->alloc)
|
||||
#define BufferAlloc(buffer) (BufferAP(buffer)->alloc)
|
||||
extern Addr (BufferLimit)(Buffer buffer);
|
||||
#define BufferLimit(buffer) (BufferAP(buffer)->limit)
|
||||
#define BufferLimit(buffer) (BufferAP(buffer)->limit)
|
||||
|
||||
|
||||
/* Format Interface -- see impl.c.format */
|
||||
|
|
@ -393,16 +391,16 @@ extern Res FormatDescribe(Format format, mps_lib_FILE *stream);
|
|||
|
||||
extern Bool RankCheck(Rank rank);
|
||||
|
||||
#define RefSetEmpty ((RefSet)0)
|
||||
#define RefSetUniv ((RefSet)-1)
|
||||
#define RefSetUnion(rs1, rs2) ((rs1) | (rs2))
|
||||
#define RefSetInter(rs1, rs2) ((rs1) & (rs2))
|
||||
#define RefSetZone(space, addr) \
|
||||
(((Word)(addr) >> space->zoneShift) & (WORD_WIDTH - 1))
|
||||
#define RefSetUnion(rs1, rs2) BS_UNION(rs1, rs2)
|
||||
#define RefSetInter(rs1, rs2) BS_INTER(rs1, rs2)
|
||||
#define RefSetAdd(space, rs, addr) \
|
||||
((rs) | ((RefSet)1 << RefSetZone(space, addr)))
|
||||
BS_ADD(RefSet, rs, RefSetZone(space, addr))
|
||||
#define RefSetIsMember(space, rs, addr) \
|
||||
(((rs) >> RefSetZone(space, addr)) & 1)
|
||||
BS_IS_MEMBER(rs, RefSetZone(space, addr))
|
||||
#define RefSetSuper(rs1, rs2) BS_SUPER(rs1, rs2)
|
||||
|
||||
extern RefSet RefSetOfSeg(Space space, Seg seg);
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
/* impl.h.mpmtypes: MEMORY POOL MANAGER TYPES
|
||||
*
|
||||
* $HopeName: MMsrc!mpmtypes.h(trunk.10) $
|
||||
* $HopeName: MMsrc!mpmtypes.h(trunk.11) $
|
||||
* Copyright (C) 1996 Harlequin Group, all rights reserved.
|
||||
*
|
||||
* .readership: MM developers.
|
||||
|
|
@ -117,7 +117,9 @@ typedef Res (*RootScanRegMethod)(ScanState ss, Thread thread, void *p,
|
|||
#define AccessWRITE ((AccessSet)(1<<1))
|
||||
#define RingNONE ((Ring)0) /* design.mps.ring */
|
||||
#define TraceIdNONE ((TraceId)-1) /* design.mps.tracer */
|
||||
#define TraceSetEMPTY ((TraceSet)0) /* design.mps.tracer */
|
||||
#define RefSetEMPTY BS_EMPTY(RefSet)
|
||||
#define RefSetUNIV BS_UNIV(RefSet)
|
||||
#define TraceSetEMPTY BS_EMPTY(TraceSet) /* design.mps.tracer */
|
||||
#define AttrFMT ((Attr)(1<<0)) /* design.mps.type.attr */
|
||||
#define AttrSCAN ((Attr)(1<<1))
|
||||
#define AttrPM_NO_READ ((Attr)(1<<2))
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
*
|
||||
* MANUAL RANK GUARDIAN POOL
|
||||
*
|
||||
* $HopeName: MMsrc!poolmrg.c(trunk.1) $
|
||||
* $HopeName: MMsrc!poolmrg.c(trunk.2) $
|
||||
* Copyright(C) 1995,1997 Harlequin Group, all rights reserved
|
||||
*
|
||||
* READERSHIP
|
||||
|
|
@ -35,7 +35,7 @@
|
|||
#include "poolmrg.h"
|
||||
|
||||
|
||||
SRCID(poolmrg, "$HopeName: MMsrc!poolmrg.c(trunk.1) $");
|
||||
SRCID(poolmrg, "$HopeName: MMsrc!poolmrg.c(trunk.2) $");
|
||||
|
||||
#define MRGSig ((Sig)0x519B0349)
|
||||
|
||||
|
|
@ -209,7 +209,7 @@ static Res MRGGroupScan(ScanState ss, MRGGroup group, MRG mrg)
|
|||
}
|
||||
} TRACE_SCAN_END(ss);
|
||||
|
||||
group->grey = TraceSetDelete(group->grey, ss->traceId);
|
||||
group->grey = TraceSetDel(group->grey, ss->traceId);
|
||||
ShieldLower(space, group->refseg, AccessREAD | AccessWRITE);
|
||||
ShieldCover(space, group->refseg);
|
||||
|
||||
|
|
@ -469,7 +469,7 @@ static void MRGAccess(Pool pool, Seg seg, AccessSet mode)
|
|||
|
||||
ss.fix = TraceFix;
|
||||
ss.zoneShift = space->zoneShift;
|
||||
ss.summary = RefSetEmpty;
|
||||
ss.summary = RefSetEMPTY;
|
||||
ss.space = space;
|
||||
ss.sig = ScanStateSig;
|
||||
ss.rank = RankEXACT; /* .access.exact */
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
/* impl.c.ref: REFERENCES
|
||||
*
|
||||
* $HopeName: MMsrc!ref.c(MMdevel_restr.4) $
|
||||
* $HopeName: MMsrc!ref.c(trunk.4) $
|
||||
* Copyright (C) 1995 Harlequin Group, all rights reserved
|
||||
*
|
||||
* Ref is an alias for Addr which can be used to document where
|
||||
|
|
@ -24,7 +24,7 @@
|
|||
|
||||
#include "mpm.h"
|
||||
|
||||
SRCID(ref, "$HopeName: MMsrc!ref.c(MMdevel_restr.4) $");
|
||||
SRCID(ref, "$HopeName: MMsrc!ref.c(trunk.4) $");
|
||||
|
||||
Bool RankCheck(Rank rank)
|
||||
{
|
||||
|
|
@ -63,7 +63,7 @@ RefSet RefSetOfSeg(Space space, Seg seg)
|
|||
limit = (((Word)SegLimit(space, seg)-1) >> space->zoneShift) + 1;
|
||||
|
||||
if(limit - base >= WORD_WIDTH) /* .rsos.univ */
|
||||
return RefSetUniv;
|
||||
return RefSetUNIV;
|
||||
|
||||
base &= WORD_WIDTH - 1;
|
||||
limit &= WORD_WIDTH - 1;
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
*
|
||||
* ROOT IMPLEMENTATION
|
||||
*
|
||||
* $HopeName: MMsrc!root.c(trunk.17) $
|
||||
* $HopeName: MMsrc!root.c(trunk.18) $
|
||||
*
|
||||
* Copyright (C) 1995,1996 Harlequin Group, all rights reserved
|
||||
*
|
||||
|
|
@ -13,7 +13,7 @@
|
|||
|
||||
#include "mpm.h"
|
||||
|
||||
SRCID(root, "$HopeName: MMsrc!root.c(trunk.17) $");
|
||||
SRCID(root, "$HopeName: MMsrc!root.c(trunk.18) $");
|
||||
|
||||
/* .rootcheck: Keep synchonized with impl.h.mpmst.root */
|
||||
Bool RootCheck(Root root)
|
||||
|
|
@ -251,7 +251,7 @@ Res RootScan(ScanState ss, Root root)
|
|||
NOTREACHED;
|
||||
}
|
||||
|
||||
root->grey = TraceSetDelete(root->grey, ss->traceId);
|
||||
root->grey = TraceSetDel(root->grey, ss->traceId);
|
||||
|
||||
return ResOK;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
/* impl.c.trace: GENERIC TRACER IMPLEMENTATION
|
||||
*
|
||||
* $HopeName: MMsrc!trace.c(trunk.17) $
|
||||
* $HopeName: MMsrc!trace.c(trunk.18) $
|
||||
*/
|
||||
|
||||
#include "mpm.h"
|
||||
|
||||
SRCID(trace, "$HopeName: MMsrc!trace.c(trunk.17) $");
|
||||
SRCID(trace, "$HopeName: MMsrc!trace.c(trunk.18) $");
|
||||
|
||||
Bool ScanStateCheck(ScanState ss)
|
||||
{
|
||||
|
|
@ -46,7 +46,7 @@ Res TraceCreate(TraceId *tiReturn, Space space)
|
|||
return ResLIMIT;
|
||||
|
||||
found:
|
||||
space->trace[ti].condemned = RefSetEmpty;
|
||||
space->trace[ti].condemned = RefSetEMPTY;
|
||||
space->busyTraces = TraceSetAdd(space->busyTraces, ti);
|
||||
|
||||
*tiReturn = ti;
|
||||
|
|
@ -56,7 +56,7 @@ found:
|
|||
void TraceDestroy(Space space, TraceId ti)
|
||||
{
|
||||
AVERT(Space, space);
|
||||
space->busyTraces = TraceSetDelete(space->busyTraces, ti);
|
||||
space->busyTraces = TraceSetDel(space->busyTraces, ti);
|
||||
}
|
||||
|
||||
Res TraceFlip(Space space, TraceId ti, RefSet condemned)
|
||||
|
|
@ -72,7 +72,7 @@ Res TraceFlip(Space space, TraceId ti, RefSet condemned)
|
|||
ShieldSuspend(space);
|
||||
|
||||
trace = &space->trace[ti];
|
||||
AVER(trace->condemned == RefSetEmpty);
|
||||
AVER(trace->condemned == RefSetEMPTY);
|
||||
trace->condemned = condemned;
|
||||
|
||||
/* Update location dependency structures. condemned is
|
||||
|
|
@ -111,7 +111,7 @@ Res TraceFlip(Space space, TraceId ti, RefSet condemned)
|
|||
ss.fix = TraceFix;
|
||||
ss.zoneShift = space->zoneShift;
|
||||
ss.condemned = space->trace[ti].condemned;
|
||||
ss.summary = RefSetEmpty;
|
||||
ss.summary = RefSetEMPTY;
|
||||
ss.space = space;
|
||||
ss.traceId = ti;
|
||||
ss.weakSplat = (Addr)0xadd4badd;
|
||||
|
|
@ -177,7 +177,7 @@ Size TracePoll(Space space, TraceId ti)
|
|||
|
||||
trace = &space->trace[ti];
|
||||
|
||||
if(trace->condemned != RefSetEmpty) {
|
||||
if(trace->condemned != RefSetEMPTY) {
|
||||
res = TraceRun(space, ti, &finished);
|
||||
AVER(res == ResOK); /* @@@@ */
|
||||
if(finished) {
|
||||
|
|
@ -289,7 +289,7 @@ Res TraceRun(Space space, TraceId ti, Bool *finishedReturn)
|
|||
ss.fix = TraceFix;
|
||||
ss.zoneShift = space->zoneShift;
|
||||
ss.condemned = space->trace[ti].condemned;
|
||||
ss.summary = RefSetEmpty;
|
||||
ss.summary = RefSetEMPTY;
|
||||
ss.space = space;
|
||||
ss.traceId = ti;
|
||||
ss.sig = ScanStateSig;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue