1
Fork 0
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:
Richard Brooksby 1997-02-25 18:28:21 +00:00
parent cdfe6913d4
commit 92c70c8458
8 changed files with 81 additions and 57 deletions

View file

@ -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 */

View file

@ -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 */

View file

@ -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);

View file

@ -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))

View file

@ -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 */

View file

@ -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;

View file

@ -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;
}

View file

@ -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;