/* Generated with C2C (Cedar To C)*/ /* Copyright (C) 1992 by Xerox Corporation. All rights reserved. */ /* time: July 22, 1992 11:25:37 am PDT */ /* C2C version: October 16, 1990 (native) */ /* ref-counting: off */ /* file: VMChunksImpl, module: VMChunksImpl */ /* switches: bcfhklnouw */ #include <cedar/InstallationSupport.h> #include <cedar/CedarExtra.h> static char versionStamp[] = "@(#)mob←version [1800547671,957849160] VMChunksImpl"; typedef unsigned word, *ptr; typedef unsigned char byte, *bPt; typedef unsigned short half, *hPt; typedef word (*fPt)(); typedef struct {word f0, f1, f2, f3, f4, f5;} W6; typedef struct {word f0, f1;} W2; #define SOURCE(p, l) /* source p, l */ static void NoName←Q840(); static void VMChunksImpl←P0(); static word IsChunk←P60(); static word NarrowChunk←P120(); static word AddressOfChunk←P180(); static word SizeOfChunk←P240(); static word DomainOfChunk←P300(); static word CreateDomain←P360(); static word InitRoot←P780(); static word NewChunk←P420(); static word AllocateChunk←P480(); static void Free←P540(); static void SplitNCreateNext←P600(); static void JoinNRemoveNext←P660(); static void Finalizor←P720(); static struct {unsigned f; char r[16];} string1 = {851984, "\257\300\153\122\055\127\300\071\027\236\110\100\214\000\000"}; static struct {unsigned f; char r[4];} string2 = {131074, "\003\004\000"}; static struct {unsigned f; char r[16];} string3 = {851984, "\257\300\153\122\055\127\300\071\027\236\110\100\244\000\000"}; static struct {unsigned f; char r[4];} string4 = {131074, "\004\003\000"}; static struct {unsigned f; char r[16];} string5 = {851984, "\257\300\153\122\055\127\300\071\027\236\110\100\230\000\000"}; static struct {unsigned f; char r[4];} string6 = {131074, "\004\014\000"}; static struct {unsigned f; char r[16];} string7 = {851984, "\257\300\153\122\055\127\300\071\027\236\110\100\200\000\000"}; static struct {unsigned f; char r[16];} string8 = {851984, "\257\300\157\176\027\244\300\037\074\133\137\100\150\000\000"}; static struct {unsigned f; char r[16];} string9 = {851984, "\257\300\246\171\266\212\300\131\156\315\206\100\150\000\000"}; static struct {unsigned f; char r[24];} string10 = {1441816, "\211\012\011\104\157\155\141\151\156\122\145\160\300\246\171\266\212\300\131\156\315\206\000"}; static struct {unsigned f; char r[24];} string11 = {1376280, "\211\011\010\103\150\165\156\153\122\145\160\300\246\171\266\212\300\131\156\315\206\000\000"}; static struct { word f0[9]; word f9; word f10; word f11; word f12; word f13; word f14; word f15; word f16; word f17; word f18; word f19; word f20; word f21; word f22; word f23; word f24; word f25; word f26; word f27; word f28; word f29; word f30; word f31; word f32; word f33; word f34[3]; } globalframe = { {0}, (word) Finalizor←P720, 0, (word) JoinNRemoveNext←P660, 0, (word) SplitNCreateNext←P600, 0, (word) Free←P540, 0, (word) AllocateChunk←P480, 0, (word) NewChunk←P420, 0, (word) CreateDomain←P360, 0, (word) DomainOfChunk←P300, 0, (word) SizeOfChunk←P240, 0, (word) AddressOfChunk←P180, 0, (word) NarrowChunk←P120, 0, (word) IsChunk←P60, 0, (word) VMChunksImpl←P0, {0} }; static void NoName←Q840() { register ptr gf←c063 = (ptr) &globalframe; word var←c6928; (* (( (ptr) gf←c063)+5) ) = (word) XR←GetTypeIndex((word) &string1, 0, (word) &string2); (* (( (ptr) gf←c063)+6) ) = (word) XR←GetTypeIndex((word) &string3, 0, (word) &string4); (* (( (ptr) gf←c063)+8) ) = (word) XR←GetTypeIndex((word) &string5, 0, (word) &string6); (void) XR←DeclareGlobalFrame((word) "VMChunksImpl", &globalframe, (word) XR←GetTypeIndex((word) &string7, 0, (word) &string2) , (word) (( (bPt) gf←c063)+132)/* var←c6544 */ ); var←c6928 = (word) XR←ImportInterface((word) "FinalizeOps", (word) XR←GetTypeIndexS((word) (&string8)), 7); (* (( (ptr) gf←c063)+35)/* var←c6576 */ ) = var←c6928; (void) XR←ImportProcS(var←c6928, 67634178); (void) XR←ImportProcS(var←c6928, 67634690); var←c6928 = (word) XR←ExportInterface((word) "VMChunks", (word) XR←GetTypeIndexS((word) (&string9)), 9); (* (( (ptr) gf←c063)+36)/* var←c6960 */ ) = var←c6928; (void) XR←ExportType((word) "DomainRep", (word) XR←GetTypeIndexS((word) (&string10)), (word) XR←GetTypeIndex((word) &string1, 0, (word) &string2) ); (void) XR←ExportType((word) "ChunkRep", (word) XR←GetTypeIndexS((word) (&string11)), (word) XR←GetTypeIndex((word) &string3, 0, (word) &string4) ); (void) XR←ExportProcS(var←c6928, (word) (( (bPt) gf←c063)+84)/* var←c6352 */ , 67633666); (void) XR←ExportProcS(var←c6928, (word) (( (bPt) gf←c063)+124)/* var←c6512 */ , 67371777); (void) XR←ExportProcS(var←c6928, (word) (( (bPt) gf←c063)+116)/* var←c6480 */ , 67372033); (void) XR←ExportProcS(var←c6928, (word) (( (bPt) gf←c063)+68)/* var←c6288 */ , 67634434); (void) XR←ExportProcS(var←c6928, (word) (( (bPt) gf←c063)+108)/* var←c6448 */ , 67372545); (void) XR←ExportProcS(var←c6928, (word) (( (bPt) gf←c063)+100)/* var←c6416 */ , 67372801); (void) XR←ExportProcS(var←c6928, (word) (( (bPt) gf←c063)+92)/* var←c6384 */ , 67373057); } static void VMChunksImpl←P0(formal←c020, formal←c019) word formal←c020; word formal←c019; { register ptr gf←c6992 = (ptr) &globalframe; /* VMChunksImpl: */ SOURCE(34, 3210) SOURCE(3053, 81) { word pd12; pd12 = (* (( (ptr) (* (( (ptr) gf←c6992)+35)/* var←c6576 */ ))+10) ); (* (( (ptr) gf←c6992)+4)/* finalizationQueue←v3028 */ ) = (word) ( *( (fPt) ((* (ptr) pd12 ))))((word) (( (bPt) gf←c6992)+36) /* var←c6160 */ , 3, pd12); }; } static word IsChunk←P60(x←v3496) word x←v3496; { register ptr gf←c7024 = (ptr) &globalframe; word var←c3556; /* IsChunk: */ SOURCE(586, 102) SOURCE(639, 49) { word tc13; if ((x←v3496 != 0)) { if ((x←v3496 == 0)) { tc13 = (word) 1; } else { tc13 = (word) ((* (( (ptr) gf←c7024)+6) ) == XR←GetReferentType(x←v3496)); }; } else { tc13 = (word) 0; }; return(tc13); }; } static word NarrowChunk←P120(x←v3616) word x←v3616; { register ptr gf←c7056 = (ptr) &globalframe; word var←c3672; /* NarrowChunk: */ SOURCE(692, 97) SOURCE(750, 39) return(XR←Narrow(x←v3616, (* (( (ptr) gf←c7056)+6) ))); } static word AddressOfChunk←P180(chunk←v3732) word chunk←v3732; { word var←c3776; /* AddressOfChunk: */ SOURCE(793, 84) SOURCE(855, 22) return((* (ptr) (* (ptr) chunk←v3732 ) )); } static word SizeOfChunk←P240(chunk←v3836) word chunk←v3836; { word var←c3880; /* SizeOfChunk: */ SOURCE(881, 81) SOURCE(940, 22) return((* (( (ptr) (* (ptr) chunk←v3836 ))+1) )); } static word DomainOfChunk←P300(chunk←v3940) word chunk←v3940; { word var←c3984; /* DomainOfChunk: */ SOURCE(966, 82) SOURCE(1029, 19) return((* (( (ptr) chunk←v3940)+1) )); } static word CreateDomain←P360(startAddress←v4044, size←v4072) word startAddress←v4044; word size←v4072; { W6 var←c7088; register ptr gf←c7120 = (ptr) &globalframe; word d←v4116; /* declaration of var←c6640 skipped */ /* CreateDomain: */ SOURCE(1052, 307) { word tmpAddr14; tmpAddr14 = (word) (( (ptr) &var←c7088)+4)/* var←c6640 */ ; (* (ptr) tmpAddr14 ) = ( ((word) (fPt) InitRoot←P780) ); (* (( (ptr) tmpAddr14) + 1) ) = 1; }; SOURCE(1052, 307) d←v4116 = 0; SOURCE(1302, 18) d←v4116 = XR←NewObject(20, (* (( (ptr) gf←c7120)+5) )); SOURCE(1322, 37) (* (( (ptr) d←v4116)+4) ) = (word) InitRoot←P780(startAddress←v4044, size←v4072, (word) (( (bPt) &var←c7088)+16)/* var←c6640 */ ) ; SOURCE(1052, 307) return(d←v4116); } static word InitRoot←P780(startAddress←v4820, size←v4848, formal←c7184) word startAddress←v4820; word size←v4848; word formal←c7184; { register ptr gf←c7152 = (ptr) &globalframe; word c←v4892; formal←c7184 = (formal←c7184 - 16); /* InitRoot: */ SOURCE(1135, 162) SOURCE(1135, 162) c←v4892 = 0; SOURCE(1217, 21) c←v4892 = XR←NewObject(20, (* (( (ptr) gf←c7152)+8) )); SOURCE(1240, 13) (* (( (ptr) c←v4892)+1) ) = size←v4848; SOURCE(1255, 21) (* (ptr) c←v4892 ) = startAddress←v4820; SOURCE(1278, 19) (* (( (ptr) c←v4892)+3) ) = c←v4892; (* (( (ptr) c←v4892)+2) ) = c←v4892; SOURCE(1135, 162) return(c←v4892); } static word NewChunk←P420(domain←v4176, c←v4204) word domain←v4176; word c←v4204; { register ptr gf←c7216 = (ptr) &globalframe; word ch←v4260; /* NewChunk: */ SOURCE(1419, 204) SOURCE(1419, 204) ch←v4260 = 0; SOURCE(1496, 46) { word var←c6768; var←c6768 = XR←NewObject(8, (* (( (ptr) gf←c7216)+6) )); (* (ptr) var←c6768 ) = c←v4204; (* (( (ptr) var←c6768)+1) ) = domain←v4176; ch←v4260 = var←c6768; }; SOURCE(1544, 17) (* (( (ptr) c←v4204)+4) ) = 1; SOURCE(1564, 59) { word var←c6800; word pd15; pd15 = (* (( (ptr) (* (( (ptr) gf←c7216)+35)/* var←c6576 */ ))+8) ); var←c6800 = (word) ( *( (fPt) ((* (ptr) pd15 ))))(ch←v4260, (* (( (ptr) gf←c7216)+4)/* finalizationQueue←v3028 */ ), pd15) ; }; SOURCE(1419, 204) return(ch←v4260); } static word AllocateChunk←P480(domain←v4320, size←v4348) word domain←v4320; word size←v4348; { word var←c4392; word root←v4932; word c←v4960; /* AllocateChunk: */ SOURCE(1627, 526) (void) (XR←MonitorEntry(domain←v4320)); SOURCE(1709, 36) root←v4932 = (* (( (ptr) domain←v4320)+4) ); SOURCE(1747, 26) c←v4960 = root←v4932; SOURCE(1775, 57) size←v4348 = (((size←v4348 + 7) >> 3) << 3); SOURCE(1835, 27) if ((size←v4348 == 0)) { SOURCE(1850, 12) (void) (XR←MonitorExit(domain←v4320)); return(0); }; SOURCE(1864, 8) c←v4960 = root←v4932; SOURCE(1874, 97) lab←L100002: ; SOURCE(1877, 64) if ( ( (0 == (* (( (ptr) c←v4960)+4) )) ? ((* (( (ptr) c←v4960)+1) ) == size←v4348) : 0 ) ) { SOURCE(1914, 27) { word var←c6832; var←c6832 = (word) NewChunk←P420(domain←v4320, c←v4960); (void) (XR←MonitorExit(domain←v4320)); return(var←c6832); }; }; SOURCE(1944, 10) c←v4960 = (* (( (ptr) c←v4960)+3) ); SOURCE(1956, 15) if ((c←v4960 == root←v4932)) { SOURCE(1971, 4) goto lab←L100001; }; goto lab←L100002; lab←L100001: ; SOURCE(1987, 8) c←v4960 = root←v4932; SOURCE(1997, 128) lab←L100005: ; SOURCE(2000, 93) if ( ( (0 == (* (( (ptr) c←v4960)+4) )) ? ((* (( (ptr) c←v4960)+1) ) > size←v4348) : 0 ) ) { SOURCE(2038, 25) (void) SplitNCreateNext←P600(c←v4960, size←v4348); SOURCE(2065, 28) { word var←c6864; var←c6864 = (word) NewChunk←P420(domain←v4320, c←v4960); (void) (XR←MonitorExit(domain←v4320)); return(var←c6864); }; }; SOURCE(2098, 10) c←v4960 = (* (( (ptr) c←v4960)+3) ); SOURCE(2110, 15) if ((c←v4960 == root←v4932)) { SOURCE(2125, 4) goto lab←L100004; }; goto lab←L100005; lab←L100004: ; SOURCE(2141, 12) (void) (XR←MonitorExit(domain←v4320)); return(0); } static void Free←P540(domain←v4452, c←v4480) word domain←v4452; word c←v4480; { /* Free: */ SOURCE(2159, 215) (void) (XR←MonitorEntry(domain←v4452)); SOURCE(2218, 20) if ((0 == (* (( (ptr) c←v4480)+4) ))) { SOURCE(2238, 5) (void) XR←RaiseUnnamedError(); }; SOURCE(2245, 18) (* (( (ptr) c←v4480)+4) ) = 0; SOURCE(2265, 51) if ((0 == (* (( (ptr) (* (( (ptr) c←v4480)+3) ))+4) ))) { SOURCE(2290, 26) (void) JoinNRemoveNext←P660(domain←v4452, c←v4480); }; SOURCE(2318, 56) if ((0 == (* (( (ptr) (* (( (ptr) c←v4480)+2) ))+4) ))) { SOURCE(2343, 31) (void) JoinNRemoveNext←P660(domain←v4452, (* (( (ptr) c←v4480)+2) )); }; SOURCE(2159, 215) (void) (XR←MonitorExit(domain←v4452)); return; } static void SplitNCreateNext←P600(c←v4552, nbytes←v4580) word c←v4552; word nbytes←v4580; { register ptr gf←c7248 = (ptr) &globalframe; word new←v5028; /* SplitNCreateNext: */ SOURCE(2380, 316) SOURCE(2452, 41) new←v5028 = XR←NewObject(20, (* (( (ptr) gf←c7248)+8) )); SOURCE(2495, 37) if ((0 != (* (( (ptr) c←v4552)+4) )) || (nbytes←v4580 >= (* (( (ptr) c←v4552)+1) ))) { SOURCE(2532, 5) (void) XR←RaiseUnnamedError(); }; SOURCE(2559, 26) (* (( (ptr) new←v5028)+1) ) = ((* (( (ptr) c←v4552)+1) ) - nbytes←v4580); SOURCE(2587, 15) (* (( (ptr) c←v4552)+1) ) = nbytes←v4580; SOURCE(2604, 26) (* (ptr) new←v5028 ) = ((* (ptr) c←v4552 ) + nbytes←v4580); SOURCE(2632, 17) (* (( (ptr) new←v5028)+3) ) = (* (( (ptr) c←v4552)+3) ); SOURCE(2651, 12) (* (( (ptr) new←v5028)+2) ) = c←v4552; SOURCE(2665, 17) (* (( (ptr) (* (( (ptr) c←v4552)+3) ))+2) ) = new←v5028; SOURCE(2684, 12) (* (( (ptr) c←v4552)+3) ) = new←v5028; } static void JoinNRemoveNext←P660(domain←v4652, c←v4680) word domain←v4652; word c←v4680; { word root←v5084; word remove←v5112; /* JoinNRemoveNext: */ SOURCE(2702, 345) SOURCE(2775, 36) root←v5084 = (* (( (ptr) domain←v4652)+4) ); SOURCE(2813, 33) remove←v5112 = (* (( (ptr) c←v4680)+3) ); SOURCE(2848, 26) if ((remove←v5112 == root←v5084)) { SOURCE(2868, 6) return; }; SOURCE(2911, 38) if ((0 != (* (( (ptr) c←v4680)+4) )) || (0 != (* (( (ptr) remove←v5112)+4) ))) { SOURCE(2949, 5) (void) XR←RaiseUnnamedError(); }; SOURCE(2976, 20) (* (( (ptr) c←v4680)+3) ) = (* (( (ptr) remove←v5112)+3) ); SOURCE(2998, 20) (* (( (ptr) (* (( (ptr) remove←v5112)+3) ))+2) ) = c←v4680; SOURCE(3020, 27) (* (( (ptr) c←v4680)+1) ) = ((* (( (ptr) c←v4680)+1) ) + (* (( (ptr) remove←v5112)+1) )); } static void Finalizor←P720(handle←v5844, object←v5872) word handle←v5844; word object←v5872; { register ptr gf←c7280 = (ptr) &globalframe; word chunk←v5180; /* Finalizor: */ SOURCE(3136, 108) SOURCE(3176, 42) chunk←v5180 = XR←Narrow(object←v5872, (* (( (ptr) gf←c7280)+6) )); SOURCE(3220, 24) (void) Free←P540((* (( (ptr) chunk←v5180)+1) ), (* (ptr) chunk←v5180 )); } /* file: VMChunksImpl, module: VMChunksImpl, compiled at: July 22, 1992 11:25:36 am PDT */ extern void XR←install←VMChunksImpl() { NoName←Q840(); } extern void XR←run←VMChunksImpl() { XR←Start(&globalframe); }